From 489d72f06f24ddc9240ffc8d955561f9cfe7d107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=A3=E6=96=B0?= Date: Tue, 10 Mar 2026 14:13:03 +0000 Subject: [PATCH] Merge #52 into master from cc_20260121_store_type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge branch 'cc_20260126_pingan_wallet' into cc_20260121_store_type * cc_20260121_store_type: (100 commits squashed) - Merge branch 'master' into cc_20251208_visit - feat:订单列表 - feat:订单列表 - fix:拜访记录导出 - feat:列表处理 - Merge branch 'cc_20251208_visit' into cc_20260121_store_type # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java - feat:标准店接口处理 - feat:标准店接口处理 - feat:标准店接口处理 - feat:标准店接口处理 - feat:标准店接口处理 - fix:加盟缴费调整 - feat:标准店接口处理 - fix:加盟缴费调整 - Merge branch 'cc_20260126_pingan_wallet' into cc_20260121_store_type # Conflicts: # coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BatchTransferDTO.java # coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BatchTransferRequest.java - feat:冲突解决 - feat:接口处理 - feat:shopInfo - fix:PC缴费信息列表过滤已完成缴费信息 - fix:测试接口修改 - Merge branch 'refs/heads/cc_20260126_pingan_wallet' into cc_20260121_store_type - fix:测试接口修改 - feat:接口 - feat:接口调整 - feat:注释调整 - feat:key 调整 - feat:订单ID - feat:日志打印 - feat:选择标准店型 - feat:useStandardStore - feat:标准店没有缴费阶段 - feat:标准店没有缴费阶段 - feat:标准店没有缴费阶段 - feat:标准店没有缴费阶段 - feat:阶段调整 - fix:修复加盟缴费流程流转错误 - feat:费用类型ID - feat:锁释放 - feat:分账状态 - fix:加盟签约合同数据补充 - feat:排序 - feat:选项单位 - feat:选项单位 - feat:选项单位 - feat:选项单位 - feat:option_unit - feat:option_unit - feat:更新调整 - feat:视频非必填 - feat:optionUnit - fix:转义 - Merge branch 'master' into cc_20260126_pingan_wallet # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java - feat:同一配置项下只能设置一个默认选项 - feat:数量支持小数,新增首次订货字段 - fix:提交及修改校验合计缴费金额和分账总金额是否相同 - feat:queryPage - feat:defaultQuantity 改为 BigDecimal - feat:defaultQuantity 改为 BigDecimal - feat:门店预约到店 - feat:门店预约到店 取消预约 - feat:门店预约到店 手机号 - feat:添加原价 - feat:添加原价 - feat:添加原价 - feat:字典表 remark - Merge branch 'master' into cc_20260121_store_type # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java # coolstore-partner-common/src/main/java/com/cool/store/enums/FileTypeEnum.java # coolstore-partner-model/src/main/java/com/cool/store/vo/dict/DictColumnSimpleVO.java # coolstore-partner-service/src/main/java/com/cool/store/service/ExportRealizeService.java # coolstore-partner-service/src/main/java/com/cool/store/service/ExportService.java # coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportRealizeServiceImpl.java # coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportServiceImpl.java # coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ExportController.java - feat:字典表 remark - feat:服务人员手机号 - feat:价格计算调整店型优惠价*默认数量 + 原价 *(选择数量-默认数量) - fix:补充钱包账单推送新管家流程 - fix:账单推送钱包支付类型payWay由1改为2 - feat:同一配置项下只能设置一个默认选项 限制去掉 - fix:平安钱包分账信息改为非必填 - feat:同一配置项只能选择一个选项 限制去掉 - feat:心愿单 - feat:心愿单 - feat:心愿单接口调整 - feat:心愿单接口调整 - feat:心愿单接口调整 - feat:批量更新数据 - feat:查询店型已配置的选项绑定 新增顶部预览图 - feat:查询店型已配置的选项绑定 新增顶部预览图 - feat:查询店型已配置的选项绑定 新增顶部预览图 - feat:配置大类 - feat:配置大类 - feat:价格优化 - feat:阶段审批处理 - fix:删除设计费-立规 - feat:配置大项 配置项接口改造 - feat:配置大项 配置项接口改造 - feat:handleAudit - feat:新增code - feat:categoryId - feat:心愿单接口更新 - feat:心愿单接口更新 - feat:心愿单接口更新 - feat:心愿单接口更新 - feat:心愿单接口更新 - Merge branch 'cc_20260126_pingan_wallet' into cc_20260121_store_type # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java - Merge branch 'master' into cc_20260121_store_type # Conflicts: # coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java Signed-off-by: 正新 Merged-by: 正新 CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/52 --- .../com/cool/store/common/PageBasicInfo.java | 1 + .../cool/store/constants/DictConstants.java | 20 + .../cool/store/constants/RedisConstant.java | 14 +- .../com/cool/store/enums/AuditTypeEnum.java | 1 + .../cool/store/enums/BusinessModuleEnum.java | 31 + .../com/cool/store/enums/ErrorCodeEnum.java | 55 +- .../com/cool/store/enums/FileTypeEnum.java | 1 + .../com/cool/store/enums/StoreTypeEnum.java | 4 +- .../cool/store/enums/dict/DictTableEnum.java | 33 + .../enums/fees/AllocationPayStatusEnum.java | 36 + .../cool/store/enums/fees/PayTypeEnum.java | 25 + .../store/enums/fees/WalletFeeItemEnum.java | 50 + .../enums/order/StoreOrderStatusEnum.java | 56 + .../store/enums/point/ShopSubStageEnum.java | 34 +- .../enums/point/ShopSubStageStatusEnum.java | 10 + .../StoreVisitReservationStatusEnum.java | 32 + .../enums/wallet/WalletTradeModuleEnum.java | 34 + .../java/com/cool/store/utils/CommonUtil.java | 8 + .../com/cool/store/utils/GenerateNoUtil.java | 25 + .../java/com/cool/store/utils/RedisUtil.java | 20 + .../com/cool/store/dao/FranchiseFeeDAO.java | 13 + .../com/cool/store/dao/ShopStageInfoDAO.java | 20 +- .../dao/config/ConfigItemCategoryDAO.java | 99 ++ .../cool/store/dao/config/ConfigItemDAO.java | 107 ++ .../store/dao/config/ConfigOptionDAO.java | 101 ++ .../store/dao/fees/FeeStandardConfigDAO.java | 73 + .../store/dao/fees/PayeeBankConfigDAO.java | 97 ++ .../store/dao/fees/ShopAllocationInfoDAO.java | 63 + .../dao/fees/WalletAllocationCompanyDAO.java | 90 + .../dao/fees/WalletAllocationConfigDAO.java | 106 ++ .../cool/store/dao/fees/WalletPayInfoDAO.java | 128 ++ .../store/dao/modify/ModifyRecordDAO.java | 48 + .../dao/order/PreAllocationRecordDAO.java | 55 + .../cool/store/dao/order/StoreOrderDAO.java | 73 + .../order/StoreOrderOptionSnapshotDAO.java | 54 + .../store/dao/order/StoreWishlistDAO.java | 53 + .../cool/store/dao/store/StoreTypeDAO.java | 119 ++ .../store/dao/store/StoreTypeOptionDAO.java | 69 + .../dao/visit/StoreVisitReservationDAO.java | 49 + .../cool/store/dao/wallet/WalletTradeDAO.java | 59 + .../config/ConfigItemCategoryMapper.java | 18 + .../store/mapper/config/ConfigItemMapper.java | 22 + .../mapper/config/ConfigOptionMapper.java | 12 + .../mapper/fees/FeeStandardConfigMapper.java | 7 + .../mapper/fees/PayeeBankConfigMapper.java | 7 + .../mapper/fees/ShopAllocationInfoMapper.java | 20 + .../fees/WalletAllocationCompanyMapper.java | 14 + .../fees/WalletAllocationConfigMapper.java | 7 + .../mapper/fees/WalletPayInfoMapper.java | 15 + .../mapper/modify/ModifyRecordMapper.java | 7 + .../order/PreAllocationRecordMapper.java | 28 + .../store/mapper/order/StoreOrderMapper.java | 41 + .../order/StoreOrderOptionSnapshotMapper.java | 18 + .../mapper/order/StoreWishlistMapper.java | 26 + .../store/mapper/store/StoreTypeMapper.java | 16 + .../mapper/store/StoreTypeOptionMapper.java | 15 + .../visit/StoreVisitReservationMapper.java | 14 + .../mapper/wallet/WalletTradeMapper.java | 15 + .../main/resources/mapper/LineInfoMapper.xml | 13 +- .../main/resources/mapper/ShopInfoMapper.xml | 7 +- .../config/ConfigItemCategoryMapper.xml | 61 + .../mapper/config/ConfigItemMapper.xml | 84 + .../mapper/config/ConfigOptionMapper.xml | 42 + .../mapper/fees/FeeStandardConfigMapper.xml | 15 + .../mapper/fees/PayeeBankConfigMapper.xml | 19 + .../mapper/fees/ShopAllocationInfoMapper.xml | 98 ++ .../fees/WalletAllocationCompanyMapper.xml | 23 + .../fees/WalletAllocationConfigMapper.xml | 15 + .../mapper/fees/WalletPayInfoMapper.xml | 70 + .../mapper/modify/ModifyRecordMapper.xml | 14 + .../order/PreAllocationRecordMapper.xml | 95 ++ .../mapper/order/StoreOrderMapper.xml | 221 +++ .../order/StoreOrderOptionSnapshotMapper.xml | 106 ++ .../mapper/order/StoreWishlistMapper.xml | 63 + .../mapper/store/StoreTypeMapper.xml | 74 + .../mapper/store/StoreTypeOptionMapper.xml | 40 + .../visit/StoreVisitReservationMapper.xml | 42 + .../mapper/wallet/WalletTradeMapper.xml | 66 + .../cool/store/dto/ExportBranchShopDTO.java | 1 + .../store/dto/Preparation/PreparationDTO.java | 2 + .../dto/standardStore/StoreOrderDTO.java | 48 + .../store/dto/wallet/BatchTransferDTO.java | 41 + .../com/cool/store/dto/wallet/CompanyDTO.java | 3 - .../com/cool/store/entity/FranchiseFeeDO.java | 7 + .../com/cool/store/entity/LineInfoDO.java | 4 + .../com/cool/store/entity/ShopInfoDO.java | 3 + .../entity/config/ConfigItemCategoryDO.java | 52 + .../store/entity/config/ConfigItemDO.java | 53 + .../store/entity/config/ConfigOptionDO.java | 75 + .../entity/fees/FeeStandardConfigDO.java | 50 + .../store/entity/fees/PayeeBankConfigDO.java | 80 + .../entity/fees/ShopAllocationInfoDO.java | 91 + .../fees/WalletAllocationCompanyDO.java | 50 + .../entity/fees/WalletAllocationConfigDO.java | 50 + .../store/entity/fees/WalletPayInfoDO.java | 132 ++ .../store/entity/modify/ModifyRecordDO.java | 47 + .../entity/order/PreAllocationRecordDO.java | 56 + .../cool/store/entity/order/StoreOrderDO.java | 134 ++ .../order/StoreOrderOptionSnapshotDO.java | 80 + .../store/entity/order/StoreWishlistDO.java | 53 + .../cool/store/entity/store/StoreTypeDO.java | 129 ++ .../store/entity/store/StoreTypeOptionDO.java | 65 + .../entity/visit/StoreVisitReservationDO.java | 63 + .../store/entity/wallet/WalletTradeDO.java | 88 + .../store/request/AddBranchShopRequest.java | 4 + .../store/request/FranchiseFeeRequest.java | 8 +- .../FranchisePayTypeUpdateRequest.java | 25 + .../store/request/JoinIntentionRequest.java | 5 + .../ConfigItemCategoryQueryRequest.java | 15 + .../ConfigItemCategoryUpdateRequest.java | 40 + .../config/ConfigItemQueryRequest.java | 21 + .../config/ConfigItemUpdateRequest.java | 38 + .../config/ConfigOptionQueryRequest.java | 21 + .../config/ConfigOptionTreeQueryRequest.java | 17 + .../config/ConfigOptionUpdateRequest.java | 57 + .../fees/FeeStandardConfigAddRequest.java | 36 + .../fees/FeeStandardConfigPageRequest.java | 22 + .../fees/PayeeBankConfigAddRequest.java | 53 + .../fees/PayeeBankConfigPageRequest.java | 24 + .../fees/ShopAllocationInfoRequest.java | 40 + .../fees/WalletAllocationCompanyRequest.java | 25 + .../WalletAllocationConfigAddRequest.java | 39 + .../WalletAllocationConfigPageRequest.java | 26 + .../request/fees/WalletCancelPayRequest.java | 21 + .../fees/WalletCompanyQueryRequest.java | 22 + .../store/request/fees/WalletPayRequest.java | 40 + .../request/fees/WalletRepayRequest.java | 26 + .../order/MiniStoreOrderCreateRequest.java | 34 + .../order/MiniStoreOrderLineQueryRequest.java | 15 + .../order/MiniStoreOrderPayRequest.java | 29 + .../order/MiniStoreOrderQueryRequest.java | 15 + .../request/order/MiniStoreOrderRequest.java | 17 + .../order/MiniStoreOrderUpdateRequest.java | 28 + .../order/MiniStoreWishlistDelRequest.java | 26 + .../order/MiniStoreWishlistListRequest.java | 11 + .../order/MiniStoreWishlistSaveRequest.java | 33 + .../order/OrderAuditRecordRequest.java | 26 + ...StoreOrderOptionQuantityUpdateRequest.java | 35 + .../order/PCStoreOrderQueryRequest.java | 44 + .../store/PreAllocationQueryShopRequest.java | 18 + .../store/PreAllocationSaveRequest.java | 37 + .../request/store/StoreOrderQueryRequest.java | 46 + .../store/StoreTypeOptionQueryRequest.java | 13 + .../store/StoreTypeOptionSaveRequest.java | 56 + .../request/store/StoreTypeQueryRequest.java | 21 + .../request/store/StoreTypeUpdateRequest.java | 85 + ...toreVisitReservationAdminQueryRequest.java | 29 + ...eVisitReservationAssignServiceRequest.java | 19 + .../StoreVisitReservationCancelRequest.java | 19 + .../StoreVisitReservationCreateRequest.java | 38 + .../visit/StoreVisitReservationIdRequest.java | 14 + .../StoreVisitReservationMyQueryRequest.java | 14 + .../request/wallet/BatchTransferRequest.java | 48 + .../request/xgj/ReceiptCallBackRequest.java | 5 + .../store/request/xgj/ReceiptRequest.java | 14 + .../response/BranchShopDetailResponse.java | 2 + .../store/response/BranchShopResponse.java | 3 + .../store/response/FranchiseFeeResponse.java | 21 +- .../store/vo/config/ConfigItemBaseInfoVO.java | 17 + .../config/ConfigItemCategoryBaseInfoVO.java | 20 + .../store/vo/config/ConfigItemCategoryVO.java | 31 + .../cool/store/vo/config/ConfigItemVO.java | 23 + .../store/vo/config/ConfigOptionTreeVO.java | 33 + .../cool/store/vo/config/ConfigOptionVO.java | 26 + .../store/vo/dict/DictColumnSimpleVO.java | 4 + .../store/vo/fees/FeeStandardConfigVO.java | 50 + .../store/vo/fees/InvestDivisionRegionVO.java | 25 + .../vo/fees/PayeeBankConfigSimpleVO.java | 27 + .../cool/store/vo/fees/PayeeBankConfigVO.java | 61 + .../store/vo/fees/ShopAllocationInfoVO.java | 43 + .../store/vo/fees/ShopAllocationSimpleVO.java | 41 + .../vo/fees/WalletAllocationCompanyVO.java | 25 + .../vo/fees/WalletAllocationConfigVO.java | 56 + .../cool/store/vo/fees/WalletPayInfoVO.java | 65 + .../cool/store/vo/modify/ModifyRecordVO.java | 27 + .../vo/order/MiniStoreOrderDetailVO.java | 181 ++ .../store/vo/order/MiniStoreOrderListVO.java | 50 + .../vo/order/MiniStoreWishlistDetailVO.java | 109 ++ .../vo/order/MiniStoreWishlistListVO.java | 73 + .../store/vo/order/PCStoreOrderListVO.java | 117 ++ .../store/vo/order/PreAllocationRecordVO.java | 54 + .../com/cool/store/vo/order/WalletPayVO.java | 39 + .../store/vo/store/StoreTypeOptionVO.java | 72 + .../com/cool/store/vo/store/StoreTypeVO.java | 89 + .../vo/visit/StoreVisitReservationVO.java | 54 + .../cool/store/http/WalletHttpClientRest.java | 2 + .../com/cool/store/service/DeskService.java | 9 +- .../store/service/ExportRealizeService.java | 8 +- .../com/cool/store/service/ExportService.java | 9 + .../store/service/FranchiseFeeService.java | 8 + .../config/ConfigItemCategoryService.java | 20 + .../service/config/ConfigItemService.java | 22 + .../service/config/ConfigOptionService.java | 27 + .../impl/ConfigItemCategoryServiceImpl.java | 89 + .../config/impl/ConfigItemServiceImpl.java | 93 + .../config/impl/ConfigOptionServiceImpl.java | 193 +++ .../store/service/dict/impl/DictService.java | 1 + .../fees/FeeStandardConfigService.java | 29 + .../service/fees/PayeeBankConfigService.java | 28 + .../fees/ShopAllocationInfoService.java | 41 + .../fees/WalletAllocationConfigService.java | 47 + .../service/fees/WalletPayInfoService.java | 54 + .../impl/FeeStandardConfigServiceImpl.java | 94 + .../fees/impl/PayeeBankConfigServiceImpl.java | 122 ++ .../impl/ShopAllocationInfoServiceImpl.java | 144 ++ .../WalletAllocationConfigServiceImpl.java | 170 ++ .../fees/impl/WalletPayInfoServiceImpl.java | 344 ++++ .../service/impl/DataHandleServiceImpl.java | 2 +- .../store/service/impl/DeskServiceImpl.java | 34 + .../impl/ExportRealizeServiceImpl.java | 32 + .../store/service/impl/ExportServiceImpl.java | 34 + .../service/impl/FranchiseFeeServiceImpl.java | 108 +- .../impl/JoinIntentionServiceImpl.java | 1 + .../service/impl/OpenApiServiceImpl.java | 12 +- .../store/service/impl/PointServiceImpl.java | 26 +- .../store/service/impl/ShopServiceImpl.java | 50 +- .../impl/SignFranchiseServiceImpl.java | 30 +- .../service/impl/SyncMainSysServerImpl.java | 4 +- .../service/modify/ModifyRecordService.java | 24 + .../modify/impl/ModifyRecordServiceImpl.java | 35 + .../service/order/MiniStoreOrderService.java | 57 + .../order/impl/MiniStoreOrderServiceImpl.java | 1515 +++++++++++++++++ .../store/PreAllocationRecordService.java | 24 + .../store/service/store/StoreTypeService.java | 47 + .../impl/PreAllocationRecordServiceImpl.java | 125 ++ .../store/impl/StoreTypeServiceImpl.java | 225 +++ .../visit/StoreVisitReservationService.java | 24 + .../StoreVisitReservationServiceImpl.java | 179 ++ .../service/wallet/IWalletTradeResolve.java | 25 + .../service/wallet/WalletApiService.java | 11 + .../wallet/WalletTradeResolveFactory.java | 43 + .../service/wallet/WalletTradeService.java | 21 + .../impl/WalletFranchisePayResolve.java | 52 + .../wallet/impl/WalletServiceImpl.java | 45 +- .../wallet/impl/WalletTradeServiceImpl.java | 54 + .../webb/ConfigItemCategoryController.java | 51 + .../controller/webb/ConfigItemController.java | 58 + .../webb/ConfigOptionController.java | 58 + .../store/controller/webb/DeskController.java | 7 + .../controller/webb/ExportController.java | 7 + .../webb/FeeStandardConfigController.java | 57 + .../webb/ModifyRecordController.java | 46 + .../webb/PCFranchiseFeeController.java | 7 + .../controller/webb/PCTestController.java | 9 + .../webb/PayeeBankConfigController.java | 63 + .../webb/PreAllocationRecordController.java | 41 + .../webb/ShopAllocationController.java | 39 + .../controller/webb/StoreOrderController.java | 77 + .../controller/webb/StoreTypeController.java | 77 + .../webb/StoreVisitReservationController.java | 45 + .../WalletAllocationConfigController.java | 66 + .../MiniConfigItemCategoryController.java | 42 + .../webc/MiniConfigItemController.java | 35 + .../webc/MiniFranchiseFeeController.java | 7 + .../webc/MiniPayeeBankConfigController.java | 40 + .../webc/MiniShopAllocationController.java | 66 + .../webc/MiniStoreOrderController.java | 116 ++ .../webc/MiniStoreTypeController.java | 40 + .../MiniStoreVisitReservationController.java | 55 + .../store/controller/webc/TestController.java | 33 + .../main/resources/application-ab.properties | 1 + .../resources/application-local.properties | 10 +- .../resources/application-online.properties | 1 + .../resources/application-test.properties | 1 + 264 files changed, 13194 insertions(+), 99 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModuleEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/dict/DictTableEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/fees/AllocationPayStatusEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/fees/PayTypeEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/fees/WalletFeeItemEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/order/StoreOrderStatusEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/visit/StoreVisitReservationStatusEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/WalletTradeModuleEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/GenerateNoUtil.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemCategoryDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigOptionDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/FeeStandardConfigDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/PayeeBankConfigDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/ShopAllocationInfoDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationCompanyDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationConfigDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletPayInfoDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/modify/ModifyRecordDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/order/PreAllocationRecordDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderOptionSnapshotDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreWishlistDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeOptionDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/visit/StoreVisitReservationDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletTradeDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemCategoryMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigOptionMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/FeeStandardConfigMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/PayeeBankConfigMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/ShopAllocationInfoMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationCompanyMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationConfigMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletPayInfoMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/modify/ModifyRecordMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/PreAllocationRecordMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderOptionSnapshotMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreWishlistMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeOptionMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/visit/StoreVisitReservationMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletTradeMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/config/ConfigItemCategoryMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/config/ConfigItemMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/config/ConfigOptionMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/fees/FeeStandardConfigMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/fees/PayeeBankConfigMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/fees/ShopAllocationInfoMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationCompanyMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationConfigMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/fees/WalletPayInfoMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/modify/ModifyRecordMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/order/PreAllocationRecordMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderOptionSnapshotMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/order/StoreWishlistMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeOptionMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/visit/StoreVisitReservationMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/wallet/WalletTradeMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/standardStore/StoreOrderDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BatchTransferDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemCategoryDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigOptionDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/fees/FeeStandardConfigDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/fees/PayeeBankConfigDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/fees/ShopAllocationInfoDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletAllocationCompanyDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletAllocationConfigDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletPayInfoDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/modify/ModifyRecordDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/order/PreAllocationRecordDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderOptionSnapshotDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreWishlistDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeOptionDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/visit/StoreVisitReservationDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletTradeDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/FranchisePayTypeUpdateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryUpdateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemUpdateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionTreeQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionUpdateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigAddRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigPageRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigAddRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigPageRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/ShopAllocationInfoRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationCompanyRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigAddRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigPageRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCancelPayRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCompanyQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletPayRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletRepayRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderCreateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderLineQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderPayRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderUpdateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistDelRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistListRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistSaveRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/OrderAuditRecordRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderOptionQuantityUpdateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationQueryShopRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationSaveRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreOrderQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionSaveRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeUpdateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAdminQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAssignServiceRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCancelRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCreateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationIdRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationMyQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BatchTransferRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemBaseInfoVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryBaseInfoVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionTreeVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/FeeStandardConfigVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/InvestDivisionRegionVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigSimpleVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationInfoVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationSimpleVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationCompanyVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationConfigVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletPayInfoVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/modify/ModifyRecordVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderDetailVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderListVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistDetailVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistListVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/order/PCStoreOrderListVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/order/PreAllocationRecordVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/order/WalletPayVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeOptionVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/visit/StoreVisitReservationVO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemCategoryService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigOptionService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemCategoryServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigOptionServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/FeeStandardConfigService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/PayeeBankConfigService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/ShopAllocationInfoService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletAllocationConfigService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletPayInfoService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/FeeStandardConfigServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/PayeeBankConfigServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/ShopAllocationInfoServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletAllocationConfigServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletPayInfoServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/modify/ModifyRecordService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/modify/impl/ModifyRecordServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/order/MiniStoreOrderService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/order/impl/MiniStoreOrderServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/store/PreAllocationRecordService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/store/StoreTypeService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/PreAllocationRecordServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/StoreTypeServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/visit/StoreVisitReservationService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/visit/impl/StoreVisitReservationServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/IWalletTradeResolve.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeResolveFactory.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletFranchisePayResolve.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletTradeServiceImpl.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemCategoryController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigOptionController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/FeeStandardConfigController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ModifyRecordController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PayeeBankConfigController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PreAllocationRecordController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopAllocationController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreOrderController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreTypeController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreVisitReservationController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletAllocationConfigController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemCategoryController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniPayeeBankConfigController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopAllocationController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreOrderController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreTypeController.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreVisitReservationController.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/common/PageBasicInfo.java b/coolstore-partner-common/src/main/java/com/cool/store/common/PageBasicInfo.java index 97e5a9e1a..35a03a0fe 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/common/PageBasicInfo.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/common/PageBasicInfo.java @@ -1,5 +1,6 @@ package com.cool.store.common; +import lombok.Builder; import lombok.Data; @Data diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/DictConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/DictConstants.java index 615539ea9..30794c267 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/DictConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/DictConstants.java @@ -1,5 +1,8 @@ package com.cool.store.constants; +import java.util.Arrays; +import java.util.List; + /** *

* 字典表常量池 @@ -13,4 +16,21 @@ public class DictConstants { * 装修设计要求-统一装修设计 */ public static final String DECORATION_REQUIREMENT_UNIFORM = "decoration_requirement_uniform"; + + /** + * 加盟费-费用类型 + */ + public static final String EXPENSE_TYPE = "expense_type"; + + /** + * 平安钱包默认分账费用类型字典项code + */ + public static final List PING_AN_DEFAULT_ALLOCATION_EXPENSE_TYPE_CODES = Arrays.asList( + "expense_franchise_fee", + "expense_management_fee", + "expense_brand_usage_fee", + "expense_design_fee_group", +// "expense_design_fee_lg", + "expense_earnest_money" + ); } 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 a853fcff9..81b296147 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 @@ -346,7 +346,9 @@ public class RedisConstant { * 十二分导入锁 */ public static final String TP_PENALTY_APPLY_IMPORT_LOCK = "tp_penalty_apply_import_lock"; - + + public static final String STANDARD_STORE_PAY_LOCK_KEY = "standard_store_pay_lock_key:{0}"; + /** * 拜访记录导出锁 */ @@ -361,4 +363,14 @@ public class RedisConstant { * 我的铺位导出锁 */ public static final String MY_POINT_EXPORT_LOCK = "my_point_export_lock"; + + /** + * 钱包分账公司配置-招商分部 + */ + public static final String WALLET_ALLOCATION_CONFIG_INVEST_DIVISION = "wallet_invest_allocation_id"; + + /** + * 钱包分账支付锁 + */ + public static final String WALLET_ALLOCATION_PAY_LOCK_KEY = "wallet_allocation_pay_lock_key:{0}"; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditTypeEnum.java index 07bf20308..e89528457 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditTypeEnum.java @@ -19,6 +19,7 @@ public enum AuditTypeEnum { BUILDINFORMATION(15,"建店资料信息"), JINg_DONG_WAI_MAI(16,"京东外卖"), OPENING_ACCEPTANCE(17,"开业验收"), + STANDARD_STORE(18,"标准店"), ; private Integer code; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModuleEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModuleEnum.java new file mode 100644 index 000000000..c6c5f4f9b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModuleEnum.java @@ -0,0 +1,31 @@ +package com.cool.store.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 业务模块枚举 + * + * @author system + */ +@Getter +@AllArgsConstructor +public enum BusinessModuleEnum { + WALLET_ALLOCATION_CONFIG("WALLET_ALLOCATION_CONFIG", "分账配置"), + PAYEE_BANK_CONFIG("PAYEE_BANK_CONFIG", "收款银行配置"), + FEE_STANDARD_CONFIG("FEE_STANDARD_CONFIG", "加盟费用标准收费额配置"), + ; + + private final String code; + private final String desc; + + public static BusinessModuleEnum getByCode(String code) { + for (BusinessModuleEnum e : BusinessModuleEnum.values()) { + if (e.getCode().equals(code)) { + return e; + } + } + return null; + } +} + 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 d6549d304..256da59c5 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 @@ -334,9 +334,38 @@ public enum ErrorCodeEnum { STORE_NOT_FIND(1610013,"门店不存在",null), SHOP_NAME_INVALID(1610014, "门店名称包含禁止关键词",null), CONTRACT_STAGE_NO_COMPLETE(1610015, "当前阶段无法分配运营顾问!",null), + + CONFIG_OPTION_USED(1610015, "配置选项已被店型使用,无法删除", null), + STORE_TYPE_OPTION_DEFAULT_DUPLICATE(1610016, "同一配置项下只能设置一个默认选项", null), + STORE_TYPE_MUST_DISABLE_BEFORE_DELETE(1610017, "店型已启用,无法删除,请先停用", null), + STORE_ORDER_ITEM_CODE_DUPLICATE(1610018, "同一配置项只能选择一个选项", null), + CONFIG_OPTION_NAME_EXIST(1610019, "配置选项名称已存在", null), + THE_OPTION_IS_NOT_PART_OF_THIS_STORE_TYPE(1610022, "选项不属于该店型", null), + THE_QUANTITY_MUST_BE_GREATER_THAN_0(1610020, "数量必须大于0", null), + THE_NUMBER_OF_OPTIONS_IS_NOT_MODIFIABLE(1610021, "该选项数量不可修改", null), + SHOP_HAS_UNFINISHED_ORDER(1610023, "当前门店存在未结束订单,无法新建", null), + SHOP_HAS_PAID_ORDER(1610024, "当前门店已支付完成,不支持新建订单", null), + ORDER_PAYING_CANT_ADJUST(1610025,"订单支付中,无法调整", null), + ORDER_AMOUNT_NOT_DIFF(1610025,"分账明细与订单金额不相等,请确认!", null), + CODE_EXIST(1610026,"存在相同的编码,请确认!", null), + + + STORE_ORDER_NOT_FOUND(1610100, "订单不存在", null), + STORE_ORDER_STATUS_INVALID(1610101, "订单状态不合法", null), + STORE_ORDER_UPDATE_FORBIDDEN(1610102, "当前订单状态不允许修改", null), + STORE_ORDER_WITHDRAW_FORBIDDEN(1610103, "当前订单状态不允许撤回", null), + STORE_ORDER_CANCEL_FORBIDDEN(1610104, "当前订单状态不允许作废", null), + CURRENT_STORE_TYPE_EXIST(1610105, "当前店型已存在", null), + CURRENT_STORE_TYPE_NOT_EXIST(1610106, "当前店型不存在", null), + PAY_FAIL(1610107, "支付失败", null), + DUPLICATE_PAYMENTS(1610108, "订单支付中,请勿重复支付!", null), + CURRENT_ORDER_NOT_SUPPORT(1610109, "当前订单状态不支持审批!", null), + + + //装修 TEAM_USED(1612001,"该装修团队有门店使用,无法删除,请确认!",null), - CURRENT_BRAND_SORT_NUMBER_EXIST(16100007,"当前品牌已存在该排序数字!",null), + CURRENT_BRAND_SORT_NUMBER_EXIST(16100007,"已存在该排序数字!",null), CONTRACT_CONFIG_NOT_EXIST(16100008,"合同配置不存在!",null), WALLET_OPEN_ACCOUNT_FAIL(1620001,"钱包开通失败",null), @@ -393,6 +422,30 @@ public enum ErrorCodeEnum { VISIT_RECORD_COMPLETE(1820005, "已完成拜访", null), EXPORT_TASK_LIMIT(1830006, "导出任务数量达上限,请稍后再试", null), CITY_PLANNING_EXISTS(1820001, "同年份同季度同省市已存在规划,不能重复添加", null), + + WALLET_INVEST_TYPE_EXISTS(1830000, "同品牌同费用仅能存在分部或全部", null), + WALLET_UNIQUE_KEY_EXISTS(1830001, "该加盟品牌、招商分部、费用类型已存在", null), + BANK_CONFIG_INVEST_TYPE_EXISTS(1830002, "同品牌同付款方式只能配置全部或分部其中一种", null), + BANK_CONFIG_UNIQUE_KEY_EXISTS(1830003, "该加盟品牌、招商分部、付款方式配置已存在", null), + FEE_STANDARD_UNIQUE_KEY_EXISTS(1830003, "该加盟品牌、费用类型配置已存在", null), + NO_PAYMENT_METHOD_IS_SET(1830004, "未设置支付方式", null), + FRANCHISE_FEE_PAY_TYPE_ERROR(1830005,"缴款方式已选择,不可更改!",null), + EXIST_PAY_INFO(1830006, "存在缴款,无法修改分账信息", null), + PAY_TYPE_UNEQUAL_TO_PING_AN_WALLET(1830007, "支付方式不为平安钱包支付", null), + NONSUPPORT_EXPENSE_TYPE(1830008, "不支持的费用类型", null), + EXPENSE_TYPE_HAS_PAID(1830009, "{0}已完成支付", null), + EXPENSE_CHANGED(1830010, "费用发生变化,请刷新页面后重试", null), + THERE_IS_NO_PAYMENT_INFORMATION(1830011, "不存在缴费信息", null), + THE_USER_IS_PAYING_UNABLE_UPDATE(1830012, "用户缴费中,无法编辑", null), + THE_USER_IS_PAYING(1830018, "用户缴费中,请稍后再试", null), + ALLOCATION_CONFIG_NOT_EXIST(1830013, "不存在分账配置信息", null), + NOT_EXIST_CALLBACK_RESOLVE(1830014, "不存在回调处理策略", null), + NOT_EXIST_PING_AN_ACCOUNT(1830015, "不存在平安账户,请开通", null), + NOT_ENOUGH_BALANCE(1830016, "账户余额不足", null), + WALLET_TRANS_FAIL(1830017, "钱包交易失败", null), + WALLET_RE_PAY_FAIL(1830019, "重新支付异常,请联系管理员", null), + WALLET_PAY_CANNOT_CANCEL(1830020, "该交易无法取消", null), + TOTAL_FEES_NEED_EQUAL(1830021, "分账总金额需与合计缴费金额一致", null), ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FileTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FileTypeEnum.java index c72c44a55..311435bdd 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/FileTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FileTypeEnum.java @@ -30,6 +30,7 @@ public enum FileTypeEnum { TP_PENALTY_IMPORT("tpPenaltyImport", "十二分惩处申请单导入"), TP_PENALTY_ERROR_EXPORT("tpPenaltyErrorExport", "十二分惩处申请单导入错误列表"), VISIT_RECORD_EXPORT("visitRecordExport", "拜访记录列表"), + ORDER_RECORD_EXPORT("orderRecordExport", "订单记录列表"), POINT_EXPORT("pointExport", "铺位管理列表"), MY_POINT_EXPORT("myPointExport", "我的铺位管理列表"), ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/StoreTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/StoreTypeEnum.java index 9b560b250..4932e8d7e 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/StoreTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/StoreTypeEnum.java @@ -10,7 +10,9 @@ public enum StoreTypeEnum { //:0-无展示门店、1-餐厅店、2-普通门店 NO_SHOW_STORE(0, "无展示门店"), RESTAURANT_STORE(1, "餐厅店"), - ORDINARY_STORE(2, "普通门店"); + ORDINARY_STORE(2, "普通门店"), + X_STORE(3, "X店型"), + Z_STORE(4, "Z店型"); private Integer code; private String message; StoreTypeEnum(Integer code, String message) { diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/dict/DictTableEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/dict/DictTableEnum.java new file mode 100644 index 000000000..7a8bb8c67 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/dict/DictTableEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums.dict; + +/** + * @Auther zx_szh + * @Date 2026/1/22 16:24 + * @Version 1.0 + */ +public enum DictTableEnum { + + + STANDARD_STORE_TYPE_CONFIG_TYPE("standard_store_type_config_type","标准店型配置类型"), + STANDARD_STORE_TYPE_CONFIG_COLUMN("standard_store_type_config_column","标准店型配置项"), + + ; + + private String code; + + private String message; + + DictTableEnum(String code, String message) { + this.code = code; + this.message = message; + } + + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/AllocationPayStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/AllocationPayStatusEnum.java new file mode 100644 index 000000000..5a08d4661 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/AllocationPayStatusEnum.java @@ -0,0 +1,36 @@ +package com.cool.store.enums.fees; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 平安钱包缴费转账状态枚举类 + *

+ * + * @author wangff + * @since 2026/2/3 + */ +@Getter +@AllArgsConstructor +public enum AllocationPayStatusEnum { + + PAID(1, "已支付"), + FAIL(2, "支付失败"), + PAYING(3, "支付中"), + CANCEL(4, "已取消") + ; + + private final Integer status; + + private final String desc; + + public static String getDescByStatus(Integer status) { + for (AllocationPayStatusEnum value : values()) { + if (value.status.equals(status)) { + return value.desc; + } + } + return ""; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/PayTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/PayTypeEnum.java new file mode 100644 index 000000000..cf7a0fb8f --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/PayTypeEnum.java @@ -0,0 +1,25 @@ +package com.cool.store.enums.fees; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 支付方式枚举类 + *

+ * + * @author wangff + * @since 2026/1/29 + */ +@Getter +@AllArgsConstructor +public enum PayTypeEnum { + + OFFLINE(1, "线下支付"), + PING_AN(2, "平安钱包支付"), + ; + + private final Integer type; + + private final String desc; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/WalletFeeItemEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/WalletFeeItemEnum.java new file mode 100644 index 000000000..3fb30d750 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/fees/WalletFeeItemEnum.java @@ -0,0 +1,50 @@ +package com.cool.store.enums.fees; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 钱包转账费用科目枚举类 + *

+ * + * @author wangff + * @since 2026/1/30 + */ +@Getter +@AllArgsConstructor +public enum WalletFeeItemEnum { + FRANCHISE_FEE(310, "expense_franchise_fee", "加盟费"), + MANAGEMENT_FEE(311, "expense_management_fee", "管理费(年)"), + BRAND_USAGE_FEE(312, "expense_brand_usage_fee", "品牌使用费(年)"), + DESIGN_FEE_GROUP(313, "expense_design_fee_group", "设计费-集团"), +// DESIGN_FEE_LG(314, "expense_design_fee_lg", "设计费-立规"), + EARNEST_MONEY(315, "expense_earnest_money", "保证金"), + EXPENSE_DECORATION_MONEY(316, "expense_decoration_money", "装修费"), + EXPENSE_EQUIPMENT_MONEY(317, "expense_equipment_money", "设备费"), + ; + + private final Integer feeItemId; + + private final String expenseType; + + private final String desc; + + public static WalletFeeItemEnum getByExpenseType(String expenseType) { + for (WalletFeeItemEnum value : WalletFeeItemEnum.values()) { + if (value.expenseType.equals(expenseType)) { + return value; + } + } + return null; + } + + public static WalletFeeItemEnum getByFeeItemId(Integer feeItemId) { + for (WalletFeeItemEnum value : WalletFeeItemEnum.values()) { + if (value.feeItemId.equals(feeItemId)) { + return value; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/order/StoreOrderStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/order/StoreOrderStatusEnum.java new file mode 100644 index 000000000..6ff1013a6 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/order/StoreOrderStatusEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.order; + +import lombok.Getter; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Getter +public enum StoreOrderStatusEnum { + + DRAFT(0, "草稿"), + WAIT_CONFIRM(5, "待立规确认"), + INVEST_MANAGER_CONFIRM(7, "待招商经理确认"), + FINANCIAL_CONFIRM(8, "待财务确认"), + WAIT_ADJUST(10, "待调整"), + WAIT_PAY(15, "待支付"), + PAID(20, "已支付"), + PAY_FAIL(22, "支付失败"), + CLOSED(25, "已关闭"); + + private final Integer code; + private final String desc; + + StoreOrderStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + private static final Map MAP = Arrays.stream(values()) + .collect(Collectors.toMap(StoreOrderStatusEnum::getCode, Function.identity(), (a, b) -> a)); + + public static StoreOrderStatusEnum of(Integer code) { + return MAP.get(code); + } + + + /** + * 可撤回阶段 + * @param code + * @return + */ + public static boolean canWithdraw(Integer code) { + return WAIT_CONFIRM.getCode().equals(code) || WAIT_PAY.getCode().equals(code)||INVEST_MANAGER_CONFIRM.getCode().equals(code); + } + + /** + * 待审核状态 + * @param code + * @return + */ + public static boolean approve(Integer code) { + return WAIT_CONFIRM.getCode().equals(code) || INVEST_MANAGER_CONFIRM.getCode().equals(code); + } +} 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 97e73dd6d..1692a2756 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 @@ -43,6 +43,8 @@ public enum ShopSubStageEnum { SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 260, "开通门店平安钱包", 1), SHOP_STAGE_27(ShopStageEnum.SHOP_STAGE_2, 270, "开业验收", 1), + SHOP_STAGE_28(ShopStageEnum.SHOP_STAGE_2, 280, "选择标准店型", 1), + SHOP_STAGE_30(ShopStageEnum.SHOP_STAGE_2, 300, "开业日期报备", 1), @@ -68,11 +70,19 @@ public enum ShopSubStageEnum { this.planCompleteDays = planCompleteDays; } - public static Integer getTotalStageIsLocationAndPreparation() { + public static Integer getTotalStageIsLocationAndPreparation(Integer useStandardStore) { int total = 0; for (ShopSubStageEnum shopStageEnum : ShopSubStageEnum.values()) { if (shopStageEnum.getShopStageEnum().getShopStage().equals(ShopStageEnum.SHOP_STAGE_1.getShopStage()) || shopStageEnum.getShopStageEnum().getShopStage().equals(ShopStageEnum.SHOP_STAGE_2.getShopStage())) { + //如果不是标准店 且是SHOP_STAGE_28 直接continue + if (useStandardStore==0&&shopStageEnum.getShopSubStage().equals(SHOP_STAGE_28.getShopSubStage())){ + continue; + } + //是标准店 没有缴费阶段 + if (useStandardStore==1&&shopStageEnum.getShopSubStage().equals(SHOP_STAGE_8.getShopSubStage())){ + continue; + } total++; } } @@ -110,20 +120,16 @@ public enum ShopSubStageEnum { * * @return */ - public ShopSubStageStatusEnum getInitStatus() { + public ShopSubStageStatusEnum getInitStatus(Integer userStrandard) { switch (this) { case SHOP_STAGE_1: 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_6: case SHOP_STAGE_2: case SHOP_STAGE_3: case SHOP_STAGE_4: - case SHOP_STAGE_7: case SHOP_STAGE_8: case SHOP_STAGE_8_5: case SHOP_STAGE_8_6: @@ -145,6 +151,20 @@ public enum ShopSubStageEnum { case SHOP_STAGE_27: case SHOP_STAGE_30: return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00; + case SHOP_STAGE_7: + if (userStrandard==1){ + //是标准店 不需要单独缴费 统一收款 + return null; + }else { + return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00; + } + case SHOP_STAGE_28: + if (userStrandard==1){ + //是标准店 需要选择店型 其他情况不需要选择店型 + return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00; + }else { + return null; + } default: return null; } 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 bf8df2d4c..610bda606 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 @@ -166,6 +166,16 @@ public enum ShopSubStageStatusEnum { SHOP_SUB_STAGE_STATUS_274(ShopSubStageEnum.SHOP_STAGE_27, 2740,"待整改", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_276(ShopSubStageEnum.SHOP_STAGE_27, 2760,"已完成", Boolean.TRUE), + + SHOP_SUB_STAGE_STATUS_280(ShopSubStageEnum.SHOP_STAGE_28, 2800, "待选购", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_281(ShopSubStageEnum.SHOP_STAGE_28, 2810, "待立规审批", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_281_5(ShopSubStageEnum.SHOP_STAGE_28, 2815, "待招商经理审批", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_282(ShopSubStageEnum.SHOP_STAGE_28, 2820, "待财务确认", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_283(ShopSubStageEnum.SHOP_STAGE_28, 2830, "审批拒绝", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_284(ShopSubStageEnum.SHOP_STAGE_28, 2840, "待缴费", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_285(ShopSubStageEnum.SHOP_STAGE_28, 2850, "已完成", Boolean.TRUE), + + //开业日期报备 SHOP_SUB_STAGE_STATUS_300(ShopSubStageEnum.SHOP_STAGE_30, 3000, "待填写", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_310(ShopSubStageEnum.SHOP_STAGE_30, 3010, "待开业确认", Boolean.FALSE), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/visit/StoreVisitReservationStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/visit/StoreVisitReservationStatusEnum.java new file mode 100644 index 000000000..a1900146e --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/visit/StoreVisitReservationStatusEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums.visit; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 预约到店状态 + */ +@Getter +@AllArgsConstructor +public enum StoreVisitReservationStatusEnum { + + WAIT_CONFIRM(10, "待确认"), + WAIT_VISIT(20, "待看店"), + ARRIVED(30, "已到店"), + CANCELED(40, "已取消"); + + private final Integer status; + private final String desc; + + public static boolean isValid(Integer status) { + if (status == null) { + return false; + } + for (StoreVisitReservationStatusEnum value : values()) { + if (value.status.equals(status)) { + return true; + } + } + return false; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/WalletTradeModuleEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/WalletTradeModuleEnum.java new file mode 100644 index 000000000..38e1a5afe --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/WalletTradeModuleEnum.java @@ -0,0 +1,34 @@ +package com.cool.store.enums.wallet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 钱包交易业务模块枚举类 + *

+ * + * @author wangff + * @since 2026/2/4 + */ +@Getter +@AllArgsConstructor +public enum WalletTradeModuleEnum { + + FRANCHISE_PAY("FRANCHISE_PAY", "钱包加盟缴费"), + STANDARD_STORE("STANDARD_STORE", "标准店缴费"), + ; + + private final String module; + + private final String desc; + + public static WalletTradeModuleEnum getByModule(String module) { + for (WalletTradeModuleEnum value : WalletTradeModuleEnum.values()) { + if (value.getModule().equals(module)) { + return value; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java index 07bf9d41a..02e7e82dc 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java @@ -22,4 +22,12 @@ public class CommonUtil { } catch (Exception ignored) {} return BigDecimal.ZERO; } + + public static BigDecimal addAll(String... value) { + BigDecimal total = new BigDecimal(0); + for (String v : value) { + total = total.add(convertToBig(v)); + } + return total; + } } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/GenerateNoUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/GenerateNoUtil.java new file mode 100644 index 000000000..6972d488c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/GenerateNoUtil.java @@ -0,0 +1,25 @@ +package com.cool.store.utils; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +import static com.cool.store.utils.CoolDateUtils.DATE_FORMAT_SEC_9; + +/** + *

+ * 编号生成工具栏 + *

+ * + * @author wangff + * @since 2026/2/5 + */ +public class GenerateNoUtil { + + /** + * 生成编号,yyyyMMddHHmmssSSS+3位随机数 + */ + public static String generateMillsNoWithRandom() { + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(DATE_FORMAT_SEC_9); + return LocalDateTime.now().format(dateFormatter) + ((int) (Math.random() * 900) + 100); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java index 8223f7559..0e313bf01 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java @@ -175,4 +175,24 @@ public class RedisUtil { public Long increment(String key) { return redisTemplate.boundValueOps(key).increment(1L); } + + /** + * 尝试获取分布式锁 + * @param key 锁的key + * @param value 请求标识,通常是UUID + * @param expireTime 超时时间 + * @param timeUnit 时间单位 + * @return 是否获取成功 + */ + public Boolean tryLock(String key, String value, long expireTime, TimeUnit timeUnit) { + return redisTemplate.opsForValue().setIfAbsent(key, value, expireTime, timeUnit); + } + + /** + * 释放锁 + * @param key 锁的key + */ + public void unlock(String key) { + redisTemplate.delete(key); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java index da4d10589..7f6923431 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java @@ -42,4 +42,17 @@ public class FranchiseFeeDAO { } return franchiseFeeMapper.batchUpdateXgjCollectionStatusAndXgjFeesPaid(franchiseFeeStageDateDTOList); } + + public Boolean updatePayType(Long shopId, Integer payType) { + if (shopId == null || payType == null){ + return false; + } + Example example = new Example(FranchiseFeeDO.class); + example.createCriteria().andEqualTo("shopId", shopId); + return franchiseFeeMapper.updateByExampleSelective(FranchiseFeeDO.builder().payType(payType).build(), example) > 0; + } + + public FranchiseFeeDO selectByShopId(Long shopId) { + return franchiseFeeMapper.selectByShopId(shopId); + } } 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 73f97b144..0784eaa05 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java @@ -4,6 +4,7 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.dto.BuildStageDTO; import com.cool.store.dto.PlatformBuildStageDTO; import com.cool.store.dto.Preparation.ScheduleDTO; +import com.cool.store.entity.LineInfoDO; import com.cool.store.entity.ShopInfoDO; import com.cool.store.entity.ShopStageInfoDO; import com.cool.store.enums.FranchiseBrandEnum; @@ -41,11 +42,11 @@ public class ShopStageInfoDAO { /** * 初始化店铺阶段信息 - * @param lineId + * @param lineInfoDO * @param shopInfoList * @return flag =true:表示意向加盟节点完成正常初始化。false:表示意向加盟节点未完成新建分店阶段都为未开始-100。 */ - public Integer initShopStageInfo(Long lineId, List shopInfoList, Boolean flag) { + public Integer initShopStageInfo(LineInfoDO lineInfoDO, List shopInfoList, Boolean flag) { if (CollectionUtils.isEmpty(shopInfoList)) { return CommonConstants.ZERO; } @@ -58,28 +59,27 @@ public class ShopStageInfoDAO { // 三明治跳过营帐通开通 continue; } - // TODO: 临时跳过 - if (shopSubStageEnum.equals(ShopSubStageEnum.SHOP_STAGE_6)) { - continue; - } ShopStageInfoDO shopStageInfo = new ShopStageInfoDO(); - shopStageInfo.setLineId(lineId); + shopStageInfo.setLineId(lineInfoDO.getId()); shopStageInfo.setShopId(shopId); ShopStageEnum shopStageEnum = shopSubStageEnum.getShopStageEnum(); shopStageInfo.setShopStage(shopStageEnum.getShopStage()); shopStageInfo.setShopSubStage(shopSubStageEnum.getShopSubStage()); ShopSubStageStatusEnum initStatus = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00; if (flag) { - initStatus = shopSubStageEnum.getInitStatus(); + initStatus = shopSubStageEnum.getInitStatus(lineInfoDO.getUseStandardStore()); + } + //标准店和普通店 + if (initStatus == null){ + continue; } shopStageInfo.setShopSubStageStatus(initStatus.getShopSubStageStatus()); - shopStageInfo.setRemark(shopSubStageEnum.getShopSubStageName() + CommonConstants.PATH_BAR + shopSubStageEnum.getInitStatus().getShopSubStageStatusName()); + shopStageInfo.setRemark(shopSubStageEnum.getShopSubStageName() + CommonConstants.PATH_BAR + initStatus.getShopSubStageStatusName()); shopStageInfo.setIsTerminated(Boolean.FALSE); shopStageInfo.setPlanCompleteTime(shopSubStageEnum.getPlanCompleteTime(selectStartDate)); addShopStageList.add(shopStageInfo); } } - //发送短信 return shopStageInfoMapper.batchInsert(addShopStageList); } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemCategoryDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemCategoryDAO.java new file mode 100644 index 000000000..276733bd9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemCategoryDAO.java @@ -0,0 +1,99 @@ +package com.cool.store.dao.config; + +import com.cool.store.entity.config.ConfigItemCategoryDO; +import com.cool.store.mapper.config.ConfigItemCategoryMapper; +import com.cool.store.vo.config.ConfigItemBaseInfoVO; +import com.cool.store.vo.config.ConfigItemCategoryBaseInfoVO; +import com.cool.store.vo.config.ConfigItemCategoryVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.*; +import java.util.stream.Collectors; + +@Repository +@RequiredArgsConstructor +public class ConfigItemCategoryDAO { + + private final ConfigItemCategoryMapper configItemCategoryMapper; + + public boolean insertSelective(ConfigItemCategoryDO entity) { + return configItemCategoryMapper.insertSelective(entity) > 0; + } + + public boolean updateSelective(ConfigItemCategoryDO entity) { + return configItemCategoryMapper.updateByPrimaryKeySelective(entity) > 0; + } + + public ConfigItemCategoryDO getById(Long id) { + return configItemCategoryMapper.selectByPrimaryKey(id); + } + + public List queryByCondition(String categoryName, Integer status) { + return configItemCategoryMapper.queryByCondition(categoryName, status); + } + + public List queryAllList() { + return configItemCategoryMapper.queryAllActiveList(); + } + + public Map queryAllListMap() { + List configItemBaseInfoVOS = configItemCategoryMapper.queryAllActiveList(); + if (CollectionUtils.isEmpty(configItemBaseInfoVOS)){ + return new HashMap<>(); + } + return configItemCategoryMapper.queryAllActiveList().stream() + .filter(v -> StringUtils.isNotBlank(v.getCategoryCode())) + .collect(Collectors.toMap(ConfigItemCategoryBaseInfoVO::getCategoryCode, ConfigItemCategoryBaseInfoVO::getCategoryName, (a, b) -> a)); + } + + public boolean softDeleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + ConfigItemCategoryDO update = new ConfigItemCategoryDO(); + update.setIsDeleted(1); + Example example = new Example(ConfigItemCategoryDO.class); + example.createCriteria().andIn("id", ids).andEqualTo("isDeleted", 0); + return configItemCategoryMapper.updateByExampleSelective(update, example) > 0; + } + + public Map nameMap(List codeList) { + if (CollectionUtils.isEmpty(codeList)) { + return new HashMap<>(); + } + Example example = new Example(ConfigItemCategoryDO.class); + example.createCriteria().andIn("categoryCode", codeList).andEqualTo("isDeleted", 0); + return configItemCategoryMapper.selectByExample( example).stream() + .filter(v -> StringUtils.isNotBlank(v.getCategoryCode())) + .collect(Collectors.toMap(ConfigItemCategoryDO::getCategoryCode, ConfigItemCategoryDO::getCategoryName, (a, b) -> a)); + } + + + public boolean existsCode(Integer code, Long excludeId) { + if (code == null) { + return false; + } + Example example = new Example(ConfigItemCategoryDO.class); + Example.Criteria criteria = example.createCriteria().andEqualTo("sortNo", code).andEqualTo("isDeleted", 0); + if (excludeId != null) { + criteria.andNotEqualTo("id", excludeId); + } + return configItemCategoryMapper.selectCountByExample(example) > 0; + } + + public boolean existsSortNo(Integer sortNo, Long excludeId) { + if (sortNo == null) { + return false; + } + Example example = new Example(ConfigItemCategoryDO.class); + Example.Criteria criteria = example.createCriteria().andEqualTo("sortNo", sortNo).andEqualTo("isDeleted", 0); + if (excludeId != null) { + criteria.andNotEqualTo("id", excludeId); + } + return configItemCategoryMapper.selectCountByExample(example) > 0; + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemDAO.java new file mode 100644 index 000000000..be021c679 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigItemDAO.java @@ -0,0 +1,107 @@ +package com.cool.store.dao.config; + +import com.cool.store.entity.config.ConfigItemCategoryDO; +import com.cool.store.entity.config.ConfigItemDO; +import com.cool.store.mapper.config.ConfigItemMapper; +import com.cool.store.utils.StringUtil; +import com.cool.store.vo.config.ConfigItemBaseInfoVO; +import com.cool.store.vo.config.ConfigItemVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Repository +@RequiredArgsConstructor +public class ConfigItemDAO { + + private final ConfigItemMapper configItemMapper; + + public boolean insertSelective(ConfigItemDO entity) { + return configItemMapper.insertSelective(entity) > 0; + } + + public boolean updateSelective(ConfigItemDO entity) { + return configItemMapper.updateByPrimaryKeySelective(entity) > 0; + } + + public ConfigItemDO getById(Long id) { + return configItemMapper.selectByPrimaryKey(id); + } + + public List queryByCondition(String itemName, String itemCode, Long categoryId, Integer status) { + return configItemMapper.queryByCondition(itemName, itemCode, categoryId, status); + } + + public Map queryAllActiveMap() { + List configItemBaseInfoVOS = configItemMapper.queryAllActiveList(); + if (CollectionUtils.isEmpty(configItemBaseInfoVOS)){ + return new HashMap<>(); + } + return configItemBaseInfoVOS.stream() + .filter(v -> StringUtils.isNotBlank(v.getItemCode())) + .collect(Collectors.toMap(ConfigItemBaseInfoVO::getItemCode, ConfigItemBaseInfoVO::getItemName, (a, b) -> a)); + } + + public boolean softDeleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + ConfigItemDO update = new ConfigItemDO(); + update.setIsDeleted(1); + Example example = new Example(ConfigItemDO.class); + example.createCriteria().andIn("id", ids).andEqualTo("isDeleted", 0); + return configItemMapper.updateByExampleSelective(update, example) > 0; + } + + + public boolean existsItemCode(String code, Long excludeId) { + if (StringUtil.isEmpty(code)) { + return false; + } + Example example = new Example(ConfigItemDO.class); + Example.Criteria criteria = example.createCriteria().andEqualTo("sortNo", code).andEqualTo("isDeleted", 0); + if (excludeId != null) { + criteria.andNotEqualTo("id", excludeId); + } + return configItemMapper.selectCountByExample(example) > 0; + } + + public boolean existsSortNo(Integer sortNo, Long excludeId) { + if (sortNo == null) { + return false; + } + Example example = new Example(ConfigItemDO.class); + Example.Criteria criteria = example.createCriteria().andEqualTo("sortNo", sortNo).andEqualTo("isDeleted", 0); + if (excludeId != null) { + criteria.andNotEqualTo("id", excludeId); + } + return configItemMapper.selectCountByExample(example) > 0; + } + + public int countByCategoryIds(List categoryIds) { + if (CollectionUtils.isEmpty(categoryIds)) { + return 0; + } + return configItemMapper.countByCategoryIds(categoryIds); + } + + public Map nameMap(List codeList) { + if (CollectionUtils.isEmpty(codeList)) { + return new HashMap<>(); + } + Example example = new Example(ConfigItemDO.class); + example.createCriteria().andIn("itemCode", codeList).andEqualTo("isDeleted", 0); + return configItemMapper.selectByExample( example).stream() + .filter(v -> StringUtils.isNotBlank(v.getItemCode())) + .collect(Collectors.toMap(ConfigItemDO::getItemCode, ConfigItemDO::getItemName, (a, b) -> a)); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigOptionDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigOptionDAO.java new file mode 100644 index 000000000..42ae34562 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/config/ConfigOptionDAO.java @@ -0,0 +1,101 @@ +package com.cool.store.dao.config; + +import com.cool.store.entity.config.ConfigOptionDO; +import com.cool.store.mapper.config.ConfigOptionMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * 配置选项 DAO + */ +@Repository +@RequiredArgsConstructor +public class ConfigOptionDAO { + private final ConfigOptionMapper configOptionMapper; + + public boolean insertSelective(ConfigOptionDO option) { + return configOptionMapper.insertSelective(option) > 0; + } + + public boolean updateSelective(ConfigOptionDO option) { + return configOptionMapper.updateByPrimaryKeySelective(option) > 0; + } + + public ConfigOptionDO getById(Long id) { + return configOptionMapper.selectByPrimaryKey(id); + } + + public boolean deleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + Example example = new Example(ConfigOptionDO.class); + example.createCriteria().andIn("id", ids); + return configOptionMapper.deleteByExample(example) > 0; + } + + public List query(String categoryCode, String itemCode, Integer active, String optionName) { + Example example = new Example(ConfigOptionDO.class); + Example.Criteria criteria = example.createCriteria(); + if (Objects.nonNull(categoryCode)) { + criteria.andEqualTo("categoryCode", categoryCode); + } + if (Objects.nonNull(itemCode)) { + criteria.andEqualTo("itemCode", itemCode); + } + if (Objects.nonNull(active)) { + criteria.andEqualTo("active", active); + } + if (Objects.nonNull(optionName) && !optionName.trim().isEmpty()) { + criteria.andLike("optionName", "%" + optionName.trim() + "%"); + } + example.setOrderByClause("sort_order ASC"); + return configOptionMapper.selectByExample(example); + } + + public List listActiveByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return Collections.emptyList(); + } + return configOptionMapper.listActiveByIds(ids); + } + + /** + * 校验排序是否已存在(全局唯一,不区分类型/配置项) + * @param sortOrder 排序值 + * @param excludeId 排除自身ID(新增传 null;修改传当前ID) + */ + public boolean existsSortOrder(Integer sortOrder, Long excludeId) { + if (sortOrder == null) { + return false; + } + Example example = new Example(ConfigOptionDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("sortOrder", sortOrder); + criteria.andEqualTo("active", 1); + if (excludeId != null) { + criteria.andNotEqualTo("id", excludeId); + } + return configOptionMapper.selectCountByExample(example) > 0; + } + + public boolean existsOptionName(String optionName, Long excludeId) { + if (optionName == null || optionName.trim().isEmpty()) { + return false; + } + Example example = new Example(ConfigOptionDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("optionName", optionName.trim()); + criteria.andEqualTo("active", 1); + if (excludeId != null) { + criteria.andNotEqualTo("id", excludeId); + } + return configOptionMapper.selectCountByExample(example) > 0; + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/FeeStandardConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/FeeStandardConfigDAO.java new file mode 100644 index 000000000..da1f8477c --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/FeeStandardConfigDAO.java @@ -0,0 +1,73 @@ +package com.cool.store.dao.fees; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.entity.fees.FeeStandardConfigDO; +import com.cool.store.mapper.fees.FeeStandardConfigMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 加盟费用标准收费额配置DAO + */ +@Repository +@RequiredArgsConstructor +public class FeeStandardConfigDAO { + + private final FeeStandardConfigMapper feeStandardConfigMapper; + + public FeeStandardConfigDO selectByPrimaryKey(Long id) { + return feeStandardConfigMapper.selectByPrimaryKey(id); + } + + public void insertSelective(FeeStandardConfigDO config) { + feeStandardConfigMapper.insertSelective(config); + } + + public void updateByPrimaryKeySelective(FeeStandardConfigDO config) { + feeStandardConfigMapper.updateByPrimaryKeySelective(config); + } + + public boolean existJoinBrandAndExpenseType(Integer joinBrand, String expenseType, Long excludeId) { + Example example = new Example(FeeStandardConfigDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("joinBrand", joinBrand) + .andEqualTo("expenseType", expenseType); + if (Objects.nonNull(excludeId)) { + criteria.andNotEqualTo("id", excludeId); + } + return feeStandardConfigMapper.selectCountByExample(example) > 0; + } + + public List selectByCondition(Integer joinBrand, String expenseType) { + Example example = new Example(FeeStandardConfigDO.class); + Example.Criteria criteria = example.createCriteria(); + if (joinBrand != null) { + criteria.andEqualTo("joinBrand", joinBrand); + } + if (StringUtils.isNotBlank(expenseType)) { + criteria.andEqualTo("expenseType", expenseType.trim()); + } + example.setOrderByClause("create_time DESC"); + return feeStandardConfigMapper.selectByExample(example); + } + + /** + * 根据品牌查询费用标准收费额配置映射 + * @param joinBrand 品牌 + * @return 费用类型 -> 收费额配置 + */ + public Map getStandardConfigMap(Integer joinBrand) { + FeeStandardConfigDO configDO = new FeeStandardConfigDO(); + configDO.setJoinBrand(joinBrand); + List list = feeStandardConfigMapper.select(configDO); + return CollStreamUtil.toMap(list, FeeStandardConfigDO::getExpenseType, v -> v); + } +} + + diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/PayeeBankConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/PayeeBankConfigDAO.java new file mode 100644 index 000000000..0616c776d --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/PayeeBankConfigDAO.java @@ -0,0 +1,97 @@ +package com.cool.store.dao.fees; + +import com.cool.store.entity.fees.PayeeBankConfigDO; +import com.cool.store.mapper.fees.PayeeBankConfigMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 线下收款银行配置DAO + */ +@Repository +@RequiredArgsConstructor +public class PayeeBankConfigDAO { + private final PayeeBankConfigMapper payeeBankConfigMapper; + + public void insertSelective(PayeeBankConfigDO config) { + payeeBankConfigMapper.insertSelective(config); + } + + public void updateByPrimaryKeySelective(PayeeBankConfigDO config) { + payeeBankConfigMapper.updateByPrimaryKeySelective(config); + } + + public PayeeBankConfigDO selectByPrimaryKey(Long id) { + return payeeBankConfigMapper.selectByPrimaryKey(id); + } + + public boolean existUniqueKey(Integer joinBrand, Long investDivisionId, Integer payType, Long excludeId) { + Example example = new Example(PayeeBankConfigDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("joinBrand", joinBrand) + .andEqualTo("investDivisionId", investDivisionId) + .andEqualTo("payType", payType); + if (Objects.nonNull(excludeId)) { + criteria.andNotEqualTo("id", excludeId); + } + return payeeBankConfigMapper.selectCountByExample(example) > 0; + } + + /** + * 同品牌同支付方式:只能存在“全部(0)”或“分部”其中一种 + */ + public boolean existOtherInvestType(Integer joinBrand, Integer payType, Long investDivisionId, Long excludeId) { + Example example = new Example(PayeeBankConfigDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("joinBrand", joinBrand) + .andEqualTo("payType", payType); + if (Long.valueOf(0).equals(investDivisionId)) { + criteria.andNotEqualTo("investDivisionId", 0L); + } else { + criteria.andEqualTo("investDivisionId", 0L); + } + if (Objects.nonNull(excludeId)) { + criteria.andNotEqualTo("id", excludeId); + } + return payeeBankConfigMapper.selectCountByExample(example) > 0; + } + + public List selectByCondition(Integer joinBrand, Long investDivisionId, Integer payType) { + Example example = new Example(PayeeBankConfigDO.class); + Example.Criteria criteria = example.createCriteria(); + if (joinBrand != null) { + criteria.andEqualTo("joinBrand", joinBrand); + } + if (investDivisionId != null) { + criteria.andEqualTo("investDivisionId", investDivisionId); + } + if (payType != null) { + criteria.andEqualTo("payType", payType); + } + example.setOrderByClause("create_time DESC"); + return payeeBankConfigMapper.selectByExample(example); + } + + /** + * 根据加盟品牌、加盟分部、支付方式查询配置 + * @param joinBrand 加盟品牌 + * @param investDivisionId 加盟分部 + * @param payType 支付方式 + * @return 配置 + */ + public PayeeBankConfigDO getByUniqueKey(Integer joinBrand, Long investDivisionId, Integer payType) { + Example example = new Example(PayeeBankConfigDO.class); + example.createCriteria() + .andEqualTo("joinBrand", joinBrand) + .andIn("investDivisionId", Arrays.asList(investDivisionId, 0L)) + .andEqualTo("payType", payType); + return payeeBankConfigMapper.selectOneByExample(example); + } +} + + diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/ShopAllocationInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/ShopAllocationInfoDAO.java new file mode 100644 index 000000000..542fbf0b9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/ShopAllocationInfoDAO.java @@ -0,0 +1,63 @@ +package com.cool.store.dao.fees; + +import com.cool.store.entity.fees.ShopAllocationInfoDO; +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import com.cool.store.mapper.fees.ShopAllocationInfoMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 门店平安钱包分账信息DAO + *

+ * + * @author wangff + * @since 2026/1/29 + */ +@Repository +@RequiredArgsConstructor +public class ShopAllocationInfoDAO { + private final ShopAllocationInfoMapper shopAllocationInfoMapper; + + public List getByShopId(Long shopId) { + ShopAllocationInfoDO info = new ShopAllocationInfoDO(); + info.setShopId(shopId); + return shopAllocationInfoMapper.select(info); + } + + /** + * 批量新增 + */ + public void insertBatch(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + shopAllocationInfoMapper.insertBatch(list); + } + + /** + * 批量更新 + */ + public void updateBatch(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + shopAllocationInfoMapper.updateBatch(list); + } + + public void insertOrUpdateBatch(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + for (ShopAllocationInfoDO shopAllocationInfoDO : list) { + if (Objects.isNull(shopAllocationInfoDO.getStatus())) { + shopAllocationInfoDO.setStatus(AllocationPayStatusEnum.PAYING.getStatus()); + } + } + shopAllocationInfoMapper.insertOrUpdateBatch(list); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationCompanyDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationCompanyDAO.java new file mode 100644 index 000000000..684607d70 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationCompanyDAO.java @@ -0,0 +1,90 @@ +package com.cool.store.dao.fees; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.entity.fees.WalletAllocationCompanyDO; +import com.cool.store.mapper.fees.WalletAllocationCompanyMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * 平安钱包分账公司配置DAO + * + * @author system + */ +@Repository +@RequiredArgsConstructor +public class WalletAllocationCompanyDAO { + private final WalletAllocationCompanyMapper walletAllocationCompanyMapper; + + public void insertSelective(WalletAllocationCompanyDO company) { + walletAllocationCompanyMapper.insertSelective(company); + } + + /** + * 批量新增 + */ + public void insertBatch(List list) { + if (CollectionUtils.isNotEmpty(list)) { + walletAllocationCompanyMapper.insertBatch(list); + } + } + + public void updateByPrimaryKeySelective(WalletAllocationCompanyDO company) { + walletAllocationCompanyMapper.updateByPrimaryKeySelective(company); + } + + public WalletAllocationCompanyDO selectByPrimaryKey(Long id) { + return walletAllocationCompanyMapper.selectByPrimaryKey(id); + } + + public void deleteByPrimaryKey(Long id) { + walletAllocationCompanyMapper.deleteByPrimaryKey(id); + } + + /** + * 根据分账配置id查询公司列表 + */ + public List selectByConfigId(Long configId) { + Example example = new Example(WalletAllocationCompanyDO.class); + example.createCriteria().andEqualTo("configId", configId); + return walletAllocationCompanyMapper.selectByExample(example); + } + + /** + * 根据配置id列表查询收款公司映射 + */ + public Map> selectGroupByConfigIds(List configIds) { + if (CollectionUtils.isEmpty(configIds)) { + return Collections.emptyMap(); + } + Example example = new Example(WalletAllocationCompanyDO.class); + example.createCriteria().andIn("configId", configIds); + List list = walletAllocationCompanyMapper.selectByExample(example); + return CollStreamUtil.groupByKey(list, WalletAllocationCompanyDO::getConfigId); + } + + /** + * 根据收款公司code查询(用于分页查询条件) + */ + public List selectByPayeeCode(String payeeCode) { + Example example = new Example(WalletAllocationCompanyDO.class); + example.createCriteria().andEqualTo("payeeCode", payeeCode); + return walletAllocationCompanyMapper.selectByExample(example); + } + + /** + * 根据配置id删除 + */ + public void deleteByConfigId(Long configId) { + WalletAllocationCompanyDO companyDO = new WalletAllocationCompanyDO(); + companyDO.setConfigId(configId); + walletAllocationCompanyMapper.delete(companyDO); + } +} + diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationConfigDAO.java new file mode 100644 index 000000000..7a779c3a3 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletAllocationConfigDAO.java @@ -0,0 +1,106 @@ +package com.cool.store.dao.fees; + +import com.cool.store.entity.fees.WalletAllocationConfigDO; +import com.cool.store.mapper.fees.WalletAllocationConfigMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 平安钱包分账配置DAO + * + * @author system + */ +@Repository +@RequiredArgsConstructor +public class WalletAllocationConfigDAO { + private final WalletAllocationConfigMapper walletAllocationConfigMapper; + + public void insertSelective(WalletAllocationConfigDO config) { + walletAllocationConfigMapper.insertSelective(config); + } + + public void updateByPrimaryKeySelective(WalletAllocationConfigDO config) { + walletAllocationConfigMapper.updateByPrimaryKeySelective(config); + } + + public WalletAllocationConfigDO selectByPrimaryKey(Long id) { + return walletAllocationConfigMapper.selectByPrimaryKey(id); + } + + /** + * 根据加盟品牌、招商分部、费用类型查询 + */ + public Boolean existUniqueKey(Integer joinBrand, Long investDivisionId, String expenseType, Long excludeId) { + Example example = new Example(WalletAllocationConfigDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("joinBrand", joinBrand) + .andEqualTo("investDivisionId", investDivisionId) + .andEqualTo("expenseType", expenseType); + if (Objects.nonNull(excludeId)) { + criteria.andNotEqualTo("id", excludeId); + } + return walletAllocationConfigMapper.selectCountByExample(example) > 0; + } + + /** + * 根据加盟品牌、招商分部查询 + * @param joinBrand 家门品牌 + * @param investDivisionId 招商分部id + * @return 配置列表 + */ + public List selectByBrandAndInvest(Integer joinBrand, Long investDivisionId) { + Example example = new Example(WalletAllocationConfigDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("joinBrand", joinBrand) + .andIn("investDivisionId", Arrays.asList(investDivisionId, 0L)); + return walletAllocationConfigMapper.selectByExample(example); + } + + /** + * 分页查询 + */ + public List selectByCondition(Integer joinBrand, Long investDivisionId, Integer expenseType, List configIds) { + Example example = new Example(WalletAllocationConfigDO.class); + Example.Criteria criteria = example.createCriteria(); + if (joinBrand != null) { + criteria.andEqualTo("joinBrand", joinBrand); + } + if (investDivisionId != null) { + criteria.andEqualTo("investDivisionId", investDivisionId); + } + if (expenseType != null) { + criteria.andEqualTo("expenseType", expenseType); + } + if (CollectionUtils.isNotEmpty(configIds)) { + criteria.andIn("id", configIds); + } + example.setOrderByClause("create_time DESC"); + return walletAllocationConfigMapper.selectByExample(example); + } + + /** + * 是否存在其他分部类型 + */ + public boolean existOtherInvestType(Integer joinBrand, String expenseType, Long investDivisionId, Long excludeId) { + Example example = new Example(WalletAllocationConfigDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("joinBrand", joinBrand) + .andEqualTo("expenseType", expenseType); + if (Long.valueOf(0).equals(investDivisionId)) { + criteria.andNotEqualTo("investDivisionId", 0); + } else { + criteria.andEqualTo("investDivisionId", 0); + } + if (Objects.nonNull(excludeId)) { + criteria.andNotEqualTo("id", excludeId); + } + return walletAllocationConfigMapper.selectCountByExample(example) > 0; + } +} + diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletPayInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletPayInfoDAO.java new file mode 100644 index 000000000..0a45e8b20 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/fees/WalletPayInfoDAO.java @@ -0,0 +1,128 @@ +package com.cool.store.dao.fees; + +import com.cool.store.entity.fees.WalletPayInfoDO; +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import com.cool.store.mapper.fees.WalletPayInfoMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 钱包加盟缴费信息DAO + *

+ * + * @author wangff + * @since 2026/1/30 + */ +@Repository +@RequiredArgsConstructor +public class WalletPayInfoDAO { + private final WalletPayInfoMapper walletPayInfoMapper; + + /** + * 是否存在缴费信息 + * @param shopId 门店id + * @return 是否存在 + */ + public boolean existPayInfo(Long shopId) { + Example example = new Example(WalletPayInfoDO.class); + example.createCriteria().andEqualTo("shopId", shopId); + return walletPayInfoMapper.selectCountByExample(example) > 0; + } + + /** + * 批量新增 + */ + public void insertBatch(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + walletPayInfoMapper.insertBatch(list); + } + + /** + * 根据payNo编辑 + */ + public void updateByPayNo(WalletPayInfoDO walletPayInfoDO) { + Example example = new Example(WalletPayInfoDO.class); + example.createCriteria().andEqualTo("payNo", walletPayInfoDO.getPayNo()); + walletPayInfoMapper.updateByExampleSelective(walletPayInfoDO, example); + } + + /** + * 根据门店id查询 + */ + public List getByShopId(Long shopId, String module, Integer payStatus) { + Example example = new Example(WalletPayInfoDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("shopId", shopId) + .andEqualTo("module", module); + if (Objects.nonNull(payStatus)) { + criteria.andEqualTo("payStatus", payStatus); + } + example.setOrderByClause("create_time DESC"); + return walletPayInfoMapper.selectByExample(example); + } + + /** + * 根据门店查询已支付 + */ + public List getPaidByShopId(Long shopId, String module) { + Example example = new Example(WalletPayInfoDO.class); + example.createCriteria() + .andEqualTo("shopId", shopId) + .andEqualTo("module", module) + .andEqualTo("payStatus", AllocationPayStatusEnum.PAID.getStatus()); + example.setOrderByClause("create_time ASC"); + return walletPayInfoMapper.selectByExample(example); + } + + public WalletPayInfoDO getById(Long id) { + return walletPayInfoMapper.selectByPrimaryKey(id); + } + + /** + * 根据付款单号查询 + */ + public WalletPayInfoDO getByPayNo(String payNo) { + Example example = new Example(WalletPayInfoDO.class); + example.createCriteria().andEqualTo("payNo", payNo); + return walletPayInfoMapper.selectOneByExample(example); + } + + public List getByPayNoList(List payNoList) { + Example example = new Example(WalletPayInfoDO.class); + example.createCriteria().andIn("payNo", payNoList); + return walletPayInfoMapper.selectByExample(example); + } + + public void updateByPrimaryKeySelective(WalletPayInfoDO walletPayInfoDO) { + walletPayInfoMapper.updateByPrimaryKeySelective(walletPayInfoDO); + } + + public boolean updateBatchByPayNo(List list) { + if (CollectionUtils.isEmpty(list)) { + return false; + } + return walletPayInfoMapper.updateBatchByPayNo(list) > 0; + } + + /** + * 根据付款单号修改认领状态 + * @param payNo 付款单号 + * @param claimStatus 认领状态 0未认领1已认领 + * @return 是否成功 + */ + public void updateClaimStatusByPayNo(String payNo, Integer claimStatus) { + Example example = new Example(WalletPayInfoDO.class); + example.createCriteria().andEqualTo("payNo", payNo); + WalletPayInfoDO walletPayInfoDO = new WalletPayInfoDO(); + walletPayInfoDO.setClaimStatus(claimStatus); + walletPayInfoMapper.updateByExampleSelective(walletPayInfoDO, example); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/modify/ModifyRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/modify/ModifyRecordDAO.java new file mode 100644 index 000000000..4e9faa214 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/modify/ModifyRecordDAO.java @@ -0,0 +1,48 @@ +package com.cool.store.dao.modify; + +import com.cool.store.entity.modify.ModifyRecordDO; +import com.cool.store.enums.BusinessModuleEnum; +import com.cool.store.mapper.modify.ModifyRecordMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; + +/** + * 业务修改记录DAO + * + * @author system + */ +@Repository +@RequiredArgsConstructor +public class ModifyRecordDAO { + private final ModifyRecordMapper modifyRecordMapper; + + /** + * 新增修改记录 + * @param module 业务模块 + * @param businessId 业务id + * @param updateUserId 更新人id + */ + public void insertRecord(BusinessModuleEnum module, Long businessId, String updateUserId) { + ModifyRecordDO modifyRecord = new ModifyRecordDO(null, module.getCode(), businessId, updateUserId, null); + modifyRecordMapper.insertSelective(modifyRecord); + } + + /** + * 根据模块及业务id查询 + * @param module 模块code + * @param businessId 业务id + * @return 记录列表 + */ + public List getListByBusinessId(String module, Long businessId) { + Example example = new Example(ModifyRecordDO.class); + example.createCriteria() + .andEqualTo("module", module) + .andEqualTo("businessId", businessId); + example.setOrderByClause("update_time desc"); + return modifyRecordMapper.selectByExample(example); + } +} + diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/PreAllocationRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/PreAllocationRecordDAO.java new file mode 100644 index 000000000..0de7a3fc4 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/PreAllocationRecordDAO.java @@ -0,0 +1,55 @@ +package com.cool.store.dao.order; + +import com.cool.store.entity.order.PreAllocationRecordDO; +import com.cool.store.mapper.order.PreAllocationRecordMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class PreAllocationRecordDAO { + + private final PreAllocationRecordMapper preAllocationRecordMapper; + + public boolean insertSelective(PreAllocationRecordDO record) { + return preAllocationRecordMapper.insertSelective(record) > 0; + } + + public PreAllocationRecordDO getById(Long id) { + return preAllocationRecordMapper.getById(id); + } + + public List queryPageByOrderId(Long orderId) { + return preAllocationRecordMapper.queryPageByOrderId(orderId); + } + + public List queryPageByShopId(Long shopId) { + return preAllocationRecordMapper.queryPageByShopId(shopId); + } + + public List queryPageByPayNo(String payNo) { + return preAllocationRecordMapper.queryPageByPayNo(payNo); + } + + public boolean updateStatus(Long id, Integer status) { + return preAllocationRecordMapper.updateStatus(id, status) > 0; + } + + public boolean deleteByShopId(Long shopId) { + return preAllocationRecordMapper.deleteByShopId(shopId) > 0; + } + + public boolean insertBatch(List list) { + return preAllocationRecordMapper.insertBatch(list) > 0; + } + + public boolean updateBatch(List list) { + return preAllocationRecordMapper.updateBatch(list) > 0; + } + + public boolean updateByOrderId(Long orderId) { + return preAllocationRecordMapper.updateByOrderId(orderId) > 0; + } +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderDAO.java new file mode 100644 index 000000000..0916f32a1 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderDAO.java @@ -0,0 +1,73 @@ +package com.cool.store.dao.order; + +import com.cool.store.entity.order.StoreOrderDO; +import com.cool.store.mapper.order.StoreOrderMapper; +import com.cool.store.request.order.PCStoreOrderQueryRequest; +import com.cool.store.vo.order.PCStoreOrderListVO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class StoreOrderDAO { + + private final StoreOrderMapper storeOrderMapper; + + public boolean insertSelective(StoreOrderDO order) { + return storeOrderMapper.insertSelective(order) > 0; + } + + public StoreOrderDO getById(Long id) { + return storeOrderMapper.getById(id); + } + + public List queryPage(Long shopId, Integer status) { + return storeOrderMapper.queryPage(shopId, status); + } + + public List queryPageByLineId(Long lineId, Integer status) { + return storeOrderMapper.queryPageByLineId(lineId, status); + } + + public List queryPCPage(PCStoreOrderQueryRequest request) { + return storeOrderMapper.queryPCPage(request); + } + + public Long count(PCStoreOrderQueryRequest request) { + return storeOrderMapper.count(request); + } + + public boolean updateSelective(StoreOrderDO order) { + return storeOrderMapper.updateByPrimaryKeySelective(order) > 0; + } + + public boolean existsUnfinishedOrder(Long shopId, List statuses) { + if (shopId == null || statuses == null || statuses.isEmpty()) { + return false; + } + return storeOrderMapper.countByShopIdAndStatusIn(shopId, statuses) > 0; + } + + public boolean existsPaidOrder(Long shopId, Integer status) { + if (shopId == null || status == null) { + return false; + } + return storeOrderMapper.countByShopIdAndStatus(shopId, status) > 0; + } + + public StoreOrderDO getLatestByShopIdAndStatus(Long shopId, Integer status) { + if (shopId == null || status == null) { + return null; + } + return storeOrderMapper.getLatestDraftByShopId(shopId, status); + } + + public StoreOrderDO getLatestOrderByShopId(Long shopId) { + if (shopId == null ) { + return null; + } + return storeOrderMapper.getLatestOrderByShopId(shopId); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderOptionSnapshotDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderOptionSnapshotDAO.java new file mode 100644 index 000000000..6774dd05e --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreOrderOptionSnapshotDAO.java @@ -0,0 +1,54 @@ +package com.cool.store.dao.order; + +import com.cool.store.entity.order.StoreOrderOptionSnapshotDO; +import com.cool.store.mapper.order.StoreOrderOptionSnapshotMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.Collections; +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class StoreOrderOptionSnapshotDAO { + + private final StoreOrderOptionSnapshotMapper mapper; + + public boolean insertBatch(List list) { + if (CollectionUtils.isEmpty(list)) { + return false; + } + return mapper.insertBatch(list) > 0; + } + + public List listByOrderId(Long orderId) { + if (orderId == null) { + return Collections.emptyList(); + } + return mapper.listByOrderId(orderId); + } + + public boolean deleteByOrderId(Long orderId) { + if (orderId == null) { + return false; + } + return mapper.deleteByOrderId(orderId) > 0; + } + + public boolean updateSelective(StoreOrderOptionSnapshotDO snapshotDO) { + if (snapshotDO == null || snapshotDO.getId() == null) { + return false; + } + return mapper.updateByPrimaryKeySelective(snapshotDO) > 0; + } + + public void batchUpdateQuantityAndAmount(@Param("list") List list){ + if (CollectionUtils.isEmpty(list)){ + return; + } + mapper.batchUpdateQuantityAndAmount(list); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreWishlistDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreWishlistDAO.java new file mode 100644 index 000000000..bdb772435 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/order/StoreWishlistDAO.java @@ -0,0 +1,53 @@ +package com.cool.store.dao.order; + +import com.cool.store.entity.order.StoreWishlistDO; +import com.cool.store.mapper.order.StoreWishlistMapper; +import com.cool.store.vo.order.MiniStoreWishlistListVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import java.util.Collections; +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class StoreWishlistDAO { + + private final StoreWishlistMapper mapper; + + public boolean insertBatch(List list) { + if (CollectionUtils.isEmpty(list)) { + return false; + } + return mapper.insertBatch(list) > 0; + } + + public boolean softDeleteByLineIdAndStoreTypeAndVersion(Long lineId, Long storeTypeId, String versionNo) { + if (lineId == null || storeTypeId == null || versionNo == null) { + return false; + } + return mapper.softDeleteByLineIdAndStoreTypeAndVersion(lineId, storeTypeId, versionNo) > 0; + } + + public StoreWishlistDO getById(Long id) { + if (id == null) { + return null; + } + return mapper.getById(id); + } + + public List listByLineIdAndStoreTypeAndVersion(Long lineId, Long storeTypeId, String versionNo) { + if (lineId == null || storeTypeId == null || versionNo == null) { + return Collections.emptyList(); + } + return mapper.listByLineIdAndStoreTypeAndVersion(lineId, storeTypeId, versionNo); + } + + public List listByLineId(Long lineId, Long storeTypeId) { + if (lineId == null) { + return Collections.emptyList(); + } + return mapper.listByLineId(lineId, storeTypeId); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeDAO.java new file mode 100644 index 000000000..8db0fb48b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeDAO.java @@ -0,0 +1,119 @@ +package com.cool.store.dao.store; + +import com.cool.store.entity.store.StoreTypeDO; +import com.cool.store.mapper.store.StoreTypeMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.ArrayList; +import java.util.List; + +/** + * 店型 DAO + */ +@Repository +@RequiredArgsConstructor +public class StoreTypeDAO { + private final StoreTypeMapper storeTypeMapper; + + /** 新增 */ + public boolean insertSelective(StoreTypeDO storeTypeDO) { + return storeTypeMapper.insertSelective(storeTypeDO) > 0; + } + + /** 编辑 */ + public boolean updateSelective(StoreTypeDO storeTypeDO) { + return storeTypeMapper.updateByPrimaryKeySelective(storeTypeDO) > 0; + } + + /** 根据主键查询 */ + public StoreTypeDO getById(Long id) { + return storeTypeMapper.selectByPrimaryKey(id); + } + + /** 根据编码查询 */ + public StoreTypeDO getByCode(String code) { + return storeTypeMapper.selectOne(StoreTypeDO.builder().storeTypeCode(code).build()); + } + + /** 批量删除(物理删除,谨慎使用) */ + public boolean deleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + Example example = new Example(StoreTypeDO.class); + example.createCriteria().andIn("id", ids); + return storeTypeMapper.deleteByExample(example) > 0; + } + + public List selectByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return new ArrayList<>(); + } + Example example = new Example(StoreTypeDO.class); + example.createCriteria().andIn("id", ids); + return storeTypeMapper.selectByExample(example); + } + + /** + * 软删除:deleted=true + */ + public boolean softDeleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + StoreTypeDO update = new StoreTypeDO(); + update.setDeleted(true); + Example example = new Example(StoreTypeDO.class); + example.createCriteria().andIn("id", ids); + return storeTypeMapper.updateByExampleSelective(update, example) > 0; + } + + /** + * 启用/停用 + */ + public boolean updateActiveById(Long id, Boolean active) { + if (id == null) { + return false; + } + StoreTypeDO update = new StoreTypeDO(); + update.setId(id); + update.setActive(active); + return storeTypeMapper.updateByPrimaryKeySelective(update) > 0; + } + + /** + * 分页/条件查询 + * @param keyword 名称/编码模糊 + * @param active 是否启用 + * @param brand 品牌精准 + */ + public List queryByCondition(String keyword, Boolean active, String brand) { + return storeTypeMapper.queryByCondition(keyword, active, brand); + } + + /** + * 根据门店类型查询启用的店型 + */ + public List listActiveByStoreType(Integer storeType) { + return storeTypeMapper.listByStoreType(storeType); + } + + /** + * 校验排序是否已存在(全局唯一) + */ + public boolean existsSortOrder(Integer sortOrder, Long excludeId) { + if (sortOrder == null) { + return false; + } + Example example = new Example(StoreTypeDO.class); + Example.Criteria criteria = example.createCriteria().andEqualTo("sortOrder", sortOrder); + criteria.andEqualTo("deleted", 1); + if (excludeId != null) { + criteria.andNotEqualTo("id", excludeId); + } + return storeTypeMapper.selectCountByExample(example) > 0; + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeOptionDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeOptionDAO.java new file mode 100644 index 000000000..7e80e4936 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreTypeOptionDAO.java @@ -0,0 +1,69 @@ +package com.cool.store.dao.store; + +import com.cool.store.entity.CloseStoreAuditRecordDO; +import com.cool.store.entity.store.StoreTypeDO; +import com.cool.store.entity.store.StoreTypeOptionDO; +import com.cool.store.enums.close.CloseStoreAuditStatusEnum; +import com.cool.store.mapper.store.StoreTypeOptionMapper; +import io.swagger.models.auth.In; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; +import java.util.Objects; + +/** + * 店型-选项 DAO + */ +@Repository +@RequiredArgsConstructor +public class StoreTypeOptionDAO { + private final StoreTypeOptionMapper mapper; + + public boolean insertBatchSelective(List list) { + if (CollectionUtils.isEmpty(list)) { + return false; + } + return mapper.insertBatch(list) > 0; + } + + public boolean deleteByStoreTypeId(Long storeTypeId) { + return mapper.delete(StoreTypeOptionDO.builder().storeTypeId(storeTypeId).build()) > 0; + } + + public Integer softDeleteByStoreTypeId(List storeTypeIds){ + Example example = new Example(StoreTypeOptionDO.class); + StoreTypeOptionDO update = new StoreTypeOptionDO(); + update.setVisible(1); + example.createCriteria() + .andIn("storeTypeId", storeTypeIds); + return mapper.updateByExampleSelective(update,example); + } + + public List listByStoreTypeId(Long storeTypeId) { + return mapper.select(StoreTypeOptionDO.builder().storeTypeId(storeTypeId).build()); + } + + public List query(Long storeTypeId, String itemCode) { + Example example = new Example(StoreTypeOptionDO.class); + Example.Criteria criteria = example.createCriteria(); + if (Objects.nonNull(storeTypeId)) { + criteria.andEqualTo("storeTypeId", storeTypeId); + } + if (Objects.nonNull(itemCode)) { + criteria.andEqualTo("itemCode", itemCode); + } + return mapper.selectByExample(example); + } + + public int countByOptionId(Long optionId) { + if (optionId == null) { + return 0; + } + Example example = new Example(StoreTypeOptionDO.class); + example.createCriteria().andEqualTo("optionId", optionId).andEqualTo("visible",0); + return mapper.selectCountByExample(example); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/visit/StoreVisitReservationDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/visit/StoreVisitReservationDAO.java new file mode 100644 index 000000000..23884ce22 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/visit/StoreVisitReservationDAO.java @@ -0,0 +1,49 @@ +package com.cool.store.dao.visit; + +import com.cool.store.entity.visit.StoreVisitReservationDO; +import com.cool.store.mapper.visit.StoreVisitReservationMapper; +import com.cool.store.request.visit.StoreVisitReservationAdminQueryRequest; +import com.cool.store.vo.visit.StoreVisitReservationVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class StoreVisitReservationDAO { + + private final StoreVisitReservationMapper storeVisitReservationMapper; + + public Boolean insertSelective(StoreVisitReservationDO reservationDO) { + return storeVisitReservationMapper.insertSelective(reservationDO) > 0; + } + + public Boolean updateSelective(StoreVisitReservationDO reservationDO) { + return storeVisitReservationMapper.updateByPrimaryKeySelective(reservationDO) > 0; + } + + public StoreVisitReservationDO getById(Long id) { + return storeVisitReservationMapper.selectByPrimaryKey(id); + } + + public List listByMobile(String mobile,Integer status) { + Example example = new Example(StoreVisitReservationDO.class); + Example.Criteria criteria = example.createCriteria() + .andEqualTo("deleted", 0); + if (StringUtils.isNotBlank(mobile)) { + criteria.andEqualTo("mobile", mobile); + } + if (status!=null){ + criteria.andEqualTo("status",status); + } + example.setOrderByClause("create_time DESC"); + return storeVisitReservationMapper.selectByExample(example); + } + + public List adminPage(StoreVisitReservationAdminQueryRequest request) { + return storeVisitReservationMapper.adminPage(request); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletTradeDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletTradeDAO.java new file mode 100644 index 000000000..9e625dd9c --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletTradeDAO.java @@ -0,0 +1,59 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.entity.wallet.WalletTradeDO; +import com.cool.store.mapper.wallet.WalletTradeMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; + +/** + *

+ * 钱包交易单DAO + *

+ * + * @author wangff + * @since 2026/2/4 + */ +@Repository +@RequiredArgsConstructor +public class WalletTradeDAO { + private final WalletTradeMapper walletTradeMapper; + + public void insertSelective(WalletTradeDO walletTradeDO) { + walletTradeMapper.insertSelective(walletTradeDO); + } + + public void insertBatch(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + walletTradeMapper.insertBatch(list); + } + + public WalletTradeDO getByPayNo(String payNo) { + Example example = new Example(WalletTradeDO.class); + example.createCriteria().andEqualTo("payNo", payNo); + return walletTradeMapper.selectOneByExample(example); + } + + public void updateByPrimaryKeySelective(WalletTradeDO walletTradeDO) { + walletTradeMapper.updateByPrimaryKeySelective(walletTradeDO); + } + + public boolean updateByPayNo(WalletTradeDO record) { + if (record == null || record.getPayNo() == null) { + return false; + } + return walletTradeMapper.updateByPayNo(record) > 0; + } + + public boolean updateBatchByPayNo(List list) { + if (CollectionUtils.isEmpty(list)) { + return false; + } + return walletTradeMapper.updateBatchByPayNo(list) > 0; + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemCategoryMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemCategoryMapper.java new file mode 100644 index 000000000..52016578a --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemCategoryMapper.java @@ -0,0 +1,18 @@ +package com.cool.store.mapper.config; + +import com.cool.store.entity.config.ConfigItemCategoryDO; +import com.cool.store.vo.config.ConfigItemBaseInfoVO; +import com.cool.store.vo.config.ConfigItemCategoryBaseInfoVO; +import com.cool.store.vo.config.ConfigItemCategoryVO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ConfigItemCategoryMapper extends Mapper { + + List queryByCondition(@Param("categoryName") String categoryName, + @Param("status") Integer status); + + List queryAllActiveList(); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemMapper.java new file mode 100644 index 000000000..242d9e988 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigItemMapper.java @@ -0,0 +1,22 @@ +package com.cool.store.mapper.config; + +import com.cool.store.entity.config.ConfigItemDO; +import com.cool.store.vo.config.ConfigItemBaseInfoVO; +import com.cool.store.vo.config.ConfigItemCategoryBaseInfoVO; +import com.cool.store.vo.config.ConfigItemVO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ConfigItemMapper extends Mapper { + + List queryByCondition(@Param("itemName") String itemName, + @Param("itemCode") String itemCode, + @Param("categoryId") Long categoryId, + @Param("status") Integer status); + + List queryAllActiveList(); + + int countByCategoryIds(@Param("categoryIds") List categoryIds); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigOptionMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigOptionMapper.java new file mode 100644 index 000000000..7aada351e --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/config/ConfigOptionMapper.java @@ -0,0 +1,12 @@ +package com.cool.store.mapper.config; + +import com.cool.store.entity.config.ConfigOptionDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ConfigOptionMapper extends Mapper { + + List listActiveByIds(@Param("ids") List ids); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/FeeStandardConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/FeeStandardConfigMapper.java new file mode 100644 index 000000000..d907f3cd6 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/FeeStandardConfigMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.fees; + +import com.cool.store.entity.fees.FeeStandardConfigDO; +import tk.mybatis.mapper.common.Mapper; + +public interface FeeStandardConfigMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/PayeeBankConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/PayeeBankConfigMapper.java new file mode 100644 index 000000000..06ee76daf --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/PayeeBankConfigMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.fees; + +import com.cool.store.entity.fees.PayeeBankConfigDO; +import tk.mybatis.mapper.common.Mapper; + +public interface PayeeBankConfigMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/ShopAllocationInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/ShopAllocationInfoMapper.java new file mode 100644 index 000000000..6be61af9b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/ShopAllocationInfoMapper.java @@ -0,0 +1,20 @@ +package com.cool.store.mapper.fees; + +import com.cool.store.entity.fees.ShopAllocationInfoDO; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ShopAllocationInfoMapper extends Mapper { + /** + * 批量新增 + */ + void insertBatch(List list); + + /** + * 批量更新 + */ + void updateBatch(List list); + + void insertOrUpdateBatch(List list); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationCompanyMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationCompanyMapper.java new file mode 100644 index 000000000..34bce4b3f --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationCompanyMapper.java @@ -0,0 +1,14 @@ +package com.cool.store.mapper.fees; + +import com.cool.store.entity.fees.WalletAllocationCompanyDO; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface WalletAllocationCompanyMapper extends Mapper { + + /** + * 批量新增 + */ + void insertBatch(List list); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationConfigMapper.java new file mode 100644 index 000000000..b56e2426f --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletAllocationConfigMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.fees; + +import com.cool.store.entity.fees.WalletAllocationConfigDO; +import tk.mybatis.mapper.common.Mapper; + +public interface WalletAllocationConfigMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletPayInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletPayInfoMapper.java new file mode 100644 index 000000000..a3f291b24 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/fees/WalletPayInfoMapper.java @@ -0,0 +1,15 @@ +package com.cool.store.mapper.fees; + +import com.cool.store.entity.fees.WalletPayInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface WalletPayInfoMapper extends Mapper { + void insertBatch(List list); + + int updateByPayNo(WalletPayInfoDO record); + + int updateBatchByPayNo(@Param("list") List list); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/modify/ModifyRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/modify/ModifyRecordMapper.java new file mode 100644 index 000000000..5b081e00c --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/modify/ModifyRecordMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.modify; + +import com.cool.store.entity.modify.ModifyRecordDO; +import tk.mybatis.mapper.common.Mapper; + +public interface ModifyRecordMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/PreAllocationRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/PreAllocationRecordMapper.java new file mode 100644 index 000000000..d6f68aca0 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/PreAllocationRecordMapper.java @@ -0,0 +1,28 @@ +package com.cool.store.mapper.order; + +import com.cool.store.entity.order.PreAllocationRecordDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface PreAllocationRecordMapper extends Mapper { + + PreAllocationRecordDO getById(@Param("id") Long id); + + List queryPageByOrderId(@Param("orderId") Long orderId); + + List queryPageByShopId(@Param("shopId") Long shopId); + + List queryPageByPayNo(@Param("payNo") String payNo); + + int updateStatus(@Param("id") Long id, @Param("status") Integer status); + + int deleteByShopId(@Param("shopId") Long shopId); + + int insertBatch(@Param("list") List list); + + int updateBatch(@Param("list") List list); + + int updateByOrderId(Long orderId); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderMapper.java new file mode 100644 index 000000000..279609653 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderMapper.java @@ -0,0 +1,41 @@ +package com.cool.store.mapper.order; + +import com.cool.store.entity.order.StoreOrderDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import com.cool.store.request.order.PCStoreOrderQueryRequest; +import com.cool.store.vo.order.PCStoreOrderListVO; + +import java.util.List; + +public interface StoreOrderMapper extends Mapper { + + List queryPage(@Param("shopId") Long shopId, + @Param("status") Integer status); + + List queryPCPage(PCStoreOrderQueryRequest request); + + Long count(PCStoreOrderQueryRequest request); + + List queryPageByLineId(@Param("lineId") Long lineId, + @Param("status") Integer status); + + StoreOrderDO getById(@Param("id") Long id); + + StoreOrderDO getLatestDraftByShopId(@Param("shopId") Long shopId, + @Param("status") Integer status); + + /** + * 获取当前门店 最新的订单 除了已关闭的 + * @param shopId + * @return + */ + StoreOrderDO getLatestOrderByShopId(@Param("shopId") Long shopId); + + int countByShopIdAndStatusIn(@Param("shopId") Long shopId, + @Param("statuses") List statuses); + + int countByShopIdAndStatus(@Param("shopId") Long shopId, + @Param("status") Integer status); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderOptionSnapshotMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderOptionSnapshotMapper.java new file mode 100644 index 000000000..42f85d6cb --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreOrderOptionSnapshotMapper.java @@ -0,0 +1,18 @@ +package com.cool.store.mapper.order; + +import com.cool.store.entity.order.StoreOrderOptionSnapshotDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface StoreOrderOptionSnapshotMapper extends Mapper { + + int insertBatch(@Param("list") List list); + + List listByOrderId(@Param("orderId") Long orderId); + + int deleteByOrderId(@Param("orderId") Long orderId); + + void batchUpdateQuantityAndAmount(@Param("list") List list); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreWishlistMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreWishlistMapper.java new file mode 100644 index 000000000..9bdb82ccc --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/order/StoreWishlistMapper.java @@ -0,0 +1,26 @@ +package com.cool.store.mapper.order; + +import com.cool.store.entity.order.StoreWishlistDO; +import com.cool.store.vo.order.MiniStoreWishlistListVO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface StoreWishlistMapper extends Mapper { + + int insertBatch(@Param("list") List list); + + int softDeleteByLineIdAndStoreTypeAndVersion(@Param("lineId") Long lineId, + @Param("storeTypeId") Long storeTypeId, + @Param("versionNo") String versionNo); + + StoreWishlistDO getById(@Param("id") Long id); + + List listByLineIdAndStoreTypeAndVersion(@Param("lineId") Long lineId, + @Param("storeTypeId") Long storeTypeId, + @Param("versionNo") String versionNo); + + List listByLineId(@Param("lineId") Long lineId, + @Param("storeTypeId") Long storeTypeId); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeMapper.java new file mode 100644 index 000000000..9491ad499 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeMapper.java @@ -0,0 +1,16 @@ +package com.cool.store.mapper.store; + +import com.cool.store.entity.store.StoreTypeDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface StoreTypeMapper extends Mapper { + + List queryByCondition(@Param("keyword") String keyword, + @Param("active") Boolean active, + @Param("brand") String brand); + + List listByStoreType(@Param("storeType") Integer storeType); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeOptionMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeOptionMapper.java new file mode 100644 index 000000000..8ddb05643 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/store/StoreTypeOptionMapper.java @@ -0,0 +1,15 @@ +package com.cool.store.mapper.store; + +import com.cool.store.entity.store.StoreTypeOptionDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface StoreTypeOptionMapper extends Mapper { + + /** + * 批量新增 + */ + int insertBatch(@Param("list") List list); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/visit/StoreVisitReservationMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/visit/StoreVisitReservationMapper.java new file mode 100644 index 000000000..29cd6f6f0 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/visit/StoreVisitReservationMapper.java @@ -0,0 +1,14 @@ +package com.cool.store.mapper.visit; + +import com.cool.store.entity.visit.StoreVisitReservationDO; +import com.cool.store.request.visit.StoreVisitReservationAdminQueryRequest; +import com.cool.store.vo.visit.StoreVisitReservationVO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface StoreVisitReservationMapper extends Mapper { + + List adminPage(@Param("request") StoreVisitReservationAdminQueryRequest request); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletTradeMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletTradeMapper.java new file mode 100644 index 000000000..5054661b2 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletTradeMapper.java @@ -0,0 +1,15 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.WalletTradeDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface WalletTradeMapper extends Mapper { + void insertBatch(List list); + + int updateByPayNo(WalletTradeDO record); + + int updateBatchByPayNo(@Param("list") List list); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml index f047a385e..79b0e361f 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml @@ -134,6 +134,9 @@ franchise_brand, + + use_standard_store, + @@ -230,7 +233,10 @@ #{param.partnerNum}, - #{param.franchiseBrand} + #{param.franchiseBrand}, + + + #{param.useStandardStore} ON DUPLICATE KEY UPDATE @@ -326,7 +332,10 @@ partner_num = #{param.partnerNum}, - franchise_brand = #{param.franchiseBrand} + franchise_brand = #{param.franchiseBrand}, + + + use_standard_store = #{param.useStandardStore} diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index 8498c979d..580624a18 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -58,11 +58,11 @@ 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,store_id,invest_region_id) values + development_manager,want_shop_area_id,investment_manager,store_id,invest_region_id,use_standard_store) 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.storeId},#{shop.investRegionId}) + #{shop.wantShopAreaId},#{shop.investmentManager},#{shop.storeId},#{shop.investRegionId},#{shop.useStandardStore}) @@ -318,7 +318,8 @@ a.detail_address as shopAddress, a.manager_region_id as managerRegionId, a.store_id as storeId, - a.invest_region_id as investRegionId + a.invest_region_id as investRegionId, + a.use_standard_store as useStandardStore 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/config/ConfigItemCategoryMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/config/ConfigItemCategoryMapper.xml new file mode 100644 index 000000000..2c815cef5 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/config/ConfigItemCategoryMapper.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, category_code, category_name, sort_no, image_url, video_url, + status, is_deleted, remark, created_user_id, created_time, updated_user_id, updated_time + + + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/config/ConfigItemMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/config/ConfigItemMapper.xml new file mode 100644 index 000000000..9ac56d335 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/config/ConfigItemMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/config/ConfigOptionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/config/ConfigOptionMapper.xml new file mode 100644 index 000000000..8b186dc16 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/config/ConfigOptionMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + id, category_code, item_code, option_code, option_name, option_description, + option_price, original_option_price, image_url, video_url, + is_active, sort_order, option_remark, + create_time, update_time, option_unit + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/fees/FeeStandardConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/fees/FeeStandardConfigMapper.xml new file mode 100644 index 000000000..de0f1cb2d --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/fees/FeeStandardConfigMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/fees/PayeeBankConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/fees/PayeeBankConfigMapper.xml new file mode 100644 index 000000000..fdad47650 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/fees/PayeeBankConfigMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/fees/ShopAllocationInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/fees/ShopAllocationInfoMapper.xml new file mode 100644 index 000000000..e1f455239 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/fees/ShopAllocationInfoMapper.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + INSERT INTO zxjp_fees_shop_allocation_info (shop_id, expense_type, payee_name, payee_code, amount, status, fail_reason, create_user_id, update_user_id) + VALUES + + (#{item.shopId}, #{item.expenseType}, #{item.payeeName}, #{item.payeeCode}, #{item.amount}, #{item.status}, #{item.failReason}, #{item.createUserId}, #{item.updateUserId}) + + + + + + UPDATE zxjp_fees_shop_allocation_info + + + + WHEN id = #{item.id} THEN #{item.shopId} + + + + + WHEN id = #{item.id} THEN #{item.expenseType} + + + + + WHEN id = #{item.id} THEN #{item.payeeName} + + + + + WHEN id = #{item.id} THEN #{item.payeeCode} + + + + + WHEN id = #{item.id} THEN #{item.amount} + + + + + WHEN id = #{item.id} THEN #{item.status} + + + + + WHEN id = #{item.id} THEN #{item.failReason} + + + + + WHEN id = #{item.id} THEN #{item.updateUserId} + + + + WHERE id IN + + #{item.id} + + + + + INSERT INTO zxjp_fees_shop_allocation_info + (id, shop_id, expense_type, payee_name, payee_code, amount, status, fail_reason, create_user_id, update_user_id) + VALUES + + (#{item.id}, #{item.shopId}, #{item.expenseType}, #{item.payeeName}, #{item.payeeCode}, #{item.amount}, #{item.status}, #{item.failReason}, #{item.createUserId}, #{item.updateUserId}) + + ON DUPLICATE KEY UPDATE + expense_type = VALUES(expense_type), + payee_name = VALUES(payee_name), + payee_code = VALUES(payee_code), + amount = VALUES(amount), + status = VALUES(status), + fail_reason = VALUES(fail_reason), + update_user_id = VALUES(update_user_id) + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationCompanyMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationCompanyMapper.xml new file mode 100644 index 000000000..c1ace4525 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationCompanyMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + INSERT INTO zxjp_fees_wallet_allocation_company (config_id, payee_name, payee_code, create_user_id) + VALUES + + (#{item.configId}, #{item.payeeName}, #{item.payeeCode}, #{item.createUserId}) + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationConfigMapper.xml new file mode 100644 index 000000000..af00d0faa --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/fees/WalletAllocationConfigMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/fees/WalletPayInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/fees/WalletPayInfoMapper.xml new file mode 100644 index 000000000..93887b61d --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/fees/WalletPayInfoMapper.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + INSERT INTO zxjp_fees_wallet_pay_info (shop_id, module, pay_no, pay_user_name, pay_amount, trade_id, pay_status, pay_time, claim_status, expense_types, remark, create_user_id) + VALUES + + (#{item.shopId}, #{item.module}, #{item.payNo}, #{item.payUserName}, #{item.payAmount}, #{item.tradeId}, #{item.payStatus}, #{item.payTime}, #{item.claimStatus}, #{item.expenseTypes}, #{item.remark}, #{item.createUserId}) + + + + + UPDATE zxjp_fees_wallet_pay_info + + shop_id = #{shopId}, + module = #{module}, + pay_user_name = #{payUserName}, + pay_amount = #{payAmount}, + trade_id = #{tradeId}, + pay_status = #{payStatus}, + pay_time = #{payTime}, + claim_status = #{claimStatus}, + expense_types = #{expenseTypes}, + remark = #{remark}, + create_user_id = #{createUserId}, + create_time = create_time + + WHERE pay_no = #{payNo} + + + + + UPDATE zxjp_fees_wallet_pay_info + + shop_id = #{item.shopId}, + module = #{item.module}, + pay_user_name = #{item.payUserName}, + pay_amount = #{item.payAmount}, + trade_id = #{item.tradeId}, + pay_status = #{item.payStatus}, + pay_time = #{item.payTime}, + claim_status = #{item.claimStatus}, + expense_types = #{item.expenseTypes}, + remark = #{item.remark}, + create_user_id = #{item.createUserId}, + create_time = create_time + + WHERE pay_no = #{item.payNo} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/modify/ModifyRecordMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/modify/ModifyRecordMapper.xml new file mode 100644 index 000000000..9273d450f --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/modify/ModifyRecordMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/order/PreAllocationRecordMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/order/PreAllocationRecordMapper.xml new file mode 100644 index 000000000..2295a3461 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/order/PreAllocationRecordMapper.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + id, order_id, shop_id, pay_no, expense_type, payee_name, payee_code, + pay_amount, allocation_status, create_time, update_time + + + + + + + + + + + + UPDATE zxjp_pre_allocation_record + SET allocation_status = #{status}, + update_time = NOW() + WHERE id = #{id} + + + + + DELETE FROM zxjp_pre_allocation_record WHERE shop_id = #{shopId} + + + + INSERT INTO zxjp_pre_allocation_record + (order_id,shop_id,pay_no,expense_type,payee_name,payee_code,pay_amount,allocation_status,create_time) + VALUES + + (#{i.orderId},#{i.shopId},#{i.payNo},#{i.expenseType},#{i.payeeName},#{i.payeeCode}, + #{i.payAmount},#{i.allocationStatus},NOW()) + + + + + + UPDATE zxjp_pre_allocation_record + SET pay_no = #{i.payNo}, + allocation_status = #{i.allocationStatus}, + update_time = NOW() + WHERE id = #{i.id} + + + + + + UPDATE zxjp_pre_allocation_record + SET pay_no = #{i.payNo}, + allocation_status = #{i.allocationStatus}, + update_time = NOW() + where order_id = #{orderId} + + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderMapper.xml new file mode 100644 index 000000000..5e5dc783c --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderMapper.xml @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, shop_id, line_id, partner_name, partner_mobile, investment_manager, + store_type_id, store_type_code, store_type_name, store_type, brand, + franchise_fee, original_franchise_fee, + brand_usage_fee, original_brand_usage_fee, + management_fee, original_management_fee, + system_usage_fee, original_system_usage_fee, + contract_deposit, original_contract_deposit, + design_fee, original_design_fee, + first_order_fee, + store_fixed_amount, option_amount, total_amount, paid_amount, unpaid_amount, + status, create_time, update_time + + + + + + + + + + + + + + + + + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderOptionSnapshotMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderOptionSnapshotMapper.xml new file mode 100644 index 000000000..19372f21a --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/order/StoreOrderOptionSnapshotMapper.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_id, shop_id, store_type_id, option_id, category_code, item_code, + option_code, option_name, option_price, original_option_price, option_remark, image_url, video_url, + quantity, amount, original_amount, create_time, option_unit + + + + INSERT INTO zxjp_store_order_option_snapshot + (order_id, shop_id, store_type_id, option_id, category_code, item_code, + option_code, option_name, option_price, original_option_price, option_remark, image_url, video_url, + quantity, amount, original_amount, create_time, option_unit) + VALUES + + (#{item.orderId}, #{item.shopId}, #{item.storeTypeId}, #{item.optionId}, + #{item.categoryCode}, #{item.itemCode}, #{item.optionCode}, #{item.optionName}, + #{item.optionPrice}, #{item.originalOptionPrice}, #{item.optionRemark}, #{item.imageUrl}, #{item.videoUrl}, + #{item.quantity}, #{item.amount}, #{item.originalAmount}, NOW(), #{item.optionUnit}) + + + + + + + DELETE FROM zxjp_store_order_option_snapshot + WHERE order_id = #{orderId} + + + + UPDATE zxjp_store_order_option_snapshot + SET + quantity = CASE id + + WHEN #{item.id} THEN #{item.quantity} + + ELSE quantity + END, + amount = CASE id + + WHEN #{item.id} THEN #{item.amount} + + ELSE amount + END, + original_amount = CASE id + + WHEN #{item.id} THEN #{item.originalAmount} + + ELSE original_amount + END + WHERE id IN + + #{item.id} + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/order/StoreWishlistMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/order/StoreWishlistMapper.xml new file mode 100644 index 000000000..1d82b4271 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/order/StoreWishlistMapper.xml @@ -0,0 +1,63 @@ + + + + + + INSERT INTO zxjp_store_wishlist + (line_id, store_type_id, option_id, quantity, total_amount, version_no, deleted, create_time, update_time) + VALUES + + (#{item.lineId}, #{item.storeTypeId}, #{item.optionId}, #{item.quantity}, #{item.totalAmount}, #{item.versionNo}, 0, NOW(), NOW()) + + + + + UPDATE zxjp_store_wishlist + SET deleted = 1, + update_time = NOW() + WHERE line_id = #{lineId} + AND store_type_id = #{storeTypeId} + AND version_no = #{versionNo} + AND deleted = 0 + + + + + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeMapper.xml new file mode 100644 index 000000000..4f84b6bef --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, store_type_code, store_type_name, brand, store_type, description, + image_url, video_url, vr_video_url, + franchise_fee, original_franchise_fee, + brand_usage_fee, original_brand_usage_fee, + management_fee, original_management_fee, + system_usage_fee, original_system_usage_fee, + contract_deposit, original_contract_deposit, + design_fee, original_design_fee, + first_order_fee, sort_order, + is_active, deleted, create_time, update_time + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeOptionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeOptionMapper.xml new file mode 100644 index 000000000..499e212b2 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/store/StoreTypeOptionMapper.xml @@ -0,0 +1,40 @@ + + + + + + INSERT INTO zxjp_store_type_option + ( + store_type_id, + option_id, + category_code, + item_code, + is_default, + default_quantity, + allow_quantity_edit, + sort_order, + option_price, + top_preview_image, + create_time, + update_time + ) + VALUES + + ( + #{item.storeTypeId}, + #{item.optionId}, + #{item.categoryCode}, + #{item.itemCode}, + #{item.isDefault}, + #{item.defaultQuantity}, + #{item.allowQuantityEdit}, + #{item.sortOrder}, + #{item.optionPrice}, + #{item.topPreviewImage}, + NOW(), + NOW() + ) + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/visit/StoreVisitReservationMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/visit/StoreVisitReservationMapper.xml new file mode 100644 index 000000000..3516643b2 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/visit/StoreVisitReservationMapper.xml @@ -0,0 +1,42 @@ + + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletTradeMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletTradeMapper.xml new file mode 100644 index 000000000..015642af4 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletTradeMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + INSERT INTO zxjp_wallet_trade (module, pay_no, trade_id, type, pay_user_name, pay_amount, pay_status, pay_time, remark, create_user_id) + VALUES + + (#{item.module}, #{item.payNo}, #{item.tradeId}, #{item.type}, #{item.payUserName}, #{item.payAmount}, #{item.payStatus}, #{item.payTime}, #{item.remark}, #{item.createUserId}) + + + + + UPDATE zxjp_wallet_trade + + module = #{module}, + trade_id = #{tradeId}, + type = #{type}, + pay_user_name = #{payUserName}, + pay_amount = #{payAmount}, + pay_status = #{payStatus}, + pay_time = #{payTime}, + remark = #{remark}, + create_user_id = #{createUserId}, + create_time = create_time + + WHERE pay_no = #{payNo} + + + + + UPDATE zxjp_wallet_trade + + module = #{item.module}, + trade_id = #{item.tradeId}, + type = #{item.type}, + pay_user_name = #{item.payUserName}, + pay_amount = #{item.payAmount}, + pay_status = #{item.payStatus}, + pay_time = #{item.payTime}, + remark = #{item.remark}, + create_user_id = #{item.createUserId}, + create_time = create_time + + WHERE pay_no = #{item.payNo} + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ExportBranchShopDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ExportBranchShopDTO.java index ec735265d..6790b22d2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/ExportBranchShopDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ExportBranchShopDTO.java @@ -2,6 +2,7 @@ package com.cool.store.dto; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.cool.store.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; 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 18612848c..bdda0f376 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 @@ -58,4 +58,6 @@ public class PreparationDTO { private String storeId; private Long investRegionId; + + private Integer useStandardStore; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/standardStore/StoreOrderDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/standardStore/StoreOrderDTO.java new file mode 100644 index 000000000..3dccacc30 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/standardStore/StoreOrderDTO.java @@ -0,0 +1,48 @@ +package com.cool.store.dto.standardStore; + +import com.cool.store.dto.region.BigRegionDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Auther zx_szh + * @Date 2026/2/6 16:31 + * @Version 1.0 + */ +@Data +public class StoreOrderDTO { + @ApiModelProperty("订单ID") + private Long orderId; + @ApiModelProperty("订单编号") + private String orderNo; + @ApiModelProperty("加盟商名字") + private String partnerName; + @ApiModelProperty("加盟商手机号") + private String partnerMobile; + @ApiModelProperty("品牌") + private String brand; + @ApiModelProperty("品牌名称") + private String brandName; + @ApiModelProperty("门店类型") + private String storeType; + @ApiModelProperty("门店类型名称") + private String storeTypeName; + @ApiModelProperty("店型名称") + private String name; + @ApiModelProperty("订单总额") + private BigDecimal totalAmount; + @ApiModelProperty("下单时间") + private Date orderTime; + @ApiModelProperty("加盟类费用总额") + private BigDecimal storeFixedAmount; + @ApiModelProperty("已支付金额") + private BigDecimal paidAmount; + @ApiModelProperty("未支付金额") + private BigDecimal unpaidAmount; + @ApiModelProperty("状态") + private Integer status; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BatchTransferDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BatchTransferDTO.java new file mode 100644 index 000000000..5cc70d59f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BatchTransferDTO.java @@ -0,0 +1,41 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Auther zx_szh + * @Date 2026/2/5 13:54 + * @Version 1.0 + */ +@Data +public class BatchTransferDTO { + + @ApiModelProperty("交易状态1.成功 2.失败 3.处理中") + private Integer tradeStatus; + + @ApiModelProperty("批量转账数据") + private List transArray; + + @Data + public static class TransDataRequest { + + @ApiModelProperty("业务系统付款单号(如 CRM 单号),业务系统单号") + private String reqNo; + @ApiModelProperty("费用科目") + private Integer feeItemId; + @ApiModelProperty("公司编号") + private String companyCode; + @ApiModelProperty("公司编号绑定多个账户时,必传") + private String companyAccountCode; + @ApiModelProperty("金额(元)") + private String amount; + @ApiModelProperty("备注") + private String remark; + @ApiModelProperty("交易流水id") + private String tradeId; + } + +} 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 index 18aa95d27..2500e0117 100644 --- 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 @@ -19,7 +19,4 @@ public class CompanyDTO { @ApiModelProperty(value = "公司名称") private String companyName; - @ApiModelProperty(value = "公司账户") - private String companyAccountNo; - } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java index 648836e45..4b003902f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java @@ -76,4 +76,11 @@ public class FranchiseFeeDO { @ApiModelProperty("收银费(系统费)") private String cashierFee; + @Column(name = "pay_type") + @ApiModelProperty("付款方式 1线下支付 2平安钱包支付") + private Integer payType; + + @Column(name = "is_refund") + @ApiModelProperty("是否退款,0否1是") + private Integer isRefund; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInfoDO.java index 21a984dce..199a119e2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInfoDO.java @@ -178,6 +178,10 @@ public class LineInfoDO { @Column(name = "join_mode") private Integer joinMode; + @Column(name = "franchise_brand") private String franchiseBrand; + + @Column(name = "use_standard_store") + private Integer useStandardStore; } \ 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 02a883212..7be007bb2 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 @@ -168,6 +168,9 @@ public class ShopInfoDO { @Column(name = "operations_consultant") private String operationsConsultant; + @Column(name = "use_standard_store") + private Integer useStandardStore; + @Column(name = "plan_open_date") private Date planOpenDate; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemCategoryDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemCategoryDO.java new file mode 100644 index 000000000..91aa51e6e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemCategoryDO.java @@ -0,0 +1,52 @@ +package com.cool.store.entity.config; + +import lombok.Data; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Data +@Table(name = "zxjp_cfg_item_category") +public class ConfigItemCategoryDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "category_code") + private String categoryCode; + + @Column(name = "category_name") + private String categoryName; + + @Column(name = "sort_no") + private Integer sortNo; + + @Column(name = "image_url") + private String imageUrl; + + @Column(name = "video_url") + private String videoUrl; + + @Column(name = "status") + private Integer status; + + @Column(name = "is_deleted") + private Integer isDeleted; + + @Column(name = "remark") + private String remark; + + @Column(name = "created_user_id") + private String createdUserId; + + @Column(name = "created_time") + private Date createdTime; + + @Column(name = "updated_user_id") + private String updatedUserId; + + @Column(name = "updated_time") + private Date updatedTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemDO.java new file mode 100644 index 000000000..b33becf25 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigItemDO.java @@ -0,0 +1,53 @@ +package com.cool.store.entity.config; + +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Data +@Table(name = "zxjp_cfg_item") +public class ConfigItemDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "item_code") + private String itemCode; + + @Column(name = "item_name") + private String itemName; + + @Column(name = "category_id") + private Long categoryId; + + @Column(name = "sort_no") + private Integer sortNo; + + @Column(name = "status") + private Integer status; + + @Column(name = "is_deleted") + private Integer isDeleted; + + @Column(name = "remark") + private String remark; + + @Column(name = "created_user_id") + private String createdUserId; + + @Column(name = "created_time") + private Date createdTime; + + @Column(name = "updated_user_id") + private String updatedUserId; + + @Column(name = "updated_time") + private Date updatedTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigOptionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigOptionDO.java new file mode 100644 index 000000000..222aa4cbf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/config/ConfigOptionDO.java @@ -0,0 +1,75 @@ +package com.cool.store.entity.config; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 选项模板表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_config_option") +public class ConfigOptionDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "category_code") + private String categoryCode; + + @Column(name = "item_code") + private String itemCode; + + @Column(name = "option_code") + private String optionCode; + + @Column(name = "option_name") + private String optionName; + + @Column(name = "option_description") + private String optionDescription; + + @Column(name = "option_price") + private BigDecimal optionPrice; + + @Column(name = "original_option_price") + private BigDecimal originalOptionPrice; + + @Column(name = "option_unit") + private String optionUnit; + + @Column(name = "image_url") + private String imageUrl; + + @Column(name = "video_url") + private String videoUrl; + + @Column(name = "is_active") + private Boolean active; + + @Column(name = "sort_order") + private Integer sortOrder; + + @Column(name = "option_remark") + private String optionRemark; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "update_time") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/FeeStandardConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/FeeStandardConfigDO.java new file mode 100644 index 000000000..59e5287a1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/FeeStandardConfigDO.java @@ -0,0 +1,50 @@ +package com.cool.store.entity.fees; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.*; + +/** + * 加盟费用标准收费额配置 + */ +@Table(name = "zxjp_fees_fee_standard_config") +@Data +public class FeeStandardConfigDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 加盟品牌:1-正新鸡排,2-正新三明治,3-正烧记,4-大鼓米线,5-串小妹,6-茂掌柜 + */ + @Column(name = "join_brand") + private Integer joinBrand; + + /** + * 费用类型 + */ + @Column(name = "expense_type") + private String expenseType; + + /** + * 金额 + */ + private BigDecimal amount; + + /** + * 创建人id + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/PayeeBankConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/PayeeBankConfigDO.java new file mode 100644 index 000000000..8acc8bf58 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/PayeeBankConfigDO.java @@ -0,0 +1,80 @@ +package com.cool.store.entity.fees; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +/** + * 线下收款银行配置 + */ +@Table(name = "zxjp_fees_payee_bank_config") +@Data +public class PayeeBankConfigDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 加盟品牌:1-正新鸡排,2-正新三明治,3-正烧记,4-大鼓米线,5-串小妹,6-茂掌柜 + */ + @Column(name = "join_brand") + private Integer joinBrand; + + /** + * 招商分部id,0全部 + */ + @Column(name = "invest_division_id") + private Long investDivisionId; + + /** + * 付款方式,同缴纳加盟费支付方式 + */ + @Column(name = "pay_type") + private Integer payType; + + /** + * 收款公司名称 + */ + @Column(name = "payee_name") + private String payeeName; + + /** + * 收款公司code + */ + @Column(name = "payee_code") + private String payeeCode; + + /** + * 收款账户 + */ + @Column(name = "payee_account") + private String payeeAccount; + + /** + * 收款银行 + */ + @Column(name = "payee_bank") + private String payeeBank; + + /** + * 收款银行开户行 + */ + @Column(name = "payee_bank_branch") + private String payeeBankBranch; + + /** + * 创建人id + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/ShopAllocationInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/ShopAllocationInfoDO.java new file mode 100644 index 000000000..588c78144 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/ShopAllocationInfoDO.java @@ -0,0 +1,91 @@ +package com.cool.store.entity.fees; + +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_fees_shop_allocation_info") +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ShopAllocationInfoDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 门店id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 费用类型 + */ + @Column(name = "expense_type") + private String expenseType; + + /** + * 收款公司名称 + */ + @Column(name = "payee_name") + private String payeeName; + + /** + * 收款公司code + */ + @Column(name = "payee_code") + private String payeeCode; + + /** + * 金额 + */ + private BigDecimal amount; + + /** + * 分账状态,1已分账 2分账失败 3待分账 + */ + private Integer status; + + /** + * 分账失败原因 + */ + @Column(name = "fail_reason") + private String failReason; + + /** + * 创建人id + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新人id + */ + @Column(name = "update_user_id") + private String updateUserId; + + /** + * 更新时间 + */ + @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/entity/fees/WalletAllocationCompanyDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletAllocationCompanyDO.java new file mode 100644 index 000000000..706af5e93 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletAllocationCompanyDO.java @@ -0,0 +1,50 @@ +package com.cool.store.entity.fees; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +/** + * 平安钱包分账公司配置 + */ +@Table(name = "zxjp_fees_wallet_allocation_company") +@Data +public class WalletAllocationCompanyDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 分账公司配置id + */ + @Column(name = "config_id") + private Long configId; + + /** + * 收款公司名称 + */ + @Column(name = "payee_name") + private String payeeName; + + /** + * 收款公司code + */ + @Column(name = "payee_code") + private String payeeCode; + + /** + * 创建人id + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletAllocationConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletAllocationConfigDO.java new file mode 100644 index 000000000..8135c2031 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletAllocationConfigDO.java @@ -0,0 +1,50 @@ +package com.cool.store.entity.fees; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +/** + * 平安钱包分账配置 + */ +@Table(name = "zxjp_fees_wallet_allocation_config") +@Data +public class WalletAllocationConfigDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 加盟品牌:1-正新鸡排,2-正新三明治,3-正烧记,4-大鼓米线,5-串小妹,6-茂掌柜 + */ + @Column(name = "join_brand") + private Integer joinBrand; + + /** + * 招商分部id,0全部 + */ + @Column(name = "invest_division_id") + private Long investDivisionId; + + /** + * 费用类型 + */ + @Column(name = "expense_type") + private String expenseType; + + /** + * 创建人id + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletPayInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletPayInfoDO.java new file mode 100644 index 000000000..1d1b5e634 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/fees/WalletPayInfoDO.java @@ -0,0 +1,132 @@ +package com.cool.store.entity.fees; + +import com.cool.store.entity.wallet.WalletTradeDO; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import javax.persistence.*; + +/** + * 钱包加盟缴费信息 + */ +@Table(name = "zxjp_fees_wallet_pay_info") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WalletPayInfoDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 门店id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 业务模块 + */ + @Column(name = "module") + private String module; + + /** + * 付款单号 + */ + @Column(name = "pay_no") + private String payNo; + + /** + * 付款人 + */ + @Column(name = "pay_user_name") + private String payUserName; + + /** + * 付款金额 + */ + @Column(name = "pay_amount") + private BigDecimal payAmount; + + /** + * 交易流水号 + */ + @Column(name = "trade_id") + private String tradeId; + + /** + * 付款状态,1已支付、2支付失败 3支付中 + */ + @Column(name = "pay_status") + private Integer payStatus; + + /** + * 支付时间 + */ + @Column(name = "pay_time") + private Date payTime; + + /** + * 认领状态0-待认领,1-已认领 + */ + @Column(name = "claim_status") + private Integer claimStatus; + + /** + * 费用类型列表 + */ + @Column(name = "expense_types") + private String expenseTypes; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人id + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + public WalletPayInfoDO(String module, Long shopId, String payNo, String payUserName, BigDecimal payAmount, String expenseType, String createUserId, String tradeId) { + this.shopId = shopId; + this.payNo = payNo; + this.payUserName = payUserName; + this.payAmount = payAmount; + this.payTime = new Date(); + this.claimStatus = 0; + this.expenseTypes = expenseType; + this.createUserId = createUserId; + this.module = module; + this.tradeId = tradeId; + } + + public WalletTradeDO convertToTradeDO(String module) { + WalletTradeDO walletTradeDO = new WalletTradeDO(); + walletTradeDO.setModule(module); + walletTradeDO.setPayNo(this.payNo); + walletTradeDO.setTradeId(this.tradeId); + walletTradeDO.setType(1); + walletTradeDO.setPayUserName(this.payUserName); + walletTradeDO.setPayAmount(this.payAmount); + walletTradeDO.setPayStatus(this.payStatus); + walletTradeDO.setPayTime(this.payTime); + walletTradeDO.setRemark(this.remark); + walletTradeDO.setCreateUserId(this.createUserId); + return walletTradeDO; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/modify/ModifyRecordDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/modify/ModifyRecordDO.java new file mode 100644 index 000000000..f9f150feb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/modify/ModifyRecordDO.java @@ -0,0 +1,47 @@ +package com.cool.store.entity.modify; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import javax.persistence.*; + +/** + * 业务修改记录 + */ +@Table(name = "zxjp_modify_record") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ModifyRecordDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 模块 + */ + private String module; + + /** + * 业务id + */ + @Column(name = "business_id") + private Long businessId; + + /** + * 更新人id + */ + @Column(name = "update_user_id") + private String updateUserId; + + /** + * 更新时间 + */ + @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/entity/order/PreAllocationRecordDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/PreAllocationRecordDO.java new file mode 100644 index 000000000..58ff74434 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/PreAllocationRecordDO.java @@ -0,0 +1,56 @@ +package com.cool.store.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 预分账明细表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_pre_allocation_record") +public class PreAllocationRecordDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "order_id") + private Long orderId; + + @Column(name = "shop_id") + private Long shopId; + + @Column(name = "pay_no") + private String payNo; + + @Column(name = "expense_type") + private String expenseType; + + @Column(name = "payee_name") + private String payeeName; + + @Column(name = "payee_code") + private String payeeCode; + + @Column(name = "pay_amount") + private BigDecimal payAmount; + + @Column(name = "allocation_status") + private Integer allocationStatus; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "update_time") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderDO.java new file mode 100644 index 000000000..0f19d2105 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderDO.java @@ -0,0 +1,134 @@ +package com.cool.store.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_store_order") +public class StoreOrderDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "order_no") + private String orderNo; + + @Column(name = "shop_id") + private Long shopId; + + @Column(name = "line_id") + private Long lineId; + + @Column(name = "partner_name") + private String partnerName; + + @Column(name = "partner_mobile") + private String partnerMobile; + + @Column(name = "investment_manager") + private String investmentManager; + + @Column(name = "store_type_id") + private Long storeTypeId; + + @Column(name = "store_type_code") + private String storeTypeCode; + + @Column(name = "store_type_name") + private String storeTypeName; + + @Column(name = "store_type") + private Integer storeType; + + @Column(name = "brand") + private String brand; + + @Column(name = "franchise_fee") + private BigDecimal franchiseFee; + + @Column(name = "original_franchise_fee") + private BigDecimal originalFranchiseFee; + + @Column(name = "brand_usage_fee") + private BigDecimal brandUsageFee; + + @Column(name = "original_brand_usage_fee") + private BigDecimal originalBrandUsageFee; + + @Column(name = "management_fee") + private BigDecimal managementFee; + + @Column(name = "original_management_fee") + private BigDecimal originalManagementFee; + + @Column(name = "system_usage_fee") + private BigDecimal systemUsageFee; + + @Column(name = "original_system_usage_fee") + private BigDecimal originalSystemUsageFee; + + @Column(name = "contract_deposit") + private BigDecimal contractDeposit; + + @Column(name = "original_contract_deposit") + private BigDecimal originalContractDeposit; + + @Column(name = "design_fee") + private BigDecimal designFee; + + @Column(name = "original_design_fee") + private BigDecimal originalDesignFee; + + @Column(name = "first_order_fee") + private BigDecimal firstOrderFee; + + @Column(name = "store_fixed_amount") + private BigDecimal storeFixedAmount; + + @Column(name = "original_store_fixed_amount") + private BigDecimal originalStoreFixedAmount; + + @Column(name = "option_amount") + private BigDecimal optionAmount; + + @Column(name = "original_option_amount") + private BigDecimal originalOptionAmount; + + @Column(name = "total_amount") + private BigDecimal totalAmount; + + @Column(name = "original_total_amount") + private BigDecimal originalTotalAmount; + + @Column(name = "paid_amount") + private BigDecimal paidAmount; + + @Column(name = "unpaid_amount") + private BigDecimal unpaidAmount; + + @Column(name = "status") + private Integer status; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "pay_time") + private Date payTime; + + @Column(name = "update_time") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderOptionSnapshotDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderOptionSnapshotDO.java new file mode 100644 index 000000000..7baef5c7e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreOrderOptionSnapshotDO.java @@ -0,0 +1,80 @@ +package com.cool.store.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_store_order_option_snapshot") +public class StoreOrderOptionSnapshotDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "order_id") + private Long orderId; + + @Column(name = "shop_id") + private Long shopId; + + @Column(name = "store_type_id") + private Long storeTypeId; + + @Column(name = "option_id") + private Long optionId; + + @Column(name = "category_code") + private String categoryCode; + + @Column(name = "item_code") + private String itemCode; + + @Column(name = "option_code") + private String optionCode; + + @Column(name = "option_name") + private String optionName; + + @Column(name = "option_price") + private BigDecimal optionPrice; + + @Column(name = "original_option_price") + private BigDecimal originalOptionPrice; + + @Column(name = "option_remark") + private String optionRemark; + + @Column(name = "image_url") + private String imageUrl; + + @Column(name = "video_url") + private String videoUrl; + + @Column(name = "quantity") + private BigDecimal quantity; + + @Column(name = "amount") + private BigDecimal amount; + + @Column(name = "original_amount") + private BigDecimal originalAmount; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "option_unit") + private String optionUnit; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreWishlistDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreWishlistDO.java new file mode 100644 index 000000000..79e86b4f9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/order/StoreWishlistDO.java @@ -0,0 +1,53 @@ +package com.cool.store.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_store_wishlist") +public class StoreWishlistDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "line_id") + private Long lineId; + + @Column(name = "store_type_id") + private Long storeTypeId; + + @Column(name = "option_id") + private Long optionId; + + @Column(name = "quantity") + private BigDecimal quantity; + + @Column(name = "total_amount") + private BigDecimal totalAmount; + + @Column(name = "version_no") + private String versionNo; + + @Column(name = "deleted") + private Integer deleted; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "update_time") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeDO.java new file mode 100644 index 000000000..f9c353fc8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeDO.java @@ -0,0 +1,129 @@ +package com.cool.store.entity.store; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 店型主表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_store_type") +public class StoreTypeDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** 店型编码 */ + @Column(name = "store_type_code") + private String storeTypeCode; + + /** 店型名称 */ + @Column(name = "store_type_name") + private String storeTypeName; + + /** 品牌 */ + private String brand; + + /** 门店类型 */ + @Column(name = "store_type") + private Integer storeType; + + /** 店型描述 */ + private String description; + + /** 主图 */ + @Column(name = "image_url") + private String imageUrl; + + /** 视频 */ + @Column(name = "video_url") + private String videoUrl; + + /** 720°VR */ + @Column(name = "vr_video_url") + private String vrVideoUrl; + + /** 加盟费 */ + @Column(name = "franchise_fee") + private BigDecimal franchiseFee; + + /** 加盟费原价 */ + @Column(name = "original_franchise_fee") + private BigDecimal originalFranchiseFee; + + /** 品牌使用费 */ + @Column(name = "brand_usage_fee") + private BigDecimal brandUsageFee; + + /** 品牌使用费原价 */ + @Column(name = "original_brand_usage_fee") + private BigDecimal originalBrandUsageFee; + + /** 管理费 */ + @Column(name = "management_fee") + private BigDecimal managementFee; + + /** 管理费原价 */ + @Column(name = "original_management_fee") + private BigDecimal originalManagementFee; + + /** 系统使用费 */ + @Column(name = "system_usage_fee") + private BigDecimal systemUsageFee; + + /** 系统使用费原价 */ + @Column(name = "original_system_usage_fee") + private BigDecimal originalSystemUsageFee; + + /** 合同保证金 */ + @Column(name = "contract_deposit") + private BigDecimal contractDeposit; + + /** 合同保证金原价 */ + @Column(name = "original_contract_deposit") + private BigDecimal originalContractDeposit; + + /** 系统设计费 */ + @Column(name = "design_fee") + private BigDecimal designFee; + + /** 系统设计费原价 */ + @Column(name = "original_design_fee") + private BigDecimal originalDesignFee; + + /** + * 首次订货费用 + */ + @Column(name = "first_order_fee") + private BigDecimal firstOrderFee; + + /** 排序 */ + @Column(name = "sort_order") + private Integer sortOrder; + + /** 是否启用 */ + @Column(name = "is_active") + private Boolean active; + + /** 删除标识 */ + private Boolean deleted; + + /** 创建时间 */ + @Column(name = "create_time") + private Date createTime; + + /** 更新时间 */ + @Column(name = "update_time") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeOptionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeOptionDO.java new file mode 100644 index 000000000..4ddbbfc3b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/store/StoreTypeOptionDO.java @@ -0,0 +1,65 @@ +package com.cool.store.entity.store; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 店型-选项映射表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_store_type_option") +public class StoreTypeOptionDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "store_type_id") + private Long storeTypeId; + + @Column(name = "option_id") + private Long optionId; + + @Column(name = "category_code") + private String categoryCode; + + @Column(name = "item_code") + private String itemCode; + + @Column(name = "is_default") + private Integer isDefault; + + @Column(name = "default_quantity") + private BigDecimal defaultQuantity; + + @Column(name = "allow_quantity_edit") + private Integer allowQuantityEdit; + + @Column(name = "is_visible") + private Integer visible; + + @Column(name = "sort_order") + private Integer sortOrder; + + @Column(name = "option_price") + private BigDecimal optionPrice; + + @Column(name = "top_preview_image" ) + private String topPreviewImage; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "update_time") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/visit/StoreVisitReservationDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/visit/StoreVisitReservationDO.java new file mode 100644 index 000000000..d5d5d9b9c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/visit/StoreVisitReservationDO.java @@ -0,0 +1,63 @@ +package com.cool.store.entity.visit; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +/** + * 预约到店 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "zxjp_store_visit_reservation") +public class StoreVisitReservationDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "intent_city_id") + private Long intentCityId; + + @Column(name = "contact_name") + private String contactName; + + private String mobile; + + @Column(name = "visit_time") + private Date visitTime; + + /** + * 10-待确认 20-待看店 30-已到店 40-已取消 + */ + private Integer status; + + private String remark; + + @Column(name = "cancel_reason") + private String cancelReason; + + @Column(name = "current_follow_user") + private String currentFollowUser; + + @Column(name = "service_user_id") + private String serviceUserId; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "update_time") + private Date updateTime; + + private Integer deleted; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletTradeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletTradeDO.java new file mode 100644 index 000000000..560194522 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletTradeDO.java @@ -0,0 +1,88 @@ +package com.cool.store.entity.wallet; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.*; + +/** + * 钱包交易单 + */ +@Table(name = "zxjp_wallet_trade") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WalletTradeDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 业务模块 + */ + private String module; + + /** + * 单号 + */ + @Column(name = "pay_no") + private String payNo; + + /** + * 交易流水号 + */ + @Column(name = "trade_id") + private String tradeId; + + /** + * 交易类型,1转账 + */ + private Integer type; + + /** + * 付款人 + */ + @Column(name = "pay_user_name") + private String payUserName; + + /** + * 付款金额 + */ + @Column(name = "pay_amount") + private BigDecimal payAmount; + + /** + * 付款状态,1已支付、2支付失败、3支付中 + */ + @Column(name = "pay_status") + private Integer payStatus; + + /** + * 支付时间 + */ + @Column(name = "pay_time") + private Date payTime; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人id + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddBranchShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddBranchShopRequest.java index 178d32ac4..7c1d5228f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/AddBranchShopRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddBranchShopRequest.java @@ -51,6 +51,9 @@ public class AddBranchShopRequest { @ApiModelProperty("招商所属区域 20251224新增") private Long investRegionId; + @ApiModelProperty("使用标准店1-是 0-否") + private Integer useStandardStore; + public ShopInfoDO toDO(AddBranchShopRequest request, LineInfoDO lineInfo) { ShopInfoDO shopInfoDO = new ShopInfoDO(); shopInfoDO.setLineId(request.getLineId()); @@ -69,6 +72,7 @@ public class AddBranchShopRequest { shopInfoDO.setFranchiseBrand(request.getFranchiseBrand()); shopInfoDO.setManagerRegionId(request.getManagerRegionId()); shopInfoDO.setInvestRegionId(request.getInvestRegionId()); + shopInfoDO.setUseStandardStore(request.getUseStandardStore()); return shopInfoDO; } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java index c0ec45835..ed56f9c61 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java @@ -1,11 +1,13 @@ package com.cool.store.request; import com.cool.store.entity.FranchiseFeeDO; -import io.swagger.annotations.ApiModel; +import com.cool.store.request.fees.ShopAllocationInfoRequest; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotEmpty; import java.util.Date; +import java.util.List; @Data public class FranchiseFeeRequest { @@ -47,6 +49,10 @@ public class FranchiseFeeRequest { @ApiModelProperty("收银费(系统费)(三明治使用)") private String cashierFee; + @ApiModelProperty("平安钱包分账信息") +// @NotEmpty(message = "平安钱包分账信息不能为空") + private List shopAllocationInfoList; + public FranchiseFeeDO toFranchiseFeeDO() { FranchiseFeeDO franchiseFeeDO = new FranchiseFeeDO(); franchiseFeeDO.setShopId(this.shopId); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchisePayTypeUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchisePayTypeUpdateRequest.java new file mode 100644 index 000000000..4b61d649e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchisePayTypeUpdateRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 加盟费支付方式修改Request + *

+ * + * @author wangff + * @since 2026/1/28 + */ +@Data +public class FranchisePayTypeUpdateRequest { + @ApiModelProperty("门店id") + @NotNull(message = "门店id不能为空") + private Long shopId; + + @ApiModelProperty("支付方式,1线下支付 2平安钱包支付") + @NotNull(message = "支付方式不能为空") + private Integer payType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/JoinIntentionRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/JoinIntentionRequest.java index 1afdbc555..b9c2e5de6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/JoinIntentionRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/JoinIntentionRequest.java @@ -8,6 +8,7 @@ import lombok.Data; import org.apache.commons.lang3.StringUtils; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; @Data public class JoinIntentionRequest { @@ -123,6 +124,10 @@ public class JoinIntentionRequest { @ApiModelProperty("是否愿意驻点大于等于90小时") private Integer willingStationDuration; + + @ApiModelProperty + @NotNull + private Integer useStandardStore; public LineInfoDO toLineInfoDO() { diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryQueryRequest.java new file mode 100644 index 000000000..f805285d5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryQueryRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request.config; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ConfigItemCategoryQueryRequest extends PageBasicInfo { + + @ApiModelProperty("配置大类名称(模糊)") + private String categoryName; + + @ApiModelProperty("状态:1启用,0禁用") + private Integer status = 1; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryUpdateRequest.java new file mode 100644 index 000000000..3947afbb0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemCategoryUpdateRequest.java @@ -0,0 +1,40 @@ +package com.cool.store.request.config; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class ConfigItemCategoryUpdateRequest { + + @ApiModelProperty("主键ID") + @NotNull(message = "ID不能为空", groups = UpdateGroup.class) + private Long id; + + @ApiModelProperty("配置大类编码") + private String categoryCode; + + @ApiModelProperty("配置大类名称") + @NotBlank(message = "配置大类名称不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String categoryName; + + @ApiModelProperty("显示排序") + @NotNull(message = "显示排序不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer sortNo; + + @ApiModelProperty("图片URL") + private String imageUrl; + + @ApiModelProperty("视频URL") + private String videoUrl; + + @ApiModelProperty("状态:1启用,0禁用") + private Integer status; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemQueryRequest.java new file mode 100644 index 000000000..2bf2f55dc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemQueryRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.config; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ConfigItemQueryRequest extends PageBasicInfo { + + @ApiModelProperty("配置项名称(模糊)") + private String itemName; + + @ApiModelProperty("配置项编码") + private String itemCode; + + @ApiModelProperty("配置大类ID") + private Long categoryId; + + @ApiModelProperty("状态:1启用,0禁用") + private Integer status = 1; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemUpdateRequest.java new file mode 100644 index 000000000..f9257c4f6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigItemUpdateRequest.java @@ -0,0 +1,38 @@ +package com.cool.store.request.config; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class ConfigItemUpdateRequest { + + @ApiModelProperty("主键ID") + @NotNull(message = "ID不能为空", groups = UpdateGroup.class) + private Long id; + + @ApiModelProperty("配置项编码") + private String itemCode; + + @ApiModelProperty("配置项名称") + @NotBlank(message = "配置项名称不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String itemName; + + @ApiModelProperty("配置大类ID") + @NotNull(message = "配置大类ID不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Long categoryId; + + @ApiModelProperty("显示排序") + @NotNull(message = "显示排序不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer sortNo; + + @ApiModelProperty("状态:1启用,0禁用") + private Integer status; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionQueryRequest.java new file mode 100644 index 000000000..5a105cccd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionQueryRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.config; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ConfigOptionQueryRequest extends PageBasicInfo { + + @ApiModelProperty("配置类型编码") + private String categoryCode; + + @ApiModelProperty("配置项编码") + private String itemCode; + + @ApiModelProperty("是否启用 1-启用 0未启用 ") + private Integer active = 1; + + @ApiModelProperty("选项名称(模糊)") + private String optionName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionTreeQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionTreeQueryRequest.java new file mode 100644 index 000000000..fca66fcbd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionTreeQueryRequest.java @@ -0,0 +1,17 @@ +package com.cool.store.request.config; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ConfigOptionTreeQueryRequest { + + @ApiModelProperty("配置类型字典表id,固定传 10") + private Long typeDictTableId; + + @ApiModelProperty("配置项字典表id,固定传 11") + private Long itemDictTableId; + + @ApiModelProperty("选项名称(模糊)") + private String optionName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionUpdateRequest.java new file mode 100644 index 000000000..34228d272 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/config/ConfigOptionUpdateRequest.java @@ -0,0 +1,57 @@ +package com.cool.store.request.config; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Data +public class ConfigOptionUpdateRequest { + @ApiModelProperty("主键ID") + @NotNull(message = "ID不能为空", groups = UpdateGroup.class) + private Long id; + + @ApiModelProperty("配置类型编码") + @NotBlank(message = "配置类型编码不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String categoryCode; + + @ApiModelProperty("配置项编码") + @NotBlank(message = "配置项编码不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String itemCode; + + @ApiModelProperty("选项编码") + private String optionCode; + + @ApiModelProperty("选项单位") + private String optionUnit; + + @ApiModelProperty("选项名称") + @NotBlank(message = "选项名称不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String optionName; + + @ApiModelProperty("选项描述") + @NotBlank(message = "选项描述不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String optionDescription; + + @ApiModelProperty("售价") + @NotNull(message = "售价不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private BigDecimal optionPrice; + + @ApiModelProperty("原价") + private BigDecimal originalOptionPrice; + + @ApiModelProperty("图片") + @NotBlank(message = "图片不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String imageUrl; + @ApiModelProperty("视频") + private String videoUrl; + @ApiModelProperty("排序") + @NotNull(message = "排序不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer sortOrder; + @ApiModelProperty("配置项选项明细") + private String optionRemark; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigAddRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigAddRequest.java new file mode 100644 index 000000000..14181e1d3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigAddRequest.java @@ -0,0 +1,36 @@ +package com.cool.store.request.fees; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Digits; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * 加盟费用标准收费额配置 新增/修改请求 + */ +@Data +public class FeeStandardConfigAddRequest { + + @ApiModelProperty("配置id") + @NotNull(message = "配置id不能为空", groups = {UpdateGroup.class}) + private Long id; + + @ApiModelProperty(value = "加盟品牌", required = true) + @NotNull(message = "加盟品牌不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer joinBrand; + + @ApiModelProperty(value = "费用类型", required = true) + @NotNull(message = "费用类型不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String expenseType; + + @ApiModelProperty(value = "金额", required = true) + @Digits(integer = 10, fraction = 2, message = "金额整数位最多10位,小数位最多2位") + @NotNull(message = "金额不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private BigDecimal amount; +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigPageRequest.java new file mode 100644 index 000000000..bdcdc0b42 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/FeeStandardConfigPageRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.fees; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 加盟费用标准收费额配置 分页查询请求 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class FeeStandardConfigPageRequest extends PageBasicInfo { + + @ApiModelProperty("加盟品牌") + private Integer joinBrand; + + @ApiModelProperty("费用类型") + private String expenseType; +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigAddRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigAddRequest.java new file mode 100644 index 000000000..840d26d92 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigAddRequest.java @@ -0,0 +1,53 @@ +package com.cool.store.request.fees; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 线下收款银行配置 新增/编辑 Request + */ +@Data +public class PayeeBankConfigAddRequest { + @ApiModelProperty("配置id(编辑必传)") + @NotNull(message = "id不能为空", groups = {UpdateGroup.class}) + private Long id; + + @ApiModelProperty(value = "加盟品牌", required = true) + @NotNull(message = "加盟品牌不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer joinBrand; + + @ApiModelProperty(value = "招商分部id,0表示全部", required = true) + @NotNull(message = "招商分部id不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Long investDivisionId; + + @ApiModelProperty(value = "付款方式,同缴纳加盟费支付方式", required = true) + @NotNull(message = "付款方式不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer payType; + + @ApiModelProperty(value = "收款公司名称", required = true) + @NotBlank(message = "收款公司名称不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String payeeName; + + @ApiModelProperty(value = "收款公司code", required = true) + @NotBlank(message = "收款公司code不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String payeeCode; + + @ApiModelProperty(value = "收款账户", required = true) + @NotBlank(message = "收款账户不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String payeeAccount; + + @ApiModelProperty(value = "收款银行", required = true) + @NotBlank(message = "收款银行不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String payeeBank; + + @ApiModelProperty(value = "收款银行开户行", required = true) + @NotBlank(message = "收款银行开户行不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String payeeBankBranch; +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigPageRequest.java new file mode 100644 index 000000000..c43957cea --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/PayeeBankConfigPageRequest.java @@ -0,0 +1,24 @@ +package com.cool.store.request.fees; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 线下收款银行配置 查询Request + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class PayeeBankConfigPageRequest extends PageBasicInfo { + @ApiModelProperty("加盟品牌") + private Integer joinBrand; + + @ApiModelProperty("招商分部id") + private Long investDivisionId; + + @ApiModelProperty("付款方式") + private Integer payType; +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/ShopAllocationInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/ShopAllocationInfoRequest.java new file mode 100644 index 000000000..c2f53d85d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/ShopAllocationInfoRequest.java @@ -0,0 +1,40 @@ +package com.cool.store.request.fees; + +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 2026/1/30 + */ +@Data +public class ShopAllocationInfoRequest { + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("费用类型") + @NotBlank(message = "费用类型不能为空") + private String expenseType; + + @ApiModelProperty("收款公司名称") + @NotBlank(message = "收款公司名称不能为空") + private String payeeName; + + @ApiModelProperty("收款公司code") + @NotBlank(message = "收款公司code不能为空") + private String payeeCode; + + @ApiModelProperty("金额") + @Digits(integer = 10, fraction = 2, message = "金额整数位最多10位,小数位最多2位") + @NotNull(message = "金额不能为空") + private BigDecimal amount; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationCompanyRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationCompanyRequest.java new file mode 100644 index 000000000..6b8c1311c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationCompanyRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request.fees; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 收款公司Request + *

+ * + * @author wangff + * @since 2026/1/27 + */ +@Data +public class WalletAllocationCompanyRequest { + @ApiModelProperty(value = "收款公司名称", required = true) + @NotNull(message = "收款公司名称不能为空") + private String payeeName; + + @ApiModelProperty(value = "收款公司code", required = true) + @NotNull(message = "收款公司code不能为空") + private String payeeCode; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigAddRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigAddRequest.java new file mode 100644 index 000000000..d1fd24e05 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigAddRequest.java @@ -0,0 +1,39 @@ +package com.cool.store.request.fees; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 分账配置新增Request + * + * @author system + */ +@Data +public class WalletAllocationConfigAddRequest { + @ApiModelProperty(value = "配置id", required = true) + @NotNull(message = "配置id不能为空", groups = {UpdateGroup.class}) + private Long id; + + @ApiModelProperty(value = "加盟品牌:1-正新鸡排,2-正新三明治,3-正烧记,4-大鼓米线,5-串小妹,6-茂掌柜", required = true) + @NotNull(message = "加盟品牌不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Integer joinBrand; + + @ApiModelProperty(value = "招商分部id,0表示全部", required = true) + @NotNull(message = "招商分部id不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private Long investDivisionId; + + @ApiModelProperty(value = "费用类型,字典表expense_type", required = true) + @NotNull(message = "费用类型不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String expenseType; + + @ApiModelProperty(value = "分账公司配置列表", required = true) + @NotEmpty(message = "分账公司配置列表不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private List companyList; +} + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigPageRequest.java new file mode 100644 index 000000000..5c4868696 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletAllocationConfigPageRequest.java @@ -0,0 +1,26 @@ +package com.cool.store.request.fees; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 分账配置分页查询Request + * + * @author system + */ +@Data +public class WalletAllocationConfigPageRequest extends PageBasicInfo { + @ApiModelProperty("加盟品牌:1-正新鸡排,2-正新三明治,3-正烧记,4-大鼓米线,5-串小妹,6-茂掌柜") + private Integer joinBrand; + + @ApiModelProperty("招商分部id") + private Long investDivisionId; + + @ApiModelProperty("费用类型") + private Integer expenseType; + + @ApiModelProperty("收款公司code") + private String payeeCode; +} + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCancelPayRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCancelPayRequest.java new file mode 100644 index 000000000..14e354158 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCancelPayRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.fees; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 钱包取消支付Request + *

+ * + * @author wangff + * @since 2026/2/6 + */ +@Data +public class WalletCancelPayRequest { + @ApiModelProperty("缴费信息id") + @NotNull(message = "缴费信息id不能为空") + private Long payInfoId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCompanyQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCompanyQueryRequest.java new file mode 100644 index 000000000..24c990ba9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletCompanyQueryRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.fees; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 收款公司查询Request + *

+ * + * @author wangff + * @since 2026/1/27 + */ +@Data +public class WalletCompanyQueryRequest extends PageBasicInfo { + @ApiModelProperty("公司名称") + private String companyName; + + @ApiModelProperty("公司code") + private String companyCode; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletPayRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletPayRequest.java new file mode 100644 index 000000000..264679dd2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletPayRequest.java @@ -0,0 +1,40 @@ +package com.cool.store.request.fees; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Digits; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + *

+ * 钱包支付Request + *

+ * + * @author wangff + * @since 2026/1/30 + */ +@Data +public class WalletPayRequest { + @ApiModelProperty("门店id") + @NotNull(message = "门店id不能为空") + private Long shopId; + + @ApiModelProperty("费用类型code列表") + @NotEmpty(message = "费用类型code列表不能为空") + private List expenseTypes; + + @ApiModelProperty("总金额") + @Digits(integer = 10, fraction = 2, message = "金额整数位最多10位,小数位最多2位") + @NotNull(message = "总金额不能为空") + private BigDecimal amount; + + @ApiModelProperty("支付密码(sm3加密后字符串)") + @NotBlank(message = "支付密码不能为空") + private String payPwd; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletRepayRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletRepayRequest.java new file mode 100644 index 000000000..84839b9b3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/fees/WalletRepayRequest.java @@ -0,0 +1,26 @@ +package com.cool.store.request.fees; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + *

+ * 钱包重新支付Request + *

+ * + * @author wangff + * @since 2026/2/6 + */ +@Data +public class WalletRepayRequest { + @ApiModelProperty("缴费信息id") + @NotNull(message = "缴费信息id不能为空") + private Long payInfoId; + + @ApiModelProperty("支付密码(sm3加密后字符串)") + @NotBlank(message = "支付密码不能为空") + private String payPwd; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderCreateRequest.java new file mode 100644 index 000000000..83a4a51dd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderCreateRequest.java @@ -0,0 +1,34 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class MiniStoreOrderCreateRequest { + + @ApiModelProperty(value = "门店ID", required = true) + @NotNull(message = "门店ID不能为空") + private Long shopId; + + @ApiModelProperty(value = "店型ID", required = true) + @NotNull(message = "店型ID不能为空") + private Long storeTypeId; + + @ApiModelProperty("选中的配置选项列表") + private List selectedOptions; + + @Data + public static class SelectedOption { + @ApiModelProperty(value = "选项ID", required = true) + @NotNull(message = "选项ID不能为空") + private Long optionId; + + @ApiModelProperty("数量") + @NotNull(message ="数量不能为空") + private BigDecimal quantity; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderLineQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderLineQueryRequest.java new file mode 100644 index 000000000..80cbddc26 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderLineQueryRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request.order; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class MiniStoreOrderLineQueryRequest extends PageBasicInfo { + + @ApiModelProperty("加盟商ID(line_id)") + private Long lineId; + + @ApiModelProperty("订单状态") + private Integer status; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderPayRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderPayRequest.java new file mode 100644 index 000000000..2fe3da2cf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderPayRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * @Auther zx_szh + * @Date 2026/2/5 + * @Version 1.0 + */ +@Data +public class MiniStoreOrderPayRequest { + + @ApiModelProperty(value = "订单ID", required = true) + @NotNull + private Long orderId; + + @ApiModelProperty( value = "支付密码", required = true) + @NotBlank + private String payPwd; + + @ApiModelProperty(value = "支付金额", required = true) + @NotNull + private BigDecimal amount; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderQueryRequest.java new file mode 100644 index 000000000..6ea36d7e2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderQueryRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request.order; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class MiniStoreOrderQueryRequest extends PageBasicInfo { + + @ApiModelProperty("门店ID") + private Long shopId; + + @ApiModelProperty("订单状态:0待确认/1已确认/2已取消/3已支付") + private Integer status; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderRequest.java new file mode 100644 index 000000000..bb7aa8d43 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderRequest.java @@ -0,0 +1,17 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther zx_szh + * @Date 2026/2/3 14:24 + * @Version 1.0 + */ +@Data +public class MiniStoreOrderRequest { + + @ApiModelProperty(name = "订单ID") + private Long orderId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderUpdateRequest.java new file mode 100644 index 000000000..b04098051 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreOrderUpdateRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class MiniStoreOrderUpdateRequest { + + @ApiModelProperty(value = "订单ID", required = true) + @NotNull(message = "订单ID不能为空") + private Long orderId; + + @ApiModelProperty(value = "门店ID", required = true) + @NotNull(message = "门店ID不能为空") + private Long shopId; + + @ApiModelProperty(value = "店型ID", required = true) + @NotNull(message = "店型ID不能为空") + private Long storeTypeId; + + @ApiModelProperty("选中的配置选项列表") + @Valid + private List selectedOptions; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistDelRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistDelRequest.java new file mode 100644 index 000000000..711c1c77c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistDelRequest.java @@ -0,0 +1,26 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @Auther zx_szh + * @Date 2026/3/10 19:23 + * @Version 1.0 + */ +@Data +public class MiniStoreWishlistDelRequest { + + @ApiModelProperty("店型ID") + @NotNull + private Long storeTypeId; + + @ApiModelProperty("版本号") + @NotBlank + private String versionNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistListRequest.java new file mode 100644 index 000000000..46e1e9780 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistListRequest.java @@ -0,0 +1,11 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class MiniStoreWishlistListRequest { + + @ApiModelProperty("店型ID,可选") + private Long storeTypeId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistSaveRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistSaveRequest.java new file mode 100644 index 000000000..b0544da05 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/MiniStoreWishlistSaveRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class MiniStoreWishlistSaveRequest { + + @ApiModelProperty("版本号") + private String versionNo; + + @ApiModelProperty(value = "店型ID", required = true) + @NotNull(message = "店型ID不能为空") + private Long storeTypeId; + + @ApiModelProperty("选中的配置选项列表") + private List selectedOptions; + + @Data + public static class SelectedOption { + @ApiModelProperty(value = "选项ID", required = true) + @NotNull(message = "选项ID不能为空") + private Long optionId; + + @ApiModelProperty(value = "数量", required = true) + @NotNull(message = "数量不能为空") + private BigDecimal quantity; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/OrderAuditRecordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/OrderAuditRecordRequest.java new file mode 100644 index 000000000..9feb9c214 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/OrderAuditRecordRequest.java @@ -0,0 +1,26 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * @Auther zx_szh + * @Date 2026/2/7 14:32 + * @Version 1.0 + */ +@Data +public class OrderAuditRecordRequest { + + @ApiModelProperty("订单ID") + private Long orderId; + + @ApiModelProperty("状态 1-通过 2-拒绝") + private Integer status; + + @ApiModelProperty("备注") + private String remark; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderOptionQuantityUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderOptionQuantityUpdateRequest.java new file mode 100644 index 000000000..6bc50785e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderOptionQuantityUpdateRequest.java @@ -0,0 +1,35 @@ +package com.cool.store.request.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.DecimalMin; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class PCStoreOrderOptionQuantityUpdateRequest { + + @ApiModelProperty(value = "订单ID", required = true) + @NotNull(message = "订单ID不能为空") + private Long orderId; + + @ApiModelProperty(value = "配置项列表", required = true) + @Valid + @NotNull(message = "配置项列表不能为空") + private List selectedOptions; + + @Data + public static class SelectedOption { + @ApiModelProperty(value = "配置项ID", required = true) + @NotNull(message = "配置项ID不能为空") + private Long optionId; + + @ApiModelProperty(value = "数量", required = true) + @NotNull(message = "数量不能为空") + @DecimalMin(value = "0.01", message = "数量必须大于0") + private BigDecimal quantity; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderQueryRequest.java new file mode 100644 index 000000000..1b39fee47 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/order/PCStoreOrderQueryRequest.java @@ -0,0 +1,44 @@ +package com.cool.store.request.order; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * PC端-标准店订单列表查询 + */ +@Data +public class PCStoreOrderQueryRequest extends PageBasicInfo { + + @ApiModelProperty("订单号(模糊)") + private String orderNo; + + @ApiModelProperty("加盟商姓名(模糊)") + private String partnerName; + + @ApiModelProperty("手机号(模糊)") + private String partnerMobile; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("店型ID") + private Long storeTypeId; + + @ApiModelProperty("下单开始时间") + private Date orderTimeStart; + + @ApiModelProperty("下单结束时间") + private Date orderTimeEnd; + + @ApiModelProperty("支付开始时间") + private Date payTimeStart; + + @ApiModelProperty("支付结束时间") + private Date payTimeEnd; + + @ApiModelProperty("订单状态") + private Integer status; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationQueryShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationQueryShopRequest.java new file mode 100644 index 000000000..66786cdb9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationQueryShopRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request.store; + +import com.cool.store.common.PageBasicInfo; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Auther zx_szh + * @Date 2026/2/4 16:00 + * @Version 1.0 + */ +@Data +public class PreAllocationQueryShopRequest extends PageBasicInfo { + @NotNull + Long shopId; + Integer allocationStatus; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationSaveRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationSaveRequest.java new file mode 100644 index 000000000..a09aeb7af --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/store/PreAllocationSaveRequest.java @@ -0,0 +1,37 @@ +package com.cool.store.request.store; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + * @Auther zx_szh + * @Date 2026/2/4 15:59 + * @Version 1.0 + */ +@Data +public class PreAllocationSaveRequest { + @NotNull + @ApiModelProperty("订单ID") + Long orderId; + @NotNull + @ApiModelProperty("门店ID") + Long shopId; + @Valid + List items; + @Data public static class PreAllocationItem{ + @ApiModelProperty("缴费类型") + String expenseType; + @ApiModelProperty("公司名称") + String payeeName; + @ApiModelProperty("公司COde") + String payeeCode; + @ApiModelProperty("分账金额") + @NotNull + BigDecimal payAmount; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreOrderQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreOrderQueryRequest.java new file mode 100644 index 000000000..63ac00a60 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreOrderQueryRequest.java @@ -0,0 +1,46 @@ +package com.cool.store.request.store; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther zx_szh + * @Date 2026/2/6 16:14 + * @Version 1.0 + */ +@Data +public class StoreOrderQueryRequest { + + @ApiModelProperty("订单号") + private String orderNo; + + @ApiModelProperty("加盟商名字") + private String partnerName; + + @ApiModelProperty("加盟商手机号") + private String partnerMobile; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("店型ID") + private Long storeTypeId; + + @ApiModelProperty("订单下单开始时间") + private Date orderStartTime; + + @ApiModelProperty("订单下单结束时间") + private Date orderEndTime; + + @ApiModelProperty("支付开始时间") + private Date payStartTime; + + @ApiModelProperty("支付结束时间") + private Date payEndTime; + + @ApiModelProperty("订单状态") + private Integer orderStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionQueryRequest.java new file mode 100644 index 000000000..afeb3e4f9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionQueryRequest.java @@ -0,0 +1,13 @@ +package com.cool.store.request.store; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class StoreTypeOptionQueryRequest extends PageBasicInfo { + @ApiModelProperty("店型ID") + private Long storeTypeId; + @ApiModelProperty("配置项编码") + private String itemCode; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionSaveRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionSaveRequest.java new file mode 100644 index 000000000..eaf9e299c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeOptionSaveRequest.java @@ -0,0 +1,56 @@ +package com.cool.store.request.store; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + * 店型配置选项保存请求 + */ +@Data +@ApiModel(description = "店型配置选项保存请求") +public class StoreTypeOptionSaveRequest { + + @ApiModelProperty(value = "店型ID", required = true, example = "1") + @NotNull(message = "店型ID不能为空") + private Long storeTypeId; + + @ApiModelProperty("店型可选项配置列表") + private List options; + + @Data + @ApiModel(description = "店型选项项配置") + public static class StoreTypeOptionItemRequest { + @ApiModelProperty(value = "配置选项ID", required = true, example = "1001") + @NotNull(message = "选项ID不能为空") + private Long optionId; + + @ApiModelProperty(value = "配置类型编码", example = "DECOR") + private String categoryCode; + + @ApiModelProperty(value = "配置项编码", example = "DOOR") + private String itemCode; + + @ApiModelProperty(value = "是否默认选中:0-否 1-是", example = "1") + private Integer isDefault; + + @ApiModelProperty(value = "默认数量", example = "1.20") + private BigDecimal defaultQuantity; + + @ApiModelProperty(value = "是否允许编辑数量:0-否 1-是", example = "1") + private Integer allowQuantityEdit; + + @ApiModelProperty(value = "排序号", example = "10") + private Integer sortOrder; + + @ApiModelProperty("店型内-配置项单价") + private BigDecimal optionPrice; + + @ApiModelProperty("顶部预览图") + private String topPreviewImage; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeQueryRequest.java new file mode 100644 index 000000000..7dba47456 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeQueryRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.store; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 店型分页查询 + */ +@Data +public class StoreTypeQueryRequest extends PageBasicInfo { + + @ApiModelProperty("店型名称/店型编码") + private String keyword; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("是否启用") + private Boolean active; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeUpdateRequest.java new file mode 100644 index 000000000..343189b57 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/store/StoreTypeUpdateRequest.java @@ -0,0 +1,85 @@ +package com.cool.store.request.store; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * 店型新增/编辑请求 + */ +@Data +public class StoreTypeUpdateRequest { + @ApiModelProperty("主键ID") + @NotNull(message = "ID不能为空", groups = UpdateGroup.class) + private Long id; + + @ApiModelProperty("店型名称") + @NotBlank(message = "店型名称不能为空", groups = {InsertGroup.class, UpdateGroup.class}) + private String storeTypeName; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("店型描述") + private String description; + + @ApiModelProperty("主图") + private String imageUrl; + + @ApiModelProperty("视频") + private String videoUrl; + + @ApiModelProperty("VR视频") + private String vrVideoUrl; + + @ApiModelProperty("加盟费-折扣后金额") + private BigDecimal franchiseFee; + + @ApiModelProperty("原加盟费") + private BigDecimal originalFranchiseFee; + + @ApiModelProperty("品牌使用费-折扣后金额") + private BigDecimal brandUsageFee; + + @ApiModelProperty("原品牌使用费") + private BigDecimal originalBrandUsageFee; + + @ApiModelProperty("管理费-折扣后金额") + private BigDecimal managementFee; + + @ApiModelProperty("原管理费") + private BigDecimal originalManagementFee; + + @ApiModelProperty("系统使用费") + private BigDecimal systemUsageFee; + + @ApiModelProperty("原系统使用费") + private BigDecimal originalSystemUsageFee; + + @ApiModelProperty("合同保证金") + private BigDecimal contractDeposit; + + @ApiModelProperty("原合同保证金") + private BigDecimal originalContractDeposit; + + @ApiModelProperty("首次订货费用") + private BigDecimal firstOrderFee; + + @ApiModelProperty("设计费-折扣后费") + private BigDecimal designFee; + + @ApiModelProperty("设计费") + private BigDecimal originalDesignFee; + + @ApiModelProperty("排序") + private Integer sortOrder; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAdminQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAdminQueryRequest.java new file mode 100644 index 000000000..4f2cc668b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAdminQueryRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request.visit; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class StoreVisitReservationAdminQueryRequest extends PageBasicInfo { + + @ApiModelProperty("状态") + private Integer status; + + @ApiModelProperty("姓名") + private String contactName; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("服务人员") + private String serviceUserId; + + @ApiModelProperty("预约时间起") + private Date visitStartTime; + + @ApiModelProperty("预约时间止") + private Date visitEndTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAssignServiceRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAssignServiceRequest.java new file mode 100644 index 000000000..aefc88e3b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationAssignServiceRequest.java @@ -0,0 +1,19 @@ +package com.cool.store.request.visit; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class StoreVisitReservationAssignServiceRequest { + + @ApiModelProperty("预约ID") + @NotNull(message = "预约ID不能为空") + private Long id; + + @ApiModelProperty("服务人员ID") + @NotBlank(message = "服务人员不能为空") + private String serviceUserId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCancelRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCancelRequest.java new file mode 100644 index 000000000..8812bdac4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCancelRequest.java @@ -0,0 +1,19 @@ +package com.cool.store.request.visit; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class StoreVisitReservationCancelRequest { + + @ApiModelProperty("预约ID") + @NotNull(message = "预约ID不能为空") + private Long id; + + @ApiModelProperty("取消原因") + @NotBlank(message = "取消原因不能为空") + private String cancelReason; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCreateRequest.java new file mode 100644 index 000000000..4a4d50540 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationCreateRequest.java @@ -0,0 +1,38 @@ +package com.cool.store.request.visit; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Future; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.Date; + +@Data +public class StoreVisitReservationCreateRequest { + + @ApiModelProperty("意向城市ID") + @NotNull(message = "意向开店城市不能为空") + private Long intentCityId; + + @ApiModelProperty("联系人姓名") + @NotBlank(message = "联系人姓名不能为空") + private String contactName; + + @ApiModelProperty("手机号") + @NotBlank(message = "手机号不能为空") + @Pattern(regexp = "^1\\d{10}$", message = "请输入正确的手机号") + private String mobile; + + @ApiModelProperty("预约看店时间") + @NotNull(message = "预约看店时间不能为空") + @Future(message = "预约时间必须晚于当前时间") + private Date visitTime; + + @ApiModelProperty("当前跟进人员") + private String currentFollowUser; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationIdRequest.java new file mode 100644 index 000000000..f9869ad6b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationIdRequest.java @@ -0,0 +1,14 @@ +package com.cool.store.request.visit; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class StoreVisitReservationIdRequest { + + @ApiModelProperty("预约ID") + @NotNull(message = "预约ID不能为空") + private Long id; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationMyQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationMyQueryRequest.java new file mode 100644 index 000000000..3297c1b6d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/visit/StoreVisitReservationMyQueryRequest.java @@ -0,0 +1,14 @@ +package com.cool.store.request.visit; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + +@Data +public class StoreVisitReservationMyQueryRequest extends PageBasicInfo { + + private Integer status; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BatchTransferRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BatchTransferRequest.java new file mode 100644 index 000000000..e50db9d26 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BatchTransferRequest.java @@ -0,0 +1,48 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Auther zx_szh + * @Date 2026/2/5 13:48 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BatchTransferRequest { + + private String outStoreId; + + private String payPwd; + + private List transArray; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class TransDataRequest { + + @ApiModelProperty("业务系统付款单号(如 CRM 单号),业务系统单号") + private String reqNo; + @ApiModelProperty("费用科目") + private Integer feeItemId; + @ApiModelProperty("公司编号") + private String companyCode; + @ApiModelProperty("公司编号绑定多个账户时,必传") + private String companyAccountCode; + @ApiModelProperty("金额(元)") + private String amount; + @ApiModelProperty("备注") + private String remark; + + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptCallBackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptCallBackRequest.java index ffa9291ed..bbca9f6ca 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptCallBackRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptCallBackRequest.java @@ -21,4 +21,9 @@ public class ReceiptCallBackRequest { @Max(1)@Min(0)@NotNull private Integer claimStatus; + /** + * 支付方式,线下支付-0,平安钱包支付-2 + */ + private Integer payWay; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java index d9c5877dc..b0141ce26 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java @@ -2,6 +2,7 @@ package com.cool.store.request.xgj; import com.cool.store.entity.FranchiseFeeDO; import com.cool.store.entity.LinePayDO; +import com.cool.store.entity.fees.WalletPayInfoDO; import io.swagger.annotations.ApiModelProperty; import io.swagger.models.auth.In; import lombok.Data; @@ -76,5 +77,18 @@ public class ReceiptRequest { this.setClaimStatus(payDO.getXgjClaimStatus()); this.setDeleted(payDO.getDeleted()?1:0); } + + public ReceiptRequest(Long shopId, Integer billId, WalletPayInfoDO payDO, Integer joinBrand){ + this.shopId = shopId; + this.billId = billId; + this.receiptId = payDO.getPayNo(); + this.payer1 = payDO.getPayUserName(); + this.transactionNumber = payDO.getTradeId(); + this.paymentAmount = payDO.getPayAmount(); + this.claimStatus = payDO.getClaimStatus(); + this.deleted = 0; + this.payWay = 2; + this.joinBrand = joinBrand; + } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopDetailResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopDetailResponse.java index 48c3575d2..cd949f5d4 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopDetailResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopDetailResponse.java @@ -92,5 +92,7 @@ public class BranchShopDetailResponse { @ApiModelProperty("所属管理区域name") private String managerRegionName; + private Integer useStandardStore; + } 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 17e28fb73..00d31df0d 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 @@ -69,6 +69,9 @@ public class BranchShopResponse { @ApiModelProperty("招商所属大区名称") private String investRegionName; + @ApiModelProperty("使用标准店 0-否 1-是") + private Integer useStandardStore; + public void setDays() { if (this.openingActivityEndTime==null){ long between = ChronoUnit.SECONDS.between(this.createTime.toInstant(), new Date().toInstant()); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java index aedd7e18c..0028073cb 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java @@ -2,12 +2,14 @@ package com.cool.store.response; import com.cool.store.entity.FranchiseFeeDO; import com.cool.store.entity.LinePayDO; +import com.cool.store.vo.fees.PayeeBankConfigSimpleVO; +import com.cool.store.vo.fees.ShopAllocationInfoVO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.persistence.*; import java.math.BigDecimal; import java.util.Date; +import java.util.List; @Data public class FranchiseFeeResponse { @@ -66,6 +68,21 @@ public class FranchiseFeeResponse { @ApiModelProperty("收银费(系统费)") private String cashierFee; + @ApiModelProperty("支付方式,1线下支付 2平安钱包支付") + private Integer payType; + + @ApiModelProperty("是否退款,0否1是") + private Integer isRefund; + + @ApiModelProperty("线下收款银行") + private PayeeBankConfigSimpleVO bankConfig; + + @ApiModelProperty("平安钱包分账信息") + private List shopAllocationInfoList; + + @ApiModelProperty("门店id") + private String storeId; + @Data public static class LinePay{ @ApiModelProperty("") @@ -202,6 +219,8 @@ public class FranchiseFeeResponse { franchiseFeeResponse.setXgjRemainderPayableAmount(franchiseFeeDO.getXgjRemainderPayableAmount()); franchiseFeeResponse.setXgjFeesPaid(franchiseFeeDO.getXgjFeesPaid()); franchiseFeeResponse.setCashierFee(franchiseFeeDO.getCashierFee()); + franchiseFeeResponse.setPayType(franchiseFeeDO.getPayType()); + franchiseFeeResponse.setIsRefund(franchiseFeeDO.getIsRefund()); return franchiseFeeResponse; } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemBaseInfoVO.java new file mode 100644 index 000000000..6dd0c4008 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemBaseInfoVO.java @@ -0,0 +1,17 @@ +package com.cool.store.vo.config; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther zx_szh + * @Date 2026/3/10 10:47 + * @Version 1.0 + */ +@Data +public class ConfigItemBaseInfoVO { + @ApiModelProperty("配置项编码") + private String itemCode; + @ApiModelProperty("配置项目名称") + private String itemName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryBaseInfoVO.java new file mode 100644 index 000000000..cf685bef0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryBaseInfoVO.java @@ -0,0 +1,20 @@ +package com.cool.store.vo.config; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther zx_szh + * @Date 2026/3/10 10:44 + * @Version 1.0 + */ +@Data +public class ConfigItemCategoryBaseInfoVO { + + @ApiModelProperty("大类编码") + private String categoryCode; + @ApiModelProperty("大类名称") + private String categoryName; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryVO.java new file mode 100644 index 000000000..a8127f774 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemCategoryVO.java @@ -0,0 +1,31 @@ +package com.cool.store.vo.config; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class ConfigItemCategoryVO { + + @ApiModelProperty("ID") + private Long id; + @ApiModelProperty("大类编码") + private String categoryCode; + @ApiModelProperty("大类名称") + private String categoryName; + @ApiModelProperty("排序") + private Integer sortNo; + @ApiModelProperty("图片 多张逗号隔开") + private String imageUrl; + @ApiModelProperty("视频") + private String videoUrl; + @ApiModelProperty("状态 1启用 0-非启用") + private Integer status; + @ApiModelProperty("备注") + private String remark; + private String createdUserId; + private Date createdTime; + private String updatedUserId; + private Date updatedTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemVO.java new file mode 100644 index 000000000..844247758 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigItemVO.java @@ -0,0 +1,23 @@ +package com.cool.store.vo.config; + +import lombok.Data; + +import java.util.Date; + +@Data +public class ConfigItemVO { + + private Long id; + private String itemCode; + private String itemName; + private Long categoryId; + private String categoryCode; + private String categoryName; + private Integer sortNo; + private Integer status; + private String remark; + private String createdUserId; + private Date createdTime; + private String updatedUserId; + private Date updatedTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionTreeVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionTreeVO.java new file mode 100644 index 000000000..d803eb482 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionTreeVO.java @@ -0,0 +1,33 @@ +package com.cool.store.vo.config; + +import lombok.Data; + +import java.util.List; + +/** + * 配置选项三层结构 + */ +@Data +public class ConfigOptionTreeVO { + + /** 配置类型编码 */ + private String categoryCode; + + /** 配置类型名称(字典) */ + private String categoryName; + + /** 配置项列表 */ + private List items; + + @Data + public static class ConfigItemVO { + /** 配置项编码 */ + private String itemCode; + + /** 配置项名称(字典) */ + private String itemName; + + /** 选项列表 */ + private List options; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionVO.java new file mode 100644 index 000000000..83587aaea --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/config/ConfigOptionVO.java @@ -0,0 +1,26 @@ +package com.cool.store.vo.config; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class ConfigOptionVO { + private Long id; + private String categoryCode; + private String itemCode; + private String optionCode; + private String optionName; + private String optionDescription; + private BigDecimal optionPrice; + private BigDecimal originalOptionPrice; + private String optionUnit; + private String imageUrl; + private String videoUrl; + private Boolean active; + private Integer sortOrder; + private String optionRemark; + private Date createTime; + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/dict/DictColumnSimpleVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/dict/DictColumnSimpleVO.java index 296a3ebc3..0e2f848db 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/dict/DictColumnSimpleVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/dict/DictColumnSimpleVO.java @@ -33,6 +33,10 @@ public class DictColumnSimpleVO { vo.setColumnName(columnDO.getColumnName()); vo.setColumnCode(columnDO.getColumnCode()); vo.setTableCode(tableCode); + vo.setRemark(columnDO.getRemark()); return vo; } + + @ApiModelProperty("备注") + private String remark; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/FeeStandardConfigVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/FeeStandardConfigVO.java new file mode 100644 index 000000000..16720ecd3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/FeeStandardConfigVO.java @@ -0,0 +1,50 @@ +package com.cool.store.vo.fees; + +import com.cool.store.annotation.DictField; +import com.cool.store.enums.master.BrandTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 加盟费用标准收费额配置VO + */ +@Data +public class FeeStandardConfigVO { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("加盟品牌") + private Integer joinBrand; + + @ApiModelProperty("加盟品牌名称") + private String joinBrandName; + + @ApiModelProperty("费用类型") + private String expenseType; + + @ApiModelProperty("费用类型名称") + @DictField + private String expenseTypeName; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("创建人id") + private String createUserId; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @ApiModelProperty("创建时间") + private Date createTime; + + public String getJoinBrandName() { + return BrandTypeEnum.getDescByCode(this.joinBrand); + } +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/InvestDivisionRegionVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/InvestDivisionRegionVO.java new file mode 100644 index 000000000..c410c1073 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/InvestDivisionRegionVO.java @@ -0,0 +1,25 @@ +package com.cool.store.vo.fees; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

+ * 招商分部VO + *

+ * + * @author wangff + * @since 2026/1/27 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InvestDivisionRegionVO { + @ApiModelProperty("招商分部id") + private Long investDivisionId; + + @ApiModelProperty("招商分部名称") + private String investDivisionName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigSimpleVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigSimpleVO.java new file mode 100644 index 000000000..dad11884c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigSimpleVO.java @@ -0,0 +1,27 @@ +package com.cool.store.vo.fees; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 线下收款银行简单信息VO + *

+ * + * @author wangff + * @since 2026/1/29 + */ +@Data +public class PayeeBankConfigSimpleVO { + @ApiModelProperty("收款公司名称") + private String payeeName; + + @ApiModelProperty("收款账户") + private String payeeAccount; + + @ApiModelProperty("收款银行") + private String payeeBank; + + @ApiModelProperty("收款银行开户行") + private String payeeBankBranch; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigVO.java new file mode 100644 index 000000000..efb8a5408 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/PayeeBankConfigVO.java @@ -0,0 +1,61 @@ +package com.cool.store.vo.fees; + +import com.cool.store.enums.master.BrandTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 线下收款银行配置VO + */ +@Data +public class PayeeBankConfigVO { + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("加盟品牌") + private Integer joinBrand; + + @ApiModelProperty("加盟品牌") + private String joinBrandName; + + @ApiModelProperty("招商分部id,0表示全部") + private Long investDivisionId; + + @ApiModelProperty("招商分部") + private String investDivisionName; + + @ApiModelProperty("付款方式,同缴纳加盟费支付方式") + private Integer payType; + + @ApiModelProperty("收款公司名称") + private String payeeName; + + @ApiModelProperty("收款公司code") + private String payeeCode; + + @ApiModelProperty("收款账户") + private String payeeAccount; + + @ApiModelProperty("收款银行") + private String payeeBank; + + @ApiModelProperty("收款银行开户行") + private String payeeBankBranch; + + @ApiModelProperty("创建人id") + private String createUserId; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @ApiModelProperty("创建时间") + private Date createTime; + + public String getJoinBrandName() { + return BrandTypeEnum.getDescByCode(this.joinBrand); + } +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationInfoVO.java new file mode 100644 index 000000000..129fd0e77 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationInfoVO.java @@ -0,0 +1,43 @@ +package com.cool.store.vo.fees; + +import com.cool.store.annotation.DictField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + *

+ * 平安钱包分账信息VO + *

+ * + * @author wangff + * @since 2026/1/29 + */ +@Data +public class ShopAllocationInfoVO { + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("费用类型") + private String expenseType; + + @ApiModelProperty("费用类型名称") + @DictField + private String expenseTypeName; + + @ApiModelProperty("收款公司名称") + private String payeeName; + + @ApiModelProperty("收款公司code") + private String payeeCode; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("分账状态,1已分账 2分账失败 3待分账") + private Integer status; + + @ApiModelProperty("分账失败原因") + private String failReason; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationSimpleVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationSimpleVO.java new file mode 100644 index 000000000..11577bf82 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/ShopAllocationSimpleVO.java @@ -0,0 +1,41 @@ +package com.cool.store.vo.fees; + +import com.cool.store.annotation.DictField; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + *

+ * 平安钱包分账简单信息VO + *

+ * + * @author wangff + * @since 2026/1/29 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ShopAllocationSimpleVO { + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("费用类型") + private String expenseType; + + @ApiModelProperty("费用类型名称") + @DictField + private String expenseTypeName; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("分账状态,1已分账 2分账失败 3待分账") + private Integer status; + + @ApiModelProperty("分组名称") + private String groupName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationCompanyVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationCompanyVO.java new file mode 100644 index 000000000..9f9dd7839 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationCompanyVO.java @@ -0,0 +1,25 @@ +package com.cool.store.vo.fees; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

+ * 收款公司VO + *

+ * + * @author wangff + * @since 2026/1/27 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WalletAllocationCompanyVO { + @ApiModelProperty("收款公司名称") + private String payeeName; + + @ApiModelProperty("收款公司code") + private String payeeCode; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationConfigVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationConfigVO.java new file mode 100644 index 000000000..7b9934e39 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletAllocationConfigVO.java @@ -0,0 +1,56 @@ +package com.cool.store.vo.fees; + +import com.cool.store.annotation.DictField; +import com.cool.store.enums.master.BrandTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 分账配置VO + * + * @author system + */ +@Data +public class WalletAllocationConfigVO { + @ApiModelProperty("配置id") + private Long id; + + @ApiModelProperty("加盟品牌:1-正新鸡排,2-正新三明治,3-正烧记,4-大鼓米线,5-串小妹,6-茂掌柜") + private Integer joinBrand; + + @ApiModelProperty("加盟品牌名称") + private String joinBrandName; + + @ApiModelProperty("招商分部id,0表示全部") + private Long investDivisionId; + + @ApiModelProperty("招商分部名称") + private String investDivisionName; + + @ApiModelProperty("费用类型") + private String expenseType; + + @ApiModelProperty("费用类型名称") + @DictField + private String expenseTypeName; + + @ApiModelProperty("分账公司配置列表") + private List companyList; + + @ApiModelProperty("创建人id") + private String createUserId; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @ApiModelProperty("创建时间") + private Date createTime; + + public String getJoinBrandName() { + return BrandTypeEnum.getDescByCode(this.joinBrand); + } +} + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletPayInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletPayInfoVO.java new file mode 100644 index 000000000..2678c89ed --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fees/WalletPayInfoVO.java @@ -0,0 +1,65 @@ +package com.cool.store.vo.fees; + +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 钱包加盟缴费信息VO + *

+ * + * @author wangff + * @since 2026/2/3 + */ +@Data +public class WalletPayInfoVO { + @ApiModelProperty("缴费信息id") + private Long id; + + @ApiModelProperty("付款单号") + private String payNo; + + @ApiModelProperty("付款人") + private String payUserName; + + @ApiModelProperty("付款金额") + private BigDecimal payAmount; + + @ApiModelProperty("交易流水号") + private String tradeId; + + @ApiModelProperty("付款状态,1已支付、2支付失败 3支付中") + private Integer payStatus; + + @ApiModelProperty("付款状态名称") + private String payStatusName; + + @ApiModelProperty("支付时间") + private Date payTime; + + @ApiModelProperty("认领状态0-待认领,1-已认领") + private Integer claimStatus; + + @ApiModelProperty("费用类型列表") + private String expenseTypes; + + @ApiModelProperty("费用类型名称") + private String expenseTypeName; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("创建人id") + private String createUserId; + + @ApiModelProperty("创建时间") + private Date createTime; + + public String getPayStatusName() { + return AllocationPayStatusEnum.getDescByStatus(this.payStatus); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/modify/ModifyRecordVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/modify/ModifyRecordVO.java new file mode 100644 index 000000000..e3f3459c8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/modify/ModifyRecordVO.java @@ -0,0 +1,27 @@ +package com.cool.store.vo.modify; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + *

+ * 业务修改记录VO + *

+ * + * @author wangff + * @since 2026/1/27 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ModifyRecordVO { + @ApiModelProperty("修改人") + private String updateUserName; + + @ApiModelProperty("修改时间") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderDetailVO.java new file mode 100644 index 000000000..58f376e7a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderDetailVO.java @@ -0,0 +1,181 @@ +package com.cool.store.vo.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class MiniStoreOrderDetailVO { + + @ApiModelProperty("下单信息") + private OrderInfoVO orderInfo; + + @ApiModelProperty("付款信息") + private PayInfoVO payInfo; + + @ApiModelProperty("加盟类费用明细") + private FeeInfoVO feeInfo; + + @ApiModelProperty("装修与设备选型信息(按配置类型/配置项分组)") + private List configSnapshot; + + @Data + public static class OrderInfoVO { + + @ApiModelProperty("门店ID") + private Long shopId; + + private String storeId; + + @ApiModelProperty("订单ID") + private Long orderId ; + + @ApiModelProperty("门店订购订单号") + private String orderNo; + + @ApiModelProperty(name = "门店类型ID") + private Long storeTypeId; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("下单时间") + private Date createTime; + + @ApiModelProperty("状态:0待确认/1已确认/2已取消/3已支付") + private Integer status; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + + @ApiModelProperty("手机号") + private String partnerMobile; + + @ApiModelProperty("招商经理") + private String investmentManager; + + @ApiModelProperty("招商经理名称") + private String investmentManagerName; + } + + @Data + public static class PayInfoVO { + @ApiModelProperty("订单总额") + private BigDecimal totalAmount; + + @ApiModelProperty("已支付金额") + private BigDecimal paidAmount; + + @ApiModelProperty("未支付金额") + private BigDecimal unpaidAmount; + } + + @Data + public static class FeeInfoVO { + @ApiModelProperty("加盟费") + private BigDecimal franchiseFee; + + @ApiModelProperty("品牌使用费") + private BigDecimal brandUsageFee; + + @ApiModelProperty("管理费") + private BigDecimal managementFee; + + @ApiModelProperty("系统使用费") + private BigDecimal systemUsageFee; + + @ApiModelProperty("合同保证金") + private BigDecimal contractDeposit; + + @ApiModelProperty("首次订货费用") + private BigDecimal firstOrderFee; + + @ApiModelProperty("加盟类费用总计") + private BigDecimal storeFixedAmount; + + @ApiModelProperty("设计费") + private BigDecimal designFee; + + @ApiModelProperty("原设计费") + private BigDecimal originalDesignFee; + + @ApiModelProperty("原加盟费") + private BigDecimal originalFranchiseFee; + + @ApiModelProperty("原品牌使用费") + private BigDecimal originalBrandUsageFee; + + @ApiModelProperty("原管理费") + private BigDecimal originalManagementFee; + + @ApiModelProperty("原系统使用费") + private BigDecimal originalSystemUsageFee; + + @ApiModelProperty("原合同保证金") + private BigDecimal originalContractDeposit; + + @ApiModelProperty("原首次订货费用") + private BigDecimal originalFirstOrderFee; + + @ApiModelProperty("原加盟类费用总计") + private BigDecimal originalStoreFixedAmount; + } + + @Data + public static class CategoryVO { + @ApiModelProperty("配置类型编码") + private String categoryCode; + + @ApiModelProperty("配置类型名称") + private String categoryName; + + @ApiModelProperty("配置项列表") + private List items; + } + + @Data + public static class ItemVO { + @ApiModelProperty("配置项编码") + private String itemCode; + + @ApiModelProperty("配置项名称") + private String itemName; + + @ApiModelProperty("选项列表") + private List options; + } + + @Data + public static class OptionVO { + @ApiModelProperty("选项ID") + private Long optionId; + + @ApiModelProperty("选项名称") + private String optionName; + + @ApiModelProperty("单价") + private BigDecimal optionPrice; + + @ApiModelProperty("原价") + private BigDecimal originalOptionPrice; + + @ApiModelProperty("数量") + private BigDecimal quantity; + + @ApiModelProperty("选项名称") + private String optionUnit; + + @ApiModelProperty("小计") + private BigDecimal amount; + + @ApiModelProperty("原价小计") + private BigDecimal originalAmount; + + @ApiModelProperty("图片") + private String imageUrl; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderListVO.java new file mode 100644 index 000000000..9078e4797 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreOrderListVO.java @@ -0,0 +1,50 @@ +package com.cool.store.vo.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class MiniStoreOrderListVO { + + @ApiModelProperty("订单ID") + private Long id; + + @ApiModelProperty("订单号") + private String orderNo; + + private Long storeTypeId; + + @ApiModelProperty("门店ID") + private Long shopId; + + @ApiModelProperty("门店StoreID") + private String storeId; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("店型名称") + private String storeTypeName; + + @ApiModelProperty("订单状态 ") + private Integer status; + + @ApiModelProperty("订单总额") + private BigDecimal totalAmount; + + @ApiModelProperty("已支付") + private BigDecimal paidAmount; + + @ApiModelProperty("待支付") + private BigDecimal unpaidAmount; + + @ApiModelProperty("下单时间") + private Date createTime; + + @ApiModelProperty("图片") + private String imageUrl; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistDetailVO.java new file mode 100644 index 000000000..2037af200 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistDetailVO.java @@ -0,0 +1,109 @@ +package com.cool.store.vo.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class MiniStoreWishlistDetailVO { + + @ApiModelProperty("店型ID") + private Long storeTypeId; + + private String storeTypeName; + + @ApiModelProperty("版本号") + private String versionNo; + + @ApiModelProperty("总金额") + private BigDecimal totalAmount; + + private FeeInfoVO feeInfoVO; + + @ApiModelProperty("配置项列表") + private List options; + + @Data + public static class OptionVO { + @ApiModelProperty("配置项ID") + private Long optionId; + + private String categoryCode ; + + private String categoryName; + + private String itemCode ; + + private String itemName; + + @ApiModelProperty("数量") + private BigDecimal quantity; + + @ApiModelProperty("选项名称") + private String optionName; + + @ApiModelProperty("单价") + private BigDecimal optionPrice; + + private BigDecimal originalOptionPrice; + + @ApiModelProperty("总价") + private BigDecimal totalPrice; + + @ApiModelProperty("图片") + private String imageUrl; + } + + @Data + public static class FeeInfoVO { + @ApiModelProperty("加盟费") + private BigDecimal franchiseFee; + + @ApiModelProperty("品牌使用费") + private BigDecimal brandUsageFee; + + @ApiModelProperty("管理费") + private BigDecimal managementFee; + + @ApiModelProperty("系统使用费") + private BigDecimal systemUsageFee; + + @ApiModelProperty("合同保证金") + private BigDecimal contractDeposit; + + @ApiModelProperty("首次订货费用") + private BigDecimal firstOrderFee; + + @ApiModelProperty("加盟类费用总计") + private BigDecimal storeFixedAmount; + + @ApiModelProperty("设计费") + private BigDecimal designFee; + + @ApiModelProperty("原设计费") + private BigDecimal originalDesignFee; + + @ApiModelProperty("原加盟费") + private BigDecimal originalFranchiseFee; + + @ApiModelProperty("原品牌使用费") + private BigDecimal originalBrandUsageFee; + + @ApiModelProperty("原管理费") + private BigDecimal originalManagementFee; + + @ApiModelProperty("原系统使用费") + private BigDecimal originalSystemUsageFee; + + @ApiModelProperty("原合同保证金") + private BigDecimal originalContractDeposit; + + @ApiModelProperty("原首次订货费用") + private BigDecimal originalFirstOrderFee; + + @ApiModelProperty("原加盟类费用总计") + private BigDecimal originalStoreFixedAmount; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistListVO.java new file mode 100644 index 000000000..f9adbbd71 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/MiniStoreWishlistListVO.java @@ -0,0 +1,73 @@ +package com.cool.store.vo.order; + +import com.cool.store.enums.FranchiseBrandEnum; +import com.cool.store.enums.StoreTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class MiniStoreWishlistListVO { + + @ApiModelProperty("店型ID") + private Long storeTypeId; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("品牌名称") + private String brandName; + + @ApiModelProperty("店型名称") + private String storeTypeName; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("门店类型名称") + private String typeName; + + @ApiModelProperty("主图") + private String imageUrl; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("总额") + private BigDecimal totalAmount; + + @ApiModelProperty("版本号") + private String versionNo; + + @ApiModelProperty("配置项列表") + private List options; + + public String getTypeName() { + return StoreTypeEnum.getMessage(this.storeType); + } + + public String getBrandName() { + return FranchiseBrandEnum.getDescByCode(this.brand); + } + + @Data + public static class OptionVO { + @ApiModelProperty("配置项ID") + private Long optionId; + + @ApiModelProperty("数量") + private BigDecimal quantity; + + @ApiModelProperty("选项名称") + private String optionName; + + @ApiModelProperty("单价") + private BigDecimal optionPrice; + + @ApiModelProperty("图片") + private String imageUrl; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/order/PCStoreOrderListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/PCStoreOrderListVO.java new file mode 100644 index 000000000..1fc404842 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/PCStoreOrderListVO.java @@ -0,0 +1,117 @@ +package com.cool.store.vo.order; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.cool.store.annotation.Excel; +import com.cool.store.enums.FranchiseBrandEnum; +import com.cool.store.enums.StoreTypeEnum; +import com.cool.store.enums.order.StoreOrderStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * PC端-标准店订单列表VO + */ +@Data +public class PCStoreOrderListVO { + + @ApiModelProperty("订单ID") + @ExcelIgnore + private Long orderId; + + @ExcelProperty(value = "订单号", order = 1) + @ApiModelProperty("订单号") + @ColumnWidth(30) + private String orderNo; + + @ExcelProperty(value = "加盟商姓名", order = 2) + @ApiModelProperty("加盟商姓名") + private String partnerName; + + @ExcelProperty(value = "手机号", order = 3) + @ApiModelProperty("加盟商手机号") + private String partnerMobile; + + @ApiModelProperty("门店名称") + @ExcelProperty(value = "门店名称", order = 3) + private String shopName; + + @ApiModelProperty("门店编码") + @ExcelProperty(value = "门店编码", order = 3) + private String shopCode; + + @ApiModelProperty("品牌") + @ExcelIgnore + private String brand; + + @ExcelProperty(value = "品牌", order = 4) + @ApiModelProperty("品牌名称") + private String brandName; + + + @ApiModelProperty("门店类型") + @ExcelIgnore + private Integer storeType; + + @ExcelProperty(value = "门店类型名称", order = 5) + @ApiModelProperty("门店类型名称") + private String storeTypeName; + + @ExcelProperty(value = "店型名称", order = 6) + @ApiModelProperty("店型名称") + private String name; + + @ExcelProperty(value = "订单总额", order = 7) + @ApiModelProperty("订单总额") + private BigDecimal totalAmount; + + @ExcelProperty(value = "下单时间", order = 8) + @ApiModelProperty("下单时间") + @DateTimeFormat(value = "yyyy-MM-dd HH:mm:ss") + private Date orderTime; + + @ExcelProperty(value = "加盟类费用总额", order = 9) + @ApiModelProperty("加盟类费用总额") + private BigDecimal storeFixedAmount; + + @ExcelProperty(value = "已支付金额", order = 7) + @ApiModelProperty("已支付金额") + private BigDecimal paidAmount; + + @ExcelProperty(value = "未支付金额", order = 8) + @ApiModelProperty("未支付金额") + private BigDecimal unpaidAmount; + + @ApiModelProperty("订单状态") + @ExcelIgnore + private Integer status; + + @ExcelProperty(value = "订单状态", order = 9) + @ApiModelProperty("订单状态") + private String statusName; + + public String getBrandName() { + FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(this.brand); + if (enumByCode==null){ + return null; + } + return enumByCode.getDesc(); + } + + public String getStoreTypeName() { + return StoreTypeEnum.getMessage(this.getStoreType()); + } + + public String getStatusName() { + StoreOrderStatusEnum enumByCode = StoreOrderStatusEnum.of(this.status); + if (enumByCode==null){ + return null; + } + return enumByCode.getDesc(); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/order/PreAllocationRecordVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/PreAllocationRecordVO.java new file mode 100644 index 000000000..2fa09362a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/PreAllocationRecordVO.java @@ -0,0 +1,54 @@ +package com.cool.store.vo.order; + +import com.cool.store.annotation.DictField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class PreAllocationRecordVO { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("订单ID") + private Long orderId; + + @ApiModelProperty("门店ID") + private Long shopId; + + @ApiModelProperty("付款单号") + private String payNo; + + @ApiModelProperty("费用类型") + private String expenseType; + + @ApiModelProperty("费用类型名称") + @DictField + private String expenseTypeName; + + @ApiModelProperty("收款公司名称") + private String payeeName; + + @ApiModelProperty("收款公司code") + private String payeeCode; + + @ApiModelProperty("付款金额") + private BigDecimal payAmount; + + @ApiModelProperty("分账状态:0-待分账,1-已分账") + private Integer allocationStatus; + + @ApiModelProperty("分账状态:0-待认领,1-已认领") + private Integer claimStatus; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/order/WalletPayVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/WalletPayVO.java new file mode 100644 index 000000000..93216b085 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/order/WalletPayVO.java @@ -0,0 +1,39 @@ +package com.cool.store.vo.order; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Auther zx_szh + * @Date 2026/2/8 09:42 + * @Version 1.0 + */ +@Data +public class WalletPayVO { + + @ApiModelProperty("付款单号") + private String payNo; + + @ApiModelProperty("付款时间") + private Date payTime; + + @ApiModelProperty("支付流水号") + private String tradeId; + + @ApiModelProperty("付款方式") + private String payType ; + + @ApiModelProperty("付款金额") + private BigDecimal payAmount; + + @ApiModelProperty("状态") + private Integer payStatus; + + + public String getPayType() { + return "平安钱包"; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeOptionVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeOptionVO.java new file mode 100644 index 000000000..88b3edad8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeOptionVO.java @@ -0,0 +1,72 @@ +package com.cool.store.vo.store; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class StoreTypeOptionVO { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("店型ID") + private Long storeTypeId; + + @ApiModelProperty("选项ID") + private Long optionId; + + @ApiModelProperty("配置类型编码") + private String categoryCode; + + @ApiModelProperty("配置项编码") + private String itemCode; + + @ApiModelProperty("是否默认 0否 1是") + private Integer isDefault; + + @ApiModelProperty("默认数量") + private BigDecimal defaultQuantity; + + @ApiModelProperty("数量是否可改 0否 1是") + private Integer allowQuantityEdit; + + @ApiModelProperty("是否展示 0否 1是") + private Integer visible; + + @ApiModelProperty("排序") + private Integer sortOrder; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("选项图片") + private String optionImageUrl; + + @ApiModelProperty("当前店型内选项价格") + private BigDecimal optionPrice; + + @ApiModelProperty("顶部预览图") + private String topPreviewImage; + + @ApiModelProperty("选项原价") + private BigDecimal originalOptionPrice; + + @ApiModelProperty("选项明细") + private String optionRemark; + + @ApiModelProperty("描述") + private String optionDescription; + + @ApiModelProperty("选项名称") + private String optionName; + + @ApiModelProperty("单位") + private String optionUnit; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeVO.java new file mode 100644 index 000000000..bfd4e97bb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/store/StoreTypeVO.java @@ -0,0 +1,89 @@ +package com.cool.store.vo.store; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 店型 VO + */ +@Data +public class StoreTypeVO { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("店型编码") + private String storeTypeCode; + + @ApiModelProperty("店型名称") + private String storeTypeName; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("店型描述") + private String description; + + @ApiModelProperty("主图") + private String imageUrl; + + @ApiModelProperty("视频") + private String videoUrl; + + @ApiModelProperty("VR视频") + private String vrVideoUrl; + + @ApiModelProperty("加盟费") + private BigDecimal franchiseFee; + + @ApiModelProperty("原加盟费") + private BigDecimal originalFranchiseFee; + + @ApiModelProperty("品牌使用费") + private BigDecimal brandUsageFee; + + @ApiModelProperty("原品牌使用费") + private BigDecimal originalBrandUsageFee; + + @ApiModelProperty("管理费") + private BigDecimal managementFee; + + @ApiModelProperty("原管理费") + private BigDecimal originalManagementFee; + + @ApiModelProperty("系统使用费") + private BigDecimal systemUsageFee; + + @ApiModelProperty("原系统使用费") + private BigDecimal originalSystemUsageFee; + + @ApiModelProperty("合同保证金") + private BigDecimal contractDeposit; + + @ApiModelProperty("原合同保证金") + private BigDecimal originalContractDeposit; + + @ApiModelProperty("系统设计费") + private BigDecimal designFee; + + @ApiModelProperty("原系统设计费") + private BigDecimal originalDesignFee; + + @ApiModelProperty("排序") + private Integer sortOrder; + + @ApiModelProperty("是否启用") + private Boolean active; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/visit/StoreVisitReservationVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/visit/StoreVisitReservationVO.java new file mode 100644 index 000000000..1087ef937 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/visit/StoreVisitReservationVO.java @@ -0,0 +1,54 @@ +package com.cool.store.vo.visit; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class StoreVisitReservationVO { + + @ApiModelProperty("预约ID") + private Long id; + + @ApiModelProperty("意向城市ID") + private Long intentCityId; + + @ApiModelProperty("意向城市名称") + private String intentCityName; + + @ApiModelProperty("意向城市路径") + private String intentCityPath; + + @ApiModelProperty("联系人") + private String contactName; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("预约时间") + private Date visitTime; + + @ApiModelProperty("状态") + private Integer status; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("取消原因") + private String cancelReason; + + @ApiModelProperty("当前跟进人员") + private String currentFollowUser; + + @ApiModelProperty("服务人员") + private String serviceUserId; + + @ApiModelProperty("服务人员姓名") + private String serviceUserName; + + private String serviceUserMobile; + + @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 index 59c542c2d..d266c0b35 100644 --- 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 @@ -157,6 +157,8 @@ public class WalletHttpClientRest { // 700-799为平安银行错误 if (code >= 700 && code <= 799) { throw new ServiceException(ErrorCodeEnum.WALLET_API_ERROR, msg); + } else if (code == 610 || msg.equals("支付密码不正确")) { + throw new ServiceException(ErrorCodeEnum.PASSWORD_ERROR); } else { throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "code: " + code + ", msg: " + msg); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DeskService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DeskService.java index 1b466e4d8..9974f8312 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/DeskService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DeskService.java @@ -85,13 +85,20 @@ public interface DeskService { PageInfo payFranchiseFeesPendingList(DeskRequest deskRequest, LoginUserInfo user ); /** * 加盟合同签约待处理数据 - * @param user * @return */ PageInfo signingOfFranchiseContractPendingList(DeskRequest deskRequest, LoginUserInfo user ); + /** + * 店型选配 代处理数据 + * @param deskRequest + * @param user + * @return + */ + PageInfo standardStorePendingList(DeskRequest deskRequest, LoginUserInfo user ); + /** * 发票回传待处理数据 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ExportRealizeService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ExportRealizeService.java index 2e3c6e89c..d67dc8543 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ExportRealizeService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ExportRealizeService.java @@ -1,14 +1,12 @@ package com.cool.store.service; -import com.cool.store.dto.Preparation.PreparationDTO; import com.cool.store.dto.pre.fry.ApplyManagementDTO; import com.cool.store.entity.ImportTaskDO; -import com.cool.store.entity.LineInfoDO; -import com.cool.store.entity.PointInfoDO; import com.cool.store.request.AllPointPageRequest; import com.cool.store.request.FranchiseReportRequest; -import com.cool.store.request.PointPageRequest; +import com.cool.store.request.order.PCStoreOrderQueryRequest; import com.cool.store.request.visit.VisitRecordQueryRequest; +import com.cool.store.request.PointPageRequest; import com.cool.store.response.BranchShopResponse; import com.cool.store.response.FranchiseReportResponse; import com.cool.store.response.ShopReportResponse; @@ -35,6 +33,7 @@ public interface ExportRealizeService { void exportZxjpOpenShopReport(List list, ImportTaskDO importTaskDO, FranchiseReportRequest request); void exportZxjpOpenShopReportPage(List list, ImportTaskDO importTaskDO, FranchiseReportRequest request); + void exportPreFryQualificationApply(List list, ImportTaskDO importTaskDO); /** @@ -42,6 +41,7 @@ public interface ExportRealizeService { */ void exportVisitRecord(VisitRecordQueryRequest request, ImportTaskDO importTaskDO); + void exportOrderRecord(PCStoreOrderQueryRequest request, ImportTaskDO importTaskDO); void exportPoint(AllPointPageRequest request, ImportTaskDO importTaskDO); void myExportPoint(PointPageRequest request, String userId, ImportTaskDO importTaskDO); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ExportService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ExportService.java index 6d8540bbc..432bde573 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ExportService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ExportService.java @@ -5,6 +5,8 @@ import com.cool.store.context.LoginUserInfo; import com.cool.store.dto.pre.fry.ApplyManagementQueryDTO; import com.cool.store.enums.FileTypeEnum; import com.cool.store.request.*; +import com.cool.store.request.order.PCStoreOrderQueryRequest; +import com.cool.store.request.visit.VisitRecordQueryRequest; import com.cool.store.request.visit.VisitRecordQueryRequest; /** @@ -53,6 +55,13 @@ public interface ExportService { */ Long exportVisitRecord(VisitRecordQueryRequest request, LoginUserInfo user); + /** + * 导出标准店订单记录 + * @param request + * @param user + * @return + */ + Long exportStandardStoreOrderRecord(PCStoreOrderQueryRequest request, LoginUserInfo user); /** * 全部铺位导出 * @param request 查询Request diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java index 81545c162..f593325ba 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java @@ -3,6 +3,7 @@ package com.cool.store.service; import com.cool.store.context.LoginUserInfo; import com.cool.store.request.AuditFranchiseFeeRequest; import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.request.FranchisePayTypeUpdateRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.response.FranchiseFeeResponse; import com.cool.store.response.bigdata.ApiResponse; @@ -33,4 +34,11 @@ public interface FranchiseFeeService { Boolean auditFranchiseFee(AuditFranchiseFeeRequest request, LoginUserInfo user); ApiResponse changePaymentStatus(FranchiseFeeCallBackRequest request); + + /** + * 修改付款方式 + * @param request 加盟费支付方式修改Request + * @return 是否成功 + */ + Boolean updatePayType(FranchisePayTypeUpdateRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemCategoryService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemCategoryService.java new file mode 100644 index 000000000..135c9c175 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemCategoryService.java @@ -0,0 +1,20 @@ +package com.cool.store.service.config; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.config.ConfigItemCategoryQueryRequest; +import com.cool.store.request.config.ConfigItemCategoryUpdateRequest; +import com.cool.store.vo.config.ConfigItemCategoryVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +public interface ConfigItemCategoryService { + + Boolean add(ConfigItemCategoryUpdateRequest request, LoginUserInfo userInfo); + + Boolean update(ConfigItemCategoryUpdateRequest request,LoginUserInfo userInfo); + + PageInfo queryPage(ConfigItemCategoryQueryRequest request); + + Boolean deleteByIds(List ids); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemService.java new file mode 100644 index 000000000..ebb922241 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigItemService.java @@ -0,0 +1,22 @@ +package com.cool.store.service.config; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.config.ConfigItemQueryRequest; +import com.cool.store.request.config.ConfigItemUpdateRequest; +import com.cool.store.vo.config.ConfigItemVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +public interface ConfigItemService { + + Boolean add(ConfigItemUpdateRequest request, LoginUserInfo userInfo); + + Boolean update(ConfigItemUpdateRequest request, LoginUserInfo userInfo); + + PageInfo queryPage(ConfigItemQueryRequest request); + + List listByCategoryId(Long categoryId); + + Boolean deleteByIds(List ids); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigOptionService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigOptionService.java new file mode 100644 index 000000000..79deb8e3b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/config/ConfigOptionService.java @@ -0,0 +1,27 @@ +package com.cool.store.service.config; + +import com.cool.store.request.config.ConfigOptionQueryRequest; +import com.cool.store.request.config.ConfigOptionTreeQueryRequest; +import com.cool.store.request.config.ConfigOptionUpdateRequest; +import com.cool.store.vo.config.ConfigOptionTreeVO; +import com.cool.store.vo.config.ConfigOptionVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +public interface ConfigOptionService { + + Boolean add(ConfigOptionUpdateRequest request); + + Boolean update(ConfigOptionUpdateRequest request); + + PageInfo queryPage(ConfigOptionQueryRequest request); + + /** + * 获取所有的选项 三层结构 + * 查询激活的配置选项三层结构:配置类型 -> 配置项 -> 配置选项 + */ + List listActiveTree(); + + Boolean deleteByIds(List ids); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemCategoryServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemCategoryServiceImpl.java new file mode 100644 index 000000000..5c98080b9 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemCategoryServiceImpl.java @@ -0,0 +1,89 @@ +package com.cool.store.service.config.impl; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.config.ConfigItemCategoryDAO; +import com.cool.store.dao.config.ConfigItemDAO; +import com.cool.store.entity.config.ConfigItemCategoryDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.config.ConfigItemCategoryQueryRequest; +import com.cool.store.request.config.ConfigItemCategoryUpdateRequest; +import com.cool.store.service.config.ConfigItemCategoryService; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.config.ConfigItemCategoryVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.Date; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ConfigItemCategoryServiceImpl implements ConfigItemCategoryService { + + private final ConfigItemCategoryDAO configItemCategoryDAO; + private final ConfigItemDAO configItemDAO; + + @Override + public Boolean add(ConfigItemCategoryUpdateRequest request, LoginUserInfo userInfo) { + if (StringUtil.isEmpty(request.getCategoryCode())){ + request.setCategoryCode(UUIDUtils.get8UUID()); + } + if (configItemDAO.existsItemCode(request.getCategoryCode(),request.getId())){ + throw new ServiceException(ErrorCodeEnum.CODE_EXIST); + } + ConfigItemCategoryDO entity = new ConfigItemCategoryDO(); + entity.setCategoryCode(request.getCategoryCode()); + entity.setCategoryName(request.getCategoryName()); + entity.setSortNo(request.getSortNo()); + entity.setImageUrl(request.getImageUrl()); + entity.setVideoUrl(request.getVideoUrl()); + entity.setStatus(request.getStatus()); + entity.setRemark(request.getRemark()); + entity.setCreatedTime(new Date()); + entity.setCreatedUserId(userInfo.getUserId()); + entity.setIsDeleted(0); + return configItemCategoryDAO.insertSelective(entity); + } + + @Override + public Boolean update(ConfigItemCategoryUpdateRequest request,LoginUserInfo userInfo) { + if (StringUtil.isNotEmpty(request.getCategoryCode())&&configItemDAO.existsItemCode(request.getCategoryCode(),request.getId())){ + throw new ServiceException(ErrorCodeEnum.CODE_EXIST); + } + ConfigItemCategoryDO entity = new ConfigItemCategoryDO(); + entity.setId(request.getId()); + entity.setCategoryName(request.getCategoryName()); + entity.setSortNo(request.getSortNo()); + entity.setImageUrl(request.getImageUrl()); + entity.setVideoUrl(request.getVideoUrl()); + entity.setStatus(request.getStatus()); + entity.setRemark(request.getRemark()); + entity.setUpdatedTime(new Date()); + entity.setUpdatedUserId(userInfo.getUserId()); + return configItemCategoryDAO.updateSelective(entity); + } + + @Override + public PageInfo queryPage(ConfigItemCategoryQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = configItemCategoryDAO.queryByCondition(request.getCategoryName(), request.getStatus()); + return new PageInfo<>(list); + } + + @Override + public Boolean deleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + if (configItemDAO.countByCategoryIds(ids) > 0) { + return false; + } + return configItemCategoryDAO.softDeleteByIds(ids); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemServiceImpl.java new file mode 100644 index 000000000..79ebd0edc --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigItemServiceImpl.java @@ -0,0 +1,93 @@ +package com.cool.store.service.config.impl; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.config.ConfigItemCategoryDAO; +import com.cool.store.dao.config.ConfigItemDAO; +import com.cool.store.entity.config.ConfigItemDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.config.ConfigItemQueryRequest; +import com.cool.store.request.config.ConfigItemUpdateRequest; +import com.cool.store.service.config.ConfigItemService; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.config.ConfigItemVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class ConfigItemServiceImpl implements ConfigItemService { + + private final ConfigItemDAO configItemDAO; + private final ConfigItemCategoryDAO configItemCategoryDAO; + + @Override + public Boolean add(ConfigItemUpdateRequest request, LoginUserInfo userInfo) { + if (StringUtil.isEmpty(request.getItemCode())){ + request.setItemCode(UUIDUtils.get8UUID()); + } + if (StringUtil.isNotEmpty(request.getItemCode())&&configItemDAO.existsItemCode(request.getItemCode(),request.getId())){ + throw new ServiceException(ErrorCodeEnum.CODE_EXIST); + } + ConfigItemDO entity = new ConfigItemDO(); + entity.setItemName(request.getItemName()); + entity.setItemCode(request.getItemCode()); + entity.setCategoryId(request.getCategoryId()); + entity.setSortNo(request.getSortNo()); + entity.setStatus(request.getStatus()); + entity.setRemark(request.getRemark()); + entity.setCreatedTime(new Date()); + entity.setCreatedUserId(userInfo.getUserId()); + entity.setIsDeleted(0); + return configItemDAO.insertSelective(entity); + } + + @Override + public Boolean update(ConfigItemUpdateRequest request, LoginUserInfo userInfo) { + if (request.getId()==null){ + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE); + } + if (StringUtil.isNotEmpty(request.getItemCode())&&configItemDAO.existsItemCode(request.getItemCode(),request.getId())){ + throw new ServiceException(ErrorCodeEnum.CODE_EXIST); + } + ConfigItemDO entity = new ConfigItemDO(); + entity.setId(request.getId()); + entity.setItemName(request.getItemName()); + entity.setCategoryId(request.getCategoryId()); + entity.setSortNo(request.getSortNo()); + entity.setStatus(request.getStatus()); + entity.setRemark(request.getRemark()); + entity.setUpdatedTime(new Date()); + entity.setUpdatedUserId(userInfo.getUserId()); + return configItemDAO.updateSelective(entity); + } + + @Override + public PageInfo queryPage(ConfigItemQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = configItemDAO.queryByCondition(request.getItemName(), request.getItemCode(), request.getCategoryId(), request.getStatus()); + return new PageInfo<>(list); + } + + @Override + public List listByCategoryId(Long categoryId) { + return configItemDAO.queryByCondition(null, null, categoryId,1); + } + + @Override + public Boolean deleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + return configItemDAO.softDeleteByIds(ids); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigOptionServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigOptionServiceImpl.java new file mode 100644 index 000000000..a37e5450b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/config/impl/ConfigOptionServiceImpl.java @@ -0,0 +1,193 @@ +package com.cool.store.service.config.impl; + +import com.cool.store.dao.config.ConfigItemCategoryDAO; +import com.cool.store.dao.config.ConfigItemDAO; +import com.cool.store.dao.config.ConfigOptionDAO; +import com.cool.store.dao.dict.SysDictTableDAO; +import com.cool.store.dao.store.StoreTypeOptionDAO; +import com.cool.store.entity.config.ConfigOptionDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.config.ConfigOptionQueryRequest; +import com.cool.store.request.config.ConfigOptionUpdateRequest; +import com.cool.store.request.dict.DictColumnQueryRequest; +import com.cool.store.service.config.ConfigOptionService; +import com.cool.store.service.dict.DictColumnService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.config.*; +import com.cool.store.vo.dict.DictColumnVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class ConfigOptionServiceImpl implements ConfigOptionService { + + private final ConfigOptionDAO configOptionDAO; + private final StoreTypeOptionDAO storeTypeOptionDAO; + private final DictColumnService dictColumnService; + private final SysDictTableDAO dictTableInfoDAO; + private final ConfigItemCategoryDAO configItemCategoryDAO; + private final ConfigItemDAO configItemDAO; + + @Override + public Boolean add(ConfigOptionUpdateRequest request) { + if (request.getSortOrder() != null && configOptionDAO.existsSortOrder(request.getSortOrder(), null)) { + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + + ConfigOptionDO entity = BeanUtil.toBean(request, ConfigOptionDO.class); + entity.setOptionCode(UUIDUtils.get8UUID()); + return configOptionDAO.insertSelective(entity); + } + + @Override + public Boolean update(ConfigOptionUpdateRequest request) { + if (request.getSortOrder() != null) { + ConfigOptionDO old = configOptionDAO.getById(request.getId()); + boolean sortChanged = old == null || old.getSortOrder() == null || !old.getSortOrder().equals(request.getSortOrder()); + if (sortChanged && configOptionDAO.existsSortOrder(request.getSortOrder(), request.getId())) { + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + } + ConfigOptionDO entity = BeanUtil.toBean(request, ConfigOptionDO.class); + return configOptionDAO.updateSelective(entity); + } + + @Override + public PageInfo queryPage(ConfigOptionQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = configOptionDAO.query(request.getCategoryCode(), request.getItemCode(), request.getActive(), request.getOptionName()); + return BeanUtil.toPage(new PageInfo<>(list), ConfigOptionVO.class); + } + + + + @Override + public List listActiveTree() { + // 1) 查询配置类型表:决定第一层顺序 + List typeDictList = configItemCategoryDAO.queryAllList(); + + // 2) 查询配置项表:决定第二层顺序 & 名称 + List itemDictList = configItemDAO.queryByCondition("", "", null, 1); + Map itemDictMap = itemDictList.stream() + .filter(v -> v.getItemCode() != null) + .collect(Collectors.toMap(ConfigItemVO::getItemCode, Function.identity(), (a, b) -> a)); + + // 3) 一次性查询所有激活的配置选项(可选模糊名称) + List options = configOptionDAO.query(null, null, 1, null); + if (CollectionUtils.isEmpty(options)) { + return Collections.emptyList(); + } + + // 4) 按 categoryCode -> itemCode 分组 + Map>> groupMap = options.stream() + .filter(v -> Boolean.TRUE.equals(v.getActive())) + .collect(Collectors.groupingBy( + ConfigOptionDO::getCategoryCode, + Collectors.groupingBy(ConfigOptionDO::getItemCode) + )); + + // 5) 组装三层结构:第一层按 type 字典顺序;第二层按 item 字典顺序;第三层按 sortOrder + List result = new ArrayList<>(); + for (ConfigItemCategoryBaseInfoVO typeDict : typeDictList) { + String categoryCode = typeDict.getCategoryCode(); + Map> itemOptionsMap = groupMap.get(categoryCode); + if (itemOptionsMap == null || itemOptionsMap.isEmpty()) { + continue; + } + + ConfigOptionTreeVO typeVO = new ConfigOptionTreeVO(); + typeVO.setCategoryCode(categoryCode); + typeVO.setCategoryName(typeDict.getCategoryName()); + + List itemVOList = new ArrayList<>(); + for (ConfigItemVO itemDict : itemDictList) { + String itemCode = itemDict.getItemCode(); + List optionList = itemOptionsMap.get(itemCode); + if (CollectionUtils.isEmpty(optionList)) { + continue; + } + + ConfigOptionTreeVO.ConfigItemVO itemVO = new ConfigOptionTreeVO.ConfigItemVO(); + itemVO.setItemCode(itemCode); + itemVO.setItemName(itemDict.getItemName()); + + List optionVOList = optionList.stream() + .sorted(Comparator.comparing(ConfigOptionDO::getSortOrder, Comparator.nullsLast(Integer::compareTo))) + .map(v -> BeanUtil.toBean(v, ConfigOptionVO.class)) + .collect(Collectors.toList()); + itemVO.setOptions(optionVOList); + itemVOList.add(itemVO); + } + + // 如果 itemCode 没在字典表11里(比如数据脏了),补在最后 + Set knownItemCodes = itemDictMap.keySet(); + List unknownItemCodes = itemOptionsMap.keySet().stream() + .filter(v -> v != null && !knownItemCodes.contains(v)) + .sorted() + .collect(Collectors.toList()); + for (String itemCode : unknownItemCodes) { + List optionList = itemOptionsMap.get(itemCode); + if (CollectionUtils.isEmpty(optionList)) { + continue; + } + ConfigOptionTreeVO.ConfigItemVO itemVO = new ConfigOptionTreeVO.ConfigItemVO(); + itemVO.setItemCode(itemCode); + itemVO.setItemName(itemCode); + List optionVOList = optionList.stream() + .sorted(Comparator.comparing(ConfigOptionDO::getSortOrder, Comparator.nullsLast(Integer::compareTo))) + .map(v -> BeanUtil.toBean(v, ConfigOptionVO.class)) + .collect(Collectors.toList()); + itemVO.setOptions(optionVOList); + itemVOList.add(itemVO); + } + + if (CollectionUtils.isEmpty(itemVOList)) { + continue; + } + typeVO.setItems(itemVOList); + result.add(typeVO); + } + + return result; + } + + private List listOpenDictColumns(Long dictTableId) { + DictColumnQueryRequest dictReq = DictColumnQueryRequest.builder() + .dictTableId(dictTableId) + .openStatus(1) + .build(); + dictReq.setPageSize(10000); + dictReq.setPageNum(1); + PageInfo page = dictColumnService.getPage(dictReq); + return page == null ? Collections.emptyList() : Optional.ofNullable(page.getList()).orElse(Collections.emptyList()); + } + + @Override + public Boolean deleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + + for (Long id : ids) { + int usedCount = storeTypeOptionDAO.countByOptionId(id); + if (usedCount > 0) { + throw new ServiceException(ErrorCodeEnum.CONFIG_OPTION_USED); + } + ConfigOptionDO update = new ConfigOptionDO(); + update.setId(id); + update.setActive(false); + configOptionDAO.updateSelective(update); + } + return true; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/dict/impl/DictService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/dict/impl/DictService.java index 387915531..6f8745af8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/dict/impl/DictService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/dict/impl/DictService.java @@ -155,6 +155,7 @@ public class DictService { Map fieldMap = CollStreamUtil.toMap(Arrays.asList(fields), Field::getName, v -> v); List> dictFields = new ArrayList<>(); for (Field field : fields) { + // 这里需要优化,对象类型字段也需要转义,注意可能出现的循环嵌套问题 DictField dictField = field.getAnnotation(DictField.class); if (Objects.nonNull(dictField)) { field.setAccessible(true); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/FeeStandardConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/FeeStandardConfigService.java new file mode 100644 index 000000000..7c086abef --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/FeeStandardConfigService.java @@ -0,0 +1,29 @@ +package com.cool.store.service.fees; + +import com.cool.store.request.fees.FeeStandardConfigAddRequest; +import com.cool.store.request.fees.FeeStandardConfigPageRequest; +import com.cool.store.vo.fees.FeeStandardConfigVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * 加盟费用标准收费额配置Service + */ +public interface FeeStandardConfigService { + + Boolean add(FeeStandardConfigAddRequest request); + + Boolean update(FeeStandardConfigAddRequest request); + + PageInfo page(FeeStandardConfigPageRequest request); + + /** + * 根据门店id查询配置 + * @param shopId 门店id + * @return 加盟费用标准收费额配置VO + */ + List getByShopId(Long shopId); +} + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/PayeeBankConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/PayeeBankConfigService.java new file mode 100644 index 000000000..243a47a96 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/PayeeBankConfigService.java @@ -0,0 +1,28 @@ +package com.cool.store.service.fees; + +import com.cool.store.request.fees.PayeeBankConfigAddRequest; +import com.cool.store.request.fees.PayeeBankConfigPageRequest; +import com.cool.store.vo.fees.PayeeBankConfigVO; +import com.github.pagehelper.PageInfo; + +/** + * 线下收款银行配置Service + */ +public interface PayeeBankConfigService { + + Boolean add(PayeeBankConfigAddRequest request); + + Boolean update(PayeeBankConfigAddRequest request); + + PageInfo page(PayeeBankConfigPageRequest request); + + /** + * 根据门店id查询线下收款银行配置 + * @param shopId 门店id + * @param payType 支付方式 + * @return 线下收款银行配置VO + */ + PayeeBankConfigVO getByShopId(Long shopId, Integer payType); +} + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/ShopAllocationInfoService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/ShopAllocationInfoService.java new file mode 100644 index 000000000..3b15d9eba --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/ShopAllocationInfoService.java @@ -0,0 +1,41 @@ +package com.cool.store.service.fees; + +import com.cool.store.entity.fees.ShopAllocationInfoDO; +import com.cool.store.request.fees.ShopAllocationInfoRequest; +import com.cool.store.vo.fees.ShopAllocationSimpleVO; + +import java.util.List; + +/** + *

+ * 门店平安钱包分账信息服务类 + *

+ * + * @author wangff + * @since 2026/1/29 + */ +public interface ShopAllocationInfoService { + + /** + * 根据门店id查询门店分账信息,不存在时获取默认数据 + * @param shopId 门店id + * @return 门店平安钱包分账信息列表 + */ + List getOrDefault(Long shopId); + /** + * 根据门店id查询门店分账信息 + * @param shopId 门店id + * @return 门店平安钱包分账信息列表 + */ + List getSimpleInfo(Long shopId); + + /** + * 批量新增 + */ + void insertBatch(Long shopId, List list); + + /** + * 批量更新 + */ + void updateBatch(Long shopId, List list); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletAllocationConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletAllocationConfigService.java new file mode 100644 index 000000000..f1d0204ae --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletAllocationConfigService.java @@ -0,0 +1,47 @@ +package com.cool.store.service.fees; + +import com.cool.store.request.fees.WalletCompanyQueryRequest; +import com.cool.store.request.fees.WalletAllocationConfigAddRequest; +import com.cool.store.request.fees.WalletAllocationConfigPageRequest; +import com.cool.store.vo.fees.InvestDivisionRegionVO; +import com.cool.store.vo.fees.WalletAllocationCompanyVO; +import com.cool.store.vo.fees.WalletAllocationConfigVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * 分账配置服务接口 + * + * @author system + */ +public interface WalletAllocationConfigService { + + /** + * 新增分账配置 + */ + Boolean add(WalletAllocationConfigAddRequest request); + + /** + * 编辑分账配置 + */ + Boolean update(WalletAllocationConfigAddRequest request); + + /** + * 分页查询分账配置 + */ + PageInfo page(WalletAllocationConfigPageRequest request); + + /** + * 获取招商分部列表 + */ + List getInvestDivisionRegionList(); + + /** + * 公司列表 + * @param request 收款公司查询Request + * @return 分页对象 + */ + PageInfo companyPage(WalletCompanyQueryRequest request); +} + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletPayInfoService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletPayInfoService.java new file mode 100644 index 000000000..243a8c86a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/WalletPayInfoService.java @@ -0,0 +1,54 @@ +package com.cool.store.service.fees; + +import com.cool.store.request.fees.WalletCancelPayRequest; +import com.cool.store.request.fees.WalletPayRequest; +import com.cool.store.request.fees.WalletRepayRequest; +import com.cool.store.vo.fees.WalletPayInfoVO; + +import java.util.List; + +/** + *

+ * 钱包加盟缴费服务类 + *

+ * + * @author wangff + * @since 2026/1/30 + */ +public interface WalletPayInfoService { + + /** + * 支付 + * @param request 钱包支付Request + * @param oldPayNo 重新支付订单号 + * @return 是否成功 + */ + Boolean pay(WalletPayRequest request, String oldPayNo); + + /** + * 重新支付 + * @param request 钱包重新支付Request + * @return 是否成功 + */ + Boolean rePay(WalletRepayRequest request); + + /** + * 取消支付 + * @param request 钱包取消支付Request + * @return 是否成功 + */ + Boolean cancelPay(WalletCancelPayRequest request); + + /** + * 根据门店id查询缴费信息列表 + * @param shopId 门店id + * @return 钱包加盟缴费信息VO列表 + */ + List payInfoList(Long shopId, Integer payStatus); + + /** + * 重新推送账单到新管家 + * @param walletPayInfoId 支付信息 + */ + void rePushReceipt(Long walletPayInfoId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/FeeStandardConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/FeeStandardConfigServiceImpl.java new file mode 100644 index 000000000..45e50b149 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/FeeStandardConfigServiceImpl.java @@ -0,0 +1,94 @@ +package com.cool.store.service.fees.impl; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.fees.FeeStandardConfigDAO; +import com.cool.store.dao.modify.ModifyRecordDAO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.fees.FeeStandardConfigDO; +import com.cool.store.enums.BusinessModuleEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.fees.FeeStandardConfigAddRequest; +import com.cool.store.request.fees.FeeStandardConfigPageRequest; +import com.cool.store.service.dict.impl.DictService; +import com.cool.store.service.fees.FeeStandardConfigService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.vo.fees.FeeStandardConfigVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 加盟费用标准收费额配置Service实现 + */ +@Service +@RequiredArgsConstructor +public class FeeStandardConfigServiceImpl implements FeeStandardConfigService { + + private final FeeStandardConfigDAO feeStandardConfigDAO; + private final ModifyRecordDAO modifyRecordDAO; + private final DictService dictService; + private final EnterpriseUserDAO enterpriseUserDAO; + private final ShopInfoDAO shopInfoDAO; + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean add(FeeStandardConfigAddRequest request) { + verifyUnique(request.getJoinBrand(), request.getExpenseType(), null); + + FeeStandardConfigDO configDO = BeanUtil.toBean(request, FeeStandardConfigDO.class); + configDO.setCreateUserId(CurrentUserHolder.getUserId()); + feeStandardConfigDAO.insertSelective(configDO); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean update(FeeStandardConfigAddRequest request) { + verifyUnique(request.getJoinBrand(), request.getExpenseType(), request.getId()); + + FeeStandardConfigDO updateDO = BeanUtil.toBean(request, FeeStandardConfigDO.class); + feeStandardConfigDAO.updateByPrimaryKeySelective(updateDO); + + modifyRecordDAO.insertRecord(BusinessModuleEnum.FEE_STANDARD_CONFIG, request.getId(), CurrentUserHolder.getUserId()); + return true; + } + + @Override + public PageInfo page(FeeStandardConfigPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = feeStandardConfigDAO.selectByCondition(request.getJoinBrand(), request.getExpenseType()); + PageInfo page = new PageInfo<>(list); + Set userIds = CollStreamUtil.toSet(list, FeeStandardConfigDO::getCreateUserId); + Map userNameMap = enterpriseUserDAO.getUserNameMap(new ArrayList<>(userIds)); + PageInfo newPage = BeanUtil.toPage(page, FeeStandardConfigVO.class); + newPage.getList().forEach(v -> v.setCreateUserName(userNameMap.get(v.getCreateUserId()))); + dictService.fillDictField(newPage.getList()); + return newPage; + } + + @Override + public List getByShopId(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + List list = feeStandardConfigDAO.selectByCondition(Integer.valueOf(shopInfo.getFranchiseBrand()), null); + return BeanUtil.toList(list, FeeStandardConfigVO.class); + } + + private void verifyUnique(Integer joinBrand, String expenseType, Long excludeId) { + if (feeStandardConfigDAO.existJoinBrandAndExpenseType(joinBrand, expenseType.trim(), excludeId)) { + throw new ServiceException(ErrorCodeEnum.FEE_STANDARD_UNIQUE_KEY_EXISTS); + } + } +} + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/PayeeBankConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/PayeeBankConfigServiceImpl.java new file mode 100644 index 000000000..bb6285fff --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/PayeeBankConfigServiceImpl.java @@ -0,0 +1,122 @@ +package com.cool.store.service.fees.impl; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.constants.RedisConstant; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.FranchiseFeeDAO; +import com.cool.store.dao.RegionDao; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.modify.ModifyRecordDAO; +import com.cool.store.dao.fees.PayeeBankConfigDAO; +import com.cool.store.entity.FranchiseFeeDO; +import com.cool.store.entity.RegionDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.fees.PayeeBankConfigDO; +import com.cool.store.enums.BusinessModuleEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.fees.PayeeBankConfigAddRequest; +import com.cool.store.request.fees.PayeeBankConfigPageRequest; +import com.cool.store.service.fees.PayeeBankConfigService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.vo.fees.PayeeBankConfigVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 线下收款银行配置Service实现 + */ +@Service +@RequiredArgsConstructor +public class PayeeBankConfigServiceImpl implements PayeeBankConfigService { + + private final PayeeBankConfigDAO payeeBankConfigDAO; + private final RedisUtilPool redisUtilPool; + private final ModifyRecordDAO modifyRecordDAO; + private final EnterpriseUserDAO enterpriseUserDAO; + private final ShopInfoDAO shopInfoDAO; + private final FranchiseFeeDAO franchiseFeeDAO; + private final RegionDao regionDao; + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean add(PayeeBankConfigAddRequest request) { + verify(request.getJoinBrand(), request.getInvestDivisionId(), request.getPayType(), null); + + String userId = CurrentUserHolder.getUserId(); + PayeeBankConfigDO configDO = BeanUtil.toBean(request, PayeeBankConfigDO.class); + configDO.setCreateUserId(userId); + payeeBankConfigDAO.insertSelective(configDO); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean update(PayeeBankConfigAddRequest request) { + verify(request.getJoinBrand(), request.getInvestDivisionId(), request.getPayType(), request.getId()); + + PayeeBankConfigDO updateDO = BeanUtil.toBean(request, PayeeBankConfigDO.class); + payeeBankConfigDAO.updateByPrimaryKeySelective(updateDO); + + // 新增业务修改记录 + modifyRecordDAO.insertRecord(BusinessModuleEnum.PAYEE_BANK_CONFIG, request.getId(), CurrentUserHolder.getUserId()); + return true; + } + + @Override + public PageInfo page(PayeeBankConfigPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = payeeBankConfigDAO.selectByCondition( + request.getJoinBrand(), + request.getInvestDivisionId(), + request.getPayType() + ); + PageInfo page = new PageInfo<>(list); + PageInfo newPage = BeanUtil.toPage(page, PayeeBankConfigVO.class); + Set userIds = CollStreamUtil.toSet(list, PayeeBankConfigDO::getCreateUserId); + Map userNameMap = enterpriseUserDAO.getUserNameMap(new ArrayList<>(userIds)); + newPage.getList().forEach(v -> { + v.setInvestDivisionName(redisUtilPool.hashGet(RedisConstant.WALLET_ALLOCATION_CONFIG_INVEST_DIVISION, String.valueOf(v.getInvestDivisionId()))); + v.setCreateUserName(userNameMap.get(v.getCreateUserId())); + }); + return newPage; + } + + @Override + public PayeeBankConfigVO getByShopId(Long shopId, Integer payType) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + FranchiseFeeDO franchiseFeeDO = franchiseFeeDAO.selectByShopId(shopId); + if (Objects.isNull(payType) && (Objects.isNull(franchiseFeeDO) || Objects.isNull(franchiseFeeDO.getPayType()))) { + throw new ServiceException(ErrorCodeEnum.NO_PAYMENT_METHOD_IS_SET); + } + RegionDO regionDO = regionDao.getRegionById(shopInfo.getInvestRegionId()); + PayeeBankConfigDO configDO = payeeBankConfigDAO.getByUniqueKey(Integer.valueOf(shopInfo.getFranchiseBrand()), Long.valueOf(regionDO.getParentId()), Objects.nonNull(payType) ? payType : franchiseFeeDO.getPayType()); + return BeanUtil.toBean(configDO, PayeeBankConfigVO.class); + } + + /** + * 校验: + * 1) 加盟品牌+招商分部+付款方式唯一 + * 2) 同品牌同支付方式只能存在分部或全部 + */ + private void verify(Integer joinBrand, Long investDivisionId, Integer payType, Long excludeId) { + if (payeeBankConfigDAO.existOtherInvestType(joinBrand, payType, investDivisionId, excludeId)) { + throw new ServiceException(ErrorCodeEnum.BANK_CONFIG_INVEST_TYPE_EXISTS); + } + if (payeeBankConfigDAO.existUniqueKey(joinBrand, investDivisionId, payType, excludeId)) { + throw new ServiceException(ErrorCodeEnum.BANK_CONFIG_UNIQUE_KEY_EXISTS); + } + } +} + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/ShopAllocationInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/ShopAllocationInfoServiceImpl.java new file mode 100644 index 000000000..f689262a3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/ShopAllocationInfoServiceImpl.java @@ -0,0 +1,144 @@ +package com.cool.store.service.fees.impl; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.constants.DictConstants; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dao.RegionDao; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.dict.SysDictColumnDAO; +import com.cool.store.dao.fees.*; +import com.cool.store.entity.RegionDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.fees.*; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.fees.ShopAllocationInfoRequest; +import com.cool.store.service.dict.impl.DictService; +import com.cool.store.service.fees.ShopAllocationInfoService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.vo.dict.DictColumnSimpleVO; +import com.cool.store.vo.fees.ShopAllocationSimpleVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 门店平安钱包分账信息服务实现类 + *

+ * + * @author wangff + * @since 2026/1/29 + */ +@Service +@RequiredArgsConstructor +public class ShopAllocationInfoServiceImpl implements ShopAllocationInfoService { + private final ShopAllocationInfoDAO shopAllocationInfoDAO; + private final SysDictColumnDAO dictColumnDAO; + private final WalletAllocationConfigDAO walletAllocationConfigDAO; + private final WalletAllocationCompanyDAO walletAllocationCompanyDAO; + private final FeeStandardConfigDAO feeStandardConfigDAO; + private final ShopInfoDAO shopInfoDAO; + private final RegionDao regionDao; + private final WalletPayInfoDAO walletPayInfoDAO; + private final DictService dictService; + + @Override + public List getOrDefault(Long shopId) { + List list = shopAllocationInfoDAO.getByShopId(shopId); + if (CollectionUtils.isEmpty(list)) { + list = getDefault(shopId); + } + return list; + } + + @Override + public List getSimpleInfo(Long shopId) { + List list = shopAllocationInfoDAO.getByShopId(shopId); + List result = BeanUtil.toList(list, ShopAllocationSimpleVO.class); + dictService.fillDictField(result); + result.forEach(v -> v.setGroupName(v.getExpenseType())); + return result; + } + + @Override + public void insertBatch(Long shopId, List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + List infoList = BeanUtil.toList(list, ShopAllocationInfoDO.class); + String userId = CurrentUserHolder.getUserId(); + infoList.forEach(v -> { + v.setShopId(shopId); + v.setCreateUserId(userId); + v.setUpdateUserId(userId); + v.setStatus(AllocationPayStatusEnum.PAYING.getStatus()); + }); + shopAllocationInfoDAO.insertOrUpdateBatch(infoList); + } + + @Override + public void updateBatch(Long shopId, List list) { + // 存在缴费信息则无法更改 + if (walletPayInfoDAO.existPayInfo(shopId)) { + throw new ServiceException(ErrorCodeEnum.EXIST_PAY_INFO); + } + if (CollectionUtils.isEmpty(list)) { + return; + } + List infoList = BeanUtil.toList(list, ShopAllocationInfoDO.class); + String userId = CurrentUserHolder.getUserId(); + infoList.forEach(v -> { + v.setShopId(shopId); + v.setUpdateUserId(userId); + }); + shopAllocationInfoDAO.insertOrUpdateBatch(infoList); + } + + /** + * 获取默认配置 + * @param shopId 门店id + * @return 分账信息列表 + */ + public List getDefault(Long shopId) { + List expenseTypes = dictColumnDAO.getOpenColumnListByTableCode(Collections.singletonList(DictConstants.EXPENSE_TYPE)); + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + RegionDO regionDO = regionDao.getRegionById(shopInfo.getInvestRegionId()); + Integer joinBrand = Integer.valueOf(shopInfo.getFranchiseBrand()); + // 查询分账公司配置 + List allocationConfigList = walletAllocationConfigDAO.selectByBrandAndInvest(joinBrand, Long.valueOf(regionDO.getParentId())); + List allocationConfigIds = CollStreamUtil.toList(allocationConfigList, WalletAllocationConfigDO::getId); + Map> allocationCompanyMap = walletAllocationCompanyDAO.selectGroupByConfigIds(allocationConfigIds); + Map allocationCompanyConfig = CollStreamUtil.toMap(allocationConfigList, WalletAllocationConfigDO::getExpenseType, v -> allocationCompanyMap.getOrDefault(v.getId(), Collections.emptyList()) + .stream() + .findFirst() + .orElse(null) + ); + // 查询加盟费用标准收费额配置 + Map standardConfigMap = feeStandardConfigDAO.getStandardConfigMap(joinBrand); + // 查询配置 + return expenseTypes.stream() + .filter(v -> DictConstants.PING_AN_DEFAULT_ALLOCATION_EXPENSE_TYPE_CODES.contains(v.getColumnCode())) + .map(v -> { + FeeStandardConfigDO standardConfigDO = standardConfigMap.get(v.getColumnCode()); + WalletAllocationCompanyDO allocationCompanyDO = allocationCompanyConfig.get(v.getColumnCode()); + return ShopAllocationInfoDO.builder() + .shopId(shopId) + .expenseType(v.getColumnCode()) + .payeeName(Objects.nonNull(allocationCompanyDO) ? allocationCompanyDO.getPayeeName() : null) + .payeeCode(Objects.nonNull(allocationCompanyDO) ? allocationCompanyDO.getPayeeCode() : null) + .amount(Objects.nonNull(standardConfigDO) ? standardConfigDO.getAmount() : BigDecimal.ZERO) + .status(AllocationPayStatusEnum.PAYING.getStatus()) + .build(); + }) + .collect(Collectors.toList()); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletAllocationConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletAllocationConfigServiceImpl.java new file mode 100644 index 000000000..5825b7eb6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletAllocationConfigServiceImpl.java @@ -0,0 +1,170 @@ +package com.cool.store.service.fees.impl; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.constants.RedisConstant; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.modify.ModifyRecordDAO; +import com.cool.store.dao.fees.WalletAllocationCompanyDAO; +import com.cool.store.dao.fees.WalletAllocationConfigDAO; +import com.cool.store.dto.wallet.CompanyListDTO; +import com.cool.store.entity.fees.WalletAllocationCompanyDO; +import com.cool.store.entity.fees.WalletAllocationConfigDO; +import com.cool.store.enums.BusinessModuleEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.fees.WalletCompanyQueryRequest; +import com.cool.store.request.fees.WalletAllocationCompanyRequest; +import com.cool.store.request.fees.WalletAllocationConfigAddRequest; +import com.cool.store.request.fees.WalletAllocationConfigPageRequest; +import com.cool.store.request.wallet.*; +import com.cool.store.service.dict.impl.DictService; +import com.cool.store.service.fees.WalletAllocationConfigService; +import com.cool.store.service.wallet.WalletApiService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.vo.fees.InvestDivisionRegionVO; +import com.cool.store.vo.fees.WalletAllocationCompanyVO; +import com.cool.store.vo.fees.WalletAllocationConfigVO; +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.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import static com.cool.store.service.wallet.impl.WalletServiceImpl.toPageInfo; + +/** + * 分账配置服务实现类 + * + * @author system + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WalletAllocationConfigServiceImpl implements WalletAllocationConfigService { + + private final WalletAllocationConfigDAO walletAllocationConfigDAO; + private final WalletAllocationCompanyDAO walletAllocationCompanyDAO; + private final ModifyRecordDAO modifyRecordDAO; + private final RedisUtilPool redisUtilPool; + private final DictService dictService; + private final WalletApiService walletApiService; + private final EnterpriseUserDAO enterpriseUserDAO; + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean add(WalletAllocationConfigAddRequest request) { + verify(request.getJoinBrand(), request.getExpenseType(), request.getInvestDivisionId(), request.getId()); + String userId = CurrentUserHolder.getUserId(); + + WalletAllocationConfigDO configDO = BeanUtil.toBean(request, WalletAllocationConfigDO.class); + configDO.setCreateUserId(userId); + walletAllocationConfigDAO.insertSelective(configDO); + + // 保存分账公司配置 + insertCompanyList(request.getCompanyList(), configDO.getId(), userId); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean update(WalletAllocationConfigAddRequest request) { + verify(request.getJoinBrand(), request.getExpenseType(), request.getInvestDivisionId(), request.getId()); + + WalletAllocationConfigDO configDO = BeanUtil.toBean(request, WalletAllocationConfigDO.class); + walletAllocationConfigDAO.updateByPrimaryKeySelective(configDO); + + String userId = CurrentUserHolder.getUserId(); + walletAllocationCompanyDAO.deleteByConfigId(request.getId()); + // 保存分账公司配置 + insertCompanyList(request.getCompanyList(), configDO.getId(), userId); + + // 新增业务修改记录 + modifyRecordDAO.insertRecord(BusinessModuleEnum.WALLET_ALLOCATION_CONFIG, request.getId(), userId); + return true; + } + + public void insertCompanyList(List companyList, Long configId, String userId) { + if (CollectionUtils.isNotEmpty(companyList)) { + List list = BeanUtil.toList(companyList, WalletAllocationCompanyDO.class); + list.forEach(v -> { + v.setConfigId(configId); + v.setCreateUserId(userId); + }); + walletAllocationCompanyDAO.insertBatch(list); + } + } + + @Override + public PageInfo page(WalletAllocationConfigPageRequest request) { + List configIds = null; + if (Objects.nonNull(request.getPayeeCode())) { + List companyList = walletAllocationCompanyDAO.selectByPayeeCode(request.getPayeeCode()); + if (CollectionUtils.isEmpty(companyList)) { + return new PageInfo<>(); + } + configIds = CollStreamUtil.toList(companyList, WalletAllocationCompanyDO::getConfigId); + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + // 查询分账配置 + List configList = walletAllocationConfigDAO.selectByCondition( + request.getJoinBrand(), + request.getInvestDivisionId(), + request.getExpenseType(), + configIds + ); + PageInfo page = new PageInfo<>(configList); + PageInfo newPage = BeanUtil.toPage(page, WalletAllocationConfigVO.class); + List resultConfigIds = CollStreamUtil.toList(configList, WalletAllocationConfigDO::getId); + Set userIds = CollStreamUtil.toSet(configList, WalletAllocationConfigDO::getCreateUserId); + Map> companyGroup = walletAllocationCompanyDAO.selectGroupByConfigIds(resultConfigIds); + Map userNameMap = enterpriseUserDAO.getUserNameMap(new ArrayList<>(userIds)); + + newPage.getList().forEach(v -> { + v.setInvestDivisionName(redisUtilPool.hashGet(RedisConstant.WALLET_ALLOCATION_CONFIG_INVEST_DIVISION, String.valueOf(v.getInvestDivisionId()))); + List companyList = companyGroup.getOrDefault(v.getId(), Collections.emptyList()); + v.setCompanyList(BeanUtil.toList(companyList, WalletAllocationCompanyVO.class)); + v.setCreateUserName(userNameMap.get(v.getCreateUserId())); + }); + dictService.fillDictField(newPage.getList()); + return newPage; + } + + @Override + public List getInvestDivisionRegionList() { + Map map = redisUtilPool.hashGetAll(RedisConstant.WALLET_ALLOCATION_CONFIG_INVEST_DIVISION); + return map.entrySet().stream() + .map(v -> new InvestDivisionRegionVO(Long.valueOf(v.getKey()), v.getValue())) + .collect(Collectors.toList()); + } + + @Override + public PageInfo companyPage(WalletCompanyQueryRequest request) { + FindPageCompanyRequest apiRequest = new FindPageCompanyRequest(); + apiRequest.setCompanyName(request.getCompanyName()); + apiRequest.setCompanyCode(request.getCompanyCode()); + apiRequest.setPage(new WalletBasicPageInfo(request.getPageNum(), request.getPageSize())); + CompanyListDTO companyInfo = walletApiService.getCompanyInfo(apiRequest); + List list = CollStreamUtil.toList(companyInfo.getPageData(), v -> new WalletAllocationCompanyVO(v.getCompanyName(), v.getCompanyCode())); + return toPageInfo(list, WalletAllocationCompanyVO.class, companyInfo.getPage()); + } + + /** + * 校验同种费用只允许配置分部或者全部,存在另一种时报错 + */ + private void verify(Integer joinBrand, String expenseType, Long investDivisionId, Long excludeId) { + if (walletAllocationConfigDAO.existOtherInvestType(joinBrand, expenseType, investDivisionId, excludeId)) { + throw new ServiceException(ErrorCodeEnum.WALLET_INVEST_TYPE_EXISTS); + } + if (walletAllocationConfigDAO.existUniqueKey(joinBrand, investDivisionId, expenseType, excludeId)) { + throw new ServiceException(ErrorCodeEnum.WALLET_UNIQUE_KEY_EXISTS); + } + } +} + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletPayInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletPayInfoServiceImpl.java new file mode 100644 index 000000000..39ad6d0f2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/fees/impl/WalletPayInfoServiceImpl.java @@ -0,0 +1,344 @@ +package com.cool.store.service.fees.impl; + +import cn.hutool.core.collection.CollStreamUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.DictConstants; +import com.cool.store.constants.RedisConstant; +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.dao.FranchiseFeeDAO; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dao.dict.SysDictColumnDAO; +import com.cool.store.dao.fees.ShopAllocationInfoDAO; +import com.cool.store.dao.fees.WalletPayInfoDAO; +import com.cool.store.dao.wallet.WalletTradeDAO; +import com.cool.store.dto.wallet.AccountInfoDTO; +import com.cool.store.dto.wallet.BatchTransferDTO; +import com.cool.store.request.wallet.BatchTransferRequest; +import com.cool.store.dto.wallet.TransferDTO; +import com.cool.store.entity.FranchiseFeeDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.entity.fees.ShopAllocationInfoDO; +import com.cool.store.entity.fees.WalletPayInfoDO; +import com.cool.store.entity.wallet.WalletTradeDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import com.cool.store.enums.fees.PayTypeEnum; +import com.cool.store.enums.fees.WalletFeeItemEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.fees.WalletCancelPayRequest; +import com.cool.store.request.fees.WalletPayRequest; +import com.cool.store.request.fees.WalletRepayRequest; +import com.cool.store.request.wallet.OutStoreIdRequest; +import com.cool.store.request.wallet.TransferRequest; +import com.cool.store.request.xgj.ReceiptRequest; +import com.cool.store.service.PushService; +import com.cool.store.service.fees.WalletPayInfoService; +import com.cool.store.service.wallet.WalletApiService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.GenerateNoUtil; +import com.cool.store.utils.RedisUtil; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.fees.WalletPayInfoVO; +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 org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.text.MessageFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + *

+ * 钱包加盟缴费服务实现类 + *

+ * + * @author wangff + * @since 2026/1/30 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class WalletPayInfoServiceImpl implements WalletPayInfoService { + private final WalletPayInfoDAO walletPayInfoDAO; + private final FranchiseFeeDAO franchiseFeeDAO; + private final SysDictColumnDAO sysDictColumnDAO; + private final ShopAllocationInfoDAO shopAllocationInfoDAO; + private final ShopInfoDAO shopInfoDAO; + private final WalletApiService walletApiService; + private final SysDictColumnDAO dictColumnDAO; + private final WalletTradeDAO walletTradeDAO; + private final RedisUtil redisUtil; + private final ShopStageInfoDAO shopStageInfoDAO; + private final PushService pushService; + + @Override + @Transactional + public Boolean pay(WalletPayRequest request, String oldPayNo) { + log.info("钱包缴费开始,参数:{}", JSONObject.toJSONString(request)); + if (StringUtils.isNotBlank(oldPayNo) && CollectionUtils.isNotEmpty(request.getExpenseTypes()) && request.getExpenseTypes().size() > 1) { + // 重新支付不支持批量 + throw new ServiceException(ErrorCodeEnum.WALLET_RE_PAY_FAIL); + } + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + String lockKey = MessageFormat.format(RedisConstant.WALLET_ALLOCATION_PAY_LOCK_KEY, shopInfo.getId()); + Boolean lock = redisUtil.tryLock(lockKey, lockKey, 600, TimeUnit.SECONDS); + if (!Boolean.TRUE.equals(lock)) { + throw new ServiceException(ErrorCodeEnum.THE_USER_IS_PAYING); + } + try { + // 查询所有费用 + List list = shopAllocationInfoDAO.getByShopId(request.getShopId()); + Map allocationAmountMap = CollStreamUtil.toMap(list, ShopAllocationInfoDO::getExpenseType, ShopAllocationInfoDO::getAmount); + Map allocationInfoMap = CollStreamUtil.toMap(list, ShopAllocationInfoDO::getExpenseType, v -> v); + + // 支付校验 + verifyPay(request, shopInfo, allocationAmountMap); + + // 批量发起转账 + PartnerUserInfoVO user = PartnerUserHolder.getUser(); + List updateAllocationInfoList = new ArrayList<>(); + List walletPayInfoList = new ArrayList<>(); + List walletRePayInfoList = new ArrayList<>(); + List walletTradeList = new ArrayList<>(); + // 构建批量请求对象 + List transDataList = CollStreamUtil.toList(request.getExpenseTypes(), expenseType -> { + ShopAllocationInfoDO shopAllocationInfoDO = allocationInfoMap.get(expenseType); + BigDecimal payAmount = allocationAmountMap.get(expenseType); + String payNo = StringUtils.isNotBlank(oldPayNo) ? oldPayNo : GenerateNoUtil.generateMillsNoWithRandom(); + WalletFeeItemEnum feeItem = WalletFeeItemEnum.getByExpenseType(expenseType); + assert feeItem != null; + return new BatchTransferRequest.TransDataRequest(payNo, feeItem.getFeeItemId(), shopAllocationInfoDO.getPayeeCode(), null, payAmount.toString(), feeItem.getDesc()); + }); + BatchTransferRequest transRequest = new BatchTransferRequest(shopInfo.getStoreId(), request.getPayPwd(), transDataList); + BatchTransferDTO batchTransferDTO = walletApiService.batchTransfer(transRequest); + if (CollectionUtils.isEmpty(batchTransferDTO.getTransArray())) { + throw new ServiceException(ErrorCodeEnum.WALLET_TRANS_FAIL); + } + for (BatchTransferDTO.TransDataRequest transResult : batchTransferDTO.getTransArray()) { + WalletFeeItemEnum feeItemEnum = WalletFeeItemEnum.getByFeeItemId(transResult.getFeeItemId()); + assert feeItemEnum != null; + WalletPayInfoDO walletPayInfoDO = new WalletPayInfoDO( + WalletTradeModuleEnum.FRANCHISE_PAY.getModule(), request.getShopId(), transResult.getReqNo(), user.getUsername(), new BigDecimal(transResult.getAmount()), feeItemEnum.getExpenseType(), user.getPartnerId(), String.valueOf(transResult.getTradeId()) + ); + // 这里只返回成功或失败 + walletPayInfoDO.setPayStatus(batchTransferDTO.getTradeStatus()); + if (StringUtils.isNotBlank(oldPayNo)) { + walletRePayInfoList.add(walletPayInfoDO); + } else { + walletPayInfoList.add(walletPayInfoDO); + } + // 分账信息 + ShopAllocationInfoDO shopAllocationInfoDO = allocationInfoMap.get(feeItemEnum.getExpenseType()); + shopAllocationInfoDO.setStatus(batchTransferDTO.getTradeStatus()); + updateAllocationInfoList.add(shopAllocationInfoDO); + // 钱包交易单 + WalletTradeDO walletTradeDO = walletPayInfoDO.convertToTradeDO(WalletTradeModuleEnum.FRANCHISE_PAY.getModule()); + walletTradeList.add(walletTradeDO); + } + if (CollectionUtils.isNotEmpty(walletPayInfoList)) { + walletPayInfoDAO.insertBatch(walletPayInfoList); + } + if (CollectionUtils.isNotEmpty(walletRePayInfoList)) { + walletPayInfoDAO.updateByPayNo(walletRePayInfoList.get(0)); + } + if (CollectionUtils.isNotEmpty(updateAllocationInfoList)) { + shopAllocationInfoDAO.updateBatch(updateAllocationInfoList); + } + if (CollectionUtils.isNotEmpty(walletTradeList)) { + walletTradeDAO.insertBatch(walletTradeList); + } + // 支付成功 + if (AllocationPayStatusEnum.PAID.getStatus().equals(batchTransferDTO.getTradeStatus())) { + // 校验并流转流程 + verifyAndProcessFlow(shopInfo.getId()); + // 推送缴费单数据到新管家 + if (CollectionUtils.isNotEmpty(walletPayInfoList)) { + pushReceiptRequest(walletPayInfoList, shopInfo); + } + if (CollectionUtils.isNotEmpty(walletRePayInfoList)) { + pushReceiptRequest(walletRePayInfoList, shopInfo); + } + } + } finally { + redisUtil.unlock(lockKey); + } + return true; + } + + /** + * 推送账单到新管家 + */ + private void pushReceiptRequest(List payInfoList, ShopInfoDO shopInfoDO) { + if (CollectionUtils.isEmpty(payInfoList)) { + return; + } + FranchiseFeeDO franchiseFeeDO = franchiseFeeDAO.selectByShopId(shopInfoDO.getId()); + for (WalletPayInfoDO payInfo : payInfoList) { + ReceiptRequest receiptRequest = new ReceiptRequest(shopInfoDO.getId(), franchiseFeeDO.getId().intValue(), payInfo, Integer.valueOf(shopInfoDO.getFranchiseBrand())); + try { + pushService.pushReceiptToXGJ(receiptRequest); + } catch (Exception e) { + log.error("钱包账单推送新管家失败, walletPayInfoId:{}", payInfo.getId(), e); + } + } + } + + /** + * 校验并流转阶段 + */ + private void verifyAndProcessFlow(Long shopId) { + ShopStageInfoDO shopStage = shopStageInfoDAO.getByShopIdAndSubStage(shopId, ShopSubStageEnum.SHOP_STAGE_7.getShopSubStage()); + if (Objects.nonNull(shopStage) && ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus().equals(shopStage.getShopSubStageStatus())) { + List allocationList = shopAllocationInfoDAO.getByShopId(shopId); + boolean allPaid = allocationList.stream().allMatch(v -> AllocationPayStatusEnum.PAID.getStatus().equals(v.getStatus())); + // 已全部支付流程改为对账中 + if (allPaid) { + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72); + } + } + } + + /** + * 支付校验 + */ + private void verifyPay(WalletPayRequest request, ShopInfoDO shopInfo, Map allocationAmountMap) { + // 校验费用类型 + for (String expenseType : request.getExpenseTypes()) { + if (!DictConstants.PING_AN_DEFAULT_ALLOCATION_EXPENSE_TYPE_CODES.contains(expenseType)) { + throw new ServiceException(ErrorCodeEnum.NONSUPPORT_EXPENSE_TYPE); + } + } + // 校验付款方式 + FranchiseFeeDO franchiseFeeDO = franchiseFeeDAO.selectByShopId(request.getShopId()); + if (Objects.isNull(franchiseFeeDO) || !PayTypeEnum.PING_AN.getType().equals(franchiseFeeDO.getPayType())) { + throw new ServiceException(ErrorCodeEnum.PAY_TYPE_UNEQUAL_TO_PING_AN_WALLET); + } + Map nameMap = sysDictColumnDAO.getNameMapByCodes(DictConstants.PING_AN_DEFAULT_ALLOCATION_EXPENSE_TYPE_CODES); + // 校验费用类型是否已缴纳 + List paidList = walletPayInfoDAO.getPaidByShopId(request.getShopId(), WalletTradeModuleEnum.FRANCHISE_PAY.getModule()); + String paidExpenseTypes = paidList.stream() + .flatMap(v -> Arrays.stream(v.getExpenseTypes().split(","))) + .filter(v -> request.getExpenseTypes().contains(v)) + .map(nameMap::get) + .collect(Collectors.joining(CommonConstants.COMMA)); + if (StringUtils.isNotBlank(paidExpenseTypes)) { + throw new ServiceException(ErrorCodeEnum.EXPENSE_TYPE_HAS_PAID, paidExpenseTypes); + } + + // 校验金额是否一致 + BigDecimal totalAmount = BigDecimal.valueOf(0); + for (String expenseType : request.getExpenseTypes()) { + BigDecimal amount = allocationAmountMap.get(expenseType); + if (Objects.isNull(amount)) { + throw new ServiceException(ErrorCodeEnum.THERE_IS_NO_PAYMENT_INFORMATION); + } + totalAmount = totalAmount.add(amount); + } + if (totalAmount.compareTo(request.getAmount()) != 0) { + throw new ServiceException(ErrorCodeEnum.EXPENSE_CHANGED); + } + // 校验余额 + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(shopInfo.getStoreId())); + AccountInfoDTO accountInfoDTO = accountInfo.stream().filter(v -> CommonConstants.INDEX_ONE.equals(v.getWalletType()) && CommonConstants.INDEX_ZERO.equals(v.getLabelingStatus())).findFirst().orElse(null); + if (Objects.isNull(accountInfoDTO)) { + throw new ServiceException(ErrorCodeEnum.NOT_EXIST_PING_AN_ACCOUNT); + } + if (new BigDecimal(accountInfoDTO.getTotalAmount()).compareTo(totalAmount) < 0) { + throw new ServiceException(ErrorCodeEnum.NOT_ENOUGH_BALANCE); + } + } + + @Override + @Transactional + public Boolean rePay(WalletRepayRequest request) { + WalletPayInfoDO payInfoDO = walletPayInfoDAO.getById(request.getPayInfoId()); + if (Objects.isNull(payInfoDO)) { + throw new ServiceException(ErrorCodeEnum.THERE_IS_NO_PAYMENT_INFORMATION); + } + WalletPayRequest payRequest = new WalletPayRequest(); + payRequest.setShopId(payInfoDO.getShopId()); + payRequest.setExpenseTypes(Collections.singletonList(payInfoDO.getExpenseTypes())); + payRequest.setAmount(payInfoDO.getPayAmount()); + payRequest.setPayPwd(request.getPayPwd()); + return pay(payRequest, payInfoDO.getPayNo()); + } + + @Override + public Boolean cancelPay(WalletCancelPayRequest request) { + WalletPayInfoDO payInfoDO = walletPayInfoDAO.getById(request.getPayInfoId()); + if (Objects.isNull(payInfoDO)) { + throw new ServiceException(ErrorCodeEnum.THERE_IS_NO_PAYMENT_INFORMATION); + } + if (!AllocationPayStatusEnum.FAIL.getStatus().equals(payInfoDO.getPayStatus())) { + throw new ServiceException(ErrorCodeEnum.WALLET_PAY_CANNOT_CANCEL); + } + WalletPayInfoDO updateInfo = new WalletPayInfoDO(); + updateInfo.setId(request.getPayInfoId()); + updateInfo.setPayStatus(AllocationPayStatusEnum.CANCEL.getStatus()); + walletPayInfoDAO.updateByPrimaryKeySelective(updateInfo); + return true; + } + + @Override + public List payInfoList(Long shopId, Integer payStatus) { + List list = walletPayInfoDAO.getByShopId(shopId, WalletTradeModuleEnum.FRANCHISE_PAY.getModule(), payStatus); + List expenseTypes = list.stream() + .flatMap(v -> Arrays.stream(v.getExpenseTypes().split(","))) + .distinct() + .collect(Collectors.toList()); + Map nameMap = dictColumnDAO.getNameMapByCodes(expenseTypes); + List result = BeanUtil.toList(list, WalletPayInfoVO.class); + result.forEach(v -> { + String expenseTypeName = Arrays.stream(v.getExpenseTypes().split(",")).map(nameMap::get).collect(Collectors.joining(CommonConstants.COMMA)); + v.setExpenseTypeName(expenseTypeName); + }); + return result; + } + + @Override + public void rePushReceipt(Long walletPayInfoId) { + WalletPayInfoDO payInfoDO = walletPayInfoDAO.getById(walletPayInfoId); + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(payInfoDO.getShopId()); + pushReceiptRequest(Collections.singletonList(payInfoDO), shopInfo); + } + + /** + * 调用营帐通转账接口进行 + * @param expenseType 费用类型 + * @param amount 转账金额 + * @param payPwd 支付密码 + * @param storeId 门店id + * @param payNo 付款单号 + * @param companyCode 公司code + * @return 转账结果DTO + */ + public TransferDTO pay(String expenseType, BigDecimal amount, String payPwd, String storeId, String payNo, String companyCode) { + WalletFeeItemEnum feeItem = WalletFeeItemEnum.getByExpenseType(expenseType); + if (Objects.isNull(feeItem)) { + throw new ServiceException(ErrorCodeEnum.NONSUPPORT_EXPENSE_TYPE); + } + TransferRequest request = new TransferRequest(); + request.setOutStoreId(storeId); + request.setPayPwd(payPwd); + request.setReqNo(payNo); + request.setFeeItemId(feeItem.getFeeItemId()); + request.setCompanyCode(companyCode); + request.setAmount(amount.toString()); + request.setRemark(feeItem.getDesc()); + return walletApiService.transfer(request); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandleServiceImpl.java index 839a0b109..91fa40b24 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandleServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandleServiceImpl.java @@ -289,7 +289,7 @@ public class DataHandleServiceImpl implements DataHandleService { ShopStageEnum shopStageEnum = shopSubStageEnum.getShopStageEnum(); shopStageInfo.setShopStage(shopStageEnum.getShopStage()); shopStageInfo.setShopSubStage(shopSubStageEnum.getShopSubStage()); - ShopSubStageStatusEnum initStatus = shopSubStageEnum.getInitStatus(); + ShopSubStageStatusEnum initStatus = shopSubStageEnum.getInitStatus(1); if (ShopSubStageEnum.SHOP_STAGE_15.equals(shopSubStageEnum)&&flag){ initStatus = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java index 527b59616..4b6c866a1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java @@ -312,12 +312,46 @@ public class DeskServiceImpl implements DeskService { if (userRoleIds.contains(UserRoleEnum.FINANCE.getCode())) { subStageStatusList.add(SHOP_SUB_STAGE_STATUS_83_5.getShopSubStageStatus()); } + if (CollectionUtils.isEmpty(subStageStatusList)) { + return new PageInfo<>(); + } PageInfo pageInfo = commonPendingVOPageInfo(deskRequest, user, ShopSubStageEnum.SHOP_STAGE_8, subStageStatusList, Boolean.TRUE); return pageInfo; } + @Override + public PageInfo standardStorePendingList(DeskRequest deskRequest, LoginUserInfo user) { + List subStageStatusList = new ArrayList<>(); + List userRoleIds = enterpriseUserRoleMapper.getUserRoleIds(user.getUserId()); + //两个角色都包含 + if (userRoleIds.contains(UserRoleEnum.HEAD_OF_DESIGN.getCode())&&userRoleIds.contains(UserRoleEnum.FINANCE.getCode())){ + subStageStatusList.add(SHOP_SUB_STAGE_STATUS_281.getShopSubStageStatus()); + subStageStatusList.add(SHOP_SUB_STAGE_STATUS_282.getShopSubStageStatus()); + } + //加盟内勤 待确认 + if (userRoleIds.contains(UserRoleEnum.HEAD_OF_DESIGN.getCode())){ + subStageStatusList.add(SHOP_SUB_STAGE_STATUS_281.getShopSubStageStatus()); + } + //如果是财务 待财务确认 + if (userRoleIds.contains(UserRoleEnum.FINANCE.getCode())){ + subStageStatusList.add(SHOP_SUB_STAGE_STATUS_282.getShopSubStageStatus()); + } + if (userRoleIds.contains(UserRoleEnum.INVESTMENT_MANGER.getCode())){ + subStageStatusList.add(SHOP_SUB_STAGE_STATUS_281_5.getShopSubStageStatus()); + return commonPendingVOPageInfo(deskRequest, user, + ShopSubStageEnum.SHOP_STAGE_28, subStageStatusList, Boolean.FALSE); + } + if (CollectionUtils.isEmpty(subStageStatusList)){ + return new PageInfo<>(); + } + Boolean isAdmin = sysRoleService.checkIsAdmin(user.getUserId()); + PageInfo pageInfo = commonPendingVOPageInfo(deskRequest, isAdmin ? null : user, + ShopSubStageEnum.SHOP_STAGE_28, subStageStatusList, isAdmin ? Boolean.FALSE : Boolean.TRUE); + return pageInfo; + } + @Override public PageInfo invoiceReturnPendingList(DeskRequest deskRequest, LoginUserInfo user) { return commonPendingVOPageInfo(deskRequest, null, ShopSubStageEnum.SHOP_STAGE_8_5, diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportRealizeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportRealizeServiceImpl.java index ec5cc0022..0a99dc7f1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportRealizeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportRealizeServiceImpl.java @@ -14,12 +14,17 @@ import com.cool.store.exception.ServiceException; import com.cool.store.mapper.*; import com.cool.store.request.AllPointPageRequest; import com.cool.store.request.FranchiseReportRequest; +import com.cool.store.request.order.PCStoreOrderQueryRequest; +import com.cool.store.request.visit.VisitRecordQueryRequest; import com.cool.store.request.PointPageRequest; import com.cool.store.request.visit.VisitRecordQueryRequest; import com.cool.store.response.BranchShopResponse; import com.cool.store.response.FranchiseReportResponse; import com.cool.store.response.ShopReportResponse; import com.cool.store.service.*; +import com.cool.store.service.order.MiniStoreOrderService; +import com.cool.store.service.order.impl.MiniStoreOrderServiceImpl; +import com.cool.store.service.visit.VisitRecordService; import com.cool.store.service.visit.VisitRecordService; import com.cool.store.utils.BeanUtil; import com.cool.store.utils.JSONUtils; @@ -28,6 +33,8 @@ import com.cool.store.utils.easyExcel.EasyExcelUtil; import com.cool.store.utils.poi.DateUtils; import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.order.PCStoreOrderListVO; +import com.cool.store.vo.visit.VisitRecordListVO; import com.cool.store.vo.point.PointExportVO; import com.cool.store.vo.point.PointPageVO; import com.cool.store.vo.visit.VisitRecordListVO; @@ -115,6 +122,8 @@ public class ExportRealizeServiceImpl implements ExportRealizeService { @Resource private VisitRecordService visitRecordService; @Resource + MiniStoreOrderService miniStoreOrderService; + @Resource private PointService pointService; @Resource private PointFinancialDataDAO pointFinancialDataDAO; @@ -734,6 +743,29 @@ public class ExportRealizeServiceImpl implements ExportRealizeService { } } + @Override + @Async("generalThreadPool") + public void exportOrderRecord(PCStoreOrderQueryRequest request, ImportTaskDO importTaskDO) { + String url = ""; + try { + url = easyExcelUtil.exportExcelInBatches(PCStoreOrderListVO.class, + (pageNum, pageSize) -> { + request.setPageNum(pageNum); + request.setPageSize(pageSize); + return miniStoreOrderService.list(request).getList(); + }, + FileTypeEnum.ORDER_RECORD_EXPORT.getDesc(), + FileTypeEnum.ORDER_RECORD_EXPORT.getDesc()); + importTaskDO.setStatus(ImportStatusEnum.success.getCode()); + } catch (Exception e) { + log.error("拜访记录导出失败", e); + importTaskDO.setStatus(ImportStatusEnum.fail.getCode()); + } finally { + importTaskDO.setFileUrl(url); + importTaskMapper.update(eid, importTaskDO); + } + } + @Override @Async("generalThreadPool") public void exportVisitRecord(VisitRecordQueryRequest request, ImportTaskDO importTaskDO) { diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportServiceImpl.java index 074ba4c2c..a5a86b5ff 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportServiceImpl.java @@ -8,6 +8,10 @@ import com.cool.store.dao.HyOpenAreaInfoDAO; import com.cool.store.dao.LineInfoDAO; import com.cool.store.dao.PreFryQualificationApplyDAO; import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.order.StoreOrderDAO; +import com.cool.store.dao.visit.VisitRecordDAO; +import com.cool.store.dto.Preparation.PreparationDTO; +import com.cool.store.dto.Preparation.ScheduleDTO; import com.cool.store.dao.visit.VisitRecordDAO; import com.cool.store.dto.pre.fry.ApplyManagementDTO; import com.cool.store.dto.pre.fry.ApplyManagementQueryDTO; @@ -19,6 +23,8 @@ import com.cool.store.exception.ServiceException; import com.cool.store.mapper.ImportTaskMapper; import com.cool.store.mapper.PointInfoMapper; import com.cool.store.request.*; +import com.cool.store.request.order.PCStoreOrderQueryRequest; +import com.cool.store.request.visit.VisitRecordQueryRequest; import com.cool.store.request.visit.VisitRecordQueryRequest; import com.cool.store.response.BranchShopResponse; import com.cool.store.response.FranchiseReportResponse; @@ -33,6 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -212,6 +219,33 @@ public class ExportServiceImpl implements ExportService { return (long) list.size(); } + + @Resource + StoreOrderDAO storeOrderDAO; + + @Override + public Long exportStandardStoreOrderRecord(PCStoreOrderQueryRequest request, LoginUserInfo user) { + Long count = storeOrderDAO.count(request); + if (count.intValue() > CommonConstants.MAX_EXPORT_SIZE_PRO) { + throw new ServiceException(ErrorCodeEnum.EXPORT_LIMIT_100000); + } + if (count==0){ + log.error("导出数据为空"); + return 0L; + } + ImportTaskDO importTaskDO = new ImportTaskDO(); + importTaskDO.setStatus(ImportStatusEnum.Ongoing.getCode()); + importTaskDO.setFileName(FileTypeEnum.ORDER_RECORD_EXPORT.getDesc() + DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START_1, new Date())); + importTaskDO.setIsImport(Boolean.FALSE); + importTaskDO.setFileType(FileTypeEnum.ORDER_RECORD_EXPORT.getFileType()); + importTaskDO.setCreateUserId(user.getUserId()); + importTaskDO.setCreateTime(new Date().getTime()); + importTaskDO.setCreateName(user.getName()); + importTaskMapper.insert(eid, importTaskDO); + exportRealizeService.exportOrderRecord(request, importTaskDO); + return count; + } + @Override public Long exportVisitRecord(VisitRecordQueryRequest request, LoginUserInfo user) { Long count = visitRecordDAO.getVisitRecordCount(request); 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 2de8be139..085d29f7f 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 @@ -1,19 +1,24 @@ package com.cool.store.service.impl; import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.RedisConstant; import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.FranchiseFeeDAO; import com.cool.store.dao.PointDetailInfoDAO; import com.cool.store.dao.PointInfoDAO; import com.cool.store.dao.ShopStageInfoDAO; import com.cool.store.entity.*; +import com.cool.store.entity.fees.ShopAllocationInfoDO; import com.cool.store.enums.*; -import com.cool.store.enums.point.PayBusinessTypeEnum; +import com.cool.store.enums.fees.PayTypeEnum; 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.request.AuditFranchiseFeeRequest; import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.request.FranchisePayTypeUpdateRequest; +import com.cool.store.request.fees.ShopAllocationInfoRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.response.FranchiseFeeResponse; @@ -21,15 +26,26 @@ import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.service.FranchiseFeeService; import com.cool.store.service.PushService; import com.cool.store.service.UserAuthMappingService; +import com.cool.store.service.dict.impl.DictService; +import com.cool.store.service.fees.PayeeBankConfigService; +import com.cool.store.service.fees.ShopAllocationInfoService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.CommonUtil; +import com.cool.store.utils.RedisUtil; import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.fees.PayeeBankConfigSimpleVO; +import com.cool.store.vo.fees.PayeeBankConfigVO; +import com.cool.store.vo.fees.ShopAllocationInfoVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; -import java.math.BigInteger; +import java.text.MessageFormat; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static com.cool.store.enums.point.ShopSubStageStatusEnum.*; @@ -66,6 +82,16 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { UserAuthMappingService userAuthMappingService; @Resource PushService pushService; + @Resource + private FranchiseFeeDAO franchiseFeeDAO; + @Resource + private PayeeBankConfigService payeeBankConfigService; + @Resource + private ShopAllocationInfoService shopAllocationInfoService; + @Resource + private DictService dictService; + @Resource + private RedisUtil redisUtil; @Override @Transactional(rollbackFor = Exception.class) @@ -75,6 +101,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { if (!shopStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70.getShopSubStageStatus())){ throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); } + verifyAllocationTotalFee(request); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); // 三明治前端没有改这块代码,还是会传这三个字段,因此后端这三个字段置空 if (Integer.valueOf(shopInfoDO.getFranchiseBrand()).equals(FranchiseBrandEnum.ZXSMZ.getCode())) { @@ -96,6 +123,9 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { franchiseFeeDO.setCreateTime(new Date()); franchiseFeeMapper.insertSelective(franchiseFeeDO); } + // 新增钱包分账信息 + shopAllocationInfoService.insertBatch(request.getShopId(), request.getShopAllocationInfoList()); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.PAY_FRANCHISE_FEES); //推送加盟费信息到新管家 @@ -105,6 +135,22 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { return true; } + /** + * 校验合计缴费金额和分账总金额是否相同 + */ + private void verifyAllocationTotalFee(FranchiseFeeRequest request) { + if (CollectionUtils.isNotEmpty(request.getShopAllocationInfoList())) { + BigDecimal totalFee = CommonUtil.addAll(request.getYearFranchiseFee(), request.getLoanMargin(), request.getFirstYearFee(), request.getFirstYearManageFee(), request.getPerformanceBond()); + BigDecimal allocationTotalFee = request.getShopAllocationInfoList().stream() + .map(ShopAllocationInfoRequest::getAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + if (totalFee.compareTo(allocationTotalFee) != 0) { + throw new ServiceException(ErrorCodeEnum.TOTAL_FEES_NEED_EQUAL); + } + } + } + @Override @Transactional(rollbackFor = Exception.class) public Boolean update(FranchiseFeeRequest request) { @@ -114,18 +160,32 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { // } FranchiseFeeDO franchiseFeeDO = request.toFranchiseFeeDO(); FranchiseFeeDO franchiseFeeDO1 = franchiseFeeMapper.selectByShopId(request.getShopId()); + verifyAllocationTotalFee(request); + if (Objects.nonNull(franchiseFeeDO1)) { - franchiseFeeDO.setId(franchiseFeeDO1.getId()); - franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); - //推送数据 - ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); - LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); - //推送加盟费信息到新管家 - franchiseFeeDO.setCreateTime(franchiseFeeDO1.getCreateTime()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); - feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); - pushService.pushFranchiseFeeToXGJ(feeRequest); - return true; + // 加锁,防止用户支付过程中发生编辑 + String lockKey = MessageFormat.format(RedisConstant.WALLET_ALLOCATION_PAY_LOCK_KEY, franchiseFeeDO1.getShopId()); + Boolean lock = redisUtil.tryLock(lockKey, lockKey, 600, TimeUnit.SECONDS); + if (!Boolean.TRUE.equals(lock)) { + throw new ServiceException(ErrorCodeEnum.THE_USER_IS_PAYING_UNABLE_UPDATE); + } + try { + franchiseFeeDO.setId(franchiseFeeDO1.getId()); + franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); + //推送数据 + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + // 更新钱包分账信息 + shopAllocationInfoService.updateBatch(request.getShopId(), request.getShopAllocationInfoList()); + //推送加盟费信息到新管家 + franchiseFeeDO.setCreateTime(franchiseFeeDO1.getCreateTime()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); + pushService.pushFranchiseFeeToXGJ(feeRequest); + return true; + } finally { + redisUtil.unlock(lockKey); + } } return false; } @@ -133,8 +193,16 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { @Override public FranchiseFeeResponse getDetail(Long shopId) { FranchiseFeeDO result = franchiseFeeMapper.selectByShopId(shopId); + List allocationInfoList = shopAllocationInfoService.getOrDefault(shopId); + List allocationVOList = BeanUtil.toList(allocationInfoList, ShopAllocationInfoVO.class); + PayeeBankConfigVO bankConfig = payeeBankConfigService.getByShopId(shopId, PayTypeEnum.OFFLINE.getType()); + PayeeBankConfigSimpleVO bankConfigVO = BeanUtil.toBean(bankConfig, PayeeBankConfigSimpleVO.class); + dictService.fillDictField(allocationVOList); if (Objects.isNull(result)){ - return new FranchiseFeeResponse(); + FranchiseFeeResponse resp = new FranchiseFeeResponse(); + resp.setShopAllocationInfoList(allocationVOList); + resp.setBankConfig(bankConfigVO); + return resp; } FranchiseFeeResponse resp = FranchiseFeeResponse.from(result); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); @@ -144,6 +212,9 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { resp.setPointArea(pointInfoDO.getPointArea()); resp.setMonthRent(pointDetailInfoDO.getMonthRent()); } + resp.setBankConfig(bankConfigVO); + resp.setShopAllocationInfoList(allocationVOList); + resp.setStoreId(shopInfoDO.getStoreId()); return resp; } @@ -265,4 +336,13 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { return ApiResponse.success(Boolean.TRUE); } + @Override + public Boolean updatePayType(FranchisePayTypeUpdateRequest request) { + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); + if (Objects.nonNull(franchiseFeeDO.getPayType())) { + throw new ServiceException(ErrorCodeEnum.FRANCHISE_FEE_PAY_TYPE_ERROR); + } + return franchiseFeeDAO.updatePayType(request.getShopId(), request.getPayType()); + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/JoinIntentionServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/JoinIntentionServiceImpl.java index 74eec5334..82c4a1f4d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/JoinIntentionServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/JoinIntentionServiceImpl.java @@ -92,6 +92,7 @@ public class JoinIntentionServiceImpl extends LineFlowService implements JoinInt lineInfoParam.setFranchiseBrand(String.valueOf(FranchiseBrandEnum.ZXJP.getCode())); lineInfoParam.setLineStatus(1); } + lineInfoParam.setUseStandardStore(request.getUseStandardStore()); lineInfoDAO.insertOrUpdate(lineInfoParam); QualificationsInfoDO qualificationsInfoDO = request.toQualificationsInfoDO(); qualificationsInfoDAO.insertOrUpdate(qualificationsInfoDO); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java index d8e285b81..a59bd841f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java @@ -1,13 +1,16 @@ package com.cool.store.service.impl; +import com.cool.store.constants.CommonConstants; import com.cool.store.dao.PosAndOrderInfoDAO; import com.cool.store.dao.ShopAccountDAO; import com.cool.store.dao.ShopInfoDAO; import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dao.fees.WalletPayInfoDAO; import com.cool.store.dto.BatchStatusRefreshDTO; import com.cool.store.dto.StatusRefreshDTO; import com.cool.store.entity.ShopAccountDO; import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.fees.WalletPayInfoDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.OpenStatusEnum; import com.cool.store.enums.PosAndOrderEnum; @@ -58,6 +61,8 @@ public class OpenApiServiceImpl implements OpenApiService { LinePayService linePayService; @Resource FranchiseFeeService franchiseFeeService; + @Resource + WalletPayInfoDAO walletPayInfoDAO; @Override @Transactional(rollbackFor = Exception.class) @@ -99,7 +104,12 @@ public class OpenApiServiceImpl implements OpenApiService { @Override public ApiResponse changeReceiptStatus(ReceiptCallBackRequest request) { - return linePayService.ReceiptCallBack(request); + if (Objects.nonNull(request.getPayWay()) && CommonConstants.INDEX_TWO.equals(request.getPayWay())) { + walletPayInfoDAO.updateClaimStatusByPayNo(request.getReceiptId(), request.getClaimStatus()); + return ApiResponse.success(Boolean.TRUE); + } else { + return linePayService.ReceiptCallBack(request); + } } @Override diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java index 827051812..7eaf5ec3a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java @@ -1295,28 +1295,10 @@ public class PointServiceImpl implements PointService { } updateShop.setShopManagerUserId(shopManagerUserId); shopInfoDAO.updateShopInfo(updateShop); - //如果是通过 将缴费状态从未开始改为已开始 已开始的不需要处理 - ShopStageInfoDO payStage = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); - if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(payStage.getShopSubStageStatus())) { - shopStageInfoDAO.updateShopStageInfo(request.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70); - Set publishFranchiseFeeUsers = new HashSet<>(); - List joinUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.JOIN_OFFICE, lineInfo.getRegionId()); - if (Objects.nonNull(joinUser)) { - Set joinUserIds = joinUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet()); - publishFranchiseFeeUsers.addAll(joinUserIds); - } - List regionUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.REGION_OFFICE, lineInfo.getRegionId()); - if (Objects.nonNull(regionUser)) { - Set regionUserIds = regionUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet()); - publishFranchiseFeeUsers.addAll(regionUserIds); - } - HashMap map = new HashMap<>(); - map.put("partnerUsername", lineInfo.getUsername()); - map.put("partnerMobile", lineInfo.getMobile()); - //发送工作通知 - commonService.sendQWMessage(new ArrayList<>(publishFranchiseFeeUsers), - MessageEnum.MESSAGE_23, - map); + //如果是通过 将钱包阶段状态从未开始改为已开始 已开始的不需要处理 + ShopStageInfoDO walletStage = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_6); + if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(walletStage.getShopSubStageStatus())) { + shopStageInfoDAO.updateShopStageInfo(request.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60); } } shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, subStageStatus, auditId); 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 b2723262b..58cdde940 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 @@ -148,13 +148,14 @@ public class ShopServiceImpl implements ShopService { shopInfo.setSupervisorUserId(lineInfo.getInvestmentManager()); shopInfo.setShopName("店铺" + NumberConverter.convertArabicToChinese(i + 1)); shopInfo.setCreateTime(new Date()); + shopInfo.setUseStandardStore(lineInfo.getUseStandardStore()); shopInfo.setInvestmentManager(lineInfo.getInvestmentManager()); shopInfo.setInvestRegionId(lineInfo.getInvestRegionId()); addShopList.add(shopInfo); } shopInfoDAO.batchAddShop(addShopList); List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); - Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), addShopList, true); + Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo, addShopList, true); //初始化平台账号 HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(lineInfo.getPartnerId()); shopAccountDAO.initShopAccount(hyPartnerUserInfoDO, shopIds); @@ -233,9 +234,11 @@ public class ShopServiceImpl implements ShopService { // //进入选址不允许删除操作 // throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); // } - ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopInfo.getId(), ShopSubStageEnum.SHOP_STAGE_7); - if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())) { - throw new ServiceException(ErrorCodeEnum.IS_EXIST_CLAIM); + if (shopInfo.getUseStandardStore()==0){ + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopInfo.getId(), ShopSubStageEnum.SHOP_STAGE_7); + if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())) { + throw new ServiceException(ErrorCodeEnum.IS_EXIST_CLAIM); + } } List franchiseFeePayInfoByShopId = linePayDAO.getFranchiseFeePayInfoByShopId(request.getShopId()); if (ListUtils.emptyIfNull(franchiseFeePayInfoByShopId) @@ -288,11 +291,12 @@ public class ShopServiceImpl implements ShopService { addShop.setSupervisorUserId(lineInfo.getInvestmentManager()); addShop.setInvestmentManager(lineInfo.getInvestmentManager()); addShop.setDevelopmentManager(lineInfo.getInvestmentManager()); + addShop.setUseStandardStore(lineInfo.getUseStandardStore()); addShopList.add(addShop); } shopInfoDAO.batchAddShop(addShopList); List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); - shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), addShopList, true); + shopStageInfoDAO.initShopStageInfo(lineInfo, addShopList, true); return 1L; } @@ -349,8 +353,10 @@ public class ShopServiceImpl implements ShopService { } shopInfoDO.setCreateUserId(userId); Long shopId = shopInfoDAO.addShopInfo(shopInfoDO); + //只赋值 不更新 + lineInfo.setUseStandardStore(request.getUseStandardStore()); if (lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_125.getCode())) { - shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopInfoDO), true); + shopStageInfoDAO.initShopStageInfo(lineInfo, Collections.singletonList(shopInfoDO), true); HashMap map = new HashMap<>(); map.put("partnerUsername", lineInfo.getUsername()); map.put("partnerMobile", lineInfo.getMobile()); @@ -372,7 +378,7 @@ public class ShopServiceImpl implements ShopService { MessageEnum.MESSAGE_21, map); } else { - shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopInfoDO), false); + shopStageInfoDAO.initShopStageInfo(lineInfo, Collections.singletonList(shopInfoDO), false); } //初始化平台账号 HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(lineInfo.getPartnerId()); @@ -397,6 +403,7 @@ public class ShopServiceImpl implements ShopService { if (shopInfo.getManagerRegionId()!=null) { response.setManagerRegionName(regionMap.getOrDefault(shopInfo.getManagerRegionId(),new RegionDO()).getName()); } + response.setUseStandardStore(shopInfo.getUseStandardStore()); response.setUsername(lineInfo.getUsername()); response.setMobile(lineInfo.getMobile()); response.setShopId(shopId); @@ -440,15 +447,18 @@ public class ShopServiceImpl implements ShopService { if(StringUtils.isNotEmpty(request.getShopCode())&&this.checkShopCodeRepeat(request.getShopCode(), request.getShopId())){ throw new ServiceException(ErrorCodeEnum.SHOP_CODE_EXIST); } - //新增校验 缴费阶段之后 不能修改加盟模式 - ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); - //缴费阶段之后 加盟模式不能切换为直营店 直营店也不能切换为其他店 ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); - String oldShopCode = shopInfo.getShopCode(); - if (shopSubStageInfo.getShopSubStageStatus()>ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70.getShopSubStageStatus()){ - if (request.getJoinMode()!=shopInfo.getJoinMode()&& - (request.getJoinMode()==JoinModeEnum.FLAGSHIP_STORE.getCode()||shopInfo.getJoinMode()==JoinModeEnum.FLAGSHIP_STORE.getCode())){ - throw new ServiceException(ErrorCodeEnum.NOT_FLAGSHIP_STORE_NOT_EXIST); + //0-不是使用标准店型 + if (shopInfo.getUseStandardStore()==0){ + //新增校验 缴费阶段之后 不能修改加盟模式 + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); + //缴费阶段之后 加盟模式不能切换为直营店 直营店也不能切换为其他店 + String oldShopCode = shopInfo.getShopCode(); + if (shopSubStageInfo.getShopSubStageStatus()>ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70.getShopSubStageStatus()){ + if (request.getJoinMode()!=shopInfo.getJoinMode()&& + (request.getJoinMode()==JoinModeEnum.FLAGSHIP_STORE.getCode()||shopInfo.getJoinMode()==JoinModeEnum.FLAGSHIP_STORE.getCode())){ + throw new ServiceException(ErrorCodeEnum.NOT_FLAGSHIP_STORE_NOT_EXIST); + } } } shopInfo.setUpdateUserId(userId); @@ -542,7 +552,7 @@ public class ShopServiceImpl implements ShopService { throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); } Integer completionCount = shopStageInfoDAO.getCompletionCount(shopId); - if (completionCount.equals(ShopSubStageEnum.getTotalStageIsLocationAndPreparation())) { + if (completionCount.equals(ShopSubStageEnum.getTotalStageIsLocationAndPreparation(shopInfo.getUseStandardStore()))) { shopInfo.setShopStatus(ShopStatusEnum.DONE.getCode()); } else { shopInfo.setShopStatus(ShopStatusEnum.ING.getCode()); @@ -608,6 +618,7 @@ public class ShopServiceImpl implements ShopService { response.setUsername(dto.getUsername()); response.setMobile(dto.getMobile()); response.setStoreId(dto.getStoreId()); + response.setUseStandardStore(dto.getUseStandardStore()); response.setShopName(dto.getShopName()); response.setShopCode(dto.getShopCode()); response.setRegionName(regionNameMap.getOrDefault(dto.getRegionId(), "")); @@ -864,6 +875,10 @@ public class ShopServiceImpl implements ShopService { case SHOP_SUB_STAGE_STATUS_222: case SHOP_SUB_STAGE_STATUS_250: case SHOP_SUB_STAGE_STATUS_254: + case SHOP_SUB_STAGE_STATUS_60: + case SHOP_SUB_STAGE_STATUS_280: + case SHOP_SUB_STAGE_STATUS_283: + case SHOP_SUB_STAGE_STATUS_284: return Collections.singletonList(new UserDTO(lineInfo.getUsername(), lineInfo.getMobile())); case SHOP_SUB_STAGE_STATUS_11: @@ -894,6 +909,7 @@ public class ShopServiceImpl implements ShopService { return getUsersByRolesAndRegion(Collections.singletonList(FINANCE), shopInfo.getRegionId()); case SHOP_SUB_STAGE_STATUS_85_1: + case SHOP_SUB_STAGE_STATUS_282: return getUsersByRole(FINANCE); case SHOP_SUB_STAGE_STATUS_861: @@ -967,6 +983,8 @@ public class ShopServiceImpl implements ShopService { return getUsersByRoleAndRegion(OPERATION_GENERAL_CONSULTANT, shopInfo.getRegionId()); case SHOP_SUB_STAGE_STATUS_172: return getUsersByRoleAndRegion(ORDER_GROUP, shopInfo.getRegionId()); + case SHOP_SUB_STAGE_STATUS_281: + return getUsersByRolesAndRegion(Arrays.asList(JOIN_OFFICE), shopInfo.getInvestRegionId()); default: return Collections.emptyList(); } 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 e583381bc..2d245ce6e 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 @@ -7,6 +7,7 @@ import com.cool.store.constants.RedisConstant; import com.cool.store.constants.DictConstants; import com.cool.store.context.LoginUserInfo; import com.cool.store.dao.*; +import com.cool.store.dao.fees.WalletPayInfoDAO; import com.cool.store.dto.ContractInformationDTO; import com.cool.store.dao.decoration.DecorationTeamConfigDAO; import com.cool.store.dao.decoration.ShopDecorationAssignDAO; @@ -18,11 +19,15 @@ 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.entity.fees.WalletPayInfoDO; import com.cool.store.enums.*; import com.cool.store.enums.Decoration.DecorationDescStatus; +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import com.cool.store.enums.fees.PayTypeEnum; import com.cool.store.enums.Decoration.DecorationUseSystemEnum; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.*; import com.cool.store.mq.producer.SimpleMessageService; @@ -42,6 +47,7 @@ import com.google.protobuf.StringValue; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import sun.font.Decoration; @@ -159,6 +165,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu @Resource private DictService dictService; @Resource + private WalletPayInfoDAO walletPayInfoDAO; + @Resource private SignFranchiseService signFranchiseService; @@ -840,6 +848,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu @Override + @Transactional public Boolean assignOperationConsultant(AssignOperationConsultantRequest request) { log.info("assignOperationConsultant:{}",JSONObject.toJSONString(request)); //查询分配信息 @@ -892,7 +901,13 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu //线索id Long lineId = shopInfoDO.getLineId(); //缴款信息 - List linePayList = linePayMapper.getFranchiseFeePayInfoByShopId(shopId); + List linePayList = null; + List payInfoList = null; + if (PayTypeEnum.OFFLINE.getType().equals(franchiseFeeDO.getPayType())) { + linePayList = linePayMapper.getFranchiseFeePayInfoByShopId(shopId); + } else { + payInfoList = walletPayInfoDAO.getByShopId(shopId, WalletTradeModuleEnum.FRANCHISE_PAY.getModule(), AllocationPayStatusEnum.PAID.getStatus()); + } // //铺位信息 // PointInfoDO pointInfoDO = pointInfoMapper.getDataByShopIdAndLineId(lineId, shopId); //证照办理 @@ -977,6 +992,19 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu .orElse(null); addSignFranchiseResponse.setPayDate(earliestPayTime); } + if(CollectionUtils.isNotEmpty(payInfoList)){ + Set payNameSet = new HashSet<>(); + List payTimeList = new ArrayList<>(); + for (WalletPayInfoDO payInfoDO : payInfoList){ + payNameSet.add(payInfoDO.getPayUserName()); + payTimeList.add(payInfoDO.getPayTime()); + } + addSignFranchiseResponse.setPayName(new ArrayList<>(payNameSet)); + Date earliestPayTime = payTimeList.stream().filter(Objects::nonNull) + .min(Comparator.naturalOrder()) + .orElse(null); + addSignFranchiseResponse.setPayDate(earliestPayTime); + } if (Objects.nonNull(licenseTransactDO)) { addSignFranchiseResponse.setLicenseName(licenseTransactDO.getBusinessLicense()); addSignFranchiseResponse.setOpeAddress(licenseTransactDO.getLicenseAddress()); 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 5b05c7603..f3101556c 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 @@ -196,8 +196,8 @@ public class SyncMainSysServerImpl implements SyncMainSysServer { } storeMasterDTO.setSignerInfo(signerInfo); simpleMessageService.send(JSONObject.toJSONString(storeMasterDTO), RocketMqTagEnum.ZXJP_CREATE_STORE); - // TODO: 临时关闭,推送营帐通 -// pushStoreToYzt(shopInfo, lineInfoDO); + // 推送营帐通 + pushStoreToYzt(shopInfo, lineInfoDO); } catch (Exception e) { log.info("asdStore_error:{},shopId:{}", e.getMessage(), shopId.toString()); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/modify/ModifyRecordService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/modify/ModifyRecordService.java new file mode 100644 index 000000000..8a770c6f8 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/modify/ModifyRecordService.java @@ -0,0 +1,24 @@ +package com.cool.store.service.modify; + +import com.cool.store.vo.modify.ModifyRecordVO; + +import java.util.List; + +/** + *

+ * 业务修改记录服务类 + *

+ * + * @author wangff + * @since 2026/1/27 + */ +public interface ModifyRecordService { + + /** + * 查询修改记录 + * @param module 模块code + * @param businessId 业务id + * @return 业务修改记录VO列表 + */ + List getModifyRecorsList(String module, Long businessId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/modify/impl/ModifyRecordServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/modify/impl/ModifyRecordServiceImpl.java new file mode 100644 index 000000000..01502c1f7 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/modify/impl/ModifyRecordServiceImpl.java @@ -0,0 +1,35 @@ +package com.cool.store.service.modify.impl; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.modify.ModifyRecordDAO; +import com.cool.store.entity.modify.ModifyRecordDO; +import com.cool.store.service.modify.ModifyRecordService; +import com.cool.store.vo.modify.ModifyRecordVO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + *

+ * 业务修改记录 服务实现类 + *

+ * + * @author wangff + * @since 2026/1/27 + */ +@Service +@RequiredArgsConstructor +public class ModifyRecordServiceImpl implements ModifyRecordService { + private final ModifyRecordDAO modifyRecordDAO; + private final EnterpriseUserDAO enterpriseUserDAO; + + @Override + public List getModifyRecorsList(String module, Long businessId) { + List list = modifyRecordDAO.getListByBusinessId(module, businessId); + Set userIds = CollStreamUtil.toSet(list, ModifyRecordDO::getUpdateUserId); + Map userNameMap = enterpriseUserDAO.getUserNameMap(new ArrayList<>(userIds)); + return CollStreamUtil.toList(list, v -> new ModifyRecordVO(userNameMap.get(v.getUpdateUserId()), v.getUpdateTime())); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/order/MiniStoreOrderService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/order/MiniStoreOrderService.java new file mode 100644 index 000000000..c726fecde --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/order/MiniStoreOrderService.java @@ -0,0 +1,57 @@ +package com.cool.store.service.order; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.order.*; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.order.MiniStoreOrderDetailVO; +import com.cool.store.vo.order.MiniStoreOrderListVO; +import com.cool.store.vo.order.MiniStoreWishlistDetailVO; +import com.cool.store.vo.order.MiniStoreWishlistListVO; +import com.cool.store.vo.order.PCStoreOrderListVO; +import com.cool.store.vo.order.WalletPayVO; +import com.github.pagehelper.PageInfo; +import com.sun.org.apache.xpath.internal.operations.Bool; + +import java.util.List; + +public interface MiniStoreOrderService { + + Long createOrder(MiniStoreOrderCreateRequest request,PartnerUserInfoVO userInfoVO); + + MiniStoreOrderDetailVO getDetail(Long orderId); + + MiniStoreOrderDetailVO getCurrentShopDraft(Long shopId); + + MiniStoreOrderDetailVO getLatestOrderByShopId(Long shopId); + + PageInfo queryPage(MiniStoreOrderQueryRequest request); + + Long updateOrder(MiniStoreOrderUpdateRequest request,PartnerUserInfoVO user); + + Boolean withdraw(Long orderId); + + Boolean cancel(Long orderId); + + PageInfo queryPageByLineId(MiniStoreOrderLineQueryRequest request); + + Boolean passOrder(OrderAuditRecordRequest request,LoginUserInfo userInfo); + + Boolean rejectOrder(OrderAuditRecordRequest request,LoginUserInfo userInfo); + + Boolean payOrder(MiniStoreOrderPayRequest request, PartnerUserInfoVO userInfo); + + PageInfo list(PCStoreOrderQueryRequest request); + + List payList(Long shopId); + + Boolean batchUpdateOptionQuantity(PCStoreOrderOptionQuantityUpdateRequest request); + + Boolean saveOrUpdateWishlist(MiniStoreWishlistSaveRequest request, PartnerUserInfoVO userInfoVO); + + Boolean deleted(MiniStoreWishlistDelRequest miniStoreWishlistDelRequest,PartnerUserInfoVO userInfoVO); + + MiniStoreWishlistDetailVO wishlistDetail(Long storeTypeId,String versionNo, PartnerUserInfoVO userInfoVO); + + List wishlistList(PartnerUserInfoVO userInfoVO); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/order/impl/MiniStoreOrderServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/order/impl/MiniStoreOrderServiceImpl.java new file mode 100644 index 000000000..e7b5c432f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/order/impl/MiniStoreOrderServiceImpl.java @@ -0,0 +1,1515 @@ +package com.cool.store.service.order.impl; + +import cn.hutool.core.util.PageUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.RedisConstant; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.*; +import com.cool.store.dao.config.ConfigItemCategoryDAO; +import com.cool.store.dao.config.ConfigItemDAO; +import com.cool.store.dao.config.ConfigOptionDAO; +import com.cool.store.dao.dict.SysDictTableDAO; +import com.cool.store.dao.fees.WalletPayInfoDAO; + +import com.cool.store.dao.order.PreAllocationRecordDAO; +import com.cool.store.dao.order.StoreOrderDAO; +import com.cool.store.dao.order.StoreOrderOptionSnapshotDAO; +import com.cool.store.dao.order.StoreWishlistDAO; +import com.cool.store.dao.store.StoreTypeDAO; +import com.cool.store.dao.store.StoreTypeOptionDAO; +import com.cool.store.dao.wallet.WalletTradeDAO; +import com.cool.store.entity.*; +import com.cool.store.entity.config.ConfigOptionDO; +import com.cool.store.entity.dict.SysDictTableDO; +import com.cool.store.entity.fees.WalletPayInfoDO; +import com.cool.store.entity.order.PreAllocationRecordDO; +import com.cool.store.entity.order.StoreOrderDO; +import com.cool.store.entity.order.StoreOrderOptionSnapshotDO; +import com.cool.store.entity.order.StoreWishlistDO; +import com.cool.store.entity.store.StoreTypeDO; +import com.cool.store.entity.store.StoreTypeOptionDO; +import com.cool.store.entity.wallet.WalletTradeDO; +import com.cool.store.enums.*; +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import com.cool.store.enums.fees.WalletFeeItemEnum; +import com.cool.store.enums.order.StoreOrderStatusEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.dto.wallet.BatchTransferDTO; +import com.cool.store.mapper.ShopAuditInfoMapper; +import com.cool.store.request.order.*; +import com.cool.store.request.dict.DictColumnQueryRequest; +import com.cool.store.request.wallet.BatchTransferRequest; +import com.cool.store.service.OperationLogService; +import com.cool.store.service.UserAuthMappingService; +import com.cool.store.service.dict.DictColumnService; +import com.cool.store.service.order.MiniStoreOrderService; +import com.cool.store.service.store.PreAllocationRecordService; +import com.cool.store.service.wallet.WalletApiService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.GenerateNoUtil; +import com.cool.store.utils.RedisUtil; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.config.ConfigItemCategoryVO; +import com.cool.store.vo.config.ConfigItemVO; +import com.cool.store.vo.dict.DictColumnVO; +import com.cool.store.vo.order.MiniStoreOrderDetailVO; +import com.cool.store.vo.order.MiniStoreOrderListVO; +import com.cool.store.vo.order.MiniStoreWishlistDetailVO; +import com.cool.store.vo.order.MiniStoreWishlistListVO; +import com.cool.store.vo.order.PCStoreOrderListVO; +import com.cool.store.vo.order.WalletPayVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import groovy.util.logging.Slf4j; +import io.swagger.models.auth.In; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static com.cool.store.enums.UserRoleEnum.*; +import static com.cool.store.enums.fees.AllocationPayStatusEnum.PAID; +import static com.cool.store.enums.order.StoreOrderStatusEnum.*; +import static com.cool.store.enums.wallet.WalletTradeModuleEnum.STANDARD_STORE; + +@lombok.extern.slf4j.Slf4j +@Service +@Slf4j +@RequiredArgsConstructor +public class MiniStoreOrderServiceImpl implements MiniStoreOrderService { + + private final StoreOrderDAO storeOrderDAO; + private final StoreOrderOptionSnapshotDAO snapshotDAO; + private final StoreWishlistDAO storeWishlistDAO; + private final ShopInfoDAO shopInfoDAO; + private final LineInfoDAO lineInfoDAO; + private final StoreTypeDAO storeTypeDAO; + private final StoreTypeOptionDAO storeTypeOptionDAO; + private final ConfigOptionDAO configOptionDAO; + private final DictColumnService dictColumnService; + private final SysDictTableDAO dictTableInfoDAO; + private final EnterpriseUserDAO enterpriseUserDAO; + private final PreAllocationRecordService preAllocationRecordService; + private final WalletApiService walletApiService; + private final WalletPayInfoDAO walletPayInfoDAO; + private final WalletTradeDAO walletTradeDAO; + private final PreAllocationRecordDAO preAllocationRecordDAO; + private final RedisUtil redisUtil; + private final ShopStageInfoDAO shopStageInfoDAO; + private final OperationLogService operationLogService; + private final UserAuthMappingService userAuthMappingService; + private final ShopAuditInfoMapper shopAuditInfoMapper; + private final OperationLogDAO operationLogDAO; + private final ConfigItemCategoryDAO configItemCategoryDAO; + private final ConfigItemDAO configItemDAO; + + + @Override + @Transactional + public Long createOrder(MiniStoreOrderCreateRequest request,PartnerUserInfoVO user) { + if (request == null || request.getShopId() == null || request.getStoreTypeId() == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + // 1) 未结束订单校验:草稿/待确认/待调整/待支付 不能重复新建 + if (storeOrderDAO.existsUnfinishedOrder(request.getShopId(), Arrays.asList(DRAFT.getCode(), WAIT_CONFIRM.getCode(),INVEST_MANAGER_CONFIRM.getCode(), + WAIT_ADJUST.getCode(), WAIT_PAY.getCode(),PAY_FAIL.getCode()))) { + throw new ServiceException(ErrorCodeEnum.SHOP_HAS_UNFINISHED_ORDER); + } + + // 2) 已支付校验:门店已支付完成,不支持新建 + if (storeOrderDAO.existsPaidOrder(request.getShopId(), StoreOrderStatusEnum.PAID.getCode())) { + throw new ServiceException(ErrorCodeEnum.SHOP_HAS_PAID_ORDER); + } + + StoreTypeDO storeType = storeTypeDAO.getById(request.getStoreTypeId()); + if (storeType == null || Boolean.TRUE.equals(storeType.getDeleted()) || Boolean.FALSE.equals(storeType.getActive())) { + throw new ServiceException(ErrorCodeEnum.CONFIG_NOT_EXIST); + } + + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + if (shopInfo == null) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + + Long lineId = shopInfo.getLineId(); + String investmentManager = shopInfo.getInvestmentManager(); + + String partnerName = null; + String partnerMobile = null; + if (lineId != null) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if (lineInfo != null) { + partnerName = lineInfo.getUsername(); + partnerMobile = lineInfo.getMobile(); + } + } + + List bindings = storeTypeOptionDAO.listByStoreTypeId(request.getStoreTypeId()); + Map bindingMap = bindings.stream() + .collect(Collectors.toMap(StoreTypeOptionDO::getOptionId, Function.identity(), (a, b) -> a)); + + // 仅取本次下单所需的启用选项模板,避免全量查询 + Set optionIds = new HashSet<>(); + if (CollectionUtils.isNotEmpty(request.getSelectedOptions())) { + for (MiniStoreOrderCreateRequest.SelectedOption selected : request.getSelectedOptions()) { + if (selected == null || selected.getOptionId() == null) { + continue; + } + optionIds.add(selected.getOptionId()); + } + } + + Map optionTemplateMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(optionIds)) { + List optionTemplates = configOptionDAO.listActiveByIds(new ArrayList<>(optionIds)); + optionTemplateMap = optionTemplates.stream() + .collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a)); + } + + BigDecimal optionAmount = BigDecimal.ZERO; + BigDecimal originalOptionAmount = BigDecimal.ZERO; + List snapshotList = new ArrayList<>(); + + if (CollectionUtils.isNotEmpty(request.getSelectedOptions())) { + Set selectedItemCodes = new HashSet<>(); + + for (MiniStoreOrderCreateRequest.SelectedOption selected : request.getSelectedOptions()) { + if (selected == null || selected.getOptionId() == null) { + continue; + } + + StoreTypeOptionDO binding = bindingMap.get(selected.getOptionId()); + if (binding == null) { + throw new ServiceException(ErrorCodeEnum.THE_OPTION_IS_NOT_PART_OF_THIS_STORE_TYPE); + } + + ConfigOptionDO template = optionTemplateMap.get(selected.getOptionId()); + if (template == null || !Boolean.TRUE.equals(template.getActive())) { + throw new ServiceException(ErrorCodeEnum.CONFIG_NOT_EXIST); + } + + /*String itemCode = template.getItemCode(); + if (itemCode != null && !selectedItemCodes.add(itemCode)) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_ITEM_CODE_DUPLICATE); + }*/ + + //数量必须大于0 + BigDecimal quantity = selected.getQuantity(); + if (quantity == null) { + quantity = binding.getDefaultQuantity(); + } + if (quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0) { + throw new ServiceException(ErrorCodeEnum.THE_QUANTITY_MUST_BE_GREATER_THAN_0); + } + + //校验选项数量不能修改 + BigDecimal defaultQty = binding.getDefaultQuantity(); + if (binding.getAllowQuantityEdit() != null && binding.getAllowQuantityEdit() == 0) { + if (defaultQty != null && defaultQty.compareTo(quantity)!=0) { + throw new ServiceException(ErrorCodeEnum.THE_NUMBER_OF_OPTIONS_IS_NOT_MODIFIABLE); + } + } + + BigDecimal price = binding.getOptionPrice() == null ? BigDecimal.ZERO : binding.getOptionPrice(); + BigDecimal originalPrice = template.getOriginalOptionPrice() == null ? BigDecimal.ZERO : template.getOriginalOptionPrice(); + + BigDecimal amount = BigDecimal.ZERO; + //小于默认数的时候 + if(defaultQty.compareTo(quantity)<=0){ + amount = price.multiply(quantity); + }else { + // 店型优惠价*默认数量 + 原价 *(选择数量-默认数量) + amount = price.multiply(defaultQty).add(originalPrice.multiply(quantity.subtract(defaultQty))); + } + BigDecimal originalAmount = originalPrice.multiply(quantity); + optionAmount = optionAmount.add(amount); + originalOptionAmount = originalOptionAmount.add(originalAmount); + + StoreOrderOptionSnapshotDO snapshot = StoreOrderOptionSnapshotDO.builder() + .shopId(request.getShopId()) + .storeTypeId(request.getStoreTypeId()) + .optionId(selected.getOptionId()) + .categoryCode(template.getCategoryCode()) + .itemCode(template.getItemCode()) + .optionCode(template.getOptionCode()) + .optionName(template.getOptionName()) + .optionPrice(price) + .originalOptionPrice(originalPrice) + .optionRemark(template.getOptionRemark()) + .imageUrl(template.getImageUrl()) + .optionUnit(template.getOptionUnit()) + .videoUrl(template.getVideoUrl()) + .quantity(quantity) + .amount(amount) + .originalAmount(originalAmount) + .build(); + snapshotList.add(snapshot); + } + } + + BigDecimal storeFixedAmount = safe(storeType.getFranchiseFee()) + .add(safe(storeType.getBrandUsageFee())) + .add(safe(storeType.getManagementFee())) + .add(safe(storeType.getSystemUsageFee())) + .add(safe(storeType.getDesignFee())) + .add(safe(storeType.getFirstOrderFee())) + .add(safe(storeType.getContractDeposit())); + + BigDecimal originalStoreFixedAmount = safe(storeType.getOriginalFranchiseFee()) + .add(safe(storeType.getOriginalBrandUsageFee())) + .add(safe(storeType.getOriginalManagementFee())) + .add(safe(storeType.getOriginalSystemUsageFee())) + .add(safe(storeType.getOriginalDesignFee())) + .add(safe(storeType.getOriginalContractDeposit())); + + BigDecimal totalAmount = storeFixedAmount.add(optionAmount); + + BigDecimal originalTotalAmount = originalStoreFixedAmount.add(originalOptionAmount); + + StoreOrderDO order = StoreOrderDO.builder() + .orderNo(generateOrderNo()) + .shopId(request.getShopId()) + .lineId(lineId) + .partnerName(partnerName) + .partnerMobile(partnerMobile) + .investmentManager(investmentManager) + .storeTypeId(storeType.getId()) + .storeTypeCode(storeType.getStoreTypeCode()) + .storeTypeName(storeType.getStoreTypeName()) + .storeType(storeType.getStoreType()) + .brand(storeType.getBrand()) + .franchiseFee(safe(storeType.getFranchiseFee())) + .originalFranchiseFee(safe(storeType.getOriginalFranchiseFee())) + .brandUsageFee(safe(storeType.getBrandUsageFee())) + .originalBrandUsageFee(safe(storeType.getOriginalBrandUsageFee())) + .managementFee(safe(storeType.getManagementFee())) + .originalManagementFee(safe(storeType.getOriginalManagementFee())) + .systemUsageFee(safe(storeType.getSystemUsageFee())) + .originalSystemUsageFee(safe(storeType.getOriginalSystemUsageFee())) + .contractDeposit(safe(storeType.getContractDeposit())) + .originalContractDeposit(safe(storeType.getOriginalContractDeposit())) + .designFee(safe(storeType.getDesignFee())) + .originalDesignFee(safe(storeType.getOriginalDesignFee())) + .firstOrderFee(safe(storeType.getFirstOrderFee())) + .storeFixedAmount(storeFixedAmount) + .originalStoreFixedAmount(originalStoreFixedAmount) + .optionAmount(optionAmount) + .originalOptionAmount(originalOptionAmount) + .totalAmount(totalAmount) + .originalTotalAmount(originalTotalAmount) + .paidAmount(BigDecimal.ZERO) + .unpaidAmount(totalAmount) + .status(WAIT_CONFIRM.getCode()) + .build(); + + storeOrderDAO.insertSelective(order); + + if (CollectionUtils.isNotEmpty(snapshotList)) { + for (StoreOrderOptionSnapshotDO snapshot : snapshotList) { + snapshot.setOrderId(order.getId()); + } + snapshotDAO.insertBatch(snapshotList); + } + //阶段状态 + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281); + + operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_280, user.getPartnerId(), user.getUsername(), + OperationTypeEnum.OPERATION_TYPE_0, "店型选购提交", OperationStatusEnum.PROCESSED); + + List users = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Collections.singletonList(UserRoleEnum.JOIN_OFFICE), + shopInfo.getInvestRegionId()); + operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281, + user.getPartnerId(), users, + OperationTypeEnum.OPERATION_TYPE_1, "店型选购待立规审批", OperationStatusEnum.NOT_PROCESSED, 1); + + return order.getId(); + } + + @Override + public MiniStoreOrderDetailVO getDetail(Long orderId) { + StoreOrderDO order = storeOrderDAO.getById(orderId); + if (order == null) { + return null; + } + + List list = snapshotDAO.listByOrderId(orderId); + + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(order.getShopId()); + + MiniStoreOrderDetailVO vo = new MiniStoreOrderDetailVO(); + + MiniStoreOrderDetailVO.OrderInfoVO orderInfo = new MiniStoreOrderDetailVO.OrderInfoVO(); + orderInfo.setStoreType(order.getStoreType()); + orderInfo.setStoreTypeId(order.getStoreTypeId()); + orderInfo.setOrderNo(order.getOrderNo()); + orderInfo.setOrderId(order.getId()); + orderInfo.setShopId(order.getShopId()); + if (shopInfo!=null){ + orderInfo.setStoreId(shopInfo.getStoreId()); + } + orderInfo.setCreateTime(order.getCreateTime()); + orderInfo.setStatus(order.getStatus()); + orderInfo.setPartnerName(order.getPartnerName()); + orderInfo.setPartnerMobile(order.getPartnerMobile()); + if (StringUtils.isNotBlank(order.getInvestmentManager())){ + orderInfo.setInvestmentManager(order.getInvestmentManager()); + String userName = enterpriseUserDAO.getUserName(order.getInvestmentManager()); + orderInfo.setInvestmentManagerName(userName); + } + vo.setOrderInfo(orderInfo); + + MiniStoreOrderDetailVO.PayInfoVO payInfo = new MiniStoreOrderDetailVO.PayInfoVO(); + payInfo.setTotalAmount(order.getTotalAmount()); + payInfo.setPaidAmount(order.getPaidAmount()); + payInfo.setUnpaidAmount(order.getUnpaidAmount()); + vo.setPayInfo(payInfo); + + MiniStoreOrderDetailVO.FeeInfoVO feeInfo = new MiniStoreOrderDetailVO.FeeInfoVO(); + feeInfo.setFranchiseFee(order.getFranchiseFee()); + feeInfo.setBrandUsageFee(order.getBrandUsageFee()); + feeInfo.setManagementFee(order.getManagementFee()); + feeInfo.setSystemUsageFee(order.getSystemUsageFee()); + feeInfo.setDesignFee(order.getDesignFee()); + feeInfo.setContractDeposit(order.getContractDeposit()); + feeInfo.setFirstOrderFee(order.getFirstOrderFee()); + feeInfo.setStoreFixedAmount(order.getStoreFixedAmount()); + vo.setFeeInfo(feeInfo); + + Map categoryNameMap = configItemCategoryDAO.queryAllListMap(); + Map itemNameMap = configItemDAO.queryAllActiveMap(); + + Map>> groupMap = list.stream() + .collect(Collectors.groupingBy(StoreOrderOptionSnapshotDO::getCategoryCode, + LinkedHashMap::new, + Collectors.groupingBy(StoreOrderOptionSnapshotDO::getItemCode, + LinkedHashMap::new, + Collectors.toList()))); + + List categoryVOList = new ArrayList<>(); + for (Map.Entry>> cEntry : groupMap.entrySet()) { + String categoryCode = cEntry.getKey(); + MiniStoreOrderDetailVO.CategoryVO cvo = new MiniStoreOrderDetailVO.CategoryVO(); + cvo.setCategoryCode(categoryCode); + cvo.setCategoryName(categoryNameMap.getOrDefault(categoryCode, categoryCode)); + + List itemVOList = new ArrayList<>(); + for (Map.Entry> iEntry : cEntry.getValue().entrySet()) { + String itemCode = iEntry.getKey(); + MiniStoreOrderDetailVO.ItemVO ivo = new MiniStoreOrderDetailVO.ItemVO(); + ivo.setItemCode(itemCode); + ivo.setItemName(itemNameMap.getOrDefault(itemCode, itemCode)); + + List optionVOList = iEntry.getValue().stream() + .map(v -> { + MiniStoreOrderDetailVO.OptionVO ovo = new MiniStoreOrderDetailVO.OptionVO(); + ovo.setOptionId(v.getOptionId()); + ovo.setOptionName(v.getOptionName()); + ovo.setOptionPrice(v.getOptionPrice()); + ovo.setOriginalOptionPrice(v.getOriginalOptionPrice()); + ovo.setQuantity(v.getQuantity()); + ovo.setOptionUnit(v.getOptionUnit()); + ovo.setAmount(v.getAmount()); + ovo.setOriginalAmount(v.getOriginalAmount()); + ovo.setImageUrl(v.getImageUrl()); + return ovo; + }) + .collect(Collectors.toList()); + ivo.setOptions(optionVOList); + itemVOList.add(ivo); + } + cvo.setItems(itemVOList); + categoryVOList.add(cvo); + } + vo.setConfigSnapshot(categoryVOList); + + return vo; + } + + @Override + public MiniStoreOrderDetailVO getCurrentShopDraft(Long shopId) { + if (shopId == null) { + return null; + } + StoreOrderDO order = storeOrderDAO.getLatestByShopIdAndStatus(shopId, DRAFT.getCode()); + if (order == null || order.getId() == null) { + return null; + } + return getDetail(order.getId()); + } + + @Override + public MiniStoreOrderDetailVO getLatestOrderByShopId(Long shopId) { + if (shopId == null) { + return null; + } + StoreOrderDO order = storeOrderDAO.getLatestOrderByShopId(shopId); + if (order == null || order.getId() == null) { + return null; + } + return getDetail(order.getId()); + } + + @Override + public PageInfo queryPage(MiniStoreOrderQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = storeOrderDAO.queryPage(request.getShopId(), request.getStatus()); + PageInfo page = new PageInfo<>(list); + + PageInfo result = BeanUtil.toPage(page, MiniStoreOrderListVO.class); + + List shopIds = result.getList().stream() + .map(MiniStoreOrderListVO::getShopId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + List shopList = shopInfoDAO.getShopListByIds(shopIds); + Map shopIdMap = shopList.stream().collect(Collectors.toMap(ShopInfoDO::getId, ShopInfoDO::getStoreId)); + + List storeTypeList = result.getList().stream() + .map(MiniStoreOrderListVO::getStoreTypeId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + List storeTypeDOS = storeTypeDAO.selectByIds(storeTypeList); + Map imageMap = storeTypeDOS.stream().collect(Collectors.toMap(StoreTypeDO::getId, StoreTypeDO::getImageUrl)); + + result.getList().forEach(x->{ + x.setStoreId(shopIdMap.get(x.getShopId())); + x.setImageUrl(imageMap.get(x.getStoreTypeId())); + }); + + return result; + } + + @Override + public PageInfo queryPageByLineId(MiniStoreOrderLineQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = storeOrderDAO.queryPageByLineId(request.getLineId(), request.getStatus()); + + PageInfo page = BeanUtil.toPage(new PageInfo<>(list), MiniStoreOrderListVO.class); + + List voList = page.getList(); + + // 批量补齐门店名称 + List shopIds = voList.stream() + .map(MiniStoreOrderListVO::getShopId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(shopIds)) { + List shops = shopInfoDAO.getShopListByIds(shopIds); + Map shopNameMap = shops.stream() + .filter(s -> s.getId() != null) + .collect(Collectors.toMap(ShopInfoDO::getId, data->data)); + for (MiniStoreOrderListVO vo : voList) { + if (vo.getShopId() == null) { + continue; + } + ShopInfoDO shopInfoDO = shopNameMap.get(vo.getShopId()); + if (shopInfoDO!=null){ + vo.setShopName(shopInfoDO.getShopName()); + vo.setStoreId(shopInfoDO.getStoreId()); + } + + } + } + return page; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean passOrder(OrderAuditRecordRequest request,LoginUserInfo user) { + StoreOrderDO order = storeOrderDAO.getById(request.getOrderId()); + if (order==null){ + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + //当前订单状态 + Integer currentStatus = order.getStatus(); + + //校验订单是否是待审核 + if (!StoreOrderStatusEnum.approve(currentStatus)){ + throw new ServiceException(ErrorCodeEnum.CURRENT_ORDER_NOT_SUPPORT); + } + if (WAIT_CONFIRM.getCode().equals(currentStatus)){ + //修改订单状态 + order.setStatus(INVEST_MANAGER_CONFIRM.getCode()); + storeOrderDAO.updateSelective(order); + + //修改阶段数据 + shopStageInfoDAO.updateShopStageInfo(order.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281_5); + + //处理审批记录 通过 + handleAudit(order.getShopId(),user,0,request.getRemark(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281); + + List users = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Arrays.asList(HEAD_OF_DESIGN), shopInfoDAO.getShopInfo(order.getShopId()).getRegionId()); + List userIds = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(users)) { + userIds = users.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList()); + } + operationLogService.addOperationLog(order.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281_5, + user.getUserId(), users, + OperationTypeEnum.OPERATION_TYPE_1, "店型选配待招商经理审批", OperationStatusEnum.NOT_PROCESSED); + + } + if (INVEST_MANAGER_CONFIRM.getCode().equals(currentStatus)){ + order.setStatus(FINANCIAL_CONFIRM.getCode()); + storeOrderDAO.updateSelective(order); + + //修改阶段数据 + shopStageInfoDAO.updateShopStageInfo(order.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_282); + + //处理审批记录 通过 + handleAudit(order.getShopId(),user,0,request.getRemark(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281_5); + + } + return Boolean.TRUE; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean rejectOrder(OrderAuditRecordRequest request,LoginUserInfo userInfo) { + StoreOrderDO order = storeOrderDAO.getById(request.getOrderId()); + if (order==null){ + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + Integer currentStatus = order.getStatus(); + //校验订单是否是待审核 + if (!StoreOrderStatusEnum.approve(currentStatus)){ + throw new ServiceException(ErrorCodeEnum.CURRENT_ORDER_NOT_SUPPORT); + } + //修改订单状态 变为待调整 + order.setStatus(StoreOrderStatusEnum.WAIT_ADJUST.getCode()); + storeOrderDAO.updateSelective(order); + + //修改阶段数据 阶段变为审批拒绝 + shopStageInfoDAO.updateShopStageInfo(order.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_283); + + ShopSubStageStatusEnum current = null; + if (WAIT_CONFIRM.getCode().equals(currentStatus)){ + current = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281; + } + if (INVEST_MANAGER_CONFIRM.getCode().equals(currentStatus)){ + current = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281_5; + } + //处理审批记录 + handleAudit(order.getShopId(),userInfo,1,request.getRemark(),current); + return Boolean.TRUE; + } + + private void handleAudit(Long shopId,LoginUserInfo user,Integer resultType,String remark,ShopSubStageStatusEnum stageStatusEnum){ + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(shopId); + shopAuditInfoDO.setAuditType(AuditTypeEnum.STANDARD_STORE.getCode()); + shopAuditInfoDO.setSubmittedUserId(user.getUserId()); + shopAuditInfoDO.setSubmittedUserName(user.getName()); + shopAuditInfoDO.setResultType(resultType); + shopAuditInfoDO.setRejectReason(remark); + shopAuditInfoMapper.insertSelective(shopAuditInfoDO); + Long auditId = shopAuditInfoDO.getId(); + List operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(shopId, stageStatusEnum, OperationTypeEnum.OPERATION_TYPE_1.getCode()); + operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), remark); + } + + + @Override + @Transactional + public Long updateOrder(MiniStoreOrderUpdateRequest request,PartnerUserInfoVO user) { + if (request == null || request.getOrderId() == null || request.getShopId() == null || request.getStoreTypeId() == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + // 1. 查询原订单 + StoreOrderDO order = storeOrderDAO.getById(request.getOrderId()); + if (order == null || !order.getShopId().equals(request.getShopId())) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + + // 2. 校验订单状态:仅草稿(0)和待调整(10)状态允许修改 + Integer status = order.getStatus(); + if (!StoreOrderStatusEnum.DRAFT.getCode().equals(status) && !StoreOrderStatusEnum.WAIT_ADJUST.getCode().equals(status)) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_UPDATE_FORBIDDEN); + } + + // 3. 查询新店型信息 + StoreTypeDO storeType = storeTypeDAO.getById(request.getStoreTypeId()); + if (storeType == null || Boolean.TRUE.equals(storeType.getDeleted()) || + !Boolean.TRUE.equals(storeType.getActive())) { + throw new ServiceException(ErrorCodeEnum.CONFIG_NOT_EXIST); + } + + // 4. 获取新店型的选项绑定关系 + List bindings = storeTypeOptionDAO.listByStoreTypeId(request.getStoreTypeId()); + Map bindingMap = bindings.stream() + .collect(Collectors.toMap(StoreTypeOptionDO::getOptionId, Function.identity(), (a, b) -> a)); + + // 5. 处理选中的配置选项 + BigDecimal optionAmount = BigDecimal.ZERO; + BigDecimal originalOptionAmount = BigDecimal.ZERO; + List snapshotList = new ArrayList<>(); + + if (CollectionUtils.isNotEmpty(request.getSelectedOptions())) { + Set optionIds = request.getSelectedOptions().stream() + .filter(Objects::nonNull) + .map(MiniStoreOrderCreateRequest.SelectedOption::getOptionId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + // 查询选项模板 + Map optionTemplateMap = new HashMap<>(); + if (!optionIds.isEmpty()) { + List optionTemplates = configOptionDAO.listActiveByIds(new ArrayList<>(optionIds)); + optionTemplateMap = optionTemplates.stream() + .collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a)); + } + + // 校验并计算金额 + Set selectedItemCodes = new HashSet<>(); + for (MiniStoreOrderCreateRequest.SelectedOption selected : request.getSelectedOptions()) { + if (selected == null || selected.getOptionId() == null) { + continue; + } + + StoreTypeOptionDO binding = bindingMap.get(selected.getOptionId()); + if (binding == null) { + throw new ServiceException(ErrorCodeEnum.THE_OPTION_IS_NOT_PART_OF_THIS_STORE_TYPE); + } + + ConfigOptionDO template = optionTemplateMap.get(selected.getOptionId()); + if (template == null || !Boolean.TRUE.equals(template.getActive())) { + throw new ServiceException(ErrorCodeEnum.CONFIG_NOT_EXIST); + } + +// String itemCode = template.getItemCode(); +// if (itemCode != null && !selectedItemCodes.add(itemCode)) { +// throw new ServiceException(ErrorCodeEnum.STORE_ORDER_ITEM_CODE_DUPLICATE); +// } + + // 处理数量 + BigDecimal quantity = selected.getQuantity(); + if (quantity == null) { + quantity = binding.getDefaultQuantity(); + } + if (quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0) { + throw new ServiceException(ErrorCodeEnum.THE_QUANTITY_MUST_BE_GREATER_THAN_0); + } + + // 校验不可修改数量的选项 + BigDecimal defaultQty = binding.getDefaultQuantity(); + if (binding.getAllowQuantityEdit() != null && binding.getAllowQuantityEdit() == 0) { + if (defaultQty != null && defaultQty.compareTo(quantity)!=0) { + throw new ServiceException(ErrorCodeEnum.THE_NUMBER_OF_OPTIONS_IS_NOT_MODIFIABLE); + } + } + + //使用店型上配置的价格 不能使用选项的配置上的价格 + BigDecimal price = binding.getOptionPrice() == null ? BigDecimal.ZERO : binding.getOptionPrice(); + BigDecimal originalPrice = template.getOriginalOptionPrice() == null ? BigDecimal.ZERO : template.getOriginalOptionPrice(); + + BigDecimal amount = BigDecimal.ZERO; + //小于默认数的时候 + if(quantity.compareTo(defaultQty)<=0){ + amount = price.multiply(quantity); + }else { + // 店型优惠价*默认数量 + 原价 *(选择数量-默认数量) + amount = price.multiply(defaultQty).add(originalPrice.multiply(quantity.subtract(defaultQty))); + } + BigDecimal originalAmount = originalPrice.multiply(quantity); + optionAmount = optionAmount.add(amount); + originalOptionAmount = originalOptionAmount.add(originalAmount); + + // 创建快照 + StoreOrderOptionSnapshotDO snapshot = StoreOrderOptionSnapshotDO.builder() + .orderId(order.getId()) + .shopId(order.getShopId()) + .storeTypeId(storeType.getId()) + .optionId(selected.getOptionId()) + .categoryCode(template.getCategoryCode()) + .itemCode(template.getItemCode()) + .optionCode(template.getOptionCode()) + .optionName(template.getOptionName()) + .optionPrice(price) + .originalOptionPrice(originalPrice) + .optionUnit(template.getOptionUnit()) + .optionRemark(template.getOptionRemark()) + .imageUrl(template.getImageUrl()) + .videoUrl(template.getVideoUrl()) + .quantity(quantity) + .amount(amount) + .originalAmount(originalAmount) + .build(); + snapshotList.add(snapshot); + } + } + + // 6. 计算固定费用和总金额 + BigDecimal storeFixedAmount = safe(storeType.getFranchiseFee()) + .add(safe(storeType.getBrandUsageFee())) + .add(safe(storeType.getManagementFee())) + .add(safe(storeType.getSystemUsageFee())) + .add(safe(storeType.getDesignFee())) + .add(safe(storeType.getFirstOrderFee())) + .add(safe(storeType.getContractDeposit())); + + + BigDecimal originalStoreFixedAmount = safe(storeType.getOriginalFranchiseFee()) + .add(safe(storeType.getOriginalBrandUsageFee())) + .add(safe(storeType.getOriginalManagementFee())) + .add(safe(storeType.getOriginalSystemUsageFee())) + .add(safe(storeType.getOriginalDesignFee())) + .add(safe(storeType.getOriginalContractDeposit())); + + BigDecimal totalAmount = storeFixedAmount.add(optionAmount); + + BigDecimal originalTotalAmount = originalStoreFixedAmount.add(originalOptionAmount); + + // 7. 更新订单信息 + StoreOrderDO updateOrder = StoreOrderDO.builder() + .id(order.getId()) + .storeTypeId(storeType.getId()) + .storeTypeCode(storeType.getStoreTypeCode()) + .storeTypeName(storeType.getStoreTypeName()) + .storeType(storeType.getStoreType()) + .brand(storeType.getBrand()) + .franchiseFee(safe(storeType.getFranchiseFee())) + .originalFranchiseFee(safe(storeType.getOriginalFranchiseFee())) + .brandUsageFee(safe(storeType.getBrandUsageFee())) + .originalBrandUsageFee(safe(storeType.getOriginalBrandUsageFee())) + .managementFee(safe(storeType.getManagementFee())) + .originalManagementFee(safe(storeType.getOriginalManagementFee())) + .systemUsageFee(safe(storeType.getSystemUsageFee())) + .originalSystemUsageFee(safe(storeType.getOriginalSystemUsageFee())) + .contractDeposit(safe(storeType.getContractDeposit())) + .originalContractDeposit(safe(storeType.getOriginalContractDeposit())) + .designFee(safe(storeType.getDesignFee())) + .originalDesignFee(safe(storeType.getOriginalDesignFee())) + .firstOrderFee(safe(storeType.getFirstOrderFee())) + .storeFixedAmount(storeFixedAmount) + .originalStoreFixedAmount(originalStoreFixedAmount) + .optionAmount(optionAmount) + .originalOptionAmount(originalOptionAmount) + .totalAmount(totalAmount) + .originalTotalAmount(originalTotalAmount) + .unpaidAmount(totalAmount.subtract(order.getPaidAmount())) + .status(WAIT_CONFIRM.getCode()) + .updateTime(new Date()) + .build(); + + // 8. 删除旧快照并保存新快照 + snapshotDAO.deleteByOrderId(order.getId()); + if (!snapshotList.isEmpty()) { + snapshotDAO.insertBatch(snapshotList); + } + + // 9. 更新订单 + storeOrderDAO.updateSelective(updateOrder); + + //阶段变为待选购 + shopStageInfoDAO.updateShopStageInfo(order.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281); + + operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_280, user.getPartnerId(), user.getUsername(), + OperationTypeEnum.OPERATION_TYPE_0, "店型选购提交", OperationStatusEnum.PROCESSED); + + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(order.getShopId()); + List users = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Collections.singletonList(UserRoleEnum.JOIN_OFFICE), + shopInfo.getInvestRegionId()); + operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_281, + user.getPartnerId(), users, + OperationTypeEnum.OPERATION_TYPE_1, "店型选购待立规审批", OperationStatusEnum.NOT_PROCESSED, 1); + + return order.getId(); + } + + @Override + @Transactional + public Boolean withdraw(Long orderId) { + if (orderId == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + // 1. 查询订单 + StoreOrderDO order = storeOrderDAO.getById(orderId); + if (order == null) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + + // 2. 校验状态:仅待确认(5)和待支付(15)状态允许撤回 + Integer status = order.getStatus(); + if (!StoreOrderStatusEnum.canWithdraw(status)) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_WITHDRAW_FORBIDDEN); + } + + // 3. 更新订单状态为草稿(0) + StoreOrderDO updateOrder = StoreOrderDO.builder() + .id(orderId) + .status(StoreOrderStatusEnum.DRAFT.getCode()) + .updateTime(new Date()) + .build(); + + shopStageInfoDAO.updateShopStageInfo(order.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_280); + + return storeOrderDAO.updateSelective(updateOrder); + } + + @Override + @Transactional + public Boolean cancel(Long orderId) { + if (orderId == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + // 1. 查询订单 + StoreOrderDO order = storeOrderDAO.getById(orderId); + if (order == null) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + + // 2. 校验状态:仅草稿(0)状态允许作废 + if (!StoreOrderStatusEnum.DRAFT.getCode().equals(order.getStatus())) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_CANCEL_FORBIDDEN); + } + + // 3. 更新订单状态为已结束(25) + StoreOrderDO updateOrder = StoreOrderDO.builder() + .id(orderId) + .status(StoreOrderStatusEnum.CLOSED.getCode()) // 已结束状态 + .updateTime(new Date()) + .build(); + + + return storeOrderDAO.updateSelective(updateOrder); + } + + @Override + @Transactional + public Boolean payOrder(MiniStoreOrderPayRequest request, PartnerUserInfoVO userInfo) { + log.info("订单开始支付 payOrder:{},userInfo:{}", JSONObject.toJSONString(request),JSONObject.toJSONString(userInfo)); + //重复支付校验 + String lockKey = MessageFormat.format(RedisConstant.STANDARD_STORE_PAY_LOCK_KEY, request.getOrderId()); + Boolean lock = redisUtil.tryLock(lockKey, lockKey, 10, TimeUnit.SECONDS); + if (!Boolean.TRUE.equals(lock)) { + throw new ServiceException(ErrorCodeEnum.DUPLICATE_PAYMENTS); + } + try { + // 1. 参数校验 + if (request == null || request.getOrderId() == null || request.getAmount() == null || + StringUtils.isBlank(request.getPayPwd())) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + // 2. 查询订单信息 + StoreOrderDO order = storeOrderDAO.getById(request.getOrderId()); + if (order == null) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + + // 3. 校验订单状态:仅待支付状态可以支付 + if (!StoreOrderStatusEnum.WAIT_PAY.getCode().equals(order.getStatus())) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_STATUS_INVALID); + } + + // 4. 校验支付金额与订单金额是否一致 + if (request.getAmount().compareTo(order.getTotalAmount()) != 0) { + throw new ServiceException(ErrorCodeEnum.PAY_AMOUNT_ERROR); + } + + // 5. 查询门店信息 + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(order.getShopId()); + if (shopInfo == null) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + + // 6. 按门店查询预分账明细 + List allocationRecords = preAllocationRecordService.listDOByShop(order.getShopId()); + if (CollectionUtils.isEmpty(allocationRecords)) { + throw new ServiceException(ErrorCodeEnum.THERE_IS_NO_PAYMENT_INFORMATION); + } + + // 7. 校验预分账明细金额总和是否等于订单金额 + BigDecimal allocationTotal = allocationRecords.stream() + .filter(record -> record != null && record.getPayAmount() != null) + .map(PreAllocationRecordDO::getPayAmount) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + if (allocationTotal.compareTo(order.getTotalAmount()) != 0) { + throw new ServiceException(ErrorCodeEnum.FEE_NOT_CONSISTENT); + } + + // 9. 封装批量分账请求 + BatchTransferRequest batchTransferRequest = new BatchTransferRequest(); + batchTransferRequest.setOutStoreId(shopInfo.getStoreId()); + batchTransferRequest.setPayPwd(request.getPayPwd()); + + List transArray = new ArrayList<>(); + for (PreAllocationRecordDO record : allocationRecords) { + BatchTransferRequest.TransDataRequest transData = new BatchTransferRequest.TransDataRequest(); + + // payNo 必须唯一且失败重试要沿用第一次的 payNo + String payNo = record.getPayNo(); + if (StringUtils.isBlank(payNo)) { + payNo = GenerateNoUtil.generateMillsNoWithRandom(); + record.setPayNo(payNo); + } + transData.setReqNo(payNo); + + // 根据费用类型获取费用科目ID + WalletFeeItemEnum feeItem = WalletFeeItemEnum.getByExpenseType(record.getExpenseType()); + if (feeItem == null) { + throw new ServiceException(ErrorCodeEnum.NONSUPPORT_EXPENSE_TYPE); + } + transData.setFeeItemId(feeItem.getFeeItemId()); + transData.setCompanyCode(record.getPayeeCode()); + transData.setAmount(record.getPayAmount().toString()); + + transArray.add(transData); + } + batchTransferRequest.setTransArray(transArray); + Map map = allocationRecords.stream().collect(Collectors.toMap(PreAllocationRecordDO::getPayNo, data -> data)); + + // 调用第三方前先固化 payNo(失败重试需要复用) + preAllocationRecordDAO.updateBatch(allocationRecords); + + // 10. 调用第三方分账接口 + BatchTransferDTO batchTransferResult; + try { + batchTransferResult = walletApiService.batchTransfer(batchTransferRequest); + } catch (Exception e) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR.getCode(), "支付失败:" + e.getMessage()); + } + + // 11. 处理分账结果 + if (batchTransferResult == null || batchTransferResult.getTradeStatus() == null) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR.getCode(), "支付失败:分账接口返回异常"); + } + + // 12. 根据分账结果更新状态和记录 + List walletPayInfoList = new ArrayList<>(); + List walletTradeList = new ArrayList<>(); + List updatedRecords = new ArrayList<>(); + + //批量支付状态 1.成功 2.失败 3.处理中(目前是实时转账 无处理中) + Integer tradeStatus = batchTransferResult.getTradeStatus(); + + // 订单状态 + Integer orderStatus = null; + + // 按批次结果全成/全败 + Integer allocationStatus; + Integer payStatus; + if (tradeStatus != null && tradeStatus == 1) { + allocationStatus = 1; + payStatus = AllocationPayStatusEnum.PAID.getStatus(); + orderStatus = StoreOrderStatusEnum.PAID.getCode(); + } else { + allocationStatus = 0; + payStatus = AllocationPayStatusEnum.FAIL.getStatus(); + orderStatus = PAY_FAIL.getCode(); + } + + // 无论成功失败,都需要落库,并更新预分账状态 + if (batchTransferResult.getTransArray() != null) { + for (int i = 0; i < batchTransferResult.getTransArray().size() && i < allocationRecords.size(); i++) { + BatchTransferDTO.TransDataRequest result = batchTransferResult.getTransArray().get(i); + PreAllocationRecordDO record = map.get(result.getReqNo()); + if (record == null) { + continue; + } + + record.setAllocationStatus(allocationStatus); + updatedRecords.add(record); + + WalletPayInfoDO walletPayInfo = new WalletPayInfoDO(); + walletPayInfo.setShopId(order.getShopId()); + walletPayInfo.setModule(STANDARD_STORE.getModule()); + walletPayInfo.setPayNo(result.getReqNo()); + walletPayInfo.setPayUserName(userInfo.getUsername()); + walletPayInfo.setPayAmount(new BigDecimal(result.getAmount())); + walletPayInfo.setPayStatus(payStatus); + walletPayInfo.setPayTime(new Date()); + walletPayInfo.setClaimStatus(ClaimStatusEnum.TO_BE_CLAIMED.getCode()); + walletPayInfo.setExpenseTypes(record.getExpenseType()); + walletPayInfo.setCreateTime(new Date()); + walletPayInfo.setTradeId(result.getTradeId()); + walletPayInfoList.add(walletPayInfo); + + WalletTradeDO walletTrade = new WalletTradeDO(); + walletTrade.setModule(STANDARD_STORE.getModule()); + walletTrade.setPayNo(result.getReqNo()); + walletTrade.setTradeId(result.getTradeId()); + walletTrade.setType(1); + walletTrade.setPayUserName(userInfo.getUsername()); + walletTrade.setPayAmount(new BigDecimal(result.getAmount())); + walletTrade.setPayStatus(payStatus); + walletTrade.setPayTime(new Date()); + walletTrade.setCreateTime(new Date()); + walletTradeList.add(walletTrade); + } + } + + // 13. 保存钱包支付信息/交易单:payNo 唯一索引,存在则更新,不存在则插入(批量处理) + List payNoList = walletPayInfoList.stream() + .map(WalletPayInfoDO::getPayNo) + .filter(StringUtils::isNotBlank) + .distinct() + .collect(Collectors.toList()); + + Set existPayNoSet = new HashSet<>(); + if (CollectionUtils.isNotEmpty(payNoList)) { + List existList = walletPayInfoDAO.getByPayNoList(payNoList); + if (CollectionUtils.isNotEmpty(existList)) { + existPayNoSet = existList.stream().map(WalletPayInfoDO::getPayNo).collect(Collectors.toSet()); + } + } + + List walletPayInfoInsertList = new ArrayList<>(); + List walletPayInfoUpdateList = new ArrayList<>(); + for (WalletPayInfoDO v : walletPayInfoList) { + if (v == null || StringUtils.isBlank(v.getPayNo())) { + continue; + } + if (existPayNoSet.contains(v.getPayNo())) { + walletPayInfoUpdateList.add(v); + } else { + walletPayInfoInsertList.add(v); + } + } + + if (CollectionUtils.isNotEmpty(walletPayInfoInsertList)) { + walletPayInfoDAO.insertBatch(walletPayInfoInsertList); + } + if (CollectionUtils.isNotEmpty(walletPayInfoUpdateList)) { + walletPayInfoDAO.updateBatchByPayNo(walletPayInfoUpdateList); + } + + // WalletTrade:同样按 payNo 分批新增/更新 + List walletTradeInsertList = new ArrayList<>(); + List walletTradeUpdateList = new ArrayList<>(); + for (WalletTradeDO v : walletTradeList) { + if (v == null || StringUtils.isBlank(v.getPayNo())) { + continue; + } + if (existPayNoSet.contains(v.getPayNo())) { + walletTradeUpdateList.add(v); + } else { + walletTradeInsertList.add(v); + } + } + + if (CollectionUtils.isNotEmpty(walletTradeInsertList)) { + walletTradeDAO.insertBatch(walletTradeInsertList); + } + if (CollectionUtils.isNotEmpty(walletTradeUpdateList)) { + walletTradeDAO.updateBatchByPayNo(walletTradeUpdateList); + } + + // 更新预分账明细 + if (CollectionUtils.isNotEmpty(updatedRecords)) { + preAllocationRecordDAO.updateBatch(updatedRecords); + } + + StoreOrderDO updateOrder = StoreOrderDO.builder() + .id(order.getId()) + .status(orderStatus) + .updateTime(new Date()) + .build(); + + if (batchTransferResult.getTradeStatus()==1) { + //支付成功 改订单下所有分账详情变为已分账 + preAllocationRecordDAO.updateBatch(allocationRecords); + //todo 推送数据到新管家? + + shopStageInfoDAO.batchUpdateShopStageStatus(order.getShopId(),Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_80,ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_285)); + + //支付成功 修改金额,支付中 回调的时候习惯 + updateOrder.setPaidAmount(order.getTotalAmount()); + updateOrder.setUnpaidAmount(BigDecimal.ZERO); + updateOrder.setPayTime(new Date()); + } + + storeOrderDAO.updateSelective(updateOrder); + }finally { + redisUtil.unlock(lockKey); + } + + return true; + } + + @Override + public PageInfo list(PCStoreOrderQueryRequest request) { + if (request == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = storeOrderDAO.queryPCPage(request); + return new PageInfo<>(list); + } + + @Override + public List payList(Long shopId) { + List list = walletPayInfoDAO.getByShopId(shopId, STANDARD_STORE.getModule(),null); + List walletPayVOS = BeanUtil.copyToList(list, WalletPayVO.class); + return walletPayVOS; + } + + @Override + @Transactional + public Boolean batchUpdateOptionQuantity(PCStoreOrderOptionQuantityUpdateRequest request) { + if (request == null || request.getOrderId() == null || CollectionUtils.isEmpty(request.getSelectedOptions())) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + StoreOrderDO order = storeOrderDAO.getById(request.getOrderId()); + if (order == null) { + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + + List bindings = storeTypeOptionDAO.listByStoreTypeId(order.getStoreTypeId()); + Map bindingMap = bindings.stream() + .collect(Collectors.toMap(StoreTypeOptionDO::getOptionId, Function.identity(), (a, b) -> a)); + + + List snapshots = snapshotDAO.listByOrderId(order.getId()); + if (CollectionUtils.isEmpty(snapshots)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + Map snapshotMap = snapshots.stream() + .collect(Collectors.toMap(StoreOrderOptionSnapshotDO::getOptionId, Function.identity(), (a, b) -> a)); + + if (request.getSelectedOptions().size() != snapshots.size()) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + BigDecimal newOptionAmount = BigDecimal.ZERO; + BigDecimal newOriginalOptionAmount = BigDecimal.ZERO; + + List batchUpdateList = new ArrayList<>(); + for (PCStoreOrderOptionQuantityUpdateRequest.SelectedOption selected : request.getSelectedOptions()) { + if (selected == null || selected.getOptionId() == null || selected.getQuantity() == null + || selected.getQuantity().compareTo(BigDecimal.ZERO) <= 0) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + StoreOrderOptionSnapshotDO snapshot = snapshotMap.get(selected.getOptionId()); + if (snapshot == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + StoreTypeOptionDO binding = bindingMap.get(selected.getOptionId()); + if (binding == null) { + throw new ServiceException(ErrorCodeEnum.THE_OPTION_IS_NOT_PART_OF_THIS_STORE_TYPE); + } + + BigDecimal optionPrice = snapshot.getOptionPrice() == null ? BigDecimal.ZERO : snapshot.getOptionPrice(); + BigDecimal originalOptionPrice = snapshot.getOriginalOptionPrice() == null ? BigDecimal.ZERO : snapshot.getOriginalOptionPrice(); + + BigDecimal quantity = selected.getQuantity(); + BigDecimal defaultQty = binding.getDefaultQuantity(); + + BigDecimal amount = BigDecimal.ZERO; + //小于默认数的时候 + if(quantity.compareTo(defaultQty)<=0){ + amount = optionPrice.multiply(quantity); + }else { + // 店型优惠价*默认数量 + 原价 *(选择数量-默认数量) + amount = optionPrice.multiply(defaultQty).add(originalOptionPrice.multiply(quantity.subtract(defaultQty))); + } + BigDecimal originalAmount = originalOptionPrice.multiply(selected.getQuantity()); + + snapshot.setQuantity(selected.getQuantity()); + snapshot.setAmount(amount); + snapshot.setOriginalAmount(originalAmount); + batchUpdateList.add(snapshot); + + newOptionAmount = newOptionAmount.add(amount); + newOriginalOptionAmount = newOriginalOptionAmount.add(originalAmount); + } + //批量更新 + snapshotDAO.batchUpdateQuantityAndAmount(batchUpdateList); + + BigDecimal newTotalAmount = safe(order.getStoreFixedAmount()).add(newOptionAmount); + BigDecimal newOriginalTotalAmount = safe(order.getOriginalStoreFixedAmount()).add(newOriginalOptionAmount); + + StoreOrderDO updateOrder = StoreOrderDO.builder() + .id(order.getId()) + .optionAmount(newOptionAmount) + .originalOptionAmount(newOriginalOptionAmount) + .totalAmount(newTotalAmount) + .originalTotalAmount(newOriginalTotalAmount) + .unpaidAmount(newTotalAmount.subtract(safe(order.getPaidAmount()))) + .updateTime(new Date()) + .build(); + + storeOrderDAO.updateSelective(updateOrder); + return Boolean.TRUE; + } + + @Override + @Transactional + public Boolean saveOrUpdateWishlist(MiniStoreWishlistSaveRequest request, PartnerUserInfoVO userInfoVO) { + log.info("saveOrUpdateWishlist:{}",JSONObject.toJSONString(request)); + if (request == null || request.getStoreTypeId() == null || userInfoVO == null || userInfoVO.getLineId() == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + if (CollectionUtils.isEmpty(request.getSelectedOptions())) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + StoreTypeDO storeType = storeTypeDAO.getById(request.getStoreTypeId()); + if (storeType == null || Boolean.TRUE.equals(storeType.getDeleted()) || Boolean.FALSE.equals(storeType.getActive())) { + throw new ServiceException(ErrorCodeEnum.CONFIG_NOT_EXIST); + } + + List bindings = storeTypeOptionDAO.listByStoreTypeId(request.getStoreTypeId()); + Map bindingMap = bindings.stream() + .collect(Collectors.toMap(StoreTypeOptionDO::getOptionId, Function.identity(), (a, b) -> a)); + + Set optionIds = request.getSelectedOptions().stream() + .filter(Objects::nonNull) + .map(MiniStoreWishlistSaveRequest.SelectedOption::getOptionId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + Map optionMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(optionIds)) { + List options = configOptionDAO.listActiveByIds(new ArrayList<>(optionIds)); + optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a)); + } + + if (request.getVersionNo() != null) { + storeWishlistDAO.softDeleteByLineIdAndStoreTypeAndVersion(userInfoVO.getLineId(), request.getStoreTypeId(), request.getVersionNo()); + } + + String versionNo = generateOrderNo(); + List saveList = new ArrayList<>(); + BigDecimal totalAmount = BigDecimal.ZERO; + + BigDecimal storeFixedAmount = safe(storeType.getFranchiseFee()) + .add(safe(storeType.getBrandUsageFee())) + .add(safe(storeType.getManagementFee())) + .add(safe(storeType.getSystemUsageFee())) + .add(safe(storeType.getDesignFee())) + .add(safe(storeType.getFirstOrderFee())) + .add(safe(storeType.getContractDeposit())); + + for (MiniStoreWishlistSaveRequest.SelectedOption selected : request.getSelectedOptions()) { + if (selected == null || selected.getOptionId() == null || selected.getQuantity() == null + || selected.getQuantity().compareTo(BigDecimal.ZERO) <= 0) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + StoreTypeOptionDO binding = bindingMap.get(selected.getOptionId()); + if (binding == null) { + throw new ServiceException(ErrorCodeEnum.THE_OPTION_IS_NOT_PART_OF_THIS_STORE_TYPE); + } + ConfigOptionDO cfg = optionMap.get(selected.getOptionId()); + if (cfg == null || !Boolean.TRUE.equals(cfg.getActive())) { + throw new ServiceException(ErrorCodeEnum.CONFIG_NOT_EXIST); + } + + BigDecimal price = binding.getOptionPrice() == null ? BigDecimal.ZERO : binding.getOptionPrice(); + BigDecimal quantity = selected.getQuantity(); + BigDecimal defaultQty = binding.getDefaultQuantity(); + BigDecimal amount = BigDecimal.ZERO; + //原价 + BigDecimal originalPrice = cfg.getOriginalOptionPrice(); + if(quantity.compareTo(defaultQty)<=0){ + amount = price.multiply(quantity); + }else { + // 店型优惠价*默认数量 + 原价 *(选择数量-默认数量) + amount = price.multiply(defaultQty).add(originalPrice.multiply(quantity.subtract(defaultQty))); + } + totalAmount = totalAmount.add(amount); + + saveList.add(StoreWishlistDO.builder() + .lineId(userInfoVO.getLineId()) + .storeTypeId(request.getStoreTypeId()) + .optionId(selected.getOptionId()) + .quantity(selected.getQuantity()) + .totalAmount(BigDecimal.ZERO) + .versionNo(versionNo) + .deleted(0) + .build()); + } + + totalAmount = storeFixedAmount.add(totalAmount); + + for (StoreWishlistDO row : saveList) { + row.setTotalAmount(totalAmount); + } + storeWishlistDAO.insertBatch(saveList); + return Boolean.TRUE; + } + + @Override + public Boolean deleted(MiniStoreWishlistDelRequest request, PartnerUserInfoVO userInfoVO) { + storeWishlistDAO.softDeleteByLineIdAndStoreTypeAndVersion(userInfoVO.getLineId(),request.getStoreTypeId(),request.getVersionNo()); + return Boolean.TRUE; + } + + @Override + public MiniStoreWishlistDetailVO wishlistDetail(Long storeTypeId,String versionNo, PartnerUserInfoVO userInfoVO) { + if (userInfoVO == null || userInfoVO.getLineId() == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + + List rows = storeWishlistDAO.listByLineIdAndStoreTypeAndVersion(userInfoVO.getLineId(), storeTypeId, versionNo); + if (CollectionUtils.isEmpty(rows)){ + return null; + } + MiniStoreWishlistDetailVO vo = new MiniStoreWishlistDetailVO(); + vo.setStoreTypeId(storeTypeId); + vo.setVersionNo(versionNo); + vo.setTotalAmount(rows.get(0).getTotalAmount()); + + + + StoreTypeDO storeTypeDO = storeTypeDAO.getById(storeTypeId); + MiniStoreWishlistDetailVO.FeeInfoVO feeInfo = new MiniStoreWishlistDetailVO.FeeInfoVO(); + feeInfo.setFranchiseFee(storeTypeDO.getFranchiseFee()); + feeInfo.setBrandUsageFee(storeTypeDO.getBrandUsageFee()); + feeInfo.setManagementFee(storeTypeDO.getManagementFee()); + feeInfo.setSystemUsageFee(storeTypeDO.getSystemUsageFee()); + feeInfo.setDesignFee(storeTypeDO.getDesignFee()); + feeInfo.setContractDeposit(storeTypeDO.getContractDeposit()); + feeInfo.setFirstOrderFee(storeTypeDO.getFirstOrderFee()); + vo.setFeeInfoVO(feeInfo); + vo.setStoreTypeName(storeTypeDO.getStoreTypeName()); + + List optionIds = rows.stream().map(StoreWishlistDO::getOptionId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + Map optionMap = new HashMap<>(); + List options = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(optionIds)) { + options = configOptionDAO.listActiveByIds(optionIds); + optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a)); + } + + List bindings = storeTypeOptionDAO.listByStoreTypeId(storeTypeId); + Map bindingMap = bindings.stream() + .collect(Collectors.toMap(StoreTypeOptionDO::getOptionId, Function.identity(), (a, b) -> a)); + + List categoryCodeList = options.stream().map(ConfigOptionDO::getCategoryCode).collect(Collectors.toList()); + List itemCodeList = options.stream().map(ConfigOptionDO::getItemCode).collect(Collectors.toList()); + + Map categoryCodeMap = configItemCategoryDAO.nameMap(categoryCodeList); + Map itemCodeMap = configItemDAO.nameMap(itemCodeList); + + List list = new ArrayList<>(); + for (StoreWishlistDO row : rows) { + MiniStoreWishlistDetailVO.OptionVO item = new MiniStoreWishlistDetailVO.OptionVO(); + BigDecimal quantity = row.getQuantity(); + item.setOptionId(row.getOptionId()); + item.setQuantity(quantity); + ConfigOptionDO cfg = optionMap.get(row.getOptionId()); + StoreTypeOptionDO storeTypeOptionDO = bindingMap.get(row.getOptionId()); + if (cfg != null) { + item.setOptionName(cfg.getOptionName()); + item.setOriginalOptionPrice(cfg.getOriginalOptionPrice()); + item.setImageUrl(cfg.getImageUrl()); + item.setCategoryCode(cfg.getCategoryCode()); + item.setItemCode(cfg.getItemCode()); + } + if (storeTypeOptionDO!=null){ + BigDecimal price = storeTypeOptionDO.getOptionPrice(); + BigDecimal amount = BigDecimal.ZERO; + BigDecimal defaultQty = storeTypeOptionDO.getDefaultQuantity(); + //原价 + BigDecimal originalPrice = cfg.getOriginalOptionPrice(); + if(quantity.compareTo(defaultQty)<=0){ + amount = price.multiply(quantity); + }else { + // 店型优惠价*默认数量 + 原价 *(选择数量-默认数量) + amount = price.multiply(defaultQty).add(originalPrice.multiply(quantity.subtract(defaultQty))); + } + item.setOptionPrice(price); + item.setTotalPrice(amount); + item.setCategoryName(categoryCodeMap.get(storeTypeOptionDO.getCategoryCode())); + item.setItemName(itemCodeMap.get(storeTypeOptionDO.getItemCode())); + } + list.add(item); + } + vo.setOptions(list); + return vo; + } + + @Override + public List wishlistList( PartnerUserInfoVO userInfoVO) { + if (userInfoVO == null || userInfoVO.getLineId() == null) { + return Collections.emptyList(); + } + List wishlist = storeWishlistDAO.listByLineId(userInfoVO.getLineId(), null); + if (CollectionUtils.isEmpty(wishlist)) { + return Collections.emptyList(); + } + + for (MiniStoreWishlistListVO item : wishlist) { + List rows = storeWishlistDAO.listByLineIdAndStoreTypeAndVersion(userInfoVO.getLineId(), item.getStoreTypeId(), item.getVersionNo()); + if (CollectionUtils.isEmpty(rows)) { + item.setOptions(Collections.emptyList()); + continue; + } + + List optionIds = rows.stream().map(StoreWishlistDO::getOptionId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + Map optionMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(optionIds)) { + List options = configOptionDAO.listActiveByIds(optionIds); + optionMap = options.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a)); + } + + List optionList = new ArrayList<>(); + for (StoreWishlistDO row : rows) { + MiniStoreWishlistListVO.OptionVO vo = new MiniStoreWishlistListVO.OptionVO(); + vo.setOptionId(row.getOptionId()); + vo.setQuantity(row.getQuantity()); + ConfigOptionDO cfg = optionMap.get(row.getOptionId()); + if (cfg != null) { + vo.setOptionName(cfg.getOptionName()); + vo.setOptionPrice(cfg.getOptionPrice()); + vo.setImageUrl(cfg.getImageUrl()); + } + optionList.add(vo); + } + item.setOptions(optionList); + } + + return wishlist; + } + + + private BigDecimal safe(BigDecimal v) { + return v == null ? BigDecimal.ZERO : v; + } + + private String generateOrderNo() { + return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + (new Random().nextInt(9000) + 1000); + } + + private Map buildDictNameMap(Long dictTableId) { + if (dictTableId == null) { + return Collections.emptyMap(); + } + DictColumnQueryRequest dictReq = DictColumnQueryRequest.builder() + .dictTableId(dictTableId) + .openStatus(1) + .build(); + dictReq.setPageNum(1); + dictReq.setPageSize(10000); + PageInfo page = dictColumnService.getPage(dictReq); + if (page == null || CollectionUtils.isEmpty(page.getList())) { + return Collections.emptyMap(); + } + return page.getList().stream() + .filter(v -> StringUtils.isNotBlank(v.getColumnCode())) + .collect(Collectors.toMap(DictColumnVO::getColumnCode, DictColumnVO::getColumnName, (a, b) -> a)); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/store/PreAllocationRecordService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/store/PreAllocationRecordService.java new file mode 100644 index 000000000..bbb18ca3f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/store/PreAllocationRecordService.java @@ -0,0 +1,24 @@ +package com.cool.store.service.store; + +import com.cool.store.entity.order.PreAllocationRecordDO; +import com.cool.store.request.store.PreAllocationQueryShopRequest; +import com.cool.store.request.store.PreAllocationSaveRequest; +import com.cool.store.vo.order.PreAllocationRecordVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @Auther zx_szh + * @Date 2026/2/4 15:56 + * @Version 1.0 + */ +public interface PreAllocationRecordService { + + Boolean saveBatch(PreAllocationSaveRequest req); + + List queryByShop(Long shopId); + + List listDOByShop(Long shopId); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/store/StoreTypeService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/store/StoreTypeService.java new file mode 100644 index 000000000..7dfcb44e2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/store/StoreTypeService.java @@ -0,0 +1,47 @@ +package com.cool.store.service.store; + +import com.cool.store.request.store.StoreTypeOptionSaveRequest; +import com.cool.store.request.store.StoreTypeQueryRequest; +import com.cool.store.request.store.StoreTypeUpdateRequest; +import com.cool.store.vo.store.StoreTypeOptionVO; +import com.cool.store.vo.store.StoreTypeVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * 店型 Service + */ +public interface StoreTypeService { + + Boolean add(StoreTypeUpdateRequest request); + + Boolean update(StoreTypeUpdateRequest request); + + PageInfo queryPage(StoreTypeQueryRequest request); + + /** + * 删除(软删除):仅停用状态允许删除 + */ + Boolean deleteByIds(List ids); + + /** + * 启用/停用 + */ + Boolean changeActive(Long id, Boolean active); + + /** + * 保存店型可用配置选项 + */ + Boolean saveStoreTypeOptions(StoreTypeOptionSaveRequest request); + + /** + * 查询店型已配置的选项绑定 + */ + List listStoreTypeOptions(Long storeTypeId); + + /** + * 小程序:按门店类型查询启用的店型 + */ + List listActiveByStoreType(Integer storeType); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/PreAllocationRecordServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/PreAllocationRecordServiceImpl.java new file mode 100644 index 000000000..712bbdb0c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/PreAllocationRecordServiceImpl.java @@ -0,0 +1,125 @@ +package com.cool.store.service.store.impl; + +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dao.fees.WalletPayInfoDAO; +import com.cool.store.dao.order.PreAllocationRecordDAO; +import com.cool.store.dao.order.StoreOrderDAO; +import com.cool.store.entity.fees.WalletPayInfoDO; +import com.cool.store.entity.order.PreAllocationRecordDO; +import com.cool.store.entity.order.StoreOrderDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.order.StoreOrderStatusEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.store.PreAllocationSaveRequest; +import com.cool.store.service.dict.impl.DictService; +import com.cool.store.service.store.PreAllocationRecordService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.RedisUtil; +import com.cool.store.utils.StringUtil; +import com.cool.store.vo.order.PreAllocationRecordVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * @Auther zx_szh + * @Date 2026/2/4 15:56 + * @Version 1.0 + */ +@Service +@RequiredArgsConstructor +public class PreAllocationRecordServiceImpl implements PreAllocationRecordService { + + private final PreAllocationRecordDAO dao; + private final RedisUtil redisUtil; + private final DictService dictService; + private final StoreOrderDAO storeOrderDAO; + private final ShopStageInfoDAO shopStageInfoDAO; + private final WalletPayInfoDAO walletPayInfoDAO; + @Transactional + @Override + public Boolean saveBatch(PreAllocationSaveRequest req){ + String lockKey = "order:lock:" + req.getOrderId(); + String uuid = UUID.randomUUID().toString(); + if(!Boolean.TRUE.equals(redisUtil.tryLock(lockKey, uuid,30, TimeUnit.SECONDS))){ + throw new ServiceException(ErrorCodeEnum.ORDER_PAYING_CANT_ADJUST); + } + try{ + //查询订单 + StoreOrderDO storeOrder = storeOrderDAO.getById(req.getOrderId()); + //订单不存在 + if (Objects.isNull(storeOrder)){ + throw new ServiceException(ErrorCodeEnum.STORE_ORDER_NOT_FOUND); + } + BigDecimal totalAmount = storeOrder.getTotalAmount() == null ? BigDecimal.ZERO : storeOrder.getTotalAmount(); + + BigDecimal sumPayAmount = req.getItems() == null ? BigDecimal.ZERO : req.getItems().stream() + .filter(i -> i != null) + .map(i -> i.getPayAmount() == null ? BigDecimal.ZERO : i.getPayAmount()) + .reduce(BigDecimal.ZERO, BigDecimal::add); + //订单金额与分账金额对不上 抛出异常 + if (sumPayAmount.compareTo(totalAmount) != 0) { + throw new ServiceException(ErrorCodeEnum.FEE_NOT_CONSISTENT); + } + + dao.deleteByShopId(req.getShopId()); + List list = req.getItems().stream().map(i -> + PreAllocationRecordDO.builder() + .orderId(req.getOrderId()) + .shopId(req.getShopId()) + .expenseType(i.getExpenseType()) + .payeeName(i.getPayeeName()) + .payeeCode(i.getPayeeCode()) + .payAmount(i.getPayAmount()) + .allocationStatus(0) + .build() + ).collect(Collectors.toList()); + dao.insertBatch(list); + shopStageInfoDAO.updateShopStageInfo(req.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_284); + storeOrder.setStatus(StoreOrderStatusEnum.WAIT_PAY.getCode()); + storeOrderDAO.updateSelective(storeOrder); + return Boolean.TRUE; + }finally{ + redisUtil.unlock(lockKey); + } + } + + + @Override + public List queryByShop(Long shopId){ + List list = dao.queryPageByShopId(shopId); + if (CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } + List payNoList = list.stream().filter(x-> StringUtil.isNotEmpty(x.getPayNo())).map(PreAllocationRecordDO::getPayNo).collect(Collectors.toList()); + Map map = new HashMap<>(); + if (CollectionUtils.isNotEmpty(payNoList)){ + List wallet = walletPayInfoDAO.getByPayNoList(payNoList); + map = wallet.stream().collect(Collectors.toMap(WalletPayInfoDO::getPayNo, data -> data)); + } + + List preAllocationRecordVOS = BeanUtil.copyToList(list, PreAllocationRecordVO.class); + for (PreAllocationRecordVO preAllocationRecordVO : preAllocationRecordVOS) { + WalletPayInfoDO walletPayInfoDO = map.get(preAllocationRecordVO.getPayNo()); + if (!Objects.isNull(walletPayInfoDO)){ + preAllocationRecordVO.setClaimStatus(walletPayInfoDO.getClaimStatus()); + } + } + dictService.fillDictField(preAllocationRecordVOS); + return preAllocationRecordVOS; + } + + @Override + public List listDOByShop(Long shopId) { + return dao.queryPageByShopId(shopId); + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/StoreTypeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/StoreTypeServiceImpl.java new file mode 100644 index 000000000..9a9962d80 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/store/impl/StoreTypeServiceImpl.java @@ -0,0 +1,225 @@ +package com.cool.store.service.store.impl; + +import com.cool.store.dao.config.ConfigOptionDAO; +import com.cool.store.dao.store.StoreTypeDAO; +import com.cool.store.dao.store.StoreTypeOptionDAO; +import com.cool.store.entity.config.ConfigOptionDO; +import com.cool.store.entity.store.StoreTypeDO; +import com.cool.store.entity.store.StoreTypeOptionDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.store.StoreTypeOptionSaveRequest; +import com.cool.store.request.store.StoreTypeQueryRequest; +import com.cool.store.request.store.StoreTypeUpdateRequest; +import com.cool.store.service.store.StoreTypeService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.store.StoreTypeOptionVO; +import com.cool.store.vo.store.StoreTypeVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 店型 Service impl + */ +@Service +@RequiredArgsConstructor +public class StoreTypeServiceImpl implements StoreTypeService { + + private final StoreTypeDAO storeTypeDAO; + private final StoreTypeOptionDAO storeTypeOptionDAO; + private final ConfigOptionDAO configOptionDAO; + + @Override + public Boolean add(StoreTypeUpdateRequest request) { + if (request.getSortOrder() != null && storeTypeDAO.existsSortOrder(request.getSortOrder(), null)) { + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + if (request.getId()!=null){ + throw new ServiceException(ErrorCodeEnum.CURRENT_STORE_TYPE_EXIST); + } + StoreTypeDO entity = BeanUtil.toBean(request, StoreTypeDO.class); + entity.setStoreTypeCode(UUIDUtils.get8UUID()); + entity.setDeleted(false); + return storeTypeDAO.insertSelective(entity); + } + + @Override + public Boolean update(StoreTypeUpdateRequest request) { + if (request.getSortOrder() != null && storeTypeDAO.existsSortOrder(request.getSortOrder(), request.getId())) { + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + if (request.getId()==null){ + throw new ServiceException(ErrorCodeEnum.CURRENT_STORE_TYPE_NOT_EXIST); + } + StoreTypeDO entity = BeanUtil.toBean(request, StoreTypeDO.class); + return storeTypeDAO.updateSelective(entity); + } + + @Override + public PageInfo queryPage(StoreTypeQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = storeTypeDAO.queryByCondition(request.getKeyword(), request.getActive(), request.getBrand()); + return BeanUtil.toPage(new PageInfo<>(list), StoreTypeVO.class); + } + + @Override + public Boolean deleteByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return false; + } + //目前没有批量 + for (Long id : ids) { + StoreTypeDO storeType = storeTypeDAO.getById(id); + if (storeType == null) { + continue; + } + if (Boolean.TRUE.equals(storeType.getActive())) { + throw new ServiceException(ErrorCodeEnum.STORE_TYPE_MUST_DISABLE_BEFORE_DELETE); + } + } + //将配置改为不可以状态 + storeTypeOptionDAO.softDeleteByStoreTypeId(ids); + return storeTypeDAO.softDeleteByIds(ids); + } + + @Override + public Boolean changeActive(Long id, Boolean active) { + if (id == null || active == null) { + return false; + } + StoreTypeDO storeType = storeTypeDAO.getById(id); + if (storeType == null) { + return false; + } + return storeTypeDAO.updateActiveById(id, active); + } + + @Override + public Boolean saveStoreTypeOptions(StoreTypeOptionSaveRequest request) { + if (request == null || request.getStoreTypeId() == null) { + return false; + } + + if (CollectionUtils.isEmpty(request.getOptions())) { + // 没有传配置项,清空即可 + storeTypeOptionDAO.deleteByStoreTypeId(request.getStoreTypeId()); + return true; + } + + // 校验:相同 itemCode 下只能有一个默认 +// Map defaultCountMap = new HashMap<>(); +// for (StoreTypeOptionSaveRequest.StoreTypeOptionItemRequest item : request.getOptions()) { +// if (item == null || item.getItemCode() == null||item.getCategoryCode()==null) { +// continue; +// } +// if (item.getIsDefault() != null && item.getIsDefault() == 1) { +// String key = item.getCategoryCode() + item.getItemCode(); +// defaultCountMap.merge(key, 1, Integer::sum); +// } +// } +// for (Map.Entry e : defaultCountMap.entrySet()) { +// if (e.getValue() != null && e.getValue() > 1) { +// throw new ServiceException(ErrorCodeEnum.STORE_TYPE_OPTION_DEFAULT_DUPLICATE); +// } +// } + + // 先删除旧绑定 + storeTypeOptionDAO.deleteByStoreTypeId(request.getStoreTypeId()); + + Date now = new Date(); + List list = new ArrayList<>(request.getOptions().size()); + + List optionIds = request.getOptions().stream() + .filter(Objects::nonNull) + .map(StoreTypeOptionSaveRequest.StoreTypeOptionItemRequest::getOptionId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + Map configOptionMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(optionIds)) { + List optionList = configOptionDAO.listActiveByIds(optionIds); + configOptionMap = optionList.stream().collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a)); + } + + for (StoreTypeOptionSaveRequest.StoreTypeOptionItemRequest item : request.getOptions()) { + ConfigOptionDO configOption = configOptionMap.get(item.getOptionId()); + StoreTypeOptionDO entity = StoreTypeOptionDO.builder() + .storeTypeId(request.getStoreTypeId()) + .optionId(item.getOptionId()) + .categoryCode(item.getCategoryCode()) + .itemCode(item.getItemCode()) + .isDefault(item.getIsDefault()) + .defaultQuantity(item.getDefaultQuantity()) + .allowQuantityEdit(item.getAllowQuantityEdit()) + .sortOrder(item.getSortOrder()) + .optionPrice(item.getOptionPrice()==null?configOption.getOptionPrice():item.getOptionPrice()) + .topPreviewImage(item.getTopPreviewImage()) + .createTime(now) + .updateTime(now) + .build(); + list.add(entity); + } + return storeTypeOptionDAO.insertBatchSelective(list); + } + + @Override + public List listStoreTypeOptions(Long storeTypeId) { + if (storeTypeId == null) { + return new ArrayList<>(); + } + + List list = storeTypeOptionDAO.listByStoreTypeId(storeTypeId); + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + + List optionIds = list.stream() + .map(StoreTypeOptionDO::getOptionId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + + Map optionMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(optionIds)) { + List options = configOptionDAO.listActiveByIds(optionIds); + optionMap = options.stream() + .collect(Collectors.toMap(ConfigOptionDO::getId, Function.identity(), (a, b) -> a)); + } + + List vos = BeanUtil.toList(list, StoreTypeOptionVO.class); + for (StoreTypeOptionVO vo : vos) { + if (vo == null || vo.getOptionId() == null) { + continue; + } + ConfigOptionDO opt = optionMap.get(vo.getOptionId()); + if (opt == null) { + continue; + } + vo.setOptionImageUrl(opt.getImageUrl()); + vo.setOptionPrice(vo.getOptionPrice()); + vo.setOriginalOptionPrice(opt.getOriginalOptionPrice()); + vo.setOptionRemark(opt.getOptionRemark()); + vo.setOptionName(opt.getOptionName()); + vo.setOptionDescription(opt.getOptionDescription()); + vo.setOptionUnit(opt.getOptionUnit()); + } + return vos; + } + + @Override + public List listActiveByStoreType(Integer storeType) { + if (storeType == null) { + return new ArrayList<>(); + } + List list = storeTypeDAO.listActiveByStoreType(storeType); + return BeanUtil.toList(list, StoreTypeVO.class); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/visit/StoreVisitReservationService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/visit/StoreVisitReservationService.java new file mode 100644 index 000000000..4e87f58a3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/visit/StoreVisitReservationService.java @@ -0,0 +1,24 @@ +package com.cool.store.service.visit; + +import com.cool.store.request.visit.*; +import com.cool.store.vo.visit.StoreVisitReservationVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +public interface StoreVisitReservationService { + + Long create(StoreVisitReservationCreateRequest request); + + StoreVisitReservationVO detail(Long id); + + List myReservations(String mobile,Integer status); + + PageInfo adminPage(StoreVisitReservationAdminQueryRequest request); + + Boolean arrived(StoreVisitReservationIdRequest request); + + Boolean assignServiceUser(StoreVisitReservationAssignServiceRequest request); + + Boolean cancel(StoreVisitReservationCancelRequest request); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/visit/impl/StoreVisitReservationServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/visit/impl/StoreVisitReservationServiceImpl.java new file mode 100644 index 000000000..aa4026184 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/visit/impl/StoreVisitReservationServiceImpl.java @@ -0,0 +1,179 @@ +package com.cool.store.service.visit.impl; + +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.HyOpenAreaInfoDAO; +import com.cool.store.dao.store.StoreTypeDAO; +import com.cool.store.dao.visit.StoreVisitReservationDAO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.entity.store.StoreTypeDO; +import com.cool.store.entity.visit.StoreVisitReservationDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.visit.StoreVisitReservationStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.visit.*; +import com.cool.store.service.visit.StoreVisitReservationService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.StringUtil; +import com.cool.store.vo.visit.StoreVisitReservationVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class StoreVisitReservationServiceImpl implements StoreVisitReservationService { + + private final StoreVisitReservationDAO storeVisitReservationDAO; + private final StoreTypeDAO storeTypeDAO; + private final HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + private final EnterpriseUserDAO enterpriseUserDAO; + + @Override + public Long create(StoreVisitReservationCreateRequest request) { + checkIntentCityExists(request.getIntentCityId()); + + StoreVisitReservationDO reservationDO = BeanUtil.toBean(request, StoreVisitReservationDO.class); + reservationDO.setStatus(StoreVisitReservationStatusEnum.WAIT_CONFIRM.getStatus()); + reservationDO.setDeleted(0); + storeVisitReservationDAO.insertSelective(reservationDO); + return reservationDO.getId(); + } + + @Override + public StoreVisitReservationVO detail(Long id) { + StoreVisitReservationDO reservationDO = getAvailableById(id); + if (reservationDO==null){ + return new StoreVisitReservationVO(); + } + StoreVisitReservationVO storeVisitReservationVO = BeanUtil.toBean(reservationDO, StoreVisitReservationVO.class); + if (storeVisitReservationVO.getIntentCityId()!=null){ + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(storeVisitReservationVO.getIntentCityId()); + storeVisitReservationVO.setIntentCityPath(hyOpenAreaInfoDO.getAreaPath()); + storeVisitReservationVO.setIntentCityName(hyOpenAreaInfoDO.getAreaName()); + } + if (storeVisitReservationVO.getServiceUserId()!=null){ + EnterpriseUserDO user = enterpriseUserDAO.getUserInfoById(storeVisitReservationVO.getServiceUserId()); + storeVisitReservationVO.setServiceUserName(user.getName()); + storeVisitReservationVO.setServiceUserMobile(user.getMobile()); + } + return storeVisitReservationVO; + } + + @Override + public List myReservations(String mobile,Integer status) { + List list = BeanUtil.toList(storeVisitReservationDAO.listByMobile(mobile, status), StoreVisitReservationVO.class); + List userIdList = list.stream().filter(o -> StringUtils.isNotBlank(o.getServiceUserId())) + .map(StoreVisitReservationVO::getServiceUserId).collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserMap(userIdList); + List intentCityList = list.stream().filter(o -> o.getIntentCityId() != null) + .map(StoreVisitReservationVO::getIntentCityId).collect(Collectors.toList()); + Map cityMap = hyOpenAreaInfoDAO.getCityMap(intentCityList); + + list.forEach(x->{ + EnterpriseUserDO enterpriseUserDO = userNameMap.get(x.getServiceUserId()); + if (enterpriseUserDO!=null){ + x.setServiceUserName(enterpriseUserDO.getName()); + x.setServiceUserMobile(enterpriseUserDO.getMobile()); + } + HyOpenAreaInfoDO hyOpenAreaInfoDO = cityMap.get(x.getIntentCityId()); + if (hyOpenAreaInfoDO!=null){ + x.setIntentCityName(hyOpenAreaInfoDO.getAreaName()); + x.setIntentCityPath(hyOpenAreaInfoDO.getAreaPath()); + } + }); + return list; + } + + @Override + public PageInfo adminPage(StoreVisitReservationAdminQueryRequest request) { + Integer pageNum = request.getPageNum() == null ? 1 : request.getPageNum(); + Integer pageSize = request.getPageSize() == null ? 10 : request.getPageSize(); + PageHelper.startPage(pageNum, pageSize); + List list = storeVisitReservationDAO.adminPage(request); + List userIdList = list.stream().filter(o -> StringUtils.isNotBlank(o.getServiceUserId())) + .map(StoreVisitReservationVO::getServiceUserId).collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserMap(userIdList); + List intentCityList = list.stream().filter(o -> o.getIntentCityId() != null) + .map(StoreVisitReservationVO::getIntentCityId).collect(Collectors.toList()); + Map cityMap = hyOpenAreaInfoDAO.getCityMap(intentCityList); + + list.forEach(x->{ + EnterpriseUserDO enterpriseUserDO = userNameMap.get(x.getServiceUserId()); + if (enterpriseUserDO!=null){ + x.setServiceUserName(enterpriseUserDO.getName()); + x.setServiceUserMobile(enterpriseUserDO.getMobile()); + } + HyOpenAreaInfoDO hyOpenAreaInfoDO = cityMap.get(x.getIntentCityId()); + if (hyOpenAreaInfoDO!=null){ + x.setIntentCityName(hyOpenAreaInfoDO.getAreaName()); + x.setIntentCityPath(hyOpenAreaInfoDO.getAreaPath()); + } + }); + return new PageInfo<>(list); + } + + @Override + public Boolean arrived(StoreVisitReservationIdRequest request) { + StoreVisitReservationDO old = getAvailableById(request.getId()); + if (StoreVisitReservationStatusEnum.CANCELED.getStatus().equals(old.getStatus())) { + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + StoreVisitReservationDO update = new StoreVisitReservationDO(); + update.setId(old.getId()); + update.setStatus(StoreVisitReservationStatusEnum.ARRIVED.getStatus()); + update.setUpdateTime(new Date()); + return storeVisitReservationDAO.updateSelective(update); + } + + @Override + public Boolean assignServiceUser(StoreVisitReservationAssignServiceRequest request) { + StoreVisitReservationDO old = getAvailableById(request.getId()); + StoreVisitReservationDO update = new StoreVisitReservationDO(); + update.setId(old.getId()); + update.setServiceUserId(request.getServiceUserId()); + if (StoreVisitReservationStatusEnum.WAIT_CONFIRM.getStatus().equals(old.getStatus())) { + update.setStatus(StoreVisitReservationStatusEnum.WAIT_VISIT.getStatus()); + } + update.setUpdateTime(new Date()); + return storeVisitReservationDAO.updateSelective(update); + } + + @Override + public Boolean cancel(StoreVisitReservationCancelRequest request) { + StoreVisitReservationDO old = getAvailableById(request.getId()); + if (StoreVisitReservationStatusEnum.ARRIVED.getStatus().equals(old.getStatus())) { + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + StoreVisitReservationDO update = new StoreVisitReservationDO(); + update.setId(old.getId()); + update.setStatus(StoreVisitReservationStatusEnum.CANCELED.getStatus()); + update.setCancelReason(request.getCancelReason()); + update.setUpdateTime(new Date()); + return storeVisitReservationDAO.updateSelective(update); + } + + private void checkIntentCityExists(Long intentCityId) { + HyOpenAreaInfoDO areaInfoDO = hyOpenAreaInfoDAO.selectById(intentCityId); + if (Objects.isNull(areaInfoDO) || Objects.equals(areaInfoDO.getDeleted(), 1)) { + throw new ServiceException(ErrorCodeEnum.OPEN_AREA_IS_NOT_EXISTS); + } + } + + private StoreVisitReservationDO getAvailableById(Long id) { + StoreVisitReservationDO reservationDO = storeVisitReservationDAO.getById(id); + if (Objects.isNull(reservationDO) || Objects.equals(reservationDO.getDeleted(), 1)) { + throw new ServiceException(ErrorCodeEnum.NO_DATA); + } + return reservationDO; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/IWalletTradeResolve.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/IWalletTradeResolve.java new file mode 100644 index 000000000..e270064e8 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/IWalletTradeResolve.java @@ -0,0 +1,25 @@ +package com.cool.store.service.wallet; + +import com.cool.store.entity.wallet.WalletTradeDO; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; + +/** + *

+ * 钱包交易业务模块处理 + *

+ * + * @author wangff + * @since 2026/2/4 + */ +public interface IWalletTradeResolve { + + /** + * 模块code + */ + WalletTradeModuleEnum getModule(); + + /** + * 业务处理 + */ + void resolve(WalletTradeDO walletTradeDO); +} 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 index fc32ca65d..7ae3eb37e 100644 --- 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 @@ -120,6 +120,17 @@ public class WalletApiService { } + /** + * 门店账户向公司分账转账接口(批量转账接口) + * @param request + * @return + */ + public BatchTransferDTO batchTransfer(BatchTransferRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/batchTransfer", request, BatchTransferDTO.class); + } + + + /** * 门店签约账户,退款提现至提现卡 * @param request diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeResolveFactory.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeResolveFactory.java new file mode 100644 index 000000000..0bb083f93 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeResolveFactory.java @@ -0,0 +1,43 @@ +package com.cool.store.service.wallet; + +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; +import com.cool.store.exception.ServiceException; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + *

+ * 钱包交易业务处理工厂 + *

+ * + * @author wangff + * @since 2026/2/4 + */ +@Service +public class WalletTradeResolveFactory { + @Resource + private IWalletTradeResolve[] resolves; + + private final Map resolveMap = new HashMap<>(); + + @PostConstruct + public void init() { + for (IWalletTradeResolve resolve : resolves) { + resolveMap.put(resolve.getModule(), resolve); + } + } + + public IWalletTradeResolve getResolve(WalletTradeModuleEnum module) { + IWalletTradeResolve resolve = resolveMap.get(module); + if (Objects.isNull(resolve)) { + throw new ServiceException(ErrorCodeEnum.NOT_EXIST_CALLBACK_RESOLVE); + } + return resolve; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeService.java new file mode 100644 index 000000000..2668df8c0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletTradeService.java @@ -0,0 +1,21 @@ +package com.cool.store.service.wallet; + +/** + *

+ * 钱包交易服务类 + *

+ * + * @author wangff + * @since 2026/2/4 + */ +public interface WalletTradeService { + + /** + * 交易回调 + * @param storeId 门店id + * @param payNo 付款单号 + * @param tradeId 交易流水号 + * @param payStatus 付款状态 + */ + void tradeCallback(String storeId, String payNo, String tradeId, Integer payStatus); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletFranchisePayResolve.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletFranchisePayResolve.java new file mode 100644 index 000000000..c7911d261 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletFranchisePayResolve.java @@ -0,0 +1,52 @@ +package com.cool.store.service.wallet.impl; + +import com.cool.store.dao.fees.WalletPayInfoDAO; +import com.cool.store.entity.fees.WalletPayInfoDO; +import com.cool.store.entity.wallet.WalletTradeDO; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; +import com.cool.store.service.PushService; +import com.cool.store.service.wallet.IWalletTradeResolve; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Objects; + +/** + *

+ * 钱包加盟缴费 + *

+ * + * @author wangff + * @since 2026/2/4 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class WalletFranchisePayResolve implements IWalletTradeResolve { + private final WalletPayInfoDAO walletPayInfoDAO; + private final PushService pushService; + + @Override + public WalletTradeModuleEnum getModule() { + return WalletTradeModuleEnum.FRANCHISE_PAY; + } + + @Override + @Transactional + public void resolve(WalletTradeDO walletTradeDO) { + // 修改业务订单状态 + WalletPayInfoDO payInfoDO = walletPayInfoDAO.getByPayNo(walletTradeDO.getPayNo()); + if (Objects.isNull(payInfoDO)) { + log.info("不存在钱包加盟缴费信息"); + return; + } + payInfoDO.setPayStatus(walletTradeDO.getPayStatus()); + if (StringUtils.isBlank(payInfoDO.getTradeId())) { + payInfoDO.setTradeId(walletTradeDO.getTradeId()); + } + walletPayInfoDAO.updateByPrimaryKeySelective(payInfoDO); + } +} 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 index 12aa1f4b1..d76f87547 100644 --- 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 @@ -18,6 +18,8 @@ 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.MessageEnum; +import com.cool.store.enums.UserRoleEnum; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.enums.wallet.BankAccountTypeEnum; @@ -26,9 +28,10 @@ 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.UserAuthMappingService; import com.cool.store.service.dict.impl.DictService; -import com.cool.store.service.wallet.WalletApiService; -import com.cool.store.service.wallet.WalletService; +import com.cool.store.service.impl.CommonService; +import com.cool.store.service.wallet.*; import com.cool.store.utils.BeanUtil; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.UUIDUtils; @@ -75,6 +78,9 @@ public class WalletServiceImpl implements WalletService { private final TempOpenWalletInfoDAO tempOpenWalletInfoDAO; private final OpenBankInfoDAO openBankInfoDAO; private final DictService dictService; + private final UserAuthMappingService userAuthMappingService; + private final CommonService commonService; + private final WalletTradeService walletTradeService; private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @@ -139,11 +145,35 @@ public class WalletServiceImpl implements WalletService { // 更新钱包开通阶段状态 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); + // 判断一下缴费阶段是否开启,未开启则开启缴费阶段 useStandardStore 普通店 标准店开启选配店型 + if (shopInfo.getUseStandardStore()==0){ + 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); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfo.getLineId()); + Set publishFranchiseFeeUsers = new HashSet<>(); + List joinUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.JOIN_OFFICE, lineInfo.getRegionId()); + if (Objects.nonNull(joinUser)) { + Set joinUserIds = joinUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet()); + publishFranchiseFeeUsers.addAll(joinUserIds); + } + List regionUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.REGION_OFFICE, lineInfo.getRegionId()); + if (Objects.nonNull(regionUser)) { + Set regionUserIds = regionUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet()); + publishFranchiseFeeUsers.addAll(regionUserIds); + } + HashMap map = new HashMap<>(); + map.put("partnerUsername", lineInfo.getUsername()); + map.put("partnerMobile", lineInfo.getMobile()); + //发送工作通知 + commonService.sendQWMessage(new ArrayList<>(publishFranchiseFeeUsers), + MessageEnum.MESSAGE_23, + map); + } + }else{ + updateSubStageList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_280); } + shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), updateSubStageList); // 判断营业执照是否已经上传,已上传则调用打标接口 @@ -308,6 +338,9 @@ public class WalletServiceImpl implements WalletService { @Override public Boolean accountTradeCallback(AccountTradeCallbackRequest request) { +// if (CommonConstants.INDEX_ONE.equals(request.getTradeType())) { +// walletTradeService.tradeCallback(request.getOutStoreId(), request.getReqNo(), String.valueOf(request.getTradeId()), request.getTradeStatus()); +// } return Boolean.TRUE; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletTradeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletTradeServiceImpl.java new file mode 100644 index 000000000..3debefe6e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletTradeServiceImpl.java @@ -0,0 +1,54 @@ +package com.cool.store.service.wallet.impl; + +import com.cool.store.dao.wallet.WalletTradeDAO; +import com.cool.store.entity.wallet.WalletTradeDO; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; +import com.cool.store.service.wallet.IWalletTradeResolve; +import com.cool.store.service.wallet.WalletTradeResolveFactory; +import com.cool.store.service.wallet.WalletTradeService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Objects; + +/** + *

+ * 钱包交易 服务实现类 + *

+ * + * @author wangff + * @since 2026/2/4 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class WalletTradeServiceImpl implements WalletTradeService { + private final WalletTradeDAO walletTradeDAO; + private final WalletTradeResolveFactory walletTradeResolveFactory; + + @Override + @Transactional + @Async("generalThreadPool") + public void tradeCallback(String storeId, String payNo, String tradeId, Integer payStatus) { + WalletTradeDO walletTradeDO = walletTradeDAO.getByPayNo(payNo); + if (Objects.nonNull(walletTradeDO)) { + if (Objects.isNull(walletTradeDO.getTradeId())) { + walletTradeDO.setTradeId(tradeId); + } + walletTradeDO.setPayStatus(payStatus); + try { + WalletTradeModuleEnum module = WalletTradeModuleEnum.getByModule(walletTradeDO.getModule()); + if (Objects.nonNull(module)) { + IWalletTradeResolve tradeResolve = walletTradeResolveFactory.getResolve(module); + tradeResolve.resolve(walletTradeDO); + } + } catch (Exception e) { + log.error("钱包交易回调业务处理失败", e); + } + walletTradeDAO.updateByPrimaryKeySelective(walletTradeDO); + } + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemCategoryController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemCategoryController.java new file mode 100644 index 000000000..aeedf6f41 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemCategoryController.java @@ -0,0 +1,51 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.config.ConfigItemCategoryQueryRequest; +import com.cool.store.request.config.ConfigItemCategoryUpdateRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.config.ConfigItemCategoryService; +import com.cool.store.vo.config.ConfigItemCategoryVO; +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; + +@Api(tags = "标准店-配置大类管理") +@RestController +@RequestMapping("/pc/configItemCategory") +@RequiredArgsConstructor +public class ConfigItemCategoryController { + + private final ConfigItemCategoryService configItemCategoryService; + + @ApiOperation("新增配置大类") + @PostMapping("/add") + public ResponseResult add(@RequestBody @Validated(InsertGroup.class) ConfigItemCategoryUpdateRequest request) { + return ResponseResult.success(configItemCategoryService.add(request, CurrentUserHolder.getUser())); + } + + @ApiOperation("编辑配置大类") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Validated(UpdateGroup.class) ConfigItemCategoryUpdateRequest request) { + return ResponseResult.success(configItemCategoryService.update(request, CurrentUserHolder.getUser())); + } + + @ApiOperation("分页查询配置大类") + @PostMapping("/queryPage") + public ResponseResult> queryPage(@RequestBody ConfigItemCategoryQueryRequest request) { + return ResponseResult.success(configItemCategoryService.queryPage(request)); + } + + @ApiOperation("批量删除配置大类") + @PostMapping("/deleteByIds") + public ResponseResult deleteByIds(@RequestBody List ids) { + return ResponseResult.success(configItemCategoryService.deleteByIds(ids)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemController.java new file mode 100644 index 000000000..fd3dc7020 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigItemController.java @@ -0,0 +1,58 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.config.ConfigItemQueryRequest; +import com.cool.store.request.config.ConfigItemUpdateRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.config.ConfigItemService; +import com.cool.store.vo.config.ConfigItemVO; +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; + +@Api(tags = "标准店-配置项管理") +@RestController +@RequestMapping("/pc/configItem") +@RequiredArgsConstructor +public class ConfigItemController { + + private final ConfigItemService configItemService; + + @ApiOperation("新增配置项") + @PostMapping("/add") + public ResponseResult add(@RequestBody @Validated(InsertGroup.class) ConfigItemUpdateRequest request) { + return ResponseResult.success(configItemService.add(request,CurrentUserHolder.getUser())); + } + + @ApiOperation("编辑配置项") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Validated(UpdateGroup.class) ConfigItemUpdateRequest request) { + return ResponseResult.success(configItemService.update(request , CurrentUserHolder.getUser())); + } + + @ApiOperation("分页查询配置项") + @PostMapping("/queryPage") + public ResponseResult> queryPage(@RequestBody ConfigItemQueryRequest request) { + return ResponseResult.success(configItemService.queryPage(request)); + } + + @ApiOperation("查询大类下的配置项") + @GetMapping("/listByCategoryId") + public ResponseResult> listByCategoryId(@RequestParam("CategoryId") Long CategoryId) { + return ResponseResult.success(configItemService.listByCategoryId(CategoryId)); + } + + @ApiOperation("批量删除配置项") + @PostMapping("/deleteByIds") + public ResponseResult deleteByIds(@RequestBody List ids) { + return ResponseResult.success(configItemService.deleteByIds(ids)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigOptionController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigOptionController.java new file mode 100644 index 000000000..fc6e64a74 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ConfigOptionController.java @@ -0,0 +1,58 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.request.config.ConfigOptionQueryRequest; +import com.cool.store.request.config.ConfigOptionTreeQueryRequest; +import com.cool.store.request.config.ConfigOptionUpdateRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.config.ConfigOptionService; +import com.cool.store.vo.config.ConfigOptionTreeVO; +import com.cool.store.vo.config.ConfigOptionVO; +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; + +@Api(tags = "标准店-配置选项管理") +@RestController +@RequestMapping("/pc/configOption") +@RequiredArgsConstructor +public class ConfigOptionController { + + private final ConfigOptionService configOptionService; + + @ApiOperation("新增配置选项") + @PostMapping("/add") + public ResponseResult add(@RequestBody @Validated(InsertGroup.class) ConfigOptionUpdateRequest request) { + return ResponseResult.success(configOptionService.add(request)); + } + + @ApiOperation("编辑配置选项") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Validated(UpdateGroup.class) ConfigOptionUpdateRequest request) { + return ResponseResult.success(configOptionService.update(request)); + } + + @ApiOperation("分页查询配置选项") + @PostMapping("/queryPage") + public ResponseResult> queryPage(@RequestBody ConfigOptionQueryRequest request) { + return ResponseResult.success(configOptionService.queryPage(request)); + } + + @ApiOperation("查询激活的配置选项三层结构") + @GetMapping("/listActiveTree") + public ResponseResult> listActiveTree() { + return ResponseResult.success(configOptionService.listActiveTree()); + } + + @ApiOperation("批量删除配置选项") + @PostMapping("/deleteByIds") + public ResponseResult deleteByIds(@RequestBody List ids) { + return ResponseResult.success(configOptionService.deleteByIds(ids)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java index 66e3a03a2..59098c105 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java @@ -89,6 +89,13 @@ public class DeskController { return ResponseResult.success(deskService.signingOfFranchiseContractPendingList( deskRequest, userInfo )); } + @ApiOperation("待处理-店型选配") + @PostMapping("/standardStorePendingList") + public ResponseResult> standardStorePendingList(@RequestBody DeskRequest deskRequest) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.standardStorePendingList( deskRequest, userInfo )); + } + @ApiOperation("待处理-发票回传") @PostMapping("/invoiceReturnPendingList") public ResponseResult> invoiceReturnPendingList(@RequestBody DeskRequest deskRequest) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ExportController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ExportController.java index c501ec466..1b1b07481 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ExportController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ExportController.java @@ -4,6 +4,7 @@ import com.cool.store.context.CurrentUserHolder; import com.cool.store.dto.pre.fry.ApplyManagementQueryDTO; import com.cool.store.enums.FileTypeEnum; import com.cool.store.request.*; +import com.cool.store.request.order.PCStoreOrderQueryRequest; import com.cool.store.request.visit.VisitRecordQueryRequest; import com.cool.store.response.ResponseResult; import com.cool.store.service.ExportService; @@ -83,6 +84,12 @@ public class ExportController { return ResponseResult.success(exportService.exportVisitRecord(request, CurrentUserHolder.getUser())); } + @ApiOperation("PC端 店型-订单列表导出") + @PostMapping("/exportStandardStoreOrder") + public ResponseResult exportStandardStoreOrder(@RequestBody PCStoreOrderQueryRequest request) { + return ResponseResult.success(exportService.exportStandardStoreOrderRecord(request, CurrentUserHolder.getUser())); + } + @PostMapping("/pointExport") @ApiOperation("铺位导出") public ResponseResult pointExport(@RequestBody AllPointPageRequest request) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/FeeStandardConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/FeeStandardConfigController.java new file mode 100644 index 000000000..97b824bf5 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/FeeStandardConfigController.java @@ -0,0 +1,57 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.request.fees.FeeStandardConfigAddRequest; +import com.cool.store.request.fees.FeeStandardConfigPageRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.fees.FeeStandardConfigService; +import com.cool.store.vo.fees.FeeStandardConfigVO; +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 javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 加盟费用标准收费额配置 + */ +@Api(tags = "加盟费用标准收费额配置") +@RestController +@RequestMapping("/pc/fees/standardConfig") +@RequiredArgsConstructor +@Validated +public class FeeStandardConfigController { + + private final FeeStandardConfigService feeStandardConfigService; + + @ApiOperation("新增") + @PostMapping("/add") + public ResponseResult add(@RequestBody @Validated({InsertGroup.class}) FeeStandardConfigAddRequest request) { + return ResponseResult.success(feeStandardConfigService.add(request)); + } + + @ApiOperation("修改") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Validated({UpdateGroup.class}) FeeStandardConfigAddRequest request) { + return ResponseResult.success(feeStandardConfigService.update(request)); + } + + @ApiOperation("分页查询") + @PostMapping("/page") + public ResponseResult> page(@RequestBody FeeStandardConfigPageRequest request) { + return ResponseResult.success(feeStandardConfigService.page(request)); + } + + @ApiOperation("根据门店id查询配置") + @GetMapping("/getFeeConfig") + public ResponseResult> getFeeConfig(@RequestParam @NotNull(message = "门店id不能为空") Long shopId) { + return ResponseResult.success(feeStandardConfigService.getByShopId(shopId)); + } +} + + diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ModifyRecordController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ModifyRecordController.java new file mode 100644 index 000000000..ae2025391 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ModifyRecordController.java @@ -0,0 +1,46 @@ +package com.cool.store.controller.webb; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.modify.ModifyRecordService; +import com.cool.store.vo.modify.ModifyRecordVO; +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.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + *

+ * 修改记录 前端控制器 + *

+ * + * @author wangff + * @since 2026/1/27 + */ +@Api(tags = "修改记录") +@RestController +@RequestMapping("/pc/modify/record") +@RequiredArgsConstructor +@Validated +public class ModifyRecordController { + private final ModifyRecordService modifyRecordService; + + @ApiOperation("修改记录") + @ApiImplicitParams({ + @ApiImplicitParam(name = "module", value = "模块,WALLET_ALLOCATION_CONFIG分账配置 PAYEE_BANK_CONFIG收款银行配置 FEE_STANDARD_CONFIG加盟费用标准收费额配置", required = true), + @ApiImplicitParam(name = "businessId", value = "业务id", required = true) + }) + @GetMapping("/list") + public ResponseResult> list(@NotBlank(message = "模块不能为空") String module, + @NotNull(message = "业务id不能为空") Long businessId) { + return ResponseResult.success(modifyRecordService.getModifyRecorsList(module, businessId)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseFeeController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseFeeController.java index acf29a8aa..4612eedc4 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseFeeController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseFeeController.java @@ -4,12 +4,14 @@ import com.cool.store.context.CurrentUserHolder; import com.cool.store.context.LoginUserInfo; import com.cool.store.request.AuditFranchiseFeeRequest; import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.request.FranchisePayTypeUpdateRequest; import com.cool.store.response.FranchiseFeeResponse; import com.cool.store.response.ResponseResult; import com.cool.store.service.FranchiseFeeService; 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.*; import javax.annotation.Resource; @@ -55,4 +57,9 @@ public class PCFranchiseFeeController { return ResponseResult.success(franchiseFeeService.auditFranchiseFee(request,user)); } + @ApiOperation("修改账单支付方式") + @PostMapping("/updatePayType") + public ResponseResult updatePayType(@RequestBody @Validated FranchisePayTypeUpdateRequest request) { + return ResponseResult.success(franchiseFeeService.updatePayType(request)); + } } 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 dda92b28a..664b7986a 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 @@ -43,6 +43,7 @@ import com.cool.store.response.oppty.OpportunityDetailResponse; import com.cool.store.response.oppty.OpportunityInfoPageResponse; import com.cool.store.service.*; import com.cool.store.service.close.CloseStoreService; +import com.cool.store.service.fees.WalletPayInfoService; import com.cool.store.service.impl.CommonService; import com.cool.store.service.impl.UserAuthMappingServiceImpl; import com.cool.store.service.wallet.WalletApiService; @@ -131,6 +132,14 @@ public class PCTestController { @Resource SignFranchiseService signFranchiseService; + @Resource + WalletPayInfoService walletPayInfoService; + + @PostMapping("/walletReceiptRePush") + public ResponseResult walletReceiptRePush(Long id) { + walletPayInfoService.rePushReceipt(id); + return ResponseResult.success(true); + } @PostMapping("/applyCloseStore") public ResponseResult applyCloseStore(@RequestBody @Valid CloseStoreApplyRequest request) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PayeeBankConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PayeeBankConfigController.java new file mode 100644 index 000000000..c8f5e22f1 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PayeeBankConfigController.java @@ -0,0 +1,63 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.request.fees.PayeeBankConfigAddRequest; +import com.cool.store.request.fees.PayeeBankConfigPageRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.fees.PayeeBankConfigService; +import com.cool.store.vo.fees.PayeeBankConfigVO; +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.NotNull; + +/** + * 线下收款银行配置Controller + */ +@Api(tags = "线下收款银行配置") +@RestController +@RequestMapping("/pc/fees/bankConfig") +@RequiredArgsConstructor +@Validated +public class PayeeBankConfigController { + + private final PayeeBankConfigService payeeBankConfigService; + + @ApiOperation("新增") + @PostMapping("/add") + public ResponseResult add(@RequestBody @Validated({InsertGroup.class}) PayeeBankConfigAddRequest request) { + return ResponseResult.success(payeeBankConfigService.add(request)); + } + + @ApiOperation("编辑") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Validated({UpdateGroup.class}) PayeeBankConfigAddRequest request) { + return ResponseResult.success(payeeBankConfigService.update(request)); + } + + @ApiOperation("分页查询") + @PostMapping("/page") + public ResponseResult> page(@RequestBody PayeeBankConfigPageRequest request) { + return ResponseResult.success(payeeBankConfigService.page(request)); + } + + @ApiOperation("根据门店查询线下收款银行") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "门店id", required = true), + @ApiImplicitParam(name = "payType", value = "付款方式 1线下支付 2平安钱包支付", required = true), + }) + @GetMapping("/getBankConfig") + public ResponseResult getBankConfig(@NotNull(message = "门店id不能为空") Long shopId, + Integer payType) { + return ResponseResult.success(payeeBankConfigService.getByShopId(shopId, payType)); + } +} + + diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PreAllocationRecordController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PreAllocationRecordController.java new file mode 100644 index 000000000..a605ac329 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PreAllocationRecordController.java @@ -0,0 +1,41 @@ +package com.cool.store.controller.webb; + +import com.cool.store.request.store.PreAllocationQueryShopRequest; +import com.cool.store.request.store.PreAllocationSaveRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.store.PreAllocationRecordService; +import com.cool.store.vo.order.PreAllocationRecordVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @Auther zx_szh + * @Date 2026/2/4 16:37 + * @Version 1.0 + */ +@Api(tags="标准店-预分账明细管理") +@RestController +@RequestMapping("/pc/preAllocation") +@RequiredArgsConstructor +public class PreAllocationRecordController { + + private final PreAllocationRecordService preAllocationRecordService; + + @ApiOperation("批量保存预分账明细") + @PostMapping("/saveBatch") + public ResponseResult saveBatch(@RequestBody @Valid PreAllocationSaveRequest req){ + return ResponseResult.success(preAllocationRecordService.saveBatch(req)); + } + + @ApiOperation("按门店查询预分账明细") + @GetMapping("/queryByShop") + public ResponseResult> queryByShop(@RequestParam(value = "shopId" ,required = true) Long shopId){ + return ResponseResult.success(preAllocationRecordService.queryByShop(shopId)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopAllocationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopAllocationController.java new file mode 100644 index 000000000..5782edf33 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopAllocationController.java @@ -0,0 +1,39 @@ +package com.cool.store.controller.webb; + +import com.cool.store.enums.fees.AllocationPayStatusEnum; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.fees.WalletPayInfoService; +import com.cool.store.vo.fees.WalletPayInfoVO; +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.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + *

+ * 门店缴费信息 + *

+ * + * @author wangff + * @since 2026/2/3 + */ +@RestController +@Api(tags ="门店缴费信息") +@RequestMapping({"/pc/fees/shopAllocation"}) +@RequiredArgsConstructor +@Validated +public class ShopAllocationController { + private final WalletPayInfoService walletPayInfoService; + + @ApiOperation("缴费信息列表") + @GetMapping("/payInfoList") + public ResponseResult> payInfoList(@NotNull(message = "门店id不能为空") Long shopId) { + return ResponseResult.success(walletPayInfoService.payInfoList(shopId, AllocationPayStatusEnum.PAID.getStatus())); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreOrderController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreOrderController.java new file mode 100644 index 000000000..cbc24e883 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreOrderController.java @@ -0,0 +1,77 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.order.OrderAuditRecordRequest; +import com.cool.store.request.order.PCStoreOrderOptionQuantityUpdateRequest; +import com.cool.store.request.order.PCStoreOrderQueryRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.order.MiniStoreOrderService; +import com.cool.store.vo.order.MiniStoreOrderDetailVO; +import com.cool.store.vo.order.PCStoreOrderListVO; +import javax.validation.Valid; +import com.cool.store.vo.order.WalletPayVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * @Auther zx_szh + * @Date 2026/2/6 14:34 + * @Version 1.0 + */ +@Api(tags = "PC标准店-店型") +@RestController +@RequestMapping("/pc/storeOrder") +@RequiredArgsConstructor +public class StoreOrderController { + + private final MiniStoreOrderService miniStoreOrderService; + + @ApiOperation("订单 审批拒绝") + @PostMapping("/passOrder") + public ResponseResult passOrder(@RequestBody OrderAuditRecordRequest request) { + return ResponseResult.success(miniStoreOrderService.passOrder(request, CurrentUserHolder.getUser())); + } + + @ApiOperation("订单 审批通过") + @PostMapping("/rejectOrder") + public ResponseResult rejectOrder(@RequestBody OrderAuditRecordRequest request) { + return ResponseResult.success(miniStoreOrderService.rejectOrder(request,CurrentUserHolder.getUser())); + } + + @ApiOperation("订单详情") + @GetMapping("/detail") + public ResponseResult detail(@RequestParam("orderId") Long orderId) { + return ResponseResult.success(miniStoreOrderService.getDetail(orderId)); + } + + @ApiOperation("获取当前门店最新的订单") + @GetMapping("/getLatestOrderByShopId") + public ResponseResult getLatestOrderByShopId(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(miniStoreOrderService.getLatestOrderByShopId(shopId)); + } + + @ApiOperation("订单列表") + @PostMapping("/list") + public ResponseResult> list(@RequestBody PCStoreOrderQueryRequest request) { + return ResponseResult.success(miniStoreOrderService.list(request)); + } + + @ApiOperation("付款流水明细") + @GetMapping("/payList") + public ResponseResult> payList(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(miniStoreOrderService.payList(shopId)); + } + + @ApiOperation("批量更新订单配置项数量") + @PostMapping("/batchUpdateOptionQuantity") + public ResponseResult batchUpdateOptionQuantity(@RequestBody @Valid PCStoreOrderOptionQuantityUpdateRequest request) { + return ResponseResult.success(miniStoreOrderService.batchUpdateOptionQuantity(request)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreTypeController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreTypeController.java new file mode 100644 index 000000000..dfa25aab7 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreTypeController.java @@ -0,0 +1,77 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.request.store.StoreTypeOptionSaveRequest; +import com.cool.store.request.store.StoreTypeQueryRequest; +import com.cool.store.request.store.StoreTypeUpdateRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.store.StoreTypeService; +import com.cool.store.vo.store.StoreTypeOptionVO; +import com.cool.store.vo.store.StoreTypeVO; +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 javax.validation.Valid; +import java.util.List; + +@Api(tags = "店型管理") +@RestController +@RequestMapping("/pc/storeType") +@RequiredArgsConstructor +public class StoreTypeController { + + private final StoreTypeService storeTypeService; + + @ApiOperation("新增店型") + @PostMapping("/add") + public ResponseResult add(@RequestBody @Validated(InsertGroup.class) StoreTypeUpdateRequest request) { + return ResponseResult.success(storeTypeService.add(request)); + } + + @ApiOperation("编辑店型") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Validated(UpdateGroup.class) StoreTypeUpdateRequest request) { + return ResponseResult.success(storeTypeService.update(request)); + } + + @ApiOperation("分页查询店型") + @PostMapping("/queryPage") + public ResponseResult> queryPage(@RequestBody StoreTypeQueryRequest request) { + return ResponseResult.success(storeTypeService.queryPage(request)); + } + + @ApiOperation("批量删除店型(仅停用状态可删除)") + @PostMapping("/deleteByIds") + public ResponseResult deleteByIds(@RequestBody List ids) { + return ResponseResult.success(storeTypeService.deleteByIds(ids)); + } + + @ApiOperation("启用店型") + @PostMapping("/enable/{id}") + public ResponseResult enable(@PathVariable Long id) { + return ResponseResult.success(storeTypeService.changeActive(id, true)); + } + + @ApiOperation("停用店型") + @PostMapping("/disable/{id}") + public ResponseResult disable(@PathVariable Long id) { + return ResponseResult.success(storeTypeService.changeActive(id, false)); + } + + @ApiOperation("保存店型可用配置选项") + @PostMapping("/config/save") + public ResponseResult saveStoreTypeOptions(@RequestBody @Valid StoreTypeOptionSaveRequest request) { + return ResponseResult.success(storeTypeService.saveStoreTypeOptions(request)); + } + + @ApiOperation("查询店型已配置的选项绑定") + @GetMapping("/config/detail") + public ResponseResult> listStoreTypeOptions(@RequestParam("storeTypeId") Long storeTypeId) { + return ResponseResult.success(storeTypeService.listStoreTypeOptions(storeTypeId)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreVisitReservationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreVisitReservationController.java new file mode 100644 index 000000000..5b43911c9 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/StoreVisitReservationController.java @@ -0,0 +1,45 @@ +package com.cool.store.controller.webb; + +import com.cool.store.request.visit.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.visit.StoreVisitReservationService; +import com.cool.store.vo.visit.StoreVisitReservationVO; +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.*; + +@Api(tags = "预约到店管理") +@RestController +@RequestMapping("/pc/storeVisitReservation") +@RequiredArgsConstructor +public class StoreVisitReservationController { + + private final StoreVisitReservationService storeVisitReservationService; + + @ApiOperation("列表查询") + @PostMapping("/page") + public ResponseResult> page(@RequestBody StoreVisitReservationAdminQueryRequest request) { + return ResponseResult.success(storeVisitReservationService.adminPage(request)); + } + + @ApiOperation("标记已到店") + @PostMapping("/arrived") + public ResponseResult arrived(@RequestBody @Validated StoreVisitReservationIdRequest request) { + return ResponseResult.success(storeVisitReservationService.arrived(request)); + } + + @ApiOperation("分配服务人员") + @PostMapping("/assignServiceUser") + public ResponseResult assignServiceUser(@RequestBody @Validated StoreVisitReservationAssignServiceRequest request) { + return ResponseResult.success(storeVisitReservationService.assignServiceUser(request)); + } + + @ApiOperation("取消预约") + @PostMapping("/cancel") + public ResponseResult cancel(@RequestBody @Validated StoreVisitReservationCancelRequest request) { + return ResponseResult.success(storeVisitReservationService.cancel(request)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletAllocationConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletAllocationConfigController.java new file mode 100644 index 000000000..28b149cfd --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletAllocationConfigController.java @@ -0,0 +1,66 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.request.fees.WalletCompanyQueryRequest; +import com.cool.store.request.fees.WalletAllocationConfigAddRequest; +import com.cool.store.request.fees.WalletAllocationConfigPageRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.fees.WalletAllocationConfigService; +import com.cool.store.vo.fees.InvestDivisionRegionVO; +import com.cool.store.vo.fees.WalletAllocationCompanyVO; +import com.cool.store.vo.fees.WalletAllocationConfigVO; +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; + +/** + * 分账配置Controller + * + * @author system + */ +@Api(tags = "分账配置") +@RestController +@RequestMapping("/pc/fees/allocationConfig") +@RequiredArgsConstructor +@Validated +public class WalletAllocationConfigController { + + private final WalletAllocationConfigService walletAllocationConfigService; + + @ApiOperation("新增分账配置") + @PostMapping("/add") + public ResponseResult add(@RequestBody @Validated({InsertGroup.class}) WalletAllocationConfigAddRequest request) { + return ResponseResult.success(walletAllocationConfigService.add(request)); + } + + @ApiOperation("编辑分账配置") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Validated({UpdateGroup.class}) WalletAllocationConfigAddRequest request) { + return ResponseResult.success(walletAllocationConfigService.update(request)); + } + + @ApiOperation("分页查询分账配置") + @PostMapping("/page") + public ResponseResult> page(@RequestBody WalletAllocationConfigPageRequest request) { + return ResponseResult.success(walletAllocationConfigService.page(request)); + } + + @ApiOperation("招商分部列表") + @GetMapping("/getInvestDivisionRegion") + public ResponseResult> getInvestDivisionRegion() { + return ResponseResult.success(walletAllocationConfigService.getInvestDivisionRegionList()); + } + + @ApiOperation("收款公司列表") + @PostMapping("/companyPage") + public ResponseResult> companyPage(@RequestBody WalletCompanyQueryRequest request) { + return ResponseResult.success(walletAllocationConfigService.companyPage(request)); + } +} + diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemCategoryController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemCategoryController.java new file mode 100644 index 000000000..156ebf66b --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemCategoryController.java @@ -0,0 +1,42 @@ +package com.cool.store.controller.webc; + +import com.cool.store.common.InsertGroup; +import com.cool.store.common.UpdateGroup; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.config.ConfigItemCategoryQueryRequest; +import com.cool.store.request.config.ConfigItemCategoryUpdateRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.config.ConfigItemCategoryService; +import com.cool.store.vo.config.ConfigItemCategoryVO; +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.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Auther zx_szh + * @Date 2026/3/10 09:46 + * @Version 1.0 + */ +@Api(tags = "标准店小程序-配置大类管理") +@RestController +@RequestMapping("/mini/configItemCategory") +@RequiredArgsConstructor +public class MiniConfigItemCategoryController { + + private final ConfigItemCategoryService configItemCategoryService; + + @ApiOperation("分页查询配置大类") + @PostMapping("/queryPage") + public ResponseResult> queryPage(@RequestBody ConfigItemCategoryQueryRequest request) { + return ResponseResult.success(configItemCategoryService.queryPage(request)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemController.java new file mode 100644 index 000000000..3e7013add --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniConfigItemController.java @@ -0,0 +1,35 @@ +package com.cool.store.controller.webc; + +import com.cool.store.request.config.ConfigItemQueryRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.config.ConfigItemService; +import com.cool.store.vo.config.ConfigItemVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Api(tags = "标准店小程序-配置项管理") +@RestController +@RequestMapping("/mini/configItem") +@RequiredArgsConstructor +public class MiniConfigItemController { + + private final ConfigItemService configItemService; + + @ApiOperation("分页查询配置项") + @PostMapping("/queryPage") + public ResponseResult> queryPage(@RequestBody ConfigItemQueryRequest request) { + return ResponseResult.success(configItemService.queryPage(request)); + } + + @ApiOperation("查询大类下的配置项") + @GetMapping("/listByCategoryId") + public ResponseResult> listByCategoryId(@RequestParam("categoryId") Long categoryId) { + return ResponseResult.success(configItemService.listByCategoryId(categoryId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniFranchiseFeeController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniFranchiseFeeController.java index 207c76daa..8579cadad 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniFranchiseFeeController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniFranchiseFeeController.java @@ -4,12 +4,14 @@ import com.cool.store.context.CurrentUserHolder; import com.cool.store.context.LoginUserInfo; import com.cool.store.request.AuditFranchiseFeeRequest; import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.request.FranchisePayTypeUpdateRequest; import com.cool.store.response.FranchiseFeeResponse; import com.cool.store.response.ResponseResult; import com.cool.store.service.FranchiseFeeService; 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.*; import javax.annotation.Resource; @@ -44,4 +46,9 @@ public class MiniFranchiseFeeController { return ResponseResult.success(franchiseFeeService.auditFranchiseFee(request,user)); } + @ApiOperation("修改账单支付方式") + @PostMapping("/updatePayType") + public ResponseResult updatePayType(@RequestBody @Validated FranchisePayTypeUpdateRequest request) { + return ResponseResult.success(franchiseFeeService.updatePayType(request)); + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniPayeeBankConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniPayeeBankConfigController.java new file mode 100644 index 000000000..92c79d364 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniPayeeBankConfigController.java @@ -0,0 +1,40 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.fees.PayeeBankConfigService; +import com.cool.store.vo.fees.PayeeBankConfigVO; +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.NotNull; + +/** + * 线下收款银行配置Controller + */ +@Api(tags = "mini线下收款银行配置") +@RestController +@RequestMapping("/mini/fees/bankConfig") +@RequiredArgsConstructor +@Validated +public class MiniPayeeBankConfigController { + + private final PayeeBankConfigService payeeBankConfigService; + + @ApiOperation("根据门店查询线下收款银行") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "门店id", required = true), + @ApiImplicitParam(name = "payType", value = "付款方式 1线下支付 2平安钱包支付", required = true), + }) + @GetMapping("/getBankConfig") + public ResponseResult getBankConfig(@NotNull(message = "门店id不能为空") Long shopId, + Integer payType) { + return ResponseResult.success(payeeBankConfigService.getByShopId(shopId, payType)); + } +} + + diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopAllocationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopAllocationController.java new file mode 100644 index 000000000..f5f78dd10 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopAllocationController.java @@ -0,0 +1,66 @@ +package com.cool.store.controller.webc; + +import com.cool.store.request.fees.WalletCancelPayRequest; +import com.cool.store.request.fees.WalletPayRequest; +import com.cool.store.request.fees.WalletRepayRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.fees.ShopAllocationInfoService; +import com.cool.store.service.fees.WalletPayInfoService; +import com.cool.store.vo.fees.ShopAllocationSimpleVO; +import com.cool.store.vo.fees.WalletPayInfoVO; +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 javax.validation.constraints.NotNull; +import java.util.List; + +/** + *

+ * mini门店分账信息 前端控制器 + *

+ * + * @author wangff + * @since 2026/1/30 + */ +@RestController +@Api(tags ="mini门店缴费信息") +@RequestMapping({"/mini/fees/shopAllocation"}) +@RequiredArgsConstructor +@Validated +public class MiniShopAllocationController { + private final ShopAllocationInfoService shopAllocationInfoService; + private final WalletPayInfoService walletPayInfoService; + + @ApiOperation("平安钱包缴纳加盟费明细") + @GetMapping("/walletPaymentDetail") + public ResponseResult> walletPaymentDetail(@NotNull(message = "门店id不能为空") Long shopId) { + return ResponseResult.success(shopAllocationInfoService.getSimpleInfo(shopId)); + } + + @ApiOperation("缴费") + @PostMapping("/pay") + public ResponseResult pay(@RequestBody @Validated WalletPayRequest request) { + return ResponseResult.success(walletPayInfoService.pay(request, null)); + } + + @ApiOperation("重新缴费") + @PostMapping("/rePay") + public ResponseResult rePay(@RequestBody @Validated WalletRepayRequest request) { + return ResponseResult.success(walletPayInfoService.rePay(request)); + } + + @ApiOperation("取消支付") + @PostMapping("/cancel") + public ResponseResult cancel(@RequestBody @Validated WalletCancelPayRequest request) { + return ResponseResult.success(walletPayInfoService.cancelPay(request)); + } + + @ApiOperation("缴费信息列表") + @GetMapping("/payInfoList") + public ResponseResult> payInfoList(@NotNull(message = "门店id不能为空") Long shopId) { + return ResponseResult.success(walletPayInfoService.payInfoList(shopId, null)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreOrderController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreOrderController.java new file mode 100644 index 000000000..c832d3641 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreOrderController.java @@ -0,0 +1,116 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.request.order.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.order.MiniStoreOrderService; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.order.MiniStoreOrderDetailVO; +import com.cool.store.vo.order.MiniStoreOrderListVO; +import com.cool.store.vo.order.MiniStoreWishlistDetailVO; +import com.cool.store.vo.order.MiniStoreWishlistListVO; + +import com.github.pagehelper.PageInfo; + +import java.util.List; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@Api(tags = "小程序-店型下单") +@RestController +@RequestMapping("/mini/storeOrder") +@RequiredArgsConstructor +public class MiniStoreOrderController { + + private final MiniStoreOrderService miniStoreOrderService; + + @ApiOperation("创建订单") + @PostMapping("/create") + public ResponseResult create(@RequestBody @Valid MiniStoreOrderCreateRequest request) { + return ResponseResult.success(miniStoreOrderService.createOrder(request,PartnerUserHolder.getUser())); + } + + @ApiOperation("订单详情") + @GetMapping("/detail") + public ResponseResult detail(@RequestParam("orderId") Long orderId) { + return ResponseResult.success(miniStoreOrderService.getDetail(orderId)); + } + + @ApiOperation("获取当前门店草稿订单详情") + @GetMapping("/getCurrentShopDraft") + public ResponseResult getCurrentShopDraft(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(miniStoreOrderService.getCurrentShopDraft(shopId)); + } + + @ApiOperation("订单分页") + @PostMapping("/queryPage") + public ResponseResult> queryPage(@RequestBody MiniStoreOrderQueryRequest request) { + return ResponseResult.success(miniStoreOrderService.queryPage(request)); + } + + @ApiOperation("更新订单") + @PostMapping("/update") + public ResponseResult update(@RequestBody @Valid MiniStoreOrderUpdateRequest request) { + return ResponseResult.success(miniStoreOrderService.updateOrder(request,PartnerUserHolder.getUser())); + } + + @ApiOperation("撤回订单到草稿") + @PostMapping("/withdraw") + public ResponseResult withdraw(@RequestBody MiniStoreOrderRequest request) { + return ResponseResult.success(miniStoreOrderService.withdraw(request.getOrderId())); + } + + @ApiOperation("作废订单") + @PostMapping("/cancel") + public ResponseResult cancel(@RequestBody MiniStoreOrderRequest request) { + return ResponseResult.success(miniStoreOrderService.cancel(request.getOrderId())); + } + + @ApiOperation("门店预定列表") + @PostMapping("/queryPageByLineId") + public ResponseResult> queryPageByLineId(@RequestBody @Valid MiniStoreOrderLineQueryRequest request) { + return ResponseResult.success(miniStoreOrderService.queryPageByLineId(request)); + } + + @ApiOperation("支付订单") + @PostMapping("/pay") + public ResponseResult pay(@RequestBody @Valid MiniStoreOrderPayRequest request) { + return ResponseResult.success(miniStoreOrderService.payOrder(request, PartnerUserHolder.getUser())); + } + + @ApiOperation("获取当前门店最新的订单") + @GetMapping("/getLatestOrderByShopId") + public ResponseResult getLatestOrderByShopId(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(miniStoreOrderService.getLatestOrderByShopId(shopId)); + } + + @ApiOperation("新增/更新心愿单") + @PostMapping("/wishlist/saveOrUpdate") + public ResponseResult saveOrUpdateWishlist(@RequestBody @Valid MiniStoreWishlistSaveRequest request) { + return ResponseResult.success(miniStoreOrderService.saveOrUpdateWishlist(request, PartnerUserHolder.getUser())); + } + + @ApiOperation("删除心愿单") + @PostMapping("/wishlist/deleted") + public ResponseResult deleted(@RequestBody @Valid MiniStoreWishlistDelRequest request) { + return ResponseResult.success(miniStoreOrderService.deleted(request, PartnerUserHolder.getUser())); + } + + @ApiOperation("心愿单详情") + @GetMapping("/wishlist/detail") + public ResponseResult wishlistDetail(@RequestParam("storeTypeId") Long storeTypeId, + @RequestParam("versionNo") String versionNo) { + return ResponseResult.success(miniStoreOrderService.wishlistDetail(storeTypeId,versionNo, PartnerUserHolder.getUser())); + } + + @ApiOperation("心愿单列表") + @GetMapping("/wishlist/list") + public ResponseResult> wishlistList() { + return ResponseResult.success(miniStoreOrderService.wishlistList( PartnerUserHolder.getUser())); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreTypeController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreTypeController.java new file mode 100644 index 000000000..100ad0926 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreTypeController.java @@ -0,0 +1,40 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.store.StoreTypeService; +import com.cool.store.vo.store.StoreTypeOptionVO; +import com.cool.store.vo.store.StoreTypeVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Auther zx_szh + * @Date 2026/1/27 13:44 + * @Version 1.0 + */ +@Api(tags = "小程序-店型") +@RestController +@RequestMapping("/mini/storeType") +@RequiredArgsConstructor +public class MiniStoreTypeController { + + private final StoreTypeService storeTypeService; + @ApiOperation("通过门店类型查询该类型下的店型") + @GetMapping("/listByStoreType") + public ResponseResult> listStoreTypesByStoreType(@RequestParam("storeType") Integer storeType) { + return ResponseResult.success(storeTypeService.listActiveByStoreType(storeType)); + } + + @ApiOperation("查询店型的详细配置选项") + @GetMapping("/config/detail") + public ResponseResult> storeTypeConfigDetail(@RequestParam("storeTypeId") Long storeTypeId) { + return ResponseResult.success(storeTypeService.listStoreTypeOptions(storeTypeId)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreVisitReservationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreVisitReservationController.java new file mode 100644 index 000000000..816b029bb --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniStoreVisitReservationController.java @@ -0,0 +1,55 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.request.visit.StoreVisitReservationCancelRequest; +import com.cool.store.request.visit.StoreVisitReservationCreateRequest; +import com.cool.store.request.visit.StoreVisitReservationMyQueryRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.visit.StoreVisitReservationService; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.visit.StoreVisitReservationVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Api(tags = "小程序-预约到店") +@RestController +@RequestMapping("/mini/storeVisitReservation") +@RequiredArgsConstructor +@Validated +public class MiniStoreVisitReservationController { + + private final StoreVisitReservationService storeVisitReservationService; + + @ApiOperation("新增预约") + @PostMapping("/create") + public ResponseResult create(@RequestBody @Validated StoreVisitReservationCreateRequest request) { + return ResponseResult.success(storeVisitReservationService.create(request)); + } + + @ApiOperation("预约详情") + @GetMapping("/detail") + @ApiImplicitParam(name = "id", value = "预约ID", required = true, dataType = "Long", paramType = "query") + public ResponseResult detail(@NotNull(message = "预约ID不能为空") Long id) { + return ResponseResult.success(storeVisitReservationService.detail(id)); + } + + @ApiOperation("我的预约") + @PostMapping("/myList") + public ResponseResult> myList(@RequestBody @Validated StoreVisitReservationMyQueryRequest request) { + PartnerUserInfoVO user = PartnerUserHolder.getUser(); + return ResponseResult.success(storeVisitReservationService.myReservations(user.getMobile(),request.getStatus())); + } + + @ApiOperation("取消预约") + @PostMapping("/cancel") + public ResponseResult cancel(@RequestBody @Validated StoreVisitReservationCancelRequest request) { + return ResponseResult.success(storeVisitReservationService.cancel(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 2d440997d..0f9d3e05f 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 @@ -3,18 +3,24 @@ package com.cool.store.controller.webc; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; +import com.cool.store.dao.fees.ShopAllocationInfoDAO; +import com.cool.store.dao.fees.WalletPayInfoDAO; 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.entity.fees.ShopAllocationInfoDO; +import com.cool.store.entity.fees.WalletPayInfoDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.IDCardSideEnum; import com.cool.store.enums.WorkflowSubStageEnum; +import com.cool.store.enums.XGJCollectionStatusEnum; import com.cool.store.enums.point.ShopStageEnum; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.wallet.WalletTradeModuleEnum; import com.cool.store.exception.ApiException; import com.cool.store.exception.ServiceException; import com.cool.store.job.XxlJobHandler; @@ -99,6 +105,33 @@ public class TestController { private CloseStoreAccountService closeStoreAccountService; @Resource private CloseStoreRefundService closeStoreRefundService; + @Resource + private WalletPayInfoDAO walletPayInfoDAO; + @Resource + private ShopAllocationInfoDAO shopAllocationInfoDAO; + + @PostMapping("/walletXgjCallBack") + public ResponseResult walletXgjCallBack(Long payInfoId) { + WalletPayInfoDO payInfoDO = walletPayInfoDAO.getById(payInfoId); + ReceiptCallBackRequest receiptRequest = new ReceiptCallBackRequest(); + receiptRequest.setReceiptId(payInfoDO.getPayNo()); + receiptRequest.setClaimStatus(1); + openApiService.changeReceiptStatus(receiptRequest); + List list = walletPayInfoDAO.getByShopId(payInfoDO.getShopId(), WalletTradeModuleEnum.FRANCHISE_PAY.getModule(), null); + List allocationList = shopAllocationInfoDAO.getByShopId(payInfoDO.getShopId()); + BigDecimal totalAmount = allocationList.stream().map(ShopAllocationInfoDO::getAmount).reduce(BigDecimal.valueOf(0), BigDecimal::add); + BigDecimal paidAmount = list.stream().filter(v -> CommonConstants.INDEX_ONE.equals(v.getClaimStatus())).map(WalletPayInfoDO::getPayAmount).reduce(BigDecimal.valueOf(0), BigDecimal::add); + FranchiseFeeCallBackRequest franchiseRequest = new FranchiseFeeCallBackRequest(); + franchiseRequest.setShopId(payInfoDO.getShopId()); + franchiseRequest.setPayableFee(totalAmount); + franchiseRequest.setPaidFees(paidAmount); + franchiseRequest.setRemainingFee(totalAmount.subtract(paidAmount)); + franchiseRequest.setPaymentStatus(franchiseRequest.getRemainingFee().compareTo(BigDecimal.ZERO) == 0 + ? XGJCollectionStatusEnum.COMPLETED.getCode() : franchiseRequest.getPaidFees().compareTo(BigDecimal.ZERO) == 0 + ? XGJCollectionStatusEnum.WAIT_PAY.getCode() : XGJCollectionStatusEnum.PARTIAL_PAYMENT.getCode()); + openApiService.changePaymentStatus(franchiseRequest); + return ResponseResult.success(true); + } @PostMapping("/testXgjCallback") diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index 86b0fa708..68483f4b8 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -10,6 +10,7 @@ platform.datasource.password=CSCErYcXniNYm7bT #redis redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege.redis.rds.aliyuncs.com:6379/0 +spring.redis.url=${redis.host.uri} #pagehelper pagehelper.helper-dialect=mysql diff --git a/coolstore-partner-web/src/main/resources/application-local.properties b/coolstore-partner-web/src/main/resources/application-local.properties index 04227de1e..80cdb3c42 100644 --- a/coolstore-partner-web/src/main/resources/application-local.properties +++ b/coolstore-partner-web/src/main/resources/application-local.properties @@ -10,6 +10,7 @@ platform.datasource.password=CSCErYcXniNYm7bT #redis redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege-open.redis.rds.aliyuncs.com:6379/0 +spring.redis.url=${redis.host.uri} #pagehelper pagehelper.helper-dialect=mysql @@ -164,4 +165,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. + +liePin.appId=1921816018922205184 +liePin.secretKey=dns6x4f1p14a36u4t22xvteppmz07ir2 +liePin.aesSecretKey=_nkULTpkBHHZeWgQ +liePin.baseUrl=https://open-xhopen-qa53.qa.xunhou.cn +liePin.tenantId=12833 +liePin.mobile=13345565081 \ 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 c08956131..a58dce769 100644 --- a/coolstore-partner-web/src/main/resources/application-online.properties +++ b/coolstore-partner-web/src/main/resources/application-online.properties @@ -9,6 +9,7 @@ platform.datasource.password=CSCErYcXniNYm7bT #redis redis.host.uri=http://userInfo:Cx111111@store-coolcollege.redis.rds.aliyuncs.com:6379/0 +spring.redis.url=${redis.host.uri} #pagehelper pagehelper.helper-dialect=mysql diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index 11ba13f83..1f275db4a 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -10,6 +10,7 @@ platform.datasource.password=CSCErYcXniNYm7bT #redis redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege-open.redis.rds.aliyuncs.com:6379/0 +spring.redis.url=${redis.host.uri} #pagehelper pagehelper.helper-dialect=mysql