diff --git a/coolstore-partner-common/pom.xml b/coolstore-partner-common/pom.xml index a6081765b..c499b9524 100644 --- a/coolstore-partner-common/pom.xml +++ b/coolstore-partner-common/pom.xml @@ -103,6 +103,10 @@ openpdf 1.3.30 + + org.bouncycastle + bcprov-jdk15on + org.icepdf.os 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 bb98209a9..8081b0051 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 @@ -235,4 +235,5 @@ public class CommonConstants { public static final Integer INDEX_ZERO = 0; public static final Integer INDEX_ONE = 1; + public static final Integer INDEX_TWO = 2; } 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 7dbe943e4..e20a622be 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 @@ -289,4 +289,19 @@ public class RedisConstant { public static final String HUO_MA_STORE_ID = "huo_ma_store_id"; public static final String HUO_MA_TOKEN= "huo_ma_token:{0}"; + + /** + * 钱包开通失败/打标失败原因 wallet_open_fail:storeId:1/2 1平安/2网商 + */ + public static final String WALLET_OPEN_FAIL = "wallet_open_fail:{0}:{1}"; + + /** + * 打标接口创建网商账户失败标识 wallet_online_bank_tag_fail:storeId + */ + public static final String WALLET_ONLINE_BANK_TAG_FAIL = "wallet_online_bank_tag_fail:{0}"; + + /** + * 网商账户是否已激活 + */ + public static final String WALLET_ONLINE_BANK_ACTIVATED = "wallet_online_bank_activated:{0}"; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationDescStatus.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationDescStatus.java new file mode 100644 index 000000000..ca91fe397 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationDescStatus.java @@ -0,0 +1,37 @@ +package com.cool.store.enums.Decoration; + +/** + * @Author suzhuhong + * @Date 2025/11/3 9:40 + * @Version 1.0 + */ +public enum DecorationDescStatus { + + TO_BE_ASSIGNED(0, "待分配"), + ASSIGNED(1, "已分配"), + ; + + + + + private Integer code; + + private String descStatus; + + DecorationDescStatus(Integer code, String descStatus) { + this.code = code; + this.descStatus = descStatus; + } + + public Integer getCode() { + return code; + } + + public String getDescStatus() { + return descStatus; + } + + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java new file mode 100644 index 000000000..807068d63 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums.Decoration; + +/** + * @Author suzhuhong + * @Date 2025/10/30 14:35 + * @Version 1.0 + */ +public enum DecorationUseSystemEnum { + + CRM(1,"CRM"), + HQT(2,"红圈通"); + + + private Integer code; + + private String userSystemName; + + + DecorationUseSystemEnum(Integer code, String userSystemName) { + this.code = code; + this.userSystemName = userSystemName; + } + + public Integer getCode() { + return code; + } + + public String getUserSystemName() { + return userSystemName; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index bfec7c4b5..446014068 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -300,6 +300,7 @@ public enum ErrorCodeEnum { PRODUCTS_DISCARDED(1511034,"产品已报销,无法操作",null), PRODUCTS_SALES_COMPLETED(1511034,"含有销售完成的产品,无法批量报销",null), STORE_IS_EXIST(1511035,"该门店已存在",null), + FEE_NOT_CONSISTENT(1511036,"合同金额与缴费账单金额不一致,请确定!",null), MESSAGE_TEMPLATE_NOT_SUPPORT_EDIT(1610001,"当前消息已发布,不支持编辑!",null), @@ -316,7 +317,13 @@ public enum ErrorCodeEnum { NOT_FLAGSHIP_STORE_NOT_EXIST(1610011,"当前阶段加盟类型不能变更!",null), JOIN_MODE_NOT_ALLOW_OPERATE(1610012,"加盟部人员只能新建加盟店或联营店,请确认!",null), STORE_NOT_FIND(1610013,"门店不存在",null), + SHOP_NAME_INVALID(1610014, "门店名称包含禁止关键词",null), + //装修 + TEAM_USED(1612001,"该装修团队有门店使用,无法删除,请确认!",null), + WALLET_OPEN_ACCOUNT_FAIL(1620001,"钱包开通失败",null), + WALLET_WITH_DRAWER_FAIL(1620002,"提现失败",null), + WALLET_API_ERROR(1620003,"{0}",null), /** * 181 十二分制 */ @@ -334,6 +341,9 @@ public enum ErrorCodeEnum { TP_PENALTY_APPLY_NO_NEED_PAY(1810011, "该处罚单无需缴费", null), ; + CURRENT_BRAND_SORT_NUMBER_EXIST(16100007,"当前品牌已存在该排序数字!",null), + CONTRACT_CONFIG_NOT_EXIST(16100008,"合同配置不存在!",null); + ; protected static final Map map = Arrays.stream(values()).collect( diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java index 1221d3c8f..02513c87f 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java @@ -14,20 +14,27 @@ import java.util.stream.Collectors; * @注释: */ public enum FranchiseBrandEnum { - ZXJP(1,"正新鸡排","option486"), - ZXSMZ(2,"正新三明治","option622"), - ZJS(3,"正烧记","option488"), - DGMX(4,"大鼓米线","option624"), - CXM(5,"串小妹","option626"), - MZG(6,"茂掌柜","option490"); + ZXJP(1,"正新鸡排","option486","上海正新食品集团有限公司","海南正新多品牌管理有限公司"), + ZXSMZ(2,"正新三明治","option622","上海小熊与树食品科技有限公司","上海小熊与树食品科技有限公司"), + ZJS(3,"正烧记","option488","上海正烧信息科技有限公司","上海正烧信息科技有限公司"), + DGMX(4,"大鼓米线","option624","",""), + CXM(5,"串小妹","option626","",""), + MZG(6,"茂掌柜","option490","",""); private int code; private String desc; - //红圈通code + /**法大大合同编号*/ private String hqtCode; - FranchiseBrandEnum(int code, String desc,String hqtCode) { + /**品牌方*/ + private String brandOwner; + /**收款方*/ + private String payeeName; + + FranchiseBrandEnum(int code, String desc,String hqtCode,String brandOwner,String payeeName) { this.code = code; this.desc = desc; this.hqtCode = hqtCode; + this.brandOwner = brandOwner; + this.payeeName = payeeName; } public int getCode() { return code; @@ -40,6 +47,14 @@ public enum FranchiseBrandEnum { return hqtCode; } + public String getBrandOwner() { + return brandOwner; + } + + public String getPayeeName() { + return payeeName; + } + public static String getDescByCode(String code) { if (StringUtils.isBlank(code)){ return null; @@ -52,6 +67,20 @@ public enum FranchiseBrandEnum { } return null; } + + public static FranchiseBrandEnum getEnumByCode(String code) { + if (StringUtils.isBlank(code)){ + return null; + } + int i = Integer.parseInt(code); + for (FranchiseBrandEnum e : FranchiseBrandEnum.values()) { + if (i == e.getCode()) { + return e; + } + } + return null; + } + public static String getDescByCode(Integer code) { if (code==null){ return null; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java index ed5f31062..078b02850 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java @@ -45,6 +45,15 @@ public enum JoinModeEnum { return code == FRANCHISE_DEPARTMENT.code || code == AFFILIATES.code; } + public static JoinModeEnum getModelByCode(Integer code) { + for (JoinModeEnum e : JoinModeEnum.values()) { + if (e.getCode() == code) { + return e; + } + } + return null; + } + public static String getDescByCode(Integer code) { for (JoinModeEnum e : JoinModeEnum.values()) { if (e.getCode() == code) { diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java index 3305b8d0d..8ef4d447e 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java @@ -10,7 +10,8 @@ public enum ResponseCodeEnum { /** * 成功返回 */ - SUCCESS(200000, "SUCCESS"); + SUCCESS(200000, "SUCCESS"), + SUCCESS_WALLET(200, "SUCCESS"); /** * 返回码 diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java index 76e751674..68ebaf10f 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java @@ -33,7 +33,8 @@ public enum RocketMqGroupEnum { FEI_SHU_EVENT_LISTENER("fei_shu_event_listener", new ArrayList<>(Arrays.asList(RocketMqTagEnum.USER_EVENT, RocketMqTagEnum.AUTH_SCOPE_CHANGE, RocketMqTagEnum.DEPT_EVENT))), - STORE_USER_UPDATE("store_user_update", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_USER_UPDATE))) + STORE_USER_UPDATE("store_user_update", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_USER_UPDATE))), + SHOP_DECORATION_ASSIGN("shop_decoration_assign", new ArrayList<>(Arrays.asList(RocketMqTagEnum.DELAY_SHOP_DECORATION_ASSIGN))) ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java index 4635dd69d..b8b2bba54 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java @@ -18,7 +18,8 @@ public enum RocketMqTagEnum { ZXJP_CREATE_STORE("zxjp_create_store", "正新鸡排招商创建门店"), PARTNER_LICENSE_SYNC_QUEUE("partner_license_sync_queue", "招商证照信息同步"), BUSINESS_SYNC("business_sync", "工商食安信息同步"), - STORE_USER_UPDATE("store_user_update", "门店信息人员变更同步菜品"); + STORE_USER_UPDATE("store_user_update", "门店信息人员变更同步菜品"), + DELAY_SHOP_DECORATION_ASSIGN("shop_decoration_assign","门店装修分配"); ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java index caa21e924..79df8a643 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java @@ -7,11 +7,11 @@ package com.cool.store.enums; */ public enum SMSMsgEnum { - PAY_FRANCHISE_FEES("缴纳加盟费/保证金", "", "SMS_474655067"), - SIGN_CONTRACT("合同签署", "", "SMS_474450102"), - DESIGN_STAGE("设计阶段", "", "SMS_474490087"), - CONSTRUCTION_STAGE("施工阶段", "", "SMS_474525082"), - PLATFORM_BUILD_STORE("平台建店", "", "SMS_474645064"), + PAY_FRANCHISE_FEES("缴纳加盟费/保证金", "", "SMS_498895215"), + SIGN_CONTRACT("合同签署", "", "SMS_498840165"), + DESIGN_STAGE("设计阶段", "", "SMS_498750214"), + CONSTRUCTION_STAGE("施工阶段", "", "SMS_498870170"), + PLATFORM_BUILD_STORE("平台建店", "", "SMS_498730163"), ; private String title; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java index 6f5da97fb..772f87c11 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java @@ -18,6 +18,7 @@ public enum ShopSubStageEnum { SHOP_STAGE_3(ShopStageEnum.SHOP_STAGE_2, 30, "营业执照办理", 23), SHOP_STAGE_4(ShopStageEnum.SHOP_STAGE_2, 40, "食安许可证", 55), SHOP_STAGE_5(ShopStageEnum.SHOP_STAGE_2, 50, "员工招聘", 23), + SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 260, "开通门店平安钱包", 1), SHOP_STAGE_7(ShopStageEnum.SHOP_STAGE_2, 70, "缴纳加盟费/保证金", 1), SHOP_STAGE_8(ShopStageEnum.SHOP_STAGE_2, 80, "加盟合同签约", 4), SHOP_STAGE_8_5(ShopStageEnum.SHOP_STAGE_2, 85, "发票回传", 5), @@ -110,6 +111,8 @@ public enum ShopSubStageEnum { return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_10; case SHOP_STAGE_5: return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_50; +// case SHOP_STAGE_6: +// return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60; case SHOP_STAGE_7: return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70; case SHOP_STAGE_2: diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java index 75f06fbe0..462f2d14a 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java @@ -36,6 +36,10 @@ public enum ShopSubStageStatusEnum { SHOP_SUB_STAGE_STATUS_50(ShopSubStageEnum.SHOP_STAGE_5, 500, "登记中", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_51(ShopSubStageEnum.SHOP_STAGE_5, 510, "已完成", Boolean.TRUE), + //开通门店平安钱包 + SHOP_SUB_STAGE_STATUS_60(ShopSubStageEnum.SHOP_STAGE_6, 2600, "未开通", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_61(ShopSubStageEnum.SHOP_STAGE_6, 2610, "已完成", Boolean.TRUE), + //缴纳加盟费/保证金 SHOP_SUB_STAGE_STATUS_70(ShopSubStageEnum.SHOP_STAGE_7, 700, "待内勤发布账单", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_71(ShopSubStageEnum.SHOP_STAGE_7, 710, "待加盟商缴费", Boolean.FALSE), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankAccountTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankAccountTypeEnum.java new file mode 100644 index 000000000..5b97d20f1 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankAccountTypeEnum.java @@ -0,0 +1,26 @@ +package com.cool.store.enums.wallet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 银行卡业务类型 枚举类 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Getter +@AllArgsConstructor +public enum BankAccountTypeEnum { + + PUBLIC(1, "对公"), + + PRIVATE(2, "对私"), + ; + + private final Integer type; + + private final String desc; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankBusinessTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankBusinessTypeEnum.java new file mode 100644 index 000000000..d3678ee12 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankBusinessTypeEnum.java @@ -0,0 +1,28 @@ +package com.cool.store.enums.wallet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 银行开户类型 枚举类 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Getter +@AllArgsConstructor +public enum BankBusinessTypeEnum { + + ENTERPRISE(1, "企业"), + + INDIVIDUAL(2, "个体工商户"), + + PERSONAL(3, "个人(小微商户)"), + ; + + private final Integer type; + + private final String desc; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java new file mode 100644 index 000000000..7d0203753 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java @@ -0,0 +1,27 @@ +package com.cool.store.enums.wallet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 平安钱包账户开通状态 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Getter +@AllArgsConstructor +public enum PingAnAccountStatusEnum { + + UNCOMMITTED(1, "待提交"), + UNAUTHORIZED(2, "待鉴权"), + AUTHENTICATING(3, "鉴权中"), + OPEN(4, "开通"), + ; + + private final Integer status; + + private final String desc; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/YztStoreModel.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/YztStoreModel.java new file mode 100644 index 000000000..b31c55d26 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/YztStoreModel.java @@ -0,0 +1,47 @@ +package com.cool.store.enums.wallet; + +import com.cool.store.enums.JoinModeEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + *

+ * 营帐通门店模式 + *

+ * + * @author wangff + * @since 2025/11/19 + */ +@Getter +@AllArgsConstructor +public enum YztStoreModel { + // 1.社会加盟 2.强管 3.强加盟 (门店模式) + + SOCIAL_JOIN(1, "社会加盟", Arrays.asList(JoinModeEnum.FRANCHISE_DEPARTMENT, JoinModeEnum.FRANCHISE_COMPANIES)), + STRONG_MANAGEMENT(2, "强管", Collections.singletonList(JoinModeEnum.FLAGSHIP_STORE)), + STRONG_JOIN(3, "强加盟", Collections.singletonList(JoinModeEnum.AFFILIATES)), + ; + + private final Integer model; + + private final String desc; + + /** + * 对应crm加盟模式枚举类 + */ + private final List joinModelList; + + public static Integer getYztStoreModel(Integer joinModel) { + JoinModeEnum joinModelEnum = JoinModeEnum.getModelByCode(joinModel); + for (YztStoreModel e : YztStoreModel.values()) { + if (e.joinModelList.contains(joinModelEnum)) { + return e.model; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wechat/WalletTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wechat/WalletTypeEnum.java new file mode 100644 index 000000000..74159ab59 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wechat/WalletTypeEnum.java @@ -0,0 +1,25 @@ +package com.cool.store.enums.wechat; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 钱包类型 + *

+ * + * @author wangff + * @since 2025/11/20 + */ +@Getter +@AllArgsConstructor +public enum WalletTypeEnum { + + PING_AN(1, "平安银行"), + ONLINE_BANK(2, "网商银行"), + ; + + private final Integer type; + + private final String desc; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/KeyFormatUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/KeyFormatUtil.java new file mode 100644 index 000000000..c0a1e190b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/KeyFormatUtil.java @@ -0,0 +1,82 @@ +package com.cool.store.utils; + +/** + * @Author suzhuhong + * @Date 2025/11/13 12:15 + * @Version 1.0 + */ +public class KeyFormatUtil { + + /** + * 将单行密钥转换为标准PEM多行格式 + */ + public static String convertToPEMFormat(String singleLineKey, String keyType) { + if (singleLineKey == null || singleLineKey.trim().isEmpty()) { + throw new IllegalArgumentException("密钥不能为空"); + } + + // 清理密钥,移除可能存在的头尾标记和空白 + String cleanedKey = cleanKey(singleLineKey); + + // 定义头尾标记 + String header = getKeyHeader(keyType); + String footer = getKeyFooter(keyType); + + // 构建多行格式 + StringBuilder pemKey = new StringBuilder(); + pemKey.append(header).append("\n"); + + // 每64个字符换行 + for (int i = 0; i < cleanedKey.length(); i += 64) { + int end = Math.min(i + 64, cleanedKey.length()); + pemKey.append(cleanedKey.substring(i, end)).append("\n"); + } + + pemKey.append(footer); + return pemKey.toString(); + } + + /** + * 清理密钥字符串 + */ + public static String cleanKey(String key) { + return key.replaceAll("-----BEGIN.*-----", "") + .replaceAll("-----END.*-----", "") + .replaceAll("\\s", "") // 移除所有空白字符 + .trim(); + } + + private static String getKeyHeader(String keyType) { + switch (keyType.toUpperCase()) { + case "PRIVATE": + case "PRIVATE_KEY": + return "-----BEGIN PRIVATE KEY-----"; + case "PUBLIC": + case "PUBLIC_KEY": + return "-----BEGIN PUBLIC KEY-----"; + case "RSA_PRIVATE": + return "-----BEGIN RSA PRIVATE KEY-----"; + case "RSA_PUBLIC": + return "-----BEGIN RSA PUBLIC KEY-----"; + default: + throw new IllegalArgumentException("不支持的密钥类型: " + keyType); + } + } + + private static String getKeyFooter(String keyType) { + switch (keyType.toUpperCase()) { + case "PRIVATE": + case "PRIVATE_KEY": + return "-----END PRIVATE KEY-----"; + case "PUBLIC": + case "PUBLIC_KEY": + return "-----END PUBLIC KEY-----"; + case "RSA_PRIVATE": + return "-----END RSA PRIVATE KEY-----"; + case "RSA_PUBLIC": + return "-----END RSA PUBLIC KEY-----"; + default: + throw new IllegalArgumentException("不支持的密钥类型: " + keyType); + } + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java index 2fd0cabd1..730bebac0 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java @@ -5,9 +5,10 @@ import lombok.extern.slf4j.Slf4j; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; +import java.security.*; +import java.security.spec.PKCS8EncodedKeySpec; import java.util.*; import java.util.stream.Collectors; @@ -110,4 +111,5 @@ public class OpenSignatureUtil { } return result.toString(); } + } \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java new file mode 100644 index 000000000..71d67b0ea --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java @@ -0,0 +1,348 @@ +package com.cool.store.utils; + +import java.net.URLEncoder; +import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.asn1.pkcs.RSAPrivateKey; +import sun.security.util.DerInputStream; +import sun.security.util.DerValue; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.*; +import java.util.*; +/** + * RSA签名工具类 + * @Author suzhuhong + * @Date 2025/11/12 22:57 + * @Version 1.0 + */ +@Slf4j +public class RsaSignUtil { + + + /** + * 加签方法 + */ + public static String generateSign(Map params, String privateKeyPEM) { + // 移除可能存在的sign字段 + params.remove("sign"); + String afterSort = objectToSortedString(params); + log.info("排序后的参数:{}", afterSort); + String formattedPrivateKey = KeyFormatUtil.convertToPEMFormat(privateKeyPEM, "RSA_PRIVATE"); + return rsaPrivateKeySign(afterSort, privateKeyPEM, "SHA256withRSA"); + } + + /** + * 验签方法 + */ + public static boolean verifySign(Map params, String publicKeyPEM) { + String sign = String.valueOf(params.get("sign")); + params.remove("sign"); + String afterSort = objectToSortedString(params); + log.info("排序后的参数:{}", afterSort); + return rsaPublicKeyVerify(afterSort, sign, publicKeyPEM, "SHA256withRSA"); + } + + /** + * 查询签名验证 - 主入口方法 + */ + public static boolean querySignCrm(String publicKey, Map params) { + return verifySign(params, publicKey); + } + + /** + * 将对象转换为排序后的字符串 + */ + public static String objectToSortedString(Map obj) { + return convertToSortedString(obj, ""); + } + + /** + * 递归将参数转换为排序字符串 + */ + private static String convertToSortedString(Map params, String prefix) { + // 按键排序 + List keys = new ArrayList<>(params.keySet()); + Collections.sort(keys); + + List parts = new ArrayList<>(); + + for (String key : keys) { + Object value = params.get(key); + if (value == null || "".equals(value) || + (value instanceof Number && ((Number) value).doubleValue() == 0)) { + continue; + } + + String currentKey = key; + if (!prefix.isEmpty()) { + currentKey = prefix + "[" + key + "]"; + } + + if (value instanceof Map) { + @SuppressWarnings("unchecked") + Map nestedMap = (Map) value; + String nestedString = convertToSortedString(nestedMap, currentKey); + if (!nestedString.isEmpty()) { + parts.add(nestedString); + } + } else if (value instanceof List) { + List list = (List) value; + List elemStrs = new ArrayList<>(); + + for (Object element : list) { + String elementStr; + if (element instanceof Map) { + @SuppressWarnings("unchecked") + Map elementMap = (Map) element; + String inner = convertToSortedString(elementMap, ""); + elementStr = "{" + inner + "}"; + } else if (element instanceof Double) { + elementStr = String.format("%.0f", (Double) element); + } else if (element instanceof Float) { + elementStr = String.format("%.0f", (Float) element); + } else { + elementStr = String.valueOf(element); + } + elemStrs.add(elementStr); + } + + // 对元素字符串排序 + Collections.sort(elemStrs); + + // URL编码并添加到parts + for (String es : elemStrs) { + String encodedValue = urlEncode(es); + parts.add(currentKey + "[]=" + encodedValue); + } + } else if (value instanceof Double) { + String strValue = String.format("%.0f", (Double) value); + parts.add(currentKey + "=" + urlEncode(strValue)); + } else if (value instanceof Float) { + String strValue = String.format("%.0f", (Float) value); + parts.add(currentKey + "=" + urlEncode(strValue)); + } else { + String strValue = String.valueOf(value); + parts.add(currentKey + "=" + urlEncode(strValue)); + } + } + + return String.join("&", parts); + } + + /** + * URL编码(替换+为%20) + */ + private static String urlEncode(String value) { + try { + return URLEncoder.encode(value, StandardCharsets.UTF_8.name()) + .replace("+", "%20"); + } catch (Exception e) { + return value; + } + } + + /** + * RSA私钥加签 + */ + public static String rsaPrivateKeySign(String text, String privateKeyPEM, String algorithm) { + try { + // 1. 解析私钥 + log.debug("Received private key PEM: {}", privateKeyPEM); + PrivateKey privateKey = parsePrivateKey(privateKeyPEM); + if (privateKey == null) { + throw new RuntimeException("解析私钥失败"); + } + + // 2. 创建签名实例 + Signature signature = Signature.getInstance(algorithm); + signature.initSign(privateKey); + signature.update(text.getBytes(StandardCharsets.UTF_8)); + + // 3. 生成签名并Base64编码 + byte[] digitalSignature = signature.sign(); + return Base64.getEncoder().encodeToString(digitalSignature); + + } catch (Exception e) { + throw new RuntimeException("加签失败: " + e.getMessage(), e); + } + } + + /** + * RSA公钥验签 + */ + public static boolean rsaPublicKeyVerify(String text, String signBase64, + String publicKeyPEM, String algorithm) { + try { + // 1. 解码Base64签名 + byte[] signature = Base64.getDecoder().decode(signBase64); + + // 2. 解析公钥 + PublicKey publicKey = parsePublicKey(publicKeyPEM); + if (publicKey == null) { + return false; + } + + // 3. 验证签名 + Signature sig = Signature.getInstance(algorithm); + sig.initVerify(publicKey); + sig.update(text.getBytes(StandardCharsets.UTF_8)); + + return sig.verify(signature); + } catch (Exception e) { + return false; + } + } + + /** + * 解析PEM格式私钥(兼容PKCS#1和PKCS#8格式) + */ + private static PrivateKey parsePrivateKey(String privateKeyPEM) { + try { + String pemContent = privateKeyPEM + .replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", "") + .replace("-----BEGIN RSA PRIVATE KEY-----", "") + .replace("-----END RSA PRIVATE KEY-----", "") + .replaceAll("\\s", ""); + + byte[] keyBytes = Base64.getDecoder().decode(pemContent); + + // 尝试PKCS#8格式 + try { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePrivate(keySpec); + } catch (Exception e) { + // 使用Bouncy Castle处理PKCS#1 + RSAPrivateKey rsaPrivKey = RSAPrivateKey.getInstance(keyBytes); + return KeyFactory.getInstance("RSA").generatePrivate( + new RSAPrivateKeySpec(rsaPrivKey.getModulus(), rsaPrivKey.getPrivateExponent())); + } + } catch (Exception e) { + throw new RuntimeException("解析私钥失败: " + e.getMessage(), e); + } + } + + /** + * 解析PKCS#1格式私钥 + */ + private static PrivateKey parsePKCS1PrivateKey(byte[] keyBytes) { + try { + int length = keyBytes.length; + byte[] pkcs8Header = new byte[] { + 0x30, (byte) 0x82, + (byte) ((length + 26) >> 8), (byte) (length + 26), // 总长度 + 0x02, 0x01, 0x00, + 0x30, 0x0D, 0x06, 0x09, 0x2A, (byte) 0x86, 0x48, (byte) 0x86, (byte) 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, + 0x04, (byte) 0x82, + (byte) (length >> 8), (byte) length // BIT STRING 长度 + }; + + byte[] pkcs8Key = new byte[pkcs8Header.length + keyBytes.length]; + System.arraycopy(pkcs8Header, 0, pkcs8Key, 0, pkcs8Header.length); + System.arraycopy(keyBytes, 0, pkcs8Key, pkcs8Header.length, keyBytes.length); + + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8Key); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePrivate(keySpec); + } catch (Exception e) { + throw new RuntimeException("解析PKCS#1私钥失败: " + e.getMessage(), e); + } + } + + /** + * 解析PEM格式公钥(兼容PKCS#1和PKCS#8格式) + */ + private static PublicKey parsePublicKey(String publicKeyPEM) { + try { + // 移除PEM头尾标记和空白字符 + String pemContent = publicKeyPEM + .replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replace("-----BEGIN RSA PUBLIC KEY-----", "") + .replace("-----END RSA PUBLIC KEY-----", "") + .replaceAll("\\s", ""); + + byte[] keyBytes = Base64.getDecoder().decode(pemContent); + + // 先尝试PKCS#8格式 + try { + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePublic(keySpec); + } catch (Exception e) { + // 如果PKCS#8失败,尝试PKCS#1格式 + return parsePKCS1PublicKey(keyBytes); + } + } catch (Exception e) { + return null; + } + } + + /** + * 解析PKCS#1格式公钥 + */ + private static PublicKey parsePKCS1PublicKey(byte[] keyBytes) { + try { + // PKCS#1 RSA公钥转换为PKCS#8格式 + byte[] pkcs8Prefix = new byte[] { + 0x30, (byte) 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, (byte) 0x86, + 0x48, (byte) 0x86, (byte) 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, + (byte) 0x82, 0x01, 0x0f, 0x00 + }; + + byte[] pkcs8Key = new byte[pkcs8Prefix.length + keyBytes.length]; + System.arraycopy(pkcs8Prefix, 0, pkcs8Key, 0, pkcs8Prefix.length); + System.arraycopy(keyBytes, 0, pkcs8Key, pkcs8Prefix.length, keyBytes.length); + + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(pkcs8Key); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePublic(keySpec); + } catch (Exception e) { + return null; + } + } + + + /** + * 针对 /zxjp/open/v1/wallet/** 接口的专用验签方法 + * @param params 包含签名参数的Map + * @param privateKeyPEM 用于生成签名的私钥 + * @return 验签是否通过 + */ + public static boolean verifyWalletSign(Map params, String privateKeyPEM) { + try { + // 1. 获取请求中的签名 + String requestSign = String.valueOf(params.get("sign")); + if (requestSign == null || requestSign.isEmpty()) { + log.warn("请求中缺少签名参数"); + return false; + } + + // 2. 移除签名参数,生成待签名字符串 + Map paramsToSign = new HashMap<>(params); + paramsToSign.remove("sign"); + + // 3. 使用相同的私钥生成签名 + String generatedSign = generateSign(paramsToSign, privateKeyPEM); + + // 4. 对比签名 + boolean isVerified = Objects.equals(requestSign, generatedSign); + + if (!isVerified) { + log.warn("签名验证失败,请求签名: {}, 生成签名: {}", requestSign, generatedSign); + } + + return isVerified; + } catch (Exception e) { + log.error("验签过程中发生异常", e); + return false; + } + } + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java new file mode 100644 index 000000000..9db56f10b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java @@ -0,0 +1,67 @@ +package com.cool.store.dao; + +import com.cool.store.entity.ContractConfigDO; +import com.cool.store.mapper.ContractConfigMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:37 + * @Version 1.0 + */ +@Repository +public class ContractConfigDAO { + + @Resource + private ContractConfigMapper contractConfigMapper; + + + public ContractConfigDO queryContractConfigById(Long id){ + return contractConfigMapper.selectByPrimaryKey(id); + } + + public int addContractConfig(ContractConfigDO contractConfigDO){ + return contractConfigMapper.insertSelective(contractConfigDO); + } + + public int updateContractConfig(ContractConfigDO contractConfigDO){ + return contractConfigMapper.updateByPrimaryKeySelective(contractConfigDO); + } + + /** + * 根据品牌查询对应排序是否存在 + * @param brand + * @param serialNumber + * @return + */ + public ContractConfigDO queryContractConfigByBrand(String brand,Integer serialNumber){ + return contractConfigMapper.queryContractConfigByBrand(brand,serialNumber); + } + + + /** + * 合同配置列表 + * @param brand + * @return + */ + public List queryContractConfigList(String brand) { + return contractConfigMapper.queryContractConfigList(brand); + } + + /** + * 根据加盟品牌与加盟模式 查出所有的未删除状态的合并合同 + * @param brand + * @param mode + * @return + */ + public List queryContractConfigListByBrandAndMode(String brand,String mode) { + return contractConfigMapper.queryContractConfigListByBrandAndMode(brand,mode); + } + + public void deleteContractConfig(Long id) { + contractConfigMapper.deleteByPrimaryKey(id); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java index 439afb1ee..4269282ed 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java @@ -17,6 +17,7 @@ import com.cool.store.mapper.ShopInfoMapper; import com.cool.store.request.*; import com.cool.store.response.MiniShopsResponse; import com.cool.store.response.PlatformBuildListResponse; +import com.cool.store.utils.UUIDUtils; import com.cool.store.vo.shop.StageShopCountVO; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; @@ -30,10 +31,7 @@ import org.springframework.stereotype.Repository; import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -54,6 +52,10 @@ public class ShopInfoDAO { if(CollectionUtils.isEmpty(shopInfoList)){ return CommonConstants.ZERO; } + for (ShopInfoDO shopInfo : shopInfoList) { + validateShopName(shopInfo.getShopName()); + shopInfo.setStoreId(UUIDUtils.get32UUID()); + } return shopInfoMapper.batchAddShop(shopInfoList); } @@ -70,6 +72,24 @@ public class ShopInfoDAO { return shopInfo; } + public ShopInfoDO getShopInfoByStoreId(String storeId) { + ShopInfoDO shopInfoDO = new ShopInfoDO(); + shopInfoDO.setStoreId(storeId); + shopInfoDO.setDeleted(false); + return shopInfoMapper.selectOne(shopInfoDO); + } + + public List getShopInfoByStoreIds(List storeIds) { + if (CollectionUtils.isEmpty(storeIds)) { + return Collections.emptyList(); + } + Example example = new Example(ShopInfoDO.class); + example.createCriteria() + .andIn("storeId", storeIds) + .andEqualTo("deleted", false); + return shopInfoMapper.selectByExample(example); + } + public List getShopList(Long lineId){ if(Objects.isNull(lineId)){ return new ArrayList<>(); @@ -95,6 +115,8 @@ public class ShopInfoDAO { * @return */ public Long addShopInfo(ShopInfoDO shopInfo){ + validateShopName(shopInfo.getShopName()); + shopInfo.setStoreId(UUIDUtils.get32UUID()); shopInfoMapper.insertSelective(shopInfo); return shopInfo.getId(); } @@ -104,6 +126,7 @@ public class ShopInfoDAO { log.info("店铺为空 或者店铺id为空"); throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); } + validateShopName(shopInfo.getShopName()); return shopInfoMapper.updateByPrimaryKeySelective(shopInfo); } @@ -359,4 +382,14 @@ public class ShopInfoDAO { public List getPushHqtShopList(){ return shopInfoMapper.getPushHqtShopList(); } + + /** + * 校验名称 不能包含旗舰二字 + * @param shopName + */ + private void validateShopName(String shopName) { + if (StringUtils.isNotBlank(shopName) && shopName.contains("旗舰")) { + throw new ServiceException(ErrorCodeEnum.SHOP_NAME_INVALID); + } + } } 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 33b1aeb93..9672ac615 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 @@ -58,6 +58,10 @@ public class ShopStageInfoDAO { // 三明治跳过营帐通开通 continue; } + // TODO: 临时跳过 + if (shopSubStageEnum.equals(ShopSubStageEnum.SHOP_STAGE_6)) { + continue; + } ShopStageInfoDO shopStageInfo = new ShopStageInfoDO(); shopStageInfo.setLineId(lineId); shopStageInfo.setShopId(shopId); diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java index 42cbec644..c79e7307b 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java @@ -1,6 +1,8 @@ package com.cool.store.dao; import com.alibaba.excel.util.CollectionUtils; +import com.alibaba.excel.util.StringUtils; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.entity.SignFranchiseDO; import com.cool.store.mapper.SignFranchiseMapper; import org.apache.ibatis.annotations.Param; @@ -38,4 +40,11 @@ public class SignFranchiseDAO { public SignFranchiseDO selectByShopId(Long shopId){ return signFranchiseMapper.selectByShopId(shopId); } + + public void updateAuditByShopId(Long auditId, Long shopId, ContractCallbackDTO dto){ + if (dto==null || (StringUtils.isEmpty(dto.getReason())&&dto.getInfoConsistencyFlag()==null)){ + return; + } + signFranchiseMapper.updateAuditByShopId(auditId,shopId,dto); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java new file mode 100644 index 000000000..d5111062d --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java @@ -0,0 +1,42 @@ +package com.cool.store.dao.decoration; + +import com.cool.store.dto.decoration.DecorationTeamDTO; +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.mapper.decoration.DecorationTeamConfigMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:07 + * @Version 1.0 + */ +@Repository +public class DecorationTeamConfigDAO { + + @Resource + private DecorationTeamConfigMapper decorationTeamConfigMapper; + + public void addTeam(DecorationTeamConfigDO decorationTeamConfigDO){ + decorationTeamConfigMapper.insertSelective(decorationTeamConfigDO); + } + + public void updateTeam(DecorationTeamConfigDO decorationTeamConfigDO){ + decorationTeamConfigMapper.updateByPrimaryKeySelective(decorationTeamConfigDO); + } + + public DecorationTeamConfigDO getById(Long id){ + if (id == null){ + return null; + } + return decorationTeamConfigMapper.selectByPrimaryKey(id); + } + + public List listByCondition(){ + return decorationTeamConfigMapper.listByCondition(); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java new file mode 100644 index 000000000..8b75e8fbd --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java @@ -0,0 +1,71 @@ +package com.cool.store.dao.decoration; + +import com.cool.store.dao.HyOpenAreaInfoDAO; +import com.cool.store.dto.decoration.DecorationListDTO; +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.mapper.decoration.ShopDecorationAssignMapper; +import com.cool.store.request.decoration.DecorationListRequest; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:07 + * @Version 1.0 + */ +@Repository +public class ShopDecorationAssignDAO { + + @Resource + private ShopDecorationAssignMapper shopDecorationAssignMapper; + @Resource + HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + + + public Integer insert(ShopDecorationAssignDO shopDecorationAssignDO) { + if (shopDecorationAssignDO == null){ + return 0; + } + return shopDecorationAssignMapper.insert(shopDecorationAssignDO); + } + + public ShopDecorationAssignDO getById(Long id) { + if (id == null){ + return null; + } + return shopDecorationAssignMapper.selectByPrimaryKey(id); + } + + public Integer update(ShopDecorationAssignDO shopDecorationAssignDO) { + if (shopDecorationAssignDO == null){ + return 0; + } + return shopDecorationAssignMapper.updateByPrimaryKey(shopDecorationAssignDO); + } + + public Integer countByTeamId(Long teamId) { + if (teamId == null){ + return 0; + } + return shopDecorationAssignMapper.countByTeamId(teamId); + } + + public List listByCondition(DecorationListRequest request) { + if (request == null){ + return null; + } + if (request.getWantShopAreaId()!=null){ + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(request.getWantShopAreaId()); + List hyOpenAreaInfoDOList = hyOpenAreaInfoDAO.queryByKeyword(hyOpenAreaInfoDO.getAreaPath(), null, null, false); + List wantShopAreaIds = hyOpenAreaInfoDOList.stream().map(HyOpenAreaInfoDO::getId).collect(Collectors.toList()); + request.setWantShopAreaIds(wantShopAreaIds); + } + return shopDecorationAssignMapper.listByCondition(request); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java new file mode 100644 index 000000000..3a6313a9b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java @@ -0,0 +1,73 @@ +package com.cool.store.dao.decoration; + +import com.aliyun.openservices.shade.com.google.common.collect.Maps; +import com.cool.store.dto.decoration.TeamAreaMappingDTO; +import com.cool.store.entity.decoration.TeamAreaMappingDO; +import com.cool.store.mapper.decoration.TeamAreaMappingMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:08 + * @Version 1.0 + */ +@Repository +public class TeamAreaMappingDAO { + + @Resource + private TeamAreaMappingMapper teamAreaMappingMapper; + + public void batchInsert(Long teamId,List cityId){ + if (teamId == null || CollectionUtils.isEmpty(cityId)){ + return; + } + List list = new ArrayList<>(); + cityId.forEach(x->{ + TeamAreaMappingDO teamAreaMappingDO = new TeamAreaMappingDO(); + teamAreaMappingDO.setTeamId(teamId); + teamAreaMappingDO.setOpenCityId(x); + list.add(teamAreaMappingDO); + }); + teamAreaMappingMapper.batchInsert(list); + } + + public int deletedByTeamId(Long teamId){ + if (teamId == null){ + return 0; + } + return teamAreaMappingMapper.deletedByTeamId(teamId); + } + + public int deletedIds(List ids){ + if (CollectionUtils.isEmpty(ids)){ + return 0; + } + return teamAreaMappingMapper.deletedIds(ids); + } + + public TeamAreaMappingDO getByCityId(Long cityId){ + return teamAreaMappingMapper.getByCityId(cityId); + } + + + public Map> listByTeamIdList(List teamIdList){ + if (CollectionUtils.isEmpty(teamIdList)){ + return Maps.newHashMap(); + } + List teamAreaMappingDTOS = teamAreaMappingMapper.listByTeamIdList(teamIdList); + Map> map = teamAreaMappingDTOS.stream().collect(Collectors.groupingBy(TeamAreaMappingDTO::getTeamId)); + return map; + } + + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java new file mode 100644 index 000000000..e558c2b53 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java @@ -0,0 +1,52 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.entity.wallet.OpenBankInfoDO; +import com.cool.store.mapper.wallet.OpenBankInfoMapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Author suzhuhong + * @Date 2025/11/20 10:37 + * @Version 1.0 + */ +@Repository +public class OpenBankInfoDAO { + + + @Resource + private OpenBankInfoMapper openBankInfoMapper; + + public int insertSelective(OpenBankInfoDO openBankInfoDO){ + return openBankInfoMapper.insertSelective(openBankInfoDO); + } + + public int updateByStoreCode(OpenBankInfoDO openBankInfoDO){ + return openBankInfoMapper.updateByStoreCode(openBankInfoDO); + } + + public OpenBankInfoDO getOpenBankInfo(String storeCode){ + return openBankInfoMapper.getOpenBankInfo(storeCode); + } + + public OpenBankInfoDO getOpenBankInfoByStoreId(String storeId) { + return openBankInfoMapper.selectOne(OpenBankInfoDO.builder().storeId(storeId).build()); + } + + public int insertOrUpdateByStoreId(OpenBankInfoDO openBankInfoDO) { + if (StringUtils.isBlank(openBankInfoDO.getStoreId())) { + return 0; + } + if (Objects.isNull(getOpenBankInfo(openBankInfoDO.getStoreId()))) { + return openBankInfoMapper.insertSelective(openBankInfoDO); + } else { + Example example = new Example(OpenBankInfoDO.class); + example.createCriteria().andEqualTo("storeId", openBankInfoDO.getStoreId()); + return openBankInfoMapper.updateByExampleSelective(openBankInfoDO, example); + } + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/TempOpenWalletInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/TempOpenWalletInfoDAO.java new file mode 100644 index 000000000..2b3a440a9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/TempOpenWalletInfoDAO.java @@ -0,0 +1,35 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.entity.wallet.TempOpenWalletInfoDO; +import com.cool.store.mapper.wallet.TempOpenWalletInfoMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/11/20 10:03 + * @Version 1.0 + */ +@Repository +@RequiredArgsConstructor +public class TempOpenWalletInfoDAO { + + @Resource + private TempOpenWalletInfoMapper tempOpenWalletInfoMapper; + + /** + * 根据门店编号查询临时开通钱包信息 + * @param StoreCode + * @return + */ + public TempOpenWalletInfoDO getTempOpenWalletInfoByStoreCode(String StoreCode) { + if (StoreCode == null){ + return null; + } + return tempOpenWalletInfoMapper.getTempOpenWalletInfoByStoreCode(StoreCode); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java new file mode 100644 index 000000000..2610acaa7 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java @@ -0,0 +1,51 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.entity.wallet.WalletPaymentOrderDO; +import com.cool.store.mapper.wallet.WalletPaymentOrderMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; + +/** + *

+ * 钱包大额支付DAO + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Repository +@RequiredArgsConstructor +public class WalletPaymentOrderDAO { + private final WalletPaymentOrderMapper walletPaymentOrderMapper; + + public void insertSelective(WalletPaymentOrderDO walletPaymentOrderDO) { + walletPaymentOrderMapper.insertSelective(walletPaymentOrderDO); + } + + /** + * 更新订单状态 + */ + public void updateOrderByPaymentId(String storeId, String paymentId, Integer orderStatus) { + Example example = new Example(WalletPaymentOrderDO.class); + example.createCriteria() + .andEqualTo("storeId", storeId) + .andEqualTo("paymentId", paymentId); + walletPaymentOrderMapper.updateByExampleSelective(WalletPaymentOrderDO.builder().orderStatus(orderStatus).build(), example); + } + + /** + * 查询未支付的充值订单 + */ + public List getNonPaymentList(String storeId) { + Example example = new Example(WalletPaymentOrderDO.class); + example.createCriteria() + .andEqualTo("storeId", storeId) + .andEqualTo("orderStatus", 3) + .andEqualTo("type", 0); + example.setOrderByClause("create_time DESC"); + return walletPaymentOrderMapper.selectByExample(example); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java new file mode 100644 index 000000000..b02e05d34 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java @@ -0,0 +1,18 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.ContractConfigDO; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ContractConfigMapper extends Mapper { + + + + ContractConfigDO queryContractConfigByBrand(String brand, Integer serialNumber); + + + List queryContractConfigList(String brand); + + List queryContractConfigListByBrandAndMode(String brand, String mode); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java index 8ac02937f..b595f6d25 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.entity.SignFranchiseDO; import org.apache.ibatis.annotations.Param; import tk.mybatis.mapper.common.Mapper; @@ -11,7 +12,8 @@ public interface SignFranchiseMapper extends Mapper { SignFranchiseDO selectByShopId(@Param("shopId") Long shopId); void updateAuditByShopId(@Param("auditId") Long auditId, - @Param("shopId") Long shopId); + @Param("shopId") Long shopId, + @Param("dto") ContractCallbackDTO dto); List selectByShopIds( @Param("list")List shopIds); Integer dateHandle(); diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java new file mode 100644 index 000000000..2cff39b62 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java @@ -0,0 +1,20 @@ +package com.cool.store.mapper.decoration; + +import com.cool.store.dto.decoration.DecorationTeamDTO; +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface DecorationTeamConfigMapper extends Mapper { + + + /** + * 查询团队 + * @return + */ + List listByCondition(); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java new file mode 100644 index 000000000..d1bac2437 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java @@ -0,0 +1,30 @@ +package com.cool.store.mapper.decoration; + +import com.cool.store.dto.decoration.DecorationListDTO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.request.decoration.DecorationListRequest; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ShopDecorationAssignMapper extends Mapper { + + + /** + * 查询团队被门店使用次数 + * @param teamId + * @return + */ + Integer countByTeamId(Long teamId); + + /** + * 查询分配装修团队列表 + * @param request + * @return + */ + List listByCondition(DecorationListRequest request); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/TeamAreaMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/TeamAreaMappingMapper.java new file mode 100644 index 000000000..b4cf228be --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/TeamAreaMappingMapper.java @@ -0,0 +1,48 @@ +package com.cool.store.mapper.decoration; + +import com.cool.store.dto.decoration.TeamAreaMappingDTO; +import com.cool.store.entity.decoration.TeamAreaMappingDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface TeamAreaMappingMapper extends Mapper { + + /** + * 批量插入 + * @param list + * @return + */ + Integer batchInsert(@Param("list") List list); + /** + * 根据团队id删除 更新团队id时候删除 + * @param teamId + * @return + */ + Integer deletedByTeamId(@Param("teamId") Long teamId); + + /** + * 根据ids删除 + * @param ids + * @return + */ + Integer deletedIds(@Param("ids") List ids); + + /** + * 根据城市id查询 + * @param cityId + * @return + */ + TeamAreaMappingDO getByCityId(@Param("cityId") Long cityId); + + /** + * 根据团队id批量查询 + * @param teamIdList + * @return + */ + List listByTeamIdList(@Param("teamIdList") List teamIdList); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/OpenBankInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/OpenBankInfoMapper.java new file mode 100644 index 000000000..fd70937e1 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/OpenBankInfoMapper.java @@ -0,0 +1,26 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.OpenBankInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface OpenBankInfoMapper extends Mapper { + + + /** + * 查询门店开户信息 + * @param storeCode + * @return + */ + OpenBankInfoDO getOpenBankInfo(@Param("storeCode") String storeCode); + + /** + * 根据门店编码更新 + * @param openBankInfoDO + * @return + */ + Integer updateByStoreCode(@Param("dto") OpenBankInfoDO openBankInfoDO); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java new file mode 100644 index 000000000..558e5fb1e --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java @@ -0,0 +1,18 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.TempOpenWalletInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface TempOpenWalletInfoMapper extends Mapper { + + /** + * 根据StoreCode查询临时开放钱包信息 + * @param StoreCode + * @return + */ + TempOpenWalletInfoDO getTempOpenWalletInfoByStoreCode(@Param("storeCode") String StoreCode); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletPaymentOrderMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletPaymentOrderMapper.java new file mode 100644 index 000000000..774abb085 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletPaymentOrderMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.WalletPaymentOrderDO; +import tk.mybatis.mapper.common.Mapper; + +public interface WalletPaymentOrderMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ContractConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ContractConfigMapper.xml new file mode 100644 index 000000000..fd81efa35 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/ContractConfigMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index 969501cb2..9183d5312 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -38,6 +38,7 @@ + @@ -46,17 +47,17 @@ shop_code, store_num, shop_manager_user_id, supervisor_user_id, plan_open_time, cur_progress, shop_type, shop_stage, deleted, create_time, update_time, join_mode,detail_address,franchise_brand,development_manager,want_shop_area_id,investment_manager,shop_status,create_user_id,update_user_id,store_type - , province,province_code,city,city_code,district,district_code,manager_region_id,shop_decoration_attributes,hqt_shop_id + , province,province_code,city,city_code,district,district_code,manager_region_id,shop_decoration_attributes,hqt_shop_id,store_id insert into xfsg_shop_info(region_id, line_id, partner_id, shop_name, store_num,supervisor_user_id,create_time,join_mode,franchise_brand, - development_manager,want_shop_area_id,investment_manager) values + development_manager,want_shop_area_id,investment_manager,store_id) values (#{shop.regionId}, #{shop.lineId}, #{shop.partnerId}, #{shop.shopName}, #{shop.storeNum},#{shop.supervisorUserId},#{shop.createTime},#{shop.joinMode},#{shop.franchiseBrand},#{shop.developmentManager}, - #{shop.wantShopAreaId},#{shop.investmentManager}) + #{shop.wantShopAreaId},#{shop.investmentManager},#{shop.storeId}) @@ -309,7 +310,8 @@ a.franchise_brand as franchiseBrand, a.shop_status as shopStatus, a.detail_address as shopAddress, - a.manager_region_id as managerRegionId + a.manager_region_id as managerRegionId, + a.store_id as storeId from xfsg_shop_info a left join xfsg_line_info b on a.line_id = b.id left join xfsg_sign_franchise c on a.id = c.shop_id diff --git a/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml index 5c927fb7d..d4ceb8c0e 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml @@ -3,7 +3,19 @@ update xfsg_sign_franchise - set audit_id = #{auditId} + + + audit_id = #{auditId}, + + + + info_consistency_flag = #{dto.infoConsistencyFlag}, + + + reason = #{dto.reason}, + + + where shop_id = #{shopId} diff --git a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml index 5c883631e..a0d598a93 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml @@ -139,7 +139,7 @@ FROM store_${enterpriseId} a WHERE a.is_delete = 'effective' and a.store_status != 'closed' - AND a.store_name LIKE CONCAT('%', #{storeName}, '%') + AND (a.store_name LIKE CONCAT('%', #{storeName}, '%') or a.store_num LIKE CONCAT('%', #{storeName}, '%')) AND a.store_num = #{storeNum} @@ -157,7 +157,7 @@ INNER JOIN store_master_signer_info_${enterpriseId} b ON a.store_id = b.store_id WHERE a.is_delete = 'effective' and a.store_status != 'closed' - AND a.store_name LIKE CONCAT('%', #{storeName}, '%') + AND (a.store_name LIKE CONCAT('%', #{storeName}, '%') or a.store_num LIKE CONCAT('%', #{storeName}, '%')) AND a.store_num = #{storeNum} @@ -172,7 +172,7 @@ INNER JOIN store_master_signer_info_${enterpriseId} b ON a.store_id = b.store_id WHERE a.is_delete = 'effective' and a.store_status != 'closed' - AND a.store_name LIKE CONCAT('%', #{storeName}, '%') + AND (a.store_name LIKE CONCAT('%', #{storeName}, '%') or a.store_num LIKE CONCAT('%', #{storeName}, '%')) AND a.store_num = #{storeNum} diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml new file mode 100644 index 000000000..733a5c109 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml new file mode 100644 index 000000000..ef36ac7e5 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/TeamAreaMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/TeamAreaMappingMapper.xml new file mode 100644 index 000000000..8c82fd7f2 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/TeamAreaMappingMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + INSERT INTO zxjp_team_area_mapping ( + team_id, + open_city_id + ) VALUES + + ( + #{item.teamId}, + #{item.openCityId} + ) + + + + + + DELETE FROM zxjp_team_area_mapping + WHERE team_id = #{teamId} + + + + + DELETE FROM zxjp_team_area_mapping + WHERE id IN + + #{id} + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml new file mode 100644 index 000000000..8dc80689b --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE zxjp_open_bank_info + + + store_id = #{dto.storeId}, + + + signer_name = #{dto.signerName}, + + + signer_id_card = #{dto.signerIdCard}, + + + signer_phone = #{dto.signerPhone}, + + + signer_id_card_front = #{dto.signerIdCardFront}, + + + signer_id_card_back = #{dto.signerIdCardBack}, + + + business_license_name = #{dto.businessLicenseName}, + + + business_license_code = #{dto.businessLicenseCode}, + + + business_license_photo = #{dto.businessLicensePhoto}, + + + legal_is_signer = #{dto.legalIsSigner}, + + + legal_name = #{dto.legalName}, + + + legal_id_card = #{dto.legalIdCard}, + + + legal_id_card_expire_time = #{dto.legalIdCardExpireTime}, + + + legal_phone = #{dto.legalPhone}, + + + legal_id_card_front = #{dto.legalIdCardFront}, + + + legal_id_card_back = #{dto.legalIdCardBack}, + + + settlement_card = #{dto.settlementCard}, + + + bank_branch_name = #{dto.bankBranchName}, + + + bank_branch_code = #{dto.bankBranchCode}, + + + bank_reserved_phone = #{dto.bankReservedPhone}, + + + source = #{dto.source}, + + + WHERE store_code = #{dto.storeCode} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml new file mode 100644 index 000000000..f68b95773 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletPaymentOrderMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletPaymentOrderMapper.xml new file mode 100644 index 000000000..ea5ed9ece --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletPaymentOrderMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java new file mode 100644 index 000000000..170dbd580 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java @@ -0,0 +1,102 @@ +package com.cool.store.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * @Author suzhuhong + * @Date 2025/9/8 10:13 + * @Version 1.0 + */ +@Data +public class ContractInformationDTO { + @ApiModelProperty("门店ID") + private Long shopId; + @ApiModelProperty("门店名称") + private String shopName; + @ApiModelProperty("签约人1名称") + private String sign1Name; + @ApiModelProperty("签约人2名称") + private String sign2Name; + @ApiModelProperty("加盟模式") + private Integer joinModel; + @ApiModelProperty("每年加盟费") + private String yearFranchiseFee; + @ApiModelProperty("保证金") + private String loanMargin; + @ApiModelProperty("第一年度管理费") + private String firstYearManagementFee; + @ApiModelProperty("第一年度品牌使用费") + private String firstYearFee; + @ApiModelProperty("设计费") + private String performanceBond; + @ApiModelProperty("收款方名称") + private String payeeName; + @ApiModelProperty("品牌方") + private String brandOwner; + @ApiModelProperty("老店编码 签约类型选择老店转加盟时有") + private String oldShopCode; + @ApiModelProperty("合同编号") + private String contractNo; + + @ApiModelProperty("币种") + private String currency; + + @ApiModelProperty(name = "合同加盟费") + private String contractFranchiseFee; + + @ApiModelProperty(name = "合同管理费") + private String contractManageFee; + + @ApiModelProperty(name = "合同品牌使用费") + private String contractBrandUseFee; + + @ApiModelProperty(name = "合同设计费") + private String contractPerformanceBond; + + @ApiModelProperty(name = "合同保证金") + private String contractLoanMargin; + + @ApiModelProperty(name = "合同系统使用费") + private String contractSysUserFee; + + @ApiModelProperty(name = "加盟来源 other-其他 招商会-investment 加盟商推荐-partner_recommend 自然流量-organic_traffic 员工推荐-employee_recommend ") + private String joinSource; + + @ApiModelProperty(name = "签约形式 纸质合同-paper_contract 电子合同-electronic_contract 已付款未签约-paid_but_not_signed") + private String signModality; + + @ApiModelProperty(name = "加盟费频率") + private Integer franchiseFeeFrequency; + + @ApiModelProperty(name = "品牌使用费频率") + private Integer brandUseFeeFrequency; + + @ApiModelProperty(name = "管理费频率") + private Integer manageFeeFrequency; + + @ApiModelProperty(name = "管理费频率") + private String discountAmount; + + @ApiModelProperty(name = "提交人") + private String summitUserName; + + @ApiModelProperty(name = "签约人地址") + private String signerAddress; + + @ApiModelProperty(name = "签约人手机号") + private String signerPhone; + + @ApiModelProperty(name = "合同使用年限") + private Integer contractServiceLife; + + @ApiModelProperty(name = "合同开始时间") + private String contractStartTime; + + @ApiModelProperty(name = "合同结束时间") + private String contractEndTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java index 7375fbb64..96a6d4e04 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java @@ -55,5 +55,7 @@ public class PreparationDTO { private Long managerRegionId; + private String storeId; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ShopSignerInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ShopSignerInfoDTO.java new file mode 100644 index 000000000..2d8163262 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ShopSignerInfoDTO.java @@ -0,0 +1,26 @@ +package com.cool.store.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/3 15:22 + * @Version 1.0 + */ +@Data +public class ShopSignerInfoDTO { + + @ApiModelProperty("签约人1姓名") + private String partnershipSignatoryFirst; + + @ApiModelProperty("签约人1手机号") + private String partnershipSignatoryFirstMobile; + + @ApiModelProperty("签约人2姓名") + private String partnershipSignatorySecond; + + @ApiModelProperty("签约人2手机号") + private String partnershipSignatorySecondMobile; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java index 84b2efe1d..a09d3333c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java @@ -58,5 +58,16 @@ public class StoreDTO { private String branchName; @ApiModelProperty("门店状态") + private String storeStatus; + @ApiModelProperty("门店状态名称") private String status; + + @ApiModelProperty("省") + private String province; + + @ApiModelProperty("市") + private String city; + + @ApiModelProperty("区") + private String county; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java new file mode 100644 index 000000000..9339be828 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java @@ -0,0 +1,19 @@ +package com.cool.store.dto.contract; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/9/17 14:42 + * @Version 1.0 + */ +@Data +public class ContractCallbackDTO { + + private Integer infoConsistencyFlag; + + private String reason; + + private String storeCode; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java new file mode 100644 index 000000000..6e9d92519 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java @@ -0,0 +1,53 @@ +package com.cool.store.dto.contract; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:52 + * @Version 1.0 + */ +@Data +public class ContractConfigDTO { + + @ApiModelProperty("主键 新建时忽略") + private Long id; + + @ApiModelProperty("品牌") + @NotBlank(message = "品牌不能为空") + private String brand; + + @ApiModelProperty("合同名称") + @NotBlank(message = "合同名称不能为空") + private String contractName; + + @ApiModelProperty("甲方名称") + @NotBlank(message = "甲方名称不能为空") + private String partyA; + + @ApiModelProperty("乙方名称") + private String partyB; + + @ApiModelProperty(" 丙方名称") + private String partyC; + + @ApiModelProperty("加盟模式 多选 用逗号隔开") + private List franchiseModeList; + + @ApiModelProperty("法大大模板ID") + private String fadadaTemplateId; + + @ApiModelProperty("序号") + @NotNull(message = "序号不能为空") + private Integer serialNumber; + + @ApiModelProperty("收款方名称") + private String payeeName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java new file mode 100644 index 000000000..7117c1af6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java @@ -0,0 +1,167 @@ +package com.cool.store.dto.contract; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.enums.JoinModeEnum; +import com.cool.store.utils.StringUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/9/8 16:43 + * @Version 1.0 + */ +public class ContractListDTO { + + @ApiModelProperty("主键 新建时忽略") + private Long id; + + @ApiModelProperty("品牌") + @NotBlank(message = "品牌不能为空") + private String brand; + + @ApiModelProperty("合同名称") + @NotBlank(message = "合同名称不能为空") + private String contractName; + + @ApiModelProperty("甲方名称") + @NotBlank(message = "甲方名称不能为空") + private String partyA; + + @ApiModelProperty("乙方名称") + @NotBlank(message = "乙方名称不能为空") + private String partyB; + + @ApiModelProperty(" 丙方名称") + private String partyC; + + @ApiModelProperty("加盟模式 多选 用逗号隔开") + private List franchiseModeList; + + @ApiModelProperty("法大大模板ID") + private String fadadaTemplateId; + + @ApiModelProperty("序号") + @NotNull(message = "序号不能为空") + private Integer serialNumber; + + @ApiModelProperty("收款方名称") + private String payeeName; + + private String franchiseMode; + + @Data + protected class FranchiseModeDTO{ + + private String id; + + private String name; + + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public String getPartyA() { + return partyA; + } + + public void setPartyA(String partyA) { + this.partyA = partyA; + } + + public String getPartyB() { + return partyB; + } + + public void setPartyB(String partyB) { + this.partyB = partyB; + } + + public String getPartyC() { + return partyC; + } + + public void setPartyC(String partyC) { + this.partyC = partyC; + } + + public void setFranchiseModeList(List franchiseModeList) { + this.franchiseModeList = franchiseModeList; + } + + public String getFadadaTemplateId() { + return fadadaTemplateId; + } + + public void setFadadaTemplateId(String fadadaTemplateId) { + this.fadadaTemplateId = fadadaTemplateId; + } + + public Integer getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(Integer serialNumber) { + this.serialNumber = serialNumber; + } + + public String getPayeeName() { + return payeeName; + } + + public void setPayeeName(String payeeName) { + this.payeeName = payeeName; + } + + public String getFranchiseMode() { + return franchiseMode; + } + + public void setFranchiseMode(String franchiseMode) { + this.franchiseMode = franchiseMode; + } + + public List getFranchiseModeList(){ + String[] split = this.franchiseMode.split(","); + ArrayList result = new ArrayList<>(); + Arrays.stream(split).filter(item -> StringUtil.isNotEmpty(item)).forEach(item -> { + FranchiseModeDTO franchiseModeDTO = new FranchiseModeDTO(); + franchiseModeDTO.setId(item); + franchiseModeDTO.setName(JoinModeEnum.getByCode(Integer.parseInt(item))); + result.add(franchiseModeDTO); + }); + return result; + } + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/PushContractDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/PushContractDTO.java new file mode 100644 index 000000000..f462420fc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/PushContractDTO.java @@ -0,0 +1,44 @@ +package com.cool.store.dto.contract; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; + +/** + * @Author suzhuhong + * @Date 2025/9/9 13:35 + * @Version 1.0 + */ +@Data +public class PushContractDTO { + + /** + * 品牌 + */ + @ApiModelProperty("品牌方名称") + private String brand; + + @ApiModelProperty("合同名称") + private String contractName; + + @ApiModelProperty("甲方名称") + private String partyA; + + @ApiModelProperty("乙方名称") + private String partyB; + + @ApiModelProperty("丙方名称") + private String partyC; + + @ApiModelProperty("法大大模板ID") + private String fadadaTemplateId; + + @ApiModelProperty("合同签约顺序") + private Integer serialNumber; + + @ApiModelProperty("收款方名称") + private String payeeName; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/QueryContractListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/QueryContractListDTO.java new file mode 100644 index 000000000..6e28fe9e1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/QueryContractListDTO.java @@ -0,0 +1,16 @@ +package com.cool.store.dto.contract; + +import com.cool.store.common.PageBasicInfo; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/9/8 16:43 + * @Version 1.0 + */ +@Data +public class QueryContractListDTO extends PageBasicInfo { + + private String brand; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationListDTO.java new file mode 100644 index 000000000..65570aad8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationListDTO.java @@ -0,0 +1,55 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/3 11:23 + * @Version 1.0 + */ +@Data +public class DecorationListDTO { + + private Long id; + + @ApiModelProperty("装修团队ID") + private Long teamId; + + @ApiModelProperty("门店ID") + private Long shopId; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("门店编号") + private String shopCode; + + @ApiModelProperty("门店区域ID") + private String regionId; + + @ApiModelProperty("门店区域名称") + private String regionName; + + @ApiModelProperty("门店省") + private String province; + + @ApiModelProperty("门店市") + private String city; + + @ApiModelProperty("门店县") + private String district; + + @ApiModelProperty("门店详细地址") + private String detailAddress; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("门店签约类型") + private Integer signType; + + @ApiModelProperty("门店装修分配状态") + private Integer decorationDescStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java new file mode 100644 index 000000000..0c8ab3113 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.decoration; + +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 18:41 + * @Version 1.0 + */ +@Data +public class DecorationTeamDTO { + + private Long id; + + private String teamName; + + private String teamCode; + + private Integer useSystem; + + private List cityList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TeamAreaMappingDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TeamAreaMappingDTO.java new file mode 100644 index 000000000..0f616ac1a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TeamAreaMappingDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto.decoration; + +import lombok.Data; + +import javax.persistence.Column; + +/** + * @Author suzhuhong + * @Date 2025/10/29 19:01 + * @Version 1.0 + */ +@Data +public class TeamAreaMappingDTO { + + private Long teamId; + + private Long openCityId; + + private String openCityName; + +} 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 7ebf36201..2ff8f812d 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 @@ -78,4 +78,7 @@ public class StoreXinFaDeviceDetail { } } + public String getDeviceId() { + return id; + } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountActiveUrlDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountActiveUrlDTO.java new file mode 100644 index 000000000..aef265344 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountActiveUrlDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 17:55 + * @Version 1.0 + */ +@Data +public class AccountActiveUrlDTO { + @ApiModelProperty(value = "商户门店编号",required = true) + private String outStoreId; + @ApiModelProperty(value = "H5 激活页短链(商户需访问此链接完成操作,非公网可直接访问需确认权限)",required = true) + private String activateUrl; + @ApiModelProperty(value = "短链失效时间(格式:YYYY-MM-DD HH:mm:ss,过期后需重新调用接口生成)",required = true) + private String expireTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java new file mode 100644 index 000000000..bde8f4c5a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:06 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AccountAuthenticationDTO { + + private Integer accountStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java new file mode 100644 index 000000000..84069a95c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -0,0 +1,89 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 门店签约人账户 + * @Author suzhuhong + * @Date 2025/11/13 16:54 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AccountInfoDTO { + + @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) + private Integer accountType; + + @ApiModelProperty(value = "营业执照号码") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称") + private String licenseName; + + @ApiModelProperty(value = "法人姓名") + private String legalName; + + @ApiModelProperty(value = "法人证件号码") + private String legalNo; + + @ApiModelProperty(value = "法人联系电话") + private String legalPhone; + + @ApiModelProperty(value = "门店编号", required = true) + private String storeSn; + + @ApiModelProperty(value = "账户编号", required = true) + private String accountNo; + + @ApiModelProperty(value = "账户名称", required = true) + private String accountName; + + @ApiModelProperty(value = "账户别名", required = true) + private String accountAliasName; + + @ApiModelProperty(value = "结算银行卡号", required = true) + private String accountCardNo; + + @ApiModelProperty(value = "结算卡银行预留手机号", required = true) + private String accountPhone; + + @ApiModelProperty(value = "开户支行名称", required = true) + private String bankName; + + @ApiModelProperty(value = "支行编号", required = true) + private String bankNo; + + @ApiModelProperty(value = "总行名称") + private String headBankName; + + @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通 5:开通失败", required = true) + private Integer accountStatus; + + @ApiModelProperty(value = "账户余额", required = true) + private String totalAmount; + + @ApiModelProperty(value = "可提现余额", required = true) + private String withdrawAmount; + + @ApiModelProperty(value = "打标状态 0 未打标 1 已打标", required = true) + private Integer labelingStatus; + + @ApiModelProperty(value = "是否签约人账户 0 否 1 是", required = true) + private Integer isLegal; + + @ApiModelProperty("工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; + + @ApiModelProperty("钱包类型 1平安 2网商") + private Integer walletType; + + @ApiModelProperty("失败原因(仅网商在创建失败或激活失败时返回)") + private String errMsg; + + @ApiModelProperty("crm门店id") + private String outStoreId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java new file mode 100644 index 000000000..2dec0858a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:58 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AccountNoDTO { + + private String accountNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountPageDTO.java new file mode 100644 index 000000000..36239e94d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountPageDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/18 10:12 + * @Version 1.0 + */ +@Data +public class AccountPageDTO { + + private List pageData; + + private WalletBasicPageInfo page; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java new file mode 100644 index 000000000..501545a1d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java @@ -0,0 +1,19 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:09 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AccountVerifyDTO { + + private String outStoreId; + + private Integer openStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java new file mode 100644 index 000000000..3fc4b9a98 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:59 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AddTagDTO { + + private Integer status; + + private Integer addTagType; + + @ApiModelProperty("网商状态,1.打标成功 2.打标失败 3.处理中") + private Integer wsStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java new file mode 100644 index 000000000..221953dfa --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java @@ -0,0 +1,27 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:54 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class BankDTO { + + @ApiModelProperty("银行编号") + private String headCode; + @ApiModelProperty("银行名称") + private String headName; + @ApiModelProperty("支行号") + private String branchCode; + @ApiModelProperty("支行名称") + private String branchName; + @ApiModelProperty("支行地址") + private String branchAddress; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java new file mode 100644 index 000000000..f6ffec419 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:36 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class BankListDTO { + + WalletBasicPageInfo page; + + List pageData; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDTO.java new file mode 100644 index 000000000..a175c4bae --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDTO.java @@ -0,0 +1,84 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:31 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class BillDTO { + + /** + * 业务系统付款单号(如 CRM 单号) + */ + private String reqNo; + + /** + * 交易Id(营帐通) + */ + private Long tradeId; + + /** + * 交易编号(扫呗) + */ + private String outTradeNo; + + /** + * 费用科目 + */ + private Integer feeItemId; + + /** + * 费用科目名称 + */ + private String feeItemName; + + /** + * 门店账户编号 + */ + private String storeAccountNo; + + /** + * 公司编号 + */ + private String companyCode; + + /** + * 公司账户编号 + */ + private String companyAccountNo; + + /** + * 提现银行卡 + */ + private String withdrawalBankCradNo; + + /** + * 提现银行卡户名 + */ + private String withdrawalBankCradName; + + /** + * 金额(元) + */ + private String amount; + + /** + * 交易状态 1.成功 2.失败 3.处理中 + */ + private Integer tradeStatus; + + /** + * 交易类型 1.转账 2.提现 + */ + private Integer tradeType; + + /** + * 交易发起时间 + */ + private String createTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java new file mode 100644 index 000000000..5a007ebfb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java @@ -0,0 +1,100 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:09 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class BillDetailDTO { + + /** + * 外部门店唯一标识 + */ + private String outStoreId; + + /** + * 业务系统付款单号(如 CRM 单号) + */ + private String reqNo; + + /** + * 交易Id(营帐通) + */ + private Long tradeId; + + /** + * 交易编号(扫呗) + */ + private String outTradeNo; + + /** + * 交易科目 + */ + private Integer feeItemId; + + /** + * 费用科目名称 + */ + private String feeItemName; + + /** + * 门店账户编号 + */ + private String storeAccountNo; + + /** + * 交易对方账户编号 + */ + private String transAccountNo; + + /** + * 交易对方账户名称 + */ + private String transAccountName; + + /** + * 公司编号 + */ + private String companyCode; + + /** + * 公司账户编号 + */ + private String companyAccountNo; + + /** + * 提现银行卡 + */ + private String withdrawalBankCardNo; + + /** + * 提现银行卡户名 + */ + private String withdrawalBankCardName; + + /** + * 金额(元) + */ + private String amount; + + /** + * 交易状态 1.成功 2.失败 3.处理中 + */ + private Integer tradeStatus; + + /** + * 交易类型 1.转账 2.提现 + */ + private Integer tradeType; + + /** + * 交易发起时间 + */ + private String createTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java new file mode 100644 index 000000000..1c0ae682e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java @@ -0,0 +1,33 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +import java.util.List; + +/** + *

+ * 交易列表DTO + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class BillPageDTO { + private List pageData; + + private WalletBasicPageInfo page; + + /** + * 收入 + */ + private Long getAmount; + + /** + * 支出 + */ + private Long useAmount; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java new file mode 100644 index 000000000..18aa95d27 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:34 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class CompanyDTO { + + @ApiModelProperty(value = "公司编号") + private String companyCode; + + @ApiModelProperty(value = "公司名称") + private String companyName; + + @ApiModelProperty(value = "公司账户") + private String companyAccountNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java new file mode 100644 index 000000000..26dba0dd6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java @@ -0,0 +1,23 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:57 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class CompanyListDTO { + + private List pageData; + + private WalletBasicPageInfo page; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java new file mode 100644 index 000000000..48cf39f83 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java @@ -0,0 +1,55 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:15 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class LargePaymentDTO { + + @ApiModelProperty(value = "外部门店唯一标识", required = true) + private String outStoreId; + + @ApiModelProperty(value = "请求预支付Id", required = true) + private String paymentId; + + @ApiModelProperty(value = "收款码唯一流水号", required = true) + private String transOrderTrace; + + @ApiModelProperty(value = "付款人账户编号", required = true) + private String payerAcctNo; + + @ApiModelProperty(value = "付款人户名", required = true) + private String payerAcctName; + + @ApiModelProperty(value = "付款银行名称") + private String payerBankName; + + @ApiModelProperty(value = "付款银行行号") + private String payerBankNo; + + @ApiModelProperty(value = "充值金额", required = true) + private String amt; + + @ApiModelProperty(value = "收款账号", required = true) + private String payeeAccNo; + + @ApiModelProperty(value = "收款账户名称", required = true) + private String payeeAccName; + + @ApiModelProperty(value = "收款银行名称", required = true) + private String payeeBankName; + + @ApiModelProperty(value = "收款银行行号", required = true) + private String payeeBankNo; + + @ApiModelProperty(value = "账号过期时间") + private String expireTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/OpenBasicInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/OpenBasicInfoDTO.java new file mode 100644 index 000000000..75426047d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/OpenBasicInfoDTO.java @@ -0,0 +1,116 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 开通网商需要的基本信息 + * @Author suzhuhong + * @Date 2025/11/20 10:49 + * @Version 1.0 + */ +@Data +public class OpenBasicInfoDTO { + + @ApiModelProperty(value = "门店编号") + private String storeCode; + + @ApiModelProperty("门店id") + private String storeId; + + /** + * 签约人名称 + */ + @ApiModelProperty(value = "签约人名称") + private String signerName; + + /** + * 签约人身份证号码 + */ + @ApiModelProperty(value = "签约人身份证号码") + private String signerIdCard; + + /** + * 签约人手机号 + */ + @ApiModelProperty(value = "签约人手机号") + private String signerPhone; + + /** + * 签约人身份证正面 + */ + @ApiModelProperty(value = "签约人身份证正面") + private String signerIdCardFront; + + /** + * 签约人身份证反面 + */ + @ApiModelProperty(value = "签约人身份证反面") + private String signerIdCardBack; + + /** + * 营业执照名字 + */ + @ApiModelProperty(value = "营业执照名字") + private String businessLicenseName; + + /** + * 营业执照社会信用代码 + */ + @ApiModelProperty(value = "营业执照社会信用代码") + private String businessLicenseCode; + + /** + * 营业执照照片 + */ + @ApiModelProperty(value = "营业执照照片") + private String businessLicensePhoto; + + /** + * 法人是否签约人 + */ + @ApiModelProperty(value = "法人是否签约人") + private Integer legalIsSigner; + + /** + * 法人身份证正面 + */ + @ApiModelProperty(value = "法人身份证正面") + private String legalIdCardFront; + + /** + * 法人身份证反面 + */ + @ApiModelProperty(value = "法人身份证反面") + private String legalIdCardBack; + + /** + * 结算卡 + */ + @ApiModelProperty(value = "结算卡") + private String settlementCard; + + /** + * 开户支行名称 + */ + @ApiModelProperty(value = "开户支行名称") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @ApiModelProperty(value = "开户支行编号") + private String bankBranchCode; + + /** + * 银行预留手机号 + */ + @ApiModelProperty(value = "银行预留手机号") + private String bankReservedPhone; + + @ApiModelProperty("来源,开通流程传1,其他0") + private Integer source; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PasswordDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PasswordDTO.java new file mode 100644 index 000000000..826997b0a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PasswordDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/26 18:14 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class PasswordDTO { + + @ApiModelProperty(value = "密码是否已存在 1.存在 2.不存在", required = true) + private Integer isExist; + + @ApiModelProperty(value = "是否已存在账户 1.存在 2.不存在", required = true) + private Boolean isExistAccount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java new file mode 100644 index 000000000..acc9b5a14 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java @@ -0,0 +1,76 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/13 18:23 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class PaymentDTO { + + @ApiModelProperty(name = "外部门店唯一标识", required = true) + private String outStoreId; + + @ApiModelProperty(name = "请求预支付Id", required = true) + private String paymentId; + + @ApiModelProperty(name = "收款码唯一流水号", required = true) + private String transOrderTrace; + + @ApiModelProperty(name = "金额", required = true) + private String totalFee; + + @ApiModelProperty(name = "状态:1-成功 2-失败 3-支付中 4-撤销", required = true) + private Integer orderStatus; + + @ApiModelProperty(name = "利楚订单号(商户订单号)") + private String outTradeNo; + + @ApiModelProperty(name = "通道订单号(银行订单号)") + private String channelOrderNo; + + @ApiModelProperty(name = "付款人账号") + private String payerAccNo; + + @ApiModelProperty(name = "付款人户名") + private String payerAccName; + + @ApiModelProperty(name = "付款人银行名称") + private String payerBankName; + + @ApiModelProperty(name = "付款银行行号") + private String payerBankNo; + + @ApiModelProperty(name = "收款账号", required = true) + private String payeeAccNo; + + @ApiModelProperty(name = "收款账户名称", required = true) + private String payeeAccName; + + @ApiModelProperty(name = "收款银行名称", required = true) + private String payeeBankName; + + @ApiModelProperty(name = "收款银行行号", required = true) + private String payeeBankNo; + + @ApiModelProperty(name = "账号过期时间") + private String expireTime; + + @ApiModelProperty(name = "创建时间") + private String createTime; + + @ApiModelProperty(name = "付款明细") + private List payList; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java new file mode 100644 index 000000000..4cd9c03d8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java @@ -0,0 +1,34 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:38 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class PaymentDetailDTO { + + @ApiModelProperty(value = "打款金额", required = true) + private String tranAmt; + + @ApiModelProperty(value = "付款人账号", required = true) + private String payerAccountName; + + @ApiModelProperty(value = "付款时间", required = true) + private String paySuccessTime; + + @ApiModelProperty(value = "付款银行账号", required = true) + private String payerAccountBankNo; + + @ApiModelProperty(value = "银行受理时间", required = true) + private String tranSeqNo; + + @ApiModelProperty(value = "付款账号", required = true) + private String payerAccountNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java new file mode 100644 index 000000000..7f3fd0dbb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:54 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class StoreAccountDTO { + + /** + * 营帐通的账户ID + */ + private String accountNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreIdDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreIdDTO.java new file mode 100644 index 000000000..116d2df3a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreIdDTO.java @@ -0,0 +1,16 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 18:20 + * @Version 1.0 + */ +@Data +public class StoreIdDTO { + @ApiModelProperty(value = "商户门店编号",required = true) + private String outStoreId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TextMsgSendDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TextMsgSendDTO.java new file mode 100644 index 000000000..23f917626 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TextMsgSendDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 网商激活短链DTO + *

+ * + * @author wangff + * @since 2025/11/20 + */ +@Data +public class TextMsgSendDTO { + @ApiModelProperty("crm门店id") + private String outStoreId; + + @ApiModelProperty("H5 激活页短链(商户需访问此链接完成操作,非公网可直接访问需确认权限)") + private String activityUrl; + + @ApiModelProperty("短链失效时间(格式:YYYY-MM-DD HH:mm:ss,过期后需重新调用接口生成)") + private String expireTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordDTO.java new file mode 100644 index 000000000..7ba7ac5a9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordDTO.java @@ -0,0 +1,80 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author suzhuhong + * @Date 2025/11/19 11:14 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class TradeRecordDTO implements Serializable { + + @ApiModelProperty(value = "业务系统付款单号(如 CRM 单号)", required = true) + private String reqNo; + + @ApiModelProperty(value = "交易(营帐通)", required = true) + private Long tradeId; + + @ApiModelProperty(value = "交易流水号(扫呗)", required = true) + private String outTradeNo; + + @ApiModelProperty(value = "费用科目", required = true) + private Integer feeItemId; + + @ApiModelProperty(value = "费用科目名称", required = true) + private String feeItemName; + + @ApiModelProperty(value = "转出方门店编号") + private String outStoreCode; + + @ApiModelProperty(value = "转入方门店编号") + private String inStoreCode; + + @ApiModelProperty(value = "转出方门店名称") + private String outStoreName; + + @ApiModelProperty(value = "转入方门店名称") + private String inStoreName; + + @ApiModelProperty(value = "转出方账户编号") + private String outAccountNo; + + @ApiModelProperty(value = "转入方账户编号") + private String inAccountNo; + + @ApiModelProperty(value = "转出方账户名称") + private String outAccountName; + + @ApiModelProperty(value = "转入方账户名称") + private String inAccountName; + + @ApiModelProperty(value = "提现银行卡号") + private String withdrawalBankCardNo; + + @ApiModelProperty(value = "提现银行卡户名") + private String withdrawalBankCardName; + + @ApiModelProperty(value = "金额(元)", required = true) + private String amount; + + @ApiModelProperty(value = "交易状态1.成功 2.失败 3.处理中 4.已退款", required = true) + private Integer tradeStatus; + + @ApiModelProperty(value = "1.转账2.提现 交易类型", required = true) + private Integer tradeType; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "错误原因") + private String errMsg; + + @ApiModelProperty(value = "交易发起时间YYYY-MM-DD HH:MM:SS", required = true) + private String createTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordListDTO.java new file mode 100644 index 000000000..97b5899c4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordListDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/19 11:15 + * @Version 1.0 + */ +@Data +public class TradeRecordListDTO { + + private List pageData; + + + private WalletBasicPageInfo page; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java new file mode 100644 index 000000000..563a2aea2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:49 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class TransferDTO { + + @ApiModelProperty(value="业务系统付款单号(如 CRM 单号)",required = true) + private String reqNo; + @ApiModelProperty(value="转账交易Id",required = true) + private Long tradeId; + @ApiModelProperty(value="金额(元)",required = true) + private String amount; + @ApiModelProperty(value="交易状态1.成功 2.失败 3.处理中",required = true) + private Integer tradeStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java new file mode 100644 index 000000000..820d2b696 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java @@ -0,0 +1,31 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:59 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class WithDrawerDTO { + + @ApiModelProperty(value = "门店ID",required = true) + private String outStoreId; + @ApiModelProperty(value = "业务系统付款单号(如 CRM 单号)",required = true) + private String reqNo; + @ApiModelProperty(value = "转账交易Id(营帐通系统)",required = true) + private String tradeId; + @ApiModelProperty(value = "提现科目",required = true) + private Long feeItemId; + @ApiModelProperty(value = "提现账户编号",required = true) + private String accountNo; + @ApiModelProperty(value = "金额(元)",required = true) + private String amount; + @ApiModelProperty(value = "交易状态1.成功 2.失败 3.处理中",required = true) + private String tradeStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java new file mode 100644 index 000000000..ef2c84d4c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java @@ -0,0 +1,297 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "xfsg_contract_config") +public class ContractConfigDO { + /** + * 主键ID + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 品牌 + */ + private String brand; + + /** + * 合同名称 + */ + @Column(name = "contract_name") + private String contractName; + + /** + * 甲方名称 + */ + @Column(name = "party_a") + private String partyA; + + /** + * 乙方名称 + */ + @Column(name = "party_b") + private String partyB; + + /** + * 丙方名称 + */ + @Column(name = "party_c") + private String partyC; + + /** + * 加盟模式 多选 用逗号隔开 + */ + @Column(name = "franchise_mode") + private String franchiseMode; + + /** + * 法大大模板ID + */ + @Column(name = "fadada_template_id") + private String fadadaTemplateId; + + /** + * 序号 + */ + @Column(name = "serial_number") + private Integer serialNumber; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + @Column(name = "payee_name") + @ApiModelProperty("收款方名称") + private String payeeName; + + @Column(name = "deleted") + private Integer deleted; + + public String getPayeeName() { + return payeeName; + } + + public void setPayeeName(String payeeName) { + this.payeeName = payeeName; + } + + public Integer getDeleted() { + return deleted; + } + + public void setDeleted(Integer deleted) { + this.deleted = deleted; + } + + /** + * 获取主键ID + * + * @return id - 主键ID + */ + public Long getId() { + return id; + } + + /** + * 设置主键ID + * + * @param id 主键ID + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取品牌 + * + * @return brand - 品牌 + */ + public String getBrand() { + return brand; + } + + /** + * 设置品牌 + * + * @param brand 品牌 + */ + public void setBrand(String brand) { + this.brand = brand; + } + + /** + * 获取合同名称 + * + * @return contract_name - 合同名称 + */ + public String getContractName() { + return contractName; + } + + /** + * 设置合同名称 + * + * @param contractName 合同名称 + */ + public void setContractName(String contractName) { + this.contractName = contractName; + } + + /** + * 获取甲方名称 + * + * @return party_a - 甲方名称 + */ + public String getPartyA() { + return partyA; + } + + /** + * 设置甲方名称 + * + * @param partyA 甲方名称 + */ + public void setPartyA(String partyA) { + this.partyA = partyA; + } + + /** + * 获取乙方名称 + * + * @return party_b - 乙方名称 + */ + public String getPartyB() { + return partyB; + } + + /** + * 设置乙方名称 + * + * @param partyB 乙方名称 + */ + public void setPartyB(String partyB) { + this.partyB = partyB; + } + + /** + * 获取丙方名称 + * + * @return party_c - 丙方名称 + */ + public String getPartyC() { + return partyC; + } + + /** + * 设置丙方名称 + * + * @param partyC 丙方名称 + */ + public void setPartyC(String partyC) { + this.partyC = partyC; + } + + /** + * 获取加盟模式 多选 用逗号隔开 + * + * @return franchise_mode - 加盟模式 多选 用逗号隔开 + */ + public String getFranchiseMode() { + return franchiseMode; + } + + /** + * 设置加盟模式 多选 用逗号隔开 + * + * @param franchiseMode 加盟模式 多选 用逗号隔开 + */ + public void setFranchiseMode(String franchiseMode) { + this.franchiseMode = franchiseMode; + } + + /** + * 获取法大大模板ID + * + * @return fadada_template_id - 法大大模板ID + */ + public String getFadadaTemplateId() { + return fadadaTemplateId; + } + + /** + * 设置法大大模板ID + * + * @param fadadaTemplateId 法大大模板ID + */ + public void setFadadaTemplateId(String fadadaTemplateId) { + this.fadadaTemplateId = fadadaTemplateId; + } + + /** + * 获取序号 + * + * @return serial_number - 序号 + */ + public Integer getSerialNumber() { + return serialNumber; + } + + /** + * 设置序号 + * + * @param serialNumber 序号 + */ + public void setSerialNumber(Integer serialNumber) { + this.serialNumber = serialNumber; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java index 54b6a0f0f..4c11a5798 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java @@ -158,4 +158,7 @@ public class ShopInfoDO { //红圈通门店id @Column(name = "hqt_shop_id") private String hqtShopId; + // 门店id + @Column(name = "store_id") + private String storeId; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java index 34af719bc..3dabd196b 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java @@ -86,4 +86,102 @@ public class SignFranchiseDO { //是否统管 : 1-统管,0-不统管', @Column(name = "unified_management") private Integer unifiedManagement; + /** + * 信息是否一致 财务使用 + */ + @Column(name = "info_consistency_flag") + private Integer infoConsistencyFlag; + /** + * 不一致原因 + */ + @Column(name = "reason") + private String reason; + + @Column(name = "old_shop_code") + private String oldShopCode; + + /** + * 合同加盟费 + */ + @Column(name = "contract_franchise_fee") + private String contractFranchiseFee; + + /** + * 合同管理费 + */ + @Column(name = "contract_manage_fee") + private String contractManageFee; + + /** + * 合同品牌使用费 + */ + @Column(name = "contract_brand_use_fee") + private String contractBrandUseFee; + + /** + * 合同设计费 + */ + @Column(name = "contract_performance_bond") + private String contractPerformanceBond; + + /** + * 合同保证金 + */ + @Column(name = "contract_loan_margin") + private String contractLoanMargin; + + /** + * 合同系统使用费 + */ + @Column(name = "contract_sys_user_fee") + private String contractSysUserFee; + + /** + * 加盟来源 + */ + @Column(name = "join_source") + private String joinSource; + + /** + * 签约形式 + */ + @Column(name = "sign_modality") + private String signModality; + + /** + * 加盟费频率 + */ + @Column(name = "franchise_fee_frequency") + private Integer franchiseFeeFrequency; + + /** + * 品牌使用费频率 + */ + @Column(name = "brand_use_fee_frequency") + private Integer brandUseFeeFrequency; + + /** + * 管理费频率 + */ + @Column(name = "manage_fee_frequency") + private Integer manageFeeFrequency; + + /** + * 加盟费折扣金额 + */ + @Column(name = "discount_amount") + private String discountAmount; + + @Column(name = "create_user_id") + private String createUserId; + + @Column(name = "update_user_id") + private String updateUserId; + + @Column(name = "currency") + private String currency; + + @Column(name = "contract_service_life") + private Integer contractServiceLife; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/DecorationTeamConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/DecorationTeamConfigDO.java new file mode 100644 index 000000000..718b81d42 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/DecorationTeamConfigDO.java @@ -0,0 +1,168 @@ +package com.cool.store.entity.decoration; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_decoration_team_config") +public class DecorationTeamConfigDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 团队名称 + */ + @Column(name = "team_name") + private String teamName; + + /** + * 团队编号 + */ + @Column(name = "team_code") + private String teamCode; + + /** + * 使用系统(1-CRM,2-红圈通) + */ + @Column(name = "use_system") + private Integer useSystem; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 删除状态(0-正常,1-删除) + */ + private Integer deleted; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取团队名称 + * + * @return team_name - 团队名称 + */ + public String getTeamName() { + return teamName; + } + + /** + * 设置团队名称 + * + * @param teamName 团队名称 + */ + public void setTeamName(String teamName) { + this.teamName = teamName; + } + + /** + * 获取团队编号 + * + * @return team_code - 团队编号 + */ + public String getTeamCode() { + return teamCode; + } + + /** + * 设置团队编号 + * + * @param teamCode 团队编号 + */ + public void setTeamCode(String teamCode) { + this.teamCode = teamCode; + } + + /** + * 获取使用系统(1-CRM,2-红圈通) + * + * @return use_system - 使用系统(1-CRM,2-红圈通) + */ + public Integer getUseSystem() { + return useSystem; + } + + /** + * 设置使用系统(1-CRM,2-红圈通) + * + * @param useSystem 使用系统(1-CRM,2-红圈通) + */ + public void setUseSystem(Integer useSystem) { + this.useSystem = useSystem; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取删除状态(0-正常,1-删除) + * + * @return deleted - 删除状态(0-正常,1-删除) + */ + public Integer getDeleted() { + return deleted; + } + + /** + * 设置删除状态(0-正常,1-删除) + * + * @param deleted 删除状态(0-正常,1-删除) + */ + public void setDeleted(Integer deleted) { + this.deleted = deleted; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java new file mode 100644 index 000000000..b2e45d82e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java @@ -0,0 +1,145 @@ +package com.cool.store.entity.decoration; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_shop_decoration_assign") +public class ShopDecorationAssignDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 装修团队id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 分配状态(0-待分配,1-已分配) + */ + @Column(name = "decoration_desc_status") + private Integer decorationDescStatus; + + /** + * 装修团队id + */ + @Column(name = "decoration_team_id") + private Long decorationTeamId; + + /** + * 创建时间 + */ + @Column(name = "created_time") + private Date createdTime; + + /** + * 更新时间 + */ + @Column(name = "updated_time") + private Date updatedTime; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取装修团队id + * + * @return shop_id - 装修团队id + */ + public Long getShopId() { + return shopId; + } + + /** + * 设置装修团队id + * + * @param shopId 装修团队id + */ + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + /** + * 获取分配状态(0-待分配,1-已分配) + * + * @return decoration_desc_status - 分配状态(0-待分配,1-已分配) + */ + public Integer getDecorationDescStatus() { + return decorationDescStatus; + } + + /** + * 设置分配状态(0-待分配,1-已分配) + * + * @param decorationDescStatus 分配状态(0-待分配,1-已分配) + */ + public void setDecorationDescStatus(Integer decorationDescStatus) { + this.decorationDescStatus = decorationDescStatus; + } + + /** + * 获取装修团队id + * + * @return decoration_team_id - 装修团队id + */ + public Long getDecorationTeamId() { + return decorationTeamId; + } + + /** + * 设置装修团队id + * + * @param decorationTeamId 装修团队id + */ + public void setDecorationTeamId(Long decorationTeamId) { + this.decorationTeamId = decorationTeamId; + } + + /** + * 获取创建时间 + * + * @return created_time - 创建时间 + */ + public Date getCreatedTime() { + return createdTime; + } + + /** + * 设置创建时间 + * + * @param createdTime 创建时间 + */ + public void setCreatedTime(Date createdTime) { + this.createdTime = createdTime; + } + + /** + * 获取更新时间 + * + * @return updated_time - 更新时间 + */ + public Date getUpdatedTime() { + return updatedTime; + } + + /** + * 设置更新时间 + * + * @param updatedTime 更新时间 + */ + public void setUpdatedTime(Date updatedTime) { + this.updatedTime = updatedTime; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/TeamAreaMappingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/TeamAreaMappingDO.java new file mode 100644 index 000000000..028ebf824 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/TeamAreaMappingDO.java @@ -0,0 +1,97 @@ +package com.cool.store.entity.decoration; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_team_area_mapping") +public class TeamAreaMappingDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 团队ID + */ + @Column(name = "team_id") + private Long teamId; + + /** + * 城市ID + */ + @Column(name = "open_city_id") + private Long openCityId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取团队ID + * + * @return team_id - 团队ID + */ + public Long getTeamId() { + return teamId; + } + + /** + * 设置团队ID + * + * @param teamId 团队ID + */ + public void setTeamId(Long teamId) { + this.teamId = teamId; + } + + /** + * 获取城市ID + * + * @return open_city_id - 城市ID + */ + public Long getOpenCityId() { + return openCityId; + } + + /** + * 设置城市ID + * + * @param openCityId 城市ID + */ + public void setOpenCityId(Long openCityId) { + this.openCityId = openCityId; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/OpenBankInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/OpenBankInfoDO.java new file mode 100644 index 000000000..529da0b4e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/OpenBankInfoDO.java @@ -0,0 +1,148 @@ +package com.cool.store.entity.wallet; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Table(name = "zxjp_open_bank_info") +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class OpenBankInfoDO { + /** + * 门店编号 + */ + @Column(name = "store_code") + private String storeCode; + + /** + * 门店id + */ + @Column(name = "store_id") + private String storeId; + + /** + * 签约人名称 + */ + @Column(name = "signer_name") + private String signerName; + + /** + * 签约人身份证号码 + */ + @Column(name = "signer_id_card") + private String signerIdCard; + + /** + * 签约人手机号 + */ + @Column(name = "signer_phone") + private String signerPhone; + + /** + * 签约人身份证正面 + */ + @Column(name = "signer_id_card_front") + private String signerIdCardFront; + + /** + * 签约人身份证反面 + */ + @Column(name = "signer_id_card_back") + private String signerIdCardBack; + + /** + * 营业执照名字 + */ + @Column(name = "business_license_name") + private String businessLicenseName; + + /** + * 营业执照社会信用代码 + */ + @Column(name = "business_license_code") + private String businessLicenseCode; + + /** + * 营业执照照片 + */ + @Column(name = "business_license_photo") + private String businessLicensePhoto; + + /** + * 法人名称 + */ + @Column(name = "legal_name") + private String legalName; + + /** + * 法人身份证号码 + */ + @Column(name = "legal_id_card") + private String legalIdCard; + + /** + * 法人身份证有效期字段 + */ + @Column(name = "legal_id_card_expire_time") + private String legalIdCardExpireTime; + + /** + * 法人手机号 + */ + @Column(name = "legal_phone") + private String legalPhone; + + /** + * 法人是否签约人 + */ + @Column(name = "legal_is_signer") + private Integer legalIsSigner; + + /** + * 法人身份证正面 + */ + @Column(name = "legal_id_card_front") + private String legalIdCardFront; + + /** + * 法人身份证反面 + */ + @Column(name = "legal_id_card_back") + private String legalIdCardBack; + + /** + * 结算卡 + */ + @Column(name = "settlement_card") + private String settlementCard; + + /** + * 开户支行名称 + */ + @Column(name = "bank_branch_name") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @Column(name = "bank_branch_code") + private String bankBranchCode; + + /** + * 银行预留手机号 + */ + @Column(name = "bank_reserved_phone") + private String bankReservedPhone; + + /** + * 来源,开通流程传1,其他0 + */ + @Column(name = "source") + private Integer source; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/TempOpenWalletInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/TempOpenWalletInfoDO.java new file mode 100644 index 000000000..36f34c2ff --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/TempOpenWalletInfoDO.java @@ -0,0 +1,599 @@ +package com.cool.store.entity.wallet; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_temp_open_wallet_info") +public class TempOpenWalletInfoDO { + /** + * 门店编号 + */ + @Column(name = "store_code") + private String storeCode; + + /** + * 门店名称 + */ + @Column(name = "store_name") + private String storeName; + + /** + * 门店模式 + */ + @Column(name = "store_mode") + private String storeMode; + + /** + * 台账名称 + */ + @Column(name = "ledger_name") + private String ledgerName; + + /** + * 台账状态 + */ + @Column(name = "ledger_status") + private String ledgerStatus; + + /** + * 工商类型 + */ + @Column(name = "business_type") + private String businessType; + + /** + * 工商注册名称 + */ + @Column(name = "business_reg_name") + private String businessRegName; + + /** + * 营业执照编号 + */ + @Column(name = "business_license_no") + private String businessLicenseNo; + + /** + * 工商地址 + */ + @Column(name = "business_address") + private String businessAddress; + + /** + * 省 + */ + private String province; + + /** + * 市 + */ + private String city; + + /** + * 区 + */ + private String district; + + /** + * 法人名称 + */ + @Column(name = "legal_person_name") + private String legalPersonName; + + /** + * 法人证件号 + */ + @Column(name = "legal_person_id_no") + private String legalPersonIdNo; + + /** + * 身份证开始时间 + */ + @Column(name = "legal_id_start_date") + private Date legalIdStartDate; + + /** + * 身份证过期时间 + */ + @Column(name = "legal_id_expire_date") + private Date legalIdExpireDate; + + /** + * 结算人 + */ + @Column(name = "settler_name") + private String settlerName; + + /** + * 结算人证件号 + */ + @Column(name = "settler_id_no") + private String settlerIdNo; + + /** + * 结算人身份证开始时间 + */ + @Column(name = "settler_id_start_date") + private Date settlerIdStartDate; + + /** + * 结算人身份证过期时间 + */ + @Column(name = "settler_id_expire_date") + private Date settlerIdExpireDate; + + /** + * 开户支行名称 + */ + @Column(name = "bank_branch_name") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @Column(name = "bank_branch_no") + private String bankBranchNo; + + /** + * 结算卡 + */ + @Column(name = "settlement_card_no") + private String settlementCardNo; + + /** + * 银行预留手机号 + */ + @Column(name = "bank_reserved_phone") + private String bankReservedPhone; + + /** + * 分账关系 + */ + @Column(name = "accounting_relation") + private String accountingRelation; + + /** + * 获取门店编号 + * + * @return store_id - 门店编号 + */ + public String getStoreCode() { + return storeCode; + } + + public void setStoreCode(String storeCode) { + this.storeCode = storeCode; + } + + /** + * 获取门店名称 + * + * @return store_name - 门店名称 + */ + public String getStoreName() { + return storeName; + } + + /** + * 设置门店名称 + * + * @param storeName 门店名称 + */ + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + /** + * 获取门店模式 + * + * @return store_mode - 门店模式 + */ + public String getStoreMode() { + return storeMode; + } + + /** + * 设置门店模式 + * + * @param storeMode 门店模式 + */ + public void setStoreMode(String storeMode) { + this.storeMode = storeMode; + } + + /** + * 获取台账名称 + * + * @return ledger_name - 台账名称 + */ + public String getLedgerName() { + return ledgerName; + } + + /** + * 设置台账名称 + * + * @param ledgerName 台账名称 + */ + public void setLedgerName(String ledgerName) { + this.ledgerName = ledgerName; + } + + /** + * 获取台账状态 + * + * @return ledger_status - 台账状态 + */ + public String getLedgerStatus() { + return ledgerStatus; + } + + /** + * 设置台账状态 + * + * @param ledgerStatus 台账状态 + */ + public void setLedgerStatus(String ledgerStatus) { + this.ledgerStatus = ledgerStatus; + } + + /** + * 获取工商类型 + * + * @return business_type - 工商类型 + */ + public String getBusinessType() { + return businessType; + } + + /** + * 设置工商类型 + * + * @param businessType 工商类型 + */ + public void setBusinessType(String businessType) { + this.businessType = businessType; + } + + /** + * 获取工商注册名称 + * + * @return business_reg_name - 工商注册名称 + */ + public String getBusinessRegName() { + return businessRegName; + } + + /** + * 设置工商注册名称 + * + * @param businessRegName 工商注册名称 + */ + public void setBusinessRegName(String businessRegName) { + this.businessRegName = businessRegName; + } + + /** + * 获取营业执照编号 + * + * @return business_license_no - 营业执照编号 + */ + public String getBusinessLicenseNo() { + return businessLicenseNo; + } + + /** + * 设置营业执照编号 + * + * @param businessLicenseNo 营业执照编号 + */ + public void setBusinessLicenseNo(String businessLicenseNo) { + this.businessLicenseNo = businessLicenseNo; + } + + /** + * 获取工商地址 + * + * @return business_address - 工商地址 + */ + public String getBusinessAddress() { + return businessAddress; + } + + /** + * 设置工商地址 + * + * @param businessAddress 工商地址 + */ + public void setBusinessAddress(String businessAddress) { + this.businessAddress = businessAddress; + } + + /** + * 获取省 + * + * @return province - 省 + */ + public String getProvince() { + return province; + } + + /** + * 设置省 + * + * @param province 省 + */ + public void setProvince(String province) { + this.province = province; + } + + /** + * 获取市 + * + * @return city - 市 + */ + public String getCity() { + return city; + } + + /** + * 设置市 + * + * @param city 市 + */ + public void setCity(String city) { + this.city = city; + } + + /** + * 获取区 + * + * @return district - 区 + */ + public String getDistrict() { + return district; + } + + /** + * 设置区 + * + * @param district 区 + */ + public void setDistrict(String district) { + this.district = district; + } + + /** + * 获取法人名称 + * + * @return legal_person_name - 法人名称 + */ + public String getLegalPersonName() { + return legalPersonName; + } + + /** + * 设置法人名称 + * + * @param legalPersonName 法人名称 + */ + public void setLegalPersonName(String legalPersonName) { + this.legalPersonName = legalPersonName; + } + + /** + * 获取法人证件号 + * + * @return legal_person_id_no - 法人证件号 + */ + public String getLegalPersonIdNo() { + return legalPersonIdNo; + } + + /** + * 设置法人证件号 + * + * @param legalPersonIdNo 法人证件号 + */ + public void setLegalPersonIdNo(String legalPersonIdNo) { + this.legalPersonIdNo = legalPersonIdNo; + } + + /** + * 获取身份证开始时间 + * + * @return legal_id_start_date - 身份证开始时间 + */ + public Date getLegalIdStartDate() { + return legalIdStartDate; + } + + /** + * 设置身份证开始时间 + * + * @param legalIdStartDate 身份证开始时间 + */ + public void setLegalIdStartDate(Date legalIdStartDate) { + this.legalIdStartDate = legalIdStartDate; + } + + /** + * 获取身份证过期时间 + * + * @return legal_id_expire_date - 身份证过期时间 + */ + public Date getLegalIdExpireDate() { + return legalIdExpireDate; + } + + /** + * 设置身份证过期时间 + * + * @param legalIdExpireDate 身份证过期时间 + */ + public void setLegalIdExpireDate(Date legalIdExpireDate) { + this.legalIdExpireDate = legalIdExpireDate; + } + + /** + * 获取结算人 + * + * @return settler_name - 结算人 + */ + public String getSettlerName() { + return settlerName; + } + + /** + * 设置结算人 + * + * @param settlerName 结算人 + */ + public void setSettlerName(String settlerName) { + this.settlerName = settlerName; + } + + /** + * 获取结算人证件号 + * + * @return settler_id_no - 结算人证件号 + */ + public String getSettlerIdNo() { + return settlerIdNo; + } + + /** + * 设置结算人证件号 + * + * @param settlerIdNo 结算人证件号 + */ + public void setSettlerIdNo(String settlerIdNo) { + this.settlerIdNo = settlerIdNo; + } + + /** + * 获取结算人身份证开始时间 + * + * @return settler_id_start_date - 结算人身份证开始时间 + */ + public Date getSettlerIdStartDate() { + return settlerIdStartDate; + } + + /** + * 设置结算人身份证开始时间 + * + * @param settlerIdStartDate 结算人身份证开始时间 + */ + public void setSettlerIdStartDate(Date settlerIdStartDate) { + this.settlerIdStartDate = settlerIdStartDate; + } + + /** + * 获取结算人身份证过期时间 + * + * @return settler_id_expire_date - 结算人身份证过期时间 + */ + public Date getSettlerIdExpireDate() { + return settlerIdExpireDate; + } + + /** + * 设置结算人身份证过期时间 + * + * @param settlerIdExpireDate 结算人身份证过期时间 + */ + public void setSettlerIdExpireDate(Date settlerIdExpireDate) { + this.settlerIdExpireDate = settlerIdExpireDate; + } + + /** + * 获取开户支行名称 + * + * @return bank_branch_name - 开户支行名称 + */ + public String getBankBranchName() { + return bankBranchName; + } + + /** + * 设置开户支行名称 + * + * @param bankBranchName 开户支行名称 + */ + public void setBankBranchName(String bankBranchName) { + this.bankBranchName = bankBranchName; + } + + /** + * 获取开户支行编号 + * + * @return bank_branch_no - 开户支行编号 + */ + public String getBankBranchNo() { + return bankBranchNo; + } + + /** + * 设置开户支行编号 + * + * @param bankBranchNo 开户支行编号 + */ + public void setBankBranchNo(String bankBranchNo) { + this.bankBranchNo = bankBranchNo; + } + + /** + * 获取结算卡 + * + * @return settlement_card_no - 结算卡 + */ + public String getSettlementCardNo() { + return settlementCardNo; + } + + /** + * 设置结算卡 + * + * @param settlementCardNo 结算卡 + */ + public void setSettlementCardNo(String settlementCardNo) { + this.settlementCardNo = settlementCardNo; + } + + /** + * 获取银行预留手机号 + * + * @return bank_reserved_phone - 银行预留手机号 + */ + public String getBankReservedPhone() { + return bankReservedPhone; + } + + /** + * 设置银行预留手机号 + * + * @param bankReservedPhone 银行预留手机号 + */ + public void setBankReservedPhone(String bankReservedPhone) { + this.bankReservedPhone = bankReservedPhone; + } + + /** + * 获取分账关系 + * + * @return accounting_relation - 分账关系 + */ + public String getAccountingRelation() { + return accountingRelation; + } + + /** + * 设置分账关系 + * + * @param accountingRelation 分账关系 + */ + public void setAccountingRelation(String accountingRelation) { + this.accountingRelation = accountingRelation; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletPaymentOrderDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletPaymentOrderDO.java new file mode 100644 index 000000000..11f192489 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletPaymentOrderDO.java @@ -0,0 +1,74 @@ +package com.cool.store.entity.wallet; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.*; + +/** + * 钱包支付订单 + */ +@Table(name = "zxjp_wallet_payment_order") +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class WalletPaymentOrderDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 门店id + */ + @Column(name = "store_id") + private String storeId; + + /** + * 预支付id + */ + @Column(name = "payment_id") + private String paymentId; + + /** + * 订单类型,0充值 1提现 + */ + @Column(name = "type") + private Integer type; + + /** + * 金额 + */ + private BigDecimal amount; + + /** + * 过期时间 + */ + @Column(name = "expire_time") + private String expireTime; + + /** + * 订单状态:1-成功 2-失败 3-支付中 4-撤销 + */ + @Column(name = "order_status") + private Integer orderStatus; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java index be8b6ec1c..5a9964519 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java @@ -1,6 +1,7 @@ package com.cool.store.request; import com.cool.store.entity.SignFranchiseDO; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -62,7 +63,7 @@ public class AddSignFranchiseRequest { private Date contractStartTime; @ApiModelProperty("合同结束日期") - private Date contractStartEndTime; + private Date contractEndTime; @ApiModelProperty("用印次数") private String impressionNum; @@ -148,6 +149,91 @@ public class AddSignFranchiseRequest { @ApiModelProperty("是否统管 : 1-统管,0-不统管") private Integer unifiedManagement; + @ApiModelProperty("老店编码 签约类型选择老店转加盟时有") + private String oldShopCode; + + @ApiModelProperty("合同加盟费") + @NotBlank(message = "合同加盟费不能为空") + private String contractFranchiseFee; + + /** + * 合同管理费 + */ + @ApiModelProperty("合同管理费") + @NotBlank(message = "合同管理费不能为空") + private String contractManageFee; + + /** + * 合同品牌使用费 + */ + @ApiModelProperty("合同品牌使用费") + @NotBlank(message = "合同品牌使用费不能为空") + private String contractBrandUseFee; + + /** + * 合同设计费 + */ + @ApiModelProperty("合同设计费") + @NotBlank(message = "合同设计费不能为空") + private String contractPerformanceBond; + + /** + * 合同保证金 + */ + @ApiModelProperty("合同保证金") + @NotBlank(message = "合同保证金不能为空") + private String contractLoanMargin; + + /** + * 合同系统使用费 + */ + @ApiModelProperty("合同系统使用费") + @NotBlank(message = "合同系统使用费不能为空") + private String contractSysUserFee; + + /** + * 加盟来源 + */ + @ApiModelProperty("加盟来源") + private String joinSource; + + /** + * 签约形式 + */ + @ApiModelProperty("签约形式") + private String signModality; + + /** + * 加盟费频率 + */ + @ApiModelProperty("加盟费频率") + private Integer franchiseFeeFrequency; + + /** + * 品牌使用费频率 + */ + @ApiModelProperty("品牌使用费频率") + private Integer brandUseFeeFrequency; + + /** + * 管理费频率 + */ + @ApiModelProperty("管理费频率") + private Integer manageFeeFrequency; + + /** + * 加盟费折扣金额 + */ + @ApiModelProperty("加盟费折扣金额") + private String discountAmount; + + @ApiModelProperty("币种") + private String currency; + + @ApiModelProperty("合同使用年限") + private Integer contractServiceLife; + + public SignFranchiseDO toSignFranchiseDO() { @@ -159,8 +245,9 @@ public class AddSignFranchiseRequest { signFranchiseDO.setIsBusinessLicense(this.isBusinessLicense); signFranchiseDO.setIsFoodLicense(this.isFoodLicense); signFranchiseDO.setContractStartTime(this.contractStartTime); - signFranchiseDO.setContractEndTime(this.contractStartEndTime); + signFranchiseDO.setContractEndTime(this.contractEndTime); signFranchiseDO.setImpressionNum(this.impressionNum); + signFranchiseDO.setOldShopCode(this.oldShopCode); // signFranchiseDO.setBusinessStartHours(setMill(this.businessStartHours)); // signFranchiseDO.setBusinessEndHours(setMill(this.businessEndHours)); // signFranchiseDO.setIrregularReason(this.irregularReason); @@ -180,6 +267,20 @@ public class AddSignFranchiseRequest { signFranchiseDO.setIntroductionAward(this.introductionAward); signFranchiseDO.setPartnershipSignatoryFirstWhichStore(this.partnershipSignatoryFirstWhichStore); signFranchiseDO.setUnifiedManagement(this.unifiedManagement); + signFranchiseDO.setContractFranchiseFee(this.contractFranchiseFee); + signFranchiseDO.setContractManageFee(this.contractManageFee); + signFranchiseDO.setContractBrandUseFee(this.contractBrandUseFee); + signFranchiseDO.setContractPerformanceBond(this.contractPerformanceBond); + signFranchiseDO.setContractLoanMargin(this.contractLoanMargin); + signFranchiseDO.setContractSysUserFee(this.contractSysUserFee); + signFranchiseDO.setJoinSource(this.joinSource); + signFranchiseDO.setSignModality(this.signModality); + signFranchiseDO.setFranchiseFeeFrequency(this.franchiseFeeFrequency); + signFranchiseDO.setBrandUseFeeFrequency(this.brandUseFeeFrequency); + signFranchiseDO.setManageFeeFrequency(this.manageFeeFrequency); + signFranchiseDO.setDiscountAmount(this.discountAmount); + signFranchiseDO.setCurrency(this.currency); + signFranchiseDO.setContractServiceLife(this.contractServiceLife); return signFranchiseDO; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java index 642bc5d6d..7f1e8cc20 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java @@ -16,6 +16,8 @@ import java.util.Date; public class StoreMasterDTO { private String enterpriseId; + @ApiModelProperty("门店id") + private String storeId; @ApiModelProperty("门店名称(加盟签约)") private String storeName; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/AddTeamRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/AddTeamRequest.java new file mode 100644 index 000000000..8d1d9493d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/AddTeamRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 16:13 + * @Version 1.0 + */ +@Data +public class AddTeamRequest { + @ApiModelProperty("团队名称") + private String teamName; + @ApiModelProperty("负责区域列表 直传市ID,选择省时,将市Id全部传入") + private List openCityIdList; + @ApiModelProperty("团队名称") + private Integer userSystem; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DecorationListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DecorationListRequest.java new file mode 100644 index 000000000..328e96bb8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DecorationListRequest.java @@ -0,0 +1,38 @@ +package com.cool.store.request.decoration; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/3 13:31 + * @Version 1.0 + */ +@Data +public class DecorationListRequest extends PageBasicInfo { + + @ApiModelProperty("关键字 门店名称/门店编码") + private String keyword; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("门店签约类型") + private Integer signType; + + @ApiModelProperty("门店区域ID") + private Integer regionId; + + @ApiModelProperty("门店意向开店区域") + private Long wantShopAreaId; + + @ApiModelProperty(value = "门店意向开店区域IDs",hidden = true) + private List wantShopAreaIds; + + @ApiModelProperty("门店装修分配状态") + private Integer decorationDescStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DeletedRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DeletedRequest.java new file mode 100644 index 000000000..0a8b513d6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DeletedRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request.decoration; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/3 16:40 + * @Version 1.0 + */ +@Data +public class DeletedRequest { + + private Long teamId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateConstructionTeamRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateConstructionTeamRequest.java new file mode 100644 index 000000000..41ace8c8b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateConstructionTeamRequest.java @@ -0,0 +1,17 @@ +package com.cool.store.request.decoration; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/3 16:00 + * @Version 1.0 + */ +@Data +public class UpdateConstructionTeamRequest { + + private Long id; + + private Long teamId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateTeamRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateTeamRequest.java new file mode 100644 index 000000000..3ded0fdea --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateTeamRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.request.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 16:16 + * @Version 1.0 + */ +@Data +public class UpdateTeamRequest { + + @ApiModelProperty("ID") + private Long id; + @ApiModelProperty("团队名称") + private String teamCode; + @ApiModelProperty("团队名称") + private String teamName; + @ApiModelProperty("负责区域列表 直传市ID,选择省时,将市Id全部传入") + private List openCityIdList; + @ApiModelProperty("团队名称") + private Integer userSystem; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java new file mode 100644 index 000000000..9d03f7c2e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java @@ -0,0 +1,76 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; + + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:09 + * @Version 1.0 + */ +@Data +@ApiModel(description = "营业执照信息请求参数") +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class AccountAddTagRequest { + + @ApiModelProperty(value = "外部门店唯一标识", required = true) + @NotBlank(message = "外部门店唯一标识不能为空") + private String outStoreId; + + @ApiModelProperty(value = "营业执照号码", required = true) + @NotBlank(message = "营业执照号码不能为空") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称", required = true) + @NotBlank(message = "工商注册名称不能为空") + private String licenseName; + + @ApiModelProperty(value = "营业执照到期日(格式YYYY-MM-DD),如果证件到期日期为“长期”,则传:“2999-12-31”)") + private String licenseExpire; + + @ApiModelProperty(value = "法人姓名", required = true) + @NotBlank(message = "法人姓名不能为空") + private String legalName; + + @ApiModelProperty(value = "法人证件号码", required = true) + @NotBlank(message = "法人证件号码不能为空") + private String legalNo; + + @ApiModelProperty(value = "证件发证日期 yyyy-MM-dd") + private String idCardStartDate; + + @ApiModelProperty(value = "证件到期日期 yyyy-MM-dd,如果证件到期日期为“长期”,则传:“2999-12-31”") + private String idCardEndDate; + + @ApiModelProperty(value = "法人联系电话", required = true) + @NotBlank(message = "法人联系电话不能为空") + private String legalPhone; + + @ApiModelProperty(value = "开户许可证图片链接,企业必选", required = true) + private String industryLicensePhoto; + + @ApiModelProperty(value = "法人代表证件人像面图片链接", required = true) + private String certPhotoA; + + @ApiModelProperty(value = "法人代表证件国徽面 / 签证面图片链接", required = true) + private String certPhotoB; + + @ApiModelProperty(value = "营业执照图片链接", required = true) + private String licensePhoto; + + @ApiModelProperty(value = "签约人证件人像面图片链接", required = true) + private String signatoryPhotoA; + + @ApiModelProperty(value = "签约人证件国徽面图片链接", required = true) + private String signatoryPhotoB; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java new file mode 100644 index 000000000..5337a09c6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java @@ -0,0 +1,31 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 10:02 + * @Version 1.0 + */ +@Data +public class AccountBatchQueryRequest { + + @ApiModelProperty(value = "关键字(账户名称、账户别名)") + private String keyword; + + @ApiModelProperty(value = "账户状态 1 待提交 2 待鉴权 3 鉴权中 4开通 账户状态") + private Integer accountStatus; + + @ApiModelProperty(value = "工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; + + @ApiModelProperty(value = "门店id") + private String outStoreId; + + @ApiModelProperty(value = "分页信息",required = true) + private WalletBasicPageInfo page; + + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) + private Integer walletType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java new file mode 100644 index 000000000..5bb6eb607 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java @@ -0,0 +1,44 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + *

+ * 交易流水查询Request + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountBillQueryRequest extends StoreShopRequest { + + @ApiModelProperty("交易开始时间,不传查当月") + private Date beginDate; + + @ApiModelProperty("交易结束时间") + private Date endDate; + + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) + @NotNull(message = "钱包类型不能为空") + private Integer walletType; + + @ApiModelProperty("是否签约人账户 0 否 1 是") + private Integer isLegal; + + @ApiModelProperty("交易类型: 0.全部,1.支出 2.收入") + private Integer recordType; + + @ApiModelProperty("费用类型ID") + private Long feeItemId; + + //页码 + private Integer pageNum; + + //分页大小 + private Integer pageSize; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountCreateRequest.java new file mode 100644 index 000000000..d4756a6d7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountCreateRequest.java @@ -0,0 +1,50 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + *

+ * 平安钱包账户创建Request + *

+ * + * @author wangff + * @since 2025/11/13 + */ +@Data +public class AccountCreateRequest { + @ApiModelProperty("门店id") + @NotNull(message = "门店id不能为空") + private Long shopId; + + @ApiModelProperty("签约人姓名") + @NotBlank(message = "签约人姓名不能为空") + private String userName; + + @ApiModelProperty("签约人手机号") + @NotBlank(message = "签约人手机号不能为空") + private String mobile; + + @ApiModelProperty("签约人身份证号") + @NotBlank(message = "签约人身份证号不能为空") + private String idCardNo; + + @ApiModelProperty("银行卡号") + @NotBlank(message = "银行卡号不能为空") + private String bankNumber; + + @ApiModelProperty("银行开户支行") + @NotBlank(message = "银行开户行不能为空") + private String bankName; + + @ApiModelProperty("银行开户支行编号") + @NotBlank(message = "银行开户行编号不能为空") + private String bankNo; + + @ApiModelProperty("银行卡预留手机号") + @NotBlank(message = "银行卡预留手机号不能为空") + private String bankMobile; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountOpenRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountOpenRequest.java new file mode 100644 index 000000000..aa92f07fb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountOpenRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 平安钱包账户开通Request + *

+ * + * @author wangff + * @since 2025/11/13 + */ +@Data +public class AccountOpenRequest { + @ApiModelProperty("shopId") + private Long shopId; + + @ApiModelProperty("短信验证码") + private String code; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java new file mode 100644 index 000000000..42ac0fe68 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 账户密码维护Request + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountPasswordRequest extends StoreShopRequest { + + @ApiModelProperty("维护类型 1.设置密码 2.修改密码") + @NotNull(message = "维护类型不能为空") + private Integer upholdType; + + @ApiModelProperty("新支付密码(sm3加密后字符串)") + @NotNull(message = "新支付密码不能为空") + private String newPayPwd; + + @ApiModelProperty("确认新支付密码(sm3加密后字符串)") + @NotNull(message = "确认新支付密码不能为空") + private String confirmPayPwd; + + @ApiModelProperty("当前使用的支付密码(sm3加密后字符串),维护类型为修改密码时必填") + private String currentPayPwd; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java new file mode 100644 index 000000000..76fb33d0c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java @@ -0,0 +1,23 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Digits; +import java.math.BigDecimal; + +/** + *

+ * 账户充值Request + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountPaymentRequest extends StoreShopRequest { + @ApiModelProperty(value = "支付金额") + @Digits(integer = 10, fraction = 2, message = "金额整数位最多10位,小数位最多2位") + private BigDecimal amount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountQueryRequest.java new file mode 100644 index 000000000..e98f65417 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountQueryRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户查询Request + *

+ * + * @author wangff + * @since 2025/11/19 + */ +@Data +public class AccountQueryRequest extends StoreShopRequest { + @ApiModelProperty("钱包类型 1平安 2网商") + private Integer walletType; + + @ApiModelProperty("账户编号") + private String accountNo; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountTradeCallbackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountTradeCallbackRequest.java new file mode 100644 index 000000000..fc96b9683 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountTradeCallbackRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 9:36 + * @Version 1.0 + */ +@Data +public class AccountTradeCallbackRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "业务系统付款单号(如 CRM 单号)", required = true) + private String reqNo; + @ApiModelProperty(name = "交易Id", required = true) + private Long tradeId; + @ApiModelProperty(name = "交易编号", required = true) + private String outTTradeNo; + @ApiModelProperty(name = "金额(元)", required = true) + private String amount; + @ApiModelProperty(name = "交易状态1.成功 2.失败 3.处理中", required = true) + private Integer tradeStatus; + @ApiModelProperty(name = "1.转账2.提现", required = true) + private Integer tradeType; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java new file mode 100644 index 000000000..0933e027d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:08 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AccountVerifyRequest { + + private String outStoreId; + + private String verifyNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java new file mode 100644 index 000000000..b73530828 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java @@ -0,0 +1,24 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/17 13:49 + * @Version 1.0 + */ +@Data +public class AddTagCallbackNoticeRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "状态1.打标成功 2.打标失败 3.处理中(打标状态)", required = true) + private Integer status; + @ApiModelProperty(name = "1.法人 2.非法人", required = true) + private Integer addTagType; + @ApiModelProperty(name = "失败原因", required = false) + private String errorMsg; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BankListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BankListRequest.java new file mode 100644 index 000000000..947f8e3cb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BankListRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.wallet; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 支行信息查询Request + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +public class BankListRequest extends PageBasicInfo { + @ApiModelProperty("银行名称") + private String headName; + + @ApiModelProperty("关键字查询") + private String keyword; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java new file mode 100644 index 000000000..6eaa89cf4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java @@ -0,0 +1,20 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description 门店签约账户转账提现查询接口 + * @Author suzhuhong + * @Date 2025/11/14 10:05 + * @Version 1.0 + */ +@Data +public class BillDetailRequest { + + @ApiModelProperty(value = "转账交易Id(转账交易编号二选一)") + private Long tradeId; + @ApiModelProperty(value = "转账交易编号(转账交易Id二选一)") + private String outTradeNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java new file mode 100644 index 000000000..8122794e7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java @@ -0,0 +1,40 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:17 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class BillPageRequest { + + @ApiModelProperty(value = "门店ID", required = true) + private String outStoreId; + @ApiModelProperty(value = "交易开始时间YYYY-MM-DD HH:MM:SS", required = true) + private String beginDate; + @ApiModelProperty(value = "交易结束时间YYYY-MM-DD HH:MM:SS", required = true) + private String endDate; + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) + private Integer walletType; + @ApiModelProperty(value = "是否签约人钱包", required = false) + private Integer isLegal; + @ApiModelProperty(value = "交易类型: 0.全部,1.支出 2.收入", required = false) + private Integer recordType; + @ApiModelProperty(value = "费用类型ID", required = true) + private Long feeItemId; + @ApiModelProperty(value = "当前页码", required = true) + private Integer currentPage; + @ApiModelProperty(value = "每页数量", required = true) + private Integer pageSize; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolAccountBatchQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolAccountBatchQueryRequest.java new file mode 100644 index 000000000..76b650e5f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolAccountBatchQueryRequest.java @@ -0,0 +1,45 @@ +package com.cool.store.request.wallet; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/19 13:56 + * @Version 1.0 + */ +@Data +public class CoolAccountBatchQueryRequest extends PageBasicInfo { + + @ApiModelProperty(value = "关键字(账户名称、账户别名)") + private String keyword; + + @ApiModelProperty(value = "账户状态 1 待提交 2 待鉴权 3 鉴权中 4开通 账户状态") + private Integer accountStatus; + + @ApiModelProperty(value = "工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; + + @ApiModelProperty(value = "门店id") + private String outStoreId; + + private Integer walletType; + + public AccountBatchQueryRequest convertToAccountBatchQueryRequest() { + AccountBatchQueryRequest target = new AccountBatchQueryRequest(); + target.setKeyword(this.getKeyword()); + target.setAccountStatus(this.getAccountStatus()); + target.setBusinessType(this.getBusinessType()); + target.setOutStoreId(this.getOutStoreId()); + target.setWalletType(this.getWalletType()); + + WalletBasicPageInfo walletBasicPageInfo = new WalletBasicPageInfo(); + walletBasicPageInfo.setCurrentPage(this.getPageNum()); + walletBasicPageInfo.setPageSize(this.getPageSize()); + target.setPage(walletBasicPageInfo); + return target; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolOpenBasicInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolOpenBasicInfoRequest.java new file mode 100644 index 000000000..3442ce34d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolOpenBasicInfoRequest.java @@ -0,0 +1,133 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/20 13:38 + * @Version 1.0 + */ +@Data +public class CoolOpenBasicInfoRequest { + @ApiModelProperty(value = "门店id") + private String storeId; + + @ApiModelProperty(value = "门店编号") + private String storeCode; + + /** + * 签约人名称 + */ + @ApiModelProperty(value = "签约人名称") + private String signerName; + + /** + * 签约人身份证号码 + */ + @ApiModelProperty(value = "签约人身份证号码") + private String signerIdCard; + + /** + * 签约人手机号 + */ + @ApiModelProperty(value = "签约人手机号") + private String signerPhone; + + /** + * 签约人身份证正面 + */ + @ApiModelProperty(value = "签约人身份证正面") + private String signerIdCardFront; + + /** + * 签约人身份证反面 + */ + @ApiModelProperty(value = "签约人身份证反面") + private String signerIdCardBack; + + /** + * 营业执照名字 + */ + @ApiModelProperty(value = "营业执照名字") + private String businessLicenseName; + + /** + * 营业执照社会信用代码 + */ + @ApiModelProperty(value = "营业执照社会信用代码") + private String businessLicenseCode; + + /** + * 营业执照照片 + */ + @ApiModelProperty(value = "营业执照照片") + private String businessLicensePhoto; + + /** + * 法人是否签约人 + */ + @ApiModelProperty(value = "法人是否签约人") + private Integer legalIsSigner; + + + /** + * 法人名称 + */ + @ApiModelProperty(value = "法人名称") + private String legalName; + + /** + * 法人身份证号码 + */ + @ApiModelProperty(value = "法人身份证号码") + private String legalIdCard; + + @ApiModelProperty("法人身份证有效期字段,yyyy-MM-dd") + private String legalIdCardExpireTime; + + /** + * 法人手机号 + */ + @ApiModelProperty(value = "法人手机号") + private String legalPhone; + + + /** + * 法人身份证正面 + */ + @ApiModelProperty(value = "法人身份证正面") + private String legalIdCardFront; + + /** + * 法人身份证反面 + */ + @ApiModelProperty(value = "法人身份证反面") + private String legalIdCardBack; + + /** + * 结算卡 + */ + @ApiModelProperty(value = "结算卡") + private String settlementCard; + + /** + * 开户支行名称 + */ + @ApiModelProperty(value = "开户支行名称") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @ApiModelProperty(value = "开户支行编号") + private String bankBranchCode; + + /** + * 银行预留手机号 + */ + @ApiModelProperty(value = "银行预留手机号") + private String bankReservedPhone; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolTradeRecodePageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolTradeRecodePageRequest.java new file mode 100644 index 000000000..fe98c9eb6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolTradeRecodePageRequest.java @@ -0,0 +1,41 @@ +package com.cool.store.request.wallet; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/19 14:09 + * @Version 1.0 + */ +@Data +public class CoolTradeRecodePageRequest extends PageBasicInfo { + + @ApiModelProperty(value = "交易开始时间YYYY-MM-DD HH:MM:SS",required = true) + private String beginDate; + @ApiModelProperty(value = "交易结束时间YYYY-MM-DD HH:MM:SS",required = true) + private String endDate; + @ApiModelProperty(value = "钱包类型 1.平安 2.网商",required = true) + private Integer walletType; + @ApiModelProperty(value = "关键字(账户名称,账户编号,业务系统付款单号,提现银行卡号)",required = true) + private String keyword; + @ApiModelProperty(value = "关键字(门店编号,门店名称)",required = true) + private String storeKeyword; + @ApiModelProperty(value = "费用科目",required = true) + private Integer feeItemId; + + public TradeRecodePageRequest convertToTradeRecodePageRequest() { + TradeRecodePageRequest target = new TradeRecodePageRequest(); + target.setBeginDate(this.getBeginDate()); + target.setEndDate(this.getEndDate()); + target.setWalletType(this.getWalletType()); + target.setKeyword(this.getKeyword()); + target.setStoreKeyword(this.getStoreKeyword()); + target.setFeeItemId(this.getFeeItemId()); + target.setCurrentPage(this.getPageNum()); + target.setPageSize(this.getPageSize()); + return target; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java new file mode 100644 index 000000000..e8218cdf0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java @@ -0,0 +1,45 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/13 13:49 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CreateStoreAndAccountRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "联系电话", required = true) + private String phoneNumber; + @ApiModelProperty(name = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) + private Integer accountType; + @ApiModelProperty(name = "开户类型:1企业 2个体工商户,3个人(小微商户) ", required = true) + private Integer businessType; + @ApiModelProperty(name = "法人姓名", required = true) + private String legalName; + @ApiModelProperty(name = "法人证件号码", required = true) + private String legalNo; + @ApiModelProperty(name = "账户简称", required = true) + private String accountAliasName; + @ApiModelProperty(name = "结算银行卡号", required = true) + private String accountCardNo; + @ApiModelProperty(name = "结算卡银行预留手机号", required = true) + private String accountPhone; + @ApiModelProperty(name = "支行编号", required = true) + private String bankNo; + @ApiModelProperty(name = "开户支行名称", required = true) + private String bankName; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java new file mode 100644 index 000000000..21f5930c6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java @@ -0,0 +1,66 @@ +package com.cool.store.request.wallet; + +import com.sun.istack.NotNull; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:07 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CreateStoreRequest { + + @ApiModelProperty(value = "CRM门店编号", required = true) + @NotBlank(message = "CRM门店编号不能为空") + private String outStoreId; + + @ApiModelProperty(value = "门店编号", required = true) + @NotBlank(message = "门店编号不能为空") + private String storeSn; + + @ApiModelProperty(value = "门店名称", required = true) + @NotBlank(message = "门店名称不能为空") + private String storeName; + + @ApiModelProperty(value = "门店内部名称") + private String inStoreName; + + @ApiModelProperty(value = "组织编号", required = true) + @NotBlank(message = "组织编号不能为空") + private String orgCode; + + @ApiModelProperty(value = "组织名称", required = true) + @NotBlank(message = "组织名称不能为空") + private String orgName; + + @ApiModelProperty(value = "联系电话", required = true) + @NotBlank(message = "联系电话不能为空") + private String phoneNumber; + + @ApiModelProperty(value = "门店模式: 1.社会加盟 2.强管 3.强加盟", required = true) + private Integer storeMode; + + @ApiModelProperty(value = "省-标准行政区域编码", required = true) + private Integer province; + + @ApiModelProperty(value = "市-标准行政区域编码", required = true) + private Integer city; + + @ApiModelProperty(value = "区县-标准行政区域编码", required = true) + private Integer district; + + @ApiModelProperty(value = "门店地址", required = true) + @NotBlank(message = "门店地址不能为空") + private String address; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/FindPageCompanyRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/FindPageCompanyRequest.java new file mode 100644 index 000000000..d6e605eb1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/FindPageCompanyRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:32 + * @Version 1.0 + */ +@Data +public class FindPageCompanyRequest { + + @ApiModelProperty(value = "公司编码") + private String companyCode; + + @ApiModelProperty(value = "公司名称") + private String companyName; + + private WalletBasicPageInfo page; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/GetBankRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/GetBankRequest.java new file mode 100644 index 000000000..6d8f8f0fc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/GetBankRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:55 + * @Version 1.0 + */ +@Data +public class GetBankRequest { + + @ApiModelProperty("银行名称") + private String headName; + @ApiModelProperty("关键字查询") + private String keyword; + @ApiModelProperty("分页查询参数") + private WalletBasicPageInfo page; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentDetailRequest.java new file mode 100644 index 000000000..b24aadec2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentDetailRequest.java @@ -0,0 +1,17 @@ +package com.cool.store.request.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 18:28 + * @Version 1.0 + */ +@Data +public class LargePaymentDetailRequest { + + private String transOrderTrace; + + private String paymentId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentQueryRequest.java new file mode 100644 index 000000000..182e297f4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentQueryRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 大额支付订单查询Request + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Data +public class LargePaymentQueryRequest extends StoreShopRequest { + @ApiModelProperty("页码") + private Integer pageNum = 1; + + @ApiModelProperty("页数量") + private Integer pageSize = 10; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java new file mode 100644 index 000000000..344d60c6f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java @@ -0,0 +1,30 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:00 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LargePaymentRequest { + + @ApiModelProperty(value = "商户门店编号",required = true) + private String outStoreId; + + @ApiModelProperty(value = "请求预支付Id",required = true) + private String paymentId; + + @ApiModelProperty(value = "签约人名称",required = true) + private String payerAccName; + + @ApiModelProperty(value = "支付金额",required = true) + private String amt; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java new file mode 100644 index 000000000..96aef77e3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java @@ -0,0 +1,86 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 18:16 + * @Version 1.0 + */ +@Data +public class OldStoreAccountCreateRequest { + + @ApiModelProperty(value = "CRM门店编号", required = true) + private String outStoreId; + + @ApiModelProperty(value = "联系电话", required = true) + private String phoneNumber; + + @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私(结算类型)", required = true, example = "1") + private Integer accountType; + + @ApiModelProperty(value = "营业执照号码,与企业证件类型对应的企业注册号(企业与个体户必传)") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称(与注册工商信息时一致)(企业与个体户必传)") + private String licenseName; + + @ApiModelProperty(value = "法人姓名", required = true) + private String legalName; + + @ApiModelProperty(value = "法人证件号码", required = true) + private String legalNo; + + @ApiModelProperty("法人身份证有效期字段") + private String legalIdcardExpireTime; + + @ApiModelProperty(value = "法人联系电话(企业与个体户必传)") + private String legalPhone; + + @ApiModelProperty(value = "账户简称", required = true) + private String accountAliasName; + + @ApiModelProperty(value = "结算银行卡号", required = true) + private String accountCardNo; + + @ApiModelProperty(value = "结算卡银行预留手机号(存量门店可能没有)", required = true) + private String accountPhone; + + @ApiModelProperty(value = "开户支行", required = true) + private String bankNo; + + @ApiModelProperty(value = "开户支行名称", required = true) + private String bankName; + + @ApiModelProperty(value = "开户许可证图片链接,企业必选") + private String industryLicensePhoto; + + @ApiModelProperty(value = "法人代表证件人像面图片链接", required = true) + private String certPhotoA; + + @ApiModelProperty(value = "法人代表证件国徽面图片链接", required = true) + private String certPhotoB; + + @ApiModelProperty(value = "营业执照图片链接", required = true) + private String licensePhoto; + + @ApiModelProperty(value = "签约人姓名", required = true) + private String signatoryName; + + @ApiModelProperty(value = "签约人身份证", required = true) + private String signatoryNo; + + @ApiModelProperty(value = "签约人联系电话", required = true) + private String signatoryPhone; + + @ApiModelProperty(value = "签约人证件人像面图片链接", required = true) + private String signatoryPhotoA; + + @ApiModelProperty(value = "签约人证件国徽面图片链接", required = true) + private String signatoryPhotoB; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OnlineCommercialBankCallbackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OnlineCommercialBankCallbackRequest.java new file mode 100644 index 000000000..64539e56b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OnlineCommercialBankCallbackRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 18:00 + * @Version 1.0 + */ +@Data +public class OnlineCommercialBankCallbackRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "网商账户编号", required = true) + private String accountNo; + @ApiModelProperty(name = "4.已开通 5.开通失败", required = true) + private Integer accountStatus; + @ApiModelProperty(name = "开户失败原因", required = true) + private String failReason; + @ApiModelProperty(name = "钱包类型 1.平安 2.网商 目前只有网商是创建账户异步的 预留字段", required = true) + private int walletType; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java new file mode 100644 index 000000000..1ab4df0b6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:05 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OutStoreIdRequest { + + @ApiModelProperty(value = "外部门店唯一标识", required = true) + private String outStoreId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/PaymentDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/PaymentDetailRequest.java new file mode 100644 index 000000000..8cfded563 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/PaymentDetailRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:37 + * @Version 1.0 + */ +@Data +public class PaymentDetailRequest { + + private String paymentId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java new file mode 100644 index 000000000..ef7450aa2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 门店idRequest + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class StoreShopRequest { + @ApiModelProperty("门店id") + private Long shopId; + + @ApiModelProperty("门店id,两者取一") + private String storeId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TestVerifyRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TestVerifyRequest.java new file mode 100644 index 000000000..e89f09614 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TestVerifyRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/21 13:53 + * @Version 1.0 + */ +@Data +public class TestVerifyRequest { + + private String key; + + private String sign; + + private Long timestamp; + + private String outStoreId; + + private Integer status; + + private Integer addTagType; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TextMsgSendRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TextMsgSendRequest.java new file mode 100644 index 000000000..74179e741 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TextMsgSendRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

+ * 网商账户重新发送激活短信Request + *

+ * + * @author wangff + * @since 2025/11/20 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TextMsgSendRequest { + @ApiModelProperty("门店id") + private String outStoreId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TradeRecodePageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TradeRecodePageRequest.java new file mode 100644 index 000000000..abbe74f28 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TradeRecodePageRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/19 11:07 + * @Version 1.0 + */ +@Data +public class TradeRecodePageRequest { + + @ApiModelProperty(value = "交易开始时间YYYY-MM-DD HH:MM:SS",required = true) + private String beginDate; + @ApiModelProperty(value = "交易结束时间YYYY-MM-DD HH:MM:SS",required = true) + private String endDate; + @ApiModelProperty(value = "钱包类型 1.平安 2.网商",required = true) + private Integer walletType; + @ApiModelProperty(value = "关键字(账户名称,账户编号,业务系统付款单号,提现银行卡号)",required = true) + private String keyword; + @ApiModelProperty(value = "关键字(门店编号,门店名称)",required = true) + private String storeKeyword; + @ApiModelProperty(value = "费用科目",required = true) + private Integer feeItemId; + @ApiModelProperty(value = "当前页码",required = true) + private Integer currentPage; + @ApiModelProperty(value = "每页数量",required = true) + private Integer pageSize; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TransferRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TransferRequest.java new file mode 100644 index 000000000..8a74c09a7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TransferRequest.java @@ -0,0 +1,31 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:40 + * @Version 1.0 + */ +@Data +public class TransferRequest { + + @ApiModelProperty(name = "门店唯一标识",required = true) + private String outStoreId; + @ApiModelProperty(name = "支付密码(sm3加密后字符串)",required = true) + private String payPwd; + @ApiModelProperty(name = "业务系统付款单号(如 CRM 单号),业务系统唯一",required = true) + private String reqNo; + @ApiModelProperty(name = "付款科目",required = true) + private Integer feeItemId; + @ApiModelProperty(name = "公司编号",required = true) + private String companyCode; + @ApiModelProperty(name = "公司编号绑定多个账户时,必传",required = false) + private String companyAccountCode; + @ApiModelProperty(name = "金额(元)",required = true) + private String amount; + @ApiModelProperty(name = "备注 ,交易摘要",required = true) + private String remark; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdatePasswordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdatePasswordRequest.java new file mode 100644 index 000000000..a9e89b9b4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdatePasswordRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/17 11:20 + * @Version 1.0 + */ +@Data +public class UpdatePasswordRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "维护类型 1.设置密码 2.修改密码", required = true) + private Integer upholdType; + @ApiModelProperty(name = "新支付密码(sm3加密后字符串)", required = true) + private String newPayPwd; + @ApiModelProperty(name = "确认新支付密码(sm3加密后字符串)", required = true) + private String confirmPayPwd; + @ApiModelProperty(name = "当前使用的支付密码(sm3加密后字符串),维护类型为修改密码时必填", required = false) + private String currentPayPwd; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java new file mode 100644 index 000000000..5f6d41169 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:46 + * @Version 1.0 + */ +@Data +public class UpdateStoreAccountRequest { + + @ApiModelProperty(name = "商户门店编号",required = true) + private String outStoreId; + @ApiModelProperty(name = "法人/自然人证件号码",required = true) + private String idnum; + @ApiModelProperty(name = "签约人姓名(对私结算卡必传)以上二选一",required = true) + private String accountName; + @ApiModelProperty(name = "结算银行卡号",required = true) + private String accountCardNo; + @ApiModelProperty(name = "结算卡银行预留手机号。",required = true) + private String accountPhone; + @ApiModelProperty(name = "支行编号",required = true) + private String bankNo; + @ApiModelProperty(name = "开户支行名称",required = true) + private String bankName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java new file mode 100644 index 000000000..c2fba1f17 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java @@ -0,0 +1,40 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:56 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WalletBasicPageInfo { + + @ApiModelProperty(value = "当前页码",required = true) + private Integer currentPage; + + @ApiModelProperty(value = "每页数量",required = true) + private Integer pageSize; + + private Integer total; + + private Integer count; + + private Boolean first; + + private Boolean last; + + public WalletBasicPageInfo(Integer currentPage, Integer pageSize){ + this.currentPage = currentPage; + this.pageSize = pageSize; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletShopRequest.java new file mode 100644 index 000000000..b6b75ba29 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletShopRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 钱包门店Request + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +public class WalletShopRequest { + @ApiModelProperty("门店id") + @NotNull(message = "门店id不能为空") + private Long shopId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java new file mode 100644 index 000000000..80459c74f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Digits; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + *

+ * 钱包提现Request + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Data +public class WalletWithDrawerRequest extends StoreShopRequest { + @ApiModelProperty("提现金额") + @Digits(integer = 10, fraction = 2, message = "金额整数位最多10位,小数位最多2位") + @NotNull(message = "提现金额不能为空") + private BigDecimal amount; + + @ApiModelProperty("支付密码(sm3加密后字符串)") + @NotBlank(message = "支付密码不能为空") + private String payPwd; + + @ApiModelProperty("钱包类型 1.平安 2.网商") + @NotNull(message = "钱包类型不能为空") + private Integer walletType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java new file mode 100644 index 000000000..32cef81e6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java @@ -0,0 +1,31 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:56 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WithDrawerRequest { + + @ApiModelProperty(value = "门店ID") + private String outStoreId; + @ApiModelProperty(value = "支付密码(sm3加密后字符串)") + private String payPwd; + @ApiModelProperty(value = "业务系统付款单号(如 CRM 单号)") + private String reqNo; + @ApiModelProperty(value = "提现金额") + private String amount; + @ApiModelProperty(value = "提现备注") + private String remark; + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) + private Integer walletType; + +} 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 70ae9306d..6c14c941b 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 @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.persistence.Column; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.Date; @@ -46,7 +47,7 @@ public class AddSignFranchiseResponse { private Date contractStartTime; @ApiModelProperty("合同结束日期") - private Date contractStartEndTime; + private Date contractEndTime; @ApiModelProperty("用印次数") private String impressionNum; @@ -240,10 +241,95 @@ public class AddSignFranchiseResponse { @ApiModelProperty("是否统管 : 1-统管,0-不统管") private Integer unifiedManagement; + @ApiModelProperty("信息是否一致") + private Integer infoConsistencyFlag; + @ApiModelProperty("不一致原因") + private String reason; + @ApiModelProperty("老店编码 签约类型选择老店转加盟时有") + private String oldShopCode; + @ApiModelProperty("合同加盟费") + @NotBlank(message = "合同加盟费不能为空") + private String contractFranchiseFee; + + /** + * 合同管理费 + */ + @ApiModelProperty("合同管理费") + @NotBlank(message = "合同管理费不能为空") + private String contractManageFee; + + /** + * 合同品牌使用费 + */ + @ApiModelProperty("合同品牌使用费") + @NotBlank(message = "合同品牌使用费不能为空") + private String contractBrandUseFee; + + /** + * 合同设计费 + */ + @ApiModelProperty("合同设计费") + @NotBlank(message = "合同设计费不能为空") + private String contractPerformanceBond; + + /** + * 合同保证金 + */ + @ApiModelProperty("合同保证金") + @NotBlank(message = "合同保证金不能为空") + private String contractLoanMargin; + + /** + * 合同系统使用费 + */ + @ApiModelProperty("合同系统使用费") + @NotBlank(message = "合同系统使用费不能为空") + private String contractSysUserFee; + + /** + * 加盟来源 + */ + @ApiModelProperty("加盟来源") + private String joinSource; @ApiModelProperty("收银费(系统费)") private String cashierFee; + /** + * 签约形式 + */ + @ApiModelProperty("签约形式") + private String signModality; + + /** + * 加盟费频率 + */ + @ApiModelProperty("加盟费频率") + private Integer franchiseFeeFrequency; + + /** + * 品牌使用费频率 + */ + @ApiModelProperty("品牌使用费频率") + private Integer brandUseFeeFrequency; + + /** + * 管理费频率 + */ + @ApiModelProperty("管理费频率") + private Integer manageFeeFrequency; + + /** + * 加盟费折扣金额 + */ + @ApiModelProperty("加盟费折扣金额") + private String discountAmount; @ApiModelProperty("收银费(系统费)大写") private String bigCashierFee; + + @Column(name = "currency") + private String currency; + + @Column(name = "contract_service_life") + private Integer contractServiceLife; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java index 8b2427f02..f4300f4eb 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java @@ -61,6 +61,8 @@ public class BranchShopResponse { @ApiModelProperty("所属管理区域name") private String managerRegionName; + private String storeId; + public void setDays() { if (this.openingActivityEndTime==null){ diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java index 96e2f49ff..cf391c02c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java @@ -3,9 +3,12 @@ package com.cool.store.response.bigdata; import com.cool.store.constants.CommonConstants; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.ResponseCodeEnum; +import com.cool.store.response.ResponseResult; import lombok.Data; import org.slf4j.MDC; +import java.text.MessageFormat; + /** * @Author suzhuhong * @Date 2025/4/1 10:49 @@ -31,6 +34,22 @@ public class ApiResponse { return new ApiResponse(ResponseCodeEnum.SUCCESS.getCode(), "ok", data); } + /** + * 钱包系统 响应用200 + * @param data + * @param + * @return + */ + public static ApiResponse successByWallet(T data) { + return new ApiResponse(ResponseCodeEnum.SUCCESS_WALLET.getCode(), "ok", data); + } + + + public static ApiResponse fail(ErrorCodeEnum responseEnum, Object... objects){ + String message = MessageFormat.format(responseEnum.getMessage(), objects); + return new ApiResponse(responseEnum.getCode(), message, false); + } + public static ApiResponse error(ErrorCodeEnum errorCodeEnum) { return new ApiResponse(errorCodeEnum.getCode(), errorCodeEnum.getMessage(), null); } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/IdentityCardInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/IdentityCardInfoVO.java index 4307cec8c..5ac289ad3 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/IdentityCardInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/IdentityCardInfoVO.java @@ -1,5 +1,6 @@ package com.cool.store.vo; +import com.aliyun.tea.NameInMap; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -24,6 +25,15 @@ public class IdentityCardInfoVO { @ApiModelProperty("民族") private String nation; + @ApiModelProperty("结束时间") + public String endDate; + + @ApiModelProperty("所属分局") + public String issue; + + @ApiModelProperty("开始时间") + public String startDate; + public IdentityCardInfoVO(String username, String liveAddress, String birthdate, String sex, String idCard, String nation) { this.username = username; this.liveAddress = liveAddress; @@ -32,4 +42,10 @@ public class IdentityCardInfoVO { this.idCard = idCard; this.nation = nation; } + + public IdentityCardInfoVO(String endDate, String issue, String startDate) { + this.endDate = endDate; + this.issue = issue; + this.startDate = startDate; + } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountAuthenticationVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountAuthenticationVO.java new file mode 100644 index 000000000..25272050d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountAuthenticationVO.java @@ -0,0 +1,23 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

+ * 钱包账户鉴权VO + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AccountAuthenticationVO { + + @ApiModelProperty("1 待提交 2 待鉴权 3 鉴权中 4开通") + private Integer accountStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillListVO.java new file mode 100644 index 000000000..836758bf9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillListVO.java @@ -0,0 +1,40 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户交易列表VO + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountBillListVO { + + @ApiModelProperty("交易Id(营帐通)") + private Long tradeId; + + @ApiModelProperty("交易编号(扫呗)") + private String outTradeNo; + + @ApiModelProperty("费用科目") + private Integer feeItemId; + + @ApiModelProperty("费用科目名称") + private String feeItemName; + + @ApiModelProperty("金额(元)") + private String amount; + + @ApiModelProperty("交易发起时间") + private String createTime; + + @ApiModelProperty("交易状态 1.成功 2.失败 3.处理中") + private Integer tradeStatus; + + @ApiModelProperty("交易类型 1.转账 2.提现") + private Integer tradeType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillPageVO.java new file mode 100644 index 000000000..b6f4db0f7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillPageVO.java @@ -0,0 +1,41 @@ +package com.cool.store.vo.wallet; + +import com.cool.store.dto.wallet.TradeRecordDTO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Objects; + +/** + *

+ * 账户交易列表分页VO + *

+ * + * @author wangff + * @since 2025/11/19 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AccountBillPageVO { + @ApiModelProperty("分页数据") + PageInfo data; + + @ApiModelProperty("收入") + private BigDecimal getAmount; + + @ApiModelProperty("支出") + private BigDecimal useAmount; + + public AccountBillPageVO(PageInfo data, Long getAmount, Long useAmount) { + this.data = data; + BigDecimal denominator = new BigDecimal(100); + this.getAmount = new BigDecimal(Objects.nonNull(getAmount) ? getAmount : 0).divide(denominator, 2, RoundingMode.HALF_UP); + this.useAmount = new BigDecimal(Objects.nonNull(useAmount) ? useAmount : 0).divide(denominator, 2, RoundingMode.HALF_UP); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountDataVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountDataVO.java new file mode 100644 index 000000000..4abc60142 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountDataVO.java @@ -0,0 +1,30 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + *

+ * 账户信息VO + *

+ * + * @author wangff + * @since 2025/11/20 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AccountDataVO { + @ApiModelProperty("网商账户开通失败标识") + private Boolean onlineBankOpenFail; + + @ApiModelProperty("是否已激活") + private Boolean activated; + + @ApiModelProperty("账户列表") + private List accountList; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java new file mode 100644 index 000000000..96ef50043 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java @@ -0,0 +1,51 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户信息VO + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountInfoVO { + @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通") + private Integer accountStatus; + + @ApiModelProperty(value = "是否签约人账户 0 否 1 是") + private Integer isLegal; + + @ApiModelProperty(value = "账户编号") + private String accountNo; + + @ApiModelProperty(value = "账户名称") + private String accountName; + + @ApiModelProperty(value = "结算银行卡号") + private String accountCardNo; + + @ApiModelProperty(value = "开户支行名称") + private String bankName; + + @ApiModelProperty(value = "总行名称") + private String headBankName; + + @ApiModelProperty(value = "账户余额") + private String totalAmount; + + @ApiModelProperty(value = "可提现余额", required = true) + private String withdrawAmount; + + @ApiModelProperty(value = "打标状态 0 未打标 1 已打标") + private Integer labelingStatus; + + @ApiModelProperty("平安账户升级失败原因") + private String failReason; + + @ApiModelProperty("失败原因(仅网商在创建失败或激活失败时返回)") + private String errMsg; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPageVO.java new file mode 100644 index 000000000..ffb478e9e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPageVO.java @@ -0,0 +1,93 @@ +package com.cool.store.vo.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 门店签约人账户 + * @Author suzhuhong + * @Date 2025/11/13 16:54 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AccountPageVO { + + @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) + private Integer accountType; + + @ApiModelProperty(value = "营业执照号码") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称") + private String licenseName; + + @ApiModelProperty(value = "法人姓名") + private String legalName; + + @ApiModelProperty(value = "法人证件号码") + private String legalNo; + + @ApiModelProperty(value = "法人联系电话") + private String legalPhone; + + @ApiModelProperty(value = "门店编号", required = true) + private String storeSn; + + @ApiModelProperty(value = "账户编号", required = true) + private String accountNo; + + @ApiModelProperty(value = "账户名称", required = true) + private String accountName; + + @ApiModelProperty(value = "账户别名", required = true) + private String accountAliasName; + + @ApiModelProperty(value = "结算银行卡号", required = true) + private String accountCardNo; + + @ApiModelProperty(value = "结算卡银行预留手机号", required = true) + private String accountPhone; + + @ApiModelProperty(value = "开户支行名称", required = true) + private String bankName; + + @ApiModelProperty(value = "支行编号", required = true) + private String bankNo; + + @ApiModelProperty(value = "总行名称") + private String headBankName; + + @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通 5:开通失败", required = true) + private Integer accountStatus; + + @ApiModelProperty(value = "账户余额", required = true) + private String totalAmount; + + @ApiModelProperty(value = "可提现余额", required = true) + private String withdrawAmount; + + + @ApiModelProperty(value = "打标状态 0 未打标 1 已打标", required = true) + private Integer labelingStatus; + + @ApiModelProperty(value = "是否签约人账户 0 否 1 是", required = true) + private Integer isLegal; + + @ApiModelProperty("工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; + + @ApiModelProperty("钱包类型 1平安 2网商") + private Integer walletType; + + @ApiModelProperty("失败原因(仅网商在创建失败或激活失败时返回)") + private String errMsg; + + @ApiModelProperty("crm门店id") + private String storeId; + + @ApiModelProperty("门店名称") + private String storeName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java new file mode 100644 index 000000000..519046904 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java @@ -0,0 +1,28 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户充值VO + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountPaymentVO { + + @ApiModelProperty(value = "收款账号", required = true) + private String payeeAccNo; + + @ApiModelProperty(value = "收款账户名称", required = true) + private String payeeAccName; + + @ApiModelProperty(value = "收款银行名称", required = true) + private String payeeBankName; + + @ApiModelProperty("过期倒计时(秒)") + private Long expiryCountdown; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AllAccountInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AllAccountInfoVO.java new file mode 100644 index 000000000..25d5dc0fd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AllAccountInfoVO.java @@ -0,0 +1,83 @@ +package com.cool.store.vo.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 门店签约人账户 + * @Author suzhuhong + * @Date 2025/11/13 16:54 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AllAccountInfoVO { + + @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) + private Integer accountType; + + @ApiModelProperty(value = "营业执照号码") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称") + private String licenseName; + + @ApiModelProperty(value = "法人姓名") + private String legalName; + + @ApiModelProperty(value = "法人证件号码") + private String legalNo; + + @ApiModelProperty(value = "法人联系电话") + private String legalPhone; + + @ApiModelProperty(value = "门店编号", required = true) + private String storeSn; + + @ApiModelProperty(value = "账户编号", required = true) + private String accountNo; + + @ApiModelProperty(value = "账户名称", required = true) + private String accountName; + + @ApiModelProperty(value = "账户别名", required = true) + private String accountAliasName; + + @ApiModelProperty(value = "结算银行卡号", required = true) + private String accountCardNo; + + @ApiModelProperty(value = "结算卡银行预留手机号", required = true) + private String accountPhone; + + @ApiModelProperty(value = "开户支行名称", required = true) + private String bankName; + + @ApiModelProperty(value = "支行编号", required = true) + private String bankNo; + + @ApiModelProperty(value = "总行名称") + private String headBankName; + + @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通 5:开通失败", required = true) + private Integer accountStatus; + + @ApiModelProperty(value = "账户余额", required = true) + private String totalAmount; + + @ApiModelProperty(value = "打标状态 0 未打标 1 已打标", required = true) + private Integer labelingStatus; + + @ApiModelProperty(value = "是否签约人账户 0 否 1 是", required = true) + private Integer isLegal; + + @ApiModelProperty("工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; + + @ApiModelProperty("钱包类型 1平安 2网商") + private Integer walletType; + + @ApiModelProperty("失败原因(仅网商在创建失败或激活失败时返回)") + private String errMsg; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/BankVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/BankVO.java new file mode 100644 index 000000000..93288bba2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/BankVO.java @@ -0,0 +1,24 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 银行VO + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +public class BankVO { + @ApiModelProperty("银行编号") + private String headCode; + @ApiModelProperty("银行名称") + private String headName; + @ApiModelProperty("支行号") + private String branchCode; + @ApiModelProperty("支行名称") + private String branchName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/WalletPaymentOrderVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/WalletPaymentOrderVO.java new file mode 100644 index 000000000..cc03ef2cf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/WalletPaymentOrderVO.java @@ -0,0 +1,30 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 钱包支付订单VO + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Data +public class WalletPaymentOrderVO { + @ApiModelProperty("预支付id") + private String paymentId; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("订单状态:1-成功 2-失败 3-支付中 4-撤销") + private Integer orderStatus; + + @ApiModelProperty("创建时间") + private Date createTime; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java new file mode 100644 index 000000000..f0c8a8dfd --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java @@ -0,0 +1,239 @@ +package com.cool.store.http; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.utils.RsaSignUtil; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:00 + * @Version 1.0 + */ +@Service +@Slf4j +public class WalletHttpClientRest { + + @Autowired + private OkHttpClient okHttpClient; + + @Autowired + private ObjectMapper objectMapper; + + @Value("${cool.api.rsa.private.key}") + private String coolPrivateKey; + @Value("${wallet.api.rsa.public.key}") + private String walletPublicKey; + @Value("${wallet.api.yzt.key}") + private String yztKey; + + + /** + * 发送带签名的POST请求 + */ + public T postWithSign(String url, Object request, Class responseType) { + try { + // 1. 准备请求参数 + Map requestParams = convertToMap(request); + requestParams.put("timestamp", System.currentTimeMillis()); + requestParams.put("key", yztKey); + // 2. 生成签名 + String signature = RsaSignUtil.generateSign(requestParams,coolPrivateKey); + requestParams.put("sign", signature); + + // 3. 发送请求 + String responseJson = executePost(url, requestParams); + + // 4. 解析响应 + return parseResponse(responseJson, responseType); + + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + // 其他异常统一包装为RuntimeException + log.error("发送带签名POST请求失败: {}", url, e); + throw new RuntimeException("接口调用异常: " + e.getMessage(), e); + } + } + + /** + * 发送带签名和验签的POST请求 + */ + public T postWithSignAndVerify(String url, Object request, Class responseType) { + try { + // 1. 准备请求参数 + Map requestParams = convertToMap(request); + requestParams.put("timestamp", System.currentTimeMillis()); + + // 2. 生成签名 + String signature = RsaSignUtil.generateSign(requestParams,coolPrivateKey); + requestParams.put("sign", signature); + + // 3. 发送请求 + String responseJson = executePost(url, requestParams); + + // 4. 解析响应并验证签名 + return parseAndVerifyResponse(responseJson, responseType); + + } catch (Exception e) { + log.error("发送带签名和验签POST请求失败: {}", url, e); + throw new RuntimeException(e.getMessage()); + } + } + + /** + * 发送普通POST请求(无签名) + */ + public T post(String url, Object request, Class responseType) { + try { + String responseJson = executePost(url, request); + return parseResponse(responseJson, responseType); + } catch (Exception e) { + log.error("发送POST请求失败: {}", url, e); + throw new RuntimeException("调用外部接口失败: " + e.getMessage()); + } + } + + /** + * 执行POST请求 + */ + private String executePost(String url, Object body) throws IOException { + String jsonBody = objectMapper.writeValueAsString(body); + RequestBody requestBody = RequestBody.create( MediaType.parse("application/json; charset=utf-8"),jsonBody); + + Request request = new Request.Builder() + .url(url) + .post(requestBody) + .addHeader("Content-Type", "application/json") + .build(); + + log.info("发送POST请求: {}, 数据: {}", url, jsonBody); + + try (Response response = okHttpClient.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR,response.code() + " " + response.message()); + } + + + String responseBody = response.body().string(); + log.info("收到响应: {}", responseBody); + + checkBusinessResponseCode(responseBody); + + return responseBody; + } + } + + private void checkBusinessResponseCode(String responseJson) throws IOException { + try { + Map responseMap = objectMapper.readValue(responseJson, + new TypeReference>() { + }); + + Object codeObj = responseMap.get("code"); + if (codeObj != null) { + int code = 0; + if (codeObj instanceof Number) { + code = ((Number) codeObj).intValue(); + } else { + code = Integer.parseInt(codeObj.toString()); + } + + if (code != 200) { + String msg = (String) responseMap.get("msg"); + // 700-799为平安银行错误 + if (code >= 700 && code <= 799) { + throw new ServiceException(ErrorCodeEnum.WALLET_API_ERROR, msg); + } else { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, + "code: " + code + ", msg: " + msg); + } + } + } + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + // 如果解析失败,说明可能不是标准格式,继续处理 + log.debug("无法解析响应码格式: {}", e.getMessage()); + } + } + + /** + * 解析响应 + */ + @SuppressWarnings("unchecked") + private T parseResponse(String responseJson, Class responseType) throws Exception { + // 解析为通用响应格式 + Map responseMap = objectMapper.readValue(responseJson, + new TypeReference>() {}); + + + // 如果返回类型是Map,直接返回 + if (responseType == Map.class) { + return (T) responseMap; + } + + // 提取data字段 + Object data = responseMap.get("data"); + if (data != null && responseType != Object.class) { + if (data instanceof List) { + // 保持List结构,让调用方处理具体类型转换 + return (T)JSONObject.toJSONString(data); + } + return objectMapper.convertValue(data, responseType); + } + + return objectMapper.convertValue(responseMap, responseType); + } + + /** + * 解析响应并验证签名 + */ + @SuppressWarnings("unchecked") + private T parseAndVerifyResponse(String responseJson, Class responseType) throws Exception { + // 解析为Map来验证签名 + Map responseMap = objectMapper.readValue(responseJson, + new TypeReference>() {}); + + // 验证响应签名 + String responseSign = (String) responseMap.get("sign"); + if (responseSign != null) { + // 移除sign字段后进行验签 + Map verifyParams = new HashMap<>(responseMap); + + boolean isValid = RsaSignUtil.verifySign(verifyParams, walletPublicKey); + if (!isValid) { + throw new SecurityException("响应签名验证失败"); + } + log.debug("响应签名验证成功"); + } + + // 返回指定类型的数据 + return parseResponse(responseJson, responseType); + } + + /** + * 转换为Map + */ + @SuppressWarnings("unchecked") + private Map convertToMap(Object obj) { + if (obj instanceof Map) { + return (Map) obj; + } + return objectMapper.convertValue(obj, new TypeReference>() {}); + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java index e720e5c03..fd3635272 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java @@ -8,6 +8,7 @@ import com.aliyun.openservices.ons.api.bean.Subscription; import com.cool.store.constants.CommonConstants; import com.cool.store.enums.RocketMqGroupEnum; import com.cool.store.mq.RocketMqConfig; +import com.cool.store.mq.consumer.listener.ShopDecorationAssignListener; import com.cool.store.mq.consumer.listener.StoreUserUpdateListener; import com.cool.store.mq.consumer.listener.XfsgTrainingPersonSyncListener; import com.google.common.collect.Maps; @@ -35,6 +36,8 @@ public class ConsumerClient { private XfsgTrainingPersonSyncListener xfsgTrainingPersonSyncListener; @Resource private StoreUserUpdateListener storeUserUpdateListener; + @Resource + private ShopDecorationAssignListener shopDecorationAssignListener; /** * 获取通用配置 @@ -101,4 +104,17 @@ public class ConsumerClient { return consumerBean; } + @Bean(initMethod = "start", destroyMethod = "shutdown") + public ConsumerBean shopDecorationAssign() { + RocketMqGroupEnum groupEnum = RocketMqGroupEnum.SHOP_DECORATION_ASSIGN; + ConsumerBean consumerBean = new ConsumerBean(); + //配置文件 + Properties properties = getCommonProperties(groupEnum); + consumerBean.setProperties(properties); + Map commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, shopDecorationAssignListener); + //订阅多个topic如上面设置 + consumerBean.setSubscriptionTable(commonSubscriptionTable); + return consumerBean; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/ShopDecorationAssignListener.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/ShopDecorationAssignListener.java new file mode 100644 index 000000000..e465de67a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/ShopDecorationAssignListener.java @@ -0,0 +1,65 @@ +package com.cool.store.mq.consumer.listener; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.ons.api.Action; +import com.aliyun.openservices.ons.api.ConsumeContext; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.MessageListener; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.decoration.ShopDecorationAssignDAO; +import com.cool.store.dto.store.StoreUserPositionDTO; +import com.cool.store.dto.store.StoreUserUpdateDTO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.service.DecorationHandleService; +import com.cool.store.utils.RedisUtilPool; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/3 10:13 + * @Version 1.0 + */ +@Slf4j +@Service +public class ShopDecorationAssignListener implements MessageListener { + + @Autowired + public RedisUtilPool redisUtilPool; + @Resource + DecorationHandleService decorationHandleService; + @Resource + ShopDecorationAssignDAO shopDecorationAssignDAO; + + @Override + public Action consume(Message message, ConsumeContext context) { + String text = new String(message.getBody()); + if(StringUtils.isBlank(text)){ + log.info("消息体为空,tag:{},messageId:{}",message.getTag(),message.getMsgID()); + return Action.CommitMessage; + } + String lockKey = "ShopDecorationAssignListener:" + message.getMsgID(); + boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.NORMAL_LOCK_TIMES); + if(lock){ + try { + ShopDecorationAssignDO shopDecorationAssignDO = shopDecorationAssignDAO.getById(Long.valueOf(text)); + decorationHandleService.handleDecorationTeam(shopDecorationAssignDO); + }catch (Exception e){ + log.error("ShopDecorationAssignListener consume error",e); + return Action.ReconsumeLater; + }finally { + redisUtilPool.delKey(lockKey); + } + log.info("消费成功,tag:{},messageId:{},reqBody={}",message.getTag(),message.getMsgID(),text); + return Action.CommitMessage; + } + return Action.ReconsumeLater; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java new file mode 100644 index 000000000..7bcb7fdef --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java @@ -0,0 +1,48 @@ +package com.cool.store.service; + +import com.cool.store.dto.contract.ContractConfigDTO; +import com.cool.store.dto.contract.ContractListDTO; +import com.cool.store.dto.contract.QueryContractListDTO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:46 + * @Version 1.0 + */ +public interface ContractConfigService { + + + /** + * 新增配置 + * @param addContractConfigDTO + * @return + */ + Boolean addContractConfig(ContractConfigDTO addContractConfigDTO); + + /** + * 修改配置 + * @param addContractConfigDTO + * @return + */ + Boolean updateContractConfig(ContractConfigDTO addContractConfigDTO); + + + /** + * 查询配置列表 + * @param queryContractListDTO + * @return + */ + PageInfo queryContractConfigList(QueryContractListDTO queryContractListDTO); + + + /** + * 删除配置 + * @param id + * @return + */ + Boolean deleteContractConfig(Long id); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java new file mode 100644 index 000000000..5461f94a8 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java @@ -0,0 +1,94 @@ +package com.cool.store.service; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.dto.ShopSignerInfoDTO; +import com.cool.store.dto.decoration.DecorationListDTO; +import com.cool.store.dto.decoration.DecorationTeamDTO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.request.decoration.AddTeamRequest; +import com.cool.store.request.decoration.DecorationListRequest; +import com.cool.store.request.decoration.UpdateConstructionTeamRequest; +import com.cool.store.request.decoration.UpdateTeamRequest; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:54 + * @Version 1.0 + */ +public interface DecorationHandleService { + + + /** + * 新增团队 + * @param request + * @return + */ + Boolean addTeam(AddTeamRequest request); + + /** + * 修改团队 + * @param request + * @return + */ + Boolean update(UpdateTeamRequest request); + + /** + * 删除团队 + * @param teamId + * @return + */ + Boolean deleteByTeamId(Long teamId); + + /** + * pageBasicInfo + * 根据条件查询团队 + * @return + */ + PageInfo listByCondition(PageBasicInfo pageBasicInfo ); + + /** + * openCityId + * @param openCityId + * @return + */ + Long getDecorationTeamIdByCityId(Long openCityId); + + /** + * 处理团队 + * @param teamId + * @return + */ + Boolean handleDecorationTeam(ShopDecorationAssignDO shopDecorationAssignDO); + + /** + * 列表 + * @param request + * @return + */ + PageInfo getDecorationAssignList(DecorationListRequest request); + + /** + * 获取门店签约信息 + * @param shopId + * @return + */ + ShopSignerInfoDTO getShopSignerInfo(Long shopId); + + /** + * 更新施工团队 + * @param request + * @return + */ + Boolean updateConstructionTeam(UpdateConstructionTeamRequest request); + + + + + + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java index e2e49e8c6..f9444f0a8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java @@ -1,9 +1,7 @@ package com.cool.store.service; -import com.cool.store.dto.GetAccessTokenDTO; -import com.cool.store.dto.HqtTokenDTO; -import com.cool.store.dto.ModifyPasswordDTO; -import com.cool.store.dto.XgjOrganizationDTO; +import com.cool.store.dto.*; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.request.AuditRequest; import com.cool.store.request.ZxjpApiRequest; import com.cool.store.request.xgj.PushFranchiseFeeRequest; @@ -94,6 +92,13 @@ public interface PushService { */ HqtTokenDTO getHqtToken(); + /** + * 法大大一期 推送加盟合同信息 + * @param contractInformationDTO + * @return + */ + ContractCallbackDTO pushContract(ContractInformationDTO contractInformationDTO); + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java index cff97e9ec..c9dd0e01b 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java @@ -4,6 +4,7 @@ import com.cool.store.context.LoginUserInfo; import com.cool.store.request.AddSignFranchiseRequest; import com.cool.store.request.AuditApproveRequest; import com.cool.store.request.AuditResultRequest; +import com.cool.store.request.HqtBuildRequest; import com.cool.store.response.AddSignFranchiseResponse; import com.cool.store.response.ResponseResult; @@ -41,5 +42,16 @@ public interface SignFranchiseService { */ Boolean rePay(Long shopId); + /** + * 回退到缴费阶段 + * @param shopId + * @return + */ + Boolean backPayFeeStage(AuditApproveRequest request, LoginUserInfo user); + + + Integer dateHandle(); + + HqtBuildRequest getHqtBuildRequest(Long shopId); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AliyunServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AliyunServiceImpl.java index 1bd00abc6..7b3f5f2e3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AliyunServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AliyunServiceImpl.java @@ -69,6 +69,7 @@ public class AliyunServiceImpl implements AliyunService { RecognizeIdentityCardResponse idCardResponse = client.recognizeIdentityCardAdvance(recognizeIdentityCardAdvanceRequest, runtime); log.info("身份证解析结果:{}", JSONObject.toJSONString(idCardResponse)); RecognizeIdentityCardResponseBody.RecognizeIdentityCardResponseBodyDataFrontResult frontResult = Optional.ofNullable(idCardResponse).map(o -> o.getBody()).map(o -> o.data).map(o -> o.frontResult).orElse(null); + RecognizeIdentityCardResponseBody.RecognizeIdentityCardResponseBodyDataBackResult BackResult = Optional.ofNullable(idCardResponse).map(o -> o.getBody()).map(o -> o.data).map(o -> o.backResult).orElse(null); if(Objects.nonNull(frontResult)){ String username = frontResult.name; String liveAddress = frontResult.address; @@ -80,7 +81,15 @@ public class AliyunServiceImpl implements AliyunService { String idCard = frontResult.IDNumber; String nation = frontResult.nationality; IdentityCardInfoVO result = new IdentityCardInfoVO(username, liveAddress, birthdate, sex, idCard, nation); - log.info("身份证解析:{}", JSONObject.toJSONString(result)); + log.info("身份证正面解析:{}", JSONObject.toJSONString(result)); + return result; + } + if (Objects.nonNull(BackResult)){ + String endDate = BackResult.getEndDate(); + String issue = BackResult.getIssue(); + String startDate = BackResult.getStartDate(); + IdentityCardInfoVO result = new IdentityCardInfoVO(endDate,issue,startDate); + log.info("身份证背面解析:{}", JSONObject.toJSONString(result)); return result; } return null; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java index 885c089d6..119c63028 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java @@ -19,6 +19,7 @@ import com.cool.store.response.GetStoreInfoByCodeResponse; import com.cool.store.response.LicenseListResponse; import com.cool.store.response.SubmitLicenseResponse; import com.cool.store.service.*; +import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.StringUtil; import com.cool.store.utils.poi.StringUtils; @@ -98,6 +99,9 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService { @Resource UserAuthMappingService userAuthMappingService; + @Resource + WalletService walletService; + @Override public Boolean submitBusinessLicense(BusinessLicenseRequest request, PartnerUserInfoVO user) { @@ -144,9 +148,15 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService { preparationService.buildStoreAndDecorationComplete(request.getShopId()); preparationService.selectSiteAndBuildStoreComplete(request.getShopId()); } + addTagIfUploadLicense(request.getShopId()); return Boolean.TRUE; } + private void addTagIfUploadLicense(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + walletService.addTagIfUploadLicense(shopId, shopInfo.getStoreId(), shopInfo.getLineId()); + } + @Override public Boolean submitFoodLicense(FoodLicenseRequest request, PartnerUserInfoVO user) { log.info("submitBusinessLicense request:{}", JSONObject.toJSONString(request)); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java new file mode 100644 index 000000000..5cafb54eb --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java @@ -0,0 +1,96 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.ContractConfigDAO; +import com.cool.store.dto.contract.ContractConfigDTO; +import com.cool.store.dto.contract.ContractListDTO; +import com.cool.store.dto.contract.QueryContractListDTO; +import com.cool.store.entity.ContractConfigDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.service.ContractConfigService; +import com.cool.store.utils.poi.constant.Constants; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:47 + * @Version 1.0 + */ +@Service +public class ContractConfigServiceImpl implements ContractConfigService { + + @Resource + private ContractConfigDAO contractConfigDAO; + + @Override + public Boolean addContractConfig(ContractConfigDTO addContractConfigDTO) { + ContractConfigDO contractConfig = contractConfigDAO.queryContractConfigByBrand(addContractConfigDTO.getBrand(), addContractConfigDTO.getSerialNumber()); + if (contractConfig != null){ + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + ContractConfigDO contractConfigDO = new ContractConfigDO(); + BeanUtils.copyProperties(addContractConfigDTO, contractConfigDO); + if (addContractConfigDTO.getFranchiseModeList() != null){ + String modelStr = addContractConfigDTO.getFranchiseModeList().stream().collect(Collectors.joining(",")); + contractConfigDO.setFranchiseMode("," + modelStr + ","); + } + contractConfigDAO.addContractConfig(contractConfigDO); + return Boolean.TRUE; + } + + @Override + public Boolean updateContractConfig(ContractConfigDTO addContractConfigDTO) { + ContractConfigDO contractConfig = contractConfigDAO.queryContractConfigByBrand(addContractConfigDTO.getBrand(), addContractConfigDTO.getSerialNumber()); + if (contractConfig != null && !contractConfig.getId().equals(addContractConfigDTO.getId())){ + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + ContractConfigDO contractConfigDO = new ContractConfigDO(); + BeanUtils.copyProperties(addContractConfigDTO, contractConfigDO); + if (addContractConfigDTO.getFranchiseModeList() != null){ + String modelStr = addContractConfigDTO.getFranchiseModeList().stream().collect(Collectors.joining(",")); + contractConfigDO.setFranchiseMode("," + modelStr + ","); + } + contractConfigDAO.updateContractConfig(contractConfigDO); + return Boolean.TRUE; + } + + @Override + public PageInfo queryContractConfigList(QueryContractListDTO queryContractListDTO) { + PageHelper.startPage(queryContractListDTO.getPageNum(), queryContractListDTO.getPageSize()); + List contractConfigDOList = contractConfigDAO.queryContractConfigList(queryContractListDTO.getBrand()); + if (CollectionUtils.isEmpty(contractConfigDOList)){ + return new PageInfo<>(); + } + PageInfo contractConfigDOPageInfo = new PageInfo<>(contractConfigDOList); + List result = new ArrayList<>(); + contractConfigDOList.forEach(contractConfigDO -> { + ContractListDTO contractListDTO = new ContractListDTO(); + BeanUtils.copyProperties(contractConfigDO, contractListDTO); + result.add(contractListDTO); + }); + contractConfigDOPageInfo.setList( result); + return contractConfigDOPageInfo; + } + + @Override + public Boolean deleteContractConfig(Long id) { + ContractConfigDO contractConfigDO = contractConfigDAO.queryContractConfigById(id); + if (contractConfigDO == null){ + throw new ServiceException(ErrorCodeEnum.CONTRACT_CONFIG_NOT_EXIST); + } + contractConfigDO.setDeleted(Constants.ONE_INTEGER); + //修改配置状态 + contractConfigDAO.updateContractConfig(contractConfigDO); + return Boolean.TRUE; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java new file mode 100644 index 000000000..32501daf2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java @@ -0,0 +1,251 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.common.PageBasicInfo; +import com.cool.store.dao.*; +import com.cool.store.dao.decoration.DecorationTeamConfigDAO; +import com.cool.store.dao.decoration.ShopDecorationAssignDAO; +import com.cool.store.dao.decoration.TeamAreaMappingDAO; +import com.cool.store.dto.ShopSignerInfoDTO; +import com.cool.store.dto.decoration.DecorationListDTO; +import com.cool.store.dto.decoration.DecorationTeamDTO; +import com.cool.store.dto.decoration.TeamAreaMappingDTO; +import com.cool.store.entity.*; +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.entity.decoration.TeamAreaMappingDO; +import com.cool.store.enums.Decoration.DecorationDescStatus; +import com.cool.store.enums.Decoration.DecorationUseSystemEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.JoinModeEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.decoration.AddTeamRequest; +import com.cool.store.request.decoration.DecorationListRequest; +import com.cool.store.request.decoration.UpdateConstructionTeamRequest; +import com.cool.store.request.decoration.UpdateTeamRequest; +import com.cool.store.service.DecorationHandleService; +import com.cool.store.service.HqtAPIService; +import com.cool.store.service.SignFranchiseService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.StringUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import springfox.documentation.service.ApiListing; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:55 + * @Version 1.0 + */ +@Service +@Slf4j +public class DecorationHandleServiceImpl implements DecorationHandleService { + + + @Resource + private DecorationTeamConfigDAO decorationTeamConfigDAO; + @Resource + private TeamAreaMappingDAO teamAreaMappingDAO; + @Resource + ShopDecorationAssignDAO shopDecorationAssignDAO; + @Resource + RedisUtilPool redisUtilPool; + @Resource + private HqtAPIService hqtAPIService; + @Resource + ShopStageInfoDAO shopStageInfoDAO; + @Resource + ShopInfoDAO shopInfoDAO; + @Resource + SignFranchiseService signFranchiseService; + @Resource + RegionDao regionDao; + @Resource + LineInfoDAO lineInfoDAO; + @Resource + private SignFranchiseDAO signFranchiseDAO; + + @Override + public Boolean addTeam(AddTeamRequest request) { + //校验 + if (Objects.isNull(request)||CollectionUtils.isEmpty(request.getOpenCityIdList()) || StringUtil.isEmpty(request.getTeamName())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + //先删除城市团队关系 + teamAreaMappingDAO.deletedIds(request.getOpenCityIdList()); + + DecorationTeamConfigDO decorationTeamConfigDO = new DecorationTeamConfigDO(); + decorationTeamConfigDO.setTeamName(request.getTeamName()); + decorationTeamConfigDO.setTeamCode(getNextNumber()); + decorationTeamConfigDO.setUseSystem(request.getUserSystem()); + decorationTeamConfigDAO.addTeam(decorationTeamConfigDO); + teamAreaMappingDAO.batchInsert(decorationTeamConfigDO.getId(),request.getOpenCityIdList()); + return Boolean.TRUE; + } + + @Override + public Boolean update(UpdateTeamRequest request) { + if (request.getId() == null||CollectionUtils.isEmpty(request.getOpenCityIdList()) || StringUtil.isEmpty(request.getTeamName())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + DecorationTeamConfigDO teamConfigDO = decorationTeamConfigDAO.getById(request.getId()); + if (teamConfigDO==null){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + teamConfigDO.setTeamName(request.getTeamName()); + teamConfigDO.setUseSystem(request.getUserSystem()); + decorationTeamConfigDAO.updateTeam(teamConfigDO); + //删除团队城市关系 + teamAreaMappingDAO.deletedByTeamId(teamConfigDO.getId()); + //新增更新之后的团队城市关系 + teamAreaMappingDAO.batchInsert(teamConfigDO.getId(),request.getOpenCityIdList()); + return Boolean.TRUE; + } + + @Override + public Boolean deleteByTeamId(Long teamId) { + DecorationTeamConfigDO teamConfigDO = decorationTeamConfigDAO.getById(teamId); + if (teamConfigDO==null){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + //查询当前团队是否有门店使用 有的话 不能删除 + Integer count = shopDecorationAssignDAO.countByTeamId(teamId); + if (count != null && count > 0){ + throw new ServiceException(ErrorCodeEnum.TEAM_USED); + } + teamConfigDO.setDeleted(1); + teamAreaMappingDAO.deletedByTeamId(teamId); + decorationTeamConfigDAO.updateTeam(teamConfigDO); + return Boolean.TRUE; + } + + @Override + public PageInfo listByCondition(PageBasicInfo pageBasicInfo) { + PageHelper.startPage(pageBasicInfo.getPageNum(), pageBasicInfo.getPageSize()); + List list = decorationTeamConfigDAO.listByCondition(); + if (CollectionUtils.isEmpty(list)){ + return new PageInfo<>(); + } + List teamIds = list.stream().map(DecorationTeamDTO::getId).collect(Collectors.toList()); + Map> listMap = teamAreaMappingDAO.listByTeamIdList(teamIds); + list.forEach(x->{ + x.setCityList(listMap.get(x.getId())); + }); + PageInfo result = new PageInfo<>(list); + return result; + } + + @Override + public Long getDecorationTeamIdByCityId(Long openCityId) { + if (openCityId==null){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + TeamAreaMappingDO cityInfo = teamAreaMappingDAO.getByCityId(openCityId); + if (Objects.isNull(cityInfo)){ + return null; + } + DecorationTeamConfigDO teamInfo = decorationTeamConfigDAO.getById(cityInfo.getTeamId()); + return teamInfo.getId(); + } + + @Override + public Boolean handleDecorationTeam(ShopDecorationAssignDO shopDecorationAssign) { + //先查询 + if (shopDecorationAssign == null){ + log.info("handleDecorationTeam_error data not exist"); + return Boolean.FALSE; + } + //如果门店是已经分配状态 则不能再次分配 + if (DecorationDescStatus.ASSIGNED.getCode().equals(shopDecorationAssign.getDecorationDescStatus())){ + log.info("handleDecorationTeam id:{},门店已分配", JSONObject.toJSONString(shopDecorationAssign)); + } + //没有分配的门店 开始分配 + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(shopDecorationAssign.getShopId()); + //查询装修团队 + DecorationTeamConfigDO teamInfo = decorationTeamConfigDAO.getById(shopDecorationAssign.getDecorationTeamId()); + if (teamInfo == null){ + log.info("handleDecorationTeam_error team not exist"); + return Boolean.FALSE; + } + //配置的系统是红圈通 且不是加盟公司自有店 则推送数据 也就是配置了crm或者是加盟公司自有店 走crm流程 + if (teamInfo.getUseSystem().equals(DecorationUseSystemEnum.HQT.getCode())&&!shopInfoDO.getJoinMode().equals(JoinModeEnum.OWN_STORE.getCode())){ + hqtAPIService.pushHqtBuild(signFranchiseService.getHqtBuildRequest(shopInfoDO.getId())); + } + shopDecorationAssign.setDecorationDescStatus(DecorationDescStatus.ASSIGNED.getCode()); + shopDecorationAssignDAO.update(shopDecorationAssign); + //阶段 + shopStageInfoDAO.updateShopStageInfo(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_861); + return Boolean.TRUE; + } + + @Override + public PageInfo getDecorationAssignList(DecorationListRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List decorationListDTOS = shopDecorationAssignDAO.listByCondition(request); + if (CollectionUtils.isEmpty(decorationListDTOS)){ + return new PageInfo<>(); + } + Set regionIds = decorationListDTOS.stream().map(DecorationListDTO::getRegionId).collect(Collectors.toSet()); + List regionList = regionDao.getRegionByRegionIds(new ArrayList<>(regionIds)); + //转为map + Map regionMap = regionList.stream().collect(Collectors.toMap(RegionDO::getRegionId, RegionDO::getName)); + decorationListDTOS.forEach(x->{ + x.setRegionName(regionMap.get(x.getRegionId())); + }); + return new PageInfo<>(decorationListDTOS); + } + + @Override + public ShopSignerInfoDTO getShopSignerInfo(Long shopId) { + if (shopId==null){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (shopInfo == null){ + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfo.getLineId()); + ShopSignerInfoDTO shopSignerInfoDTO = new ShopSignerInfoDTO(); + shopSignerInfoDTO.setPartnershipSignatoryFirst(lineInfo.getUsername()); + shopSignerInfoDTO.setPartnershipSignatoryFirstMobile(lineInfo.getMobile()); + SignFranchiseDO signFranchiseDO = signFranchiseDAO.selectByShopId(shopId); + if (signFranchiseDO!=null){ + shopSignerInfoDTO.setPartnershipSignatorySecond(signFranchiseDO.getPartnershipSignatorySecond()); + shopSignerInfoDTO.setPartnershipSignatorySecondMobile(signFranchiseDO.getPartnershipSignatorySecondMobile()); + } + return shopSignerInfoDTO; + } + + @Override + public Boolean updateConstructionTeam(UpdateConstructionTeamRequest request) { + //查询待分配门店信息 + ShopDecorationAssignDO shopDecorationAssign = shopDecorationAssignDAO.getById(request.getId()); + if (shopDecorationAssign == null){ + log.info("handleDecorationTeam_error data not exist"); + return Boolean.FALSE; + } + shopDecorationAssign.setDecorationTeamId(request.getTeamId()); + handleDecorationTeam(shopDecorationAssign); + return Boolean.TRUE; + } + + + public String getNextNumber() { + Long current = redisUtilPool.incrby("counter_key", 1); + if (current == 1) { + // 如果是第一次,重新设置为 1(因为 increment 从 0 开始) + redisUtilPool.setString("counter_key", "1"); + current = 1L; + } + return String.format("TD%04d", current); + } + +} 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 99627e4f6..adb9afe79 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 @@ -109,9 +109,9 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { @Transactional(rollbackFor = Exception.class) public Boolean update(FranchiseFeeRequest request) { ShopStageInfoDO shopStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); - if (shopStageInfo.getShopSubStageStatus().equals(SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus())){ - throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); - } +// if (shopStageInfo.getShopSubStageStatus().equals(SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus())){ +// throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); +// } FranchiseFeeDO franchiseFeeDO = request.toFranchiseFeeDO(); FranchiseFeeDO franchiseFeeDO1 = franchiseFeeMapper.selectByShopId(request.getShopId()); if (Objects.nonNull(franchiseFeeDO1)) { @@ -236,9 +236,9 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { return ApiResponse.error(ErrorCodeEnum.SHOP_ID_NOT_EXIST); } FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); - if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(franchiseFeeDO.getXgjCollectionStatus())){ - return ApiResponse.error(ErrorCodeEnum.XGJ_COLLECTION_STATUS_COMPLETE); - } +// if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(franchiseFeeDO.getXgjCollectionStatus())){ +// return ApiResponse.error(ErrorCodeEnum.XGJ_COLLECTION_STATUS_COMPLETE); +// } franchiseFeeDO.setXgjCollectionStatus(request.getPaymentStatus()); franchiseFeeDO.setXgjRemainderPayableAmount(request.getRemainingFee()); franchiseFeeDO.setXgjFeesPaid(request.getPaidFees()); @@ -250,11 +250,17 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { LinePayDO lastPay = linePayMapper.getLastPay(franchiseFeeDO.getShopId()); lastPay.setRemark(lastPay.getRemark()+"系统监测到您多缴费"+request.getPaidFees().subtract(request.getPayableFee())+"元 请申请退款或留做他用!"); linePayMapper.updateByPrimaryKeySelective(lastPay); - shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + ShopStageInfoDO shopStageStatus = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); + if (SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(shopStageStatus.getShopSubStageStatus())){ + shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + } } franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){ - shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + ShopStageInfoDO shopStageStatus = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); + if (SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(shopStageStatus.getShopSubStageStatus())){ + shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + } } return ApiResponse.success(Boolean.TRUE); } 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 bdc18fa13..038f24d04 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 @@ -32,20 +32,17 @@ import com.cool.store.service.UserAuthMappingService; import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.RedisConstantUtil; import com.cool.store.utils.RedisUtilPool; -import com.cool.store.utils.UUIDUtils; import com.cool.store.utils.poi.DateUtils; import com.cool.store.utils.poi.StringUtils; import com.cool.store.utils.poi.constant.Constants; import com.cool.store.vo.LinePayVO; import com.cool.store.vo.PartnerUserInfoVO; -import jdk.nashorn.internal.codegen.types.BooleanType; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import java.math.BigDecimal; @@ -406,6 +403,9 @@ public class LinePayServiceImpl implements LinePayService { // map); // } if (PayBusinessTypeEnum.INTENT_MONEY.getCode().equals(request.getPayBusinessType())) { + if (!WorkflowSubStageStatusEnum.PAY_DEPOSIT_45.getCode().equals(lineInfo.getWorkflowSubStageStatus())){ + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_NOT_OPERATE); + } lineInfo.setWorkflowSubStage(WorkflowSubStageEnum.PAY_DEPOSIT.getCode()); lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode()); lineInfoDAO.insertOrUpdate(lineInfo); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java index 18290a874..5a8f2e806 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java @@ -1,6 +1,8 @@ package com.cool.store.service.impl; import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.*; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.EnterpriseUserRoleDao; import com.cool.store.dao.StoreDao; @@ -139,6 +141,11 @@ public class PushServiceImpl implements PushService { String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeBill"; return executePostApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); } + @Override + public ContractCallbackDTO pushContract(ContractInformationDTO contractInformationDTO) { + String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseContract"; + return executePostApiCall(apiUrl, contractInformationDTO, ContractCallbackDTO.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); + } @Override public Boolean pushReceiptToXGJ(ReceiptRequest request) { @@ -327,6 +334,7 @@ public class PushServiceImpl implements PushService { } } + private T executeApiCall(String url, Object requestBody, Class responseType, String username, String secret){ return executePostApiCall(url,requestBody,responseType,username,secret,null); } 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 f3f05c479..24a3ae4e1 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 @@ -563,6 +563,7 @@ public class ShopServiceImpl implements ShopService { response.setLineId(dto.getLineId()); response.setUsername(dto.getUsername()); response.setMobile(dto.getMobile()); + response.setStoreId(dto.getStoreId()); response.setShopName(dto.getShopName()); response.setShopCode(dto.getShopCode()); response.setRegionName(regionNameMap.getOrDefault(dto.getRegionId(), "")); 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 6c3003fba..3d568ab62 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 @@ -5,13 +5,24 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.context.LoginUserInfo; import com.cool.store.dao.*; +import com.cool.store.dto.ContractInformationDTO; +import com.cool.store.dao.decoration.DecorationTeamConfigDAO; +import com.cool.store.dao.decoration.ShopDecorationAssignDAO; +import com.cool.store.dao.decoration.TeamAreaMappingDAO; import com.cool.store.dto.PartnerBankInfoDTO; +import com.cool.store.dto.contract.ContractCallbackDTO; +import com.cool.store.dto.contract.PushContractDTO; import com.cool.store.entity.*; +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.entity.decoration.TeamAreaMappingDO; import com.cool.store.enums.*; +import com.cool.store.enums.Decoration.DecorationDescStatus; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.*; +import com.cool.store.mq.producer.SimpleMessageService; import com.cool.store.request.*; import com.cool.store.response.AddSignFranchiseResponse; import com.cool.store.response.ResponseResult; @@ -25,8 +36,10 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import sun.font.Decoration; import javax.annotation.Resource; import java.math.BigDecimal; @@ -60,6 +73,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu private EnterpriseUserRoleDao enterpriseUserRoleDao; @Resource SignFranchiseMapper signFranchiseMapper; + @Resource + SignFranchiseDAO signFranchiseDAO; @Resource UserAuthMappingService userAuthMappingService; @@ -120,45 +135,57 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu OperationLogService operationLogService; @Resource OperationLogDAO operationLogDAO; + @Resource + ContractConfigDAO contractConfigDAO; + @Resource + PushService pushService; + @Resource + TeamAreaMappingDAO teamAreaMappingDAO; + @Resource + DecorationTeamConfigDAO decorationTeamConfigDAO; + @Resource + ShopDecorationAssignDAO shopDecorationAssignDAO; + @Resource + private SimpleMessageService simpleMessageService; @Override public Boolean auditResult(AuditResultRequest request) { log.info("SignFranchiseServiceImpl auditResult request:{}", JSONObject.toJSONString(request)); - Long shopId = getShopId(request.getKdzBusinessId()); - ShopSubStageStatusEnum shopSubStageStatusEnum = null; - if (request.getAuditResult() == 1) { - shopSubStageStatusEnum = SHOP_SUB_STAGE_STATUS_84; - } else if (request.getAuditResult() == 0) { - shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85; - } - ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); - shopAuditInfoDO.setShopId(shopId); - shopAuditInfoDO.setAuditType(AuditTypeEnum.SIGN_FRANCHISE.getCode()); - shopAuditInfoDO.setSubmittedUserId(""); - shopAuditInfoDO.setSubmittedUserName(""); - if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { - shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); - shopAuditInfoDO.setRejectReason(request.getCause()); - Map requestMap = new HashMap<>(); - ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); - LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); - requestMap.put("storeName", shopInfoDO.getShopName()); - requestMap.put("partnerName", lineInfo.getUsername()); - requestMap.put("partnerMobile", lineInfo.getMobile()); - requestMap.put("lineId", String.valueOf(lineInfo.getId())); - requestMap.put("shopId", String.valueOf(shopInfoDO.getId())); - commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_20, requestMap); - } else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) { - shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); - shopAuditInfoDO.setPassReason(request.getCause()); - //校验建店与加盟签约合同是否完成 并初始化后续流程数据 - //preparationService.contractAndBuildStoreCompletion(shopId); - } - shopAuditInfoMapper.insertSelective(shopAuditInfoDO); - Long auditId = shopAuditInfoDO.getId(); - shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, shopSubStageStatusEnum, auditId); - signFranchiseMapper.updateAuditByShopId(auditId, shopId); +// Long shopId = getShopId(request.getKdzBusinessId()); +// ShopSubStageStatusEnum shopSubStageStatusEnum = null; +// if (request.getAuditResult() == 1) { +// shopSubStageStatusEnum = SHOP_SUB_STAGE_STATUS_84; +// } else if (request.getAuditResult() == 0) { +// shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85; +// } +// ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); +// shopAuditInfoDO.setShopId(shopId); +// shopAuditInfoDO.setAuditType(AuditTypeEnum.SIGN_FRANCHISE.getCode()); +// shopAuditInfoDO.setSubmittedUserId(""); +// shopAuditInfoDO.setSubmittedUserName(""); +// if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { +// shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); +// shopAuditInfoDO.setRejectReason(request.getCause()); +// Map requestMap = new HashMap<>(); +// ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); +// LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); +// requestMap.put("storeName", shopInfoDO.getShopName()); +// requestMap.put("partnerName", lineInfo.getUsername()); +// requestMap.put("partnerMobile", lineInfo.getMobile()); +// requestMap.put("lineId", String.valueOf(lineInfo.getId())); +// requestMap.put("shopId", String.valueOf(shopInfoDO.getId())); +// commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_20, requestMap); +// } else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) { +// shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); +// shopAuditInfoDO.setPassReason(request.getCause()); +// //校验建店与加盟签约合同是否完成 并初始化后续流程数据 +// //preparationService.contractAndBuildStoreCompletion(shopId); +// } +// shopAuditInfoMapper.insertSelective(shopAuditInfoDO); +// Long auditId = shopAuditInfoDO.getId(); +// shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, shopSubStageStatusEnum, auditId); + //signFranchiseMapper.updateAuditByShopId(auditId, shopId); return true; } @@ -181,6 +208,10 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu if (StringUtils.isNotEmpty(request.getShopName())&&request.getShopName().matches("^店铺.$")) { throw new ServiceException(ErrorCodeEnum.SYSTEM_NAME_NOT__SUPPORT); } + //校验金额 + if (!feeCheck(request)){ + throw new ServiceException(ErrorCodeEnum.FEE_NOT_CONSISTENT); + } SignFranchiseDO isExist = signFranchiseMapper.selectByShopId(request.getShopId()); if (Objects.nonNull(isExist) && Objects.isNull(request.getId())) { throw new ServiceException(ErrorCodeEnum.DUPLICATE_SUBMISSION); @@ -197,6 +228,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu if (Boolean.TRUE.equals(acquired)) { SignFranchiseDO signFranchiseDO = request.toSignFranchiseDO(); if (Objects.isNull(request.getId())) { + signFranchiseDO.setCreateUserId(user.getUserId()); signFranchiseMapper.insertSelective(signFranchiseDO); shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83); //发送通知 @@ -217,7 +249,22 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同审批", OperationStatusEnum.NOT_PROCESSED); } else { + //修改签约人信息 signFranchiseMapper.updateByPrimaryKeySelective(signFranchiseDO); + //如果已经签约 修改之后从新推送数据到新管家 + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); + if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84.getShopSubStageStatus())){ + //如果已经签约 修改之后从新推送数据 + ContractCallbackDTO contractCallbackDTO = pushContractRequest(shopInfoDO, request.getShopId()); + if (!Objects.isNull(contractCallbackDTO)){ + if (StringUtils.isNoneEmpty(contractCallbackDTO.getStoreCode())){ + shopInfoDO.setShopCode(contractCallbackDTO.getStoreCode()); + shopInfoDAO.updateShopInfo(shopInfoDO); + } + signFranchiseDAO.updateAuditByShopId(null, request.getShopId(),contractCallbackDTO); + } + + } } //修改shop & point updateShopAndPoint(request, shopInfoDO, pointInfoById); @@ -249,6 +296,10 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu if (Objects.isNull(request.getShopId())) { throw new ServiceException(ErrorCodeEnum.SHOP_ID_NOT_EXIST); } + //校验金额 + if (!feeCheck(request)){ + throw new ServiceException(ErrorCodeEnum.FEE_NOT_CONSISTENT); + } ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); PointInfoDO pointInfoById = pointInfoDAO.getPointInfoById(shopInfoDO.getPointId()); SignFranchiseDO signFranchiseDO = request.toSignFranchiseDO(); @@ -279,6 +330,44 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu return Boolean.TRUE; } + /** + * 费用校验 + * @param request + * @return + */ + private Boolean feeCheck(AddSignFranchiseRequest request){ + //查询账单金额 + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); + + //正新鸡排 + if (franchiseFeeDO.getYearFranchiseFee()!=null&&request.getContractFranchiseFee()!=null&&!request.getContractFranchiseFee().equals(franchiseFeeDO.getYearFranchiseFee())){ + return Boolean.FALSE; + } + //合同设计费 + if (franchiseFeeDO.getPerformanceBond()!=null&&request.getContractPerformanceBond()!=null&&!request.getContractPerformanceBond().equals(franchiseFeeDO.getPerformanceBond())){ + return Boolean.FALSE; + } + //品牌使用费 + if (franchiseFeeDO.getFirstYearFee()!=null&&request.getContractBrandUseFee()!=null&&!request.getContractBrandUseFee().equals(franchiseFeeDO.getFirstYearFee())){ + return Boolean.FALSE; + } + //合同保证金 + if (franchiseFeeDO.getLoanMargin()!=null&&request.getContractLoanMargin()!=null&&!request.getContractLoanMargin().equals(franchiseFeeDO.getLoanMargin())){ + return Boolean.FALSE; + } + //合同管理费 + if (franchiseFeeDO.getFirstYearManageFee()!=null&&request.getContractManageFee()!=null&&!request.getContractManageFee().equals(franchiseFeeDO.getFirstYearManageFee())){ + return Boolean.FALSE; + } + if (franchiseFeeDO.getCashierFee()!=null&&request.getContractSysUserFee()!=null&&!request.getContractSysUserFee().equals(franchiseFeeDO.getCashierFee())){ + return Boolean.FALSE; + } + return Boolean.TRUE; + } + + + + private void updateShopAndPoint(AddSignFranchiseRequest request, ShopInfoDO shopInfoDO, PointInfoDO pointInfoById) { //店铺信息 shopInfoDO.setManagerRegionId(request.getManagerRegionId()); @@ -362,6 +451,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu shopAuditInfoDO.setSubmittedUserId(user.getUserId()); shopAuditInfoDO.setSubmittedUserName(user.getName()); //驳回 + ContractCallbackDTO contractCallbackDTO = null; if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); shopAuditInfoDO.setRejectReason(request.getCause()); @@ -395,10 +485,26 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu )); }else{ //,加盟公司自有店->加盟公司建店 不推送数据 再crm中完成 - if ( !shopInfoDO.getJoinMode().equals(JoinModeEnum.OWN_STORE.getCode())){ - hqtAPIService.pushHqtBuild(getHqtBuildRequest(request.getShopId())); + //v2.0.0 先确认装修团队 + TeamAreaMappingDO city = teamAreaMappingDAO.getByCityId(shopInfoDO.getWantShopAreaId()); + //默认团队 + Long teamId = 1L; + if (Objects.nonNull(city)) { + //v2.0.0 确认团队 + DecorationTeamConfigDO decorationTeamConfigDO = decorationTeamConfigDAO.getById(city.getTeamId()); + if (Objects.nonNull(decorationTeamConfigDO)) { + //v2.0.0 确认团队 + teamId = decorationTeamConfigDO.getId(); + } + } - shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_861); + ShopDecorationAssignDO shopDecorationAssignDO = new ShopDecorationAssignDO(); + shopDecorationAssignDO.setDecorationDescStatus(DecorationDescStatus.TO_BE_ASSIGNED.getCode()); + shopDecorationAssignDO.setDecorationTeamId(teamId); + shopDecorationAssignDO.setShopId(shopId); + shopDecorationAssignDAO.insert(shopDecorationAssignDO); + //新增一个延迟队列 四个小时之后确定是否手动分配 没有手动分配 直接自动分配 红圈通推送和下一个流程开始改为分配团队之后 触发 + simpleMessageService.send(String.valueOf(shopDecorationAssignDO.getId()), RocketMqTagEnum.DELAY_SHOP_DECORATION_ASSIGN,System.currentTimeMillis() + 4*60*60 * 1000); } shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); shopAuditInfoDO.setPassReason(request.getCause()); @@ -411,8 +517,9 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu //初始化数据 preparationService.contractAndBuildStoreCompletion(request.getShopId()); - SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); - log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); + //推送数据 + contractCallbackDTO = pushContractRequest(shopInfoDO, request.getShopId()); + Boolean sendNotice = Boolean.TRUE; commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.SIGN_CONTRACT); if (sendNotice) { @@ -436,7 +543,11 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } shopAuditInfoMapper.insertSelective(shopAuditInfoDO); Long auditId = shopAuditInfoDO.getId(); - signFranchiseMapper.updateAuditByShopId(auditId, shopId); + if (contractCallbackDTO!=null&&StringUtils.isNotEmpty(contractCallbackDTO.getStoreCode())){ + shopInfoDO.setShopCode(contractCallbackDTO.getStoreCode()); + shopInfoMapper.updateByPrimaryKeySelective(shopInfoDO); + } + signFranchiseDAO.updateAuditByShopId(auditId, shopId,contractCallbackDTO); //审批记录表记录 List operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83, OperationTypeEnum.OPERATION_TYPE_1.getCode()); operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), request.getCause()); @@ -454,6 +565,85 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } } + + /** + * 推送合同信息请求 + * @param shopId + */ + private ContractCallbackDTO pushContractRequest(ShopInfoDO shopInfoDO,Long shopId){ + //推送法大大数据 + //查询缴费信息 + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); + SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); + + String userName = ""; + if (signFranchiseDO != null){ + userName = enterpriseUserDAO.getUserName(signFranchiseDO.getCreateUserId()); + } + + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); + + + log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); + + ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); + if (Objects.nonNull(lineInfo)){ + contractInformationDTO.setSignerAddress(lineInfo.getLiveAddress()); + contractInformationDTO.setSignerPhone(lineInfo.getMobile()); + } + + //自营店 无缴费信息 不需要校验 + if (franchiseFeeDO != null){ + contractInformationDTO.setShopId(shopId); + contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); + contractInformationDTO.setShopName(shopInfoDO.getShopName()); + //品牌信息 + contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); + contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); + contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); + contractInformationDTO.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); + contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + + contractInformationDTO.setContractFranchiseFee(signFranchiseDO.getContractFranchiseFee()); + contractInformationDTO.setContractManageFee(signFranchiseDO.getContractManageFee()); + contractInformationDTO.setContractBrandUseFee(signFranchiseDO.getContractBrandUseFee()); + contractInformationDTO.setContractPerformanceBond(signFranchiseDO.getContractPerformanceBond()); + contractInformationDTO.setContractLoanMargin(signFranchiseDO.getContractLoanMargin()); + contractInformationDTO.setContractSysUserFee(signFranchiseDO.getContractSysUserFee()); + contractInformationDTO.setSignModality(signFranchiseDO.getSignModality()); + contractInformationDTO.setFranchiseFeeFrequency(signFranchiseDO.getFranchiseFeeFrequency()); + contractInformationDTO.setBrandUseFeeFrequency(signFranchiseDO.getBrandUseFeeFrequency()); + contractInformationDTO.setJoinSource(signFranchiseDO.getJoinSource()); + contractInformationDTO.setManageFeeFrequency(signFranchiseDO.getManageFeeFrequency()); + contractInformationDTO.setDiscountAmount(signFranchiseDO.getDiscountAmount()); + contractInformationDTO.setSummitUserName(userName); + contractInformationDTO.setCurrency(signFranchiseDO.getCurrency()); + contractInformationDTO.setContractStartTime(DateUtils.dateTime(signFranchiseDO.getContractStartTime())); + contractInformationDTO.setContractEndTime(DateUtils.dateTime(signFranchiseDO.getContractEndTime())); + contractInformationDTO.setContractServiceLife(signFranchiseDO.getContractServiceLife()); + + //老店转加盟(也叫直营转加盟) + if (SignTypeEnum.DIRECT_SALES_TO_JOINING.getCode().equals(signFranchiseDO.getSignType())){ + contractInformationDTO.setOldShopCode(signFranchiseDO.getOldShopCode()); + } + FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); + if (enumByCode != null){ + contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); + contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); + } + contractInformationDTO.setContractNo(signFranchiseDO.getContractCode()); + try { + return pushService.pushContract(contractInformationDTO); + } catch (Exception e) { + log.error("推送合同信息失败", e); + } + } + return null; + } + + @Override public HqtBuildRequest getHqtBuildRequest(Long shopId) { ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfo.getLineId()); @@ -528,35 +718,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu addSignFranchiseResponse.setManagerRegionName(managerRegion.getName()); } if (Objects.nonNull(signFranchiseDO)) { - addSignFranchiseResponse.setUnifiedManagement(signFranchiseDO.getUnifiedManagement()); - addSignFranchiseResponse.setId(signFranchiseDO.getId()); - addSignFranchiseResponse.setShopId(signFranchiseDO.getShopId()); - addSignFranchiseResponse.setSignType(signFranchiseDO.getSignType()); - addSignFranchiseResponse.setBrandFee(signFranchiseDO.getBrandFee()); - addSignFranchiseResponse.setIsBusinessLicense(signFranchiseDO.getIsBusinessLicense()); - addSignFranchiseResponse.setIsFoodLicense(signFranchiseDO.getIsFoodLicense()); - addSignFranchiseResponse.setContractStartTime(signFranchiseDO.getContractStartTime()); - addSignFranchiseResponse.setContractStartEndTime(signFranchiseDO.getContractEndTime()); - addSignFranchiseResponse.setImpressionNum(signFranchiseDO.getImpressionNum()); - addSignFranchiseResponse.setBusinessStartHours(signFranchiseDO.getBusinessStartHours()); - addSignFranchiseResponse.setBusinessEndHours(signFranchiseDO.getBusinessEndHours()); - addSignFranchiseResponse.setIrregularReason(signFranchiseDO.getIrregularReason()); - addSignFranchiseResponse.setRemark(signFranchiseDO.getRemark()); - addSignFranchiseResponse.setResign(signFranchiseDO.getResign()); - addSignFranchiseResponse.setMobile(signFranchiseDO.getMobile()); - addSignFranchiseResponse.setContractCode(signFranchiseDO.getContractCode()); - addSignFranchiseResponse.setContractAmount(signFranchiseDO.getContractAmount()); - addSignFranchiseResponse.setPartnershipSignatoryFirst(signFranchiseDO.getPartnershipSignatoryFirst()); - addSignFranchiseResponse.setPartnershipSignatorySecond(signFranchiseDO.getPartnershipSignatorySecond()); - addSignFranchiseResponse.setBusinessModel(signFranchiseDO.getBusinessModel()); - addSignFranchiseResponse.setPartnershipSignatorySecondIdNumber(signFranchiseDO.getPartnershipSignatorySecondIdNumber()); - addSignFranchiseResponse.setPartnershipSignatorySecondMobile(signFranchiseDO.getPartnershipSignatorySecondMobile()); - addSignFranchiseResponse.setProtectiveDistance(signFranchiseDO.getProtectiveDistance()); - addSignFranchiseResponse.setIntroducer(signFranchiseDO.getIntroducer()); - addSignFranchiseResponse.setIntroduceStore(signFranchiseDO.getIntroduceStore()); - addSignFranchiseResponse.setIntroductionAward(signFranchiseDO.getIntroductionAward()); - addSignFranchiseResponse.setPartnershipSignatoryFirstWhichStore(signFranchiseDO.getPartnershipSignatoryFirstWhichStore()); - + BeanUtils.copyProperties(signFranchiseDO, addSignFranchiseResponse); } else { if (Objects.nonNull(franchiseFeeDO)) { BigDecimal total = convertToBig(franchiseFeeDO.getYearFranchiseFee()) @@ -651,6 +813,27 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu return true; } + @Override + public Boolean backPayFeeStage(AuditApproveRequest request, LoginUserInfo user) { + //回退到对账中 此阶段账单可编辑 可再次对账 + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72); + //缴费阶段回退到未开始 + shopStageInfoDAO.updateShopStageToNotStarted(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(request.getShopId()); + shopAuditInfoDO.setAuditType(AuditTypeEnum.SIGN_FRANCHISE.getCode()); + shopAuditInfoDO.setSubmittedUserId(user.getUserId()); + shopAuditInfoDO.setSubmittedUserName(user.getName()); + shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); + shopAuditInfoDO.setRejectReason(request.getCause()); + shopAuditInfoMapper.insertSelective(shopAuditInfoDO); + Long auditId = shopAuditInfoDO.getId(); + //审批记录表记录 + List operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83, OperationTypeEnum.OPERATION_TYPE_1.getCode()); + operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), "回退到缴费阶段,"+request.getCause()); + return true; + } + @Override public Integer dateHandle() { return signFranchiseMapper.dateHandle(); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java index e90791f27..89da73c43 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java @@ -1,20 +1,16 @@ package com.cool.store.service.impl; import com.alibaba.fastjson.JSONObject; -import com.cool.store.context.CurrentUserHolder; import com.cool.store.dao.*; import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.enums.point.PaymentMethodEnum; -import com.cool.store.exception.ServiceException; -import com.cool.store.mapper.FranchiseFeeMapper; -import com.cool.store.mapper.SignFranchiseMapper; +import com.cool.store.enums.wallet.YztStoreModel; import com.cool.store.mq.producer.SimpleMessageService; import com.cool.store.request.StoreMasterDTO; -import com.cool.store.request.StoreRequestBody; -import com.cool.store.service.OperationLogService; +import com.cool.store.request.wallet.CreateStoreRequest; import com.cool.store.service.SyncMainSysServer; -import com.cool.store.service.UserAuthMappingService; +import com.cool.store.service.wallet.WalletApiService; import com.cool.store.utils.poi.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -25,12 +21,6 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import static com.cool.store.enums.AuditExecuteEnum.FRANCHISEES; -import static com.cool.store.enums.ExtendFieldTypeEnum.*; /** * @Author: WangShuo @@ -48,39 +38,27 @@ public class SyncMainSysServerImpl implements SyncMainSysServer { @Resource private SimpleMessageService simpleMessageService; @Resource - private SignFranchiseMapper signFranchiseMapper; - @Resource private BuildInformationDAO buildInformationDAO; @Resource private PointInfoDAO pointInfoDAO; @Resource - FranchiseFeeMapper franchiseFeeMapper; - @Resource - private OperationLogDAO operationLogDAO; - @Resource private OrderSysInfoDAO orderSysInfoDAO; @Resource - private ShopStageInfoDAO shopStageInfoDAO; - @Resource - private PreparationServiceImpl preparationService; - @Resource - private UserAuthMappingService userAuthMappingService; - @Resource - private CommonService commonService; - @Resource private ShopInfoDAO shopInfoDAO; @Resource private LineInfoDAO lineInfoDAO; @Value("${mybatis.configuration.variables.enterpriseId}") private String eid; @Resource - private StoreDao storeDao; + private SignFranchiseDAO signFranchiseDAO; @Resource - SignFranchiseDAO signFranchiseDAO; + private PointDetailInfoDAO pointDetailDAO; @Resource - PointDetailInfoDAO pointDetailDAO; + private QualificationsInfoDAO qualificationsInfoDAO; @Resource - QualificationsInfoDAO qualificationsInfoDAO; + private RegionDao regionDao; + @Resource + private WalletApiService walletApiService; @Override @Async @@ -103,6 +81,7 @@ public class SyncMainSysServerImpl implements SyncMainSysServer { return; } storeMasterDTO.setEnterpriseId(eid); + storeMasterDTO.setStoreId(shopInfo.getStoreId()); storeMasterDTO.setStoreStatus("not_open"); storeMasterDTO.setStoreName(shopInfo.getShopName()); storeMasterDTO.setStoreNum(shopInfo.getShopCode()); @@ -206,10 +185,35 @@ public class SyncMainSysServerImpl implements SyncMainSysServer { } storeMasterDTO.setSignerInfo(signerInfo); simpleMessageService.send(JSONObject.toJSONString(storeMasterDTO), RocketMqTagEnum.ZXJP_CREATE_STORE); + // 推送营帐通 + pushStoreToYzt(shopInfo, lineInfoDO); } catch (Exception e) { log.info("asdStore_error:{},shopId:{}", e.getMessage(), shopId.toString()); } } - + /** + * 钱包推送营帐通创建门店 + */ + public void pushStoreToYzt(ShopInfoDO shopInfoDO, LineInfoDO lineInfoDO) { + try { + RegionDO regionDO = regionDao.getRegionById(shopInfoDO.getRegionId()); + CreateStoreRequest createStoreRequest = CreateStoreRequest.builder() + .outStoreId(shopInfoDO.getStoreId()) + .storeSn(shopInfoDO.getShopCode()) + .storeName(shopInfoDO.getShopName()) + .orgCode(String.valueOf(regionDO.getId())) + .orgName(regionDO.getName()) + .phoneNumber(lineInfoDO.getMobile()) + .storeMode(YztStoreModel.getYztStoreModel(Integer.valueOf(shopInfoDO.getFranchiseBrand()))) + .province(shopInfoDO.getProvinceCode()) + .city(shopInfoDO.getCityCode()) + .district(shopInfoDO.getDistrictCode()) + .address(shopInfoDO.getDetailAddress()) + .build(); + walletApiService.createStore(createStoreRequest); + } catch (Exception e) { + log.error("推送营帐通钱包创建门店失败", e); + } + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java new file mode 100644 index 000000000..9aae38f6f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -0,0 +1,231 @@ +package com.cool.store.service.wallet; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.wallet.*; +import com.cool.store.http.WalletHttpClientRest; +import com.cool.store.request.wallet.*; +import com.cool.store.utils.StringUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:51 + * @Version 1.0 + */ +@Service +public class WalletApiService { + + @Resource + WalletHttpClientRest walletHttpClientRest; + + @Value("${wallet.url}") + private String walletBaseUrl; + + /** + * 在平安扫呗系统中,创建签约人账户 + * @param request + * @return + */ + public StoreAccountDTO createStoreAndAccount(CreateStoreAndAccountRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/createStoreAndAccount", request, StoreAccountDTO.class); + } + + /** + * 开通失败 开通 + * @param request + * @return + */ + public StoreAccountDTO updateStoreAccount(UpdateStoreAccountRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/updateStoreAccount", request, StoreAccountDTO.class); + } + + /** + * 创建门店接口 + * @param request + * @return + */ + public AccountNoDTO createStore(CreateStoreRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/createStore", request, AccountNoDTO.class); + } + + /** + * 银行发送短信接口 + * @param request + * @return + */ + public AccountAuthenticationDTO authentication(OutStoreIdRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/authentication", request, AccountAuthenticationDTO.class); + } + + /** + * 门店开通平安银行接口 + * @param request + * @return + */ + public AccountVerifyDTO openAccount(AccountVerifyRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/openAccount", request, AccountVerifyDTO.class); + } + + /** + * 签约人账户打标升级 + * @param request + * @return + */ + public AddTagDTO addTag(AccountAddTagRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/addTag", request, AddTagDTO.class); + } + + /** + * 获取账户信息 + * @param request + * @return + */ + public List getAccountInfo(OutStoreIdRequest request){ + String accountInfoStr = walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/queryAccountInfo", request, String.class); + if (StringUtil.isNotEmpty(accountInfoStr)){ + return JSONObject.parseArray(accountInfoStr, AccountInfoDTO.class); + } + return null; + } + + /** + * 大额预支付接口 + * @param request + * @return + */ + public LargePaymentDTO largePayment(LargePaymentRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/largePayment", request, LargePaymentDTO.class); + } + + /** + * 大额预支付查询接口 + * @param request + * @return + */ + public PaymentDTO largePaymentQuery(PaymentDetailRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/largePaymentQuery", request, PaymentDTO.class); + } + + /** + * 门店账户向公司分账转账接口 + * @param request + * @return + */ + public TransferDTO transfer(TransferRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/transfer", request, TransferDTO.class); + } + + + /** + * 门店签约账户,退款提现至提现卡 + * @param request + * @return + */ + public WithDrawerDTO withdraw(WithDrawerRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/withdrawer", request, WithDrawerDTO.class); + } + + /** + * 账单详情 + * @param request + * @return + */ + public TradeRecordDTO getBillDetail(BillDetailRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/billDetail", request, TradeRecordDTO.class); + } + + /** + * 获取门店账户流水 + * @param request + * @return + */ + public BillPageDTO getBillPage(BillPageRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/billPage", request, BillPageDTO.class); + } + + /** + * 获取门店账户信息 + * @param request + * @return + */ + public CompanyListDTO getCompanyInfo(FindPageCompanyRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/base/v1/findPageCompany", request, CompanyListDTO.class); + } + + /** + * 获取支行信息 + * @param request + * @return + */ + public BankListDTO getBankList(GetBankRequest request) { + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/base/v1/findPageBank", request, BankListDTO.class); + } + + /** + * 修改密码 + * @param request + * @return + */ + public String upholdPwd(UpdatePasswordRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/upholdPwd", request, String.class); + } + + /** + * 获取账户列表信息 + * @param request + * @return + */ + public AccountPageDTO getAccountList(AccountBatchQueryRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/findAccountPage", request, AccountPageDTO.class); + } + + /** + * 获取账户激活链接 + * @param request + * @return + */ + public AccountActiveUrlDTO pushAccountActiveUrl(OutStoreIdRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/ws/v1/create", request, AccountActiveUrlDTO.class); + } + + /** + * 老店创建门店网商账户 + * @param request + * @return + */ + public StoreIdDTO oldStoreOpenAccount(OldStoreAccountCreateRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/ws/v1/create", request, StoreIdDTO.class); + } + + /** + * 获取交易记录列表 + * @param request + * @return + */ + public TradeRecordListDTO getTradeRecordList(TradeRecodePageRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/accRecordPage", request, TradeRecordListDTO.class); + } + + /** + * 网商银行重新激活发送短链接 + * @param request 网商账户重新发送激活短信Request + * @return 网商激活短链DTO + */ + public TextMsgSendDTO textMsgSend(TextMsgSendRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/ws/v1/textMsgSend", request, TextMsgSendDTO.class); + } + + + /** + * 查询密码是否设置 + * @param request + * @return + */ + public PasswordDTO passwordIsExist(OutStoreIdRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/existPwd", request, PasswordDTO.class); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java new file mode 100644 index 000000000..584a4027b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -0,0 +1,189 @@ +package com.cool.store.service.wallet; + +import com.cool.store.dto.wallet.*; +import com.cool.store.request.wallet.*; +import com.cool.store.vo.wallet.*; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + *

+ * 钱包 服务类 + *

+ * + * @author wangff + * @since 2025/11/13 + */ +public interface WalletService { + + /** + * 平安银行钱包账号创建 + * @param request 平安钱包账户创建Request + * @return 是否成功 + */ + Boolean accountCreate(AccountCreateRequest request); + + /** + * 鉴权申请 + * @param request 门店id + * @return 是否成功 + */ + AccountAuthenticationVO authentication(WalletShopRequest request); + + /** + * 账号开通 + * @param request 平安钱包账户开通Request + * @return 是否成功 + */ + Boolean openAccount(AccountOpenRequest request); + + /** + * 银行支行列表查询 + * @param request 支行信息查询Request + * @return 银行支行信息列表 + */ + PageInfo getBankList(BankListRequest request); + + /** + * 判断营业执照是否已经上传,已上传则调用打标接口 + * @param shopId 门店shopId + * @param storeId 主数据门店id + * @param lineId 线索id + */ + void addTagIfUploadLicense(Long shopId, String storeId, Long lineId); + + /** + * 打标成功回调通知 + * @param request + * @return + */ + Boolean addTagCallback(AddTagCallbackNoticeRequest request); + + /** + * 大额充值 回调接口 + * @param request + * @return + */ + Boolean largePaymentCallback(PaymentDTO request); + + /** + * 网商银行 回调接口 + * @param request + * @return + */ + Boolean onlineCommercialBankCallback(OnlineCommercialBankCallbackRequest request); + + /** + * 账户交易回调 + * @param request + * @return + */ + Boolean accountTradeCallback(AccountTradeCallbackRequest request); + + /** + * 查询账户列表 + * @param request 账户查询Request + * @return 账户信息VO列表 + */ + AccountDataVO getAccountList(AccountQueryRequest request); + + /** + * 根据账户编号查询账户信息 + * @param request 账户查询Request + * @return 账户信息VO + */ + AccountInfoVO getAccountInfo(AccountQueryRequest request); + + /** + * 交易流水 + * @param request 交易流水查询Request + * @return 账户交易列表VO列表 + */ + AccountBillPageVO getBillPage(AccountBillQueryRequest request); + + /** + * 账户交易详情 + * @param request 交易详情查询Request + * @return 交易详情VO + */ + TradeRecordDTO getBillDetail(BillDetailRequest request); + + /** + * 密码维护 + * @param request 账户密码维护Request + * @return 是否成功 + */ + Boolean passwordUpdate(AccountPasswordRequest request); + + /** + * 门店是否存在密码 + * @param request + * @return + */ + PasswordDTO existPassword(OutStoreIdRequest request); + + /** + * 账户充值 + * @param request 账户充值Request + * @return 账户充值VO + */ + AccountPaymentVO payment(AccountPaymentRequest request); + + /** + * 未完成充值订单查询 + * @param request 查询request + * @return 钱包支付订单VO列表 + */ + PageInfo nonPaymentOrderPage(LargePaymentQueryRequest request); + + /** + * 根据预支付id查询收款账户详情 + * @param paymentId 预支付id + * @return 账户充值VO + */ + AccountPaymentVO paymentDetail(String paymentId); + + /** + * 提现 + * @param request 钱包提现Request + * @return 是否成功 + */ + Boolean withDrawer(WalletWithDrawerRequest request); + + /** + * 批量查询账户信息 分页查询 所有门店账户 + * @param request 批量查询账户信息Request + * @return 账户信息VO列表 + */ + PageInfo getAllAccountList(CoolAccountBatchQueryRequest request); + + /** + * 批量查询账户交易流水 + * @param request + * @return + */ + PageInfo getTradeRecordList(CoolTradeRecodePageRequest request); + + + /** + * 通过门店Code 查询存量客户开通基本信息 + * @param storeCode + * @return + */ + OpenBasicInfoDTO getOpenBasicInfo(String storeId, String storeCode); + + /** + * 开通网商银行 + * @param request + * @return + */ + Boolean openOnlineBankAccount(CoolOpenBasicInfoRequest request); + + /** + * 网商发送激活短信 + * @param request 门店idRequest + * @return 是否成功 + */ + Boolean onlineBankActive(StoreShopRequest request); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java new file mode 100644 index 000000000..46bc1f2d7 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -0,0 +1,667 @@ +package com.cool.store.service.wallet.impl; + +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.collection.CollStreamUtil; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.RedisConstant; +import com.cool.store.dao.*; +import com.cool.store.dao.store.StoreMasterSignerInfoDAO; +import com.cool.store.dao.wallet.OpenBankInfoDAO; +import com.cool.store.dao.wallet.TempOpenWalletInfoDAO; +import com.cool.store.dao.wallet.WalletPaymentOrderDAO; +import com.cool.store.dto.wallet.*; +import com.cool.store.entity.*; +import com.cool.store.entity.store.StoreMasterSignerInfoDO; +import com.cool.store.entity.wallet.OpenBankInfoDO; +import com.cool.store.entity.wallet.TempOpenWalletInfoDO; +import com.cool.store.entity.wallet.WalletPaymentOrderDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.wallet.BankAccountTypeEnum; +import com.cool.store.enums.wallet.BankBusinessTypeEnum; +import com.cool.store.enums.wechat.WalletTypeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.ApplyLicenseMapper; +import com.cool.store.request.wallet.*; +import com.cool.store.service.wallet.WalletApiService; +import com.cool.store.service.wallet.WalletService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.wallet.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.sql.Date; +import java.text.MessageFormat; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 钱包 服务实现类 + *

+ * + * @author wangff + * @since 2025/11/13 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class WalletServiceImpl implements WalletService { + private final ShopInfoDAO shopInfoDAO; + private final ShopStageInfoDAO shopStageInfoDAO; + private final ApplyLicenseMapper applyLicenseMapper; + private final WalletApiService walletApiService; + private final WalletPaymentOrderDAO walletPaymentOrderDAO; + private final LineInfoDAO lineInfoDAO; + private final RedisUtilPool redisUtilPool; + private final QualificationsInfoDAO qualificationsInfoDAO; + private final StoreDao storeDao; + private final StoreMasterSignerInfoDAO storeMasterSignerInfoDAO; + private final TempOpenWalletInfoDAO tempOpenWalletInfoDAO; + private final OpenBankInfoDAO openBankInfoDAO; + + private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Override + public Boolean accountCreate(AccountCreateRequest request) { + ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); + // 存储银行卡信息 + OpenBankInfoDO openBankInfoDO = OpenBankInfoDO.builder() + .storeId(shopInfo.getStoreId()) + .settlementCard(request.getBankNumber()) + .bankBranchName(request.getBankName()) + .bankBranchCode(request.getBankNo()) + .bankReservedPhone(request.getBankMobile()) + .source(1) + .build(); + openBankInfoDAO.insertOrUpdateByStoreId(openBankInfoDO); + // 调用 创建门店签约人账户接口 + CreateStoreAndAccountRequest accountRequest = CreateStoreAndAccountRequest.builder() + .outStoreId(shopInfo.getStoreId()) + .phoneNumber(request.getMobile()) + .accountType(BankAccountTypeEnum.PRIVATE.getType()) + .businessType(BankBusinessTypeEnum.PERSONAL.getType()) + .legalName(request.getUserName()) + .legalNo(request.getIdCardNo()) + .accountAliasName(request.getUserName() + "_" + shopInfo.getStoreId()) + .accountCardNo(request.getBankNumber()) + .accountPhone(request.getBankMobile()) + .bankNo(request.getBankNo()) + .bankName(request.getBankName()) + .build(); + StoreAccountDTO storeAndAccount = walletApiService.createStoreAndAccount(accountRequest); + return StringUtils.isNotBlank(storeAndAccount.getAccountNo()); + } + + @Override + public AccountAuthenticationVO authentication(WalletShopRequest request) { + ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); + // 调用 门店签约人账户鉴权申请接口 + AccountAuthenticationDTO authentication = walletApiService.authentication(new OutStoreIdRequest(shopInfo.getStoreId())); + if (Objects.nonNull(authentication)) { + if (authentication.getAccountStatus().equals(4)) { + // 判断营业执照是否已经上传,已上传则调用打标接口 + addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId(), shopInfo.getLineId()); + } + return new AccountAuthenticationVO(authentication.getAccountStatus()); + } + throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL); + } + + @Override + public Boolean openAccount(AccountOpenRequest request) { + // 校验阶段是否合法 + ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); + + // 调用 门店签约人账户开通接口 + log.info("开通账户"); + AccountVerifyDTO accountVerifyDTO = walletApiService.openAccount(new AccountVerifyRequest(shopInfo.getStoreId(), request.getCode())); + if (!CommonConstants.INDEX_ONE.equals(accountVerifyDTO.getOpenStatus())) { + throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL); + } + + // 更新钱包开通阶段状态 + List updateSubStageList = new ArrayList<>(); + updateSubStageList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_61); + // 判断一下缴费阶段是否开启,未开启则开启缴费阶段 + ShopStageInfoDO payStage = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); + if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(payStage.getShopSubStageStatus())) { + updateSubStageList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70); + } + shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), updateSubStageList); + + // 判断营业执照是否已经上传,已上传则调用打标接口 + addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId(), shopInfo.getLineId()); + return true; + } + + @Override + public PageInfo getBankList(BankListRequest request) { + GetBankRequest getBankRequest = new GetBankRequest(); + WalletBasicPageInfo pageParam = new WalletBasicPageInfo(); + pageParam.setCurrentPage(request.getPageNum()); + pageParam.setPageSize(request.getPageSize()); + getBankRequest.setPage(pageParam); + getBankRequest.setHeadName(request.getHeadName()); + getBankRequest.setKeyword(request.getKeyword()); + BankListDTO bankListDTO = walletApiService.getBankList(getBankRequest); + return toPageInfo(bankListDTO.getPageData(), BankVO.class, bankListDTO.getPage()); + } + + public static PageInfo toPageInfo(List list, Class clazz, WalletBasicPageInfo page) { + PageInfo result = new PageInfo<>(); + result.setPageNum(page.getCurrentPage()); + result.setPageSize(page.getPageSize()); + result.setPages(page.getCount()); + result.setTotal(page.getTotal()); + result.setList(CollectionUtils.isNotEmpty(list) ? (list.get(0).getClass().equals(clazz) ? (List) list : BeanUtil.toList(list, clazz)) : Collections.emptyList()); + return result; + } + + @Override + public void addTagIfUploadLicense(Long shopId, String storeId, Long lineId) { + LicenseTransactDO license = applyLicenseMapper.selectByShopId(shopId); + // 营业执照已上传,调用打标接口 + if (Objects.nonNull(license) && StringUtils.isNotBlank(license.getCreditUrl())) { + try { + // 判断一下账户的开通状态 + if (enableAddTag(storeId)) { + OpenBankInfoDO openBankInfo = getAndUpdateOpenBankInfo(storeId, lineId, license); + // 调用 签约人账户打标(升级)接口 + log.info("营业执照已上传,账户打标"); + AccountAddTagRequest tagRequest = AccountAddTagRequest.builder() + .outStoreId(storeId) + .licenseNo(openBankInfo.getBusinessLicenseCode()) + .licenseName(openBankInfo.getBusinessLicenseName()) + .legalName(openBankInfo.getLegalName()) + .legalNo(openBankInfo.getLegalIdCard()) + .legalPhone(openBankInfo.getLegalPhone()) + .certPhotoA(openBankInfo.getLegalIdCardFront()) + .certPhotoB(openBankInfo.getLegalIdCardBack()) + .licensePhoto(openBankInfo.getBusinessLicensePhoto()) + .signatoryPhotoA(openBankInfo.getSignerIdCardFront()) + .signatoryPhotoB(openBankInfo.getSignerIdCardBack()) + .build(); + executeAddTag(tagRequest); + } + } catch (ServiceException e) { + // 平安打标 签约人和法人一致时,同步返回,失败原因从msg中取 + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, storeId, WalletTypeEnum.PING_AN.getType()); + redisUtilPool.setString(key, e.getErrorCode().equals(ErrorCodeEnum.WALLET_API_ERROR.getCode()) ? e.getMessage() : "系统异常"); + log.info("营业执照已上传,接口异常", e); + } catch (Exception e) { + log.error("营业执照已上传,打标失败", e); + } + } + } + + /** + * 执行打标接口,执行失败缓存标记 + */ + private void executeAddTag(AccountAddTagRequest tagRequest) { + AddTagDTO addTagDTO = walletApiService.addTag(tagRequest); + log.info("打标接口调用成功,response:{}", JSONObject.toJSONString(addTagDTO)); + // 如果网商创建失败,缓存标记 + if (CommonConstants.INDEX_TWO.equals(addTagDTO.getWsStatus())) { + redisUtilPool.setString(MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_TAG_FAIL, tagRequest.getOutStoreId()), "1"); + } else { + // 网商创建成功,记录已激活状态 + redisUtilPool.setString(MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_ACTIVATED, tagRequest.getOutStoreId()), "1"); + } + } + + /** + * 获取并更新门店开通网商信息 + */ + private OpenBankInfoDO getAndUpdateOpenBankInfo(String storeId, Long lineId, LicenseTransactDO license) { + LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(lineId); + QualificationsInfoDO qualificationsInfoDO = qualificationsInfoDAO.getByLineId(lineId); + OpenBankInfoDO openBankInfoDO = OpenBankInfoDO.builder() + .storeId(storeId) + .signerName(lineInfoDO.getUsername()) + .signerIdCard(qualificationsInfoDO.getIdCardNo()) + .signerPhone(lineInfoDO.getMobile()) + .signerIdCardFront(qualificationsInfoDO.getFrontOfIdCard()) + .signerIdCardBack(qualificationsInfoDO.getBackOfIdCard()) + .businessLicenseName(license.getBusinessLicense()) + .businessLicenseCode(license.getCreditCode()) + .businessLicensePhoto(license.getCreditUrl()) + .legalName(license.getLicenseLegalPerson()) + .legalIdCard(license.getLicenseLegalIdCardNo()) + .legalPhone(license.getLicenseLegalMobile()) + .legalIdCardFront(license.getLicenseLegalIdCardFront()) + .legalIdCardBack(license.getLicenseLegalIdCardBack()) + .build(); + openBankInfoDAO.insertOrUpdateByStoreId(openBankInfoDO); + return openBankInfoDO; + } + + /** + * 账户存在且未打标 + */ + private boolean enableAddTag(String storeId) { + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); + return CollectionUtils.isNotEmpty(accountInfo) && accountInfo.size() == 1 && accountInfo.get(0).getLabelingStatus().equals(0); + } + + @Override + public Boolean addTagCallback(AddTagCallbackNoticeRequest request) { + try { + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, request.getOutStoreId(), WalletTypeEnum.PING_AN.getType()); + if (Integer.valueOf(2).equals(request.getStatus())) { + redisUtilPool.setString(key, request.getErrorMsg()); + } else { + redisUtilPool.delKey(key); + } + } catch (Exception e) { + log.info("平安打标回调失败", e); + } + return Boolean.TRUE; + } + + @Override + public Boolean largePaymentCallback(PaymentDTO request) { + try { + walletPaymentOrderDAO.updateOrderByPaymentId(request.getOutStoreId(), request.getPaymentId(), request.getOrderStatus()); + } catch (Exception e) { + log.error("大额充值回调失败", e); + } + return Boolean.TRUE; + } + + @Override + public Boolean onlineCommercialBankCallback(OnlineCommercialBankCallbackRequest request) { + try { + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, request.getOutStoreId(), "1"); + if (Integer.valueOf(5).equals(request.getAccountStatus())) { + redisUtilPool.setString(key, request.getFailReason()); + } else { + redisUtilPool.delKey(key); + } + // 如果创建成功,删除网商开通失败标识 + if (Integer.valueOf(4).equals(request.getAccountStatus())) { + redisUtilPool.delKey(MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_TAG_FAIL, request.getOutStoreId())); + redisUtilPool.delKey(MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_ACTIVATED, request.getOutStoreId())); + } + } catch (Exception e) { + log.info("平安打标回调失败", e); + } + return Boolean.TRUE; + } + + @Override + public Boolean accountTradeCallback(AccountTradeCallbackRequest request) { + return Boolean.TRUE; + } + + @Override + public AccountDataVO getAccountList(AccountQueryRequest request) { + String storeId = getStoreId(request); + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); + List accountList = accountInfo.stream() + .filter(v -> Objects.isNull(request.getWalletType()) || request.getWalletType().equals(v.getWalletType())) + .map(v -> { + AccountInfoVO vo = BeanUtil.toBean(v, AccountInfoVO.class); + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, storeId, String.valueOf(v.getWalletType())); + vo.setFailReason(redisUtilPool.getString(key)); + return vo; + }).collect(Collectors.toList()); + boolean onlineBankOpenFail = false; + boolean activated = false; + if (WalletTypeEnum.ONLINE_BANK.getType().equals(request.getWalletType())) { + onlineBankOpenFail = getOnlineBankFailTag(storeId); + String key = MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_ACTIVATED, storeId); + activated = StringUtils.isNotBlank(redisUtilPool.getString(key)); + } + return new AccountDataVO(onlineBankOpenFail, activated, accountList); + } + + @Override + public AccountInfoVO getAccountInfo(AccountQueryRequest request) { + String storeId = getStoreId(request); + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); + AccountInfoDTO accountInfoDTO = accountInfo.stream().filter(v -> v.getAccountNo().equals(request.getAccountNo())).findFirst().orElse(null); + return BeanUtil.toBean(accountInfoDTO, AccountInfoVO.class); + } + + @Override + public AccountBillPageVO getBillPage(AccountBillQueryRequest request) { + String storeId = getStoreId(request); + LocalDate now = LocalDate.now(); + if (Objects.isNull(request.getBeginDate()) || Objects.isNull(request.getEndDate())) { + request.setBeginDate(Date.valueOf(now.withDayOfMonth(1))); + request.setEndDate(Date.valueOf(now)); + } + BillPageRequest billPageRequest = BillPageRequest.builder() + .outStoreId(storeId) + .beginDate(DateUtil.format(request.getBeginDate(), "yyyy-MM-dd HH:mm:ss")) + .endDate(DateUtil.format(request.getEndDate(), "yyyy-MM-dd HH:mm:ss")) + .walletType(request.getWalletType()) + .isLegal(request.getIsLegal()) + .recordType(request.getRecordType()) + .feeItemId(request.getFeeItemId()) + .currentPage(request.getPageNum()) + .pageSize(request.getPageSize()) + .build(); + BillPageDTO billPage = walletApiService.getBillPage(billPageRequest); + PageInfo data = toPageInfo(billPage.getPageData(), TradeRecordDTO.class, billPage.getPage()); + return new AccountBillPageVO(data, billPage.getGetAmount(), billPage.getUseAmount()); + } + + @Override + public TradeRecordDTO getBillDetail(BillDetailRequest request) { + return walletApiService.getBillDetail(request); + } + + @Override + public Boolean passwordUpdate(AccountPasswordRequest request) { + String storeId = getStoreId(request); + UpdatePasswordRequest passwordRequest = BeanUtil.toBean(request, UpdatePasswordRequest.class); + passwordRequest.setOutStoreId(storeId); + walletApiService.upholdPwd(passwordRequest); + return true; + } + + @Override + public PasswordDTO existPassword(OutStoreIdRequest request) { + PasswordDTO passwordDTO = walletApiService.passwordIsExist(request); + List list = walletApiService.getAccountInfo(request); + Boolean isExistAccount = false; + if (CollectionUtils.isNotEmpty( list)){ + isExistAccount = Boolean.TRUE; + } + passwordDTO.setIsExistAccount(isExistAccount); + return passwordDTO; + } + + @Override + public AccountPaymentVO payment(AccountPaymentRequest request) { + ShopInfoDO shopInfo = null; + if (Objects.nonNull(request.getShopId())) { + shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + } else if (StringUtils.isNotBlank(request.getStoreId())) { + shopInfo = shopInfoDAO.getShopInfoByStoreId(request.getStoreId()); + } + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + String storeId = shopInfo.getStoreId(); + LineInfoDO lineInfo = lineInfoDAO.getByPartnerId(shopInfo.getPartnerId()); + if (Objects.isNull(lineInfo)) { + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + String paymentId = UUIDUtils.get32UUID(); + LargePaymentRequest paymentRequest = new LargePaymentRequest(storeId, paymentId, lineInfo.getUsername(), request.getAmount().toString()); + LargePaymentDTO resultDTO = walletApiService.largePayment(paymentRequest); + + long expiryCountdown = 0; + if (StringUtils.isNotBlank(resultDTO.getExpireTime())) { + expiryCountdown = Math.max(0, Duration.between(LocalDateTime.now(), LocalDateTime.parse(resultDTO.getExpireTime(), formatter)).getSeconds()); + } + WalletPaymentOrderDO orderDO = WalletPaymentOrderDO.builder() + .storeId(storeId) + .paymentId(paymentId) + .type(0) + .amount(request.getAmount()) + .expireTime(resultDTO.getExpireTime()) + .orderStatus(3) + .build(); + walletPaymentOrderDAO.insertSelective(orderDO); + AccountPaymentVO result = BeanUtil.toBean(resultDTO, AccountPaymentVO.class); + result.setExpiryCountdown(expiryCountdown); + return result; + } + + @Override + public PageInfo nonPaymentOrderPage(LargePaymentQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + String storeId = getStoreId(request); + List list = walletPaymentOrderDAO.getNonPaymentList(storeId); + PageInfo page = new PageInfo<>(list); + return BeanUtil.toPage(page, WalletPaymentOrderVO.class); + } + + @Override + public AccountPaymentVO paymentDetail(String paymentId) { + PaymentDetailRequest request = new PaymentDetailRequest(); + request.setPaymentId(paymentId); + PaymentDTO resultDTO = walletApiService.largePaymentQuery(request); + + long expiryCountdown = 0; + if (StringUtils.isNotBlank(resultDTO.getExpireTime())) { + expiryCountdown = Math.max(0, Duration.between(LocalDateTime.now(), LocalDateTime.parse(resultDTO.getExpireTime(), formatter)).getSeconds()); + } + AccountPaymentVO result = BeanUtil.toBean(resultDTO, AccountPaymentVO.class); + result.setExpiryCountdown(expiryCountdown); + return result; + } + + @Override + public Boolean withDrawer(WalletWithDrawerRequest request) { + String storeId = getStoreId(request); + String reqNo = UUIDUtils.get32UUID(); + WithDrawerRequest withDrawerRequest = new WithDrawerRequest(storeId, request.getPayPwd(), reqNo, request.getAmount().toString(), "提现", request.getWalletType()); + WithDrawerDTO withdraw = walletApiService.withdraw(withDrawerRequest); + if ("2".equals(withdraw.getTradeStatus())) { + throw new ServiceException(ErrorCodeEnum.WALLET_WITH_DRAWER_FAIL); + } + WalletPaymentOrderDO orderDO = WalletPaymentOrderDO.builder() + .storeId(storeId) + .paymentId(reqNo) + .type(1) + .amount(request.getAmount()) + .orderStatus(1) + .build(); + walletPaymentOrderDAO.insertSelective(orderDO); + return true; + } + + @Override + public PageInfo getAllAccountList(CoolAccountBatchQueryRequest request) { + AccountBatchQueryRequest accountBatchQueryRequest = request.convertToAccountBatchQueryRequest(); + AccountPageDTO accountList = walletApiService.getAccountList(accountBatchQueryRequest); + List list = BeanUtil.toList(accountList.getPageData(), AccountPageVO.class, CopyOptions.create().setFieldMapping(Collections.singletonMap("outStoreId", "storeId"))); + PageInfo page = toPageInfo(list, AccountPageVO.class, accountList.getPage()); + List storeIds = CollStreamUtil.toList(page.getList(), AccountPageVO::getStoreId); + Map storeNameMap = getStoreNameMap(storeIds); + page.getList().forEach(v -> v.setStoreName(storeNameMap.get(v.getStoreId()))); + return page; + } + + private Map getStoreNameMap(List storeIds) { + Map storeNameMap = new HashMap<>(); + List stores = storeDao.getEffectiveStoreByStoreIds(storeIds); + Map storeMap = CollStreamUtil.toMap(stores, StoreDO::getStoreId, StoreDO::getStoreName); + storeNameMap.putAll(storeMap); + List shops = shopInfoDAO.getShopInfoByStoreIds(storeIds); + Map shopMap = CollStreamUtil.toMap(shops, ShopInfoDO::getStoreId, ShopInfoDO::getShopName); + storeNameMap.putAll(shopMap); + return storeNameMap; + } + + @Override + public PageInfo getTradeRecordList(CoolTradeRecodePageRequest request) { + TradeRecodePageRequest tradeRecodePageRequest = request.convertToTradeRecodePageRequest(); + TradeRecordListDTO tradeRecordListDTO = walletApiService.getTradeRecordList(tradeRecodePageRequest); + return toPageInfo(tradeRecordListDTO.getPageData(), TradeRecordDTO.class, tradeRecordListDTO.getPage()); + } + + @Override + public OpenBasicInfoDTO getOpenBasicInfo(String storeId, String storeCode) { + OpenBasicInfoDTO openBasicInfoDTO = new OpenBasicInfoDTO(); + //非首次提交 获取上次提交的信息 其他情况走主数据与营账通开通数据 + OpenBankInfoDO openBankInfo; + if (StringUtils.isNotBlank(storeId)) { + openBankInfo = openBankInfoDAO.getOpenBankInfoByStoreId(storeId); + } else { + openBankInfo = openBankInfoDAO.getOpenBankInfo(storeCode); + } + if (Objects.nonNull(openBankInfo)){ + openBasicInfoDTO.setSignerName(openBankInfo.getSignerName()); + openBasicInfoDTO.setSignerIdCard(openBankInfo.getSignerIdCard()); + openBasicInfoDTO.setSignerPhone(openBankInfo.getSignerPhone()); + openBasicInfoDTO.setSignerIdCardFront(openBankInfo.getSignerIdCardFront()); + openBasicInfoDTO.setSignerIdCardBack(openBankInfo.getSignerIdCardBack()); + openBasicInfoDTO.setBusinessLicenseName(openBankInfo.getBusinessLicenseName()); + openBasicInfoDTO.setBusinessLicensePhoto(openBankInfo.getBusinessLicensePhoto()); + openBasicInfoDTO.setBusinessLicenseCode(openBankInfo.getBusinessLicenseCode()); + openBasicInfoDTO.setSettlementCard(openBankInfo.getSettlementCard()); + openBasicInfoDTO.setBankBranchName(openBankInfo.getBankBranchName()); + openBasicInfoDTO.setBankBranchCode(openBankInfo.getBankBranchCode()); + openBasicInfoDTO.setBankReservedPhone(openBankInfo.getBankReservedPhone()); + return openBasicInfoDTO; + } + //先查询当前门店 + StoreDO store = storeDao.getByStoreNum(storeCode); + if (Objects.isNull( store)){ + return null; + } + Map signerMapByStoreIds = storeMasterSignerInfoDAO.getSignerMapByStoreIds(Collections.singletonList(store.getStoreId())); + StoreMasterSignerInfoDO signerInfoDO = signerMapByStoreIds.get(store.getStoreId()); + + if (Objects.nonNull(signerInfoDO)){ + openBasicInfoDTO.setSignerName(signerInfoDO.getSigner1Name()); + openBasicInfoDTO.setSignerIdCard(signerInfoDO.getSigner1IdCardNo()); + openBasicInfoDTO.setSignerPhone(signerInfoDO.getSigner1Mobile()); + openBasicInfoDTO.setSignerIdCardFront(signerInfoDO.getSigner1IdCardFront()); + openBasicInfoDTO.setSignerIdCardBack(signerInfoDO.getSigner1IdCardBack()); + } + TempOpenWalletInfoDO tempOpenWalletInfoByStoreCode = tempOpenWalletInfoDAO.getTempOpenWalletInfoByStoreCode(storeCode); + if (Objects.nonNull(tempOpenWalletInfoByStoreCode)){ + openBasicInfoDTO.setBusinessLicenseName(tempOpenWalletInfoByStoreCode.getBusinessRegName()); + openBasicInfoDTO.setBusinessLicenseCode(tempOpenWalletInfoByStoreCode.getBusinessLicenseNo()); + openBasicInfoDTO.setSettlementCard(tempOpenWalletInfoByStoreCode.getSettlementCardNo()); + openBasicInfoDTO.setBankBranchName(tempOpenWalletInfoByStoreCode.getBankBranchName()); + openBasicInfoDTO.setBankBranchCode(tempOpenWalletInfoByStoreCode.getBankBranchNo()); + openBasicInfoDTO.setBankReservedPhone(tempOpenWalletInfoByStoreCode.getBankReservedPhone()); + } + return openBasicInfoDTO; + } + + + @Override + public Boolean openOnlineBankAccount(CoolOpenBasicInfoRequest request) { + //首先存储提交的信息 + OpenBankInfoDO openBankInfoDO = new OpenBankInfoDO(); + BeanUtil.copyProperties(request, openBankInfoDO); + //查询是否有提交过 + OpenBankInfoDO openBankInfo = openBankInfoDAO.getOpenBankInfo(request.getStoreCode()); + if (Objects.isNull(openBankInfo)){ + openBankInfoDAO.insertSelective(openBankInfoDO); + }else { + openBankInfoDAO.updateByStoreCode(openBankInfoDO); + } + // 如果是开店流程中网商开通失败,则重新调用打标接口 + if (getOnlineBankFailTag(request.getStoreId())) { + onlineBankFailReOpen(request); + return true; + } + OldStoreAccountCreateRequest oldStoreAccountCreateRequest = new OldStoreAccountCreateRequest(); + StoreDO store = storeDao.getByStoreNum(request.getStoreCode()); + oldStoreAccountCreateRequest.setOutStoreId(store.getStoreId()); + oldStoreAccountCreateRequest.setPhoneNumber(request.getSignerPhone()); + oldStoreAccountCreateRequest.setAccountType(2); + oldStoreAccountCreateRequest.setLicenseNo(request.getBusinessLicenseCode()); + oldStoreAccountCreateRequest.setLicenseName(request.getBusinessLicenseName()); + oldStoreAccountCreateRequest.setLegalName(request.getLegalName()); + oldStoreAccountCreateRequest.setLegalNo(request.getLegalIdCard()); + oldStoreAccountCreateRequest.setLegalPhone(request.getLegalPhone()); + oldStoreAccountCreateRequest.setLegalIdcardExpireTime(request.getLegalIdCardExpireTime()); + //账户简称使用营业执照名称 + oldStoreAccountCreateRequest.setAccountAliasName(request.getBusinessLicenseName()); + oldStoreAccountCreateRequest.setAccountCardNo(request.getSettlementCard()); + oldStoreAccountCreateRequest.setAccountPhone(request.getBankReservedPhone()); + oldStoreAccountCreateRequest.setBankNo(request.getBankBranchCode()); + oldStoreAccountCreateRequest.setBankName(request.getBankBranchName()); + oldStoreAccountCreateRequest.setCertPhotoA(request.getLegalIdCardFront()); + oldStoreAccountCreateRequest.setCertPhotoB(request.getLegalIdCardBack()); + oldStoreAccountCreateRequest.setLicensePhoto(request.getBusinessLicensePhoto()); + oldStoreAccountCreateRequest.setSignatoryName(request.getSignerName()); + oldStoreAccountCreateRequest.setSignatoryPhone(request.getSignerPhone()); + oldStoreAccountCreateRequest.setSignatoryNo(request.getSignerIdCard()); + oldStoreAccountCreateRequest.setSignatoryPhotoA(request.getSignerIdCardFront()); + oldStoreAccountCreateRequest.setSignatoryPhotoB(request.getSignerIdCardBack()); + walletApiService.oldStoreOpenAccount(oldStoreAccountCreateRequest); + // 网商创建成功,记录已激活状态 + redisUtilPool.setString(MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_ACTIVATED, store.getStoreId()), "1"); + return Boolean.TRUE; + } + + /** + * 获取开店流程网商银行开通失败标记 + */ + private boolean getOnlineBankFailTag(String storeId) { + String key = MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_TAG_FAIL, storeId); + String flag = redisUtilPool.getString(key); + return StringUtils.isNotBlank(flag); + } + + /** + * 开通流程创建网商银行账户失败的情况下,重新开通 + */ + private void onlineBankFailReOpen(CoolOpenBasicInfoRequest request) { + log.info("网商钱包开通失败后重新提交打标接口"); + AccountAddTagRequest tagRequest = AccountAddTagRequest.builder() + .outStoreId(request.getStoreId()) + .licenseNo(request.getBusinessLicenseCode()) + .licenseName(request.getBusinessLicenseName()) + .legalName(request.getLegalName()) + .legalNo(request.getLegalIdCard()) + .legalPhone(request.getLegalPhone()) + .certPhotoA(request.getLegalIdCardFront()) + .certPhotoB(request.getLegalIdCardBack()) + .licensePhoto(request.getBusinessLicensePhoto()) + .signatoryPhotoA(request.getSignerIdCardFront()) + .signatoryPhotoB(request.getSignerIdCardBack()) + .build(); + executeAddTag(tagRequest); + } + + @Override + public Boolean onlineBankActive(StoreShopRequest request) { + String storeId = getStoreId(request); + walletApiService.textMsgSend(new TextMsgSendRequest(storeId)); + return true; + } + + public String getStoreId(StoreShopRequest request) { + String storeId = request.getStoreId(); + if (StringUtils.isBlank(storeId) && Objects.nonNull(request.getShopId())) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + storeId = Objects.nonNull(shopInfo) ? shopInfo.getStoreId() : null; + } + if (StringUtils.isBlank(storeId)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + return storeId; + } + + /** + * 查询并校验门店是否存在以及阶段是否处于平安钱包未开通状态 + */ + private ShopInfoDO getAndVerifyShopAndStage(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + ShopStageInfoDO stageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_6); + if (!ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60.getShopSubStageStatus().equals(stageInfo.getShopSubStageStatus())) { + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_NOT_OPERATE); + } + return shopInfo; + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java index 682af5c52..116654044 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java @@ -5,7 +5,9 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.response.ResponseResult; +import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.utils.OpenSignatureUtil; +import com.cool.store.utils.RsaSignUtil; import com.cool.store.utils.UUIDUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -42,6 +44,10 @@ public class OpenApiValidateFilter implements Filter { private String coolAppKey; @Value("${cool.api.secret}") private String coolAppSecret; + @Value("${cool.api.rsa.private.key}") + private String coolPrivateKey; + @Value("${wallet.api.rsa.public.key}") + private String walletPublicKey; private static final Set WHITELIST_URIS = new HashSet<>(Arrays.asList( "/zxjp/open/v1/statusRefresh", "/zxjp/open/v1/getStoreUser", @@ -52,6 +58,8 @@ public class OpenApiValidateFilter implements Filter { "/zxjp/open/v1/getYlsToken", "/zxjp/open/v1/getStoreList", "/zxjp/open/v1/changeReceiptStatus", "/zxjp/open/v1/getStoreUser")); + // 添加钱包接口路径前缀常量 + private static final String WALLET_API_PATTERN = "^/zxjp/open/v\\d+/wallet/.*$"; @Override public void init(FilterConfig filterConfig) throws ServletException { } @@ -70,6 +78,12 @@ public class OpenApiValidateFilter implements Filter { filterChain.doFilter(servletRequest, response); return; } + // 针对钱包接口的专用验签处理 所有符合 /zxjp/open/v{版本号}/wallet/ 格式的接口都会走钱包专用的验签流程。 + if (uri.matches(WALLET_API_PATTERN)) { + handleWalletApiValidation(request, response, filterChain); + return; + } + HttpServletResponse res = (HttpServletResponse) response; // 1. 验证时间戳 try { @@ -185,4 +199,90 @@ public class OpenApiValidateFilter implements Filter { @Override public void destroy() { } + + + private void handleWalletApiValidation(HttpServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { + HttpServletResponse res = (HttpServletResponse) response; + + try { + // 读取请求体 + StringBuilder requestBody = new StringBuilder(); + try (BufferedReader reader = request.getReader()) { + String line; + while ((line = reader.readLine()) != null) { + requestBody.append(line); + } + } + + String jsonBody = requestBody.toString(); + + // 1. 验证时间戳 + String timestampStr = extractTimestampFromJson(jsonBody); + if (timestampStr == null) { + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "缺少timestamp参数"); + return; + } + + long timestamp = Long.parseLong(timestampStr); + long currentTime = System.currentTimeMillis() / 1000; + long timeDiff = Math.abs(currentTime - timestamp); + + if (timeDiff > 600) { + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "请求已过期,请保证timestamp时间在10分钟之内"); + return; + } + + // 2. 钱包接口专用验签逻辑 + if (!verifyWalletSignatureFromBody(jsonBody)) { + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "签名校验失败"); + return; + } + + filterChain.doFilter(request, response); + } catch (Exception e) { + log.error("钱包接口验签异常: ", e); + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "验签异常"); + } + } + + /** + * 从JSON中提取timestamp字段 + */ + private String extractTimestampFromJson(String jsonBody) { + try { + ObjectMapper objectMapper = new ObjectMapper(); + Map params = objectMapper.readValue(jsonBody, new TypeReference>() {}); + Object timestamp = params.get("timestamp"); + return timestamp != null ? timestamp.toString() : null; + } catch (Exception e) { + log.error("提取timestamp失败: ", e); + return null; + } + } + + /** + * 钱包接口签名验证方法 - 签名在请求体中 + */ + private boolean verifyWalletSignatureFromBody(String jsonBody) { + try { + // 解析请求参数 + ObjectMapper objectMapper = new ObjectMapper(); + Map params = objectMapper.readValue(jsonBody, new TypeReference>() {}); + + // 使用RsaSignUtil.verifyWalletSign进行验签 + return RsaSignUtil.verifySign(params, walletPublicKey); + } catch (Exception e) { + log.error("钱包接口签名验证失败: ", e); + return false; + } + } + + /** + * 写入错误响应 + */ + private void writeErrorResponse(HttpServletResponse response, ErrorCodeEnum errorCode, String message) throws IOException { + response.setStatus(HttpStatus.OK.value()); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(JSON.toJSONString(ApiResponse.fail(errorCode, message))); + } } \ No newline at end of file diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AccountTokenController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AccountTokenController.java new file mode 100644 index 000000000..17a557d78 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AccountTokenController.java @@ -0,0 +1,61 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.FoodTokenDTO; +import com.cool.store.dto.GetAccessTokenDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.PushService; +import com.cool.store.service.ThirdFoodService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/11/24 16:50 + * @Version 1.0 + */ +@RestController +@RequestMapping("/pc/token") +@Api(tags = "第三方平台token") +@Slf4j +public class AccountTokenController { + + + @Resource + PushService pushService; + + @Resource + ThirdFoodService thirdFoodService; + + @ApiOperation("获取云流水免登token") + @PostMapping("/getYlsToken") + public ResponseResult getYlsToken(@RequestBody @Validated GetAccessTokenDTO dto) { + return ResponseResult.success(pushService.getYlsToken(dto)); + } + + @ApiOperation("获取POS免登token") + @PostMapping("/getPosToken") + public ResponseResult getPosToken(@RequestBody @Validated GetAccessTokenDTO dto) { + return ResponseResult.success(pushService.getPosToken(dto)); + } + + @ApiOperation("获取新掌柜免登token") + @PostMapping("/getXzgToken") + public ResponseResult getXzgToken(@RequestBody @Validated GetAccessTokenDTO dto) { + return ResponseResult.success(pushService.getXzgToken(dto)); + } + + @ApiOperation("获取菜品市场token") + @PostMapping("/getFoodToken") + public ResponseResult getFoodToken(@RequestBody @Validated FoodTokenDTO dto) { + return ResponseResult.success(thirdFoodService.getFoodToken(dto)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContractConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContractConfigController.java new file mode 100644 index 000000000..7580972d2 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContractConfigController.java @@ -0,0 +1,59 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.contract.ContractConfigDTO; +import com.cool.store.dto.contract.ContractListDTO; +import com.cool.store.dto.contract.QueryContractListDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.ContractConfigService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.xml.ws.Response; + +/** + * @Author suzhuhong + * @Date 2025/9/9 10:03 + * @Version 1.0 + */ +@RestController +@RequestMapping("pc/contract") +@Api(tags = "PC-合同配置") +@Slf4j +public class ContractConfigController { + + + @Resource + private ContractConfigService contractConfigService; + + @PostMapping("/addContractConfig") + @ApiOperation("添加合同配置") + public ResponseResult addContractConfig(@RequestBody @Validated ContractConfigDTO addContractConfigDTO) { + return ResponseResult.success(contractConfigService.addContractConfig(addContractConfigDTO)); + } + + @PostMapping("/updateContractConfig") + @ApiOperation("更新合同配置") + public ResponseResult updateContractConfig(@RequestBody @Validated ContractConfigDTO addContractConfigDTO) { + return ResponseResult.success(contractConfigService.updateContractConfig(addContractConfigDTO)); + } + + @PostMapping("/queryContractConfigList") + @ApiOperation("合同配置列表") + public ResponseResult> queryContractConfigList(@RequestBody QueryContractListDTO queryContractListDTO) { + return ResponseResult.success(contractConfigService.queryContractConfigList(queryContractListDTO)); + } + + @GetMapping("/deleteContractConfig") + @ApiOperation("删除配置") + public ResponseResult deleteContractConfig(Long id) { + return ResponseResult.success(contractConfigService.deleteContractConfig(id)); + } + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java new file mode 100644 index 000000000..5b50c98cb --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java @@ -0,0 +1,76 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.dto.ShopSignerInfoDTO; +import com.cool.store.dto.decoration.DecorationListDTO; +import com.cool.store.dto.decoration.DecorationTeamDTO; +import com.cool.store.request.decoration.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.DecorationHandleService; +import com.github.pagehelper.PageInfo; +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; + +/** + * @Author suzhuhong + * @Date 2025/10/30 18:00 + * @Version 1.0 + */ +@RequestMapping("/pc/decoration") +@RestController +@Api(tags = "装修分配团队") +@Slf4j +public class DecorationAllocationController { + + @Resource + private DecorationHandleService decorationHandleService; + + + @PostMapping("/addTeam") + @ApiOperation("添加团队") + public ResponseResult addTeam(@RequestBody AddTeamRequest request){ + return ResponseResult.success(decorationHandleService.addTeam(request)); + } + + @PostMapping("/update") + @ApiOperation("修改团队") + public ResponseResult update(@RequestBody UpdateTeamRequest request){ + return ResponseResult.success(decorationHandleService.update(request)); + } + + @PostMapping("/deleteByTeamId") + @ApiOperation("删除团队") + public ResponseResult deleteByTeamId(@RequestBody DeletedRequest request){ + return ResponseResult.success(decorationHandleService.deleteByTeamId(request.getTeamId())); + } + + @PostMapping("/listByCondition") + @ApiOperation("查询团队") + public ResponseResult> listByCondition(@RequestBody PageBasicInfo pageBasicInfo){ + return ResponseResult.success(decorationHandleService.listByCondition(pageBasicInfo)); + } + + @PostMapping("/getDecorationAssignList") + @ApiOperation("装修分配列表/待办列表 查询待办时 分配状态传-0") + public ResponseResult> getDecorationAssignList(@RequestBody DecorationListRequest pageBasicInfo){ + return ResponseResult.success(decorationHandleService.getDecorationAssignList(pageBasicInfo)); + } + + @GetMapping("/getShopSignerInfo") + @ApiOperation("详情中获取签约人信息") + public ResponseResult getShopSignerInfo(@RequestParam("shopId") Long shopId){ + return ResponseResult.success(decorationHandleService.getShopSignerInfo(shopId)); + } + + @PostMapping("/confirm") + @ApiOperation("确认") + public ResponseResult updateConstructionTeam(@RequestBody UpdateConstructionTeamRequest request){ + return ResponseResult.success(decorationHandleService.updateConstructionTeam(request)); + } + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java index c44825039..d062235ff 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.context.PartnerUserHolder; import com.cool.store.dto.*; import com.cool.store.dto.store.StoreUserPositionDTO; +import com.cool.store.dto.wallet.PaymentDTO; import com.cool.store.dto.wx.MiniProgramFreeLoginDTO; import com.cool.store.handler.WeChatHandler; import com.cool.store.request.OpenApiStoreRequest; @@ -11,11 +12,15 @@ import com.cool.store.request.StoreCodeDTO; import com.cool.store.request.*; import com.cool.store.request.notice.ThirdHandleMessageRequest; import com.cool.store.request.notice.ThirdMatterRequest; +import com.cool.store.request.wallet.AccountTradeCallbackRequest; +import com.cool.store.request.wallet.AddTagCallbackNoticeRequest; +import com.cool.store.request.wallet.OnlineCommercialBankCallbackRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.request.xgj.ReceiptCallBackRequest; import com.cool.store.response.ResponseResult; import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.service.*; +import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.poi.StringUtils; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; @@ -57,6 +62,8 @@ public class OpenApiController { WechatMiniAppService wechatMiniAppService; @Autowired WeChatHandler weChatHandler; + @Resource + WalletService walletService; @PostMapping("/statusRefresh") public ApiResponse statusRefresh(@RequestBody StatusRefreshDTO statusRefreshDTO){ @@ -214,4 +221,29 @@ public class OpenApiController { } return echostr; } + + @ApiOperation("打标回调通知接口") + @PostMapping("/wallet/addTagCallback") + public ApiResponse addTagCallback(@RequestBody @Validated AddTagCallbackNoticeRequest request) { + return ApiResponse.successByWallet(walletService.addTagCallback(request)); + } + + @ApiOperation("大额充值通知接口") + @PostMapping("/wallet/largePaymentCallback") + public ApiResponse largePaymentCallback(@RequestBody @Validated PaymentDTO request) { + return ApiResponse.successByWallet(walletService.largePaymentCallback(request)); + } + + @ApiOperation("账户交易回调") + @PostMapping("/wallet/accountTradeCallback") + public ApiResponse accountTradeCallback(@RequestBody @Validated AccountTradeCallbackRequest request) { + return ApiResponse.successByWallet(walletService.accountTradeCallback(request)); + } + + @ApiOperation("网商银行通知接口") + @PostMapping("/wallet/onlineCommercialBankCallback") + public ApiResponse accountTradeCallback(@RequestBody @Validated OnlineCommercialBankCallbackRequest request) { + return ApiResponse.successByWallet(walletService.onlineCommercialBankCallback(request)); + } + } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCSignFranchiseController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCSignFranchiseController.java index f9fbdf693..a1193795a 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCSignFranchiseController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCSignFranchiseController.java @@ -55,6 +55,12 @@ public class PCSignFranchiseController { return ResponseResult.success(signFranchiseService.rePay(shopId)); } + @ApiOperation("回到缴费阶段") + @PostMapping("/backPayFeeStage") + public ResponseResult backPayFeeStage(@RequestBody @Validated AuditApproveRequest request) { + return ResponseResult.success(signFranchiseService.backPayFeeStage(request, CurrentUserHolder.getUser())); + } + @ApiOperation("数据处理,全部设置为新签") @GetMapping("/dateHandle") public ResponseResult dateHandle() { 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..3ddcb6d12 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 @@ -2,17 +2,15 @@ package com.cool.store.controller.webb; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; -import com.cool.store.constants.RedisConstant; import com.cool.store.dao.*; -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.*; +import com.cool.store.dto.contract.ContractCallbackDTO; +import com.cool.store.dto.*; import com.cool.store.dto.huoma.*; -import com.cool.store.dto.wechat.CallbackMessageDTO; -import com.cool.store.dto.wechat.WechatTemplateMessageDTO; +import com.cool.store.dto.wallet.*; import com.cool.store.entity.*; import com.cool.store.enums.DownSystemTypeEnum; +import com.cool.store.enums.FranchiseBrandEnum; import com.cool.store.enums.MessageEnum; import com.cool.store.enums.SMSMsgEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; @@ -20,13 +18,14 @@ import com.cool.store.enums.wechat.WechatTemplateEnum; import com.cool.store.handler.WeChatHandler; import com.cool.store.job.XxlJobHandler; import com.cool.store.mapper.FranchiseFeeMapper; -import com.cool.store.mapper.LineInfoMapper; import com.cool.store.mapper.ShopInfoMapper; +import com.cool.store.mapper.SignFranchiseMapper; import com.cool.store.mq.util.HttpRestTemplateService; import com.cool.store.request.*; import com.cool.store.request.bigdata.ProfitDataRequest; import com.cool.store.request.huoma.ShopBasicInfoRequest; import com.cool.store.request.oppty.*; +import com.cool.store.request.wallet.*; import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.response.ResponseResult; import com.cool.store.response.bigdata.ActDataResponse; @@ -39,26 +38,25 @@ import com.cool.store.response.oppty.OpportunityDetailResponse; import com.cool.store.response.oppty.OpportunityInfoPageResponse; import com.cool.store.service.*; 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.wallet.WalletApiService; 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; -import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.RsaSignUtil; import com.cool.store.utils.poi.StringUtils; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.*; -import java.util.stream.Collectors; @Slf4j @RestController @@ -109,6 +107,9 @@ public class PCTestController { LinePayService linePayService; @Resource LinePayDAO linePayDAO; + @Resource + SignFranchiseMapper signFranchiseMapper; + @Autowired WeChatHandler weChatHandler; @GetMapping("/syncStore") @@ -404,6 +405,44 @@ public class PCTestController { return ResponseResult.success(Boolean.TRUE); } + @GetMapping("/pushContract") + @ApiOperation("推送合同信息") + public ResponseResult pushContract(@RequestParam(value = "shopId", required = true) Long shopId) { + + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(shopId); + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); + SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); + + //自营店 无缴费信息 不需要校验 + if (franchiseFeeDO != null){ + ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); + contractInformationDTO.setShopId(shopId); + contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); + contractInformationDTO.setShopName(shopInfoDO.getShopName()); + //品牌信息 + contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); + contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); + contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + + FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); + if (enumByCode != null){ + contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); + contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); + } + try { + ContractCallbackDTO contractCallbackDTO = pushService.pushContract(contractInformationDTO); + log.info("推送合同信息回调:{}", JSONObject.toJSONString(contractCallbackDTO)); + } catch (Exception e) { + log.error("推送合同信息失败", e); + } + } + return ResponseResult.success(Boolean.TRUE); + } + @Resource ShopStageInfoDAO shopStageInfoDAO; @@ -638,4 +677,175 @@ public class PCTestController { return ResponseResult.success(publishStatus); } + + public static void main(String[] args) { + // 测试数据 + Map params = new HashMap<>(); + params.put("key", "370728957227141"); + params.put("status", 1); + params.put("addTagType", 1); + params.put("timestamp", "1763694267"); + params.put("outStoreId", "359c107b31c148b59fbe1c2562fdd096"); + + + String privateKey = "MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM="; + + String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB"; + + try { + // 1. 加签 + String sign = RsaSignUtil.generateSign(new HashMap<>(params), privateKey); + System.out.println("生成的签名: " + sign); + + // 2. 将签名放入参数中 + params.put("sign", sign); + + // 3. 验签 + boolean isValid = RsaSignUtil.verifySign(new HashMap<>(params), publicKey); + System.out.println("验签结果: " + isValid); + + // 4. 测试排序字符串生成 + String sortedString = RsaSignUtil.objectToSortedString(params); + System.out.println("排序后的字符串: " + sortedString); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + + @Resource + WalletApiService walletApiService; + + @ApiOperation("获取银行信息") + @PostMapping("/getBankList") + public ResponseResult getBankList(@RequestBody GetBankRequest request) { + BankListDTO bankList = walletApiService.getBankList(request); + return ResponseResult.success(bankList); + } + + @ApiOperation("签约人开通信息") + @PostMapping("/createStoreAndAccount") + public ResponseResult createStoreAndAccount(@RequestBody CreateStoreAndAccountRequest request) { + StoreAccountDTO dto = walletApiService.createStoreAndAccount(request); + return ResponseResult.success(dto); + } + + @ApiOperation("创建门店接口") + @PostMapping("/createStore") + public ResponseResult createStore(@RequestBody CreateStoreRequest request) { + AccountNoDTO accountNoDTO = walletApiService.createStore(request); + return ResponseResult.success(accountNoDTO); + } + + + @ApiOperation("打标接口") + @PostMapping("/addTag") + public ResponseResult addTag(@RequestBody AccountAddTagRequest request) { + AddTagDTO addTag = walletApiService.addTag(request); + return ResponseResult.success(addTag); + } + + @ApiOperation("门店签约人账户鉴权申请接口") + @PostMapping("/authentication") + public ResponseResult authentication(@RequestBody OutStoreIdRequest request) { + AccountAuthenticationDTO accountAuthenticationDTO = walletApiService.authentication(request); + return ResponseResult.success(accountAuthenticationDTO); + } + + @ApiOperation("门店签约人账户开通接口") + @PostMapping("/openAccount") + public ResponseResult openAccount(@RequestBody AccountVerifyRequest request) { + AccountVerifyDTO accountVerifyDTO = walletApiService.openAccount(request); + return ResponseResult.success(accountVerifyDTO); + } + + @ApiOperation("获取账户信息") + @PostMapping("/getAccountInfo") + public ResponseResult> getAccountInfo(@RequestBody OutStoreIdRequest request) { + List accountInfoList = walletApiService.getAccountInfo(request); + return ResponseResult.success(accountInfoList); + } + + @ApiOperation("大额预支付接口") + @PostMapping("/largePayment") + public ResponseResult largePayment(@RequestBody LargePaymentRequest request) { + LargePaymentDTO largePayment = walletApiService.largePayment(request); + return ResponseResult.success(largePayment); + } + + @ApiOperation("大额预支付查询接口") + @PostMapping("/largePaymentQuery") + public ResponseResult largePaymentQuery(@RequestBody PaymentDetailRequest request) { + PaymentDTO PaymentDTO = walletApiService.largePaymentQuery(request); + return ResponseResult.success(PaymentDTO); + } + + @ApiOperation("门店账户向公司分账转账接口") + @PostMapping("/transfer") + public ResponseResult transfer(@RequestBody TransferRequest request) { + TransferDTO transfer = walletApiService.transfer(request); + return ResponseResult.success(transfer); + } + + @ApiOperation("门店签约账户,退款提现至提现卡") + @PostMapping("/withdraw") + public ResponseResult withdraw(@RequestBody WithDrawerRequest request) { + WithDrawerDTO withdraw = walletApiService.withdraw(request); + return ResponseResult.success(withdraw); + } + + @ApiOperation(" 获取账单详情") + @PostMapping("/getBillDetail") + public ResponseResult getBillDetail(@RequestBody BillDetailRequest request) { + TradeRecordDTO billDetail = walletApiService.getBillDetail(request); + return ResponseResult.success(billDetail); + } + + @ApiOperation("获取账单列表") + @PostMapping("/getBillPage") + public ResponseResult getBillPage(@RequestBody BillPageRequest request) { + BillPageDTO billPage = walletApiService.getBillPage(request); + return ResponseResult.success(billPage); + } + + @ApiOperation("获取银行信息") + @PostMapping("/getCompanyInfo") + public ResponseResult getCompanyInfo(@RequestBody FindPageCompanyRequest request) { + CompanyListDTO companyDTO = walletApiService.getCompanyInfo(request); + return ResponseResult.success(companyDTO); + } + + + @ApiOperation("获取账户列表信息") + @PostMapping("/getAccountList") + public ResponseResult getAccountList(@RequestBody AccountBatchQueryRequest request) { + AccountPageDTO accountList = walletApiService.getAccountList(request); + return ResponseResult.success(accountList); + } + + + + @Value("${cool.api.rsa.private.key}") + private String coolPrivateKey; + @Value("${cool.api.rsa.public.key}") + private String coolPublicKey; + @ApiOperation("验签") + @PostMapping("/verify") + public ResponseResult test(@RequestBody TestVerifyRequest request) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + Map params = objectMapper.readValue(JSONObject.toJSONString(request), new TypeReference>() {}); + String s = RsaSignUtil.generateSign(params, coolPrivateKey); + params.put("sign",s); + boolean b = RsaSignUtil.verifySign(params, coolPublicKey); + log.info("验签结果:{}",b); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + return ResponseResult.success(Boolean.TRUE); + } + + + } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java new file mode 100644 index 000000000..a489ca900 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java @@ -0,0 +1,71 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.wallet.AccountInfoDTO; +import com.cool.store.dto.wallet.BillDetailDTO; +import com.cool.store.dto.wallet.TradeRecordDTO; +import com.cool.store.request.wallet.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.wallet.WalletService; +import com.cool.store.vo.wallet.AccountBillPageVO; +import com.cool.store.vo.wallet.AccountInfoVO; +import com.cool.store.vo.wallet.AccountPageVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 钱包 前端控制器 + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Api(tags = "钱包") +@RestController +@RequestMapping("/pc/wallet") +@RequiredArgsConstructor +public class WalletController { + private final WalletService walletService; + + @ApiOperation("账户列表") + @GetMapping("/accountList") + public ResponseResult> getAccountList(AccountQueryRequest request) { + return ResponseResult.success(walletService.getAccountList(request).getAccountList()); + } + + @ApiOperation("账户详情") + @PostMapping("/accountInfo") + public ResponseResult getAccountInfo(@RequestBody AccountQueryRequest request) { + return ResponseResult.success(walletService.getAccountInfo(request)); + } + + @ApiOperation("分页查询所有门店账户列表 支持条件查询") + @PostMapping("/getAllAccountList") + public ResponseResult> getAllAccountList(@RequestBody CoolAccountBatchQueryRequest request) { + return ResponseResult.success(walletService.getAllAccountList(request)); + } + + @ApiOperation("分页查询所有流水列表 支持条件查询") + @PostMapping("/getTradeRecordList") + public ResponseResult> getTradeRecordList(@RequestBody CoolTradeRecodePageRequest request) { + return ResponseResult.success(walletService.getTradeRecordList(request)); + } + + @ApiOperation("账户流水") + @PostMapping("/billPage") + public ResponseResult> getBillPage(@RequestBody @Validated AccountBillQueryRequest request) { + return ResponseResult.success(walletService.getBillPage(request).getData()); + } + + @ApiOperation("交易流水详情") + @GetMapping("/billDetail") + public ResponseResult getBillDetail(BillDetailRequest request) { + return ResponseResult.success(walletService.getBillDetail(request)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java new file mode 100644 index 000000000..c59d49f12 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -0,0 +1,145 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.wallet.OpenBasicInfoDTO; +import com.cool.store.dto.wallet.PasswordDTO; +import com.cool.store.dto.wallet.TradeRecordDTO; +import com.cool.store.request.wallet.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.wallet.WalletService; +import com.cool.store.vo.wallet.*; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotBlank; + +/** + *

+ * Mini钱包 前端控制器 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Api(tags = "Mini钱包") +@RestController +@RequestMapping("/mini/wallet") +@RequiredArgsConstructor +@Validated +public class MiniWalletController { + private final WalletService walletService; + + @ApiOperation("步骤1:平安银行钱包账号创建") + @PostMapping("/accountCreate") + public ResponseResult accountCreate(@RequestBody @Validated AccountCreateRequest request) { + return ResponseResult.success(walletService.accountCreate(request)); + } + + @ApiOperation("步骤2:鉴权申请") + @PostMapping("/authentication") + public ResponseResult authentication(@RequestBody @Validated WalletShopRequest request) { + return ResponseResult.success(walletService.authentication(request)); + } + + @ApiOperation("步骤3:账号开通(步骤2接口返回4时无需调用)") + @PostMapping("/openAccount") + public ResponseResult openAccount(@RequestBody @Validated AccountOpenRequest request) { + return ResponseResult.success(walletService.openAccount(request)); + } + + @ApiOperation("支行信息查询") + @PostMapping("/bankList") + public ResponseResult> getBankList(@RequestBody BankListRequest request) { + return ResponseResult.success(walletService.getBankList(request)); + } + + @ApiOperation("账户列表") + @GetMapping("/accountList") + public ResponseResult getAccountList(AccountQueryRequest request) { + return ResponseResult.success(walletService.getAccountList(request)); + } + + @ApiOperation("账户详情") + @PostMapping("/accountInfo") + public ResponseResult getAccountInfo(@RequestBody AccountQueryRequest request) { + return ResponseResult.success(walletService.getAccountInfo(request)); + } + + @ApiOperation("账户流水") + @PostMapping("/billPage") + public ResponseResult getBillPage(@RequestBody @Validated AccountBillQueryRequest request) { + return ResponseResult.success(walletService.getBillPage(request)); + } + + @ApiOperation("交易流水详情") + @GetMapping("/billDetail") + public ResponseResult getBillDetail(BillDetailRequest request) { + return ResponseResult.success(walletService.getBillDetail(request)); + } + + @ApiOperation("密码维护") + @PostMapping("/passwordUpdate") + public ResponseResult passwordUpdate(@RequestBody @Validated AccountPasswordRequest request) { + return ResponseResult.success(walletService.passwordUpdate(request)); + } + + @ApiOperation("门店是否存在密码") + @PostMapping("/existPwd") + public ResponseResult passwordUpdate(@RequestBody @Validated OutStoreIdRequest request) { + return ResponseResult.success(walletService.existPassword(request)); + } + + + + @ApiOperation("账户充值") + @PostMapping("/payment") + public ResponseResult payment(@RequestBody @Validated AccountPaymentRequest request) { + return ResponseResult.success(walletService.payment(request)); + } + + @ApiOperation("未支付充值订单分页查询") + @GetMapping("/nonPaymentPage") + public ResponseResult> nonPaymentPage(LargePaymentQueryRequest request) { + return ResponseResult.success(walletService.nonPaymentOrderPage(request)); + } + + @ApiOperation("根据预支付id查询收款账户详情") + @GetMapping("/paymentDetail") + public ResponseResult paymentDetail(@NotBlank(message = "预支付id不能为空") String paymentId) { + return ResponseResult.success(walletService.paymentDetail(paymentId)); + } + + @ApiOperation("提现") + @PostMapping("/withDrawer") + public ResponseResult withDrawer(@RequestBody @Validated WalletWithDrawerRequest request) { + return ResponseResult.success(walletService.withDrawer(request)); + } + @ApiOperation("根据门店编码查询开通基础信息") + @GetMapping("/getOpenBasicInfo") + @ApiImplicitParams({ + @ApiImplicitParam(name = "storeId", value = "门店id", required = true, dataType = "String"), + @ApiImplicitParam(name = "storeCode", value = "门店编号", required = true, dataType = "String"), + }) + public ResponseResult getOpenBasicInfo(@NotBlank(message = "门店id不能为空") String storeId, + @NotBlank(message = "门店编码不能为空") String storeCode) { + return ResponseResult.success(walletService.getOpenBasicInfo(storeId, storeCode)); + } + + @ApiOperation("提交开通") + @PostMapping("/openOnlineBankAccount") + public ResponseResult openOnlineBankAccount(@RequestBody @Validated CoolOpenBasicInfoRequest request) { + return ResponseResult.success(walletService.openOnlineBankAccount(request)); + } + + + @ApiOperation("网商账户激活") + @PostMapping("/onlineBankActive") + public ResponseResult onlineBankActive(@RequestBody @Validated StoreShopRequest request) { + return ResponseResult.success(walletService.onlineBankActive(request)); + } +} 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 5d56f85f0..61bad4ad0 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 @@ -7,6 +7,7 @@ import com.cool.store.dto.OpenCityDTO; import com.cool.store.dto.ocr.InvoiceDTO; import com.cool.store.dto.store.StoreUserPositionDTO; import com.cool.store.dto.store.StoreUserUpdateDTO; +import com.cool.store.dto.wallet.OpenBasicInfoDTO; import com.cool.store.entity.*; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.IDCardSideEnum; @@ -19,6 +20,7 @@ import com.cool.store.exception.ServiceException; import com.cool.store.job.XxlJobHandler; import com.cool.store.mapper.HyOpenAreaInfoMapper; import com.cool.store.request.ShopListSuccessOpenRequest; +import com.cool.store.request.wallet.CoolOpenBasicInfoRequest; import com.cool.store.request.xfsgFirstOrderListRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.request.xgj.ReceiptCallBackRequest; @@ -27,6 +29,7 @@ import com.cool.store.response.ResponseResult; import com.cool.store.response.caipin.StoreUserResponse; import com.cool.store.response.xfsgFirstOderListResponse; import com.cool.store.service.*; +import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.poi.ExcelUtil; import com.cool.store.utils.poi.StringUtils; import com.cool.store.vo.RegionPathNameVO; @@ -40,6 +43,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.validation.constraints.NotBlank; import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.time.LocalDate; @@ -393,4 +397,18 @@ public class TestController { List storeUserUpdateDTOS = JSONObject.parseArray(JSONObject.toJSONString(storeUser), StoreUserUpdateDTO.class); StoreUserResponse storeUserResponse = thirdFoodService.pushStoreUser(storeUserUpdateDTOS); } + + @Resource + WalletService walletService; + @ApiOperation("根据门店编码查询开通基础信息") + @GetMapping("/getOpenBasicInfo") + public ResponseResult getOpenBasicInfo(@NotBlank(message = "门店编码不能为空") String storeCode) { + return ResponseResult.success(walletService.getOpenBasicInfo(null, storeCode)); + } + + @ApiOperation("提交开通") + @PostMapping("/openOnlineBankAccount") + public ResponseResult openOnlineBankAccount(@RequestBody @Validated CoolOpenBasicInfoRequest request) { + return ResponseResult.success(walletService.openOnlineBankAccount(request)); + } } diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index b9fa41e38..ba49de141 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -157,3 +157,8 @@ huoMa.franchise.stores.password = Huoma@123456. huoMa.restaurant.stores.account = 15167817007 huoMa.restaurant.stores.password = Huoma@123456. +wallet.url=https://api.dev.wenmatech.com:443 +wallet.api.yzt.key=360155690205317 +cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= +cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB +wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-local.properties b/coolstore-partner-web/src/main/resources/application-local.properties index 087420e81..43af7137a 100644 --- a/coolstore-partner-web/src/main/resources/application-local.properties +++ b/coolstore-partner-web/src/main/resources/application-local.properties @@ -141,4 +141,10 @@ hqt.token.url=https://tc.cloud.hecom.cn hqt.token.username=18161486722 hqt.token.grant_type=client_credentials hqt.token.client.id=WrPffdGpcWkcPsbN -hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD \ No newline at end of file +hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD + +wallet.url=https://api.dev.wenmatech.com:443 +wallet.api.yzt.key=360155690205317 +cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= +cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB +wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/application-online.properties b/coolstore-partner-web/src/main/resources/application-online.properties index 8e0948fe6..faea71843 100644 --- a/coolstore-partner-web/src/main/resources/application-online.properties +++ b/coolstore-partner-web/src/main/resources/application-online.properties @@ -158,4 +158,11 @@ 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 +huoMa.restaurant.stores.password = Huoma@123456. + + +wallet.url=https://zhengxin.wenmatech.com +wallet.api.yzt.key=375393764171845 +cool.api.rsa.private.key=MIIEoQIBAAKCAQEAleyT39qxm9Vi4d3f/pF4yI3EATtLlP870dFfk5Rwj1MEM4OVTUeoBrld5GwTARQYzuyZETTZPh9taFCVtLFVsQv4waTqDf/7vnfBbvrTZ2mvZv6H/M6BTQnTx5UmOIP1RsA933ce7v/hmG/DlMaHU3JVC840Ae1q7uJZ2yA6+r6aAGdTGMSH4oQ+U9omJOJbgbuti9DsBuGDDKZ1uMhrWW/l4El5y2Qdu/71wIQuI08kPegmuGl4+FLRJ2OnoGsp+BRXKpFbN0fq0YwPQhjzSHsKg64qimmzRRr5Ewd+4w1/27dJ6mopQd4zvf7+VQ4wEZgATTe/hjBw1njOOBD/WQIDAQABAoIBACSFU0ZSEzbXRbWoo0JzdF1Cb28vXwuGGy/S1XnxTHQVcG4ODSYcoPk2WYFltEFsgFiTuPvAiHUCGdgx3S39jtbIiEm/nwZXB5+Ps46RykKkM4ae1UiHk2bNUIoLMprMxkh8VvYjIeVtbqp/+0A4FkoFDWOJURDxIT3c5K+ky8k9mKz59SiOkNoiayPQTEjzZPgKSsT64286PGmE9v4BlpyxQ1bLXeZaQGAkQ7YVtU5XJgbMM86hgmFlTcHVMGeMoQvJTfcsLlRg8ucX/zzBTHR7fZP6i5OJl5CYLbzHbTyHN9KRYDYv066SvbGLNa+4NO2cY+L6NehiwAkkFxSGKkMCgYEAoVgEjOqLyL1CpeaW7ckWQSbcae0a6J61b6meCkRaKrwcWi7ut9OfmvkCae2qsMsHQlitFM8blrnhtJxMt3EhWKYHI1seZto6YR0mzEEz5IVM3OStIZN7RY4Fg6AyB0C5Gure3GgGHaSs5J8AbCpJyLjTWuOdcnThgHHe4Mw2dGsCgYEA7eF0TpAbdYn8xjqNEgeRSSXYpwtRQ1zrpH0b1KQBxx/fvoZPzWG0SYIi6eYV5bxV5EDnCKlXXFD3ztMfThPFUGt8hHAG6CKpsiVNvYDVhAzXN18JQJtRQRO/4S0f42C8os87ToL1nlM83c8hegrsGO+JnoTzKf8KkpYqTNrvrEsCf1HuYGEuuc02TqHwdrRJaQOsuEESJpf6ACiz+Y09KIyK+drR+mdfD62ixZcFGaitcQJABaSLh3cC7ZrJxCtjR4u8w+MwYj/Ykcy/APS4J6HkDyQc+84RFog7lpFAyCbmtxj0LDfAm1pyRVnTZGOJFe7X7Hw7GbkFoX2YVZXSHdUCgYEA6rCuYPxIOxSicKg/mfQhYLuYHmZKDF3WlnhgRtBweJZ31q8IeKbWild8PqukGv5O910ZEzCPYiL3+fPNROi4mPkS5k7oYYohRgMLydUb0qYghx6aMEWMStpDStOMTHaaZT5zUqhdz5Br0qKScqfn+0oIyn58sYhQVAMXRLAUGjUCgYAYiuiTme9S9gSt1pZrDbPxXlbVm6PjlkP/OKrmBj5gq8iYeKzmYKp66UKFo6ZeeRcKiXLWdQS0i0rKBPux8kmfIwbrfbuYAVGE0GmUdEMNsBQvEjxpwo3afyB5F70tdnm4EBo0qeqJxuBK8DLpBFka2yfzEo/3Z6i0X/XqIwq/7A== +cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAleyT39qxm9Vi4d3f/pF4yI3EATtLlP870dFfk5Rwj1MEM4OVTUeoBrld5GwTARQYzuyZETTZPh9taFCVtLFVsQv4waTqDf/7vnfBbvrTZ2mvZv6H/M6BTQnTx5UmOIP1RsA933ce7v/hmG/DlMaHU3JVC840Ae1q7uJZ2yA6+r6aAGdTGMSH4oQ+U9omJOJbgbuti9DsBuGDDKZ1uMhrWW/l4El5y2Qdu/71wIQuI08kPegmuGl4+FLRJ2OnoGsp+BRXKpFbN0fq0YwPQhjzSHsKg64qimmzRRr5Ewd+4w1/27dJ6mopQd4zvf7+VQ4wEZgATTe/hjBw1njOOBD/WQIDAQAB +wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index c217e17df..e4ab053cd 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -169,3 +169,9 @@ huoMa.franchise.stores.account = 13345565081 huoMa.franchise.stores.password = Huoma@123456. huoMa.restaurant.stores.account = 15167817007 huoMa.restaurant.stores.password = Huoma@123456. + +wallet.url=https://api.dev.wenmatech.com:443 +wallet.api.yzt.key=360155690205317 +cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= +cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB +wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB \ No newline at end of file diff --git a/pom.xml b/pom.xml index f3901d5b8..7ee22a7a9 100644 --- a/pom.xml +++ b/pom.xml @@ -232,6 +232,11 @@ alibabacloud-dysmsapi20170525 2.0.24
+ + org.bouncycastle + bcprov-jdk15on + 1.70 +