From 19c82817babb6756978e9791c3d4acf316c9dee2 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Mon, 9 Jun 2025 12:34:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .air.debug.toml | 54 - .air.toml | 54 - .cursorrules | 22 +- .vscode/launch.json | 10 +- .vscode/tasks.json | 2 +- app/main/api/Dockerfile | 6 +- app/main/api/desc/admin/admin_agent.api | 385 ++ app/main/api/desc/admin/admin_feature.api | 108 + app/main/api/desc/admin/admin_product.api | 175 + app/main/api/desc/admin/admin_query.api | 135 + app/main/api/desc/admin/admin_user.api | 131 + app/main/api/desc/admin/auth.api | 34 + app/main/api/desc/admin/menu.api | 149 + app/main/api/desc/admin/notification.api | 127 + app/main/api/desc/admin/order.api | 169 + app/main/api/desc/admin/platform_user.api | 124 + app/main/api/desc/admin/promotion.api | 183 + app/main/api/desc/admin/role.api | 124 + app/main/api/desc/{ => front}/agent.api | 0 app/main/api/desc/{ => front}/app.api | 0 app/main/api/desc/{ => front}/pay.api | 0 app/main/api/desc/{ => front}/product.api | 0 app/main/api/desc/{ => front}/query.api | 0 app/main/api/desc/{ => front}/user.api | 0 app/main/api/desc/main.api | 26 +- app/main/api/etc/main.dev.yaml | 6 + app/main/api/etc/main.yaml | 6 + app/main/api/internal/config/config.go | 41 +- ...ngetagentcommissiondeductionlisthandler.go | 29 + .../admingetagentcommissionlisthandler.go | 29 + .../admingetagentlinklisthandler.go | 29 + .../admin_agent/admingetagentlisthandler.go | 29 + ...dmingetagentmembershipconfiglisthandler.go | 29 + ...agentmembershiprechargeorderlisthandler.go | 29 + ...mingetagentplatformdeductionlisthandler.go | 29 + ...dmingetagentproductionconfiglisthandler.go | 29 + .../admingetagentrewardlisthandler.go | 29 + .../admingetagentwithdrawallisthandler.go | 29 + ...adminupdateagentmembershipconfighandler.go | 29 + ...adminupdateagentproductionconfighandler.go | 29 + .../handler/admin_auth/adminloginhandler.go | 29 + .../admincreatefeaturehandler.go | 29 + .../admindeletefeaturehandler.go | 29 + .../admingetfeaturedetailhandler.go | 29 + .../admingetfeaturelisthandler.go | 29 + .../adminupdatefeaturehandler.go | 29 + .../handler/admin_menu/createmenuhandler.go | 29 + .../handler/admin_menu/deletemenuhandler.go | 29 + .../handler/admin_menu/getmenuallhandler.go | 29 + .../admin_menu/getmenudetailhandler.go | 29 + .../handler/admin_menu/getmenulisthandler.go | 29 + .../handler/admin_menu/updatemenuhandler.go | 29 + .../admincreatenotificationhandler.go | 29 + .../admindeletenotificationhandler.go | 29 + .../admingetnotificationdetailhandler.go | 29 + .../admingetnotificationlisthandler.go | 29 + .../adminupdatenotificationhandler.go | 29 + .../admin_order/admincreateorderhandler.go | 29 + .../admin_order/admindeleteorderhandler.go | 29 + .../admin_order/admingetorderdetailhandler.go | 29 + .../admin_order/admingetorderlisthandler.go | 29 + .../admin_order/adminrefundorderhandler.go | 29 + .../admin_order/adminupdateorderhandler.go | 29 + .../admincreateplatformuserhandler.go | 29 + .../admindeleteplatformuserhandler.go | 29 + .../admingetplatformuserdetailhandler.go | 29 + .../admingetplatformuserlisthandler.go | 29 + .../adminupdateplatformuserhandler.go | 29 + .../admincreateproducthandler.go | 29 + .../admindeleteproducthandler.go | 29 + .../admingetproductdetailhandler.go | 29 + .../admingetproductfeaturelisthandler.go | 29 + .../admingetproductlisthandler.go | 29 + .../adminupdateproductfeatureshandler.go | 29 + .../adminupdateproducthandler.go | 29 + .../createpromotionlinkhandler.go | 29 + .../deletepromotionlinkhandler.go | 30 + .../getpromotionlinkdetailhandler.go | 29 + .../getpromotionlinklisthandler.go | 29 + .../getpromotionstatshistoryhandler.go | 29 + .../getpromotionstatstotalhandler.go | 29 + .../admin_promotion/recordlinkclickhandler.go | 29 + .../updatepromotionlinkhandler.go | 30 + .../admingetquerycleanupconfiglisthandler.go | 29 + .../admingetquerycleanupdetaillisthandler.go | 29 + .../admingetquerycleanuploglisthandler.go | 29 + .../admingetquerydetailbyorderidhandler.go | 29 + .../adminupdatequerycleanupconfighandler.go | 29 + .../handler/admin_role/createrolehandler.go | 29 + .../handler/admin_role/deleterolehandler.go | 29 + .../admin_role/getroledetailhandler.go | 29 + .../handler/admin_role/getrolelisthandler.go | 29 + .../handler/admin_role/updaterolehandler.go | 29 + .../admin_user/admincreateuserhandler.go | 29 + .../admin_user/admindeleteuserhandler.go | 29 + .../admin_user/admingetuserdetailhandler.go | 29 + .../admin_user/admingetuserlisthandler.go | 29 + .../admin_user/adminupdateuserhandler.go | 29 + .../admin_user/adminuserinfohandler.go | 29 + .../agent/activateagentmembershiphandler.go | 6 +- .../handler/agent/agentrealnamehandler.go | 9 +- .../handler/agent/agentwithdrawalhandler.go | 6 +- .../handler/agent/applyforagenthandler.go | 6 +- .../handler/agent/generatinglinkhandler.go | 6 +- .../agent/getagentauditstatushandler.go | 4 +- .../agent/getagentcommissionhandler.go | 6 +- .../handler/agent/getagentinfohandler.go | 4 +- .../getagentmembershipproductconfighandler.go | 6 +- .../agent/getagentproductconfighandler.go | 4 +- .../agent/getagentrevenueinfohandler.go | 6 +- .../handler/agent/getagentrewardshandler.go | 6 +- ...entsubordinatecontributiondetailhandler.go | 6 +- .../agent/getagentsubordinatelisthandler.go | 6 +- .../agent/getagentwithdrawalhandler.go | 6 +- .../handler/agent/getlinkdatahandler.go | 6 +- .../saveagentmembershipuserconfighandler.go | 6 +- .../handler/app/getappversionhandler.go | 4 +- .../handler/app/healthcheckhandler.go | 4 +- .../auth/getfaceverifyresulthandler.go | 9 +- .../handler/auth/initfaceverifyhandler.go | 9 +- .../auth/rejectauthorizationhandler.go | 9 +- .../internal/handler/auth/sendsmshandler.go | 6 +- .../handler/auth/smsauthorizationhandler.go | 9 +- .../notification/getnotificationshandler.go | 4 +- .../handler/pay/alipaycallbackhandler.go | 4 +- .../handler/pay/iapcallbackhandler.go | 6 +- .../handler/pay/paymentcheckhandler.go | 6 +- .../internal/handler/pay/paymenthandler.go | 6 +- .../handler/pay/querypaymentcheckhandler.go | 9 +- .../handler/pay/wechatpaycallbackhandler.go | 4 +- .../pay/wechatpayrefundcallbackhandler.go | 4 +- .../product/getproductappbyenhandler.go | 6 +- .../handler/product/getproductbyenhandler.go | 6 +- .../handler/product/getproductbyidhandler.go | 6 +- .../handler/query/confirmquerystatehandler.go | 9 +- .../query/querydetailbyorderidhandler.go | 6 +- .../query/querydetailbyordernohandler.go | 6 +- .../handler/query/queryexamplehandler.go | 6 +- .../query/querygeneratesharelinkhandler.go | 9 +- .../handler/query/querylisthandler.go | 6 +- .../query/queryprovisionalorderhandler.go | 6 +- .../handler/query/queryrecheckhandler.go | 9 +- .../handler/query/queryretryhandler.go | 6 +- .../handler/query/queryserviceagenthandler.go | 6 +- .../handler/query/queryserviceapphandler.go | 6 +- .../handler/query/queryservicehandler.go | 6 +- .../handler/query/querysharedetailhandler.go | 9 +- .../handler/query/querysingletesthandler.go | 6 +- .../handler/query/updatequerydatahandler.go | 6 +- app/main/api/internal/handler/routes.go | 514 +- .../user/agentmobilecodeloginhandler.go | 6 +- .../handler/user/bindmobilehandler.go | 6 +- .../internal/handler/user/cancelouthandler.go | 4 +- .../internal/handler/user/detailhandler.go | 4 +- .../internal/handler/user/gettokenhandler.go | 4 +- .../handler/user/mobilecodeloginhandler.go | 6 +- .../handler/user/mobileloginhandler.go | 6 +- .../internal/handler/user/registerhandler.go | 6 +- .../internal/handler/user/wxh5authhandler.go | 6 +- .../handler/user/wxminiauthhandler.go | 6 +- ...mingetagentcommissiondeductionlistlogic.go | 84 + .../admingetagentcommissionlistlogic.go | 84 + .../admin_agent/admingetagentlinklistlogic.go | 86 + .../admin_agent/admingetagentlistlogic.go | 115 + .../admingetagentmembershipconfiglistlogic.go | 51 + ...etagentmembershiprechargeorderlistlogic.go | 64 + ...admingetagentplatformdeductionlistlogic.go | 57 + .../admingetagentproductionconfiglistlogic.go | 74 + .../admingetagentrewardlistlogic.go | 58 + .../admingetagentwithdrawallistlogic.go | 59 + .../adminupdateagentmembershipconfiglogic.go | 96 + .../adminupdateagentproductionconfiglogic.go | 42 + .../logic/admin_auth/adminloginlogic.go | 85 + .../admin_feature/admincreatefeaturelogic.go | 46 + .../admin_feature/admindeletefeaturelogic.go | 45 + .../admingetfeaturedetaillogic.go | 46 + .../admin_feature/admingetfeaturelistlogic.go | 66 + .../admin_feature/adminupdatefeaturelogic.go | 30 + .../logic/admin_menu/createmenulogic.go | 97 + .../logic/admin_menu/deletemenulogic.go | 30 + .../logic/admin_menu/getmenualllogic.go | 250 + .../logic/admin_menu/getmenudetaillogic.go | 30 + .../logic/admin_menu/getmenulistlogic.go | 109 + .../logic/admin_menu/updatemenulogic.go | 96 + .../admincreatenotificationlogic.go | 50 + .../admindeletenotificationlogic.go | 38 + .../admingetnotificationdetaillogic.go | 53 + .../admingetnotificationlistlogic.go | 82 + .../adminupdatenotificationlogic.go | 66 + .../admin_order/admincreateorderlogic.go | 99 + .../admin_order/admindeleteorderlogic.go | 63 + .../admin_order/admingetorderdetaillogic.go | 104 + .../admin_order/admingetorderlistlogic.go | 229 + .../admin_order/adminrefundorderlogic.go | 92 + .../admin_order/adminupdateorderlogic.go | 113 + .../admincreateplatformuserlogic.go | 57 + .../admindeleteplatformuserlogic.go | 43 + .../admingetplatformuserdetaillogic.go | 53 + .../admingetplatformuserlistlogic.go | 88 + .../adminupdateplatformuserlogic.go | 64 + .../admin_product/admincreateproductlogic.go | 50 + .../admin_product/admindeleteproductlogic.go | 44 + .../admingetproductdetaillogic.go | 49 + .../admingetproductfeaturelistlogic.go | 119 + .../admin_product/admingetproductlistlogic.go | 69 + .../adminupdateproductfeatureslogic.go | 159 + .../admin_product/adminupdateproductlogic.go | 65 + .../createpromotionlinklogic.go | 136 + .../deletepromotionlinklogic.go | 91 + .../getpromotionlinkdetaillogic.go | 65 + .../getpromotionlinklistlogic.go | 104 + .../getpromotionstatshistorylogic.go | 83 + .../getpromotionstatstotallogic.go | 166 + .../admin_promotion/recordlinkclicklogic.go | 57 + .../updatepromotionlinklogic.go | 57 + .../admingetquerycleanupconfiglistlogic.go | 62 + .../admingetquerycleanupdetaillistlogic.go | 126 + .../admingetquerycleanuploglistlogic.go | 88 + .../admingetquerydetailbyorderidlogic.go | 189 + .../adminupdatequerycleanupconfiglogic.go | 63 + .../logic/admin_role/createrolelogic.go | 83 + .../logic/admin_role/deleterolelogic.go | 84 + .../logic/admin_role/getroledetaillogic.go | 91 + .../logic/admin_role/getrolelistlogic.go | 148 + .../logic/admin_role/updaterolelogic.go | 148 + .../logic/admin_user/admincreateuserlogic.go | 88 + .../logic/admin_user/admindeleteuserlogic.go | 68 + .../admin_user/admingetuserdetaillogic.go | 88 + .../logic/admin_user/admingetuserlistlogic.go | 149 + .../logic/admin_user/adminupdateuserlogic.go | 141 + .../logic/admin_user/adminuserinfologic.go | 67 + .../agent/activateagentmembershiplogic.go | 6 +- .../logic/agent/agentrealnamelogic.go | 8 +- .../logic/agent/agentwithdrawallogic.go | 6 +- .../logic/agent/applyforagentlogic.go | 12 +- .../logic/agent/generatinglinklogic.go | 6 +- .../logic/agent/getagentauditstatuslogic.go | 4 +- .../logic/agent/getagentcommissionlogic.go | 4 +- .../internal/logic/agent/getagentinfologic.go | 6 +- .../getagentmembershipproductconfiglogic.go | 6 +- .../logic/agent/getagentproductconfiglogic.go | 6 +- .../logic/agent/getagentrevenueinfologic.go | 6 +- .../logic/agent/getagentrewardslogic.go | 4 +- ...agentsubordinatecontributiondetaillogic.go | 4 +- .../agent/getagentsubordinatelistlogic.go | 6 +- .../logic/agent/getagentwithdrawallogic.go | 4 +- .../internal/logic/agent/getlinkdatalogic.go | 4 +- .../saveagentmembershipuserconfiglogic.go | 6 +- .../internal/logic/app/getappversionlogic.go | 4 +- .../internal/logic/app/healthchecklogic.go | 4 +- .../logic/auth/getfaceverifyresultlogic.go | 6 +- .../logic/auth/initfaceverifylogic.go | 6 +- .../logic/auth/rejectauthorizationlogic.go | 4 +- .../api/internal/logic/auth/sendsmslogic.go | 4 +- .../logic/auth/smsauthorizationlogic.go | 8 +- .../notification/getnotificationslogic.go | 4 +- .../internal/logic/pay/alipaycallbacklogic.go | 6 +- .../internal/logic/pay/iapcallbacklogic.go | 4 +- .../internal/logic/pay/paymentchecklogic.go | 4 +- .../api/internal/logic/pay/paymentlogic.go | 6 +- .../logic/pay/querypaymentchecklogic.go | 4 +- .../logic/pay/wechatpaycallbacklogic.go | 8 +- .../logic/pay/wechatpayrefundcallbacklogic.go | 2 +- .../logic/product/getproductappbyenlogic.go | 6 +- .../logic/product/getproductbyenlogic.go | 6 +- .../logic/product/getproductbyidlogic.go | 4 +- .../logic/query/confirmquerystatelogic.go | 6 +- .../logic/query/querydetailbyorderidlogic.go | 6 +- .../logic/query/querydetailbyordernologic.go | 6 +- .../logic/query/queryexamplelogic copy.go | 4 +- .../internal/logic/query/queryexamplelogic.go | 4 +- .../query/querygeneratesharelinklogic.go | 6 +- .../internal/logic/query/querylistlogic.go | 6 +- .../logic/query/queryprovisionalorderlogic.go | 4 +- .../internal/logic/query/queryrechecklogic.go | 6 +- .../internal/logic/query/queryretrylogic.go | 4 +- .../logic/query/queryserviceagentlogic.go | 4 +- .../logic/query/queryserviceapplogic.go | 4 +- .../internal/logic/query/queryservicelogic.go | 43 +- .../logic/query/querysharedetaillogic.go | 6 +- .../logic/query/querysingletestlogic.go | 4 +- .../logic/query/updatequerydatalogic.go | 6 +- .../logic/user/agentmobilecodeloginlogic.go | 12 +- .../internal/logic/user/bindmobilelogic.go | 6 +- .../api/internal/logic/user/canceloutlogic.go | 4 +- .../api/internal/logic/user/detaillogic.go | 6 +- .../api/internal/logic/user/gettokenlogic.go | 4 +- .../logic/user/mobilecodeloginlogic.go | 12 +- .../internal/logic/user/mobileloginlogic.go | 6 +- .../api/internal/logic/user/registerlogic.go | 12 +- .../api/internal/logic/user/wxh5authlogic.go | 8 +- .../internal/logic/user/wxminiauthlogic.go | 4 +- .../middleware/authinterceptormiddleware.go | 2 +- app/main/api/internal/queue/cleanQueryData.go | 2 +- .../internal/queue/delayed_task_handler.go | 99 + .../api/internal/queue/paySuccessNotify.go | 6 +- app/main/api/internal/queue/routes.go | 5 +- .../service/adminPromotionLinkStatsService.go | 210 + app/main/api/internal/service/agentService.go | 35 +- .../api/internal/service/alipayService.go | 2 +- .../api/internal/service/apirequestService.go | 4 +- .../api/internal/service/applepayService.go | 2 +- app/main/api/internal/service/asynqService.go | 45 +- app/main/api/internal/service/dictService.go | 47 + app/main/api/internal/service/userService.go | 2 +- .../internal/service/verificationService.go | 2 +- .../api/internal/service/wechatpayService.go | 4 +- .../api/internal/service/westdexService.go | 2 +- .../api/internal/service/yushanService.go | 2 +- app/main/api/internal/svc/servicecontext.go | 495 +- app/main/api/internal/types/payload.go | 14 + app/main/api/internal/types/query.go | 7 + app/main/api/internal/types/taskname.go | 1 + app/main/api/internal/types/types.go | 1182 ++++ app/main/api/main.go | 10 +- app/main/model/adminApiModel.go | 27 + app/main/model/adminApiModel_gen.go | 411 ++ app/main/model/adminDictDataModel.go | 27 + app/main/model/adminDictDataModel_gen.go | 437 ++ app/main/model/adminDictTypeModel.go | 27 + app/main/model/adminDictTypeModel_gen.go | 409 ++ app/main/model/adminMenuModel.go | 27 + app/main/model/adminMenuModel_gen.go | 414 ++ app/main/model/adminPromotionLinkModel.go | 27 + app/main/model/adminPromotionLinkModel_gen.go | 408 ++ .../adminPromotionLinkStatsHistoryModel.go | 27 + ...adminPromotionLinkStatsHistoryModel_gen.go | 412 ++ .../adminPromotionLinkStatsTotalModel.go | 27 + .../adminPromotionLinkStatsTotalModel_gen.go | 411 ++ app/main/model/adminPromotionOrderModel.go | 27 + .../model/adminPromotionOrderModel_gen.go | 409 ++ app/main/model/adminRoleApiModel.go | 27 + app/main/model/adminRoleApiModel_gen.go | 407 ++ app/main/model/adminRoleMenuModel.go | 27 + app/main/model/adminRoleMenuModel_gen.go | 407 ++ app/main/model/adminRoleModel.go | 27 + app/main/model/adminRoleModel_gen.go | 410 ++ app/main/model/adminUserModel.go | 27 + app/main/model/adminUserModel_gen.go | 435 ++ app/main/model/adminUserRoleModel.go | 27 + app/main/model/adminUserRoleModel_gen.go | 407 ++ app/main/model/agentClosureModel.go | 1 - .../agentMembershipRechargeOrderModel_gen.go | 16 +- app/main/model/authorizationModel_gen.go | 4 +- .../model/globalNotificationsModel_gen.go | 8 +- app/main/model/orderRefundModel.go | 27 + app/main/model/orderRefundModel_gen.go | 467 ++ app/main/model/queryCleanupConfigModel.go | 27 + app/main/model/queryCleanupConfigModel_gen.go | 409 ++ app/main/model/queryCleanupDetailModel.go | 27 + app/main/model/queryCleanupDetailModel_gen.go | 373 ++ app/main/model/queryCleanupLogModel.go | 27 + app/main/model/queryCleanupLogModel_gen.go | 372 ++ app/main/model/queryModel.go | 1 - app/main/model/vars.go | 8 +- app/user/cmd/api/.air.toml | 21 - deploy/script/README.md | 163 - deploy/script/codegen.js | 444 -- deploy/script/config.json | 46 - deploy/script/gen_api.js | 108 - deploy/script/gen_models.js | 172 - deploy/script/gen_models.ps1 | 136 +- deploy/script/package.json | 26 - deploy/sql/user.sql | 2 +- docker-compose.yml | 165 +- gen_api.ps1 | 2 +- go.mod | 44 +- go.sum | 107 +- pkg/lzkit/crypto/README.md | 2 +- pkg/lzkit/crypto/bcrypt.go | 28 + pkg/lzkit/md5/README.md | 4 +- pkg/lzkit/md5/example_test.go | 6 +- t.jsonc | 191 - t2.jsonc | 4495 -------------- t3.jsonc | 5210 ----------------- 375 files changed, 20628 insertions(+), 11903 deletions(-) delete mode 100644 .air.debug.toml delete mode 100644 .air.toml create mode 100644 app/main/api/desc/admin/admin_agent.api create mode 100644 app/main/api/desc/admin/admin_feature.api create mode 100644 app/main/api/desc/admin/admin_product.api create mode 100644 app/main/api/desc/admin/admin_query.api create mode 100644 app/main/api/desc/admin/admin_user.api create mode 100644 app/main/api/desc/admin/auth.api create mode 100644 app/main/api/desc/admin/menu.api create mode 100644 app/main/api/desc/admin/notification.api create mode 100644 app/main/api/desc/admin/order.api create mode 100644 app/main/api/desc/admin/platform_user.api create mode 100644 app/main/api/desc/admin/promotion.api create mode 100644 app/main/api/desc/admin/role.api rename app/main/api/desc/{ => front}/agent.api (100%) rename app/main/api/desc/{ => front}/app.api (100%) rename app/main/api/desc/{ => front}/pay.api (100%) rename app/main/api/desc/{ => front}/product.api (100%) rename app/main/api/desc/{ => front}/query.api (100%) rename app/main/api/desc/{ => front}/user.api (100%) create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentcommissiondeductionlisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentcommissionlisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentlinklisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentlisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentmembershipconfiglisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentmembershiprechargeorderlisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentplatformdeductionlisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentproductionconfiglisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentrewardlisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/admingetagentwithdrawallisthandler.go create mode 100644 app/main/api/internal/handler/admin_agent/adminupdateagentmembershipconfighandler.go create mode 100644 app/main/api/internal/handler/admin_agent/adminupdateagentproductionconfighandler.go create mode 100644 app/main/api/internal/handler/admin_auth/adminloginhandler.go create mode 100644 app/main/api/internal/handler/admin_feature/admincreatefeaturehandler.go create mode 100644 app/main/api/internal/handler/admin_feature/admindeletefeaturehandler.go create mode 100644 app/main/api/internal/handler/admin_feature/admingetfeaturedetailhandler.go create mode 100644 app/main/api/internal/handler/admin_feature/admingetfeaturelisthandler.go create mode 100644 app/main/api/internal/handler/admin_feature/adminupdatefeaturehandler.go create mode 100644 app/main/api/internal/handler/admin_menu/createmenuhandler.go create mode 100644 app/main/api/internal/handler/admin_menu/deletemenuhandler.go create mode 100644 app/main/api/internal/handler/admin_menu/getmenuallhandler.go create mode 100644 app/main/api/internal/handler/admin_menu/getmenudetailhandler.go create mode 100644 app/main/api/internal/handler/admin_menu/getmenulisthandler.go create mode 100644 app/main/api/internal/handler/admin_menu/updatemenuhandler.go create mode 100644 app/main/api/internal/handler/admin_notification/admincreatenotificationhandler.go create mode 100644 app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go create mode 100644 app/main/api/internal/handler/admin_notification/admingetnotificationdetailhandler.go create mode 100644 app/main/api/internal/handler/admin_notification/admingetnotificationlisthandler.go create mode 100644 app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go create mode 100644 app/main/api/internal/handler/admin_order/admincreateorderhandler.go create mode 100644 app/main/api/internal/handler/admin_order/admindeleteorderhandler.go create mode 100644 app/main/api/internal/handler/admin_order/admingetorderdetailhandler.go create mode 100644 app/main/api/internal/handler/admin_order/admingetorderlisthandler.go create mode 100644 app/main/api/internal/handler/admin_order/adminrefundorderhandler.go create mode 100644 app/main/api/internal/handler/admin_order/adminupdateorderhandler.go create mode 100644 app/main/api/internal/handler/admin_platform_user/admincreateplatformuserhandler.go create mode 100644 app/main/api/internal/handler/admin_platform_user/admindeleteplatformuserhandler.go create mode 100644 app/main/api/internal/handler/admin_platform_user/admingetplatformuserdetailhandler.go create mode 100644 app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go create mode 100644 app/main/api/internal/handler/admin_platform_user/adminupdateplatformuserhandler.go create mode 100644 app/main/api/internal/handler/admin_product/admincreateproducthandler.go create mode 100644 app/main/api/internal/handler/admin_product/admindeleteproducthandler.go create mode 100644 app/main/api/internal/handler/admin_product/admingetproductdetailhandler.go create mode 100644 app/main/api/internal/handler/admin_product/admingetproductfeaturelisthandler.go create mode 100644 app/main/api/internal/handler/admin_product/admingetproductlisthandler.go create mode 100644 app/main/api/internal/handler/admin_product/adminupdateproductfeatureshandler.go create mode 100644 app/main/api/internal/handler/admin_product/adminupdateproducthandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/createpromotionlinkhandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/deletepromotionlinkhandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/getpromotionlinkdetailhandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/getpromotionlinklisthandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/getpromotionstatshistoryhandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/getpromotionstatstotalhandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/recordlinkclickhandler.go create mode 100644 app/main/api/internal/handler/admin_promotion/updatepromotionlinkhandler.go create mode 100644 app/main/api/internal/handler/admin_query/admingetquerycleanupconfiglisthandler.go create mode 100644 app/main/api/internal/handler/admin_query/admingetquerycleanupdetaillisthandler.go create mode 100644 app/main/api/internal/handler/admin_query/admingetquerycleanuploglisthandler.go create mode 100644 app/main/api/internal/handler/admin_query/admingetquerydetailbyorderidhandler.go create mode 100644 app/main/api/internal/handler/admin_query/adminupdatequerycleanupconfighandler.go create mode 100644 app/main/api/internal/handler/admin_role/createrolehandler.go create mode 100644 app/main/api/internal/handler/admin_role/deleterolehandler.go create mode 100644 app/main/api/internal/handler/admin_role/getroledetailhandler.go create mode 100644 app/main/api/internal/handler/admin_role/getrolelisthandler.go create mode 100644 app/main/api/internal/handler/admin_role/updaterolehandler.go create mode 100644 app/main/api/internal/handler/admin_user/admincreateuserhandler.go create mode 100644 app/main/api/internal/handler/admin_user/admindeleteuserhandler.go create mode 100644 app/main/api/internal/handler/admin_user/admingetuserdetailhandler.go create mode 100644 app/main/api/internal/handler/admin_user/admingetuserlisthandler.go create mode 100644 app/main/api/internal/handler/admin_user/adminupdateuserhandler.go create mode 100644 app/main/api/internal/handler/admin_user/adminuserinfohandler.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentcommissiondeductionlistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentcommissionlistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentlinklistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentlistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentmembershipconfiglistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentmembershiprechargeorderlistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentplatformdeductionlistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentproductionconfiglistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentrewardlistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go create mode 100644 app/main/api/internal/logic/admin_agent/adminupdateagentmembershipconfiglogic.go create mode 100644 app/main/api/internal/logic/admin_agent/adminupdateagentproductionconfiglogic.go create mode 100644 app/main/api/internal/logic/admin_auth/adminloginlogic.go create mode 100644 app/main/api/internal/logic/admin_feature/admincreatefeaturelogic.go create mode 100644 app/main/api/internal/logic/admin_feature/admindeletefeaturelogic.go create mode 100644 app/main/api/internal/logic/admin_feature/admingetfeaturedetaillogic.go create mode 100644 app/main/api/internal/logic/admin_feature/admingetfeaturelistlogic.go create mode 100644 app/main/api/internal/logic/admin_feature/adminupdatefeaturelogic.go create mode 100644 app/main/api/internal/logic/admin_menu/createmenulogic.go create mode 100644 app/main/api/internal/logic/admin_menu/deletemenulogic.go create mode 100644 app/main/api/internal/logic/admin_menu/getmenualllogic.go create mode 100644 app/main/api/internal/logic/admin_menu/getmenudetaillogic.go create mode 100644 app/main/api/internal/logic/admin_menu/getmenulistlogic.go create mode 100644 app/main/api/internal/logic/admin_menu/updatemenulogic.go create mode 100644 app/main/api/internal/logic/admin_notification/admincreatenotificationlogic.go create mode 100644 app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go create mode 100644 app/main/api/internal/logic/admin_notification/admingetnotificationdetaillogic.go create mode 100644 app/main/api/internal/logic/admin_notification/admingetnotificationlistlogic.go create mode 100644 app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go create mode 100644 app/main/api/internal/logic/admin_order/admincreateorderlogic.go create mode 100644 app/main/api/internal/logic/admin_order/admindeleteorderlogic.go create mode 100644 app/main/api/internal/logic/admin_order/admingetorderdetaillogic.go create mode 100644 app/main/api/internal/logic/admin_order/admingetorderlistlogic.go create mode 100644 app/main/api/internal/logic/admin_order/adminrefundorderlogic.go create mode 100644 app/main/api/internal/logic/admin_order/adminupdateorderlogic.go create mode 100644 app/main/api/internal/logic/admin_platform_user/admincreateplatformuserlogic.go create mode 100644 app/main/api/internal/logic/admin_platform_user/admindeleteplatformuserlogic.go create mode 100644 app/main/api/internal/logic/admin_platform_user/admingetplatformuserdetaillogic.go create mode 100644 app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go create mode 100644 app/main/api/internal/logic/admin_platform_user/adminupdateplatformuserlogic.go create mode 100644 app/main/api/internal/logic/admin_product/admincreateproductlogic.go create mode 100644 app/main/api/internal/logic/admin_product/admindeleteproductlogic.go create mode 100644 app/main/api/internal/logic/admin_product/admingetproductdetaillogic.go create mode 100644 app/main/api/internal/logic/admin_product/admingetproductfeaturelistlogic.go create mode 100644 app/main/api/internal/logic/admin_product/admingetproductlistlogic.go create mode 100644 app/main/api/internal/logic/admin_product/adminupdateproductfeatureslogic.go create mode 100644 app/main/api/internal/logic/admin_product/adminupdateproductlogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/createpromotionlinklogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/deletepromotionlinklogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/getpromotionlinkdetaillogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/getpromotionlinklistlogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/getpromotionstatshistorylogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/getpromotionstatstotallogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/recordlinkclicklogic.go create mode 100644 app/main/api/internal/logic/admin_promotion/updatepromotionlinklogic.go create mode 100644 app/main/api/internal/logic/admin_query/admingetquerycleanupconfiglistlogic.go create mode 100644 app/main/api/internal/logic/admin_query/admingetquerycleanupdetaillistlogic.go create mode 100644 app/main/api/internal/logic/admin_query/admingetquerycleanuploglistlogic.go create mode 100644 app/main/api/internal/logic/admin_query/admingetquerydetailbyorderidlogic.go create mode 100644 app/main/api/internal/logic/admin_query/adminupdatequerycleanupconfiglogic.go create mode 100644 app/main/api/internal/logic/admin_role/createrolelogic.go create mode 100644 app/main/api/internal/logic/admin_role/deleterolelogic.go create mode 100644 app/main/api/internal/logic/admin_role/getroledetaillogic.go create mode 100644 app/main/api/internal/logic/admin_role/getrolelistlogic.go create mode 100644 app/main/api/internal/logic/admin_role/updaterolelogic.go create mode 100644 app/main/api/internal/logic/admin_user/admincreateuserlogic.go create mode 100644 app/main/api/internal/logic/admin_user/admindeleteuserlogic.go create mode 100644 app/main/api/internal/logic/admin_user/admingetuserdetaillogic.go create mode 100644 app/main/api/internal/logic/admin_user/admingetuserlistlogic.go create mode 100644 app/main/api/internal/logic/admin_user/adminupdateuserlogic.go create mode 100644 app/main/api/internal/logic/admin_user/adminuserinfologic.go create mode 100644 app/main/api/internal/queue/delayed_task_handler.go create mode 100644 app/main/api/internal/service/adminPromotionLinkStatsService.go create mode 100644 app/main/api/internal/service/dictService.go create mode 100644 app/main/model/adminApiModel.go create mode 100644 app/main/model/adminApiModel_gen.go create mode 100644 app/main/model/adminDictDataModel.go create mode 100644 app/main/model/adminDictDataModel_gen.go create mode 100644 app/main/model/adminDictTypeModel.go create mode 100644 app/main/model/adminDictTypeModel_gen.go create mode 100644 app/main/model/adminMenuModel.go create mode 100644 app/main/model/adminMenuModel_gen.go create mode 100644 app/main/model/adminPromotionLinkModel.go create mode 100644 app/main/model/adminPromotionLinkModel_gen.go create mode 100644 app/main/model/adminPromotionLinkStatsHistoryModel.go create mode 100644 app/main/model/adminPromotionLinkStatsHistoryModel_gen.go create mode 100644 app/main/model/adminPromotionLinkStatsTotalModel.go create mode 100644 app/main/model/adminPromotionLinkStatsTotalModel_gen.go create mode 100644 app/main/model/adminPromotionOrderModel.go create mode 100644 app/main/model/adminPromotionOrderModel_gen.go create mode 100644 app/main/model/adminRoleApiModel.go create mode 100644 app/main/model/adminRoleApiModel_gen.go create mode 100644 app/main/model/adminRoleMenuModel.go create mode 100644 app/main/model/adminRoleMenuModel_gen.go create mode 100644 app/main/model/adminRoleModel.go create mode 100644 app/main/model/adminRoleModel_gen.go create mode 100644 app/main/model/adminUserModel.go create mode 100644 app/main/model/adminUserModel_gen.go create mode 100644 app/main/model/adminUserRoleModel.go create mode 100644 app/main/model/adminUserRoleModel_gen.go create mode 100644 app/main/model/orderRefundModel.go create mode 100644 app/main/model/orderRefundModel_gen.go create mode 100644 app/main/model/queryCleanupConfigModel.go create mode 100644 app/main/model/queryCleanupConfigModel_gen.go create mode 100644 app/main/model/queryCleanupDetailModel.go create mode 100644 app/main/model/queryCleanupDetailModel_gen.go create mode 100644 app/main/model/queryCleanupLogModel.go create mode 100644 app/main/model/queryCleanupLogModel_gen.go delete mode 100644 app/user/cmd/api/.air.toml delete mode 100644 deploy/script/README.md delete mode 100644 deploy/script/codegen.js delete mode 100644 deploy/script/config.json delete mode 100644 deploy/script/gen_api.js delete mode 100644 deploy/script/gen_models.js delete mode 100644 deploy/script/package.json create mode 100644 pkg/lzkit/crypto/bcrypt.go delete mode 100644 t.jsonc delete mode 100644 t2.jsonc delete mode 100644 t3.jsonc diff --git a/.air.debug.toml b/.air.debug.toml deleted file mode 100644 index aa17f0d..0000000 --- a/.air.debug.toml +++ /dev/null @@ -1,54 +0,0 @@ -# Air配置文件 -root = "." -tmp_dir = "tmp" - -[build] -# 入口文件 -cmd = "go build -gcflags=-N -gcflags=-l -o ./tmp/main.exe ./app/user/cmd/api/main.go" -# 二进制文件 -bin = "./tmp/main.exe" -# 运行时的参数 -full_bin = "dlv exec --accept-multiclient --headless --listen=:2345 --api-version=2 ./tmp/main.exe -- $env:ENV='development'" - -# 监听以下扩展名的文件变化./ -include_ext = ["go", "tpl", "tmpl", "html", "yaml", "yml"] -# 忽略的目录 -exclude_dir = ["assets", "tmp", "vendor", "testdata", ".git", ".idea", "data"] -# 构建延迟 -delay = 1000 -# 停止延迟 -kill_delay = "2s" -# 日志文件 -log = "build-errors.log" -# 出错时停止 -stop_on_error = true -# 发送中断信号 -send_interrupt = true - - - -[color] -main = "magenta" -watcher = "cyan" -build = "yellow" -runner = "green" - -[log] -# 启用时间戳 -time = true -# 启用详细日志 -main_only = false -silent = false - -[misc] -# 清理屏幕 -clean_on_exit = false - -[proxy] -app_port = 0 -enabled = false -proxy_port = 0 - -[screen] -clear_on_rebuild = false -keep_scroll = true \ No newline at end of file diff --git a/.air.toml b/.air.toml deleted file mode 100644 index 083a149..0000000 --- a/.air.toml +++ /dev/null @@ -1,54 +0,0 @@ -# Air配置文件 -root = "." -tmp_dir = "tmp" - -[build] -# 入口文件 -cmd = "go build -o ./tmp/main.exe ./app/user/cmd/api/main.go" -# 二进制文件 -bin = "$env:ENV = 'development' && ./tmp/main.exe" -# 运行时的参数 -full_bin = "./tmp/main.exe -- $env:ENV='development'" - -# 监听以下扩展名的文件变化./ -include_ext = ["go", "tpl", "tmpl", "html", "yaml", "yml"] -# 忽略的目录 -exclude_dir = ["assets", "tmp", "vendor", "testdata", ".git", ".idea", "data"] -# 构建延迟 -delay = 1000 -# 停止延迟 -kill_delay = "2s" -# 日志文件 -log = "build-errors.log" -# 出错时停止 -stop_on_error = true -# 发送中断信号 -send_interrupt = true - - - -[color] -main = "magenta" -watcher = "cyan" -build = "yellow" -runner = "green" - -[log] -# 启用时间戳 -time = true -# 启用详细日志 -main_only = false -silent = false - -[misc] -# 清理屏幕 -clean_on_exit = false - -[proxy] -app_port = 0 -enabled = false -proxy_port = 0 - -[screen] -clear_on_rebuild = false -keep_scroll = true \ No newline at end of file diff --git a/.cursorrules b/.cursorrules index 87e9bb4..4e874a3 100644 --- a/.cursorrules +++ b/.cursorrules @@ -53,7 +53,7 @@ qnc-server/ # 项目根目录 ``` 目录作用说明: -1. app/user/cmd/api/:API服务目录 +1. app/main/api/:API服务目录 - desc/:API接口定义,包含各模块的API文件 - main.api:主API文件,导入所有模块API并定义路由 - user/user.api:用户模块的请求响应参数定义 @@ -69,7 +69,7 @@ qnc-server/ # 项目根目录 - svc/:服务上下文,管理服务依赖(如DB、Cache等) - types/:请求响应的结构体定义,由goctl根据API文件生成(不允许自己修改) -2. app/user/model/:数据库模型层 +2. app/main/model/:数据库模型层 - userModel.go:用户表模型定义及CRUD方法 - userModel_gen.go:goctl工具生成的基础数据库操作代码(不允许自己修改) - vars.go:定义数据库相关变量和常量 @@ -103,12 +103,12 @@ qnc-server/ # 项目根目录 使用goctl生成API服务的步骤: 1. 首先确保API定义目录存在: ```bash - mkdir -p app/user/cmd/api/desc/user + mkdir -p app/main/api/desc/user ``` 2. API文件组织结构(单体服务模式): ``` - app/user/cmd/api/desc/ + app/main/api/desc/ ├── user/ │ └── user.api # 用户模块的请求响应参数定义 ├── order/ @@ -116,7 +116,7 @@ qnc-server/ # 项目根目录 └── main.api # 主API文件,集中管理所有模块的API定义 ``` -3. 在app/user/cmd/api/desc/main.api中集中管理所有API: +3. 在app/main/api/desc/main.api中集中管理所有API: ``` syntax = "v1" @@ -143,7 +143,7 @@ qnc-server/ # 项目根目录 } ``` -4. 各模块在下一层定义类型,例如在app/user/cmd/api/desc/user/user.api中只定义用户模块的接口的类型: +4. 各模块在下一层定义类型,例如在app/main/api/desc/user/user.api中只定义用户模块的接口的类型: ``` type ( LoginReq { @@ -160,13 +160,13 @@ qnc-server/ # 项目根目录 5. 使用goctl生成API代码(始终使用main.api): ```bash - goctl api go -api app/user/cmd/api/desc/main.api -dir app/user/cmd/api --home ./deploy/template + goctl api go -api app/main/api/desc/main.api -dir app/main/api --home ./deploy/template ``` 注意:无论修改哪个模块的API文件,都需要执行main.api来生成代码,因为这是单体服务模式。 6. goctl生成的文件和目录结构: ``` - app/user/cmd/api/ + app/main/api/ ├── desc/ # API接口定义目录(已存在) ├── etc/ # 配置文件目录 │ └── main.yaml # 服务配置文件 @@ -189,9 +189,9 @@ qnc-server/ # 项目根目录 ``` 7. 生成代码后,才能够实现具体的业务逻辑,例如: - - user.api中的`mobileLogin`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/user/mobile_login_logic.go` - - user.api中的`wxMiniAuth`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/user/wx_mini_auth_logic.go` - - query.api中的`queryService`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/query/query_service_logic.go` + - user.api中的`mobileLogin`接口生成的逻辑文件在`app/main/api/internal/logic/user/mobile_login_logic.go` + - user.api中的`wxMiniAuth`接口生成的逻辑文件在`app/main/api/internal/logic/user/wx_mini_auth_logic.go` + - query.api中的`queryService`接口生成的逻辑文件在`app/main/api/internal/logic/query/query_service_logic.go` 生成的逻辑文件中需要实现`Logic`结构体的`XXX`方法(方法名与接口名对应),这是业务逻辑的核心部分。 diff --git a/.vscode/launch.json b/.vscode/launch.json index bab84fb..33343cd 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,20 +1,12 @@ { "version": "0.2.0", "configurations": [ - { - "name": "Launch Package", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${fileDirname}", - "args": [] - }, { "name": "调试API服务", "type": "go", "request": "launch", "mode": "auto", - "program": "${workspaceFolder}/app/user/cmd/api/main.go", + "program": "${workspaceFolder}/app/main/api/main.go", "args": ["-f", "etc/main.dev.yaml"], "env": { "ENV": "development" diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5a7e86a..5232afd 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "Run Go-Zero API (无调试)", "type": "shell", - "command": "go run ${workspaceFolder}/app/user/cmd/api/main.go -f ${workspaceFolder}/app/user/cmd/api/etc/main.dev.yaml", + "command": "go run ${workspaceFolder}/app/main/api/main.go -f ${workspaceFolder}/app/main/api/etc/main.dev.yaml", "group": { "kind": "build", "isDefault": true diff --git a/app/main/api/Dockerfile b/app/main/api/Dockerfile index 5cf7de0..60739f0 100644 --- a/app/main/api/Dockerfile +++ b/app/main/api/Dockerfile @@ -14,8 +14,8 @@ ADD go.mod . ADD go.sum . RUN go mod download COPY . . -COPY app/user/cmd/api/etc /app/etc -RUN go build -ldflags="-s -w" -o /app/user app/user/cmd/api/main.go +COPY app/main/api/etc /app/etc +RUN go build -ldflags="-s -w" -o /app/main app/main//api/main.go FROM scratch @@ -25,7 +25,7 @@ COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/S ENV TZ Asia/Shanghai WORKDIR /app -COPY --from=builder /app/user /app/user +COPY --from=builder /app/main /app/user COPY --from=builder /app/etc /app/etc CMD ["./user", "-f", "etc/main.yaml"] diff --git a/app/main/api/desc/admin/admin_agent.api b/app/main/api/desc/admin/admin_agent.api new file mode 100644 index 0000000..516c03f --- /dev/null +++ b/app/main/api/desc/admin/admin_agent.api @@ -0,0 +1,385 @@ +syntax = "v1" + +info ( + title: "后台代理管理服务" + desc: "后台代理相关接口" + author: "team" + version: "v1" +) + +// 代理管理接口 +@server( + prefix: /api/v1/admin/agent + group: admin_agent +) +service main { + // 代理分页查询 + @handler AdminGetAgentList + get /list (AdminGetAgentListReq) returns (AdminGetAgentListResp) + + // 代理推广链接分页查询 + @handler AdminGetAgentLinkList + get /agent-link/list (AdminGetAgentLinkListReq) returns (AdminGetAgentLinkListResp) + + // 代理佣金分页查询 + @handler AdminGetAgentCommissionList + get /agent-commission/list (AdminGetAgentCommissionListReq) returns (AdminGetAgentCommissionListResp) + + // 代理奖励分页查询 + @handler AdminGetAgentRewardList + get /agent-reward/list (AdminGetAgentRewardListReq) returns (AdminGetAgentRewardListResp) + + // 代理提现分页查询 + @handler AdminGetAgentWithdrawalList + get /agent-withdrawal/list (AdminGetAgentWithdrawalListReq) returns (AdminGetAgentWithdrawalListResp) + + // 代理上级抽佣分页查询 + @handler AdminGetAgentCommissionDeductionList + get /agent-commission-deduction/list (AdminGetAgentCommissionDeductionListReq) returns (AdminGetAgentCommissionDeductionListResp) + + // 平台抽佣分页查询 + @handler AdminGetAgentPlatformDeductionList + get /agent-platform-deduction/list (AdminGetAgentPlatformDeductionListReq) returns (AdminGetAgentPlatformDeductionListResp) + + // 代理产品配置分页查询 + @handler AdminGetAgentProductionConfigList + get /agent-production-config/list (AdminGetAgentProductionConfigListReq) returns (AdminGetAgentProductionConfigListResp) + + // 代理产品配置编辑 + @handler AdminUpdateAgentProductionConfig + post /agent-production-config/update (AdminUpdateAgentProductionConfigReq) returns (AdminUpdateAgentProductionConfigResp) + + // 代理会员充值订单分页查询 + @handler AdminGetAgentMembershipRechargeOrderList + get /agent-membership-recharge-order/list (AdminGetAgentMembershipRechargeOrderListReq) returns (AdminGetAgentMembershipRechargeOrderListResp) + + // 代理会员配置分页查询 + @handler AdminGetAgentMembershipConfigList + get /agent-membership-config/list (AdminGetAgentMembershipConfigListReq) returns (AdminGetAgentMembershipConfigListResp) + + // 代理会员配置编辑 + @handler AdminUpdateAgentMembershipConfig + post /agent-membership-config/update (AdminUpdateAgentMembershipConfigReq) returns (AdminUpdateAgentMembershipConfigResp) +} + +type ( + // 代理分页查询请求 + AdminGetAgentListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + Mobile *string `form:"mobile,optional"` // 手机号(可选) + Region *string `form:"region,optional"` // 区域(可选) + ParentAgentId *int64 `form:"parent_agent_id,optional"` // 上级代理ID(可选) + } + + // 代理列表项 + AgentListItem { + Id int64 `json:"id"` // 主键 + UserId int64 `json:"user_id"` // 用户ID + ParentAgentId int64 `json:"parent_agent_id"` // 上级代理ID + LevelName string `json:"level_name"` // 等级名称 + Region string `json:"region"` // 区域 + Mobile string `json:"mobile"` // 手机号 + MembershipExpiryTime string `json:"membership_expiry_time"` // 会员到期时间 + Balance float64 `json:"balance"` // 钱包余额 + TotalEarnings float64 `json:"total_earnings"` // 累计收益 + FrozenBalance float64 `json:"frozen_balance"` // 冻结余额 + WithdrawnAmount float64 `json:"withdrawn_amount"` // 提现总额 + CreateTime string `json:"create_time"` // 创建时间 + IsRealNameVerified bool `json:"is_real_name_verified"` // 是否已实名认证 + RealName string `json:"real_name"` // 实名姓名 + IdCard string `json:"id_card"` // 身份证号 + RealNameStatus string `json:"real_name_status"` // 实名状态(pending/approved/rejected) + } + + // 代理分页查询响应 + AdminGetAgentListResp { + Total int64 `json:"total"` // 总数 + Items []AgentListItem `json:"items"` // 列表数据 + } + + // 代理推广链接分页查询请求 + AdminGetAgentLinkListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + ProductName *string `form:"product_name,optional"` // 产品名(可选) + LinkIdentifier *string `form:"link_identifier,optional"` // 推广码(可选) + } + + // 代理推广链接列表项 + AgentLinkListItem { + AgentId int64 `json:"agent_id"` // 代理ID + ProductName string `json:"product_name"` // 产品名 + Price float64 `json:"price"` // 价格 + LinkIdentifier string `json:"link_identifier"` // 推广码 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理推广链接分页查询响应 + AdminGetAgentLinkListResp { + Total int64 `json:"total"` // 总数 + Items []AgentLinkListItem `json:"items"` // 列表数据 + } + + // 代理佣金分页查询请求 + AdminGetAgentCommissionListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + ProductName *string `form:"product_name,optional"` // 产品名(可选) + Status *int64 `form:"status,optional"` // 状态(可选) + } + + // 代理佣金列表项 + AgentCommissionListItem { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + OrderId int64 `json:"order_id"` // 订单ID + Amount float64 `json:"amount"` // 金额 + ProductName string `json:"product_name"` // 产品名 + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理佣金分页查询响应 + AdminGetAgentCommissionListResp { + Total int64 `json:"total"` // 总数 + Items []AgentCommissionListItem `json:"items"` // 列表数据 + } + + // 代理奖励分页查询请求 + AdminGetAgentRewardListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + RelationAgentId *int64 `form:"relation_agent_id,optional"` // 关联代理ID(可选) + Type *string `form:"type,optional"` // 奖励类型(可选) + } + + // 代理奖励列表项 + AgentRewardListItem { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + RelationAgentId int64 `json:"relation_agent_id"` // 关联代理ID + Amount float64 `json:"amount"` // 金额 + Type string `json:"type"` // 奖励类型 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理奖励分页查询响应 + AdminGetAgentRewardListResp { + Total int64 `json:"total"` // 总数 + Items []AgentRewardListItem `json:"items"` // 列表数据 + } + + // 代理提现分页查询请求 + AdminGetAgentWithdrawalListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + Status *int64 `form:"status,optional"` // 状态(可选) + WithdrawNo *string `form:"withdraw_no,optional"` // 提现单号(可选) + } + + // 代理提现列表项 + AgentWithdrawalListItem { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + WithdrawNo string `json:"withdraw_no"` // 提现单号 + Amount float64 `json:"amount"` // 金额 + Status int64 `json:"status"` // 状态 + PayeeAccount string `json:"payee_account"` // 收款账户 + Remark string `json:"remark"` // 备注 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理提现分页查询响应 + AdminGetAgentWithdrawalListResp { + Total int64 `json:"total"` // 总数 + Items []AgentWithdrawalListItem `json:"items"` // 列表数据 + } + + // 代理抽佣分页查询请求 + AdminGetAgentCommissionDeductionListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + ProductName *string `form:"product_name,optional"` // 产品名(可选) + Type *string `form:"type,optional"` // 类型(cost/pricing,可选) + Status *int64 `form:"status,optional"` // 状态(可选) + } + + // 代理抽佣列表项 + AgentCommissionDeductionListItem { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + DeductedAgentId int64 `json:"deducted_agent_id"` // 被扣代理ID + Amount float64 `json:"amount"` // 金额 + ProductName string `json:"product_name"` // 产品名 + Type string `json:"type"` // 类型(cost/pricing) + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理抽佣分页查询响应 + AdminGetAgentCommissionDeductionListResp { + Total int64 `json:"total"` // 总数 + Items []AgentCommissionDeductionListItem `json:"items"` // 列表数据 + } + + // 平台抽佣分页查询请求 + AdminGetAgentPlatformDeductionListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + Type *string `form:"type,optional"` // 类型(cost/pricing,可选) + Status *int64 `form:"status,optional"` // 状态(可选) + } + + // 平台抽佣列表项 + AgentPlatformDeductionListItem { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + Amount float64 `json:"amount"` // 金额 + Type string `json:"type"` // 类型(cost/pricing) + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 平台抽佣分页查询响应 + AdminGetAgentPlatformDeductionListResp { + Total int64 `json:"total"` // 总数 + Items []AgentPlatformDeductionListItem `json:"items"` // 列表数据 + } + + // 代理产品配置分页查询请求 + AdminGetAgentProductionConfigListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + ProductName *string `form:"product_name,optional"` // 产品名(可选) + Id *int64 `form:"id,optional"` // 配置ID(可选) + } + + // 代理产品配置分页查询响应 + AdminGetAgentProductionConfigListResp { + Total int64 `json:"total"` // 总数 + Items []AgentProductionConfigItem `json:"items"` // 列表数据 + } + + // 代理产品配置列表项 + AgentProductionConfigItem { + Id int64 `json:"id"` // 主键 + ProductName string `json:"product_name"` // 产品名 + CostPrice float64 `json:"cost_price"` // 成本 + PriceRangeMin float64 `json:"price_range_min"` // 最低定价 + PriceRangeMax float64 `json:"price_range_max"` // 最高定价 + PricingStandard float64 `json:"pricing_standard"` // 定价标准 + OverpricingRatio float64 `json:"overpricing_ratio"` // 超价比例 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理产品配置编辑请求 + AdminUpdateAgentProductionConfigReq { + Id int64 `json:"id"` // 主键 + CostPrice float64 `json:"cost_price"` // 成本 + PriceRangeMin float64 `json:"price_range_min"` // 最低定价 + PriceRangeMax float64 `json:"price_range_max"` // 最高定价 + PricingStandard float64 `json:"pricing_standard"` // 定价标准 + OverpricingRatio float64 `json:"overpricing_ratio"` // 超价比例 + } + + // 代理产品配置编辑响应 + AdminUpdateAgentProductionConfigResp { + Success bool `json:"success"` // 是否成功 + } + + // 代理会员充值订单分页查询请求 + AdminGetAgentMembershipRechargeOrderListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + UserId *int64 `form:"user_id,optional"` // 用户ID(可选) + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + OrderNo *string `form:"order_no,optional"` // 订单号(可选) + PlatformOrderId *string `form:"platform_order_id,optional"` // 平台订单号(可选) + Status *string `form:"status,optional"` // 状态(可选) + PaymentMethod *string `form:"payment_method,optional"` // 支付方式(可选) + } + + // 代理会员充值订单列表项 + AgentMembershipRechargeOrderListItem { + Id int64 `json:"id"` // 主键 + UserId int64 `json:"user_id"` // 用户ID + AgentId int64 `json:"agent_id"` // 代理ID + LevelName string `json:"level_name"` // 等级名称 + Amount float64 `json:"amount"` // 金额 + PaymentMethod string `json:"payment_method"` // 支付方式 + OrderNo string `json:"order_no"` // 订单号 + PlatformOrderId string `json:"platform_order_id"` // 平台订单号 + Status string `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理会员充值订单分页查询响应 + AdminGetAgentMembershipRechargeOrderListResp { + Total int64 `json:"total"` // 总数 + Items []AgentMembershipRechargeOrderListItem `json:"items"` // 列表数据 + } + + // 代理会员配置分页查询请求 + AdminGetAgentMembershipConfigListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + LevelName *string `form:"level_name,optional"` // 会员级别名称(可选) + } + + // 代理会员配置分页查询响应 + AdminGetAgentMembershipConfigListResp { + Total int64 `json:"total"` // 总数 + Items []AgentMembershipConfigListItem `json:"items"` // 列表数据 + } + + // 代理会员配置列表项 + AgentMembershipConfigListItem { + Id int64 `json:"id"` // 主键 + LevelName string `json:"level_name"` // 会员级别名称 + Price *float64 `json:"price"` // 会员年费 + ReportCommission *float64 `json:"report_commission"` // 直推报告收益 + LowerActivityReward *float64 `json:"lower_activity_reward"` // 下级活跃奖励金额 + NewActivityReward *float64 `json:"new_activity_reward"` // 新增活跃奖励金额 + LowerStandardCount *int64 `json:"lower_standard_count"` // 活跃下级达标个数 + NewLowerStandardCount *int64 `json:"new_lower_standard_count"` // 新增活跃下级达标个数 + LowerWithdrawRewardRatio *float64 `json:"lower_withdraw_reward_ratio"` // 下级提现奖励比例 + LowerConvertVipReward *float64 `json:"lower_convert_vip_reward"` // 下级转化VIP奖励 + LowerConvertSvipReward *float64 `json:"lower_convert_svip_reward"` // 下级转化SVIP奖励 + ExemptionAmount *float64 `json:"exemption_amount"` // 免责金额 + PriceIncreaseMax *float64 `json:"price_increase_max"` // 提价最高金额 + PriceRatio *float64 `json:"price_ratio"` // 提价区间收取比例 + PriceIncreaseAmount *float64 `json:"price_increase_amount"` // 在原本成本上加价的金额 + CreateTime string `json:"create_time"` // 创建时间 + } + + // 代理会员配置编辑请求 + AdminUpdateAgentMembershipConfigReq { + Id int64 `json:"id"` // 主键 + LevelName string `json:"level_name"` // 会员级别名称 + Price float64 `json:"price"` // 会员年费 + ReportCommission float64 `json:"report_commission"` // 直推报告收益 + LowerActivityReward *float64 `json:"lower_activity_reward,optional,omitempty"` // 下级活跃奖励金额 + NewActivityReward *float64 `json:"new_activity_reward,optional,omitempty"` // 新增活跃奖励金额 + LowerStandardCount *int64 `json:"lower_standard_count,optional,omitempty"` // 活跃下级达标个数 + NewLowerStandardCount *int64 `json:"new_lower_standard_count,optional,omitempty"` // 新增活跃下级达标个数 + LowerWithdrawRewardRatio *float64 `json:"lower_withdraw_reward_ratio,optional,omitempty"` // 下级提现奖励比例 + LowerConvertVipReward *float64 `json:"lower_convert_vip_reward,optional,omitempty"` // 下级转化VIP奖励 + LowerConvertSvipReward *float64 `json:"lower_convert_svip_reward,optional,omitempty"` // 下级转化SVIP奖励 + ExemptionAmount *float64 `json:"exemption_amount,optional,omitempty"` // 免责金额 + PriceIncreaseMax *float64 `json:"price_increase_max,optional,omitempty"` // 提价最高金额 + PriceRatio *float64 `json:"price_ratio,optional,omitempty"` // 提价区间收取比例 + PriceIncreaseAmount *float64 `json:"price_increase_amount,optional,omitempty"` // 在原本成本上加价的金额 + } + + // 代理会员配置编辑响应 + AdminUpdateAgentMembershipConfigResp { + Success bool `json:"success"` // 是否成功 + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/admin_feature.api b/app/main/api/desc/admin/admin_feature.api new file mode 100644 index 0000000..3249c38 --- /dev/null +++ b/app/main/api/desc/admin/admin_feature.api @@ -0,0 +1,108 @@ +syntax = "v1" + +info ( + title: "后台功能管理服务" + desc: "后台功能管理相关接口" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +// 功能管理接口 +@server( + prefix: /api/v1/admin/feature + group: admin_feature +) +service main { + // 创建功能 + @handler AdminCreateFeature + post /create (AdminCreateFeatureReq) returns (AdminCreateFeatureResp) + + // 更新功能 + @handler AdminUpdateFeature + put /update/:id (AdminUpdateFeatureReq) returns (AdminUpdateFeatureResp) + + // 删除功能 + @handler AdminDeleteFeature + delete /delete/:id (AdminDeleteFeatureReq) returns (AdminDeleteFeatureResp) + + // 获取功能列表 + @handler AdminGetFeatureList + get /list (AdminGetFeatureListReq) returns (AdminGetFeatureListResp) + + // 获取功能详情 + @handler AdminGetFeatureDetail + get /detail/:id (AdminGetFeatureDetailReq) returns (AdminGetFeatureDetailResp) +} + +type ( + // 创建功能请求 + AdminCreateFeatureReq { + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 描述 + } + + // 创建功能响应 + AdminCreateFeatureResp { + Id int64 `json:"id"` // 功能ID + } + + // 更新功能请求 + AdminUpdateFeatureReq { + Id int64 `path:"id"` // 功能ID + ApiId *string `json:"api_id,optional"` // API标识 + Name *string `json:"name,optional"` // 描述 + } + + // 更新功能响应 + AdminUpdateFeatureResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除功能请求 + AdminDeleteFeatureReq { + Id int64 `path:"id"` // 功能ID + } + + // 删除功能响应 + AdminDeleteFeatureResp { + Success bool `json:"success"` // 是否成功 + } + + // 获取功能列表请求 + AdminGetFeatureListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + ApiId *string `form:"api_id,optional"` // API标识 + Name *string `form:"name,optional"` // 描述 + } + + // 功能列表项 + FeatureListItem { + Id int64 `json:"id"` // 功能ID + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 描述 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 获取功能列表响应 + AdminGetFeatureListResp { + Total int64 `json:"total"` // 总数 + Items []FeatureListItem `json:"items"` // 列表数据 + } + + // 获取功能详情请求 + AdminGetFeatureDetailReq { + Id int64 `path:"id"` // 功能ID + } + + // 获取功能详情响应 + AdminGetFeatureDetailResp { + Id int64 `json:"id"` // 功能ID + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 描述 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/admin_product.api b/app/main/api/desc/admin/admin_product.api new file mode 100644 index 0000000..d748ad2 --- /dev/null +++ b/app/main/api/desc/admin/admin_product.api @@ -0,0 +1,175 @@ +syntax = "v1" + +info ( + title: "后台产品管理服务" + desc: "后台产品管理相关接口" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +// 产品管理接口 +@server( + prefix: /api/v1/admin/product + group: admin_product +) +service main { + // 创建产品 + @handler AdminCreateProduct + post /create (AdminCreateProductReq) returns (AdminCreateProductResp) + + // 更新产品 + @handler AdminUpdateProduct + put /update/:id (AdminUpdateProductReq) returns (AdminUpdateProductResp) + + // 删除产品 + @handler AdminDeleteProduct + delete /delete/:id (AdminDeleteProductReq) returns (AdminDeleteProductResp) + + // 获取产品列表 + @handler AdminGetProductList + get /list (AdminGetProductListReq) returns (AdminGetProductListResp) + + // 获取产品详情 + @handler AdminGetProductDetail + get /detail/:id (AdminGetProductDetailReq) returns (AdminGetProductDetailResp) + + // 获取产品功能列表 + @handler AdminGetProductFeatureList + get /feature/list/:product_id (AdminGetProductFeatureListReq) returns ([]AdminGetProductFeatureListResp) + + // 更新产品功能关联(批量) + @handler AdminUpdateProductFeatures + put /feature/update/:product_id (AdminUpdateProductFeaturesReq) returns (AdminUpdateProductFeaturesResp) +} + +type ( + // 创建产品请求 + AdminCreateProductReq { + ProductName string `json:"product_name"` // 服务名 + ProductEn string `json:"product_en"` // 英文名 + Description string `json:"description"` // 描述 + Notes string `json:"notes,optional"` // 备注 + CostPrice float64 `json:"cost_price"` // 成本 + SellPrice float64 `json:"sell_price"` // 售价 + } + + // 创建产品响应 + AdminCreateProductResp { + Id int64 `json:"id"` // 产品ID + } + + // 更新产品请求 + AdminUpdateProductReq { + Id int64 `path:"id"` // 产品ID + ProductName *string `json:"product_name,optional"` // 服务名 + ProductEn *string `json:"product_en,optional"` // 英文名 + Description *string `json:"description,optional"` // 描述 + Notes *string `json:"notes,optional"` // 备注 + CostPrice *float64 `json:"cost_price,optional"` // 成本 + SellPrice *float64 `json:"sell_price,optional"` // 售价 + } + + // 更新产品响应 + AdminUpdateProductResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除产品请求 + AdminDeleteProductReq { + Id int64 `path:"id"` // 产品ID + } + + // 删除产品响应 + AdminDeleteProductResp { + Success bool `json:"success"` // 是否成功 + } + + // 获取产品列表请求 + AdminGetProductListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + ProductName *string `form:"product_name,optional"` // 服务名 + ProductEn *string `form:"product_en,optional"` // 英文名 + } + + // 产品列表项 + ProductListItem { + Id int64 `json:"id"` // 产品ID + ProductName string `json:"product_name"` // 服务名 + ProductEn string `json:"product_en"` // 英文名 + Description string `json:"description"` // 描述 + Notes string `json:"notes"` // 备注 + CostPrice float64 `json:"cost_price"` // 成本 + SellPrice float64 `json:"sell_price"` // 售价 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 获取产品列表响应 + AdminGetProductListResp { + Total int64 `json:"total"` // 总数 + Items []ProductListItem `json:"items"` // 列表数据 + } + + // 获取产品详情请求 + AdminGetProductDetailReq { + Id int64 `path:"id"` // 产品ID + } + + // 获取产品详情响应 + AdminGetProductDetailResp { + Id int64 `json:"id"` // 产品ID + ProductName string `json:"product_name"` // 服务名 + ProductEn string `json:"product_en"` // 英文名 + Description string `json:"description"` // 描述 + Notes string `json:"notes"` // 备注 + CostPrice float64 `json:"cost_price"` // 成本 + SellPrice float64 `json:"sell_price"` // 售价 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 获取产品功能列表请求 + AdminGetProductFeatureListReq { + ProductId int64 `path:"product_id"` // 产品ID + } + + // 获取产品功能列表响应Item + AdminGetProductFeatureListResp { + Id int64 `json:"id"` // 关联ID + ProductId int64 `json:"product_id"` // 产品ID + FeatureId int64 `json:"feature_id"` // 功能ID + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 功能描述 + Sort int64 `json:"sort"` // 排序 + Enable int64 `json:"enable"` // 是否启用 + IsImportant int64 `json:"is_important"` // 是否重要 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // // 获取产品功能列表响应 + // AdminGetProductFeatureListResp { + // Items []ProductFeatureListItem `json:"items"` // 列表数据 + // } + + // 产品功能关联项 + ProductFeatureItem { + FeatureId int64 `json:"feature_id"` // 功能ID + Sort int64 `json:"sort"` // 排序 + Enable int64 `json:"enable"` // 是否启用 + IsImportant int64 `json:"is_important"` // 是否重要 + } + + // 更新产品功能关联请求(批量) + AdminUpdateProductFeaturesReq { + ProductId int64 `path:"product_id"` // 产品ID + Features []ProductFeatureItem `json:"features"` // 功能列表 + } + + // 更新产品功能关联响应 + AdminUpdateProductFeaturesResp { + Success bool `json:"success"` // 是否成功 + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/admin_query.api b/app/main/api/desc/admin/admin_query.api new file mode 100644 index 0000000..a2e06d0 --- /dev/null +++ b/app/main/api/desc/admin/admin_query.api @@ -0,0 +1,135 @@ +syntax = "v1" + +info ( + title: "查询服务" + desc: "查询服务" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +@server ( + prefix: api/v1/admin/query + group: admin_query + jwt: JwtAuth +) +service main { + @doc "获取查询详情" + @handler AdminGetQueryDetailByOrderId + get /detail/:order_id (AdminGetQueryDetailByOrderIdReq) returns (AdminGetQueryDetailByOrderIdResp) + + @doc "获取清理日志列表" + @handler AdminGetQueryCleanupLogList + get /cleanup/logs (AdminGetQueryCleanupLogListReq) returns (AdminGetQueryCleanupLogListResp) + + @doc "获取清理详情列表" + @handler AdminGetQueryCleanupDetailList + get /cleanup/details/:log_id (AdminGetQueryCleanupDetailListReq) returns (AdminGetQueryCleanupDetailListResp) + + @doc "获取清理配置列表" + @handler AdminGetQueryCleanupConfigList + get /cleanup/configs (AdminGetQueryCleanupConfigListReq) returns (AdminGetQueryCleanupConfigListResp) + + @doc "更新清理配置" + @handler AdminUpdateQueryCleanupConfig + put /cleanup/config (AdminUpdateQueryCleanupConfigReq) returns (AdminUpdateQueryCleanupConfigResp) +} + +type AdminGetQueryDetailByOrderIdReq { + OrderId int64 `path:"order_id"` +} + +type AdminGetQueryDetailByOrderIdResp { + Id int64 `json:"id"` // 主键ID + OrderId int64 `json:"order_id"` // 订单ID + UserId int64 `json:"user_id"` // 用户ID + ProductName string `json:"product_name"` // 产品ID + QueryParams map[string]interface{} `json:"query_params"` + QueryData []AdminQueryItem `json:"query_data"` + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + QueryState string `json:"query_state"` // 查询状态 +} + +type AdminQueryItem { + Feature interface{} `json:"feature"` + Data interface{} `json:"data"` // 这里可以是 map 或 具体的 struct +} + +// 清理日志相关请求响应定义 +type AdminGetQueryCleanupLogListReq { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"page_size,default=20"` // 每页数量 + Status int64 `form:"status,optional"` // 状态:1-成功,2-失败 + StartTime string `form:"start_time,optional"` // 开始时间 + EndTime string `form:"end_time,optional"` // 结束时间 +} + +type AdminGetQueryCleanupLogListResp { + Total int64 `json:"total"` // 总数 + Items []QueryCleanupLogItem `json:"items"` // 列表 +} + +type QueryCleanupLogItem { + Id int64 `json:"id"` // 主键ID + CleanupTime string `json:"cleanup_time"` // 清理时间 + CleanupBefore string `json:"cleanup_before"` // 清理截止时间 + Status int64 `json:"status"` // 状态:1-成功,2-失败 + AffectedRows int64 `json:"affected_rows"` // 影响行数 + ErrorMsg string `json:"error_msg"` // 错误信息 + Remark string `json:"remark"` // 备注 + CreateTime string `json:"create_time"` // 创建时间 +} + +// 清理详情相关请求响应定义 +type AdminGetQueryCleanupDetailListReq { + LogId int64 `path:"log_id"` // 清理日志ID + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"page_size,default=20"` // 每页数量 +} + +type AdminGetQueryCleanupDetailListResp { + Total int64 `json:"total"` // 总数 + Items []QueryCleanupDetailItem `json:"items"` // 列表 +} + +type QueryCleanupDetailItem { + Id int64 `json:"id"` // 主键ID + CleanupLogId int64 `json:"cleanup_log_id"` // 清理日志ID + QueryId int64 `json:"query_id"` // 查询ID + OrderId int64 `json:"order_id"` // 订单ID + UserId int64 `json:"user_id"` // 用户ID + ProductName string `json:"product_name"` // 产品名称 + QueryState string `json:"query_state"` // 查询状态 + CreateTimeOld string `json:"create_time_old"` // 原创建时间 + CreateTime string `json:"create_time"` // 创建时间 +} + +// 清理配置相关请求响应定义 +type AdminGetQueryCleanupConfigListReq { + Status int64 `form:"status,optional"` // 状态:1-启用,0-禁用 +} + +type AdminGetQueryCleanupConfigListResp { + Items []QueryCleanupConfigItem `json:"items"` // 配置列表 +} + +type QueryCleanupConfigItem { + Id int64 `json:"id"` // 主键ID + ConfigKey string `json:"config_key"` // 配置键 + ConfigValue string `json:"config_value"` // 配置值 + ConfigDesc string `json:"config_desc"` // 配置描述 + Status int64 `json:"status"` // 状态:1-启用,0-禁用 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type AdminUpdateQueryCleanupConfigReq { + Id int64 `json:"id"` // 主键ID + ConfigValue string `json:"config_value"` // 配置值 + Status int64 `json:"status"` // 状态:1-启用,0-禁用 +} + +type AdminUpdateQueryCleanupConfigResp { + Success bool `json:"success"` // 是否成功 +} \ No newline at end of file diff --git a/app/main/api/desc/admin/admin_user.api b/app/main/api/desc/admin/admin_user.api new file mode 100644 index 0000000..a83014d --- /dev/null +++ b/app/main/api/desc/admin/admin_user.api @@ -0,0 +1,131 @@ +syntax = "v1" + +info ( + title: "后台用户中心服务" + desc: "后台用户中心服务" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +@server ( + prefix: api/v1/admin/user + group: admin_user + jwt: JwtAuth +) +service main { + @doc "获取用户列表" + @handler AdminGetUserList + get /list (AdminGetUserListReq) returns (AdminGetUserListResp) + + @doc "获取用户详情" + @handler AdminGetUserDetail + get /detail/:id (AdminGetUserDetailReq) returns (AdminGetUserDetailResp) + + @doc "创建用户" + @handler AdminCreateUser + post /create (AdminCreateUserReq) returns (AdminCreateUserResp) + + @doc "更新用户" + @handler AdminUpdateUser + put /update/:id (AdminUpdateUserReq) returns (AdminUpdateUserResp) + + @doc "删除用户" + @handler AdminDeleteUser + delete /delete/:id (AdminDeleteUserReq) returns (AdminDeleteUserResp) + + @doc "用户信息" + @handler AdminUserInfo + get /info (AdminUserInfoReq) returns (AdminUserInfoResp) +} + +type ( + // 列表请求 + AdminGetUserListReq { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Username string `form:"username,optional"` // 用户名 + RealName string `form:"real_name,optional"` // 真实姓名 + Status int64 `form:"status,optional,default=-1"` // 状态:0-禁用,1-启用 + } + + // 列表响应 + AdminGetUserListResp { + Total int64 `json:"total"` // 总数 + Items []AdminUserListItem `json:"items"` // 列表 + } + + // 列表项 + AdminUserListItem { + Id int64 `json:"id"` // 用户ID + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + CreateTime string `json:"create_time"` // 创建时间 + RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表 + } + + // 详情请求 + AdminGetUserDetailReq { + Id int64 `path:"id"` // 用户ID + } + + // 详情响应 + AdminGetUserDetailResp { + Id int64 `json:"id"` // 用户ID + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表 + } + + // 创建请求 + AdminCreateUserReq { + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Status int64 `json:"status,default=1"` // 状态:0-禁用,1-启用 + RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表 + } + + // 创建响应 + AdminCreateUserResp { + Id int64 `json:"id"` // 用户ID + } + + // 更新请求 + AdminUpdateUserReq { + Id int64 `path:"id"` // 用户ID + Username *string `json:"username,optional"` // 用户名 + RealName *string `json:"real_name,optional"` // 真实姓名 + Status *int64 `json:"status,optional"` // 状态:0-禁用,1-启用 + RoleIds []int64 `json:"role_ids,optional"` // 关联的角色ID列表 + } + + // 更新响应 + AdminUpdateUserResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除请求 + AdminDeleteUserReq { + Id int64 `path:"id"` // 用户ID + } + + // 删除响应 + AdminDeleteUserResp { + Success bool `json:"success"` // 是否成功 + } + + // 用户信息请求 + AdminUserInfoReq { + } + + // 用户信息响应 + AdminUserInfoResp { + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Roles []string `json:"roles"` // 角色编码列表 + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/auth.api b/app/main/api/desc/admin/auth.api new file mode 100644 index 0000000..e8be573 --- /dev/null +++ b/app/main/api/desc/admin/auth.api @@ -0,0 +1,34 @@ +syntax = "v1" + +info ( + title: "认证中心服务" + desc: "认证中心服务" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +@server ( + prefix: api/v1/admin/auth + group: admin_auth +) +service main { + @doc "登录" + @handler AdminLogin + post /login (AdminLoginReq) returns (AdminLoginResp) + +} + +type ( + AdminLoginReq { + Username string `json:"username" validate:"required"` + Password string `json:"password" validate:"required"` + Captcha bool `json:"captcha" validate:"required"` + } + AdminLoginResp { + AccessToken string `json:"access_token"` + AccessExpire int64 `json:"access_expire"` + RefreshAfter int64 `json:"refresh_after"` + Roles []string `json:"roles"` + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/menu.api b/app/main/api/desc/admin/menu.api new file mode 100644 index 0000000..52d87be --- /dev/null +++ b/app/main/api/desc/admin/menu.api @@ -0,0 +1,149 @@ +syntax = "v1" + +info ( + title: "菜单中心服务" + desc: "菜单中心服务" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +@server ( + prefix: api/v1/admin/menu + group: admin_menu + jwt: JwtAuth +) +service main { + @doc "获取菜单列表" + @handler GetMenuList + get /list (GetMenuListReq) returns ([]MenuListItem) + + @doc "获取菜单详情" + @handler GetMenuDetail + get /detail/:id (GetMenuDetailReq) returns (GetMenuDetailResp) + + @doc "创建菜单" + @handler CreateMenu + post /create (CreateMenuReq) returns (CreateMenuResp) + + @doc "更新菜单" + @handler UpdateMenu + put /update/:id (UpdateMenuReq) returns (UpdateMenuResp) + + @doc "删除菜单" + @handler DeleteMenu + delete /delete/:id (DeleteMenuReq) returns (DeleteMenuResp) + + @doc "获取所有菜单(树形结构)" + @handler GetMenuAll + get /all (GetMenuAllReq) returns ([]GetMenuAllResp) +} + +type ( + // 列表请求 + GetMenuListReq { + Name string `form:"name,optional"` // 菜单名称 + Path string `form:"path,optional"` // 路由路径 + Status int64 `form:"status,optional,default=-1"` // 状态:0-禁用,1-启用 + Type string `form:"type,optional"` // 类型 + } + + // 列表项 + MenuListItem { + Id int64 `json:"id"` // 菜单ID + Pid int64 `json:"pid"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path"` // 路由路径 + Component string `json:"component"` // 组件路径 + Redirect string `json:"redirect"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"createTime"` // 创建时间 + Children []MenuListItem `json:"children"` // 子菜单 + } + + // 详情请求 + GetMenuDetailReq { + Id int64 `path:"id"` // 菜单ID + } + + // 详情响应 + GetMenuDetailResp { + Id int64 `json:"id"` // 菜单ID + Pid int64 `json:"pid"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path"` // 路由路径 + Component string `json:"component"` // 组件路径 + Redirect string `json:"redirect"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"createTime"` // 创建时间 + UpdateTime string `json:"updateTime"` // 更新时间 + } + + // 创建请求 + CreateMenuReq { + Pid int64 `json:"pid,optional"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path,optional"` // 路由路径 + Component string `json:"component,optional"` // 组件路径 + Redirect string `json:"redirect,optional"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status,optional,default=1"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort,optional"` // 排序 + } + + // 创建响应 + CreateMenuResp { + Id int64 `json:"id"` // 菜单ID + } + + // 更新请求 + UpdateMenuReq { + Id int64 `path:"id"` // 菜单ID + Pid int64 `json:"pid,optional"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path,optional"` // 路由路径 + Component string `json:"component,optional"` // 组件路径 + Redirect string `json:"redirect,optional"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status,optional"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort,optional"` // 排序 + } + + // 更新响应 + UpdateMenuResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除请求 + DeleteMenuReq { + Id int64 `path:"id"` // 菜单ID + } + + // 删除响应 + DeleteMenuResp { + Success bool `json:"success"` // 是否成功 + } + + // 获取所有菜单请求 + GetMenuAllReq { + } + + // 获取所有菜单响应 + GetMenuAllResp { + Name string `json:"name"` + Path string `json:"path"` + Redirect string `json:"redirect,omitempty"` + Component string `json:"component,omitempty"` + Sort int64 `json:"sort"` + Meta map[string]interface{} `json:"meta"` + Children []GetMenuAllResp `json:"children"` + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/notification.api b/app/main/api/desc/admin/notification.api new file mode 100644 index 0000000..169f60d --- /dev/null +++ b/app/main/api/desc/admin/notification.api @@ -0,0 +1,127 @@ +syntax = "v1" + +type ( + // 创建通知请求 + AdminCreateNotificationReq { + Title string `json:"title"` // 通知标题 + NotificationPage string `json:"notification_page"` // 通知页面 + Content string `json:"content"` // 通知内容 + StartDate string `json:"start_date"` // 生效开始日期(yyyy-MM-dd) + StartTime string `json:"start_time"` // 生效开始时间(HH:mm:ss) + EndDate string `json:"end_date"` // 生效结束日期(yyyy-MM-dd) + EndTime string `json:"end_time"` // 生效结束时间(HH:mm:ss) + Status int64 `json:"status"` // 状态:1-启用,0-禁用 + } + + // 创建通知响应 + AdminCreateNotificationResp { + Id int64 `json:"id"` // 通知ID + } + + // 更新通知请求 + AdminUpdateNotificationReq { + Id int64 `path:"id"` // 通知ID + Title *string `json:"title,optional"` // 通知标题 + Content *string `json:"content,optional"` // 通知内容 + NotificationPage *string `json:"notification_page,optional"` // 通知页面 + StartDate *string `json:"start_date,optional"` // 生效开始日期 + StartTime *string `json:"start_time,optional"` // 生效开始时间 + EndDate *string `json:"end_date,optional"` // 生效结束日期 + EndTime *string `json:"end_time,optional"` // 生效结束时间 + Status *int64 `json:"status,optional"` // 状态 + } + + // 更新通知响应 + AdminUpdateNotificationResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除通知请求 + AdminDeleteNotificationReq { + Id int64 `path:"id"` // 通知ID + } + + // 删除通知响应 + AdminDeleteNotificationResp { + Success bool `json:"success"` // 是否成功 + } + + // 获取通知详情请求 + AdminGetNotificationDetailReq { + Id int64 `path:"id"` // 通知ID + } + + // 获取通知详情响应 + AdminGetNotificationDetailResp { + Id int64 `json:"id"` // 通知ID + Title string `json:"title"` // 通知标题 + Content string `json:"content"` // 通知内容 + NotificationPage string `json:"notification_page"` // 通知页面 + StartDate string `json:"start_date"` // 生效开始日期 + StartTime string `json:"start_time"` // 生效开始时间 + EndDate string `json:"end_date"` // 生效结束日期 + EndTime string `json:"end_time"` // 生效结束时间 + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 获取通知列表请求 + AdminGetNotificationListReq { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + Title *string `form:"title,optional"` // 通知标题(可选) + NotificationPage *string `form:"notification_page,optional"` // 通知页面(可选) + Status *int64 `form:"status,optional"` // 状态(可选) + StartDate *string `form:"start_date,optional"` // 开始日期范围(可选) + EndDate *string `form:"end_date,optional"` // 结束日期范围(可选) + } + + // 通知列表项 + NotificationListItem { + Id int64 `json:"id"` // 通知ID + Title string `json:"title"` // 通知标题 + NotificationPage string `json:"notification_page"` // 通知页面 + Content string `json:"content"` // 通知内容 + StartDate string `json:"start_date"` // 生效开始日期 + StartTime string `json:"start_time"` // 生效开始时间 + EndDate string `json:"end_date"` // 生效结束日期 + EndTime string `json:"end_time"` // 生效结束时间 + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 获取通知列表响应 + AdminGetNotificationListResp { + Total int64 `json:"total"` // 总数 + Items []NotificationListItem `json:"items"` // 列表数据 + } +) + +// 通知管理接口 +@server( + prefix: /api/v1/admin/notification + group: admin_notification +) +service main { + // 创建通知 + @handler AdminCreateNotification + post /create (AdminCreateNotificationReq) returns (AdminCreateNotificationResp) + + // 更新通知 + @handler AdminUpdateNotification + put /update/:id (AdminUpdateNotificationReq) returns (AdminUpdateNotificationResp) + + // 删除通知 + @handler AdminDeleteNotification + delete /delete/:id (AdminDeleteNotificationReq) returns (AdminDeleteNotificationResp) + + // 获取通知详情 + @handler AdminGetNotificationDetail + get /detail/:id (AdminGetNotificationDetailReq) returns (AdminGetNotificationDetailResp) + + // 获取通知列表 + @handler AdminGetNotificationList + get /list (AdminGetNotificationListReq) returns (AdminGetNotificationListResp) +} \ No newline at end of file diff --git a/app/main/api/desc/admin/order.api b/app/main/api/desc/admin/order.api new file mode 100644 index 0000000..73a9f65 --- /dev/null +++ b/app/main/api/desc/admin/order.api @@ -0,0 +1,169 @@ +syntax = "v1" + +info ( + title: "订单服务" + desc: "订单服务" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +@server ( + prefix: api/v1/admin/order + group: admin_order + jwt: JwtAuth +) +service main { + @doc "获取订单列表" + @handler AdminGetOrderList + get /list (AdminGetOrderListReq) returns (AdminGetOrderListResp) + + @doc "获取订单详情" + @handler AdminGetOrderDetail + get /detail/:id (AdminGetOrderDetailReq) returns (AdminGetOrderDetailResp) + + @doc "创建订单" + @handler AdminCreateOrder + post /create (AdminCreateOrderReq) returns (AdminCreateOrderResp) + + @doc "更新订单" + @handler AdminUpdateOrder + put /update/:id (AdminUpdateOrderReq) returns (AdminUpdateOrderResp) + + @doc "删除订单" + @handler AdminDeleteOrder + delete /delete/:id (AdminDeleteOrderReq) returns (AdminDeleteOrderResp) + + @doc "订单退款" + @handler AdminRefundOrder + post /refund/:id (AdminRefundOrderReq) returns (AdminRefundOrderResp) +} + +type ( + // 列表请求 + AdminGetOrderListReq { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + OrderNo string `form:"order_no,optional"` // 商户订单号 + PlatformOrderId string `form:"platform_order_id,optional"` // 支付订单号 + ProductName string `form:"product_name,optional"` // 产品名称 + PaymentPlatform string `form:"payment_platform,optional"` // 支付方式 + PaymentScene string `form:"payment_scene,optional"` // 支付平台 + Amount float64 `form:"amount,optional"` // 金额 + Status string `form:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + IsPromotion int64 `form:"is_promotion,optional,default=-1"` // 是否推广订单:0-否,1-是 + CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始 + CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束 + PayTimeStart string `form:"pay_time_start,optional"` // 支付时间开始 + PayTimeEnd string `form:"pay_time_end,optional"` // 支付时间结束 + RefundTimeStart string `form:"refund_time_start,optional"` // 退款时间开始 + RefundTimeEnd string `form:"refund_time_end,optional"` // 退款时间结束 + } + + // 列表响应 + AdminGetOrderListResp { + Total int64 `json:"total"` // 总数 + Items []OrderListItem `json:"items"` // 列表 + } + + // 列表项 + OrderListItem { + Id int64 `json:"id"` // 订单ID + OrderNo string `json:"order_no"` // 商户订单号 + PlatformOrderId string `json:"platform_order_id"` // 支付订单号 + ProductName string `json:"product_name"` // 产品名称 + PaymentPlatform string `json:"payment_platform"` // 支付方式 + PaymentScene string `json:"payment_scene"` // 支付平台 + Amount float64 `json:"amount"` // 金额 + Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + QueryState string `json:"query_state"` // 查询状态:pending-待查询,success-查询成功,failed-查询失败 processing-查询中 + CreateTime string `json:"create_time"` // 创建时间 + PayTime string `json:"pay_time"` // 支付时间 + RefundTime string `json:"refund_time"` // 退款时间 + IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是 + } + + // 详情请求 + AdminGetOrderDetailReq { + Id int64 `path:"id"` // 订单ID + } + + // 详情响应 + AdminGetOrderDetailResp { + Id int64 `json:"id"` // 订单ID + OrderNo string `json:"order_no"` // 商户订单号 + PlatformOrderId string `json:"platform_order_id"` // 支付订单号 + ProductName string `json:"product_name"` // 产品名称 + PaymentPlatform string `json:"payment_platform"` // 支付方式 + PaymentScene string `json:"payment_scene"` // 支付平台 + Amount float64 `json:"amount"` // 金额 + Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + QueryState string `json:"query_state"` // 查询状态:pending-待查询,success-查询成功,failed-查询失败 processing-查询中 + CreateTime string `json:"create_time"` // 创建时间 + PayTime string `json:"pay_time"` // 支付时间 + RefundTime string `json:"refund_time"` // 退款时间 + IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 创建请求 + AdminCreateOrderReq { + OrderNo string `json:"order_no"` // 商户订单号 + PlatformOrderId string `json:"platform_order_id"` // 支付订单号 + ProductName string `json:"product_name"` // 产品名称 + PaymentPlatform string `json:"payment_platform"` // 支付方式 + PaymentScene string `json:"payment_scene"` // 支付平台 + Amount float64 `json:"amount"` // 金额 + Status string `json:"status,default=pending"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + IsPromotion int64 `json:"is_promotion,default=0"` // 是否推广订单:0-否,1-是 + } + + // 创建响应 + AdminCreateOrderResp { + Id int64 `json:"id"` // 订单ID + } + + // 更新请求 + AdminUpdateOrderReq { + Id int64 `path:"id"` // 订单ID + OrderNo *string `json:"order_no,optional"` // 商户订单号 + PlatformOrderId *string `json:"platform_order_id,optional"` // 支付订单号 + ProductName *string `json:"product_name,optional"` // 产品名称 + PaymentPlatform *string `json:"payment_platform,optional"` // 支付方式 + PaymentScene *string `json:"payment_scene,optional"` // 支付平台 + Amount *float64 `json:"amount,optional"` // 金额 + Status *string `json:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + PayTime *string `json:"pay_time,optional"` // 支付时间 + RefundTime *string `json:"refund_time,optional"` // 退款时间 + IsPromotion *int64 `json:"is_promotion,optional"` // 是否推广订单:0-否,1-是 + } + + // 更新响应 + AdminUpdateOrderResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除请求 + AdminDeleteOrderReq { + Id int64 `path:"id"` // 订单ID + } + + // 删除响应 + AdminDeleteOrderResp { + Success bool `json:"success"` // 是否成功 + } + + // 退款请求 + AdminRefundOrderReq { + Id int64 `path:"id"` // 订单ID + RefundAmount float64 `json:"refund_amount"` // 退款金额 + RefundReason string `json:"refund_reason"` // 退款原因 + } + + // 退款响应 + AdminRefundOrderResp { + Status string `json:"status"` // 退款状态 + RefundNo string `json:"refund_no"` // 退款单号 + Amount float64 `json:"amount"` // 退款金额 + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/platform_user.api b/app/main/api/desc/admin/platform_user.api new file mode 100644 index 0000000..d63abfc --- /dev/null +++ b/app/main/api/desc/admin/platform_user.api @@ -0,0 +1,124 @@ +syntax = "v1" + +info ( + title: "平台用户管理" + desc: "平台用户管理" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +// 平台用户管理接口 +@server( + prefix: /api/v1/admin/platform_user + group: admin_platform_user + jwt: JwtAuth +) +service main { + // 创建平台用户 + @handler AdminCreatePlatformUser + post /create (AdminCreatePlatformUserReq) returns (AdminCreatePlatformUserResp) + + // 更新平台用户 + @handler AdminUpdatePlatformUser + put /update/:id (AdminUpdatePlatformUserReq) returns (AdminUpdatePlatformUserResp) + + // 删除平台用户 + @handler AdminDeletePlatformUser + delete /delete/:id (AdminDeletePlatformUserReq) returns (AdminDeletePlatformUserResp) + + // 获取平台用户分页列表 + @handler AdminGetPlatformUserList + get /list (AdminGetPlatformUserListReq) returns (AdminGetPlatformUserListResp) + + // 获取平台用户详情 + @handler AdminGetPlatformUserDetail + get /detail/:id (AdminGetPlatformUserDetailReq) returns (AdminGetPlatformUserDetailResp) +} + +type ( + // 分页列表请求 + AdminGetPlatformUserListReq { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Mobile string `form:"mobile,optional"` // 手机号 + Nickname string `form:"nickname,optional"` // 昵称 + Inside int64 `form:"inside,optional"` // 是否内部用户 1-是 0-否 + CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始 + CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束 + OrderBy string `form:"order_by,optional"` // 排序字段 + OrderType string `form:"order_type,optional"` // 排序类型 + } + + // 分页列表响应 + AdminGetPlatformUserListResp { + Total int64 `json:"total"` // 总数 + Items []PlatformUserListItem `json:"items"` // 列表 + } + + // 列表项 + PlatformUserListItem { + Id int64 `json:"id"` // 用户ID + Mobile string `json:"mobile"` // 手机号 + Nickname string `json:"nickname"` // 昵称 + Info string `json:"info"` // 备注信息 + Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 详情请求 + AdminGetPlatformUserDetailReq { + Id int64 `path:"id"` // 用户ID + } + + // 详情响应 + AdminGetPlatformUserDetailResp { + Id int64 `json:"id"` // 用户ID + Mobile string `json:"mobile"` // 手机号 + Nickname string `json:"nickname"` // 昵称 + Info string `json:"info"` // 备注信息 + Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + } + + // 创建请求 + AdminCreatePlatformUserReq { + Mobile string `json:"mobile"` // 手机号 + Password string `json:"password"` // 密码 + Nickname string `json:"nickname"` // 昵称 + Info string `json:"info"` // 备注信息 + Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否 + } + + // 创建响应 + AdminCreatePlatformUserResp { + Id int64 `json:"id"` // 用户ID + } + + // 更新请求 + AdminUpdatePlatformUserReq { + Id int64 `path:"id"` // 用户ID + Mobile *string `json:"mobile,optional"` // 手机号 + Password *string `json:"password,optional"` // 密码 + Nickname *string `json:"nickname,optional"` // 昵称 + Info *string `json:"info,optional"` // 备注信息 + Inside *int64 `json:"inside,optional"` // 是否内部用户 1-是 0-否 + } + + // 更新响应 + AdminUpdatePlatformUserResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除请求 + AdminDeletePlatformUserReq { + Id int64 `path:"id"` // 用户ID + } + + // 删除响应 + AdminDeletePlatformUserResp { + Success bool `json:"success"` // 是否成功 + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/promotion.api b/app/main/api/desc/admin/promotion.api new file mode 100644 index 0000000..b821b9b --- /dev/null +++ b/app/main/api/desc/admin/promotion.api @@ -0,0 +1,183 @@ +syntax = "v1" + +info ( + title: "推广服务" + desc: "推广服务" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +@server ( + prefix: api/v1/admin/promotion/link + group: admin_promotion + jwt: JwtAuth +) +service main { + @doc "获取推广链接列表" + @handler GetPromotionLinkList + get /list (GetPromotionLinkListReq) returns (GetPromotionLinkListResp) + + @doc "获取推广链接详情" + @handler GetPromotionLinkDetail + get /detail/:id (GetPromotionLinkDetailReq) returns (GetPromotionLinkDetailResp) + + @doc "创建推广链接" + @handler CreatePromotionLink + post /create (CreatePromotionLinkReq) returns (CreatePromotionLinkResp) + + @doc "更新推广链接" + @handler UpdatePromotionLink + put /update/:id (UpdatePromotionLinkReq) returns (UpdatePromotionLinkResp) + + @doc "删除推广链接" + @handler DeletePromotionLink + delete /delete/:id (DeletePromotionLinkReq) returns (DeletePromotionLinkResp) +} + +type ( + // 列表请求 + GetPromotionLinkListReq { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Name string `form:"name,optional"` // 链接名称 + Url string `form:"url,optional"` // 推广链接URL + } + + // 列表响应 + GetPromotionLinkListResp { + Total int64 `json:"total"` // 总数 + Items []PromotionLinkItem `json:"items"` // 列表 + } + + // 列表项 + PromotionLinkItem { + Id int64 `json:"id"` // 链接ID + Name string `json:"name"` // 链接名称 + Url string `json:"url"` // 推广链接URL + ClickCount int64 `json:"click_count"` // 点击数 + PayCount int64 `json:"pay_count"` // 付费次数 + PayAmount string `json:"pay_amount"` // 付费金额 + CreateTime string `json:"create_time"` // 创建时间 + LastClickTime string `json:"last_click_time,optional"` // 最后点击时间 + LastPayTime string `json:"last_pay_time,optional"` // 最后付费时间 + } + + // 详情请求 + GetPromotionLinkDetailReq { + Id int64 `path:"id"` // 链接ID + } + + // 详情响应 + GetPromotionLinkDetailResp { + Name string `json:"name"` // 链接名称 + Url string `json:"url"` // 推广链接URL + ClickCount int64 `json:"click_count"` // 点击数 + PayCount int64 `json:"pay_count"` // 付费次数 + PayAmount string `json:"pay_amount"` // 付费金额 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + LastClickTime string `json:"last_click_time,optional"` // 最后点击时间 + LastPayTime string `json:"last_pay_time,optional"` // 最后付费时间 + } + + // 创建请求 + CreatePromotionLinkReq { + Name string `json:"name"` // 链接名称 + } + + // 创建响应 + CreatePromotionLinkResp { + Id int64 `json:"id"` // 链接ID + Url string `json:"url"` // 生成的推广链接URL + } + + // 更新请求 + UpdatePromotionLinkReq { + Id int64 `path:"id"` // 链接ID + Name *string `json:"name,optional"` // 链接名称 + } + + // 更新响应 + UpdatePromotionLinkResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除请求 + DeletePromotionLinkReq { + Id int64 `path:"id"` // 链接ID + } + + // 删除响应 + DeletePromotionLinkResp { + Success bool `json:"success"` // 是否成功 + } +) + +@server ( + prefix: api/v1/admin/promotion/link + group: admin_promotion +) +service main { + @doc "记录链接点击" + @handler RecordLinkClick + get /record/:path (RecordLinkClickReq) returns (RecordLinkClickResp) +} + +type ( + // 记录链接点击请求 + RecordLinkClickReq { + Path string `path:"path"` // 链接路径 + } + + // 记录链接点击响应 + RecordLinkClickResp { + Success bool `json:"success"` // 是否成功 + } +) +@server ( + prefix: api/v1/admin/promotion/stats + group: admin_promotion + jwt: JwtAuth +) +service main { + @doc "获取推广历史记录" + @handler GetPromotionStatsHistory + get /history (GetPromotionStatsHistoryReq) returns ([]PromotionStatsHistoryItem) + + @doc "获取推广总统计" + @handler GetPromotionStatsTotal + get /total (GetPromotionStatsTotalReq) returns (GetPromotionStatsTotalResp) +} + +type ( + // 获取推广历史记录请求 + GetPromotionStatsHistoryReq { + StartDate string `form:"start_date"` // 开始日期,格式:YYYY-MM-DD + EndDate string `form:"end_date"` // 结束日期,格式:YYYY-MM-DD + } + + // 推广历史记录项 + PromotionStatsHistoryItem { + Id int64 `json:"id"` // 记录ID + LinkId int64 `json:"link_id"` // 链接ID + PayAmount float64 `json:"pay_amount"` // 金额 + ClickCount int64 `json:"click_count"` // 点击数 + PayCount int64 `json:"pay_count"` // 付费次数 + StatsDate string `json:"stats_date"` // 统计日期 + } + + // 获取推广总统计请求 + GetPromotionStatsTotalReq { + } + + // 获取推广总统计响应 + GetPromotionStatsTotalResp { + TodayPayAmount float64 `json:"today_pay_amount"` // 今日金额 + TodayClickCount int64 `json:"today_click_count"` // 今日点击数 + TodayPayCount int64 `json:"today_pay_count"` // 今日付费次数 + TotalPayAmount float64 `json:"total_pay_amount"` // 总金额 + TotalClickCount int64 `json:"total_click_count"` // 总点击数 + TotalPayCount int64 `json:"total_pay_count"` // 总付费次数 + } +) \ No newline at end of file diff --git a/app/main/api/desc/admin/role.api b/app/main/api/desc/admin/role.api new file mode 100644 index 0000000..51a3de9 --- /dev/null +++ b/app/main/api/desc/admin/role.api @@ -0,0 +1,124 @@ +syntax = "v1" + +info ( + title: "角色服务" + desc: "角色服务" + author: "Liangzai" + email: "2440983361@qq.com" + version: "v1" +) + +@server ( + prefix: api/v1/admin/role + group: admin_role + jwt: JwtAuth +) +service main { + @doc "获取角色列表" + @handler GetRoleList + get /list (GetRoleListReq) returns (GetRoleListResp) + + @doc "获取角色详情" + @handler GetRoleDetail + get /detail/:id (GetRoleDetailReq) returns (GetRoleDetailResp) + + @doc "创建角色" + @handler CreateRole + post /create (CreateRoleReq) returns (CreateRoleResp) + + @doc "更新角色" + @handler UpdateRole + put /update/:id (UpdateRoleReq) returns (UpdateRoleResp) + + @doc "删除角色" + @handler DeleteRole + delete /delete/:id (DeleteRoleReq) returns (DeleteRoleResp) +} + +type ( + // 列表请求 + GetRoleListReq { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Name string `form:"name,optional"` // 角色名称 + Code string `form:"code,optional"` // 角色编码 + Status int64 `form:"status,optional,default=-1"` // 状态:0-禁用,1-启用 + } + + // 列表响应 + GetRoleListResp { + Total int64 `json:"total"` // 总数 + Items []RoleListItem `json:"items"` // 列表 + } + + // 列表项 + RoleListItem { + Id int64 `json:"id"` // 角色ID + RoleName string `json:"role_name"` // 角色名称 + RoleCode string `json:"role_code"` // 角色编码 + Description string `json:"description"` // 角色描述 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"create_time"` // 创建时间 + MenuIds []int64 `json:"menu_ids"` // 关联的菜单ID列表 + } + + // 详情请求 + GetRoleDetailReq { + Id int64 `path:"id"` // 角色ID + } + + // 详情响应 + GetRoleDetailResp { + Id int64 `json:"id"` // 角色ID + RoleName string `json:"role_name"` // 角色名称 + RoleCode string `json:"role_code"` // 角色编码 + Description string `json:"description"` // 角色描述 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + MenuIds []int64 `json:"menu_ids"` // 关联的菜单ID列表 + } + + // 创建请求 + CreateRoleReq { + RoleName string `json:"role_name"` // 角色名称 + RoleCode string `json:"role_code"` // 角色编码 + Description string `json:"description"` // 角色描述 + Status int64 `json:"status,default=1"` // 状态:0-禁用,1-启用 + Sort int64 `json:"sort,default=0"` // 排序 + MenuIds []int64 `json:"menu_ids"` // 关联的菜单ID列表 + } + + // 创建响应 + CreateRoleResp { + Id int64 `json:"id"` // 角色ID + } + + // 更新请求 + UpdateRoleReq { + Id int64 `path:"id"` // 角色ID + RoleName *string `json:"role_name,optional"` // 角色名称 + RoleCode *string `json:"role_code,optional"` // 角色编码 + Description *string `json:"description,optional"` // 角色描述 + Status *int64 `json:"status,optional"` // 状态:0-禁用,1-启用 + Sort *int64 `json:"sort,optional"` // 排序 + MenuIds []int64 `json:"menu_ids,optional"` // 关联的菜单ID列表 + } + + // 更新响应 + UpdateRoleResp { + Success bool `json:"success"` // 是否成功 + } + + // 删除请求 + DeleteRoleReq { + Id int64 `path:"id"` // 角色ID + } + + // 删除响应 + DeleteRoleResp { + Success bool `json:"success"` // 是否成功 + } +) \ No newline at end of file diff --git a/app/main/api/desc/agent.api b/app/main/api/desc/front/agent.api similarity index 100% rename from app/main/api/desc/agent.api rename to app/main/api/desc/front/agent.api diff --git a/app/main/api/desc/app.api b/app/main/api/desc/front/app.api similarity index 100% rename from app/main/api/desc/app.api rename to app/main/api/desc/front/app.api diff --git a/app/main/api/desc/pay.api b/app/main/api/desc/front/pay.api similarity index 100% rename from app/main/api/desc/pay.api rename to app/main/api/desc/front/pay.api diff --git a/app/main/api/desc/product.api b/app/main/api/desc/front/product.api similarity index 100% rename from app/main/api/desc/product.api rename to app/main/api/desc/front/product.api diff --git a/app/main/api/desc/query.api b/app/main/api/desc/front/query.api similarity index 100% rename from app/main/api/desc/query.api rename to app/main/api/desc/front/query.api diff --git a/app/main/api/desc/user.api b/app/main/api/desc/front/user.api similarity index 100% rename from app/main/api/desc/user.api rename to app/main/api/desc/front/user.api diff --git a/app/main/api/desc/main.api b/app/main/api/desc/main.api index 70efd80..3928235 100644 --- a/app/main/api/desc/main.api +++ b/app/main/api/desc/main.api @@ -8,9 +8,23 @@ info ( version: "v1" ) -import "user.api" -import "query.api" -import "pay.api" -import "product.api" -import "agent.api" -import "app.api" +// 前台 +import "./front/user.api" +import "./front/query.api" +import "./front/pay.api" +import "./front/product.api" +import "./front/agent.api" +import "./front/app.api" +// 后台 +import "./admin/auth.api" +import "./admin/menu.api" +import "./admin/role.api" +import "./admin/promotion.api" +import "./admin/order.api" +import "./admin/admin_user.api" +import "./admin/platform_user.api" +import "./admin/notification.api" +import "./admin/admin_product.api" +import "./admin/admin_feature.api" +import "./admin/admin_query.api" +import "./admin/admin_agent.api" diff --git a/app/main/api/etc/main.dev.yaml b/app/main/api/etc/main.dev.yaml index 413af28..98a79d2 100644 --- a/app/main/api/etc/main.dev.yaml +++ b/app/main/api/etc/main.dev.yaml @@ -72,3 +72,9 @@ CloudAuth: ReturnUrl: "https://www.quannengcha.com/authorization/result" Query: ShareLinkExpire: 604800 # 7天 = 7 * 24 * 60 * 60 = 604800秒 +AdminConfig: + AccessSecret: "jK8nP3qR7tV2xZ5aB9cD1eF6gH4iJ0kL8mN5oP6qR7sT" + AccessExpire: 604800 + RefreshAfter: 302400 +AdminPromotion: + URLDomain: "https://quannengcha.com/p" diff --git a/app/main/api/etc/main.yaml b/app/main/api/etc/main.yaml index f980868..038eb65 100644 --- a/app/main/api/etc/main.yaml +++ b/app/main/api/etc/main.yaml @@ -73,3 +73,9 @@ CloudAuth: ReturnUrl: "https://www.quannengcha.com/authorization/result" Query: ShareLinkExpire: 604800 # 7天 = 7 * 24 * 60 * 60 = 604800秒 +AdminConfig: + AccessSecret: "jK8nP3qR7tV2xZ5aB9cD1eF6gH4iJ0kL8mN5oP6qR7sT" + AccessExpire: 604800 + RefreshAfter: 302400 +AdminPromotion: + URLDomain: "https://quannengcha.com/p" diff --git a/app/main/api/internal/config/config.go b/app/main/api/internal/config/config.go index b7f79ee..c0692cb 100644 --- a/app/main/api/internal/config/config.go +++ b/app/main/api/internal/config/config.go @@ -7,21 +7,23 @@ import ( type Config struct { rest.RestConf - DataSource string - CacheRedis cache.CacheConf - JwtAuth JwtAuth // JWT 鉴权相关配置 - VerifyCode VerifyCode - Encrypt Encrypt - Alipay AlipayConfig - Wxpay WxpayConfig - Applepay ApplepayConfig - Ali AliConfig - WestConfig WestConfig - YushanConfig YushanConfig - SystemConfig SystemConfig - WechatH5 WechatH5Config - CloudAuth CloudAuthConfig - Query QueryConfig + DataSource string + CacheRedis cache.CacheConf + JwtAuth JwtAuth // JWT 鉴权相关配置 + VerifyCode VerifyCode + Encrypt Encrypt + Alipay AlipayConfig + Wxpay WxpayConfig + Applepay ApplepayConfig + Ali AliConfig + WestConfig WestConfig + YushanConfig YushanConfig + SystemConfig SystemConfig + WechatH5 WechatH5Config + CloudAuth CloudAuthConfig + Query QueryConfig + AdminConfig AdminConfig + AdminPromotion AdminPromotion } // JwtAuth 用于 JWT 鉴权配置 @@ -104,3 +106,12 @@ type CloudAuthConfig struct { type QueryConfig struct { ShareLinkExpire int64 } +type AdminConfig struct { + AccessSecret string + AccessExpire int64 + RefreshAfter int64 +} + +type AdminPromotion struct { + URLDomain string +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentcommissiondeductionlisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentcommissiondeductionlisthandler.go new file mode 100644 index 0000000..448f4d7 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentcommissiondeductionlisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentCommissionDeductionListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentCommissionDeductionListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentCommissionDeductionListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentCommissionDeductionList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentcommissionlisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentcommissionlisthandler.go new file mode 100644 index 0000000..99a1e7e --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentcommissionlisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentCommissionListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentCommissionListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentCommissionListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentCommissionList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentlinklisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentlinklisthandler.go new file mode 100644 index 0000000..6107267 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentlinklisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentLinkListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentLinkListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentLinkListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentLinkList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentlisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentlisthandler.go new file mode 100644 index 0000000..ea3d6f3 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentlisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentmembershipconfiglisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentmembershipconfiglisthandler.go new file mode 100644 index 0000000..5e4ce7d --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentmembershipconfiglisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentMembershipConfigListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentMembershipConfigListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentMembershipConfigListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentMembershipConfigList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentmembershiprechargeorderlisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentmembershiprechargeorderlisthandler.go new file mode 100644 index 0000000..3fc1fae --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentmembershiprechargeorderlisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentMembershipRechargeOrderListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentMembershipRechargeOrderListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentMembershipRechargeOrderListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentMembershipRechargeOrderList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentplatformdeductionlisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentplatformdeductionlisthandler.go new file mode 100644 index 0000000..0668bb1 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentplatformdeductionlisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentPlatformDeductionListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentPlatformDeductionListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentPlatformDeductionListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentPlatformDeductionList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentproductionconfiglisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentproductionconfiglisthandler.go new file mode 100644 index 0000000..010a5d9 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentproductionconfiglisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentProductionConfigListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentProductionConfigListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentProductionConfigListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentProductionConfigList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentrewardlisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentrewardlisthandler.go new file mode 100644 index 0000000..b1dcd23 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentrewardlisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentRewardListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentRewardListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentRewardListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentRewardList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/admingetagentwithdrawallisthandler.go b/app/main/api/internal/handler/admin_agent/admingetagentwithdrawallisthandler.go new file mode 100644 index 0000000..0aa2345 --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/admingetagentwithdrawallisthandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetAgentWithdrawalListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetAgentWithdrawalListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminGetAgentWithdrawalListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetAgentWithdrawalList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/adminupdateagentmembershipconfighandler.go b/app/main/api/internal/handler/admin_agent/adminupdateagentmembershipconfighandler.go new file mode 100644 index 0000000..f40554f --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/adminupdateagentmembershipconfighandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateAgentMembershipConfigHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateAgentMembershipConfigReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminUpdateAgentMembershipConfigLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateAgentMembershipConfig(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_agent/adminupdateagentproductionconfighandler.go b/app/main/api/internal/handler/admin_agent/adminupdateagentproductionconfighandler.go new file mode 100644 index 0000000..9c33c2b --- /dev/null +++ b/app/main/api/internal/handler/admin_agent/adminupdateagentproductionconfighandler.go @@ -0,0 +1,29 @@ +package admin_agent + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateAgentProductionConfigHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateAgentProductionConfigReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_agent.NewAdminUpdateAgentProductionConfigLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateAgentProductionConfig(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_auth/adminloginhandler.go b/app/main/api/internal/handler/admin_auth/adminloginhandler.go new file mode 100644 index 0000000..b3348e0 --- /dev/null +++ b/app/main/api/internal/handler/admin_auth/adminloginhandler.go @@ -0,0 +1,29 @@ +package admin_auth + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_auth" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminLoginHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminLoginReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_auth.NewAdminLoginLogic(r.Context(), svcCtx) + resp, err := l.AdminLogin(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_feature/admincreatefeaturehandler.go b/app/main/api/internal/handler/admin_feature/admincreatefeaturehandler.go new file mode 100644 index 0000000..0bb2a9a --- /dev/null +++ b/app/main/api/internal/handler/admin_feature/admincreatefeaturehandler.go @@ -0,0 +1,29 @@ +package admin_feature + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_feature" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminCreateFeatureHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminCreateFeatureReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_feature.NewAdminCreateFeatureLogic(r.Context(), svcCtx) + resp, err := l.AdminCreateFeature(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_feature/admindeletefeaturehandler.go b/app/main/api/internal/handler/admin_feature/admindeletefeaturehandler.go new file mode 100644 index 0000000..7c8781d --- /dev/null +++ b/app/main/api/internal/handler/admin_feature/admindeletefeaturehandler.go @@ -0,0 +1,29 @@ +package admin_feature + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_feature" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminDeleteFeatureHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminDeleteFeatureReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_feature.NewAdminDeleteFeatureLogic(r.Context(), svcCtx) + resp, err := l.AdminDeleteFeature(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_feature/admingetfeaturedetailhandler.go b/app/main/api/internal/handler/admin_feature/admingetfeaturedetailhandler.go new file mode 100644 index 0000000..93dba9e --- /dev/null +++ b/app/main/api/internal/handler/admin_feature/admingetfeaturedetailhandler.go @@ -0,0 +1,29 @@ +package admin_feature + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_feature" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetFeatureDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetFeatureDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_feature.NewAdminGetFeatureDetailLogic(r.Context(), svcCtx) + resp, err := l.AdminGetFeatureDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_feature/admingetfeaturelisthandler.go b/app/main/api/internal/handler/admin_feature/admingetfeaturelisthandler.go new file mode 100644 index 0000000..25cab6e --- /dev/null +++ b/app/main/api/internal/handler/admin_feature/admingetfeaturelisthandler.go @@ -0,0 +1,29 @@ +package admin_feature + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_feature" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetFeatureListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetFeatureListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_feature.NewAdminGetFeatureListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetFeatureList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_feature/adminupdatefeaturehandler.go b/app/main/api/internal/handler/admin_feature/adminupdatefeaturehandler.go new file mode 100644 index 0000000..982eff0 --- /dev/null +++ b/app/main/api/internal/handler/admin_feature/adminupdatefeaturehandler.go @@ -0,0 +1,29 @@ +package admin_feature + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_feature" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateFeatureHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateFeatureReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_feature.NewAdminUpdateFeatureLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateFeature(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_menu/createmenuhandler.go b/app/main/api/internal/handler/admin_menu/createmenuhandler.go new file mode 100644 index 0000000..a66c14d --- /dev/null +++ b/app/main/api/internal/handler/admin_menu/createmenuhandler.go @@ -0,0 +1,29 @@ +package admin_menu + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_menu" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func CreateMenuHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.CreateMenuReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_menu.NewCreateMenuLogic(r.Context(), svcCtx) + resp, err := l.CreateMenu(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_menu/deletemenuhandler.go b/app/main/api/internal/handler/admin_menu/deletemenuhandler.go new file mode 100644 index 0000000..6e63aa1 --- /dev/null +++ b/app/main/api/internal/handler/admin_menu/deletemenuhandler.go @@ -0,0 +1,29 @@ +package admin_menu + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_menu" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func DeleteMenuHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.DeleteMenuReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_menu.NewDeleteMenuLogic(r.Context(), svcCtx) + resp, err := l.DeleteMenu(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_menu/getmenuallhandler.go b/app/main/api/internal/handler/admin_menu/getmenuallhandler.go new file mode 100644 index 0000000..1b71579 --- /dev/null +++ b/app/main/api/internal/handler/admin_menu/getmenuallhandler.go @@ -0,0 +1,29 @@ +package admin_menu + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_menu" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetMenuAllHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetMenuAllReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_menu.NewGetMenuAllLogic(r.Context(), svcCtx) + resp, err := l.GetMenuAll(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_menu/getmenudetailhandler.go b/app/main/api/internal/handler/admin_menu/getmenudetailhandler.go new file mode 100644 index 0000000..3d763d0 --- /dev/null +++ b/app/main/api/internal/handler/admin_menu/getmenudetailhandler.go @@ -0,0 +1,29 @@ +package admin_menu + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_menu" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetMenuDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetMenuDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_menu.NewGetMenuDetailLogic(r.Context(), svcCtx) + resp, err := l.GetMenuDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_menu/getmenulisthandler.go b/app/main/api/internal/handler/admin_menu/getmenulisthandler.go new file mode 100644 index 0000000..eb1af9e --- /dev/null +++ b/app/main/api/internal/handler/admin_menu/getmenulisthandler.go @@ -0,0 +1,29 @@ +package admin_menu + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_menu" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetMenuListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetMenuListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_menu.NewGetMenuListLogic(r.Context(), svcCtx) + resp, err := l.GetMenuList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_menu/updatemenuhandler.go b/app/main/api/internal/handler/admin_menu/updatemenuhandler.go new file mode 100644 index 0000000..f41941d --- /dev/null +++ b/app/main/api/internal/handler/admin_menu/updatemenuhandler.go @@ -0,0 +1,29 @@ +package admin_menu + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_menu" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func UpdateMenuHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.UpdateMenuReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_menu.NewUpdateMenuLogic(r.Context(), svcCtx) + resp, err := l.UpdateMenu(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_notification/admincreatenotificationhandler.go b/app/main/api/internal/handler/admin_notification/admincreatenotificationhandler.go new file mode 100644 index 0000000..f43aa10 --- /dev/null +++ b/app/main/api/internal/handler/admin_notification/admincreatenotificationhandler.go @@ -0,0 +1,29 @@ +package admin_notification + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_notification" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminCreateNotificationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminCreateNotificationReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_notification.NewAdminCreateNotificationLogic(r.Context(), svcCtx) + resp, err := l.AdminCreateNotification(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go b/app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go new file mode 100644 index 0000000..7af956f --- /dev/null +++ b/app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go @@ -0,0 +1,29 @@ +package admin_notification + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_notification" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminDeleteNotificationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminDeleteNotificationReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_notification.NewAdminDeleteNotificationLogic(r.Context(), svcCtx) + resp, err := l.AdminDeleteNotification(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_notification/admingetnotificationdetailhandler.go b/app/main/api/internal/handler/admin_notification/admingetnotificationdetailhandler.go new file mode 100644 index 0000000..1ab8e5b --- /dev/null +++ b/app/main/api/internal/handler/admin_notification/admingetnotificationdetailhandler.go @@ -0,0 +1,29 @@ +package admin_notification + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_notification" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetNotificationDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetNotificationDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_notification.NewAdminGetNotificationDetailLogic(r.Context(), svcCtx) + resp, err := l.AdminGetNotificationDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_notification/admingetnotificationlisthandler.go b/app/main/api/internal/handler/admin_notification/admingetnotificationlisthandler.go new file mode 100644 index 0000000..a78d873 --- /dev/null +++ b/app/main/api/internal/handler/admin_notification/admingetnotificationlisthandler.go @@ -0,0 +1,29 @@ +package admin_notification + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_notification" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetNotificationListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetNotificationListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_notification.NewAdminGetNotificationListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetNotificationList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go b/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go new file mode 100644 index 0000000..5e10911 --- /dev/null +++ b/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go @@ -0,0 +1,29 @@ +package admin_notification + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_notification" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateNotificationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateNotificationReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_notification.NewAdminUpdateNotificationLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateNotification(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_order/admincreateorderhandler.go b/app/main/api/internal/handler/admin_order/admincreateorderhandler.go new file mode 100644 index 0000000..7de114a --- /dev/null +++ b/app/main/api/internal/handler/admin_order/admincreateorderhandler.go @@ -0,0 +1,29 @@ +package admin_order + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_order" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminCreateOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminCreateOrderReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_order.NewAdminCreateOrderLogic(r.Context(), svcCtx) + resp, err := l.AdminCreateOrder(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_order/admindeleteorderhandler.go b/app/main/api/internal/handler/admin_order/admindeleteorderhandler.go new file mode 100644 index 0000000..10daf23 --- /dev/null +++ b/app/main/api/internal/handler/admin_order/admindeleteorderhandler.go @@ -0,0 +1,29 @@ +package admin_order + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_order" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminDeleteOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminDeleteOrderReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_order.NewAdminDeleteOrderLogic(r.Context(), svcCtx) + resp, err := l.AdminDeleteOrder(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_order/admingetorderdetailhandler.go b/app/main/api/internal/handler/admin_order/admingetorderdetailhandler.go new file mode 100644 index 0000000..1863edc --- /dev/null +++ b/app/main/api/internal/handler/admin_order/admingetorderdetailhandler.go @@ -0,0 +1,29 @@ +package admin_order + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_order" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetOrderDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetOrderDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_order.NewAdminGetOrderDetailLogic(r.Context(), svcCtx) + resp, err := l.AdminGetOrderDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_order/admingetorderlisthandler.go b/app/main/api/internal/handler/admin_order/admingetorderlisthandler.go new file mode 100644 index 0000000..f9a90fb --- /dev/null +++ b/app/main/api/internal/handler/admin_order/admingetorderlisthandler.go @@ -0,0 +1,29 @@ +package admin_order + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_order" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetOrderListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetOrderListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_order.NewAdminGetOrderListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetOrderList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_order/adminrefundorderhandler.go b/app/main/api/internal/handler/admin_order/adminrefundorderhandler.go new file mode 100644 index 0000000..fc2a018 --- /dev/null +++ b/app/main/api/internal/handler/admin_order/adminrefundorderhandler.go @@ -0,0 +1,29 @@ +package admin_order + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_order" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminRefundOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminRefundOrderReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_order.NewAdminRefundOrderLogic(r.Context(), svcCtx) + resp, err := l.AdminRefundOrder(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_order/adminupdateorderhandler.go b/app/main/api/internal/handler/admin_order/adminupdateorderhandler.go new file mode 100644 index 0000000..f8d6024 --- /dev/null +++ b/app/main/api/internal/handler/admin_order/adminupdateorderhandler.go @@ -0,0 +1,29 @@ +package admin_order + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_order" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateOrderReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_order.NewAdminUpdateOrderLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateOrder(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_platform_user/admincreateplatformuserhandler.go b/app/main/api/internal/handler/admin_platform_user/admincreateplatformuserhandler.go new file mode 100644 index 0000000..8ec0a1a --- /dev/null +++ b/app/main/api/internal/handler/admin_platform_user/admincreateplatformuserhandler.go @@ -0,0 +1,29 @@ +package admin_platform_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_platform_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminCreatePlatformUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminCreatePlatformUserReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_platform_user.NewAdminCreatePlatformUserLogic(r.Context(), svcCtx) + resp, err := l.AdminCreatePlatformUser(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_platform_user/admindeleteplatformuserhandler.go b/app/main/api/internal/handler/admin_platform_user/admindeleteplatformuserhandler.go new file mode 100644 index 0000000..2af6561 --- /dev/null +++ b/app/main/api/internal/handler/admin_platform_user/admindeleteplatformuserhandler.go @@ -0,0 +1,29 @@ +package admin_platform_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_platform_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminDeletePlatformUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminDeletePlatformUserReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_platform_user.NewAdminDeletePlatformUserLogic(r.Context(), svcCtx) + resp, err := l.AdminDeletePlatformUser(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_platform_user/admingetplatformuserdetailhandler.go b/app/main/api/internal/handler/admin_platform_user/admingetplatformuserdetailhandler.go new file mode 100644 index 0000000..7f3be26 --- /dev/null +++ b/app/main/api/internal/handler/admin_platform_user/admingetplatformuserdetailhandler.go @@ -0,0 +1,29 @@ +package admin_platform_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_platform_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetPlatformUserDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetPlatformUserDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_platform_user.NewAdminGetPlatformUserDetailLogic(r.Context(), svcCtx) + resp, err := l.AdminGetPlatformUserDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go b/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go new file mode 100644 index 0000000..4c93469 --- /dev/null +++ b/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go @@ -0,0 +1,29 @@ +package admin_platform_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_platform_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetPlatformUserListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetPlatformUserListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_platform_user.NewAdminGetPlatformUserListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetPlatformUserList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_platform_user/adminupdateplatformuserhandler.go b/app/main/api/internal/handler/admin_platform_user/adminupdateplatformuserhandler.go new file mode 100644 index 0000000..1b8aafc --- /dev/null +++ b/app/main/api/internal/handler/admin_platform_user/adminupdateplatformuserhandler.go @@ -0,0 +1,29 @@ +package admin_platform_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_platform_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdatePlatformUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdatePlatformUserReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_platform_user.NewAdminUpdatePlatformUserLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdatePlatformUser(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_product/admincreateproducthandler.go b/app/main/api/internal/handler/admin_product/admincreateproducthandler.go new file mode 100644 index 0000000..c4955e9 --- /dev/null +++ b/app/main/api/internal/handler/admin_product/admincreateproducthandler.go @@ -0,0 +1,29 @@ +package admin_product + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminCreateProductHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminCreateProductReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_product.NewAdminCreateProductLogic(r.Context(), svcCtx) + resp, err := l.AdminCreateProduct(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_product/admindeleteproducthandler.go b/app/main/api/internal/handler/admin_product/admindeleteproducthandler.go new file mode 100644 index 0000000..dfced85 --- /dev/null +++ b/app/main/api/internal/handler/admin_product/admindeleteproducthandler.go @@ -0,0 +1,29 @@ +package admin_product + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminDeleteProductHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminDeleteProductReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_product.NewAdminDeleteProductLogic(r.Context(), svcCtx) + resp, err := l.AdminDeleteProduct(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_product/admingetproductdetailhandler.go b/app/main/api/internal/handler/admin_product/admingetproductdetailhandler.go new file mode 100644 index 0000000..c6c4ab6 --- /dev/null +++ b/app/main/api/internal/handler/admin_product/admingetproductdetailhandler.go @@ -0,0 +1,29 @@ +package admin_product + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetProductDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetProductDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_product.NewAdminGetProductDetailLogic(r.Context(), svcCtx) + resp, err := l.AdminGetProductDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_product/admingetproductfeaturelisthandler.go b/app/main/api/internal/handler/admin_product/admingetproductfeaturelisthandler.go new file mode 100644 index 0000000..3fe0992 --- /dev/null +++ b/app/main/api/internal/handler/admin_product/admingetproductfeaturelisthandler.go @@ -0,0 +1,29 @@ +package admin_product + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetProductFeatureListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetProductFeatureListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_product.NewAdminGetProductFeatureListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetProductFeatureList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_product/admingetproductlisthandler.go b/app/main/api/internal/handler/admin_product/admingetproductlisthandler.go new file mode 100644 index 0000000..bf89202 --- /dev/null +++ b/app/main/api/internal/handler/admin_product/admingetproductlisthandler.go @@ -0,0 +1,29 @@ +package admin_product + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetProductListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetProductListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_product.NewAdminGetProductListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetProductList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_product/adminupdateproductfeatureshandler.go b/app/main/api/internal/handler/admin_product/adminupdateproductfeatureshandler.go new file mode 100644 index 0000000..ed214f4 --- /dev/null +++ b/app/main/api/internal/handler/admin_product/adminupdateproductfeatureshandler.go @@ -0,0 +1,29 @@ +package admin_product + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateProductFeaturesHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateProductFeaturesReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_product.NewAdminUpdateProductFeaturesLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateProductFeatures(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_product/adminupdateproducthandler.go b/app/main/api/internal/handler/admin_product/adminupdateproducthandler.go new file mode 100644 index 0000000..c513972 --- /dev/null +++ b/app/main/api/internal/handler/admin_product/adminupdateproducthandler.go @@ -0,0 +1,29 @@ +package admin_product + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateProductHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateProductReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_product.NewAdminUpdateProductLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateProduct(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/createpromotionlinkhandler.go b/app/main/api/internal/handler/admin_promotion/createpromotionlinkhandler.go new file mode 100644 index 0000000..42b7d04 --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/createpromotionlinkhandler.go @@ -0,0 +1,29 @@ +package admin_promotion + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func CreatePromotionLinkHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.CreatePromotionLinkReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewCreatePromotionLinkLogic(r.Context(), svcCtx) + resp, err := l.CreatePromotionLink(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/deletepromotionlinkhandler.go b/app/main/api/internal/handler/admin_promotion/deletepromotionlinkhandler.go new file mode 100644 index 0000000..b7146ac --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/deletepromotionlinkhandler.go @@ -0,0 +1,30 @@ +package admin_promotion + +import ( + "net/http" + + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" +) + +func DeletePromotionLinkHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.DeletePromotionLinkReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewDeletePromotionLinkLogic(r.Context(), svcCtx) + err := l.DeletePromotionLink(&req) + result.HttpResult(r, w, nil, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/getpromotionlinkdetailhandler.go b/app/main/api/internal/handler/admin_promotion/getpromotionlinkdetailhandler.go new file mode 100644 index 0000000..47306b1 --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/getpromotionlinkdetailhandler.go @@ -0,0 +1,29 @@ +package admin_promotion + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetPromotionLinkDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetPromotionLinkDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewGetPromotionLinkDetailLogic(r.Context(), svcCtx) + resp, err := l.GetPromotionLinkDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/getpromotionlinklisthandler.go b/app/main/api/internal/handler/admin_promotion/getpromotionlinklisthandler.go new file mode 100644 index 0000000..52afd4c --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/getpromotionlinklisthandler.go @@ -0,0 +1,29 @@ +package admin_promotion + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetPromotionLinkListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetPromotionLinkListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewGetPromotionLinkListLogic(r.Context(), svcCtx) + resp, err := l.GetPromotionLinkList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/getpromotionstatshistoryhandler.go b/app/main/api/internal/handler/admin_promotion/getpromotionstatshistoryhandler.go new file mode 100644 index 0000000..b6dd2cb --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/getpromotionstatshistoryhandler.go @@ -0,0 +1,29 @@ +package admin_promotion + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetPromotionStatsHistoryHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetPromotionStatsHistoryReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewGetPromotionStatsHistoryLogic(r.Context(), svcCtx) + resp, err := l.GetPromotionStatsHistory(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/getpromotionstatstotalhandler.go b/app/main/api/internal/handler/admin_promotion/getpromotionstatstotalhandler.go new file mode 100644 index 0000000..d041eee --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/getpromotionstatstotalhandler.go @@ -0,0 +1,29 @@ +package admin_promotion + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetPromotionStatsTotalHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetPromotionStatsTotalReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewGetPromotionStatsTotalLogic(r.Context(), svcCtx) + resp, err := l.GetPromotionStatsTotal(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/recordlinkclickhandler.go b/app/main/api/internal/handler/admin_promotion/recordlinkclickhandler.go new file mode 100644 index 0000000..5d0c55a --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/recordlinkclickhandler.go @@ -0,0 +1,29 @@ +package admin_promotion + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func RecordLinkClickHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.RecordLinkClickReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewRecordLinkClickLogic(r.Context(), svcCtx) + resp, err := l.RecordLinkClick(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_promotion/updatepromotionlinkhandler.go b/app/main/api/internal/handler/admin_promotion/updatepromotionlinkhandler.go new file mode 100644 index 0000000..bacb5f4 --- /dev/null +++ b/app/main/api/internal/handler/admin_promotion/updatepromotionlinkhandler.go @@ -0,0 +1,30 @@ +package admin_promotion + +import ( + "net/http" + + "qnc-server/app/main/api/internal/logic/admin_promotion" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" +) + +func UpdatePromotionLinkHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.UpdatePromotionLinkReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_promotion.NewUpdatePromotionLinkLogic(r.Context(), svcCtx) + err := l.UpdatePromotionLink(&req) + result.HttpResult(r, w, nil, err) + } +} diff --git a/app/main/api/internal/handler/admin_query/admingetquerycleanupconfiglisthandler.go b/app/main/api/internal/handler/admin_query/admingetquerycleanupconfiglisthandler.go new file mode 100644 index 0000000..cd44593 --- /dev/null +++ b/app/main/api/internal/handler/admin_query/admingetquerycleanupconfiglisthandler.go @@ -0,0 +1,29 @@ +package admin_query + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetQueryCleanupConfigListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetQueryCleanupConfigListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_query.NewAdminGetQueryCleanupConfigListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetQueryCleanupConfigList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_query/admingetquerycleanupdetaillisthandler.go b/app/main/api/internal/handler/admin_query/admingetquerycleanupdetaillisthandler.go new file mode 100644 index 0000000..3738948 --- /dev/null +++ b/app/main/api/internal/handler/admin_query/admingetquerycleanupdetaillisthandler.go @@ -0,0 +1,29 @@ +package admin_query + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetQueryCleanupDetailListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetQueryCleanupDetailListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_query.NewAdminGetQueryCleanupDetailListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetQueryCleanupDetailList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_query/admingetquerycleanuploglisthandler.go b/app/main/api/internal/handler/admin_query/admingetquerycleanuploglisthandler.go new file mode 100644 index 0000000..2846fe0 --- /dev/null +++ b/app/main/api/internal/handler/admin_query/admingetquerycleanuploglisthandler.go @@ -0,0 +1,29 @@ +package admin_query + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetQueryCleanupLogListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetQueryCleanupLogListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_query.NewAdminGetQueryCleanupLogListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetQueryCleanupLogList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_query/admingetquerydetailbyorderidhandler.go b/app/main/api/internal/handler/admin_query/admingetquerydetailbyorderidhandler.go new file mode 100644 index 0000000..d2f3f47 --- /dev/null +++ b/app/main/api/internal/handler/admin_query/admingetquerydetailbyorderidhandler.go @@ -0,0 +1,29 @@ +package admin_query + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetQueryDetailByOrderIdHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetQueryDetailByOrderIdReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_query.NewAdminGetQueryDetailByOrderIdLogic(r.Context(), svcCtx) + resp, err := l.AdminGetQueryDetailByOrderId(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_query/adminupdatequerycleanupconfighandler.go b/app/main/api/internal/handler/admin_query/adminupdatequerycleanupconfighandler.go new file mode 100644 index 0000000..ae72422 --- /dev/null +++ b/app/main/api/internal/handler/admin_query/adminupdatequerycleanupconfighandler.go @@ -0,0 +1,29 @@ +package admin_query + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateQueryCleanupConfigHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateQueryCleanupConfigReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_query.NewAdminUpdateQueryCleanupConfigLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateQueryCleanupConfig(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_role/createrolehandler.go b/app/main/api/internal/handler/admin_role/createrolehandler.go new file mode 100644 index 0000000..49c192c --- /dev/null +++ b/app/main/api/internal/handler/admin_role/createrolehandler.go @@ -0,0 +1,29 @@ +package admin_role + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_role" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func CreateRoleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.CreateRoleReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_role.NewCreateRoleLogic(r.Context(), svcCtx) + resp, err := l.CreateRole(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_role/deleterolehandler.go b/app/main/api/internal/handler/admin_role/deleterolehandler.go new file mode 100644 index 0000000..f82c15f --- /dev/null +++ b/app/main/api/internal/handler/admin_role/deleterolehandler.go @@ -0,0 +1,29 @@ +package admin_role + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_role" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func DeleteRoleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.DeleteRoleReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_role.NewDeleteRoleLogic(r.Context(), svcCtx) + resp, err := l.DeleteRole(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_role/getroledetailhandler.go b/app/main/api/internal/handler/admin_role/getroledetailhandler.go new file mode 100644 index 0000000..0d90c54 --- /dev/null +++ b/app/main/api/internal/handler/admin_role/getroledetailhandler.go @@ -0,0 +1,29 @@ +package admin_role + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_role" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetRoleDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetRoleDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_role.NewGetRoleDetailLogic(r.Context(), svcCtx) + resp, err := l.GetRoleDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_role/getrolelisthandler.go b/app/main/api/internal/handler/admin_role/getrolelisthandler.go new file mode 100644 index 0000000..b414c93 --- /dev/null +++ b/app/main/api/internal/handler/admin_role/getrolelisthandler.go @@ -0,0 +1,29 @@ +package admin_role + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_role" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func GetRoleListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetRoleListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_role.NewGetRoleListLogic(r.Context(), svcCtx) + resp, err := l.GetRoleList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_role/updaterolehandler.go b/app/main/api/internal/handler/admin_role/updaterolehandler.go new file mode 100644 index 0000000..26147c6 --- /dev/null +++ b/app/main/api/internal/handler/admin_role/updaterolehandler.go @@ -0,0 +1,29 @@ +package admin_role + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_role" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func UpdateRoleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.UpdateRoleReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_role.NewUpdateRoleLogic(r.Context(), svcCtx) + resp, err := l.UpdateRole(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_user/admincreateuserhandler.go b/app/main/api/internal/handler/admin_user/admincreateuserhandler.go new file mode 100644 index 0000000..1df94ad --- /dev/null +++ b/app/main/api/internal/handler/admin_user/admincreateuserhandler.go @@ -0,0 +1,29 @@ +package admin_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminCreateUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminCreateUserReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_user.NewAdminCreateUserLogic(r.Context(), svcCtx) + resp, err := l.AdminCreateUser(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_user/admindeleteuserhandler.go b/app/main/api/internal/handler/admin_user/admindeleteuserhandler.go new file mode 100644 index 0000000..338e9c2 --- /dev/null +++ b/app/main/api/internal/handler/admin_user/admindeleteuserhandler.go @@ -0,0 +1,29 @@ +package admin_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminDeleteUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminDeleteUserReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_user.NewAdminDeleteUserLogic(r.Context(), svcCtx) + resp, err := l.AdminDeleteUser(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_user/admingetuserdetailhandler.go b/app/main/api/internal/handler/admin_user/admingetuserdetailhandler.go new file mode 100644 index 0000000..b0fd247 --- /dev/null +++ b/app/main/api/internal/handler/admin_user/admingetuserdetailhandler.go @@ -0,0 +1,29 @@ +package admin_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetUserDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetUserDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_user.NewAdminGetUserDetailLogic(r.Context(), svcCtx) + resp, err := l.AdminGetUserDetail(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_user/admingetuserlisthandler.go b/app/main/api/internal/handler/admin_user/admingetuserlisthandler.go new file mode 100644 index 0000000..d5d8eed --- /dev/null +++ b/app/main/api/internal/handler/admin_user/admingetuserlisthandler.go @@ -0,0 +1,29 @@ +package admin_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminGetUserListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminGetUserListReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_user.NewAdminGetUserListLogic(r.Context(), svcCtx) + resp, err := l.AdminGetUserList(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_user/adminupdateuserhandler.go b/app/main/api/internal/handler/admin_user/adminupdateuserhandler.go new file mode 100644 index 0000000..f3ae761 --- /dev/null +++ b/app/main/api/internal/handler/admin_user/adminupdateuserhandler.go @@ -0,0 +1,29 @@ +package admin_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUpdateUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUpdateUserReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_user.NewAdminUpdateUserLogic(r.Context(), svcCtx) + resp, err := l.AdminUpdateUser(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/admin_user/adminuserinfohandler.go b/app/main/api/internal/handler/admin_user/adminuserinfohandler.go new file mode 100644 index 0000000..9d1073e --- /dev/null +++ b/app/main/api/internal/handler/admin_user/adminuserinfohandler.go @@ -0,0 +1,29 @@ +package admin_user + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/main/api/internal/logic/admin_user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func AdminUserInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AdminUserInfoReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := admin_user.NewAdminUserInfoLogic(r.Context(), svcCtx) + resp, err := l.AdminUserInfo(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/main/api/internal/handler/agent/activateagentmembershiphandler.go b/app/main/api/internal/handler/agent/activateagentmembershiphandler.go index bebf377..080b541 100644 --- a/app/main/api/internal/handler/agent/activateagentmembershiphandler.go +++ b/app/main/api/internal/handler/agent/activateagentmembershiphandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/agentrealnamehandler.go b/app/main/api/internal/handler/agent/agentrealnamehandler.go index ad8380b..08f4a8c 100644 --- a/app/main/api/internal/handler/agent/agentrealnamehandler.go +++ b/app/main/api/internal/handler/agent/agentrealnamehandler.go @@ -3,12 +3,13 @@ package agent import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func AgentRealNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/agent/agentwithdrawalhandler.go b/app/main/api/internal/handler/agent/agentwithdrawalhandler.go index 7b73d59..5ff6809 100644 --- a/app/main/api/internal/handler/agent/agentwithdrawalhandler.go +++ b/app/main/api/internal/handler/agent/agentwithdrawalhandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/applyforagenthandler.go b/app/main/api/internal/handler/agent/applyforagenthandler.go index ffdf2bb..bf48b85 100644 --- a/app/main/api/internal/handler/agent/applyforagenthandler.go +++ b/app/main/api/internal/handler/agent/applyforagenthandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/generatinglinkhandler.go b/app/main/api/internal/handler/agent/generatinglinkhandler.go index 0cdc6e4..3030876 100644 --- a/app/main/api/internal/handler/agent/generatinglinkhandler.go +++ b/app/main/api/internal/handler/agent/generatinglinkhandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getagentauditstatushandler.go b/app/main/api/internal/handler/agent/getagentauditstatushandler.go index 6ea7690..7830ed4 100644 --- a/app/main/api/internal/handler/agent/getagentauditstatushandler.go +++ b/app/main/api/internal/handler/agent/getagentauditstatushandler.go @@ -3,8 +3,8 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/agent/getagentcommissionhandler.go b/app/main/api/internal/handler/agent/getagentcommissionhandler.go index dcad1b7..c39d7dc 100644 --- a/app/main/api/internal/handler/agent/getagentcommissionhandler.go +++ b/app/main/api/internal/handler/agent/getagentcommissionhandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getagentinfohandler.go b/app/main/api/internal/handler/agent/getagentinfohandler.go index 2897fb3..b258afe 100644 --- a/app/main/api/internal/handler/agent/getagentinfohandler.go +++ b/app/main/api/internal/handler/agent/getagentinfohandler.go @@ -3,8 +3,8 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/agent/getagentmembershipproductconfighandler.go b/app/main/api/internal/handler/agent/getagentmembershipproductconfighandler.go index e531b79..e35d8d0 100644 --- a/app/main/api/internal/handler/agent/getagentmembershipproductconfighandler.go +++ b/app/main/api/internal/handler/agent/getagentmembershipproductconfighandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getagentproductconfighandler.go b/app/main/api/internal/handler/agent/getagentproductconfighandler.go index 70c5572..3f1066a 100644 --- a/app/main/api/internal/handler/agent/getagentproductconfighandler.go +++ b/app/main/api/internal/handler/agent/getagentproductconfighandler.go @@ -3,8 +3,8 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/agent/getagentrevenueinfohandler.go b/app/main/api/internal/handler/agent/getagentrevenueinfohandler.go index a2dc1b0..54c8727 100644 --- a/app/main/api/internal/handler/agent/getagentrevenueinfohandler.go +++ b/app/main/api/internal/handler/agent/getagentrevenueinfohandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getagentrewardshandler.go b/app/main/api/internal/handler/agent/getagentrewardshandler.go index 6ef64b0..5d773c4 100644 --- a/app/main/api/internal/handler/agent/getagentrewardshandler.go +++ b/app/main/api/internal/handler/agent/getagentrewardshandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getagentsubordinatecontributiondetailhandler.go b/app/main/api/internal/handler/agent/getagentsubordinatecontributiondetailhandler.go index 2fc3491..c28ca78 100644 --- a/app/main/api/internal/handler/agent/getagentsubordinatecontributiondetailhandler.go +++ b/app/main/api/internal/handler/agent/getagentsubordinatecontributiondetailhandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getagentsubordinatelisthandler.go b/app/main/api/internal/handler/agent/getagentsubordinatelisthandler.go index 6a3fdf8..1bbe84b 100644 --- a/app/main/api/internal/handler/agent/getagentsubordinatelisthandler.go +++ b/app/main/api/internal/handler/agent/getagentsubordinatelisthandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getagentwithdrawalhandler.go b/app/main/api/internal/handler/agent/getagentwithdrawalhandler.go index 1271466..4766455 100644 --- a/app/main/api/internal/handler/agent/getagentwithdrawalhandler.go +++ b/app/main/api/internal/handler/agent/getagentwithdrawalhandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/getlinkdatahandler.go b/app/main/api/internal/handler/agent/getlinkdatahandler.go index 93c78da..232fe91 100644 --- a/app/main/api/internal/handler/agent/getlinkdatahandler.go +++ b/app/main/api/internal/handler/agent/getlinkdatahandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/agent/saveagentmembershipuserconfighandler.go b/app/main/api/internal/handler/agent/saveagentmembershipuserconfighandler.go index c997dbf..83bcf0b 100644 --- a/app/main/api/internal/handler/agent/saveagentmembershipuserconfighandler.go +++ b/app/main/api/internal/handler/agent/saveagentmembershipuserconfighandler.go @@ -3,9 +3,9 @@ package agent import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/agent" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/agent" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/app/getappversionhandler.go b/app/main/api/internal/handler/app/getappversionhandler.go index cdcce8e..e339907 100644 --- a/app/main/api/internal/handler/app/getappversionhandler.go +++ b/app/main/api/internal/handler/app/getappversionhandler.go @@ -3,8 +3,8 @@ package app import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/app" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/app" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/app/healthcheckhandler.go b/app/main/api/internal/handler/app/healthcheckhandler.go index a76abd3..d9442a8 100644 --- a/app/main/api/internal/handler/app/healthcheckhandler.go +++ b/app/main/api/internal/handler/app/healthcheckhandler.go @@ -3,8 +3,8 @@ package app import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/app" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/app" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/auth/getfaceverifyresulthandler.go b/app/main/api/internal/handler/auth/getfaceverifyresulthandler.go index afb2920..4acc731 100644 --- a/app/main/api/internal/handler/auth/getfaceverifyresulthandler.go +++ b/app/main/api/internal/handler/auth/getfaceverifyresulthandler.go @@ -3,12 +3,13 @@ package auth import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/auth" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/auth" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func GetFaceVerifyResultHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/auth/initfaceverifyhandler.go b/app/main/api/internal/handler/auth/initfaceverifyhandler.go index c74f236..0fa2f46 100644 --- a/app/main/api/internal/handler/auth/initfaceverifyhandler.go +++ b/app/main/api/internal/handler/auth/initfaceverifyhandler.go @@ -3,12 +3,13 @@ package auth import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/auth" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/auth" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func InitFaceVerifyHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/auth/rejectauthorizationhandler.go b/app/main/api/internal/handler/auth/rejectauthorizationhandler.go index 2c700e6..e17c42b 100644 --- a/app/main/api/internal/handler/auth/rejectauthorizationhandler.go +++ b/app/main/api/internal/handler/auth/rejectauthorizationhandler.go @@ -3,12 +3,13 @@ package auth import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/auth" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/auth" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func RejectAuthorizationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/auth/sendsmshandler.go b/app/main/api/internal/handler/auth/sendsmshandler.go index 4d0a519..ccd5aa3 100644 --- a/app/main/api/internal/handler/auth/sendsmshandler.go +++ b/app/main/api/internal/handler/auth/sendsmshandler.go @@ -3,9 +3,9 @@ package auth import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/auth" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/auth" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/auth/smsauthorizationhandler.go b/app/main/api/internal/handler/auth/smsauthorizationhandler.go index cbba05c..42f59c1 100644 --- a/app/main/api/internal/handler/auth/smsauthorizationhandler.go +++ b/app/main/api/internal/handler/auth/smsauthorizationhandler.go @@ -3,12 +3,13 @@ package auth import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/auth" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/auth" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func SmsAuthorizationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/notification/getnotificationshandler.go b/app/main/api/internal/handler/notification/getnotificationshandler.go index 6dc313f..1c72950 100644 --- a/app/main/api/internal/handler/notification/getnotificationshandler.go +++ b/app/main/api/internal/handler/notification/getnotificationshandler.go @@ -3,8 +3,8 @@ package notification import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/notification" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/notification" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/pay/alipaycallbackhandler.go b/app/main/api/internal/handler/pay/alipaycallbackhandler.go index 6ddda20..e1b69e2 100644 --- a/app/main/api/internal/handler/pay/alipaycallbackhandler.go +++ b/app/main/api/internal/handler/pay/alipaycallbackhandler.go @@ -3,8 +3,8 @@ package pay import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/pay" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/pay" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/pay/iapcallbackhandler.go b/app/main/api/internal/handler/pay/iapcallbackhandler.go index 2aa4c1d..9c10b33 100644 --- a/app/main/api/internal/handler/pay/iapcallbackhandler.go +++ b/app/main/api/internal/handler/pay/iapcallbackhandler.go @@ -3,9 +3,9 @@ package pay import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/pay" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/pay" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/pay/paymentcheckhandler.go b/app/main/api/internal/handler/pay/paymentcheckhandler.go index 592e5be..9287e8e 100644 --- a/app/main/api/internal/handler/pay/paymentcheckhandler.go +++ b/app/main/api/internal/handler/pay/paymentcheckhandler.go @@ -3,9 +3,9 @@ package pay import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/pay" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/pay" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/pay/paymenthandler.go b/app/main/api/internal/handler/pay/paymenthandler.go index 4312ac9..c3e4432 100644 --- a/app/main/api/internal/handler/pay/paymenthandler.go +++ b/app/main/api/internal/handler/pay/paymenthandler.go @@ -3,9 +3,9 @@ package pay import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/pay" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/pay" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/pay/querypaymentcheckhandler.go b/app/main/api/internal/handler/pay/querypaymentcheckhandler.go index 4ddb776..2fbf4cd 100644 --- a/app/main/api/internal/handler/pay/querypaymentcheckhandler.go +++ b/app/main/api/internal/handler/pay/querypaymentcheckhandler.go @@ -3,12 +3,13 @@ package pay import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/pay" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/pay" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func QueryPaymentCheckHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/pay/wechatpaycallbackhandler.go b/app/main/api/internal/handler/pay/wechatpaycallbackhandler.go index 68397d0..2772107 100644 --- a/app/main/api/internal/handler/pay/wechatpaycallbackhandler.go +++ b/app/main/api/internal/handler/pay/wechatpaycallbackhandler.go @@ -3,8 +3,8 @@ package pay import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/pay" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/pay" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/pay/wechatpayrefundcallbackhandler.go b/app/main/api/internal/handler/pay/wechatpayrefundcallbackhandler.go index b9bfa0a..de16101 100644 --- a/app/main/api/internal/handler/pay/wechatpayrefundcallbackhandler.go +++ b/app/main/api/internal/handler/pay/wechatpayrefundcallbackhandler.go @@ -3,8 +3,8 @@ package pay import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/pay" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/pay" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/product/getproductappbyenhandler.go b/app/main/api/internal/handler/product/getproductappbyenhandler.go index fef21c1..437264b 100644 --- a/app/main/api/internal/handler/product/getproductappbyenhandler.go +++ b/app/main/api/internal/handler/product/getproductappbyenhandler.go @@ -3,9 +3,9 @@ package product import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/product" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/product/getproductbyenhandler.go b/app/main/api/internal/handler/product/getproductbyenhandler.go index 5c5bc2f..ade590b 100644 --- a/app/main/api/internal/handler/product/getproductbyenhandler.go +++ b/app/main/api/internal/handler/product/getproductbyenhandler.go @@ -3,9 +3,9 @@ package product import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/product" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/product/getproductbyidhandler.go b/app/main/api/internal/handler/product/getproductbyidhandler.go index b4aa9a7..a66b6f4 100644 --- a/app/main/api/internal/handler/product/getproductbyidhandler.go +++ b/app/main/api/internal/handler/product/getproductbyidhandler.go @@ -3,9 +3,9 @@ package product import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/product" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/product" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/confirmquerystatehandler.go b/app/main/api/internal/handler/query/confirmquerystatehandler.go index 381a050..dba0ace 100644 --- a/app/main/api/internal/handler/query/confirmquerystatehandler.go +++ b/app/main/api/internal/handler/query/confirmquerystatehandler.go @@ -3,12 +3,13 @@ package query import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func ConfirmQueryStateHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/query/querydetailbyorderidhandler.go b/app/main/api/internal/handler/query/querydetailbyorderidhandler.go index d64e13e..c2929d5 100644 --- a/app/main/api/internal/handler/query/querydetailbyorderidhandler.go +++ b/app/main/api/internal/handler/query/querydetailbyorderidhandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/querydetailbyordernohandler.go b/app/main/api/internal/handler/query/querydetailbyordernohandler.go index 9c19172..e34752c 100644 --- a/app/main/api/internal/handler/query/querydetailbyordernohandler.go +++ b/app/main/api/internal/handler/query/querydetailbyordernohandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/queryexamplehandler.go b/app/main/api/internal/handler/query/queryexamplehandler.go index 672a1fc..36b7bd8 100644 --- a/app/main/api/internal/handler/query/queryexamplehandler.go +++ b/app/main/api/internal/handler/query/queryexamplehandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/querygeneratesharelinkhandler.go b/app/main/api/internal/handler/query/querygeneratesharelinkhandler.go index 54d060b..e1458fa 100644 --- a/app/main/api/internal/handler/query/querygeneratesharelinkhandler.go +++ b/app/main/api/internal/handler/query/querygeneratesharelinkhandler.go @@ -3,12 +3,13 @@ package query import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func QueryGenerateShareLinkHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/query/querylisthandler.go b/app/main/api/internal/handler/query/querylisthandler.go index 5698fe7..19cb5f6 100644 --- a/app/main/api/internal/handler/query/querylisthandler.go +++ b/app/main/api/internal/handler/query/querylisthandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/queryprovisionalorderhandler.go b/app/main/api/internal/handler/query/queryprovisionalorderhandler.go index 5059053..17943dd 100644 --- a/app/main/api/internal/handler/query/queryprovisionalorderhandler.go +++ b/app/main/api/internal/handler/query/queryprovisionalorderhandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/queryrecheckhandler.go b/app/main/api/internal/handler/query/queryrecheckhandler.go index 3a085f6..9747a77 100644 --- a/app/main/api/internal/handler/query/queryrecheckhandler.go +++ b/app/main/api/internal/handler/query/queryrecheckhandler.go @@ -3,12 +3,13 @@ package query import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func QueryRecheckHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/query/queryretryhandler.go b/app/main/api/internal/handler/query/queryretryhandler.go index daafa74..e6dca30 100644 --- a/app/main/api/internal/handler/query/queryretryhandler.go +++ b/app/main/api/internal/handler/query/queryretryhandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/queryserviceagenthandler.go b/app/main/api/internal/handler/query/queryserviceagenthandler.go index b4322a1..d10ad03 100644 --- a/app/main/api/internal/handler/query/queryserviceagenthandler.go +++ b/app/main/api/internal/handler/query/queryserviceagenthandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/queryserviceapphandler.go b/app/main/api/internal/handler/query/queryserviceapphandler.go index cbac130..2d3fb22 100644 --- a/app/main/api/internal/handler/query/queryserviceapphandler.go +++ b/app/main/api/internal/handler/query/queryserviceapphandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/queryservicehandler.go b/app/main/api/internal/handler/query/queryservicehandler.go index 5dcb204..0123a7a 100644 --- a/app/main/api/internal/handler/query/queryservicehandler.go +++ b/app/main/api/internal/handler/query/queryservicehandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "github.com/zeromicro/go-zero/rest/httpx" diff --git a/app/main/api/internal/handler/query/querysharedetailhandler.go b/app/main/api/internal/handler/query/querysharedetailhandler.go index 0d61ad9..a7ae365 100644 --- a/app/main/api/internal/handler/query/querysharedetailhandler.go +++ b/app/main/api/internal/handler/query/querysharedetailhandler.go @@ -3,12 +3,13 @@ package query import ( "net/http" - "github.com/zeromicro/go-zero/rest/httpx" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" + + "github.com/zeromicro/go-zero/rest/httpx" ) func QueryShareDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { diff --git a/app/main/api/internal/handler/query/querysingletesthandler.go b/app/main/api/internal/handler/query/querysingletesthandler.go index 05be329..261f3b7 100644 --- a/app/main/api/internal/handler/query/querysingletesthandler.go +++ b/app/main/api/internal/handler/query/querysingletesthandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/query/updatequerydatahandler.go b/app/main/api/internal/handler/query/updatequerydatahandler.go index 320f45b..450ef33 100644 --- a/app/main/api/internal/handler/query/updatequerydatahandler.go +++ b/app/main/api/internal/handler/query/updatequerydatahandler.go @@ -3,9 +3,9 @@ package query import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/query" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/query" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/routes.go b/app/main/api/internal/handler/routes.go index 9d7eff8..372018d 100644 --- a/app/main/api/internal/handler/routes.go +++ b/app/main/api/internal/handler/routes.go @@ -4,20 +4,516 @@ package handler import ( "net/http" - agent "qnc-server/app/user/cmd/api/internal/handler/agent" - app "qnc-server/app/user/cmd/api/internal/handler/app" - auth "qnc-server/app/user/cmd/api/internal/handler/auth" - notification "qnc-server/app/user/cmd/api/internal/handler/notification" - pay "qnc-server/app/user/cmd/api/internal/handler/pay" - product "qnc-server/app/user/cmd/api/internal/handler/product" - query "qnc-server/app/user/cmd/api/internal/handler/query" - user "qnc-server/app/user/cmd/api/internal/handler/user" - "qnc-server/app/user/cmd/api/internal/svc" + admin_agent "qnc-server/app/main/api/internal/handler/admin_agent" + admin_auth "qnc-server/app/main/api/internal/handler/admin_auth" + admin_feature "qnc-server/app/main/api/internal/handler/admin_feature" + admin_menu "qnc-server/app/main/api/internal/handler/admin_menu" + admin_notification "qnc-server/app/main/api/internal/handler/admin_notification" + admin_order "qnc-server/app/main/api/internal/handler/admin_order" + admin_platform_user "qnc-server/app/main/api/internal/handler/admin_platform_user" + admin_product "qnc-server/app/main/api/internal/handler/admin_product" + admin_promotion "qnc-server/app/main/api/internal/handler/admin_promotion" + admin_query "qnc-server/app/main/api/internal/handler/admin_query" + admin_role "qnc-server/app/main/api/internal/handler/admin_role" + admin_user "qnc-server/app/main/api/internal/handler/admin_user" + agent "qnc-server/app/main/api/internal/handler/agent" + app "qnc-server/app/main/api/internal/handler/app" + auth "qnc-server/app/main/api/internal/handler/auth" + notification "qnc-server/app/main/api/internal/handler/notification" + pay "qnc-server/app/main/api/internal/handler/pay" + product "qnc-server/app/main/api/internal/handler/product" + query "qnc-server/app/main/api/internal/handler/query" + user "qnc-server/app/main/api/internal/handler/user" + "qnc-server/app/main/api/internal/svc" "github.com/zeromicro/go-zero/rest" ) func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { + server.AddRoutes( + []rest.Route{ + { + Method: http.MethodGet, + Path: "/agent-commission-deduction/list", + Handler: admin_agent.AdminGetAgentCommissionDeductionListHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-commission/list", + Handler: admin_agent.AdminGetAgentCommissionListHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-link/list", + Handler: admin_agent.AdminGetAgentLinkListHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-membership-config/list", + Handler: admin_agent.AdminGetAgentMembershipConfigListHandler(serverCtx), + }, + { + Method: http.MethodPost, + Path: "/agent-membership-config/update", + Handler: admin_agent.AdminUpdateAgentMembershipConfigHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-membership-recharge-order/list", + Handler: admin_agent.AdminGetAgentMembershipRechargeOrderListHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-platform-deduction/list", + Handler: admin_agent.AdminGetAgentPlatformDeductionListHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-production-config/list", + Handler: admin_agent.AdminGetAgentProductionConfigListHandler(serverCtx), + }, + { + Method: http.MethodPost, + Path: "/agent-production-config/update", + Handler: admin_agent.AdminUpdateAgentProductionConfigHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-reward/list", + Handler: admin_agent.AdminGetAgentRewardListHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/agent-withdrawal/list", + Handler: admin_agent.AdminGetAgentWithdrawalListHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/list", + Handler: admin_agent.AdminGetAgentListHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/v1/admin/agent"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 登录 + Method: http.MethodPost, + Path: "/login", + Handler: admin_auth.AdminLoginHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/v1/admin/auth"), + ) + + server.AddRoutes( + []rest.Route{ + { + Method: http.MethodPost, + Path: "/create", + Handler: admin_feature.AdminCreateFeatureHandler(serverCtx), + }, + { + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_feature.AdminDeleteFeatureHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_feature.AdminGetFeatureDetailHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/list", + Handler: admin_feature.AdminGetFeatureListHandler(serverCtx), + }, + { + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_feature.AdminUpdateFeatureHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/v1/admin/feature"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 获取所有菜单(树形结构) + Method: http.MethodGet, + Path: "/all", + Handler: admin_menu.GetMenuAllHandler(serverCtx), + }, + { + // 创建菜单 + Method: http.MethodPost, + Path: "/create", + Handler: admin_menu.CreateMenuHandler(serverCtx), + }, + { + // 删除菜单 + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_menu.DeleteMenuHandler(serverCtx), + }, + { + // 获取菜单详情 + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_menu.GetMenuDetailHandler(serverCtx), + }, + { + // 获取菜单列表 + Method: http.MethodGet, + Path: "/list", + Handler: admin_menu.GetMenuListHandler(serverCtx), + }, + { + // 更新菜单 + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_menu.UpdateMenuHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/menu"), + ) + + server.AddRoutes( + []rest.Route{ + { + Method: http.MethodPost, + Path: "/create", + Handler: admin_notification.AdminCreateNotificationHandler(serverCtx), + }, + { + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_notification.AdminDeleteNotificationHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_notification.AdminGetNotificationDetailHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/list", + Handler: admin_notification.AdminGetNotificationListHandler(serverCtx), + }, + { + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_notification.AdminUpdateNotificationHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/v1/admin/notification"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 创建订单 + Method: http.MethodPost, + Path: "/create", + Handler: admin_order.AdminCreateOrderHandler(serverCtx), + }, + { + // 删除订单 + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_order.AdminDeleteOrderHandler(serverCtx), + }, + { + // 获取订单详情 + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_order.AdminGetOrderDetailHandler(serverCtx), + }, + { + // 获取订单列表 + Method: http.MethodGet, + Path: "/list", + Handler: admin_order.AdminGetOrderListHandler(serverCtx), + }, + { + // 订单退款 + Method: http.MethodPost, + Path: "/refund/:id", + Handler: admin_order.AdminRefundOrderHandler(serverCtx), + }, + { + // 更新订单 + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_order.AdminUpdateOrderHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/order"), + ) + + server.AddRoutes( + []rest.Route{ + { + Method: http.MethodPost, + Path: "/create", + Handler: admin_platform_user.AdminCreatePlatformUserHandler(serverCtx), + }, + { + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_platform_user.AdminDeletePlatformUserHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_platform_user.AdminGetPlatformUserDetailHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/list", + Handler: admin_platform_user.AdminGetPlatformUserListHandler(serverCtx), + }, + { + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_platform_user.AdminUpdatePlatformUserHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/platform_user"), + ) + + server.AddRoutes( + []rest.Route{ + { + Method: http.MethodPost, + Path: "/create", + Handler: admin_product.AdminCreateProductHandler(serverCtx), + }, + { + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_product.AdminDeleteProductHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_product.AdminGetProductDetailHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/feature/list/:product_id", + Handler: admin_product.AdminGetProductFeatureListHandler(serverCtx), + }, + { + Method: http.MethodPut, + Path: "/feature/update/:product_id", + Handler: admin_product.AdminUpdateProductFeaturesHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/list", + Handler: admin_product.AdminGetProductListHandler(serverCtx), + }, + { + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_product.AdminUpdateProductHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/v1/admin/product"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 创建推广链接 + Method: http.MethodPost, + Path: "/create", + Handler: admin_promotion.CreatePromotionLinkHandler(serverCtx), + }, + { + // 删除推广链接 + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_promotion.DeletePromotionLinkHandler(serverCtx), + }, + { + // 获取推广链接详情 + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_promotion.GetPromotionLinkDetailHandler(serverCtx), + }, + { + // 获取推广链接列表 + Method: http.MethodGet, + Path: "/list", + Handler: admin_promotion.GetPromotionLinkListHandler(serverCtx), + }, + { + // 更新推广链接 + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_promotion.UpdatePromotionLinkHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/promotion/link"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 记录链接点击 + Method: http.MethodGet, + Path: "/record/:path", + Handler: admin_promotion.RecordLinkClickHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/v1/admin/promotion/link"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 获取推广历史记录 + Method: http.MethodGet, + Path: "/history", + Handler: admin_promotion.GetPromotionStatsHistoryHandler(serverCtx), + }, + { + // 获取推广总统计 + Method: http.MethodGet, + Path: "/total", + Handler: admin_promotion.GetPromotionStatsTotalHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/promotion/stats"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 更新清理配置 + Method: http.MethodPut, + Path: "/cleanup/config", + Handler: admin_query.AdminUpdateQueryCleanupConfigHandler(serverCtx), + }, + { + // 获取清理配置列表 + Method: http.MethodGet, + Path: "/cleanup/configs", + Handler: admin_query.AdminGetQueryCleanupConfigListHandler(serverCtx), + }, + { + // 获取清理详情列表 + Method: http.MethodGet, + Path: "/cleanup/details/:log_id", + Handler: admin_query.AdminGetQueryCleanupDetailListHandler(serverCtx), + }, + { + // 获取清理日志列表 + Method: http.MethodGet, + Path: "/cleanup/logs", + Handler: admin_query.AdminGetQueryCleanupLogListHandler(serverCtx), + }, + { + // 获取查询详情 + Method: http.MethodGet, + Path: "/detail/:order_id", + Handler: admin_query.AdminGetQueryDetailByOrderIdHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/query"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 创建角色 + Method: http.MethodPost, + Path: "/create", + Handler: admin_role.CreateRoleHandler(serverCtx), + }, + { + // 删除角色 + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_role.DeleteRoleHandler(serverCtx), + }, + { + // 获取角色详情 + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_role.GetRoleDetailHandler(serverCtx), + }, + { + // 获取角色列表 + Method: http.MethodGet, + Path: "/list", + Handler: admin_role.GetRoleListHandler(serverCtx), + }, + { + // 更新角色 + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_role.UpdateRoleHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/role"), + ) + + server.AddRoutes( + []rest.Route{ + { + // 创建用户 + Method: http.MethodPost, + Path: "/create", + Handler: admin_user.AdminCreateUserHandler(serverCtx), + }, + { + // 删除用户 + Method: http.MethodDelete, + Path: "/delete/:id", + Handler: admin_user.AdminDeleteUserHandler(serverCtx), + }, + { + // 获取用户详情 + Method: http.MethodGet, + Path: "/detail/:id", + Handler: admin_user.AdminGetUserDetailHandler(serverCtx), + }, + { + // 用户信息 + Method: http.MethodGet, + Path: "/info", + Handler: admin_user.AdminUserInfoHandler(serverCtx), + }, + { + // 获取用户列表 + Method: http.MethodGet, + Path: "/list", + Handler: admin_user.AdminGetUserListHandler(serverCtx), + }, + { + // 更新用户 + Method: http.MethodPut, + Path: "/update/:id", + Handler: admin_user.AdminUpdateUserHandler(serverCtx), + }, + }, + rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret), + rest.WithPrefix("/api/v1/admin/user"), + ) + server.AddRoutes( []rest.Route{ { diff --git a/app/main/api/internal/handler/user/agentmobilecodeloginhandler.go b/app/main/api/internal/handler/user/agentmobilecodeloginhandler.go index 1eaac81..c8269eb 100644 --- a/app/main/api/internal/handler/user/agentmobilecodeloginhandler.go +++ b/app/main/api/internal/handler/user/agentmobilecodeloginhandler.go @@ -3,9 +3,9 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/user/bindmobilehandler.go b/app/main/api/internal/handler/user/bindmobilehandler.go index 8ac4e0b..16b3654 100644 --- a/app/main/api/internal/handler/user/bindmobilehandler.go +++ b/app/main/api/internal/handler/user/bindmobilehandler.go @@ -3,9 +3,9 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/user/cancelouthandler.go b/app/main/api/internal/handler/user/cancelouthandler.go index 41008d5..4a4ebf9 100644 --- a/app/main/api/internal/handler/user/cancelouthandler.go +++ b/app/main/api/internal/handler/user/cancelouthandler.go @@ -3,8 +3,8 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/user/detailhandler.go b/app/main/api/internal/handler/user/detailhandler.go index 109adc1..0689335 100644 --- a/app/main/api/internal/handler/user/detailhandler.go +++ b/app/main/api/internal/handler/user/detailhandler.go @@ -3,8 +3,8 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/user/gettokenhandler.go b/app/main/api/internal/handler/user/gettokenhandler.go index dce90e1..b25a120 100644 --- a/app/main/api/internal/handler/user/gettokenhandler.go +++ b/app/main/api/internal/handler/user/gettokenhandler.go @@ -3,8 +3,8 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" "qnc-server/common/result" ) diff --git a/app/main/api/internal/handler/user/mobilecodeloginhandler.go b/app/main/api/internal/handler/user/mobilecodeloginhandler.go index 15db414..28a1ac8 100644 --- a/app/main/api/internal/handler/user/mobilecodeloginhandler.go +++ b/app/main/api/internal/handler/user/mobilecodeloginhandler.go @@ -3,9 +3,9 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/user/mobileloginhandler.go b/app/main/api/internal/handler/user/mobileloginhandler.go index 60b3084..d02a2d1 100644 --- a/app/main/api/internal/handler/user/mobileloginhandler.go +++ b/app/main/api/internal/handler/user/mobileloginhandler.go @@ -3,9 +3,9 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/user/registerhandler.go b/app/main/api/internal/handler/user/registerhandler.go index 31d7f9f..693096b 100644 --- a/app/main/api/internal/handler/user/registerhandler.go +++ b/app/main/api/internal/handler/user/registerhandler.go @@ -3,9 +3,9 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/user/wxh5authhandler.go b/app/main/api/internal/handler/user/wxh5authhandler.go index 0e17e7b..eb33694 100644 --- a/app/main/api/internal/handler/user/wxh5authhandler.go +++ b/app/main/api/internal/handler/user/wxh5authhandler.go @@ -3,9 +3,9 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/handler/user/wxminiauthhandler.go b/app/main/api/internal/handler/user/wxminiauthhandler.go index a0dc537..5c8f276 100644 --- a/app/main/api/internal/handler/user/wxminiauthhandler.go +++ b/app/main/api/internal/handler/user/wxminiauthhandler.go @@ -3,9 +3,9 @@ package user import ( "net/http" - "qnc-server/app/user/cmd/api/internal/logic/user" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/logic/user" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/result" "qnc-server/pkg/lzkit/validator" diff --git a/app/main/api/internal/logic/admin_agent/admingetagentcommissiondeductionlistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentcommissiondeductionlistlogic.go new file mode 100644 index 0000000..c0f7780 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentcommissiondeductionlistlogic.go @@ -0,0 +1,84 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentCommissionDeductionListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentCommissionDeductionListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentCommissionDeductionListLogic { + return &AdminGetAgentCommissionDeductionListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentCommissionDeductionListLogic) AdminGetAgentCommissionDeductionList(req *types.AdminGetAgentCommissionDeductionListReq) (resp *types.AdminGetAgentCommissionDeductionListResp, err error) { + builder := l.svcCtx.AgentCommissionDeductionModel.SelectBuilder() + if req.AgentId != nil { + builder = builder.Where(squirrel.Eq{"agent_id": *req.AgentId}) + } + if req.Type != nil && *req.Type != "" { + builder = builder.Where(squirrel.Eq{"type": *req.Type}) + } + if req.Status != nil { + builder = builder.Where(squirrel.Eq{"status": *req.Status}) + } + // 产品名筛选需先查product_id + if req.ProductName != nil && *req.ProductName != "" { + products, err := l.svcCtx.ProductModel.FindAll(l.ctx, l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"product_name": *req.ProductName}), "") + if err != nil || len(products) == 0 { + return &types.AdminGetAgentCommissionDeductionListResp{Total: 0, Items: []types.AgentCommissionDeductionListItem{}}, nil + } + builder = builder.Where("product_id = ?", products[0].Id) + } + + list, total, err := l.svcCtx.AgentCommissionDeductionModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, err + } + + // 批量查product_id->name + productIds := make(map[int64]struct{}) + for _, v := range list { + productIds[v.ProductId] = struct{}{} + } + productIdArr := make([]int64, 0, len(productIds)) + for id := range productIds { + productIdArr = append(productIdArr, id) + } + productNameMap := make(map[int64]string) + if len(productIdArr) > 0 { + build := l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"id": productIdArr}) + products, _ := l.svcCtx.ProductModel.FindAll(l.ctx, build, "") + for _, p := range products { + productNameMap[p.Id] = p.ProductName + } + } + + items := make([]types.AgentCommissionDeductionListItem, 0, len(list)) + for _, v := range list { + item := types.AgentCommissionDeductionListItem{} + _ = copier.Copy(&item, v) + item.ProductName = productNameMap[v.ProductId] + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + items = append(items, item) + } + resp = &types.AdminGetAgentCommissionDeductionListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentcommissionlistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentcommissionlistlogic.go new file mode 100644 index 0000000..a2d59a8 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentcommissionlistlogic.go @@ -0,0 +1,84 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentCommissionListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentCommissionListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentCommissionListLogic { + return &AdminGetAgentCommissionListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentCommissionListLogic) AdminGetAgentCommissionList(req *types.AdminGetAgentCommissionListReq) (resp *types.AdminGetAgentCommissionListResp, err error) { + builder := l.svcCtx.AgentCommissionModel.SelectBuilder() + if req.AgentId != nil { + builder = builder.Where(squirrel.Eq{"agent_id": *req.AgentId}) + } + if req.Status != nil { + builder = builder.Where(squirrel.Eq{"status": *req.Status}) + } + // 先查出所有product_id对应的product_name(如有product_name筛选,需反查id) + var productIdFilter int64 + if req.ProductName != nil && *req.ProductName != "" { + // 只支持精确匹配,如需模糊可扩展 + products, err := l.svcCtx.ProductModel.FindAll(l.ctx, l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"product_name": *req.ProductName}), "") + if err != nil || len(products) == 0 { + return &types.AdminGetAgentCommissionListResp{Total: 0, Items: []types.AgentCommissionListItem{}}, nil + } + productIdFilter = products[0].Id + builder = builder.Where("product_id = ?", productIdFilter) + } + + list, total, err := l.svcCtx.AgentCommissionModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, err + } + + // 批量查product_name + productIds := make(map[int64]struct{}) + for _, v := range list { + productIds[v.ProductId] = struct{}{} + } + productNameMap := make(map[int64]string) + if len(productIds) > 0 { + ids := make([]int64, 0, len(productIds)) + for id := range productIds { + ids = append(ids, id) + } + builder := l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"id": ids}) + products, _ := l.svcCtx.ProductModel.FindAll(l.ctx, builder, "") + for _, p := range products { + productNameMap[p.Id] = p.ProductName + } + } + + items := make([]types.AgentCommissionListItem, 0, len(list)) + for _, v := range list { + item := types.AgentCommissionListItem{} + _ = copier.Copy(&item, v) + item.ProductName = productNameMap[v.ProductId] + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + items = append(items, item) + } + resp = &types.AdminGetAgentCommissionListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentlinklistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentlinklistlogic.go new file mode 100644 index 0000000..7e58652 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentlinklistlogic.go @@ -0,0 +1,86 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentLinkListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentLinkListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentLinkListLogic { + return &AdminGetAgentLinkListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentLinkListLogic) AdminGetAgentLinkList(req *types.AdminGetAgentLinkListReq) (resp *types.AdminGetAgentLinkListResp, err error) { + builder := l.svcCtx.AgentLinkModel.SelectBuilder() + if req.AgentId != nil { + builder = builder.Where("agent_id = ?", *req.AgentId) + } + if req.LinkIdentifier != nil && *req.LinkIdentifier != "" { + builder = builder.Where("link_identifier = ?", *req.LinkIdentifier) + } + + // 先查出所有product_id对应的product_name(如有product_name筛选,需反查id) + var productIdFilter int64 + if req.ProductName != nil && *req.ProductName != "" { + // 只支持精确匹配,如需模糊可扩展 + products, err := l.svcCtx.ProductModel.FindAll(l.ctx, l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"product_name": *req.ProductName}), "") + if err != nil || len(products) == 0 { + return &types.AdminGetAgentLinkListResp{Total: 0, Items: []types.AgentLinkListItem{}}, nil + } + productIdFilter = products[0].Id + builder = builder.Where("product_id = ?", productIdFilter) + } + + links, total, err := l.svcCtx.AgentLinkModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return nil, err + } + + // 批量查product_id->name,避免N+1 + productIdSet := make(map[int64]struct{}) + for _, link := range links { + productIdSet[link.ProductId] = struct{}{} + } + productIdList := make([]int64, 0, len(productIdSet)) + for id := range productIdSet { + productIdList = append(productIdList, id) + } + productNameMap := make(map[int64]string) + if len(productIdList) > 0 { + products, _ := l.svcCtx.ProductModel.FindAll(l.ctx, l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"id": productIdList}), "") + for _, p := range products { + productNameMap[p.Id] = p.ProductName + } + } + + items := make([]types.AgentLinkListItem, 0, len(links)) + for _, link := range links { + items = append(items, types.AgentLinkListItem{ + AgentId: link.AgentId, + ProductName: productNameMap[link.ProductId], + Price: link.Price, + LinkIdentifier: link.LinkIdentifier, + CreateTime: link.CreateTime.Format("2006-01-02 15:04:05"), + }) + } + + resp = &types.AdminGetAgentLinkListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentlistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentlistlogic.go new file mode 100644 index 0000000..a5abb91 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentlistlogic.go @@ -0,0 +1,115 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentListLogic { + return &AdminGetAgentListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentListLogic) AdminGetAgentList(req *types.AdminGetAgentListReq) (resp *types.AdminGetAgentListResp, err error) { + builder := l.svcCtx.AgentModel.SelectBuilder() + if req.Mobile != nil && *req.Mobile != "" { + builder = builder.Where("mobile = ?", *req.Mobile) + } + if req.Region != nil && *req.Region != "" { + builder = builder.Where("region = ?", *req.Region) + } + + // 新增:如果传入ParentAgentId,则查找其所有1级下级代理 + if req.ParentAgentId != nil { + closureBuilder := l.svcCtx.AgentClosureModel.SelectBuilder().Where("ancestor_id = ? AND depth = 1", *req.ParentAgentId) + closures, cerr := l.svcCtx.AgentClosureModel.FindAll(l.ctx, closureBuilder, "") + if cerr != nil { + return nil, cerr + } + if len(closures) == 0 { + resp = &types.AdminGetAgentListResp{Total: 0, Items: []types.AgentListItem{}} + return resp, nil + } + ids := make([]int64, 0, len(closures)) + for _, c := range closures { + ids = append(ids, c.DescendantId) + } + builder = builder.Where("id IN (?)", ids) + } + + agents, total, err := l.svcCtx.AgentModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return nil, err + } + + items := make([]types.AgentListItem, 0, len(agents)) + + for _, agent := range agents { + item := types.AgentListItem{ + Id: agent.Id, + UserId: agent.UserId, + LevelName: agent.LevelName, + Region: agent.Region, + CreateTime: agent.CreateTime.Format("2006-01-02 15:04:05"), + } + if req.ParentAgentId != nil { + item.ParentAgentId = *req.ParentAgentId + } + agent.Mobile, err = crypto.DecryptMobile(agent.Mobile, l.svcCtx.Config.Encrypt.SecretKey) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取代理信息, 解密手机号失败: %v", err) + } + item.Mobile = agent.Mobile + if agent.MembershipExpiryTime.Valid { + item.MembershipExpiryTime = agent.MembershipExpiryTime.Time.Format("2006-01-02 15:04:05") + } + + // 查询钱包信息 + wallet, _ := l.svcCtx.AgentWalletModel.FindOneByAgentId(l.ctx, agent.Id) + if wallet != nil { + item.Balance = wallet.Balance + item.TotalEarnings = wallet.TotalEarnings + item.FrozenBalance = wallet.FrozenBalance + item.WithdrawnAmount = wallet.WithdrawnAmount + } + + // 查询实名认证信息 + realNameInfo, _ := l.svcCtx.AgentRealNameModel.FindOneByAgentId(l.ctx, agent.Id) + if realNameInfo != nil { + item.IsRealNameVerified = realNameInfo.Status == model.AgentRealNameStatusApproved + item.RealName = realNameInfo.Name + item.IdCard = realNameInfo.IdCard + item.RealNameStatus = realNameInfo.Status + } else { + item.IsRealNameVerified = false + item.RealName = "" + item.IdCard = "" + item.RealNameStatus = "" + } + + items = append(items, item) + } + + resp = &types.AdminGetAgentListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentmembershipconfiglistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentmembershipconfiglistlogic.go new file mode 100644 index 0000000..1dd04da --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentmembershipconfiglistlogic.go @@ -0,0 +1,51 @@ +package admin_agent + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentMembershipConfigListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentMembershipConfigListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentMembershipConfigListLogic { + return &AdminGetAgentMembershipConfigListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentMembershipConfigListLogic) AdminGetAgentMembershipConfigList(req *types.AdminGetAgentMembershipConfigListReq) (resp *types.AdminGetAgentMembershipConfigListResp, err error) { + builder := l.svcCtx.AgentMembershipConfigModel.SelectBuilder() + if req.LevelName != nil && *req.LevelName != "" { + builder = builder.Where(squirrel.Eq{"level_name": *req.LevelName}) + } + list, total, err := l.svcCtx.AgentMembershipConfigModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return nil, err + } + items := make([]types.AgentMembershipConfigListItem, 0, len(list)) + for _, v := range list { + var item types.AgentMembershipConfigListItem + if err := copier.Copy(&item, v); err != nil { + l.Logger.Errorf("copy error: %v", err) + continue + } + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + items = append(items, item) + } + resp = &types.AdminGetAgentMembershipConfigListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentmembershiprechargeorderlistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentmembershiprechargeorderlistlogic.go new file mode 100644 index 0000000..4370077 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentmembershiprechargeorderlistlogic.go @@ -0,0 +1,64 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentMembershipRechargeOrderListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentMembershipRechargeOrderListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentMembershipRechargeOrderListLogic { + return &AdminGetAgentMembershipRechargeOrderListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentMembershipRechargeOrderListLogic) AdminGetAgentMembershipRechargeOrderList(req *types.AdminGetAgentMembershipRechargeOrderListReq) (resp *types.AdminGetAgentMembershipRechargeOrderListResp, err error) { + builder := l.svcCtx.AgentMembershipRechargeOrderModel.SelectBuilder() + if req.UserId != nil { + builder = builder.Where(squirrel.Eq{"user_id": *req.UserId}) + } + if req.AgentId != nil { + builder = builder.Where(squirrel.Eq{"agent_id": *req.AgentId}) + } + if req.OrderNo != nil && *req.OrderNo != "" { + builder = builder.Where(squirrel.Eq{"order_no": *req.OrderNo}) + } + if req.PlatformOrderId != nil && *req.PlatformOrderId != "" { + builder = builder.Where(squirrel.Eq{"platform_order_id": *req.PlatformOrderId}) + } + if req.Status != nil && *req.Status != "" { + builder = builder.Where(squirrel.Eq{"status": *req.Status}) + } + if req.PaymentMethod != nil && *req.PaymentMethod != "" { + builder = builder.Where(squirrel.Eq{"payment_method": *req.PaymentMethod}) + } + list, total, err := l.svcCtx.AgentMembershipRechargeOrderModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, err + } + items := make([]types.AgentMembershipRechargeOrderListItem, 0, len(list)) + for _, v := range list { + item := types.AgentMembershipRechargeOrderListItem{} + _ = copier.Copy(&item, v) + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + items = append(items, item) + } + resp = &types.AdminGetAgentMembershipRechargeOrderListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentplatformdeductionlistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentplatformdeductionlistlogic.go new file mode 100644 index 0000000..dead2be --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentplatformdeductionlistlogic.go @@ -0,0 +1,57 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentPlatformDeductionListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentPlatformDeductionListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentPlatformDeductionListLogic { + return &AdminGetAgentPlatformDeductionListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentPlatformDeductionListLogic) AdminGetAgentPlatformDeductionList(req *types.AdminGetAgentPlatformDeductionListReq) (resp *types.AdminGetAgentPlatformDeductionListResp, err error) { + builder := l.svcCtx.AgentPlatformDeductionModel.SelectBuilder() + if req.AgentId != nil { + builder = builder.Where(squirrel.Eq{"agent_id": *req.AgentId}) + } + if req.Type != nil && *req.Type != "" { + builder = builder.Where(squirrel.Eq{"type": *req.Type}) + } + if req.Status != nil { + builder = builder.Where(squirrel.Eq{"status": *req.Status}) + } + + list, total, err := l.svcCtx.AgentPlatformDeductionModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, err + } + + items := make([]types.AgentPlatformDeductionListItem, 0, len(list)) + for _, v := range list { + item := types.AgentPlatformDeductionListItem{} + _ = copier.Copy(&item, v) + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + items = append(items, item) + } + resp = &types.AdminGetAgentPlatformDeductionListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentproductionconfiglistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentproductionconfiglistlogic.go new file mode 100644 index 0000000..2fab1e6 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentproductionconfiglistlogic.go @@ -0,0 +1,74 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentProductionConfigListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentProductionConfigListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentProductionConfigListLogic { + return &AdminGetAgentProductionConfigListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentProductionConfigListLogic) AdminGetAgentProductionConfigList(req *types.AdminGetAgentProductionConfigListReq) (resp *types.AdminGetAgentProductionConfigListResp, err error) { + builder := l.svcCtx.AgentProductConfigModel.SelectBuilder() + if req.ProductName != nil && *req.ProductName != "" { + products, err := l.svcCtx.ProductModel.FindAll(l.ctx, l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"product_name": *req.ProductName}), "") + if err != nil || len(products) == 0 { + return &types.AdminGetAgentProductionConfigListResp{Total: 0, Items: []types.AgentProductionConfigItem{}}, nil + } + builder = builder.Where(squirrel.Eq{"product_id": products[0].Id}) + } + if req.Id != nil { + builder = builder.Where(squirrel.Eq{"id": *req.Id}) + } + list, total, err := l.svcCtx.AgentProductConfigModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, err + } + // 查询所有涉及到的product_id对应的product_name + productIdSet := make(map[int64]struct{}) + for _, v := range list { + productIdSet[v.ProductId] = struct{}{} + } + productIdArr := make([]int64, 0, len(productIdSet)) + for id := range productIdSet { + productIdArr = append(productIdArr, id) + } + productNameMap := make(map[int64]string) + if len(productIdArr) > 0 { + build := l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"id": productIdArr}) + products, _ := l.svcCtx.ProductModel.FindAll(l.ctx, build, "") + for _, p := range products { + productNameMap[p.Id] = p.ProductName + } + } + items := make([]types.AgentProductionConfigItem, 0, len(list)) + for _, v := range list { + item := types.AgentProductionConfigItem{} + _ = copier.Copy(&item, v) + item.ProductName = productNameMap[v.ProductId] + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + items = append(items, item) + } + resp = &types.AdminGetAgentProductionConfigListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentrewardlistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentrewardlistlogic.go new file mode 100644 index 0000000..eaf84f3 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentrewardlistlogic.go @@ -0,0 +1,58 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentRewardListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentRewardListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentRewardListLogic { + return &AdminGetAgentRewardListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentRewardListLogic) AdminGetAgentRewardList(req *types.AdminGetAgentRewardListReq) (resp *types.AdminGetAgentRewardListResp, err error) { + builder := l.svcCtx.AgentRewardsModel.SelectBuilder() + if req.AgentId != nil { + builder = builder.Where(squirrel.Eq{"agent_id": *req.AgentId}) + } + if req.RelationAgentId != nil { + builder = builder.Where(squirrel.Eq{"relation_agent_id": *req.RelationAgentId}) + } + if req.Type != nil && *req.Type != "" { + builder = builder.Where(squirrel.Eq{"type": *req.Type}) + } + list, total, err := l.svcCtx.AgentRewardsModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, err + } + items := make([]types.AgentRewardListItem, 0, len(list)) + for _, v := range list { + item := types.AgentRewardListItem{} + _ = copier.Copy(&item, v) + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + if v.RelationAgentId.Valid { + item.RelationAgentId = v.RelationAgentId.Int64 + } + items = append(items, item) + } + resp = &types.AdminGetAgentRewardListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go new file mode 100644 index 0000000..c74dafe --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go @@ -0,0 +1,59 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/Masterminds/squirrel" + "github.com/jinzhu/copier" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetAgentWithdrawalListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetAgentWithdrawalListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetAgentWithdrawalListLogic { + return &AdminGetAgentWithdrawalListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetAgentWithdrawalListLogic) AdminGetAgentWithdrawalList(req *types.AdminGetAgentWithdrawalListReq) (resp *types.AdminGetAgentWithdrawalListResp, err error) { + builder := l.svcCtx.AgentWithdrawalModel.SelectBuilder() + if req.AgentId != nil { + builder = builder.Where(squirrel.Eq{"agent_id": *req.AgentId}) + } + if req.Status != nil { + builder = builder.Where(squirrel.Eq{"status": *req.Status}) + } + if req.WithdrawNo != nil && *req.WithdrawNo != "" { + builder = builder.Where(squirrel.Eq{"withdraw_no": *req.WithdrawNo}) + } + list, total, err := l.svcCtx.AgentWithdrawalModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, err + } + items := make([]types.AgentWithdrawalListItem, 0, len(list)) + for _, v := range list { + item := types.AgentWithdrawalListItem{} + _ = copier.Copy(&item, v) + item.Remark = "" + if v.Remark.Valid { + item.Remark = v.Remark.String + } + item.CreateTime = v.CreateTime.Format("2006-01-02 15:04:05") + items = append(items, item) + } + resp = &types.AdminGetAgentWithdrawalListResp{ + Total: total, + Items: items, + } + return +} diff --git a/app/main/api/internal/logic/admin_agent/adminupdateagentmembershipconfiglogic.go b/app/main/api/internal/logic/admin_agent/adminupdateagentmembershipconfiglogic.go new file mode 100644 index 0000000..f9652ea --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/adminupdateagentmembershipconfiglogic.go @@ -0,0 +1,96 @@ +package admin_agent + +import ( + "context" + "database/sql" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminUpdateAgentMembershipConfigLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateAgentMembershipConfigLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateAgentMembershipConfigLogic { + return &AdminUpdateAgentMembershipConfigLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateAgentMembershipConfigLogic) AdminUpdateAgentMembershipConfig(req *types.AdminUpdateAgentMembershipConfigReq) (resp *types.AdminUpdateAgentMembershipConfigResp, err error) { + cfg, err := l.svcCtx.AgentMembershipConfigModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, err + } + cfg.LevelName = req.LevelName + cfg.Price = sql.NullFloat64{Float64: req.Price, Valid: true} + cfg.ReportCommission = sql.NullFloat64{Float64: req.ReportCommission, Valid: true} + if req.LowerActivityReward == nil { + cfg.LowerActivityReward = sql.NullFloat64{Valid: false} + } else { + cfg.LowerActivityReward = sql.NullFloat64{Float64: *req.LowerActivityReward, Valid: true} + } + if req.NewActivityReward == nil { + cfg.NewActivityReward = sql.NullFloat64{Valid: false} + } else { + cfg.NewActivityReward = sql.NullFloat64{Float64: *req.NewActivityReward, Valid: true} + } + if req.LowerStandardCount == nil { + cfg.LowerStandardCount = sql.NullInt64{Valid: false} + } else { + cfg.LowerStandardCount = sql.NullInt64{Int64: *req.LowerStandardCount, Valid: true} + } + if req.NewLowerStandardCount == nil { + cfg.NewLowerStandardCount = sql.NullInt64{Valid: false} + } else { + cfg.NewLowerStandardCount = sql.NullInt64{Int64: *req.NewLowerStandardCount, Valid: true} + } + if req.LowerWithdrawRewardRatio == nil { + cfg.LowerWithdrawRewardRatio = sql.NullFloat64{Valid: false} + } else { + cfg.LowerWithdrawRewardRatio = sql.NullFloat64{Float64: *req.LowerWithdrawRewardRatio, Valid: true} + } + if req.LowerConvertVipReward == nil { + cfg.LowerConvertVipReward = sql.NullFloat64{Valid: false} + } else { + cfg.LowerConvertVipReward = sql.NullFloat64{Float64: *req.LowerConvertVipReward, Valid: true} + } + if req.LowerConvertSvipReward == nil { + cfg.LowerConvertSvipReward = sql.NullFloat64{Valid: false} + } else { + cfg.LowerConvertSvipReward = sql.NullFloat64{Float64: *req.LowerConvertSvipReward, Valid: true} + } + if req.ExemptionAmount == nil { + cfg.ExemptionAmount = sql.NullFloat64{Valid: false} + } else { + cfg.ExemptionAmount = sql.NullFloat64{Float64: *req.ExemptionAmount, Valid: true} + } + if req.PriceIncreaseMax == nil { + cfg.PriceIncreaseMax = sql.NullFloat64{Valid: false} + } else { + cfg.PriceIncreaseMax = sql.NullFloat64{Float64: *req.PriceIncreaseMax, Valid: true} + } + if req.PriceRatio == nil { + cfg.PriceRatio = sql.NullFloat64{Valid: false} + } else { + cfg.PriceRatio = sql.NullFloat64{Float64: *req.PriceRatio, Valid: true} + } + if req.PriceIncreaseAmount == nil { + cfg.PriceIncreaseAmount = sql.NullFloat64{Valid: false} + } else { + cfg.PriceIncreaseAmount = sql.NullFloat64{Float64: *req.PriceIncreaseAmount, Valid: true} + } + _, err = l.svcCtx.AgentMembershipConfigModel.Update(l.ctx, nil, cfg) + if err != nil { + return nil, err + } + resp = &types.AdminUpdateAgentMembershipConfigResp{Success: true} + return +} diff --git a/app/main/api/internal/logic/admin_agent/adminupdateagentproductionconfiglogic.go b/app/main/api/internal/logic/admin_agent/adminupdateagentproductionconfiglogic.go new file mode 100644 index 0000000..f073227 --- /dev/null +++ b/app/main/api/internal/logic/admin_agent/adminupdateagentproductionconfiglogic.go @@ -0,0 +1,42 @@ +package admin_agent + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminUpdateAgentProductionConfigLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateAgentProductionConfigLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateAgentProductionConfigLogic { + return &AdminUpdateAgentProductionConfigLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateAgentProductionConfigLogic) AdminUpdateAgentProductionConfig(req *types.AdminUpdateAgentProductionConfigReq) (resp *types.AdminUpdateAgentProductionConfigResp, err error) { + cfg, err := l.svcCtx.AgentProductConfigModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, err + } + cfg.CostPrice = req.CostPrice + cfg.PriceRangeMin = req.PriceRangeMin + cfg.PriceRangeMax = req.PriceRangeMax + cfg.PricingStandard = req.PricingStandard + cfg.OverpricingRatio = req.OverpricingRatio + _, err = l.svcCtx.AgentProductConfigModel.Update(l.ctx, nil, cfg) + if err != nil { + return nil, err + } + resp = &types.AdminUpdateAgentProductionConfigResp{Success: true} + return +} diff --git a/app/main/api/internal/logic/admin_auth/adminloginlogic.go b/app/main/api/internal/logic/admin_auth/adminloginlogic.go new file mode 100644 index 0000000..1409bbe --- /dev/null +++ b/app/main/api/internal/logic/admin_auth/adminloginlogic.go @@ -0,0 +1,85 @@ +package admin_auth + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + jwtx "qnc-server/common/jwt" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminLoginLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminLoginLogic { + return &AdminLoginLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminLoginLogic) AdminLogin(req *types.AdminLoginReq) (resp *types.AdminLoginResp, err error) { + // 1. 验证验证码 + if !req.Captcha { + return nil, errors.Wrapf(xerr.NewErrMsg("验证码错误"), "用户登录, 验证码错误, 验证码: %v", req.Captcha) + } + + // 2. 验证用户名和密码 + user, err := l.svcCtx.AdminUserModel.FindOneByUsername(l.ctx, req.Username) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("用户名或密码错误"), "用户登录, 用户名或密码错误, 用户名: %s", req.Username) + } + + // 3. 验证密码 + if !crypto.PasswordVerify(req.Password, user.Password) { + return nil, errors.Wrapf(xerr.NewErrMsg("用户名或密码错误"), "用户登录, 用户名或密码错误, 用户名: %s", req.Username) + } + + // 4. 获取权限 + adminUserRoleBuilder := l.svcCtx.AdminUserRoleModel.SelectBuilder().Where(squirrel.Eq{"user_id": user.Id}) + permissions, err := l.svcCtx.AdminUserRoleModel.FindAll(l.ctx, adminUserRoleBuilder, "role_id DESC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("获取权限失败"), "用户登录, 获取权限失败, 用户名: %s", req.Username) + } + + // 获取角色ID数组 + roleIds := make([]int64, 0) + for _, permission := range permissions { + roleIds = append(roleIds, permission.RoleId) + } + + // 获取角色名称 + roles := make([]string, 0) + for _, roleId := range roleIds { + role, err := l.svcCtx.AdminRoleModel.FindOne(l.ctx, roleId) + if err != nil { + continue + } + roles = append(roles, role.RoleCode) + } + + // 5. 生成token + refreshToken := l.svcCtx.Config.JwtAuth.RefreshAfter + expiresAt := l.svcCtx.Config.JwtAuth.AccessExpire + token, err := jwtx.GenerateJwtToken(user.Id, l.svcCtx.Config.JwtAuth.AccessSecret, expiresAt) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("生成token失败"), "用户登录, 生成token失败, 用户名: %s", req.Username) + } + + return &types.AdminLoginResp{ + AccessToken: token, + AccessExpire: expiresAt, + RefreshAfter: refreshToken, + Roles: roles, + }, nil +} diff --git a/app/main/api/internal/logic/admin_feature/admincreatefeaturelogic.go b/app/main/api/internal/logic/admin_feature/admincreatefeaturelogic.go new file mode 100644 index 0000000..6be8dc6 --- /dev/null +++ b/app/main/api/internal/logic/admin_feature/admincreatefeaturelogic.go @@ -0,0 +1,46 @@ +package admin_feature + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminCreateFeatureLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminCreateFeatureLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateFeatureLogic { + return &AdminCreateFeatureLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminCreateFeatureLogic) AdminCreateFeature(req *types.AdminCreateFeatureReq) (resp *types.AdminCreateFeatureResp, err error) { + // 1. 数据转换 + data := &model.Feature{ + ApiId: req.ApiId, + Name: req.Name, + } + + // 2. 数据库操作 + result, err := l.svcCtx.FeatureModel.Insert(l.ctx, nil, data) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "创建功能失败, err: %v, req: %+v", err, req) + } + + // 3. 返回结果 + id, _ := result.LastInsertId() + return &types.AdminCreateFeatureResp{Id: id}, nil +} diff --git a/app/main/api/internal/logic/admin_feature/admindeletefeaturelogic.go b/app/main/api/internal/logic/admin_feature/admindeletefeaturelogic.go new file mode 100644 index 0000000..fe9fed6 --- /dev/null +++ b/app/main/api/internal/logic/admin_feature/admindeletefeaturelogic.go @@ -0,0 +1,45 @@ +package admin_feature + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminDeleteFeatureLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminDeleteFeatureLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteFeatureLogic { + return &AdminDeleteFeatureLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminDeleteFeatureLogic) AdminDeleteFeature(req *types.AdminDeleteFeatureReq) (resp *types.AdminDeleteFeatureResp, err error) { + // 1. 查询记录是否存在 + record, err := l.svcCtx.FeatureModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查找功能失败, err: %v, id: %d", err, req.Id) + } + + // 2. 执行软删除 + err = l.svcCtx.FeatureModel.DeleteSoft(l.ctx, nil, record) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "删除功能失败, err: %v, id: %d", err, req.Id) + } + + // 3. 返回结果 + return &types.AdminDeleteFeatureResp{Success: true}, nil +} diff --git a/app/main/api/internal/logic/admin_feature/admingetfeaturedetaillogic.go b/app/main/api/internal/logic/admin_feature/admingetfeaturedetaillogic.go new file mode 100644 index 0000000..0b56ade --- /dev/null +++ b/app/main/api/internal/logic/admin_feature/admingetfeaturedetaillogic.go @@ -0,0 +1,46 @@ +package admin_feature + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetFeatureDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetFeatureDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetFeatureDetailLogic { + return &AdminGetFeatureDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetFeatureDetailLogic) AdminGetFeatureDetail(req *types.AdminGetFeatureDetailReq) (resp *types.AdminGetFeatureDetailResp, err error) { + // 1. 查询记录 + record, err := l.svcCtx.FeatureModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查找功能失败, err: %v, id: %d", err, req.Id) + } + + // 2. 构建响应 + resp = &types.AdminGetFeatureDetailResp{ + Id: record.Id, + ApiId: record.ApiId, + Name: record.Name, + CreateTime: record.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: record.UpdateTime.Format("2006-01-02 15:04:05"), + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_feature/admingetfeaturelistlogic.go b/app/main/api/internal/logic/admin_feature/admingetfeaturelistlogic.go new file mode 100644 index 0000000..e23dafc --- /dev/null +++ b/app/main/api/internal/logic/admin_feature/admingetfeaturelistlogic.go @@ -0,0 +1,66 @@ +package admin_feature + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetFeatureListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetFeatureListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetFeatureListLogic { + return &AdminGetFeatureListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetFeatureListLogic) AdminGetFeatureList(req *types.AdminGetFeatureListReq) (resp *types.AdminGetFeatureListResp, err error) { + // 1. 构建查询条件 + builder := l.svcCtx.FeatureModel.SelectBuilder() + + // 2. 添加查询条件 + if req.ApiId != nil && *req.ApiId != "" { + builder = builder.Where("api_id LIKE ?", "%"+*req.ApiId+"%") + } + if req.Name != nil && *req.Name != "" { + builder = builder.Where("name LIKE ?", "%"+*req.Name+"%") + } + + // 3. 执行分页查询 + list, total, err := l.svcCtx.FeatureModel.FindPageListByPageWithTotal( + l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查询功能列表失败, err: %v, req: %+v", err, req) + } + + // 4. 构建响应列表 + items := make([]types.FeatureListItem, 0, len(list)) + for _, item := range list { + listItem := types.FeatureListItem{ + Id: item.Id, + ApiId: item.ApiId, + Name: item.Name, + CreateTime: item.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: item.UpdateTime.Format("2006-01-02 15:04:05"), + } + items = append(items, listItem) + } + + // 5. 返回结果 + return &types.AdminGetFeatureListResp{ + Total: total, + Items: items, + }, nil +} diff --git a/app/main/api/internal/logic/admin_feature/adminupdatefeaturelogic.go b/app/main/api/internal/logic/admin_feature/adminupdatefeaturelogic.go new file mode 100644 index 0000000..e1e6f14 --- /dev/null +++ b/app/main/api/internal/logic/admin_feature/adminupdatefeaturelogic.go @@ -0,0 +1,30 @@ +package admin_feature + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminUpdateFeatureLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateFeatureLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateFeatureLogic { + return &AdminUpdateFeatureLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateFeatureLogic) AdminUpdateFeature(req *types.AdminUpdateFeatureReq) (resp *types.AdminUpdateFeatureResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/app/main/api/internal/logic/admin_menu/createmenulogic.go b/app/main/api/internal/logic/admin_menu/createmenulogic.go new file mode 100644 index 0000000..d6592b1 --- /dev/null +++ b/app/main/api/internal/logic/admin_menu/createmenulogic.go @@ -0,0 +1,97 @@ +package admin_menu + +import ( + "context" + "database/sql" + "encoding/json" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type CreateMenuLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewCreateMenuLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateMenuLogic { + return &CreateMenuLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *CreateMenuLogic) CreateMenu(req *types.CreateMenuReq) (resp *types.CreateMenuResp, err error) { + // 1. 参数验证 + if req.Name == "" { + return nil, errors.Wrapf(xerr.NewErrMsg("菜单名称不能为空"), "菜单名称不能为空") + } + if req.Type == "menu" && req.Component == "" { + return nil, errors.Wrapf(xerr.NewErrMsg("组件路径不能为空"), "组件路径不能为空") + } + + // 2. 检查名称和路径是否重复 + exists, err := l.svcCtx.AdminMenuModel.FindOneByNamePath(l.ctx, req.Name, req.Path) + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询菜单失败, err: %v", err) + } + if exists != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("菜单名称或路径已存在"), "菜单名称或路径已存在") + } + + // 3. 检查父菜单是否存在(如果不是根菜单) + if req.Pid > 0 { + parentMenu, err := l.svcCtx.AdminMenuModel.FindOne(l.ctx, req.Pid) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询父菜单失败, id: %d, err: %v", req.Pid, err) + } + if parentMenu == nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "父菜单不存在, id: %d", req.Pid) + } + } + + // 4. 将类型标签转换为值 + typeValue, err := l.svcCtx.DictService.GetDictValue(l.ctx, "admin_menu_type", req.Type) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "菜单类型无效: %v", err) + } + + // 5. 创建菜单记录 + menu := &model.AdminMenu{ + Pid: req.Pid, + Name: req.Name, + Path: req.Path, + Component: req.Component, + Redirect: sql.NullString{String: req.Redirect, Valid: req.Redirect != ""}, + Status: req.Status, + Type: typeValue, + Sort: req.Sort, + CreateTime: time.Now(), + UpdateTime: time.Now(), + } + + // 将Meta转换为JSON字符串 + metaJson, err := json.Marshal(req.Meta) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "Meta数据格式错误: %v", err) + } + menu.Meta = string(metaJson) + + // 6. 保存到数据库 + _, err = l.svcCtx.AdminMenuModel.Insert(l.ctx, nil, menu) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建菜单失败, err: %v", err) + } + + return &types.CreateMenuResp{ + Id: menu.Id, + }, nil +} diff --git a/app/main/api/internal/logic/admin_menu/deletemenulogic.go b/app/main/api/internal/logic/admin_menu/deletemenulogic.go new file mode 100644 index 0000000..02c701d --- /dev/null +++ b/app/main/api/internal/logic/admin_menu/deletemenulogic.go @@ -0,0 +1,30 @@ +package admin_menu + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type DeleteMenuLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewDeleteMenuLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteMenuLogic { + return &DeleteMenuLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *DeleteMenuLogic) DeleteMenu(req *types.DeleteMenuReq) (resp *types.DeleteMenuResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/app/main/api/internal/logic/admin_menu/getmenualllogic.go b/app/main/api/internal/logic/admin_menu/getmenualllogic.go new file mode 100644 index 0000000..2e9fc66 --- /dev/null +++ b/app/main/api/internal/logic/admin_menu/getmenualllogic.go @@ -0,0 +1,250 @@ +package admin_menu + +import ( + "context" + "sort" + "strconv" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/Masterminds/squirrel" + "github.com/bytedance/sonic" + "github.com/pkg/errors" + "github.com/samber/lo" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type GetMenuAllLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetMenuAllLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetMenuAllLogic { + return &GetMenuAllLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetMenuAllLogic) GetMenuAll(req *types.GetMenuAllReq) (resp *[]types.GetMenuAllResp, err error) { + userId, err := ctxdata.GetUidFromCtx(l.ctx) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户ID失败, %+v", err) + } + + // 使用MapReduceVoid并发获取用户角色 + var roleIds []int64 + var permissions []*struct { + RoleId int64 + } + + type UserRoleResult struct { + RoleId int64 + } + + err = mr.MapReduceVoid( + func(source chan<- interface{}) { + adminUserRoleBuilder := l.svcCtx.AdminUserRoleModel.SelectBuilder().Where(squirrel.Eq{"user_id": userId}) + source <- adminUserRoleBuilder + }, + func(item interface{}, writer mr.Writer[*UserRoleResult], cancel func(error)) { + builder := item.(squirrel.SelectBuilder) + result, err := l.svcCtx.AdminUserRoleModel.FindAll(l.ctx, builder, "role_id DESC") + if err != nil { + cancel(errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户角色信息失败, %+v", err)) + return + } + + for _, r := range result { + writer.Write(&UserRoleResult{RoleId: r.RoleId}) + } + }, + func(pipe <-chan *UserRoleResult, cancel func(error)) { + for item := range pipe { + permissions = append(permissions, &struct{ RoleId int64 }{RoleId: item.RoleId}) + } + }, + ) + if err != nil { + return nil, err + } + + for _, permission := range permissions { + roleIds = append(roleIds, permission.RoleId) + } + + // 使用MapReduceVoid并发获取角色菜单 + var menuIds []int64 + var roleMenus []*struct { + MenuId int64 + } + + type RoleMenuResult struct { + MenuId int64 + } + + err = mr.MapReduceVoid( + func(source chan<- interface{}) { + getRoleMenuBuilder := l.svcCtx.AdminRoleMenuModel.SelectBuilder().Where(squirrel.Eq{"role_id": roleIds}) + source <- getRoleMenuBuilder + }, + func(item interface{}, writer mr.Writer[*RoleMenuResult], cancel func(error)) { + builder := item.(squirrel.SelectBuilder) + result, err := l.svcCtx.AdminRoleMenuModel.FindAll(l.ctx, builder, "id DESC") + if err != nil { + cancel(errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取角色菜单信息失败, %+v", err)) + return + } + + for _, r := range result { + writer.Write(&RoleMenuResult{MenuId: r.MenuId}) + } + }, + func(pipe <-chan *RoleMenuResult, cancel func(error)) { + for item := range pipe { + roleMenus = append(roleMenus, &struct{ MenuId int64 }{MenuId: item.MenuId}) + } + }, + ) + if err != nil { + return nil, err + } + + for _, roleMenu := range roleMenus { + menuIds = append(menuIds, roleMenu.MenuId) + } + + // 使用MapReduceVoid并发获取菜单 + type AdminMenuStruct struct { + Id int64 + Pid int64 + Name string + Path string + Component string + Redirect struct { + String string + Valid bool + } + Meta string + Sort int64 + Type int64 + Status int64 + } + + var menus []*AdminMenuStruct + + err = mr.MapReduceVoid( + func(source chan<- interface{}) { + adminMenuBuilder := l.svcCtx.AdminMenuModel.SelectBuilder().Where(squirrel.Eq{"id": menuIds}) + source <- adminMenuBuilder + }, + func(item interface{}, writer mr.Writer[*AdminMenuStruct], cancel func(error)) { + builder := item.(squirrel.SelectBuilder) + result, err := l.svcCtx.AdminMenuModel.FindAll(l.ctx, builder, "sort ASC") + if err != nil { + cancel(errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取菜单信息失败, %+v", err)) + return + } + + for _, r := range result { + menu := &AdminMenuStruct{ + Id: r.Id, + Pid: r.Pid, + Name: r.Name, + Path: r.Path, + Component: r.Component, + Redirect: r.Redirect, + Meta: r.Meta, + Sort: r.Sort, + Type: r.Type, + Status: r.Status, + } + writer.Write(menu) + } + }, + func(pipe <-chan *AdminMenuStruct, cancel func(error)) { + for item := range pipe { + menus = append(menus, item) + } + }, + ) + if err != nil { + return nil, err + } + + // 转换为types.Menu结构并存储到映射表 + menuMap := make(map[string]types.GetMenuAllResp) + for _, menu := range menus { + // 只处理状态正常的菜单 + if menu.Status != 1 { + continue + } + + meta := make(map[string]interface{}) + err = sonic.Unmarshal([]byte(menu.Meta), &meta) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "解析菜单Meta信息失败, %+v", err) + } + + redirect := func() string { + if menu.Redirect.Valid { + return menu.Redirect.String + } + return "" + }() + + menuId := strconv.FormatInt(menu.Id, 10) + menuMap[menuId] = types.GetMenuAllResp{ + Name: menu.Name, + Path: menu.Path, + Redirect: redirect, + Component: menu.Component, + Sort: menu.Sort, + Meta: meta, + Children: make([]types.GetMenuAllResp, 0), + } + } + + // 按ParentId将菜单分组 + menuGroups := lo.GroupBy(menus, func(item *AdminMenuStruct) int64 { + return item.Pid + }) + + // 递归构建菜单树 + var buildMenuTree func(parentId int64) []types.GetMenuAllResp + buildMenuTree = func(parentId int64) []types.GetMenuAllResp { + children := make([]types.GetMenuAllResp, 0) + + childMenus, ok := menuGroups[parentId] + if !ok { + return children + } + + // 按Sort排序 + sort.Slice(childMenus, func(i, j int) bool { + return childMenus[i].Sort < childMenus[j].Sort + }) + + for _, childMenu := range childMenus { + menuId := strconv.FormatInt(childMenu.Id, 10) + if menu, exists := menuMap[menuId]; exists && childMenu.Status == 1 { + // 递归构建子菜单 + menu.Children = buildMenuTree(childMenu.Id) + children = append(children, menu) + } + } + + return children + } + + // 从根菜单开始构建(ParentId为0的是根菜单) + menuTree := buildMenuTree(0) + + return &menuTree, nil +} diff --git a/app/main/api/internal/logic/admin_menu/getmenudetaillogic.go b/app/main/api/internal/logic/admin_menu/getmenudetaillogic.go new file mode 100644 index 0000000..58861bc --- /dev/null +++ b/app/main/api/internal/logic/admin_menu/getmenudetaillogic.go @@ -0,0 +1,30 @@ +package admin_menu + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetMenuDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetMenuDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetMenuDetailLogic { + return &GetMenuDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetMenuDetailLogic) GetMenuDetail(req *types.GetMenuDetailReq) (resp *types.GetMenuDetailResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/app/main/api/internal/logic/admin_menu/getmenulistlogic.go b/app/main/api/internal/logic/admin_menu/getmenulistlogic.go new file mode 100644 index 0000000..2a46e91 --- /dev/null +++ b/app/main/api/internal/logic/admin_menu/getmenulistlogic.go @@ -0,0 +1,109 @@ +package admin_menu + +import ( + "context" + "encoding/json" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type GetMenuListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetMenuListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetMenuListLogic { + return &GetMenuListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetMenuListLogic) GetMenuList(req *types.GetMenuListReq) (resp []types.MenuListItem, err error) { + // 构建查询条件 + builder := l.svcCtx.AdminMenuModel.SelectBuilder() + + // 添加筛选条件 + if len(req.Name) > 0 { + builder = builder.Where("name LIKE ?", "%"+req.Name+"%") + } + if len(req.Path) > 0 { + builder = builder.Where("path LIKE ?", "%"+req.Path+"%") + } + if req.Status != -1 { + builder = builder.Where("status = ?", req.Status) + } + if req.Type != "" { + builder = builder.Where("type = ?", req.Type) + } + + // 排序但不分页,获取所有符合条件的菜单 + builder = builder.OrderBy("sort ASC") + + // 获取所有菜单 + menus, err := l.svcCtx.AdminMenuModel.FindAll(l.ctx, builder, "id ASC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询菜单失败, err: %v", err) + } + + // 将菜单按ID存入map + menuMap := make(map[int64]types.MenuListItem) + for _, menu := range menus { + var meta map[string]interface{} + err := json.Unmarshal([]byte(menu.Meta), &meta) + if err != nil { + logx.Errorf("解析Meta字段失败: %v", err) + meta = make(map[string]interface{}) + } + menuType, err := l.svcCtx.DictService.GetDictLabel(l.ctx, "admin_menu_type", menu.Type) + if err != nil { + logx.Errorf("获取菜单类型失败: %v", err) + menuType = "" + } + item := types.MenuListItem{ + Id: menu.Id, + Pid: menu.Pid, + Name: menu.Name, + Path: menu.Path, + Component: menu.Component, + Redirect: menu.Redirect.String, + Meta: meta, + Status: menu.Status, + Type: menuType, + Sort: menu.Sort, + CreateTime: menu.CreateTime.Format("2006-01-02 15:04:05"), + Children: make([]types.MenuListItem, 0), + } + menuMap[menu.Id] = item + } + + // 构建父子关系 + for _, menu := range menus { + if menu.Pid > 0 { + // 找到父菜单 + if parent, exists := menuMap[menu.Pid]; exists { + // 添加当前菜单到父菜单的子菜单列表 + children := append(parent.Children, menuMap[menu.Id]) + parent.Children = children + menuMap[menu.Pid] = parent + } + } + } + + // 提取顶级菜单(ParentId为0)到响应列表 + result := make([]types.MenuListItem, 0) + for _, menu := range menus { + if menu.Pid == 0 { + result = append(result, menuMap[menu.Id]) + } + } + + return result, nil +} diff --git a/app/main/api/internal/logic/admin_menu/updatemenulogic.go b/app/main/api/internal/logic/admin_menu/updatemenulogic.go new file mode 100644 index 0000000..621a620 --- /dev/null +++ b/app/main/api/internal/logic/admin_menu/updatemenulogic.go @@ -0,0 +1,96 @@ +package admin_menu + +import ( + "context" + "database/sql" + "encoding/json" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type UpdateMenuLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewUpdateMenuLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateMenuLogic { + return &UpdateMenuLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *UpdateMenuLogic) UpdateMenu(req *types.UpdateMenuReq) (resp *types.UpdateMenuResp, err error) { + // 1. 检查菜单是否存在 + menu, err := l.svcCtx.AdminMenuModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询菜单失败, id: %d, err: %v", req.Id, err) + } + if menu == nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "菜单不存在, id: %d", req.Id) + } + + // 2. 将类型标签转换为值 + typeValue, err := l.svcCtx.DictService.GetDictValue(l.ctx, "admin_menu_type", req.Type) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "菜单类型无效: %v", err) + } + + // 3. 检查父菜单是否存在(如果不是根菜单) + if req.Pid > 0 { + parentMenu, err := l.svcCtx.AdminMenuModel.FindOne(l.ctx, req.Pid) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询父菜单失败, id: %d, err: %v", req.Pid, err) + } + if parentMenu == nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "父菜单不存在, id: %d", req.Pid) + } + } + + // 4. 检查名称和路径是否重复 + if req.Name != menu.Name || req.Path != menu.Path { + exists, err := l.svcCtx.AdminMenuModel.FindOneByNamePath(l.ctx, req.Name, req.Path) + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询菜单失败, err: %v", err) + } + if exists != nil && exists.Id != req.Id { + return nil, errors.Wrapf(xerr.NewErrMsg("菜单名称或路径已存在"), "菜单名称或路径已存在") + } + } + + // 5. 更新菜单信息 + + menu.Pid = req.Pid + menu.Name = req.Name + menu.Path = req.Path + menu.Component = req.Component + menu.Redirect = sql.NullString{String: req.Redirect, Valid: req.Redirect != ""} + menu.Status = req.Status + menu.Type = typeValue + menu.Sort = req.Sort + + // 将Meta转换为JSON字符串 + metaJson, err := json.Marshal(req.Meta) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "Meta数据格式错误: %v", err) + } + menu.Meta = string(metaJson) + + // 6. 保存更新 + _, err = l.svcCtx.AdminMenuModel.Update(l.ctx, nil, menu) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新菜单失败, err: %v", err) + } + + return &types.UpdateMenuResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_notification/admincreatenotificationlogic.go b/app/main/api/internal/logic/admin_notification/admincreatenotificationlogic.go new file mode 100644 index 0000000..f069457 --- /dev/null +++ b/app/main/api/internal/logic/admin_notification/admincreatenotificationlogic.go @@ -0,0 +1,50 @@ +package admin_notification + +import ( + "context" + "database/sql" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminCreateNotificationLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminCreateNotificationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateNotificationLogic { + return &AdminCreateNotificationLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminCreateNotificationLogic) AdminCreateNotification(req *types.AdminCreateNotificationReq) (resp *types.AdminCreateNotificationResp, err error) { + startDate, _ := time.Parse("2006-01-02", req.StartDate) + endDate, _ := time.Parse("2006-01-02", req.EndDate) + data := &model.GlobalNotifications{ + Title: req.Title, + Content: req.Content, + NotificationPage: req.NotificationPage, + StartDate: sql.NullTime{Time: startDate, Valid: req.StartDate != ""}, + EndDate: sql.NullTime{Time: endDate, Valid: req.EndDate != ""}, + StartTime: req.StartTime, + EndTime: req.EndTime, + Status: req.Status, + } + result, err := l.svcCtx.GlobalNotificationsModel.Insert(l.ctx, nil, data) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建通知失败, err: %v, req: %+v", err, req) + } + id, _ := result.LastInsertId() + return &types.AdminCreateNotificationResp{Id: id}, nil +} diff --git a/app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go b/app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go new file mode 100644 index 0000000..9a540fe --- /dev/null +++ b/app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go @@ -0,0 +1,38 @@ +package admin_notification + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminDeleteNotificationLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminDeleteNotificationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteNotificationLogic { + return &AdminDeleteNotificationLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminDeleteNotificationLogic) AdminDeleteNotification(req *types.AdminDeleteNotificationReq) (resp *types.AdminDeleteNotificationResp, err error) { + notification, err := l.svcCtx.GlobalNotificationsModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查找通知失败, err: %v, id: %d", err, req.Id) + } + err = l.svcCtx.GlobalNotificationsModel.DeleteSoft(l.ctx, nil, notification) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "删除通知失败, err: %v, id: %d", err, req.Id) + } + return &types.AdminDeleteNotificationResp{Success: true}, nil +} diff --git a/app/main/api/internal/logic/admin_notification/admingetnotificationdetaillogic.go b/app/main/api/internal/logic/admin_notification/admingetnotificationdetaillogic.go new file mode 100644 index 0000000..3ccdd01 --- /dev/null +++ b/app/main/api/internal/logic/admin_notification/admingetnotificationdetaillogic.go @@ -0,0 +1,53 @@ +package admin_notification + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetNotificationDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetNotificationDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetNotificationDetailLogic { + return &AdminGetNotificationDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetNotificationDetailLogic) AdminGetNotificationDetail(req *types.AdminGetNotificationDetailReq) (resp *types.AdminGetNotificationDetailResp, err error) { + notification, err := l.svcCtx.GlobalNotificationsModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查找通知失败, err: %v, id: %d", err, req.Id) + } + resp = &types.AdminGetNotificationDetailResp{ + Id: notification.Id, + Title: notification.Title, + Content: notification.Content, + NotificationPage: notification.NotificationPage, + StartDate: "", + StartTime: notification.StartTime, + EndDate: "", + EndTime: notification.EndTime, + Status: notification.Status, + CreateTime: notification.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: notification.UpdateTime.Format("2006-01-02 15:04:05"), + } + if notification.StartDate.Valid { + resp.StartDate = notification.StartDate.Time.Format("2006-01-02") + } + if notification.EndDate.Valid { + resp.EndDate = notification.EndDate.Time.Format("2006-01-02") + } + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_notification/admingetnotificationlistlogic.go b/app/main/api/internal/logic/admin_notification/admingetnotificationlistlogic.go new file mode 100644 index 0000000..e12017d --- /dev/null +++ b/app/main/api/internal/logic/admin_notification/admingetnotificationlistlogic.go @@ -0,0 +1,82 @@ +package admin_notification + +import ( + "context" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetNotificationListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetNotificationListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetNotificationListLogic { + return &AdminGetNotificationListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetNotificationListLogic) AdminGetNotificationList(req *types.AdminGetNotificationListReq) (resp *types.AdminGetNotificationListResp, err error) { + builder := l.svcCtx.GlobalNotificationsModel.SelectBuilder() + if req.Title != nil { + builder = builder.Where("title LIKE ?", "%"+*req.Title+"%") + } + if req.NotificationPage != nil { + builder = builder.Where("notification_page = ?", *req.NotificationPage) + } + if req.Status != nil { + builder = builder.Where("status = ?", *req.Status) + } + if req.StartDate != nil { + if t, err := time.Parse("2006-01-02", *req.StartDate); err == nil { + builder = builder.Where("start_date >= ?", t) + } + } + if req.EndDate != nil { + if t, err := time.Parse("2006-01-02", *req.EndDate); err == nil { + builder = builder.Where("end_date <= ?", t) + } + } + list, total, err := l.svcCtx.GlobalNotificationsModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询通知列表失败, err: %v, req: %+v", err, req) + } + items := make([]types.NotificationListItem, 0, len(list)) + for _, n := range list { + item := types.NotificationListItem{ + Id: n.Id, + Title: n.Title, + NotificationPage: n.NotificationPage, + Content: n.Content, + StartDate: "", + StartTime: n.StartTime, + EndDate: "", + EndTime: n.EndTime, + Status: n.Status, + CreateTime: n.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: n.UpdateTime.Format("2006-01-02 15:04:05"), + } + if n.StartDate.Valid { + item.StartDate = n.StartDate.Time.Format("2006-01-02") + } + if n.EndDate.Valid { + item.EndDate = n.EndDate.Time.Format("2006-01-02") + } + items = append(items, item) + } + resp = &types.AdminGetNotificationListResp{ + Total: total, + Items: items, + } + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go b/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go new file mode 100644 index 0000000..838242a --- /dev/null +++ b/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go @@ -0,0 +1,66 @@ +package admin_notification + +import ( + "context" + "database/sql" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminUpdateNotificationLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateNotificationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateNotificationLogic { + return &AdminUpdateNotificationLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateNotificationLogic) AdminUpdateNotification(req *types.AdminUpdateNotificationReq) (resp *types.AdminUpdateNotificationResp, err error) { + notification, err := l.svcCtx.GlobalNotificationsModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查找通知失败, err: %v, id: %d", err, req.Id) + } + if req.StartDate != nil { + startDate, _ := time.Parse("2006-01-02", *req.StartDate) + notification.StartDate = sql.NullTime{Time: startDate, Valid: true} + } + if req.EndDate != nil { + endDate, _ := time.Parse("2006-01-02", *req.EndDate) + notification.EndDate = sql.NullTime{Time: endDate, Valid: true} + } + if req.Title != nil { + notification.Title = *req.Title + } + if req.Content != nil { + notification.Content = *req.Content + } + if req.NotificationPage != nil { + notification.NotificationPage = *req.NotificationPage + } + if req.StartTime != nil { + notification.StartTime = *req.StartTime + } + if req.EndTime != nil { + notification.EndTime = *req.EndTime + } + if req.Status != nil { + notification.Status = *req.Status + } + _, err = l.svcCtx.GlobalNotificationsModel.Update(l.ctx, nil, notification) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新通知失败, err: %v, req: %+v", err, req) + } + return &types.AdminUpdateNotificationResp{Success: true}, nil +} diff --git a/app/main/api/internal/logic/admin_order/admincreateorderlogic.go b/app/main/api/internal/logic/admin_order/admincreateorderlogic.go new file mode 100644 index 0000000..8162a36 --- /dev/null +++ b/app/main/api/internal/logic/admin_order/admincreateorderlogic.go @@ -0,0 +1,99 @@ +package admin_order + +import ( + "context" + "database/sql" + "fmt" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminCreateOrderLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminCreateOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateOrderLogic { + return &AdminCreateOrderLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminCreateOrderLogic) AdminCreateOrder(req *types.AdminCreateOrderReq) (resp *types.AdminCreateOrderResp, err error) { + // 生成订单号 + orderNo := fmt.Sprintf("%dADMIN", time.Now().UnixNano()) + + // 根据产品名称查询产品ID + builder := l.svcCtx.ProductModel.SelectBuilder() + builder = builder.Where("product_name = ? AND del_state = ?", req.ProductName, 0) + products, err := l.svcCtx.ProductModel.FindAll(l.ctx, builder, "") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 查询产品失败 err: %v", err) + } + if len(products) == 0 { + return nil, errors.Wrapf(xerr.NewErrMsg(fmt.Sprintf("产品不存在: %s", req.ProductName)), "AdminCreateOrder, 查询产品失败 err: %v", err) + } + product := products[0] + + // 创建订单对象 + order := &model.Order{ + OrderNo: orderNo, + PlatformOrderId: sql.NullString{String: req.PlatformOrderId, Valid: req.PlatformOrderId != ""}, + ProductId: product.Id, + PaymentPlatform: req.PaymentPlatform, + PaymentScene: req.PaymentScene, + Amount: req.Amount, + Status: req.Status, + } + + // 使用事务处理订单创建 + var orderId int64 + err = l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 插入订单 + result, err := l.svcCtx.OrderModel.Insert(ctx, session, order) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 创建订单失败 err: %v", err) + } + + // 获取订单ID + orderId, err = result.LastInsertId() + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 获取订单ID失败 err: %v", err) + } + + // 如果是推广订单,创建推广订单记录 + if req.IsPromotion == 1 { + promotionOrder := &model.AdminPromotionOrder{ + OrderId: orderId, + Version: 1, + CreateTime: time.Now(), + UpdateTime: time.Now(), + } + _, err = l.svcCtx.AdminPromotionOrderModel.Insert(ctx, session, promotionOrder) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 创建推广订单失败 err: %v", err) + } + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &types.AdminCreateOrderResp{ + Id: orderId, + }, nil +} diff --git a/app/main/api/internal/logic/admin_order/admindeleteorderlogic.go b/app/main/api/internal/logic/admin_order/admindeleteorderlogic.go new file mode 100644 index 0000000..bc2dfbf --- /dev/null +++ b/app/main/api/internal/logic/admin_order/admindeleteorderlogic.go @@ -0,0 +1,63 @@ +package admin_order + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminDeleteOrderLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminDeleteOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteOrderLogic { + return &AdminDeleteOrderLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminDeleteOrderLogic) AdminDeleteOrder(req *types.AdminDeleteOrderReq) (resp *types.AdminDeleteOrderResp, err error) { + // 获取订单信息 + order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 查询订单失败 err: %v", err) + } + + // 使用事务删除订单 + err = l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 软删除订单 + err := l.svcCtx.OrderModel.DeleteSoft(ctx, session, order) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 删除订单失败 err: %v", err) + } + + // 删除关联的推广订单记录 + promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(ctx, order.Id) + if err == nil && promotionOrder != nil { + err = l.svcCtx.AdminPromotionOrderModel.DeleteSoft(ctx, session, promotionOrder) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 删除推广订单失败 err: %v", err) + } + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &types.AdminDeleteOrderResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_order/admingetorderdetaillogic.go b/app/main/api/internal/logic/admin_order/admingetorderdetaillogic.go new file mode 100644 index 0000000..d2cd6ec --- /dev/null +++ b/app/main/api/internal/logic/admin_order/admingetorderdetaillogic.go @@ -0,0 +1,104 @@ +package admin_order + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/globalkey" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetOrderDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetOrderDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetOrderDetailLogic { + return &AdminGetOrderDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetOrderDetailLogic) AdminGetOrderDetail(req *types.AdminGetOrderDetailReq) (resp *types.AdminGetOrderDetailResp, err error) { + // 获取订单信息 + order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderDetail, 查询订单失败 err: %v", err) + } + + // 获取产品信息 + product, err := l.svcCtx.ProductModel.FindOne(l.ctx, order.ProductId) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderDetail, 查询产品失败 err: %v", err) + } + + // 判断是否为推广订单 + var isPromotion int64 + promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(l.ctx, order.Id) + if err == nil && promotionOrder != nil { + isPromotion = 1 + } + + // 获取查询状态 + var queryState string + builder := l.svcCtx.QueryModel.SelectBuilder().Where("order_id = ?", order.Id).Columns("query_state") + queries, err := l.svcCtx.QueryModel.FindAll(l.ctx, builder, "") + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderDetail, 查询查询状态失败 err: %v", err) + } + + if len(queries) > 0 { + queryState = queries[0].QueryState + } else { + // 查询清理日志 + cleanupBuilder := l.svcCtx.QueryCleanupDetailModel.SelectBuilder(). + Where("order_id = ?", order.Id). + Where("del_state = ?", globalkey.DelStateNo). + OrderBy("create_time DESC"). + Limit(1) + cleanupDetails, err := l.svcCtx.QueryCleanupDetailModel.FindAll(l.ctx, cleanupBuilder, "") + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderDetail, 查询清理日志失败 err: %v", err) + } + + if len(cleanupDetails) > 0 { + queryState = model.QueryStateCleaned + } else { + queryState = "" + } + } + + // 构建响应 + resp = &types.AdminGetOrderDetailResp{ + Id: order.Id, + OrderNo: order.OrderNo, + PlatformOrderId: order.PlatformOrderId.String, + ProductName: product.ProductName, + PaymentPlatform: order.PaymentPlatform, + PaymentScene: order.PaymentScene, + Amount: order.Amount, + Status: order.Status, + CreateTime: order.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: order.UpdateTime.Format("2006-01-02 15:04:05"), + IsPromotion: isPromotion, + QueryState: queryState, + } + + // 处理可选字段 + if order.PayTime.Valid { + resp.PayTime = order.PayTime.Time.Format("2006-01-02 15:04:05") + } + if order.RefundTime.Valid { + resp.RefundTime = order.RefundTime.Time.Format("2006-01-02 15:04:05") + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_order/admingetorderlistlogic.go b/app/main/api/internal/logic/admin_order/admingetorderlistlogic.go new file mode 100644 index 0000000..9676f4d --- /dev/null +++ b/app/main/api/internal/logic/admin_order/admingetorderlistlogic.go @@ -0,0 +1,229 @@ +package admin_order + +import ( + "context" + "sync" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/globalkey" + "qnc-server/common/xerr" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type AdminGetOrderListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetOrderListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetOrderListLogic { + return &AdminGetOrderListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListReq) (resp *types.AdminGetOrderListResp, err error) { + // 构建查询条件 + builder := l.svcCtx.OrderModel.SelectBuilder() + if req.OrderNo != "" { + builder = builder.Where("order_no = ?", req.OrderNo) + } + if req.PlatformOrderId != "" { + builder = builder.Where("platform_order_id = ?", req.PlatformOrderId) + } + if req.ProductName != "" { + builder = builder.Where("product_id IN (SELECT id FROM product WHERE product_name LIKE ?)", "%"+req.ProductName+"%") + } + if req.PaymentPlatform != "" { + builder = builder.Where("payment_platform = ?", req.PaymentPlatform) + } + if req.PaymentScene != "" { + builder = builder.Where("payment_scene = ?", req.PaymentScene) + } + if req.Amount > 0 { + builder = builder.Where("amount = ?", req.Amount) + } + if req.Status != "" { + builder = builder.Where("status = ?", req.Status) + } + if req.IsPromotion != -1 { + builder = builder.Where("id IN (SELECT order_id FROM admin_promotion_order WHERE del_state = 0)") + } + // 时间范围查询 + if req.CreateTimeStart != "" { + builder = builder.Where("create_time >= ?", req.CreateTimeStart) + } + if req.CreateTimeEnd != "" { + builder = builder.Where("create_time <= ?", req.CreateTimeEnd) + } + if req.PayTimeStart != "" { + builder = builder.Where("pay_time >= ?", req.PayTimeStart) + } + if req.PayTimeEnd != "" { + builder = builder.Where("pay_time <= ?", req.PayTimeEnd) + } + if req.RefundTimeStart != "" { + builder = builder.Where("refund_time >= ?", req.RefundTimeStart) + } + if req.RefundTimeEnd != "" { + builder = builder.Where("refund_time <= ?", req.RefundTimeEnd) + } + + // 并发获取总数和列表 + var total int64 + var orders []*model.Order + err = mr.Finish(func() error { + var err error + total, err = l.svcCtx.OrderModel.FindCount(l.ctx, builder, "id") + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询订单总数失败 err: %v", err) + } + return nil + }, func() error { + var err error + orders, err = l.svcCtx.OrderModel.FindPageListByPage(l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询订单列表失败 err: %v", err) + } + return nil + }) + if err != nil { + return nil, err + } + + // 并发获取产品信息和查询状态 + productMap := make(map[int64]string) + queryStateMap := make(map[int64]string) + var mu sync.Mutex + + // 批量获取查询状态 + if len(orders) > 0 { + orderIds := make([]int64, 0, len(orders)) + for _, order := range orders { + orderIds = append(orderIds, order.Id) + } + + // 1. 先查询当前查询状态 + builder := l.svcCtx.QueryModel.SelectBuilder(). + Where(squirrel.Eq{"order_id": orderIds}). + Columns("order_id", "query_state") + queries, err := l.svcCtx.QueryModel.FindAll(l.ctx, builder, "") + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 批量查询查询状态失败 err: %v", err) + } + + // 2. 记录已找到查询状态的订单ID + foundOrderIds := make(map[int64]bool) + for _, query := range queries { + queryStateMap[query.OrderId] = query.QueryState + foundOrderIds[query.OrderId] = true + } + + // 3. 查找未找到查询状态的订单是否在清理日志中 + notFoundOrderIds := make([]int64, 0) + for _, orderId := range orderIds { + if !foundOrderIds[orderId] { + notFoundOrderIds = append(notFoundOrderIds, orderId) + } + } + + if len(notFoundOrderIds) > 0 { + // 查询清理日志 + cleanupBuilder := l.svcCtx.QueryCleanupDetailModel.SelectBuilder(). + Where(squirrel.Eq{"order_id": notFoundOrderIds}). + Where("del_state = ?", globalkey.DelStateNo). + OrderBy("create_time DESC") + cleanupDetails, err := l.svcCtx.QueryCleanupDetailModel.FindAll(l.ctx, cleanupBuilder, "") + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询清理日志失败 err: %v", err) + } + + // 记录已清理的订单状态 + for _, detail := range cleanupDetails { + if _, exists := queryStateMap[detail.OrderId]; !exists { + queryStateMap[detail.OrderId] = model.QueryStateCleaned // 使用常量标记为已清除状态 + } + } + + // 对于既没有查询状态也没有清理记录的订单,不设置状态(保持为空字符串) + for _, orderId := range notFoundOrderIds { + if _, exists := queryStateMap[orderId]; !exists { + queryStateMap[orderId] = "" // 未知状态保持为空字符串 + } + } + } + } + + // 并发获取产品信息 + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for _, order := range orders { + source <- order + } + }, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) { + order := item.(*model.Order) + + // 获取产品信息 + product, err := l.svcCtx.ProductModel.FindOne(l.ctx, order.ProductId) + if err != nil && !errors.Is(err, model.ErrNotFound) { + cancel(errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询产品信息失败 err: %v", err)) + return + } + mu.Lock() + if product != nil { + productMap[product.Id] = product.ProductName + } else { + productMap[order.ProductId] = "" // 产品不存在时设置为空字符串 + } + mu.Unlock() + writer.Write(struct{}{}) + }, func(pipe <-chan struct{}, cancel func(error)) { + for range pipe { + } + }) + if err != nil { + return nil, err + } + + // 构建响应 + resp = &types.AdminGetOrderListResp{ + Total: total, + Items: make([]types.OrderListItem, 0, len(orders)), + } + + for _, order := range orders { + item := types.OrderListItem{ + Id: order.Id, + OrderNo: order.OrderNo, + PlatformOrderId: order.PlatformOrderId.String, + ProductName: productMap[order.ProductId], + PaymentPlatform: order.PaymentPlatform, + PaymentScene: order.PaymentScene, + Amount: order.Amount, + Status: order.Status, + CreateTime: order.CreateTime.Format("2006-01-02 15:04:05"), + QueryState: queryStateMap[order.Id], + } + if order.PayTime.Valid { + item.PayTime = order.PayTime.Time.Format("2006-01-02 15:04:05") + } + if order.RefundTime.Valid { + item.RefundTime = order.RefundTime.Time.Format("2006-01-02 15:04:05") + } + // 判断是否为推广订单 + promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(l.ctx, order.Id) + if err == nil && promotionOrder != nil { + item.IsPromotion = 1 + } + resp.Items = append(resp.Items, item) + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go b/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go new file mode 100644 index 0000000..e9cbad1 --- /dev/null +++ b/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go @@ -0,0 +1,92 @@ +package admin_order + +import ( + "context" + "database/sql" + "fmt" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminRefundOrderLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminRefundOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminRefundOrderLogic { + return &AdminRefundOrderLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminRefundOrderLogic) AdminRefundOrder(req *types.AdminRefundOrderReq) (resp *types.AdminRefundOrderResp, err error) { + // 获取订单信息 + order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminRefundOrder, 查询订单失败 err: %v", err) + } + + // 检查订单状态 + if order.Status != "paid" { + return nil, errors.Wrapf(xerr.NewErrMsg("订单状态不正确,无法退款"), "AdminRefundOrder, 订单状态不正确,无法退款 err: %v", err) + } + + // 检查退款金额 + if req.RefundAmount > order.Amount { + return nil, errors.Wrapf(xerr.NewErrMsg("退款金额不能大于订单金额"), "AdminRefundOrder, 退款金额不能大于订单金额 err: %v", err) + } + refundResp, err := l.svcCtx.AlipayService.AliRefund(l.ctx, order.OrderNo, req.RefundAmount) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "AdminRefundOrder, 退款失败 err: %v", err) + } + if refundResp.IsSuccess() { + err = l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 创建退款记录 + refund := &model.OrderRefund{ + RefundNo: fmt.Sprintf("refund-%s", order.OrderNo), + PlatformRefundId: sql.NullString{String: refundResp.TradeNo, Valid: true}, + OrderId: order.Id, + UserId: order.UserId, + ProductId: order.ProductId, + RefundAmount: req.RefundAmount, + RefundReason: sql.NullString{String: req.RefundReason, Valid: true}, + Status: model.OrderRefundStatusPending, + RefundTime: sql.NullTime{Time: time.Now(), Valid: true}, + } + + if _, err := l.svcCtx.OrderRefundModel.Insert(ctx, session, refund); err != nil { + return fmt.Errorf("创建退款记录失败: %v", err) + } + + // 更新订单状态 + order.Status = model.OrderStatusRefunded + order.RefundTime = sql.NullTime{Time: time.Now(), Valid: true} + if _, err := l.svcCtx.OrderModel.Update(ctx, session, order); err != nil { + return fmt.Errorf("更新订单状态失败: %v", err) + } + return nil + }) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "AdminRefundOrder, 退款失败 err: %v", err) + } + return &types.AdminRefundOrderResp{ + Status: model.OrderStatusRefunded, + RefundNo: fmt.Sprintf("refund-%s", order.OrderNo), + Amount: req.RefundAmount, + }, nil + } else { + return nil, errors.Wrapf(xerr.NewErrMsg(fmt.Sprintf("退款失败, : %v", refundResp.Msg)), "AdminRefundOrder, 退款失败 err: %v", err) + } + +} diff --git a/app/main/api/internal/logic/admin_order/adminupdateorderlogic.go b/app/main/api/internal/logic/admin_order/adminupdateorderlogic.go new file mode 100644 index 0000000..6085546 --- /dev/null +++ b/app/main/api/internal/logic/admin_order/adminupdateorderlogic.go @@ -0,0 +1,113 @@ +package admin_order + +import ( + "context" + "database/sql" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminUpdateOrderLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateOrderLogic { + return &AdminUpdateOrderLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateOrderLogic) AdminUpdateOrder(req *types.AdminUpdateOrderReq) (resp *types.AdminUpdateOrderResp, err error) { + // 获取原订单信息 + order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 查询订单失败 err: %v", err) + } + + // 更新订单字段 + if req.OrderNo != nil { + order.OrderNo = *req.OrderNo + } + if req.PlatformOrderId != nil { + order.PlatformOrderId = sql.NullString{String: *req.PlatformOrderId, Valid: true} + } + if req.PaymentPlatform != nil { + order.PaymentPlatform = *req.PaymentPlatform + } + if req.PaymentScene != nil { + order.PaymentScene = *req.PaymentScene + } + if req.Amount != nil { + order.Amount = *req.Amount + } + if req.Status != nil { + order.Status = *req.Status + } + if req.PayTime != nil { + payTime, err := time.Parse("2006-01-02 15:04:05", *req.PayTime) + if err == nil { + order.PayTime = sql.NullTime{Time: payTime, Valid: true} + } + } + if req.RefundTime != nil { + refundTime, err := time.Parse("2006-01-02 15:04:05", *req.RefundTime) + if err == nil { + order.RefundTime = sql.NullTime{Time: refundTime, Valid: true} + } + } + + // 使用事务更新订单 + err = l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 更新订单 + _, err := l.svcCtx.OrderModel.Update(ctx, session, order) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 更新订单失败 err: %v", err) + } + + // 处理推广订单状态 + if req.IsPromotion != nil { + promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(ctx, order.Id) + if err == nil && promotionOrder != nil { + // 如果存在推广订单记录但不需要推广,则删除 + if *req.IsPromotion == 0 { + err = l.svcCtx.AdminPromotionOrderModel.DeleteSoft(ctx, session, promotionOrder) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 删除推广订单失败 err: %v", err) + } + } + } else if *req.IsPromotion == 1 { + // 如果需要推广但不存在记录,则创建 + newPromotionOrder := &model.AdminPromotionOrder{ + OrderId: order.Id, + Version: 1, + } + _, err = l.svcCtx.AdminPromotionOrderModel.Insert(ctx, session, newPromotionOrder) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 创建推广订单失败 err: %v", err) + } + } + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &types.AdminUpdateOrderResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_platform_user/admincreateplatformuserlogic.go b/app/main/api/internal/logic/admin_platform_user/admincreateplatformuserlogic.go new file mode 100644 index 0000000..d089ab9 --- /dev/null +++ b/app/main/api/internal/logic/admin_platform_user/admincreateplatformuserlogic.go @@ -0,0 +1,57 @@ +package admin_platform_user + +import ( + "context" + "database/sql" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminCreatePlatformUserLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminCreatePlatformUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreatePlatformUserLogic { + return &AdminCreatePlatformUserLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminCreatePlatformUserLogic) AdminCreatePlatformUser(req *types.AdminCreatePlatformUserReq) (resp *types.AdminCreatePlatformUserResp, err error) { + // 校验手机号唯一性 + _, err = l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: req.Mobile, Valid: req.Mobile != ""}) + if err == nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机号已存在: %s", req.Mobile) + } + if err != model.ErrNotFound { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询手机号失败: %v", err) + } + + user := &model.User{ + Mobile: sql.NullString{String: req.Mobile, Valid: req.Mobile != ""}, + Password: sql.NullString{String: req.Password, Valid: req.Password != ""}, + Nickname: sql.NullString{String: req.Nickname, Valid: req.Nickname != ""}, + Info: req.Info, + Inside: req.Inside, + } + result, err := l.svcCtx.UserModel.Insert(l.ctx, nil, user) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建用户失败: %v", err) + } + id, err := result.LastInsertId() + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取用户ID失败: %v", err) + } + resp = &types.AdminCreatePlatformUserResp{Id: id} + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_platform_user/admindeleteplatformuserlogic.go b/app/main/api/internal/logic/admin_platform_user/admindeleteplatformuserlogic.go new file mode 100644 index 0000000..5e338e0 --- /dev/null +++ b/app/main/api/internal/logic/admin_platform_user/admindeleteplatformuserlogic.go @@ -0,0 +1,43 @@ +package admin_platform_user + +import ( + "context" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminDeletePlatformUserLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminDeletePlatformUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeletePlatformUserLogic { + return &AdminDeletePlatformUserLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminDeletePlatformUserLogic) AdminDeletePlatformUser(req *types.AdminDeletePlatformUserReq) (resp *types.AdminDeletePlatformUserResp, err error) { + user, err := l.svcCtx.UserModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %d, err: %v", req.Id, err) + } + user.DelState = 1 + user.DeleteTime.Time = time.Now() + user.DeleteTime.Valid = true + err = l.svcCtx.UserModel.DeleteSoft(l.ctx, nil, user) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "软删除用户失败: %v", err) + } + resp = &types.AdminDeletePlatformUserResp{Success: true} + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_platform_user/admingetplatformuserdetaillogic.go b/app/main/api/internal/logic/admin_platform_user/admingetplatformuserdetaillogic.go new file mode 100644 index 0000000..1d4d3e0 --- /dev/null +++ b/app/main/api/internal/logic/admin_platform_user/admingetplatformuserdetaillogic.go @@ -0,0 +1,53 @@ +package admin_platform_user + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetPlatformUserDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetPlatformUserDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetPlatformUserDetailLogic { + return &AdminGetPlatformUserDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetPlatformUserDetailLogic) AdminGetPlatformUserDetail(req *types.AdminGetPlatformUserDetailReq) (resp *types.AdminGetPlatformUserDetailResp, err error) { + user, err := l.svcCtx.UserModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %d, err: %v", req.Id, err) + } + key := l.svcCtx.Config.Encrypt.SecretKey + DecryptMobile, err := crypto.DecryptMobile(user.Mobile.String, key) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "解密手机号失败: %v", err) + } + // 查询平台类型(取第一个user_auth) + resp = &types.AdminGetPlatformUserDetailResp{ + Id: user.Id, + Mobile: DecryptMobile, + Nickname: "", + Info: user.Info, + Inside: user.Inside, + CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: user.UpdateTime.Format("2006-01-02 15:04:05"), + } + if user.Nickname.Valid { + resp.Nickname = user.Nickname.String + } + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go b/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go new file mode 100644 index 0000000..d068f82 --- /dev/null +++ b/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go @@ -0,0 +1,88 @@ +package admin_platform_user + +import ( + "context" + "database/sql" + "fmt" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetPlatformUserListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetPlatformUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetPlatformUserListLogic { + return &AdminGetPlatformUserListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetPlatformUserListLogic) AdminGetPlatformUserList(req *types.AdminGetPlatformUserListReq) (resp *types.AdminGetPlatformUserListResp, err error) { + builder := l.svcCtx.UserModel.SelectBuilder() + if req.Mobile != "" { + builder = builder.Where("mobile = ?", req.Mobile) + } + if req.Nickname != "" { + builder = builder.Where("nickname = ?", req.Nickname) + } + if req.Inside != 0 { + builder = builder.Where("inside = ?", req.Inside) + } + if req.CreateTimeStart != "" { + builder = builder.Where("create_time >= ?", req.CreateTimeStart) + } + if req.CreateTimeEnd != "" { + builder = builder.Where("create_time <= ?", req.CreateTimeEnd) + } + + orderBy := "id DESC" + if req.OrderBy != "" && req.OrderType != "" { + orderBy = fmt.Sprintf("%s %s", req.OrderBy, req.OrderType) + } + users, total, err := l.svcCtx.UserModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, orderBy) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询用户分页失败: %v", err) + } + var items []types.PlatformUserListItem + secretKey := l.svcCtx.Config.Encrypt.SecretKey + + for _, user := range users { + mobile := user.Mobile + if mobile.Valid { + encryptedMobile, err := crypto.DecryptMobile(mobile.String, secretKey) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "手机登录, 解密手机号失败: %+v", err) + } + mobile = sql.NullString{String: encryptedMobile, Valid: true} + } + itemData := types.PlatformUserListItem{ + Id: user.Id, + Mobile: mobile.String, + Nickname: "", + Info: user.Info, + Inside: user.Inside, + CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: user.UpdateTime.Format("2006-01-02 15:04:05"), + } + if user.Nickname.Valid { + itemData.Nickname = user.Nickname.String + } + items = append(items, itemData) + } + resp = &types.AdminGetPlatformUserListResp{ + Total: total, + Items: items, + } + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_platform_user/adminupdateplatformuserlogic.go b/app/main/api/internal/logic/admin_platform_user/adminupdateplatformuserlogic.go new file mode 100644 index 0000000..847a4c8 --- /dev/null +++ b/app/main/api/internal/logic/admin_platform_user/adminupdateplatformuserlogic.go @@ -0,0 +1,64 @@ +package admin_platform_user + +import ( + "context" + "database/sql" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminUpdatePlatformUserLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdatePlatformUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdatePlatformUserLogic { + return &AdminUpdatePlatformUserLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdatePlatformUserLogic) AdminUpdatePlatformUser(req *types.AdminUpdatePlatformUserReq) (resp *types.AdminUpdatePlatformUserResp, err error) { + user, err := l.svcCtx.UserModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %d, err: %v", req.Id, err) + } + if req.Mobile != nil { + key := l.svcCtx.Config.Encrypt.SecretKey + EncryptMobile, err := crypto.EncryptMobile(*req.Mobile, key) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "加密手机号失败: %v", err) + } + user.Mobile = sql.NullString{String: EncryptMobile, Valid: true} + } + if req.Nickname != nil { + user.Nickname = sql.NullString{String: *req.Nickname, Valid: *req.Nickname != ""} + } + if req.Info != nil { + user.Info = *req.Info + } + if req.Inside != nil { + if *req.Inside != 1 && *req.Inside != 0 { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "内部用户状态错误: %d", *req.Inside) + } + user.Inside = *req.Inside + } + if req.Password != nil { + user.Password = sql.NullString{String: *req.Password, Valid: *req.Password != ""} + } + _, err = l.svcCtx.UserModel.Update(l.ctx, nil, user) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新用户失败: %v", err) + } + resp = &types.AdminUpdatePlatformUserResp{Success: true} + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_product/admincreateproductlogic.go b/app/main/api/internal/logic/admin_product/admincreateproductlogic.go new file mode 100644 index 0000000..e3ea7bc --- /dev/null +++ b/app/main/api/internal/logic/admin_product/admincreateproductlogic.go @@ -0,0 +1,50 @@ +package admin_product + +import ( + "context" + "database/sql" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminCreateProductLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminCreateProductLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateProductLogic { + return &AdminCreateProductLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminCreateProductLogic) AdminCreateProduct(req *types.AdminCreateProductReq) (resp *types.AdminCreateProductResp, err error) { + // 1. 数据转换 + data := &model.Product{ + ProductName: req.ProductName, + ProductEn: req.ProductEn, + Description: req.Description, + Notes: sql.NullString{String: req.Notes, Valid: req.Notes != ""}, + CostPrice: req.CostPrice, + SellPrice: req.SellPrice, + } + + // 2. 数据库操作 + result, err := l.svcCtx.ProductModel.Insert(l.ctx, nil, data) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "创建产品失败, err: %v, req: %+v", err, req) + } + + // 3. 返回结果 + id, _ := result.LastInsertId() + return &types.AdminCreateProductResp{Id: id}, nil +} diff --git a/app/main/api/internal/logic/admin_product/admindeleteproductlogic.go b/app/main/api/internal/logic/admin_product/admindeleteproductlogic.go new file mode 100644 index 0000000..bc541ac --- /dev/null +++ b/app/main/api/internal/logic/admin_product/admindeleteproductlogic.go @@ -0,0 +1,44 @@ +package admin_product + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminDeleteProductLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminDeleteProductLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteProductLogic { + return &AdminDeleteProductLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminDeleteProductLogic) AdminDeleteProduct(req *types.AdminDeleteProductReq) (resp *types.AdminDeleteProductResp, err error) { + // 1. 查询记录是否存在 + record, err := l.svcCtx.ProductModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查找产品失败, err: %v, id: %d", err, req.Id) + } + + // 2. 执行软删除 + err = l.svcCtx.ProductModel.DeleteSoft(l.ctx, nil, record) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "删除产品失败, err: %v, id: %d", err, req.Id) + } + + // 3. 返回结果 + return &types.AdminDeleteProductResp{Success: true}, nil +} diff --git a/app/main/api/internal/logic/admin_product/admingetproductdetaillogic.go b/app/main/api/internal/logic/admin_product/admingetproductdetaillogic.go new file mode 100644 index 0000000..ea30028 --- /dev/null +++ b/app/main/api/internal/logic/admin_product/admingetproductdetaillogic.go @@ -0,0 +1,49 @@ +package admin_product + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetProductDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetProductDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetProductDetailLogic { + return &AdminGetProductDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetProductDetailLogic) AdminGetProductDetail(req *types.AdminGetProductDetailReq) (resp *types.AdminGetProductDetailResp, err error) { + // 1. 查询记录 + record, err := l.svcCtx.ProductModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查找产品失败, err: %v, id: %d", err, req.Id) + } + + // 2. 构建响应 + resp = &types.AdminGetProductDetailResp{ + Id: record.Id, + ProductName: record.ProductName, + ProductEn: record.ProductEn, + Description: record.Description, + Notes: record.Notes.String, + CostPrice: record.CostPrice, + SellPrice: record.SellPrice, + CreateTime: record.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: record.UpdateTime.Format("2006-01-02 15:04:05"), + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_product/admingetproductfeaturelistlogic.go b/app/main/api/internal/logic/admin_product/admingetproductfeaturelistlogic.go new file mode 100644 index 0000000..a08ca5f --- /dev/null +++ b/app/main/api/internal/logic/admin_product/admingetproductfeaturelistlogic.go @@ -0,0 +1,119 @@ +package admin_product + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type AdminGetProductFeatureListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetProductFeatureListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetProductFeatureListLogic { + return &AdminGetProductFeatureListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetProductFeatureListLogic) AdminGetProductFeatureList(req *types.AdminGetProductFeatureListReq) (resp *[]types.AdminGetProductFeatureListResp, err error) { + // 1. 构建查询条件 + builder := l.svcCtx.ProductFeatureModel.SelectBuilder(). + Where("product_id = ?", req.ProductId) + + // 2. 执行查询 + list, err := l.svcCtx.ProductFeatureModel.FindAll(l.ctx, builder, "sort ASC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查询产品功能列表失败, err: %v, product_id: %d", err, req.ProductId) + } + + // 3. 获取所有功能ID + featureIds := make([]int64, 0, len(list)) + for _, item := range list { + featureIds = append(featureIds, item.FeatureId) + } + + // 4. 并发查询功能详情 + type featureResult struct { + feature *model.Feature + err error + } + + results := make([]featureResult, len(featureIds)) + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for i, id := range featureIds { + source <- struct { + index int + id int64 + }{i, id} + } + }, func(item interface{}, writer mr.Writer[featureResult], cancel func(error)) { + data := item.(struct { + index int + id int64 + }) + feature, err := l.svcCtx.FeatureModel.FindOne(l.ctx, data.id) + writer.Write(featureResult{ + feature: feature, + err: err, + }) + }, func(pipe <-chan featureResult, cancel func(error)) { + for result := range pipe { + if result.err != nil { + l.Logger.Errorf("查询功能详情失败, feature_id: %d, err: %v", result.feature.Id, result.err) + continue + } + results = append(results, result) + } + }) + + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), + "并发查询功能详情失败, err: %v", err) + } + + // 5. 构建功能ID到详情的映射 + featureMap := make(map[int64]*model.Feature) + for _, result := range results { + if result.feature != nil { + featureMap[result.feature.Id] = result.feature + } + } + + // 6. 构建响应列表 + items := make([]types.AdminGetProductFeatureListResp, 0, len(list)) + for _, item := range list { + feature, exists := featureMap[item.FeatureId] + if !exists { + continue // 跳过不存在的功能 + } + + listItem := types.AdminGetProductFeatureListResp{ + Id: item.Id, + ProductId: item.ProductId, + FeatureId: item.FeatureId, + ApiId: feature.ApiId, + Name: feature.Name, + Sort: item.Sort, + Enable: item.Enable, + IsImportant: item.IsImportant, + CreateTime: item.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: item.UpdateTime.Format("2006-01-02 15:04:05"), + } + items = append(items, listItem) + } + + // 7. 返回结果 + return &items, nil +} diff --git a/app/main/api/internal/logic/admin_product/admingetproductlistlogic.go b/app/main/api/internal/logic/admin_product/admingetproductlistlogic.go new file mode 100644 index 0000000..794b010 --- /dev/null +++ b/app/main/api/internal/logic/admin_product/admingetproductlistlogic.go @@ -0,0 +1,69 @@ +package admin_product + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetProductListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetProductListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetProductListLogic { + return &AdminGetProductListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetProductListLogic) AdminGetProductList(req *types.AdminGetProductListReq) (resp *types.AdminGetProductListResp, err error) { + // 1. 构建查询条件 + builder := l.svcCtx.ProductModel.SelectBuilder() + + // 2. 添加查询条件 + if req.ProductName != nil && *req.ProductName != "" { + builder = builder.Where("product_name LIKE ?", "%"+*req.ProductName+"%") + } + if req.ProductEn != nil && *req.ProductEn != "" { + builder = builder.Where("product_en LIKE ?", "%"+*req.ProductEn+"%") + } + + // 3. 执行分页查询 + list, total, err := l.svcCtx.ProductModel.FindPageListByPageWithTotal( + l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查询产品列表失败, err: %v, req: %+v", err, req) + } + + // 4. 构建响应列表 + items := make([]types.ProductListItem, 0, len(list)) + for _, item := range list { + listItem := types.ProductListItem{ + Id: item.Id, + ProductName: item.ProductName, + ProductEn: item.ProductEn, + Description: item.Description, + Notes: item.Notes.String, + CostPrice: item.CostPrice, + SellPrice: item.SellPrice, + CreateTime: item.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: item.UpdateTime.Format("2006-01-02 15:04:05"), + } + items = append(items, listItem) + } + + // 5. 返回结果 + return &types.AdminGetProductListResp{ + Total: total, + Items: items, + }, nil +} diff --git a/app/main/api/internal/logic/admin_product/adminupdateproductfeatureslogic.go b/app/main/api/internal/logic/admin_product/adminupdateproductfeatureslogic.go new file mode 100644 index 0000000..6fb1db4 --- /dev/null +++ b/app/main/api/internal/logic/admin_product/adminupdateproductfeatureslogic.go @@ -0,0 +1,159 @@ +package admin_product + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + "sync" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminUpdateProductFeaturesLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateProductFeaturesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateProductFeaturesLogic { + return &AdminUpdateProductFeaturesLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateProductFeaturesLogic) AdminUpdateProductFeatures(req *types.AdminUpdateProductFeaturesReq) (resp *types.AdminUpdateProductFeaturesResp, err error) { + // 1. 查询现有关联 + builder := l.svcCtx.ProductFeatureModel.SelectBuilder(). + Where("product_id = ?", req.ProductId) + existingList, err := l.svcCtx.ProductFeatureModel.FindAll(l.ctx, builder, "id ASC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查询现有产品功能关联失败, err: %v, product_id: %d", err, req.ProductId) + } + + // 2. 构建现有关联的映射 + existingMap := make(map[int64]*model.ProductFeature) + for _, item := range existingList { + existingMap[item.FeatureId] = item + } + + // 3. 构建新关联的映射 + newMap := make(map[int64]*types.ProductFeatureItem) + for _, item := range req.Features { + newMap[item.FeatureId] = &item + } + + // 4. 在事务中执行更新操作 + err = l.svcCtx.ProductFeatureModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 4.1 处理需要删除的关联 + var mu sync.Mutex + var deleteIds []int64 + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for featureId, existing := range existingMap { + if _, exists := newMap[featureId]; !exists { + source <- existing.Id + } + } + }, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) { + id := item.(int64) + mu.Lock() + deleteIds = append(deleteIds, id) + mu.Unlock() + }, func(pipe <-chan struct{}, cancel func(error)) { + // 等待所有ID收集完成 + }) + + if err != nil { + return errors.Wrapf(err, "收集待删除ID失败") + } + + // 批量删除 + if len(deleteIds) > 0 { + for _, id := range deleteIds { + err = l.svcCtx.ProductFeatureModel.Delete(ctx, session, id) + if err != nil { + return errors.Wrapf(err, "删除产品功能关联失败, product_id: %d, id: %d", + req.ProductId, id) + } + } + } + + // 4.2 并发处理需要新增或更新的关联 + var updateErr error + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for featureId, newItem := range newMap { + source <- struct { + featureId int64 + newItem *types.ProductFeatureItem + existing *model.ProductFeature + }{ + featureId: featureId, + newItem: newItem, + existing: existingMap[featureId], + } + } + }, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) { + data := item.(struct { + featureId int64 + newItem *types.ProductFeatureItem + existing *model.ProductFeature + }) + + if data.existing != nil { + // 更新现有关联 + data.existing.Sort = data.newItem.Sort + data.existing.Enable = data.newItem.Enable + data.existing.IsImportant = data.newItem.IsImportant + _, err = l.svcCtx.ProductFeatureModel.Update(ctx, session, data.existing) + if err != nil { + updateErr = errors.Wrapf(err, "更新产品功能关联失败, product_id: %d, feature_id: %d", + req.ProductId, data.featureId) + cancel(updateErr) + return + } + } else { + // 新增关联 + newFeature := &model.ProductFeature{ + ProductId: req.ProductId, + FeatureId: data.featureId, + Sort: data.newItem.Sort, + Enable: data.newItem.Enable, + IsImportant: data.newItem.IsImportant, + } + _, err = l.svcCtx.ProductFeatureModel.Insert(ctx, session, newFeature) + if err != nil { + updateErr = errors.Wrapf(err, "新增产品功能关联失败, product_id: %d, feature_id: %d", + req.ProductId, data.featureId) + cancel(updateErr) + return + } + } + }, func(pipe <-chan struct{}, cancel func(error)) { + // 等待所有更新完成 + }) + + if err != nil { + return errors.Wrapf(err, "并发更新产品功能关联失败") + } + if updateErr != nil { + return updateErr + } + + return nil + }) + + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "更新产品功能关联失败, err: %v, req: %+v", err, req) + } + + // 5. 返回结果 + return &types.AdminUpdateProductFeaturesResp{Success: true}, nil +} diff --git a/app/main/api/internal/logic/admin_product/adminupdateproductlogic.go b/app/main/api/internal/logic/admin_product/adminupdateproductlogic.go new file mode 100644 index 0000000..8c81d57 --- /dev/null +++ b/app/main/api/internal/logic/admin_product/adminupdateproductlogic.go @@ -0,0 +1,65 @@ +package admin_product + +import ( + "context" + "database/sql" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminUpdateProductLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateProductLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateProductLogic { + return &AdminUpdateProductLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateProductLogic) AdminUpdateProduct(req *types.AdminUpdateProductReq) (resp *types.AdminUpdateProductResp, err error) { + // 1. 查询记录是否存在 + record, err := l.svcCtx.ProductModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "查找产品失败, err: %v, id: %d", err, req.Id) + } + + // 2. 更新字段 + if req.ProductName != nil { + record.ProductName = *req.ProductName + } + if req.ProductEn != nil { + record.ProductEn = *req.ProductEn + } + if req.Description != nil { + record.Description = *req.Description + } + if req.Notes != nil { + record.Notes = sql.NullString{String: *req.Notes, Valid: *req.Notes != ""} + } + if req.CostPrice != nil { + record.CostPrice = *req.CostPrice + } + if req.SellPrice != nil { + record.SellPrice = *req.SellPrice + } + + // 3. 执行更新操作 + _, err = l.svcCtx.ProductModel.Update(l.ctx, nil, record) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), + "更新产品失败, err: %v, req: %+v", err, req) + } + + // 4. 返回结果 + return &types.AdminUpdateProductResp{Success: true}, nil +} diff --git a/app/main/api/internal/logic/admin_promotion/createpromotionlinklogic.go b/app/main/api/internal/logic/admin_promotion/createpromotionlinklogic.go new file mode 100644 index 0000000..a439823 --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/createpromotionlinklogic.go @@ -0,0 +1,136 @@ +package admin_promotion + +import ( + "context" + "crypto/rand" + "fmt" + "math/big" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type CreatePromotionLinkLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewCreatePromotionLinkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreatePromotionLinkLogic { + return &CreatePromotionLinkLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// 生成6位随机字符串(大小写字母和数字) +func generateRandomString() (string, error) { + const ( + chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + length = 6 + ) + + result := make([]byte, length) + for i := 0; i < length; i++ { + num, err := rand.Int(rand.Reader, big.NewInt(int64(len(chars)))) + if err != nil { + return "", err + } + result[i] = chars[num.Int64()] + } + return string(result), nil +} + +func (l *CreatePromotionLinkLogic) CreatePromotionLink(req *types.CreatePromotionLinkReq) (resp *types.CreatePromotionLinkResp, err error) { + // 获取当前用户ID + adminUserId, getUidErr := ctxdata.GetUidFromCtx(l.ctx) + if getUidErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "创建推广链接, 获取用户信息失败, %+v", getUidErr) + } + + // 生成唯一URL + var url string + maxRetries := 5 // 最大重试次数 + for i := 0; i < maxRetries; i++ { + // 生成6位随机字符串 + randomStr, err := generateRandomString() + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "创建推广链接, 生成随机字符串失败, %+v", err) + } + + // 检查URL是否已存在 + existLink, err := l.svcCtx.AdminPromotionLinkModel.FindOneByUrl(l.ctx, randomStr) + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建推广链接, 检查URL是否存在失败, %+v", err) + } + + if existLink != nil { + continue // URL已存在,继续尝试 + } + + // URL可用 + url = randomStr + break + } + + if url == "" { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "创建推广链接失败, 多次尝试生成唯一URL均失败") + } + url = fmt.Sprintf("%s/%s", l.svcCtx.Config.AdminPromotion.URLDomain, url) + // 创建推广链接 + link := &model.AdminPromotionLink{ + Name: req.Name, + Url: url, + AdminUserId: adminUserId, + } + + var linkId int64 + err = l.svcCtx.AdminPromotionLinkModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + result, err := l.svcCtx.AdminPromotionLinkModel.Insert(l.ctx, session, link) + if err != nil { + return fmt.Errorf("创建推广链接失败, %+v", err) + } + + linkId, err = result.LastInsertId() + if err != nil { + return fmt.Errorf("获取推广链接ID失败, %+v", err) + } + + // 创建总统计记录 + totalStats := &model.AdminPromotionLinkStatsTotal{ + LinkId: linkId, + } + _, err = l.svcCtx.AdminPromotionLinkStatsTotalModel.Insert(l.ctx, session, totalStats) + if err != nil { + return fmt.Errorf("创建推广链接总统计记录失败, %+v", err) + } + + // 创建统计历史记录 + historyStats := &model.AdminPromotionLinkStatsHistory{ + LinkId: linkId, + StatsDate: time.Now().Truncate(24 * time.Hour), + } + _, err = l.svcCtx.AdminPromotionLinkStatsHistoryModel.Insert(l.ctx, session, historyStats) + if err != nil { + return fmt.Errorf("创建推广链接统计历史记录失败, %+v", err) + } + return nil + }) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建推广链接失败, %+v", err) + } + + return &types.CreatePromotionLinkResp{ + Id: linkId, + Url: url, + }, nil +} diff --git a/app/main/api/internal/logic/admin_promotion/deletepromotionlinklogic.go b/app/main/api/internal/logic/admin_promotion/deletepromotionlinklogic.go new file mode 100644 index 0000000..f71b4af --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/deletepromotionlinklogic.go @@ -0,0 +1,91 @@ +package admin_promotion + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type DeletePromotionLinkLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewDeletePromotionLinkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeletePromotionLinkLogic { + return &DeletePromotionLinkLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *DeletePromotionLinkLogic) DeletePromotionLink(req *types.DeletePromotionLinkReq) error { + // 获取当前用户ID + adminUserId, getUidErr := ctxdata.GetUidFromCtx(l.ctx) + if getUidErr != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "删除推广链接, 获取用户信息失败, %+v", getUidErr) + } + + // 获取链接信息 + link, err := l.svcCtx.AdminPromotionLinkModel.FindOne(l.ctx, req.Id) + if err != nil { + return errors.Wrapf(err, "删除推广链接, 获取链接信息失败, %+v", err) + } + + // 验证用户权限 + if link.AdminUserId != adminUserId { + return errors.Wrapf(xerr.NewErrMsg("无权限删除此链接"), "删除推广链接, 无权限删除此链接, %+v", link) + } + + // 在事务中执行所有删除操作 + err = l.svcCtx.AdminPromotionLinkModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 软删除链接 + err = l.svcCtx.AdminPromotionLinkModel.DeleteSoft(l.ctx, session, link) + if err != nil { + return errors.Wrapf(err, "删除推广链接, 软删除链接失败, %+v", err) + } + + // 软删除总统计记录 + totalStats, err := l.svcCtx.AdminPromotionLinkStatsTotalModel.FindOneByLinkId(l.ctx, link.Id) + if err != nil && !errors.Is(err, model.ErrNotFound) { + return errors.Wrapf(err, "删除推广链接, 获取总统计记录失败, %+v", err) + } + if totalStats != nil { + err = l.svcCtx.AdminPromotionLinkStatsTotalModel.DeleteSoft(l.ctx, session, totalStats) + if err != nil { + return errors.Wrapf(err, "删除推广链接, 软删除总统计记录失败, %+v", err) + } + } + + // 软删除历史统计记录 + builder := l.svcCtx.AdminPromotionLinkStatsHistoryModel.SelectBuilder() + builder = builder.Where("link_id = ?", link.Id) + historyStats, err := l.svcCtx.AdminPromotionLinkStatsHistoryModel.FindAll(l.ctx, builder, "") + if err != nil { + return errors.Wrapf(err, "删除推广链接, 获取历史统计记录失败, %+v", err) + } + for _, stat := range historyStats { + err = l.svcCtx.AdminPromotionLinkStatsHistoryModel.DeleteSoft(l.ctx, session, stat) + if err != nil { + return errors.Wrapf(err, "删除推广链接, 软删除历史统计记录失败, %+v", err) + } + } + + return nil + }) + + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "删除推广链接失败, %+v", err) + } + + return nil +} diff --git a/app/main/api/internal/logic/admin_promotion/getpromotionlinkdetaillogic.go b/app/main/api/internal/logic/admin_promotion/getpromotionlinkdetaillogic.go new file mode 100644 index 0000000..bbd4ec8 --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/getpromotionlinkdetaillogic.go @@ -0,0 +1,65 @@ +package admin_promotion + +import ( + "context" + "fmt" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type GetPromotionLinkDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetPromotionLinkDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPromotionLinkDetailLogic { + return &GetPromotionLinkDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetPromotionLinkDetailLogic) GetPromotionLinkDetail(req *types.GetPromotionLinkDetailReq) (resp *types.GetPromotionLinkDetailResp, err error) { + // 获取当前用户ID + adminUserId, getUidErr := ctxdata.GetUidFromCtx(l.ctx) + if getUidErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取当前用户ID失败, %+v", getUidErr) + } + + // 获取链接信息 + link, err := l.svcCtx.AdminPromotionLinkModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(err, "获取链接信息失败, %+v", err) + } + + // 验证用户权限 + if link.AdminUserId != adminUserId { + return nil, errors.Wrapf(xerr.NewErrMsg("无权限访问此链接"), "获取链接信息失败, 无权限访问此链接, %+v", link) + } + + // 获取总统计 + totalStats, err := l.svcCtx.AdminPromotionLinkStatsTotalModel.FindOne(l.ctx, link.Id) + if err != nil && !errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(err, "获取总统计失败, %+v", err) + } + return &types.GetPromotionLinkDetailResp{ + Name: link.Name, + Url: link.Url, + ClickCount: totalStats.ClickCount, + PayCount: totalStats.PayCount, + PayAmount: fmt.Sprintf("%.2f", totalStats.PayAmount), + CreateTime: link.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: link.UpdateTime.Format("2006-01-02 15:04:05"), + LastClickTime: totalStats.LastClickTime.Time.Format("2006-01-02 15:04:05"), + LastPayTime: totalStats.LastPayTime.Time.Format("2006-01-02 15:04:05"), + }, nil +} diff --git a/app/main/api/internal/logic/admin_promotion/getpromotionlinklistlogic.go b/app/main/api/internal/logic/admin_promotion/getpromotionlinklistlogic.go new file mode 100644 index 0000000..5421008 --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/getpromotionlinklistlogic.go @@ -0,0 +1,104 @@ +package admin_promotion + +import ( + "context" + "fmt" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type GetPromotionLinkListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetPromotionLinkListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPromotionLinkListLogic { + return &GetPromotionLinkListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetPromotionLinkListLogic) GetPromotionLinkList(req *types.GetPromotionLinkListReq) (resp *types.GetPromotionLinkListResp, err error) { + // 获取当前用户ID + adminUserId, getUidErr := ctxdata.GetUidFromCtx(l.ctx) + if getUidErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取当前用户ID失败, %+v", getUidErr) + } + + // 构建查询条件 + builder := l.svcCtx.AdminPromotionLinkModel.SelectBuilder() + builder = builder.Where("admin_user_id = ?", adminUserId) + if req.Name != "" { + builder = builder.Where("name LIKE ?", "%"+req.Name+"%") + } + if req.Url != "" { + builder = builder.Where("url LIKE ?", "%"+req.Url+"%") + } + + // 获取列表和总数 + links, total, err := l.svcCtx.AdminPromotionLinkModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC") + if err != nil { + return nil, errors.Wrapf(err, "获取推广链接列表失败, %+v", err) + } + + // 使用MapReduce并发获取统计数据 + items := make([]types.PromotionLinkItem, len(links)) + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for _, link := range links { + source <- link + } + }, func(item interface{}, writer mr.Writer[types.PromotionLinkItem], cancel func(error)) { + link := item.(*model.AdminPromotionLink) + // 获取总统计 + totalStats, err := l.svcCtx.AdminPromotionLinkStatsTotalModel.FindOneByLinkId(l.ctx, link.Id) + if err != nil && !errors.Is(err, model.ErrNotFound) { + cancel(errors.Wrapf(err, "获取总统计失败, linkId: %d, %+v", link.Id, err)) + return + } + writer.Write(types.PromotionLinkItem{ + Id: link.Id, + Name: link.Name, + Url: link.Url, + ClickCount: totalStats.ClickCount, + PayCount: totalStats.PayCount, + PayAmount: fmt.Sprintf("%.2f", totalStats.PayAmount), + CreateTime: link.CreateTime.Format("2006-01-02 15:04:05"), + LastClickTime: func() string { + if totalStats.LastClickTime.Valid { + return totalStats.LastClickTime.Time.Format("2006-01-02 15:04:05") + } + return "" + }(), + LastPayTime: func() string { + if totalStats.LastPayTime.Valid { + return totalStats.LastPayTime.Time.Format("2006-01-02 15:04:05") + } + return "" + }(), + }) + }, func(pipe <-chan types.PromotionLinkItem, cancel func(error)) { + for i := 0; i < len(links); i++ { + item := <-pipe + items[i] = item + } + }) + if err != nil { + return nil, errors.Wrapf(err, "获取推广链接统计数据失败, %+v", err) + } + + return &types.GetPromotionLinkListResp{ + Total: total, + Items: items, + }, nil +} diff --git a/app/main/api/internal/logic/admin_promotion/getpromotionstatshistorylogic.go b/app/main/api/internal/logic/admin_promotion/getpromotionstatshistorylogic.go new file mode 100644 index 0000000..d88e2a7 --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/getpromotionstatshistorylogic.go @@ -0,0 +1,83 @@ +package admin_promotion + +import ( + "context" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type GetPromotionStatsHistoryLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetPromotionStatsHistoryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPromotionStatsHistoryLogic { + return &GetPromotionStatsHistoryLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetPromotionStatsHistoryLogic) GetPromotionStatsHistory(req *types.GetPromotionStatsHistoryReq) (resp []types.PromotionStatsHistoryItem, err error) { + // 获取当前用户ID + adminUserId, getUidErr := ctxdata.GetUidFromCtx(l.ctx) + if getUidErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取当前用户ID失败, %+v", getUidErr) + } + // 构建查询条件 + builder := l.svcCtx.AdminPromotionLinkStatsHistoryModel.SelectBuilder() + + // 如果有日期范围,添加日期过滤 + if req.StartDate != "" && req.EndDate != "" { + startDate, err := time.Parse("2006-01-02", req.StartDate) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "开始日期格式错误") + } + endDate, err := time.Parse("2006-01-02", req.EndDate) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "结束日期格式错误") + } + // 将结束日期设置为当天的最后一刻 + endDate = endDate.Add(24*time.Hour - time.Second) + builder = builder.Where("stats_date BETWEEN ? AND ?", startDate, endDate) + } + + // 获取历史统计数据 + historyStats, err := l.svcCtx.AdminPromotionLinkStatsHistoryModel.FindAll(l.ctx, builder, "stats_date DESC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取历史统计数据失败") + } + + // 转换为响应格式 + resp = make([]types.PromotionStatsHistoryItem, 0, len(historyStats)) + for _, stat := range historyStats { + // 验证链接是否属于当前用户 + link, err := l.svcCtx.AdminPromotionLinkModel.FindOne(l.ctx, stat.LinkId) + if err != nil { + continue // 如果链接不存在,跳过该记录 + } + if link.AdminUserId != adminUserId { + continue // 如果链接不属于当前用户,跳过该记录 + } + + resp = append(resp, types.PromotionStatsHistoryItem{ + Id: stat.Id, + LinkId: stat.LinkId, + PayAmount: stat.PayAmount, + ClickCount: stat.ClickCount, + PayCount: stat.PayCount, + StatsDate: stat.StatsDate.Format("2006-01-02"), + }) + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_promotion/getpromotionstatstotallogic.go b/app/main/api/internal/logic/admin_promotion/getpromotionstatstotallogic.go new file mode 100644 index 0000000..7d57d58 --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/getpromotionstatstotallogic.go @@ -0,0 +1,166 @@ +package admin_promotion + +import ( + "context" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type GetPromotionStatsTotalLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetPromotionStatsTotalLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPromotionStatsTotalLogic { + return &GetPromotionStatsTotalLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetPromotionStatsTotalLogic) GetPromotionStatsTotal(req *types.GetPromotionStatsTotalReq) (resp *types.GetPromotionStatsTotalResp, err error) { + // 获取当前用户ID + adminUserId, getUidErr := ctxdata.GetUidFromCtx(l.ctx) + if getUidErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取当前用户ID失败, %+v", getUidErr) + } + + // 获取用户的所有推广链接 + linkBuilder := l.svcCtx.AdminPromotionLinkModel.SelectBuilder() + linkBuilder = linkBuilder.Where("admin_user_id = ?", adminUserId) + links, err := l.svcCtx.AdminPromotionLinkModel.FindAll(l.ctx, linkBuilder, "") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取推广链接列表失败, %+v", err) + } + + // 如果没有推广链接,返回空统计 + if len(links) == 0 { + return &types.GetPromotionStatsTotalResp{}, nil + } + + // 构建链接ID列表 + linkIds := make([]int64, len(links)) + for i, link := range links { + linkIds[i] = link.Id + } + + // 获取并计算总统计数据 + var totalClickCount, totalPayCount int64 + var totalPayAmount float64 + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for _, linkId := range linkIds { + source <- linkId + } + }, func(item interface{}, writer mr.Writer[struct { + ClickCount int64 + PayCount int64 + PayAmount float64 + }], cancel func(error)) { + linkId := item.(int64) + stats, err := l.svcCtx.AdminPromotionLinkStatsTotalModel.FindOneByLinkId(l.ctx, linkId) + if err != nil && !errors.Is(err, model.ErrNotFound) { + cancel(errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取总统计数据失败, linkId: %d, %+v", linkId, err)) + return + } + if stats != nil { + writer.Write(struct { + ClickCount int64 + PayCount int64 + PayAmount float64 + }{ + ClickCount: stats.ClickCount, + PayCount: stats.PayCount, + PayAmount: stats.PayAmount, + }) + } + }, func(pipe <-chan struct { + ClickCount int64 + PayCount int64 + PayAmount float64 + }, cancel func(error)) { + for stats := range pipe { + totalClickCount += stats.ClickCount + totalPayCount += stats.PayCount + totalPayAmount += stats.PayAmount + } + }) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取总统计数据失败, %+v", err) + } + + // 获取今日统计数据 + now := time.Now() + today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local) + var todayClickCount, todayPayCount int64 + var todayPayAmount float64 + + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for _, linkId := range linkIds { + source <- linkId + } + }, func(item interface{}, writer mr.Writer[struct { + ClickCount int64 + PayCount int64 + PayAmount float64 + }], cancel func(error)) { + linkId := item.(int64) + builder := l.svcCtx.AdminPromotionLinkStatsHistoryModel.SelectBuilder() + builder = builder.Where("link_id = ? AND DATE(stats_date) = DATE(?)", linkId, today) + histories, err := l.svcCtx.AdminPromotionLinkStatsHistoryModel.FindAll(l.ctx, builder, "") + if err != nil { + cancel(errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取今日统计数据失败, linkId: %d, %+v", linkId, err)) + return + } + + var clickCount, payCount int64 + var payAmount float64 + for _, history := range histories { + clickCount += history.ClickCount + payCount += history.PayCount + payAmount += history.PayAmount + } + + writer.Write(struct { + ClickCount int64 + PayCount int64 + PayAmount float64 + }{ + ClickCount: clickCount, + PayCount: payCount, + PayAmount: payAmount, + }) + }, func(pipe <-chan struct { + ClickCount int64 + PayCount int64 + PayAmount float64 + }, cancel func(error)) { + for stats := range pipe { + todayClickCount += stats.ClickCount + todayPayCount += stats.PayCount + todayPayAmount += stats.PayAmount + } + }) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取今日统计数据失败, %+v", err) + } + + return &types.GetPromotionStatsTotalResp{ + TodayClickCount: int64(todayClickCount), + TodayPayCount: int64(todayPayCount), + TodayPayAmount: todayPayAmount, + TotalClickCount: int64(totalClickCount), + TotalPayCount: int64(totalPayCount), + TotalPayAmount: totalPayAmount, + }, nil +} diff --git a/app/main/api/internal/logic/admin_promotion/recordlinkclicklogic.go b/app/main/api/internal/logic/admin_promotion/recordlinkclicklogic.go new file mode 100644 index 0000000..2f43055 --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/recordlinkclicklogic.go @@ -0,0 +1,57 @@ +package admin_promotion + +import ( + "context" + "fmt" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type RecordLinkClickLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewRecordLinkClickLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RecordLinkClickLogic { + return &RecordLinkClickLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *RecordLinkClickLogic) RecordLinkClick(req *types.RecordLinkClickReq) (resp *types.RecordLinkClickResp, err error) { + // 校验路径格式 + if len(req.Path) != 6 { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "无效的推广链接路径") + } + + // 检查是否只包含大小写字母和数字 + for _, char := range req.Path { + if !((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9')) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "无效的推广链接路径") + } + } + url := fmt.Sprintf("%s/%s", l.svcCtx.Config.AdminPromotion.URLDomain, req.Path) + + link, err := l.svcCtx.AdminPromotionLinkModel.FindOneByUrl(l.ctx, url) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "无效的推广链接路径") + } + + // 使用 statsService 更新点击统计 + err = l.svcCtx.AdminPromotionLinkStatsService.UpdateLinkStats(l.ctx, link.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新点击统计失败: %+v", err) + } + + return &types.RecordLinkClickResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_promotion/updatepromotionlinklogic.go b/app/main/api/internal/logic/admin_promotion/updatepromotionlinklogic.go new file mode 100644 index 0000000..779d900 --- /dev/null +++ b/app/main/api/internal/logic/admin_promotion/updatepromotionlinklogic.go @@ -0,0 +1,57 @@ +package admin_promotion + +import ( + "context" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type UpdatePromotionLinkLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewUpdatePromotionLinkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdatePromotionLinkLogic { + return &UpdatePromotionLinkLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *UpdatePromotionLinkLogic) UpdatePromotionLink(req *types.UpdatePromotionLinkReq) error { + // 获取当前用户ID + adminUserId, getUidErr := ctxdata.GetUidFromCtx(l.ctx) + if getUidErr != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "更新推广链接, 获取用户信息失败, %+v", getUidErr) + } + + // 获取链接信息 + link, err := l.svcCtx.AdminPromotionLinkModel.FindOne(l.ctx, req.Id) + if err != nil { + return errors.Wrapf(err, "更新推广链接, 获取链接信息失败, %+v", err) + } + + // 验证用户权限 + if link.AdminUserId != adminUserId { + return errors.Wrapf(xerr.NewErrMsg("无权限修改此链接"), "更新推广链接, 无权限修改此链接, %+v", link) + } + + // 更新链接信息 + link.Name = *req.Name + link.UpdateTime = time.Now() + + _, err = l.svcCtx.AdminPromotionLinkModel.Update(l.ctx, nil, link) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新推广链接, 更新链接信息失败, %+v", err) + } + return nil +} diff --git a/app/main/api/internal/logic/admin_query/admingetquerycleanupconfiglistlogic.go b/app/main/api/internal/logic/admin_query/admingetquerycleanupconfiglistlogic.go new file mode 100644 index 0000000..c4887ed --- /dev/null +++ b/app/main/api/internal/logic/admin_query/admingetquerycleanupconfiglistlogic.go @@ -0,0 +1,62 @@ +package admin_query + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/globalkey" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetQueryCleanupConfigListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetQueryCleanupConfigListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetQueryCleanupConfigListLogic { + return &AdminGetQueryCleanupConfigListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetQueryCleanupConfigListLogic) AdminGetQueryCleanupConfigList(req *types.AdminGetQueryCleanupConfigListReq) (resp *types.AdminGetQueryCleanupConfigListResp, err error) { + // 构建查询条件 + builder := l.svcCtx.QueryCleanupConfigModel.SelectBuilder(). + Where("del_state = ?", globalkey.DelStateNo) + + if req.Status > 0 { + builder = builder.Where("status = ?", req.Status) + } + + // 查询配置列表 + configs, err := l.svcCtx.QueryCleanupConfigModel.FindAll(l.ctx, builder, "id ASC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询清理配置列表失败 err: %v", err) + } + + // 构建响应 + resp = &types.AdminGetQueryCleanupConfigListResp{ + Items: make([]types.QueryCleanupConfigItem, 0, len(configs)), + } + + for _, config := range configs { + item := types.QueryCleanupConfigItem{ + Id: config.Id, + ConfigKey: config.ConfigKey, + ConfigValue: config.ConfigValue, + ConfigDesc: config.ConfigDesc, + Status: config.Status, + CreateTime: config.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: config.UpdateTime.Format("2006-01-02 15:04:05"), + } + resp.Items = append(resp.Items, item) + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_query/admingetquerycleanupdetaillistlogic.go b/app/main/api/internal/logic/admin_query/admingetquerycleanupdetaillistlogic.go new file mode 100644 index 0000000..97232e3 --- /dev/null +++ b/app/main/api/internal/logic/admin_query/admingetquerycleanupdetaillistlogic.go @@ -0,0 +1,126 @@ +package admin_query + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/globalkey" + "qnc-server/common/xerr" + "sync" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type AdminGetQueryCleanupDetailListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetQueryCleanupDetailListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetQueryCleanupDetailListLogic { + return &AdminGetQueryCleanupDetailListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetQueryCleanupDetailListLogic) AdminGetQueryCleanupDetailList(req *types.AdminGetQueryCleanupDetailListReq) (resp *types.AdminGetQueryCleanupDetailListResp, err error) { + // 1. 验证清理日志是否存在 + _, err = l.svcCtx.QueryCleanupLogModel.FindOne(l.ctx, req.LogId) + if err != nil { + if err == model.ErrNotFound { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "清理日志不存在, log_id: %d", req.LogId) + } + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询清理日志失败, log_id: %d, err: %v", req.LogId, err) + } + + // 2. 构建查询条件 + builder := l.svcCtx.QueryCleanupDetailModel.SelectBuilder(). + Where("cleanup_log_id = ?", req.LogId). + Where("del_state = ?", globalkey.DelStateNo) + + // 3. 并发获取总数和列表 + var total int64 + var details []*model.QueryCleanupDetail + err = mr.Finish(func() error { + var err error + total, err = l.svcCtx.QueryCleanupDetailModel.FindCount(l.ctx, builder, "id") + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询清理详情总数失败 err: %v", err) + } + return nil + }, func() error { + var err error + details, err = l.svcCtx.QueryCleanupDetailModel.FindPageListByPage(l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询清理详情列表失败 err: %v", err) + } + return nil + }) + if err != nil { + return nil, err + } + + // 4. 获取所有产品ID + productIds := make([]int64, 0, len(details)) + for _, detail := range details { + productIds = append(productIds, detail.ProductId) + } + + // 5. 并发获取产品信息 + productMap := make(map[int64]string) + var mu sync.Mutex + err = mr.MapReduceVoid(func(source chan<- interface{}) { + for _, productId := range productIds { + source <- productId + } + }, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) { + productId := item.(int64) + product, err := l.svcCtx.ProductModel.FindOne(l.ctx, productId) + if err != nil && !errors.Is(err, model.ErrNotFound) { + cancel(errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询产品信息失败, product_id: %d, err: %v", productId, err)) + return + } + mu.Lock() + if product != nil { + productMap[productId] = product.ProductName + } else { + productMap[productId] = "" // 产品不存在时设置为空字符串 + } + mu.Unlock() + writer.Write(struct{}{}) + }, func(pipe <-chan struct{}, cancel func(error)) { + for range pipe { + } + }) + if err != nil { + return nil, err + } + + // 6. 构建响应 + resp = &types.AdminGetQueryCleanupDetailListResp{ + Total: total, + Items: make([]types.QueryCleanupDetailItem, 0, len(details)), + } + + for _, detail := range details { + item := types.QueryCleanupDetailItem{ + Id: detail.Id, + CleanupLogId: detail.CleanupLogId, + QueryId: detail.QueryId, + OrderId: detail.OrderId, + UserId: detail.UserId, + ProductName: productMap[detail.ProductId], + QueryState: detail.QueryState, + CreateTimeOld: detail.CreateTimeOld.Format("2006-01-02 15:04:05"), + CreateTime: detail.CreateTime.Format("2006-01-02 15:04:05"), + } + resp.Items = append(resp.Items, item) + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_query/admingetquerycleanuploglistlogic.go b/app/main/api/internal/logic/admin_query/admingetquerycleanuploglistlogic.go new file mode 100644 index 0000000..c070782 --- /dev/null +++ b/app/main/api/internal/logic/admin_query/admingetquerycleanuploglistlogic.go @@ -0,0 +1,88 @@ +package admin_query + +import ( + "context" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/globalkey" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type AdminGetQueryCleanupLogListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetQueryCleanupLogListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetQueryCleanupLogListLogic { + return &AdminGetQueryCleanupLogListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetQueryCleanupLogListLogic) AdminGetQueryCleanupLogList(req *types.AdminGetQueryCleanupLogListReq) (resp *types.AdminGetQueryCleanupLogListResp, err error) { + // 构建查询条件 + builder := l.svcCtx.QueryCleanupLogModel.SelectBuilder(). + Where("del_state = ?", globalkey.DelStateNo) + + if req.Status > 0 { + builder = builder.Where("status = ?", req.Status) + } + if req.StartTime != "" { + builder = builder.Where("cleanup_time >= ?", req.StartTime) + } + if req.EndTime != "" { + builder = builder.Where("cleanup_time <= ?", req.EndTime) + } + + // 并发获取总数和列表 + var total int64 + var logs []*model.QueryCleanupLog + err = mr.Finish(func() error { + var err error + total, err = l.svcCtx.QueryCleanupLogModel.FindCount(l.ctx, builder, "id") + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询清理日志总数失败 err: %v", err) + } + return nil + }, func() error { + var err error + logs, err = l.svcCtx.QueryCleanupLogModel.FindPageListByPage(l.ctx, builder, req.Page, req.PageSize, "id DESC") + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询清理日志列表失败 err: %v", err) + } + return nil + }) + if err != nil { + return nil, err + } + + // 构建响应 + resp = &types.AdminGetQueryCleanupLogListResp{ + Total: total, + Items: make([]types.QueryCleanupLogItem, 0, len(logs)), + } + + for _, log := range logs { + item := types.QueryCleanupLogItem{ + Id: log.Id, + CleanupTime: log.CleanupTime.Format("2006-01-02 15:04:05"), + CleanupBefore: log.CleanupBefore.Format("2006-01-02 15:04:05"), + Status: log.Status, + AffectedRows: log.AffectedRows, + ErrorMsg: log.ErrorMsg.String, + Remark: log.Remark.String, + CreateTime: log.CreateTime.Format("2006-01-02 15:04:05"), + } + resp.Items = append(resp.Items, item) + } + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_query/admingetquerydetailbyorderidlogic.go b/app/main/api/internal/logic/admin_query/admingetquerydetailbyorderidlogic.go new file mode 100644 index 0000000..fcf3b9b --- /dev/null +++ b/app/main/api/internal/logic/admin_query/admingetquerydetailbyorderidlogic.go @@ -0,0 +1,189 @@ +package admin_query + +import ( + "context" + "database/sql" + "encoding/hex" + "encoding/json" + "fmt" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + "qnc-server/pkg/lzkit/lzUtils" + + "github.com/jinzhu/copier" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminGetQueryDetailByOrderIdLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetQueryDetailByOrderIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetQueryDetailByOrderIdLogic { + return &AdminGetQueryDetailByOrderIdLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetQueryDetailByOrderIdLogic) AdminGetQueryDetailByOrderId(req *types.AdminGetQueryDetailByOrderIdReq) (resp *types.AdminGetQueryDetailByOrderIdResp, err error) { + + // 获取报告信息 + queryModel, err := l.svcCtx.QueryModel.FindOneByOrderId(l.ctx, req.OrderId) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "报告查询, 查找报告错误: %+v", err) + } + + var query types.AdminGetQueryDetailByOrderIdResp + query.CreateTime = queryModel.CreateTime.Format("2006-01-02 15:04:05") + query.UpdateTime = queryModel.UpdateTime.Format("2006-01-02 15:04:05") + + // 解密查询数据 + secretKey := l.svcCtx.Config.Encrypt.SecretKey + key, decodeErr := hex.DecodeString(secretKey) + if decodeErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 获取AES解密解药失败, %+v", err) + } + processParamsErr := ProcessQueryParams(queryModel.QueryParams, &query.QueryParams, key) + if processParamsErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告参数处理失败: %v", processParamsErr) + } + processErr := ProcessQueryData(queryModel.QueryData, &query.QueryData, key) + if processErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告结果处理失败: %v", processErr) + } + updateFeatureAndProductFeatureErr := l.UpdateFeatureAndProductFeature(queryModel.ProductId, &query.QueryData) + if updateFeatureAndProductFeatureErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告结果处理失败: %v", updateFeatureAndProductFeatureErr) + } + // 复制报告数据 + err = copier.Copy(&query, queryModel) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告结构体复制失败, %v", err) + } + product, err := l.svcCtx.ProductModel.FindOne(l.ctx, queryModel.ProductId) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 获取商品信息失败, %v", err) + } + query.ProductName = product.ProductName + return &types.AdminGetQueryDetailByOrderIdResp{ + Id: query.Id, + OrderId: query.OrderId, + UserId: query.UserId, + ProductName: query.ProductName, + QueryParams: query.QueryParams, + QueryData: query.QueryData, + CreateTime: query.CreateTime, + UpdateTime: query.UpdateTime, + QueryState: query.QueryState, + }, nil +} + +// ProcessQueryData 解密和反序列化 QueryData +func ProcessQueryData(queryData sql.NullString, target *[]types.AdminQueryItem, key []byte) error { + queryDataStr := lzUtils.NullStringToString(queryData) + if queryDataStr == "" { + return nil + } + + // 解密数据 + decryptedData, decryptErr := crypto.AesDecrypt(queryDataStr, key) + if decryptErr != nil { + return decryptErr + } + + // 解析 JSON 数组 + var decryptedArray []map[string]interface{} + unmarshalErr := json.Unmarshal(decryptedData, &decryptedArray) + if unmarshalErr != nil { + return unmarshalErr + } + + // 确保 target 具有正确的长度 + if len(*target) == 0 { + *target = make([]types.AdminQueryItem, len(decryptedArray)) + } + + // 填充解密后的数据到 target + for i := 0; i < len(decryptedArray); i++ { + // 直接填充解密数据到 Data 字段 + (*target)[i].Data = decryptedArray[i] + } + return nil +} + +// ProcessQueryParams解密和反序列化 QueryParams +func ProcessQueryParams(QueryParams string, target *map[string]interface{}, key []byte) error { + // 解密 QueryParams + decryptedData, decryptErr := crypto.AesDecrypt(QueryParams, key) + if decryptErr != nil { + return decryptErr + } + + // 反序列化解密后的数据 + unmarshalErr := json.Unmarshal(decryptedData, target) + if unmarshalErr != nil { + return unmarshalErr + } + + return nil +} + +func (l *AdminGetQueryDetailByOrderIdLogic) UpdateFeatureAndProductFeature(productID int64, target *[]types.AdminQueryItem) error { + // 遍历 target 数组,使用倒序遍历,以便删除元素时不影响索引 + for i := len(*target) - 1; i >= 0; i-- { + queryItem := &(*target)[i] + + // 确保 Data 为 map 类型 + data, ok := queryItem.Data.(map[string]interface{}) + if !ok { + return fmt.Errorf("queryItem.Data 必须是 map[string]interface{} 类型") + } + + // 从 Data 中获取 apiID + apiID, ok := data["apiID"].(string) + if !ok { + return fmt.Errorf("queryItem.Data 中的 apiID 必须是字符串类型") + } + + // 查询 Feature + feature, err := l.svcCtx.FeatureModel.FindOneByApiId(l.ctx, apiID) + if err != nil { + // 如果 Feature 查不到,也要删除当前 QueryItem + *target = append((*target)[:i], (*target)[i+1:]...) + continue + } + + // 查询 ProductFeatureModel + builder := l.svcCtx.ProductFeatureModel.SelectBuilder().Where("product_id = ?", productID) + productFeatures, err := l.svcCtx.ProductFeatureModel.FindAll(l.ctx, builder, "") + if err != nil { + return fmt.Errorf("查询 ProductFeatureModel 错误: %v", err) + } + + // 遍历 productFeatures,找到与 feature.ID 关联且 enable == 1 的项 + var featureData map[string]interface{} + sort := 0 + for _, pf := range productFeatures { + if pf.FeatureId == feature.Id { // 确保和 Feature 关联 + sort = int(pf.Sort) + break // 找到第一个符合条件的就退出循环 + } + } + featureData = map[string]interface{}{ + "featureName": feature.Name, + "sort": sort, + } + + // 更新 queryItem 的 Feature 字段(不是数组) + queryItem.Feature = featureData + } + + return nil +} diff --git a/app/main/api/internal/logic/admin_query/adminupdatequerycleanupconfiglogic.go b/app/main/api/internal/logic/admin_query/adminupdatequerycleanupconfiglogic.go new file mode 100644 index 0000000..7b2ee72 --- /dev/null +++ b/app/main/api/internal/logic/admin_query/adminupdatequerycleanupconfiglogic.go @@ -0,0 +1,63 @@ +package admin_query + +import ( + "context" + "time" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminUpdateQueryCleanupConfigLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateQueryCleanupConfigLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateQueryCleanupConfigLogic { + return &AdminUpdateQueryCleanupConfigLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateQueryCleanupConfigLogic) AdminUpdateQueryCleanupConfig(req *types.AdminUpdateQueryCleanupConfigReq) (resp *types.AdminUpdateQueryCleanupConfigResp, err error) { + // 使用事务处理更新操作 + err = l.svcCtx.QueryCleanupConfigModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 1. 查询配置是否存在 + config, err := l.svcCtx.QueryCleanupConfigModel.FindOne(ctx, req.Id) + if err != nil { + if err == model.ErrNotFound { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "配置不存在, id: %d", req.Id) + } + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询配置失败, id: %d, err: %v", req.Id, err) + } + + // 2. 更新配置 + config.ConfigValue = req.ConfigValue + config.Status = req.Status + config.UpdateTime = time.Now() + + _, err = l.svcCtx.QueryCleanupConfigModel.Update(ctx, session, config) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新配置失败, id: %d, err: %v", req.Id, err) + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &types.AdminUpdateQueryCleanupConfigResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_role/createrolelogic.go b/app/main/api/internal/logic/admin_role/createrolelogic.go new file mode 100644 index 0000000..94d14ce --- /dev/null +++ b/app/main/api/internal/logic/admin_role/createrolelogic.go @@ -0,0 +1,83 @@ +package admin_role + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type CreateRoleLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewCreateRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateRoleLogic { + return &CreateRoleLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *CreateRoleLogic) CreateRole(req *types.CreateRoleReq) (resp *types.CreateRoleResp, err error) { + // 检查角色编码是否已存在 + roleModel, err := l.svcCtx.AdminRoleModel.FindOneByRoleCode(l.ctx, req.RoleCode) + if err != nil && err != model.ErrNotFound { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建角色失败: %v", err) + } + if roleModel != nil && roleModel.RoleName == req.RoleName { + return nil, errors.Wrapf(xerr.NewErrMsg("角色名称已存在"), "创建角色失败, 角色名称已存在: %v", err) + } + // 创建角色 + role := &model.AdminRole{ + RoleName: req.RoleName, + RoleCode: req.RoleCode, + Description: req.Description, + Status: req.Status, + Sort: req.Sort, + } + var roleId int64 + // 使用事务创建角色和关联菜单 + err = l.svcCtx.AdminRoleModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 创建角色 + result, err := l.svcCtx.AdminRoleModel.Insert(ctx, session, role) + if err != nil { + return errors.New("插入新角色失败") + } + roleId, err = result.LastInsertId() + if err != nil { + return errors.New("获取新角色ID失败") + } + + // 创建角色菜单关联 + if len(req.MenuIds) > 0 { + for _, menuId := range req.MenuIds { + roleMenu := &model.AdminRoleMenu{ + RoleId: roleId, + MenuId: menuId, + } + _, err = l.svcCtx.AdminRoleMenuModel.Insert(ctx, session, roleMenu) + if err != nil { + return errors.New("插入角色菜单关联失败") + } + } + } + + return nil + }) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建角色失败: %v", err) + } + + return &types.CreateRoleResp{ + Id: roleId, + }, nil +} diff --git a/app/main/api/internal/logic/admin_role/deleterolelogic.go b/app/main/api/internal/logic/admin_role/deleterolelogic.go new file mode 100644 index 0000000..60e9019 --- /dev/null +++ b/app/main/api/internal/logic/admin_role/deleterolelogic.go @@ -0,0 +1,84 @@ +package admin_role + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type DeleteRoleLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewDeleteRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteRoleLogic { + return &DeleteRoleLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *DeleteRoleLogic) DeleteRole(req *types.DeleteRoleReq) (resp *types.DeleteRoleResp, err error) { + // 检查角色是否存在 + _, err = l.svcCtx.AdminRoleModel.FindOne(l.ctx, req.Id) + if err != nil { + if errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrMsg("角色不存在"), "删除角色失败, 角色不存在err: %v", err) + } + return nil, err + } + + // 使用事务删除角色和关联数据 + err = l.svcCtx.AdminRoleModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 删除角色菜单关联 + builder := l.svcCtx.AdminRoleMenuModel.SelectBuilder(). + Where("role_id = ?", req.Id) + menus, err := l.svcCtx.AdminRoleMenuModel.FindAll(ctx, builder, "id ASC") + if err != nil { + return err + } + for _, menu := range menus { + err = l.svcCtx.AdminRoleMenuModel.Delete(ctx, session, menu.Id) + if err != nil { + return err + } + } + + // 删除角色用户关联 + builder = l.svcCtx.AdminUserRoleModel.SelectBuilder(). + Where("role_id = ?", req.Id) + users, err := l.svcCtx.AdminUserRoleModel.FindAll(ctx, builder, "id ASC") + if err != nil { + return err + } + for _, user := range users { + err = l.svcCtx.AdminUserRoleModel.Delete(ctx, session, user.Id) + if err != nil { + return err + } + } + + // 删除角色 + err = l.svcCtx.AdminRoleModel.Delete(ctx, session, req.Id) + if err != nil { + return err + } + return nil + }) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "删除角色失败err: %v", err) + } + + return &types.DeleteRoleResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_role/getroledetaillogic.go b/app/main/api/internal/logic/admin_role/getroledetaillogic.go new file mode 100644 index 0000000..1fe4079 --- /dev/null +++ b/app/main/api/internal/logic/admin_role/getroledetaillogic.go @@ -0,0 +1,91 @@ +package admin_role + +import ( + "context" + "sync" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/samber/lo" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type GetRoleDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetRoleDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetRoleDetailLogic { + return &GetRoleDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetRoleDetailLogic) GetRoleDetail(req *types.GetRoleDetailReq) (resp *types.GetRoleDetailResp, err error) { + // 使用MapReduceVoid并发获取角色信息和菜单ID + var role *model.AdminRole + var menuIds []int64 + var mutex sync.Mutex + var wg sync.WaitGroup + + mr.MapReduceVoid(func(source chan<- interface{}) { + source <- 1 // 获取角色信息 + source <- 2 // 获取菜单ID + }, func(item interface{}, writer mr.Writer[interface{}], cancel func(error)) { + taskType := item.(int) + wg.Add(1) + defer wg.Done() + + if taskType == 1 { + result, err := l.svcCtx.AdminRoleModel.FindOne(l.ctx, req.Id) + if err != nil { + cancel(err) + return + } + mutex.Lock() + role = result + mutex.Unlock() + } else if taskType == 2 { + builder := l.svcCtx.AdminRoleMenuModel.SelectBuilder(). + Where("role_id = ?", req.Id) + menus, err := l.svcCtx.AdminRoleMenuModel.FindAll(l.ctx, builder, "id ASC") + if err != nil { + cancel(err) + return + } + mutex.Lock() + menuIds = lo.Map(menus, func(item *model.AdminRoleMenu, _ int) int64 { + return item.MenuId + }) + mutex.Unlock() + } + }, func(pipe <-chan interface{}, cancel func(error)) { + // 不需要处理pipe中的数据 + }) + + wg.Wait() + + if role == nil { + return nil, errors.Wrapf(xerr.NewErrMsg("角色不存在"), "获取角色详情失败, 角色不存在err: %v", err) + } + + return &types.GetRoleDetailResp{ + Id: role.Id, + RoleName: role.RoleName, + RoleCode: role.RoleCode, + Description: role.Description, + Status: role.Status, + Sort: role.Sort, + CreateTime: role.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: role.UpdateTime.Format("2006-01-02 15:04:05"), + MenuIds: menuIds, + }, nil +} diff --git a/app/main/api/internal/logic/admin_role/getrolelistlogic.go b/app/main/api/internal/logic/admin_role/getrolelistlogic.go new file mode 100644 index 0000000..28bb69d --- /dev/null +++ b/app/main/api/internal/logic/admin_role/getrolelistlogic.go @@ -0,0 +1,148 @@ +package admin_role + +import ( + "context" + "sync" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + + "github.com/samber/lo" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type GetRoleListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetRoleListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetRoleListLogic { + return &GetRoleListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} +func (l *GetRoleListLogic) GetRoleList(req *types.GetRoleListReq) (resp *types.GetRoleListResp, err error) { + resp = &types.GetRoleListResp{ + Items: make([]types.RoleListItem, 0), + Total: 0, + } + + // 构建查询条件 + builder := l.svcCtx.AdminRoleModel.SelectBuilder() + if len(req.Name) > 0 { + builder = builder.Where("role_name LIKE ?", "%"+req.Name+"%") + } + if len(req.Code) > 0 { + builder = builder.Where("role_code LIKE ?", "%"+req.Code+"%") + } + if req.Status != -1 { + builder = builder.Where("status = ?", req.Status) + } + + // 设置分页 + offset := (req.Page - 1) * req.PageSize + builder = builder.OrderBy("sort ASC").Limit(uint64(req.PageSize)).Offset(uint64(offset)) + + // 使用MapReduceVoid并发获取总数和列表数据 + var roles []*model.AdminRole + var total int64 + var mutex sync.Mutex + var wg sync.WaitGroup + + mr.MapReduceVoid(func(source chan<- interface{}) { + source <- 1 // 获取角色列表 + source <- 2 // 获取总数 + }, func(item interface{}, writer mr.Writer[*model.AdminRole], cancel func(error)) { + taskType := item.(int) + wg.Add(1) + defer wg.Done() + + if taskType == 1 { + result, err := l.svcCtx.AdminRoleModel.FindAll(l.ctx, builder, "id DESC") + if err != nil { + cancel(err) + return + } + mutex.Lock() + roles = result + mutex.Unlock() + } else if taskType == 2 { + countBuilder := l.svcCtx.AdminRoleModel.SelectBuilder() + if len(req.Name) > 0 { + countBuilder = countBuilder.Where("role_name LIKE ?", "%"+req.Name+"%") + } + if len(req.Code) > 0 { + countBuilder = countBuilder.Where("role_code LIKE ?", "%"+req.Code+"%") + } + if req.Status != -1 { + countBuilder = countBuilder.Where("status = ?", req.Status) + } + + count, err := l.svcCtx.AdminRoleModel.FindCount(l.ctx, countBuilder, "id") + if err != nil { + cancel(err) + return + } + mutex.Lock() + total = count + mutex.Unlock() + } + }, func(pipe <-chan *model.AdminRole, cancel func(error)) { + // 不需要处理pipe中的数据 + }) + + wg.Wait() + + // 并发获取每个角色的菜单ID + var roleItems []types.RoleListItem + var roleItemsMutex sync.Mutex + + mr.MapReduceVoid(func(source chan<- interface{}) { + for _, role := range roles { + source <- role + } + }, func(item interface{}, writer mr.Writer[[]int64], cancel func(error)) { + role := item.(*model.AdminRole) + + // 获取角色关联的菜单ID + builder := l.svcCtx.AdminRoleMenuModel.SelectBuilder(). + Where("role_id = ?", role.Id) + menus, err := l.svcCtx.AdminRoleMenuModel.FindAll(l.ctx, builder, "id ASC") + if err != nil { + cancel(err) + return + } + menuIds := lo.Map(menus, func(item *model.AdminRoleMenu, _ int) int64 { + return item.MenuId + }) + + writer.Write(menuIds) + }, func(pipe <-chan []int64, cancel func(error)) { + for _, role := range roles { + menuIds := <-pipe + item := types.RoleListItem{ + Id: role.Id, + RoleName: role.RoleName, + RoleCode: role.RoleCode, + Description: role.Description, + Status: role.Status, + Sort: role.Sort, + CreateTime: role.CreateTime.Format("2006-01-02 15:04:05"), + MenuIds: menuIds, + } + roleItemsMutex.Lock() + roleItems = append(roleItems, item) + roleItemsMutex.Unlock() + } + }) + + resp.Items = roleItems + resp.Total = total + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_role/updaterolelogic.go b/app/main/api/internal/logic/admin_role/updaterolelogic.go new file mode 100644 index 0000000..4dfcea9 --- /dev/null +++ b/app/main/api/internal/logic/admin_role/updaterolelogic.go @@ -0,0 +1,148 @@ +package admin_role + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/samber/lo" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type UpdateRoleLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewUpdateRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateRoleLogic { + return &UpdateRoleLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *UpdateRoleLogic) UpdateRole(req *types.UpdateRoleReq) (resp *types.UpdateRoleResp, err error) { + // 检查角色是否存在 + role, err := l.svcCtx.AdminRoleModel.FindOne(l.ctx, req.Id) + if err != nil { + if errors.Is(err, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrMsg("角色不存在"), "更新角色失败, 角色不存在err: %v", err) + } + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新角色失败err: %v", err) + } + + // 检查角色编码是否重复 + if req.RoleCode != nil && *req.RoleCode != role.RoleCode { + roleModel, err := l.svcCtx.AdminRoleModel.FindOneByRoleCode(l.ctx, *req.RoleCode) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新角色失败err: %v", err) + } + if roleModel != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("角色编码已存在"), "更新角色失败, 角色编码已存在err: %v", err) + } + } + + // 更新角色信息 + if req.RoleName != nil { + role.RoleName = *req.RoleName + } + if req.RoleCode != nil { + role.RoleCode = *req.RoleCode + } + if req.Description != nil { + role.Description = *req.Description + } + if req.Status != nil { + role.Status = *req.Status + } + if req.Sort != nil { + role.Sort = *req.Sort + } + + // 使用事务更新角色和关联菜单 + err = l.svcCtx.AdminRoleModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 更新角色 + _, err = l.svcCtx.AdminRoleModel.Update(ctx, session, role) + if err != nil { + return err + } + if req.MenuIds != nil { + // 1. 获取当前关联的菜单ID + builder := l.svcCtx.AdminRoleMenuModel.SelectBuilder(). + Where("role_id = ?", req.Id) + currentMenus, err := l.svcCtx.AdminRoleMenuModel.FindAll(ctx, builder, "id ASC") + if err != nil { + return err + } + + // 2. 转换为map便于查找 + currentMenuMap := make(map[int64]*model.AdminRoleMenu) + for _, menu := range currentMenus { + currentMenuMap[menu.MenuId] = menu + } + + // 3. 检查新的菜单ID是否存在 + for _, menuId := range req.MenuIds { + exists, err := l.svcCtx.AdminMenuModel.FindOne(ctx, menuId) + if err != nil || exists == nil { + return errors.Wrapf(xerr.NewErrMsg("菜单不存在"), "菜单ID: %d", menuId) + } + } + + // 4. 找出需要删除和新增的关联 + var toDelete []*model.AdminRoleMenu + var toInsert []int64 + + // 需要删除的:当前存在但新列表中没有的 + for menuId, roleMenu := range currentMenuMap { + if !lo.Contains(req.MenuIds, menuId) { + toDelete = append(toDelete, roleMenu) + } + } + + // 需要新增的:新列表中有但当前不存在的 + for _, menuId := range req.MenuIds { + if _, exists := currentMenuMap[menuId]; !exists { + toInsert = append(toInsert, menuId) + } + } + + // 5. 删除需要移除的关联 + for _, roleMenu := range toDelete { + err = l.svcCtx.AdminRoleMenuModel.Delete(ctx, session, roleMenu.Id) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "删除角色菜单关联失败: %v", err) + } + } + + // 6. 添加新的关联 + for _, menuId := range toInsert { + roleMenu := &model.AdminRoleMenu{ + RoleId: req.Id, + MenuId: menuId, + } + _, err = l.svcCtx.AdminRoleMenuModel.Insert(ctx, session, roleMenu) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "添加角色菜单关联失败: %v", err) + } + } + } + + return nil + }) + + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新角色失败err: %v", err) + } + + return &types.UpdateRoleResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_user/admincreateuserlogic.go b/app/main/api/internal/logic/admin_user/admincreateuserlogic.go new file mode 100644 index 0000000..4d433ea --- /dev/null +++ b/app/main/api/internal/logic/admin_user/admincreateuserlogic.go @@ -0,0 +1,88 @@ +package admin_user + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminCreateUserLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminCreateUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateUserLogic { + return &AdminCreateUserLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminCreateUserLogic) AdminCreateUser(req *types.AdminCreateUserReq) (resp *types.AdminCreateUserResp, err error) { + // 检查用户名是否已存在 + exists, err := l.svcCtx.AdminUserModel.FindOneByUsername(l.ctx, req.Username) + if err != nil && err != model.ErrNotFound { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建用户失败: %v", err) + } + if exists != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("用户名已存在"), "创建用户失败") + } + password, err := crypto.PasswordHash("123456") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "创建用户失败, 加密密码失败: %v", err) + } + // 创建用户 + user := &model.AdminUser{ + Username: req.Username, + Password: password, // 注意:实际应用中需要加密密码 + RealName: req.RealName, + Status: req.Status, + } + + // 使用事务创建用户和关联角色 + err = l.svcCtx.AdminUserModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 创建用户 + result, err := l.svcCtx.AdminUserModel.Insert(ctx, session, user) + if err != nil { + return err + } + userId, err := result.LastInsertId() + if err != nil { + return err + } + + // 创建用户角色关联 + if len(req.RoleIds) > 0 { + for _, roleId := range req.RoleIds { + userRole := &model.AdminUserRole{ + UserId: userId, + RoleId: roleId, + } + _, err = l.svcCtx.AdminUserRoleModel.Insert(ctx, session, userRole) + if err != nil { + return err + } + } + } + + return nil + }) + + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建用户失败: %v", err) + } + + return &types.AdminCreateUserResp{ + Id: user.Id, + }, nil +} diff --git a/app/main/api/internal/logic/admin_user/admindeleteuserlogic.go b/app/main/api/internal/logic/admin_user/admindeleteuserlogic.go new file mode 100644 index 0000000..3924813 --- /dev/null +++ b/app/main/api/internal/logic/admin_user/admindeleteuserlogic.go @@ -0,0 +1,68 @@ +package admin_user + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminDeleteUserLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminDeleteUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteUserLogic { + return &AdminDeleteUserLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminDeleteUserLogic) AdminDeleteUser(req *types.AdminDeleteUserReq) (resp *types.AdminDeleteUserResp, err error) { + // 检查用户是否存在 + _, err = l.svcCtx.AdminUserModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %v", err) + } + + // 使用事务删除用户和关联数据 + err = l.svcCtx.AdminUserModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 删除用户角色关联 + builder := l.svcCtx.AdminUserRoleModel.SelectBuilder(). + Where("user_id = ?", req.Id) + roles, err := l.svcCtx.AdminUserRoleModel.FindAll(ctx, builder, "id ASC") + if err != nil { + return err + } + for _, role := range roles { + err = l.svcCtx.AdminUserRoleModel.Delete(ctx, session, role.Id) + if err != nil { + return err + } + } + + // 删除用户 + err = l.svcCtx.AdminUserModel.Delete(ctx, session, req.Id) + if err != nil { + return err + } + + return nil + }) + + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "删除用户失败: %v", err) + } + + return &types.AdminDeleteUserResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_user/admingetuserdetaillogic.go b/app/main/api/internal/logic/admin_user/admingetuserdetaillogic.go new file mode 100644 index 0000000..4f1a6db --- /dev/null +++ b/app/main/api/internal/logic/admin_user/admingetuserdetaillogic.go @@ -0,0 +1,88 @@ +package admin_user + +import ( + "context" + "errors" + "sync" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + + "github.com/samber/lo" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type AdminGetUserDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetUserDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetUserDetailLogic { + return &AdminGetUserDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetUserDetailLogic) AdminGetUserDetail(req *types.AdminGetUserDetailReq) (resp *types.AdminGetUserDetailResp, err error) { + // 使用MapReduceVoid并发获取用户信息和角色ID + var user *model.AdminUser + var roleIds []int64 + var mutex sync.Mutex + var wg sync.WaitGroup + + mr.MapReduceVoid(func(source chan<- interface{}) { + source <- 1 // 获取用户信息 + source <- 2 // 获取角色ID + }, func(item interface{}, writer mr.Writer[interface{}], cancel func(error)) { + taskType := item.(int) + wg.Add(1) + defer wg.Done() + + if taskType == 1 { + result, err := l.svcCtx.AdminUserModel.FindOne(l.ctx, req.Id) + if err != nil { + cancel(err) + return + } + mutex.Lock() + user = result + mutex.Unlock() + } else if taskType == 2 { + builder := l.svcCtx.AdminUserRoleModel.SelectBuilder(). + Where("user_id = ?", req.Id) + roles, err := l.svcCtx.AdminUserRoleModel.FindAll(l.ctx, builder, "id ASC") + if err != nil { + cancel(err) + return + } + mutex.Lock() + roleIds = lo.Map(roles, func(item *model.AdminUserRole, _ int) int64 { + return item.RoleId + }) + mutex.Unlock() + } + }, func(pipe <-chan interface{}, cancel func(error)) { + // 不需要处理pipe中的数据 + }) + + wg.Wait() + + if user == nil { + return nil, errors.New("用户不存在") + } + + return &types.AdminGetUserDetailResp{ + Id: user.Id, + Username: user.Username, + RealName: user.RealName, + Status: user.Status, + CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"), + UpdateTime: user.UpdateTime.Format("2006-01-02 15:04:05"), + RoleIds: roleIds, + }, nil +} diff --git a/app/main/api/internal/logic/admin_user/admingetuserlistlogic.go b/app/main/api/internal/logic/admin_user/admingetuserlistlogic.go new file mode 100644 index 0000000..66ebb92 --- /dev/null +++ b/app/main/api/internal/logic/admin_user/admingetuserlistlogic.go @@ -0,0 +1,149 @@ +package admin_user + +import ( + "context" + "sync" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + + "github.com/samber/lo" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/mr" +) + +type AdminGetUserListLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminGetUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetUserListLogic { + return &AdminGetUserListLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminGetUserListLogic) AdminGetUserList(req *types.AdminGetUserListReq) (resp *types.AdminGetUserListResp, err error) { + resp = &types.AdminGetUserListResp{ + Items: make([]types.AdminUserListItem, 0), + Total: 0, + } + + // 构建查询条件 + builder := l.svcCtx.AdminUserModel.SelectBuilder(). + Where("del_state = ?", 0) + if len(req.Username) > 0 { + builder = builder.Where("username LIKE ?", "%"+req.Username+"%") + } + if len(req.RealName) > 0 { + builder = builder.Where("real_name LIKE ?", "%"+req.RealName+"%") + } + if req.Status != -1 { + builder = builder.Where("status = ?", req.Status) + } + + // 设置分页 + offset := (req.Page - 1) * req.PageSize + builder = builder.OrderBy("id DESC").Limit(uint64(req.PageSize)).Offset(uint64(offset)) + + // 使用MapReduceVoid并发获取总数和列表数据 + var users []*model.AdminUser + var total int64 + var mutex sync.Mutex + var wg sync.WaitGroup + + mr.MapReduceVoid(func(source chan<- interface{}) { + source <- 1 // 获取用户列表 + source <- 2 // 获取总数 + }, func(item interface{}, writer mr.Writer[*model.AdminUser], cancel func(error)) { + taskType := item.(int) + wg.Add(1) + defer wg.Done() + + if taskType == 1 { + result, err := l.svcCtx.AdminUserModel.FindAll(l.ctx, builder, "id DESC") + if err != nil { + cancel(err) + return + } + mutex.Lock() + users = result + mutex.Unlock() + } else if taskType == 2 { + countBuilder := l.svcCtx.AdminUserModel.SelectBuilder(). + Where("del_state = ?", 0) + if len(req.Username) > 0 { + countBuilder = countBuilder.Where("username LIKE ?", "%"+req.Username+"%") + } + if len(req.RealName) > 0 { + countBuilder = countBuilder.Where("real_name LIKE ?", "%"+req.RealName+"%") + } + if req.Status != -1 { + countBuilder = countBuilder.Where("status = ?", req.Status) + } + + count, err := l.svcCtx.AdminUserModel.FindCount(l.ctx, countBuilder, "id") + if err != nil { + cancel(err) + return + } + mutex.Lock() + total = count + mutex.Unlock() + } + }, func(pipe <-chan *model.AdminUser, cancel func(error)) { + // 不需要处理pipe中的数据 + }) + + wg.Wait() + + // 并发获取每个用户的角色ID + var userItems []types.AdminUserListItem + var userItemsMutex sync.Mutex + + mr.MapReduceVoid(func(source chan<- interface{}) { + for _, user := range users { + source <- user + } + }, func(item interface{}, writer mr.Writer[[]int64], cancel func(error)) { + user := item.(*model.AdminUser) + + // 获取用户关联的角色ID + builder := l.svcCtx.AdminUserRoleModel.SelectBuilder(). + Where("user_id = ?", user.Id) + roles, err := l.svcCtx.AdminUserRoleModel.FindAll(l.ctx, builder, "id ASC") + if err != nil { + cancel(err) + return + } + roleIds := lo.Map(roles, func(item *model.AdminUserRole, _ int) int64 { + return item.RoleId + }) + + writer.Write(roleIds) + }, func(pipe <-chan []int64, cancel func(error)) { + for _, user := range users { + roleIds := <-pipe + item := types.AdminUserListItem{ + Id: user.Id, + Username: user.Username, + RealName: user.RealName, + Status: user.Status, + CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"), + RoleIds: roleIds, + } + userItemsMutex.Lock() + userItems = append(userItems, item) + userItemsMutex.Unlock() + } + }) + + resp.Items = userItems + resp.Total = total + + return resp, nil +} diff --git a/app/main/api/internal/logic/admin_user/adminupdateuserlogic.go b/app/main/api/internal/logic/admin_user/adminupdateuserlogic.go new file mode 100644 index 0000000..358dd01 --- /dev/null +++ b/app/main/api/internal/logic/admin_user/adminupdateuserlogic.go @@ -0,0 +1,141 @@ +package admin_user + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + + "github.com/pkg/errors" + "github.com/samber/lo" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminUpdateUserLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUpdateUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateUserLogic { + return &AdminUpdateUserLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUpdateUserLogic) AdminUpdateUser(req *types.AdminUpdateUserReq) (resp *types.AdminUpdateUserResp, err error) { + // 检查用户是否存在 + user, err := l.svcCtx.AdminUserModel.FindOne(l.ctx, req.Id) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %v", err) + } + + // 检查用户名是否重复 + if req.Username != nil && *req.Username != user.Username { + exists, err := l.svcCtx.AdminUserModel.FindOneByUsername(l.ctx, *req.Username) + if err != nil && err != model.ErrNotFound { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新用户失败: %v", err) + } + if exists != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("用户名已存在"), "更新用户失败") + } + } + + // 更新用户信息 + if req.Username != nil { + user.Username = *req.Username + } + if req.RealName != nil { + user.RealName = *req.RealName + } + if req.Status != nil { + user.Status = *req.Status + } + + // 使用事务更新用户和关联角色 + err = l.svcCtx.AdminUserModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { + // 更新用户 + _, err = l.svcCtx.AdminUserModel.Update(ctx, session, user) + if err != nil { + return err + } + + // 只有当RoleIds不为nil时才更新角色关联 + if req.RoleIds != nil { + // 1. 获取当前关联的角色ID + builder := l.svcCtx.AdminUserRoleModel.SelectBuilder(). + Where("user_id = ?", req.Id) + currentRoles, err := l.svcCtx.AdminUserRoleModel.FindAll(ctx, builder, "id ASC") + if err != nil { + return err + } + + // 2. 转换为map便于查找 + currentRoleMap := make(map[int64]*model.AdminUserRole) + for _, role := range currentRoles { + currentRoleMap[role.RoleId] = role + } + + // 3. 检查新的角色ID是否存在 + for _, roleId := range req.RoleIds { + exists, err := l.svcCtx.AdminRoleModel.FindOne(ctx, roleId) + if err != nil || exists == nil { + return errors.Wrapf(xerr.NewErrMsg("角色不存在"), "角色ID: %d", roleId) + } + } + + // 4. 找出需要删除和新增的关联 + var toDelete []*model.AdminUserRole + var toInsert []int64 + + // 需要删除的:当前存在但新列表中没有的 + for roleId, userRole := range currentRoleMap { + if !lo.Contains(req.RoleIds, roleId) { + toDelete = append(toDelete, userRole) + } + } + + // 需要新增的:新列表中有但当前不存在的 + for _, roleId := range req.RoleIds { + if _, exists := currentRoleMap[roleId]; !exists { + toInsert = append(toInsert, roleId) + } + } + + // 5. 删除需要移除的关联 + for _, userRole := range toDelete { + err = l.svcCtx.AdminUserRoleModel.Delete(ctx, session, userRole.Id) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "删除用户角色关联失败: %v", err) + } + } + + // 6. 添加新的关联 + for _, roleId := range toInsert { + userRole := &model.AdminUserRole{ + UserId: req.Id, + RoleId: roleId, + } + _, err = l.svcCtx.AdminUserRoleModel.Insert(ctx, session, userRole) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "添加用户角色关联失败: %v", err) + } + } + } + + return nil + }) + + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新用户失败: %v", err) + } + + return &types.AdminUpdateUserResp{ + Success: true, + }, nil +} diff --git a/app/main/api/internal/logic/admin_user/adminuserinfologic.go b/app/main/api/internal/logic/admin_user/adminuserinfologic.go new file mode 100644 index 0000000..1597826 --- /dev/null +++ b/app/main/api/internal/logic/admin_user/adminuserinfologic.go @@ -0,0 +1,67 @@ +package admin_user + +import ( + "context" + + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/common/ctxdata" + "qnc-server/common/xerr" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type AdminUserInfoLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAdminUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUserInfoLogic { + return &AdminUserInfoLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *AdminUserInfoLogic) AdminUserInfo(req *types.AdminUserInfoReq) (resp *types.AdminUserInfoResp, err error) { + userId, err := ctxdata.GetUidFromCtx(l.ctx) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户ID失败, %+v", err) + } + + user, err := l.svcCtx.AdminUserModel.FindOne(l.ctx, userId) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户ID信息失败, %+v", err) + } + // 获取权限 + adminUserRoleBuilder := l.svcCtx.AdminUserRoleModel.SelectBuilder().Where(squirrel.Eq{"user_id": user.Id}) + permissions, err := l.svcCtx.AdminUserRoleModel.FindAll(l.ctx, adminUserRoleBuilder, "role_id DESC") + if err != nil { + return nil, errors.Wrapf(xerr.NewErrMsg("获取权限失败"), "用户登录, 获取权限失败, 用户名: %s", user.Username) + } + + // 获取角色ID数组 + roleIds := make([]int64, 0) + for _, permission := range permissions { + roleIds = append(roleIds, permission.RoleId) + } + + // 获取角色名称 + roles := make([]string, 0) + for _, roleId := range roleIds { + role, err := l.svcCtx.AdminRoleModel.FindOne(l.ctx, roleId) + if err != nil { + continue + } + roles = append(roles, role.RoleCode) + } + return &types.AdminUserInfoResp{ + Username: user.Username, + RealName: user.RealName, + Roles: roles, + }, nil +} diff --git a/app/main/api/internal/logic/agent/activateagentmembershiplogic.go b/app/main/api/internal/logic/agent/activateagentmembershiplogic.go index 8096f1b..4b82b88 100644 --- a/app/main/api/internal/logic/agent/activateagentmembershiplogic.go +++ b/app/main/api/internal/logic/agent/activateagentmembershiplogic.go @@ -10,9 +10,9 @@ import ( "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/agentrealnamelogic.go b/app/main/api/internal/logic/agent/agentrealnamelogic.go index 516fde8..d45099f 100644 --- a/app/main/api/internal/logic/agent/agentrealnamelogic.go +++ b/app/main/api/internal/logic/agent/agentrealnamelogic.go @@ -6,10 +6,10 @@ import ( "fmt" "time" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/service" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/agent/agentwithdrawallogic.go b/app/main/api/internal/logic/agent/agentwithdrawallogic.go index 65541b2..e64bcea 100644 --- a/app/main/api/internal/logic/agent/agentwithdrawallogic.go +++ b/app/main/api/internal/logic/agent/agentwithdrawallogic.go @@ -3,7 +3,7 @@ package agent import ( "context" "fmt" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/lzUtils" @@ -14,8 +14,8 @@ import ( "github.com/smartwalle/alipay/v3" "github.com/zeromicro/go-zero/core/stores/sqlx" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/applyforagentlogic.go b/app/main/api/internal/logic/agent/applyforagentlogic.go index a7eb57e..89d7227 100644 --- a/app/main/api/internal/logic/agent/applyforagentlogic.go +++ b/app/main/api/internal/logic/agent/applyforagentlogic.go @@ -4,7 +4,7 @@ import ( "context" "database/sql" "fmt" - "qnc-server/app/user/model" + "qnc-server/app/main/model" jwtx "qnc-server/common/jwt" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" @@ -14,8 +14,8 @@ import ( "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/core/stores/sqlx" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) @@ -64,8 +64,8 @@ func (l *ApplyForAgentLogic) ApplyForAgent(req *types.AgentApplyReq) (resp *type } if user == nil { user = &model.User{Mobile: sql.NullString{String: encryptedMobile, Valid: true}} - // if len(user.Nickname) == 0 { - // user.Nickname = encryptedMobile + // if len(main.Nickname) == 0 { + // main.Nickname = encryptedMobile // } insertResult, userInsertErr := l.svcCtx.UserModel.Insert(transCtx, session, user) if userInsertErr != nil { @@ -73,7 +73,7 @@ func (l *ApplyForAgentLogic) ApplyForAgent(req *types.AgentApplyReq) (resp *type } lastId, lastInsertIdErr := insertResult.LastInsertId() if lastInsertIdErr != nil { - return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "代理申请, 获取新用户ID失败, err:%+v, user:%+v", lastInsertIdErr, user) + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "代理申请, 获取新用户ID失败, err:%+v, main:%+v", lastInsertIdErr, user) } user.Id = lastId userID = lastId diff --git a/app/main/api/internal/logic/agent/generatinglinklogic.go b/app/main/api/internal/logic/agent/generatinglinklogic.go index 1f5e8e7..64f4da5 100644 --- a/app/main/api/internal/logic/agent/generatinglinklogic.go +++ b/app/main/api/internal/logic/agent/generatinglinklogic.go @@ -4,7 +4,7 @@ import ( "context" "encoding/hex" "encoding/json" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" @@ -13,8 +13,8 @@ import ( "github.com/Masterminds/squirrel" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentauditstatuslogic.go b/app/main/api/internal/logic/agent/getagentauditstatuslogic.go index ed985e7..423d4da 100644 --- a/app/main/api/internal/logic/agent/getagentauditstatuslogic.go +++ b/app/main/api/internal/logic/agent/getagentauditstatuslogic.go @@ -8,8 +8,8 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentcommissionlogic.go b/app/main/api/internal/logic/agent/getagentcommissionlogic.go index c8de7cb..221ebb9 100644 --- a/app/main/api/internal/logic/agent/getagentcommissionlogic.go +++ b/app/main/api/internal/logic/agent/getagentcommissionlogic.go @@ -9,8 +9,8 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentinfologic.go b/app/main/api/internal/logic/agent/getagentinfologic.go index 96090a6..145b32e 100644 --- a/app/main/api/internal/logic/agent/getagentinfologic.go +++ b/app/main/api/internal/logic/agent/getagentinfologic.go @@ -9,9 +9,9 @@ import ( "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentmembershipproductconfiglogic.go b/app/main/api/internal/logic/agent/getagentmembershipproductconfiglogic.go index f1a680f..e68db10 100644 --- a/app/main/api/internal/logic/agent/getagentmembershipproductconfiglogic.go +++ b/app/main/api/internal/logic/agent/getagentmembershipproductconfiglogic.go @@ -2,7 +2,7 @@ package agent import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/lzUtils" @@ -10,8 +10,8 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentproductconfiglogic.go b/app/main/api/internal/logic/agent/getagentproductconfiglogic.go index d690b98..7262973 100644 --- a/app/main/api/internal/logic/agent/getagentproductconfiglogic.go +++ b/app/main/api/internal/logic/agent/getagentproductconfiglogic.go @@ -2,15 +2,15 @@ package agent import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/mr" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentrevenueinfologic.go b/app/main/api/internal/logic/agent/getagentrevenueinfologic.go index 9e6ea2e..544edae 100644 --- a/app/main/api/internal/logic/agent/getagentrevenueinfologic.go +++ b/app/main/api/internal/logic/agent/getagentrevenueinfologic.go @@ -2,7 +2,7 @@ package agent import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "time" @@ -10,8 +10,8 @@ import ( "github.com/Masterminds/squirrel" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentrewardslogic.go b/app/main/api/internal/logic/agent/getagentrewardslogic.go index db67c6f..1272674 100644 --- a/app/main/api/internal/logic/agent/getagentrewardslogic.go +++ b/app/main/api/internal/logic/agent/getagentrewardslogic.go @@ -9,8 +9,8 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getagentsubordinatecontributiondetaillogic.go b/app/main/api/internal/logic/agent/getagentsubordinatecontributiondetaillogic.go index a35b729..5f660a4 100644 --- a/app/main/api/internal/logic/agent/getagentsubordinatecontributiondetaillogic.go +++ b/app/main/api/internal/logic/agent/getagentsubordinatecontributiondetaillogic.go @@ -3,8 +3,8 @@ package agent import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/agent/getagentsubordinatelistlogic.go b/app/main/api/internal/logic/agent/getagentsubordinatelistlogic.go index 9afda7c..d19f44e 100644 --- a/app/main/api/internal/logic/agent/getagentsubordinatelistlogic.go +++ b/app/main/api/internal/logic/agent/getagentsubordinatelistlogic.go @@ -5,9 +5,9 @@ import ( "strings" "time" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/agent/getagentwithdrawallogic.go b/app/main/api/internal/logic/agent/getagentwithdrawallogic.go index d17e23b..66c6539 100644 --- a/app/main/api/internal/logic/agent/getagentwithdrawallogic.go +++ b/app/main/api/internal/logic/agent/getagentwithdrawallogic.go @@ -9,8 +9,8 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/getlinkdatalogic.go b/app/main/api/internal/logic/agent/getlinkdatalogic.go index 29f7cf4..2a4ad9c 100644 --- a/app/main/api/internal/logic/agent/getlinkdatalogic.go +++ b/app/main/api/internal/logic/agent/getlinkdatalogic.go @@ -7,8 +7,8 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/agent/saveagentmembershipuserconfiglogic.go b/app/main/api/internal/logic/agent/saveagentmembershipuserconfiglogic.go index 82c11c1..5be0a30 100644 --- a/app/main/api/internal/logic/agent/saveagentmembershipuserconfiglogic.go +++ b/app/main/api/internal/logic/agent/saveagentmembershipuserconfiglogic.go @@ -2,14 +2,14 @@ package agent import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/app/getappversionlogic.go b/app/main/api/internal/logic/app/getappversionlogic.go index c4e6bd5..109121f 100644 --- a/app/main/api/internal/logic/app/getappversionlogic.go +++ b/app/main/api/internal/logic/app/getappversionlogic.go @@ -3,8 +3,8 @@ package app import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/app/healthchecklogic.go b/app/main/api/internal/logic/app/healthchecklogic.go index a9f53f6..d9a18bd 100644 --- a/app/main/api/internal/logic/app/healthchecklogic.go +++ b/app/main/api/internal/logic/app/healthchecklogic.go @@ -3,8 +3,8 @@ package app import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/auth/getfaceverifyresultlogic.go b/app/main/api/internal/logic/auth/getfaceverifyresultlogic.go index c7b48fd..9582079 100644 --- a/app/main/api/internal/logic/auth/getfaceverifyresultlogic.go +++ b/app/main/api/internal/logic/auth/getfaceverifyresultlogic.go @@ -8,9 +8,9 @@ import ( "github.com/bytedance/sonic" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/sqlx" diff --git a/app/main/api/internal/logic/auth/initfaceverifylogic.go b/app/main/api/internal/logic/auth/initfaceverifylogic.go index e3e6f00..b545ed2 100644 --- a/app/main/api/internal/logic/auth/initfaceverifylogic.go +++ b/app/main/api/internal/logic/auth/initfaceverifylogic.go @@ -8,9 +8,9 @@ import ( "strconv" "time" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/xerr" "qnc-server/pkg/core/aliyun/cloudauth" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/auth/rejectauthorizationlogic.go b/app/main/api/internal/logic/auth/rejectauthorizationlogic.go index 8fcbf50..cd6c745 100644 --- a/app/main/api/internal/logic/auth/rejectauthorizationlogic.go +++ b/app/main/api/internal/logic/auth/rejectauthorizationlogic.go @@ -3,8 +3,8 @@ package auth import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/auth/sendsmslogic.go b/app/main/api/internal/logic/auth/sendsmslogic.go index 7c2a747..a75f78b 100644 --- a/app/main/api/internal/logic/auth/sendsmslogic.go +++ b/app/main/api/internal/logic/auth/sendsmslogic.go @@ -10,8 +10,8 @@ import ( "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" dysmsapi "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" diff --git a/app/main/api/internal/logic/auth/smsauthorizationlogic.go b/app/main/api/internal/logic/auth/smsauthorizationlogic.go index ef04846..e5f9c1b 100644 --- a/app/main/api/internal/logic/auth/smsauthorizationlogic.go +++ b/app/main/api/internal/logic/auth/smsauthorizationlogic.go @@ -6,10 +6,10 @@ import ( "encoding/hex" "fmt" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/service" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/notification/getnotificationslogic.go b/app/main/api/internal/logic/notification/getnotificationslogic.go index fd6a42f..8e91c81 100644 --- a/app/main/api/internal/logic/notification/getnotificationslogic.go +++ b/app/main/api/internal/logic/notification/getnotificationslogic.go @@ -8,8 +8,8 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/pay/alipaycallbacklogic.go b/app/main/api/internal/logic/pay/alipaycallbacklogic.go index a116383..41967a4 100644 --- a/app/main/api/internal/logic/pay/alipaycallbacklogic.go +++ b/app/main/api/internal/logic/pay/alipaycallbacklogic.go @@ -13,9 +13,9 @@ import ( "github.com/smartwalle/alipay/v3" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/sqlx" diff --git a/app/main/api/internal/logic/pay/iapcallbacklogic.go b/app/main/api/internal/logic/pay/iapcallbacklogic.go index 17ecfd3..6164978 100644 --- a/app/main/api/internal/logic/pay/iapcallbacklogic.go +++ b/app/main/api/internal/logic/pay/iapcallbacklogic.go @@ -2,8 +2,8 @@ package pay import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/lzUtils" "time" diff --git a/app/main/api/internal/logic/pay/paymentchecklogic.go b/app/main/api/internal/logic/pay/paymentchecklogic.go index 081b60c..c83053e 100644 --- a/app/main/api/internal/logic/pay/paymentchecklogic.go +++ b/app/main/api/internal/logic/pay/paymentchecklogic.go @@ -4,8 +4,8 @@ import ( "context" "strings" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/xerr" "github.com/pkg/errors" diff --git a/app/main/api/internal/logic/pay/paymentlogic.go b/app/main/api/internal/logic/pay/paymentlogic.go index 47dec0f..d9437d8 100644 --- a/app/main/api/internal/logic/pay/paymentlogic.go +++ b/app/main/api/internal/logic/pay/paymentlogic.go @@ -6,9 +6,9 @@ import ( "encoding/json" "fmt" "os" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/pay/querypaymentchecklogic.go b/app/main/api/internal/logic/pay/querypaymentchecklogic.go index 0d83af9..5b4cd48 100644 --- a/app/main/api/internal/logic/pay/querypaymentchecklogic.go +++ b/app/main/api/internal/logic/pay/querypaymentchecklogic.go @@ -5,8 +5,8 @@ import ( "encoding/hex" "strings" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go b/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go index 3b90a92..0f6b615 100644 --- a/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go +++ b/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go @@ -6,15 +6,15 @@ import ( "encoding/json" "fmt" "net/http" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/service" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/pkg/lzkit/crypto" "qnc-server/pkg/lzkit/lzUtils" "strings" "time" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/svc" "github.com/wechatpay-apiv3/wechatpay-go/services/payments" "github.com/zeromicro/go-zero/core/logx" diff --git a/app/main/api/internal/logic/pay/wechatpayrefundcallbacklogic.go b/app/main/api/internal/logic/pay/wechatpayrefundcallbacklogic.go index 99eb604..838e63c 100644 --- a/app/main/api/internal/logic/pay/wechatpayrefundcallbacklogic.go +++ b/app/main/api/internal/logic/pay/wechatpayrefundcallbacklogic.go @@ -4,7 +4,7 @@ import ( "context" "database/sql" "net/http" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/svc" "strings" "time" diff --git a/app/main/api/internal/logic/product/getproductappbyenlogic.go b/app/main/api/internal/logic/product/getproductappbyenlogic.go index 65a09bc..9872f5b 100644 --- a/app/main/api/internal/logic/product/getproductappbyenlogic.go +++ b/app/main/api/internal/logic/product/getproductappbyenlogic.go @@ -2,7 +2,7 @@ package product import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/xerr" "github.com/Masterminds/squirrel" @@ -10,8 +10,8 @@ import ( "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/mr" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/product/getproductbyenlogic.go b/app/main/api/internal/logic/product/getproductbyenlogic.go index bb072a2..b4a70ae 100644 --- a/app/main/api/internal/logic/product/getproductbyenlogic.go +++ b/app/main/api/internal/logic/product/getproductbyenlogic.go @@ -2,7 +2,7 @@ package product import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/xerr" "github.com/Masterminds/squirrel" @@ -10,8 +10,8 @@ import ( "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/mr" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/product/getproductbyidlogic.go b/app/main/api/internal/logic/product/getproductbyidlogic.go index 17382d1..60ee339 100644 --- a/app/main/api/internal/logic/product/getproductbyidlogic.go +++ b/app/main/api/internal/logic/product/getproductbyidlogic.go @@ -3,8 +3,8 @@ package product import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/query/confirmquerystatelogic.go b/app/main/api/internal/logic/query/confirmquerystatelogic.go index 411ad67..a455391 100644 --- a/app/main/api/internal/logic/query/confirmquerystatelogic.go +++ b/app/main/api/internal/logic/query/confirmquerystatelogic.go @@ -2,9 +2,9 @@ package query import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/xerr" "github.com/pkg/errors" diff --git a/app/main/api/internal/logic/query/querydetailbyorderidlogic.go b/app/main/api/internal/logic/query/querydetailbyorderidlogic.go index 0f44fbd..cc60568 100644 --- a/app/main/api/internal/logic/query/querydetailbyorderidlogic.go +++ b/app/main/api/internal/logic/query/querydetailbyorderidlogic.go @@ -16,9 +16,9 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/query/querydetailbyordernologic.go b/app/main/api/internal/logic/query/querydetailbyordernologic.go index cf8be9d..c34a1ee 100644 --- a/app/main/api/internal/logic/query/querydetailbyordernologic.go +++ b/app/main/api/internal/logic/query/querydetailbyordernologic.go @@ -12,9 +12,9 @@ import ( "github.com/jinzhu/copier" "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/query/queryexamplelogic copy.go b/app/main/api/internal/logic/query/queryexamplelogic copy.go index 328905b..a50ca93 100644 --- a/app/main/api/internal/logic/query/queryexamplelogic copy.go +++ b/app/main/api/internal/logic/query/queryexamplelogic copy.go @@ -4,8 +4,8 @@ package query // "context" // "encoding/hex" // "fmt" -// "qnc-server/app/user/cmd/api/internal/svc" -// "qnc-server/app/user/cmd/api/internal/types" +// "qnc-server/app/main//api/internal/svc" +// "qnc-server/app/main//api/internal/types" // "qnc-server/common/xerr" // "github.com/jinzhu/copier" diff --git a/app/main/api/internal/logic/query/queryexamplelogic.go b/app/main/api/internal/logic/query/queryexamplelogic.go index 6f7555a..67498b8 100644 --- a/app/main/api/internal/logic/query/queryexamplelogic.go +++ b/app/main/api/internal/logic/query/queryexamplelogic.go @@ -3,8 +3,8 @@ package query import ( "context" "encoding/hex" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/query/querygeneratesharelinklogic.go b/app/main/api/internal/logic/query/querygeneratesharelinklogic.go index 93a3e83..88a4846 100644 --- a/app/main/api/internal/logic/query/querygeneratesharelinklogic.go +++ b/app/main/api/internal/logic/query/querygeneratesharelinklogic.go @@ -6,9 +6,9 @@ import ( "encoding/json" "time" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/query/querylistlogic.go b/app/main/api/internal/logic/query/querylistlogic.go index 8cacfdb..2b02fd3 100644 --- a/app/main/api/internal/logic/query/querylistlogic.go +++ b/app/main/api/internal/logic/query/querylistlogic.go @@ -2,9 +2,9 @@ package query import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" diff --git a/app/main/api/internal/logic/query/queryprovisionalorderlogic.go b/app/main/api/internal/logic/query/queryprovisionalorderlogic.go index 2b6bf22..e4a6129 100644 --- a/app/main/api/internal/logic/query/queryprovisionalorderlogic.go +++ b/app/main/api/internal/logic/query/queryprovisionalorderlogic.go @@ -4,8 +4,8 @@ import ( "context" "encoding/json" "fmt" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "qnc-server/common/ctxdata" "qnc-server/common/xerr" diff --git a/app/main/api/internal/logic/query/queryrechecklogic.go b/app/main/api/internal/logic/query/queryrechecklogic.go index 890e358..f68beda 100644 --- a/app/main/api/internal/logic/query/queryrechecklogic.go +++ b/app/main/api/internal/logic/query/queryrechecklogic.go @@ -5,9 +5,9 @@ import ( "database/sql" "encoding/hex" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/query/queryretrylogic.go b/app/main/api/internal/logic/query/queryretrylogic.go index 214d7bf..3ff044c 100644 --- a/app/main/api/internal/logic/query/queryretrylogic.go +++ b/app/main/api/internal/logic/query/queryretrylogic.go @@ -6,8 +6,8 @@ import ( "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/query/queryserviceagentlogic.go b/app/main/api/internal/logic/query/queryserviceagentlogic.go index 7228a16..df65504 100644 --- a/app/main/api/internal/logic/query/queryserviceagentlogic.go +++ b/app/main/api/internal/logic/query/queryserviceagentlogic.go @@ -2,8 +2,8 @@ package query import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/query/queryserviceapplogic.go b/app/main/api/internal/logic/query/queryserviceapplogic.go index 5adfa02..9e8ea52 100644 --- a/app/main/api/internal/logic/query/queryserviceapplogic.go +++ b/app/main/api/internal/logic/query/queryserviceapplogic.go @@ -3,8 +3,8 @@ package query import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/query/queryservicelogic.go b/app/main/api/internal/logic/query/queryservicelogic.go index 53b9d2c..8f8b166 100644 --- a/app/main/api/internal/logic/query/queryservicelogic.go +++ b/app/main/api/internal/logic/query/queryservicelogic.go @@ -5,7 +5,7 @@ import ( "encoding/hex" "encoding/json" "fmt" - "qnc-server/app/user/cmd/api/internal/service" + "qnc-server/app/main/api/internal/service" "qnc-server/common/ctxdata" jwtx "qnc-server/common/jwt" "qnc-server/common/xerr" @@ -16,8 +16,8 @@ import ( "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/stores/redis" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) @@ -80,7 +80,7 @@ func (l *QueryServiceLogic) ProcessMarriageLogic(req *types.QueryServiceReq) (*t } // 校验二要素 - verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) + verifyErr := l.VerifyThreeElements(data.Name, data.IDCard, data.Mobile) if verifyErr != nil { return nil, verifyErr } @@ -89,6 +89,7 @@ func (l *QueryServiceLogic) ProcessMarriageLogic(req *types.QueryServiceReq) (*t params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, + "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -133,7 +134,7 @@ func (l *QueryServiceLogic) ProcessHomeServiceLogic(req *types.QueryServiceReq) } // 校验二要素 - verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) + verifyErr := l.VerifyThreeElements(data.Name, data.IDCard, data.Mobile) if verifyErr != nil { return nil, verifyErr } @@ -142,6 +143,7 @@ func (l *QueryServiceLogic) ProcessHomeServiceLogic(req *types.QueryServiceReq) params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, + "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -187,7 +189,7 @@ func (l *QueryServiceLogic) ProcessRiskAssessmentLogic(req *types.QueryServiceRe } // 校验二要素 - verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) + verifyErr := l.VerifyThreeElements(data.Name, data.IDCard, data.Mobile) if verifyErr != nil { return nil, verifyErr } @@ -196,6 +198,7 @@ func (l *QueryServiceLogic) ProcessRiskAssessmentLogic(req *types.QueryServiceRe params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, + "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -240,7 +243,7 @@ func (l *QueryServiceLogic) ProcessCompanyInfoLogic(req *types.QueryServiceReq) } // 校验二要素 - verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) + verifyErr := l.VerifyThreeElements(data.Name, data.IDCard, data.Mobile) if verifyErr != nil { return nil, verifyErr } @@ -249,6 +252,7 @@ func (l *QueryServiceLogic) ProcessCompanyInfoLogic(req *types.QueryServiceReq) params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, + "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -295,7 +299,7 @@ func (l *QueryServiceLogic) ProcessRentalInfoLogic(req *types.QueryServiceReq) ( // 校验二要素 - verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) + verifyErr := l.VerifyThreeElements(data.Name, data.IDCard, data.Mobile) if verifyErr != nil { return nil, verifyErr } @@ -304,6 +308,7 @@ func (l *QueryServiceLogic) ProcessRentalInfoLogic(req *types.QueryServiceReq) ( params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, + "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -350,7 +355,7 @@ func (l *QueryServiceLogic) ProcessPreLoanBackgroundCheckLogic(req *types.QueryS // 校验二要素 - verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) + verifyErr := l.VerifyThreeElements(data.Name, data.IDCard, data.Mobile) if verifyErr != nil { return nil, verifyErr } @@ -359,6 +364,7 @@ func (l *QueryServiceLogic) ProcessPreLoanBackgroundCheckLogic(req *types.QueryS params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, + "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -402,7 +408,7 @@ func (l *QueryServiceLogic) ProcessBackgroundCheckLogic(req *types.QueryServiceR return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) + verifyErr := l.VerifyThreeElements(data.Name, data.IDCard, data.Mobile) if verifyErr != nil { return nil, verifyErr } @@ -411,6 +417,7 @@ func (l *QueryServiceLogic) ProcessBackgroundCheckLogic(req *types.QueryServiceR params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, + "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -485,6 +492,22 @@ func (l *QueryServiceLogic) VerifyTwoElements(Name string, IDCard string) error } return nil } +func (l *QueryServiceLogic) VerifyThreeElements(Name string, IDCard string, Mobile string) error { + // 三要素验证 + threeVerification := service.ThreeFactorVerificationRequest{ + Name: Name, + IDCard: IDCard, + Mobile: Mobile, + } + verification, err := l.svcCtx.VerificationService.ThreeFactorVerification(threeVerification) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "三要素验证失败: %v", err) + } + if !verification.Passed { + return errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "三要素验证不通过: %v", err) + } + return nil +} // 二、三要素验证 func (l *QueryServiceLogic) Verify(Name string, IDCard string, Mobile string) error { diff --git a/app/main/api/internal/logic/query/querysharedetaillogic.go b/app/main/api/internal/logic/query/querysharedetaillogic.go index eb61b96..d4480b4 100644 --- a/app/main/api/internal/logic/query/querysharedetaillogic.go +++ b/app/main/api/internal/logic/query/querysharedetaillogic.go @@ -6,9 +6,9 @@ import ( "fmt" "time" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/query/querysingletestlogic.go b/app/main/api/internal/logic/query/querysingletestlogic.go index 8cb3922..53d8568 100644 --- a/app/main/api/internal/logic/query/querysingletestlogic.go +++ b/app/main/api/internal/logic/query/querysingletestlogic.go @@ -7,8 +7,8 @@ import ( "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/query/updatequerydatalogic.go b/app/main/api/internal/logic/query/updatequerydatalogic.go index ecd7801..eb00acd 100644 --- a/app/main/api/internal/logic/query/updatequerydatalogic.go +++ b/app/main/api/internal/logic/query/updatequerydatalogic.go @@ -5,9 +5,9 @@ import ( "database/sql" "encoding/hex" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/user/agentmobilecodeloginlogic.go b/app/main/api/internal/logic/user/agentmobilecodeloginlogic.go index d6a547c..d616eeb 100644 --- a/app/main/api/internal/logic/user/agentmobilecodeloginlogic.go +++ b/app/main/api/internal/logic/user/agentmobilecodeloginlogic.go @@ -4,9 +4,9 @@ import ( "context" "database/sql" "fmt" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" jwtx "qnc-server/common/jwt" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" @@ -58,8 +58,8 @@ func (l *AgentMobileCodeLoginLogic) AgentMobileCodeLogin(req *types.MobileCodeLo } if user == nil { user = &model.User{Mobile: sql.NullString{String: encryptedMobile, Valid: true}} - // if len(user.Nickname) == 0 { - // user.Nickname = "" + // if len(main.Nickname) == 0 { + // main.Nickname = "" // } if transErr := l.svcCtx.UserModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { insertResult, userInsertErr := l.svcCtx.UserModel.Insert(ctx, session, user) @@ -68,7 +68,7 @@ func (l *AgentMobileCodeLoginLogic) AgentMobileCodeLogin(req *types.MobileCodeLo } lastId, lastInsertIdErr := insertResult.LastInsertId() if lastInsertIdErr != nil { - return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 获取新用户ID失败, err:%+v, user:%+v", lastInsertIdErr, user) + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 获取新用户ID失败, err:%+v, main:%+v", lastInsertIdErr, user) } user.Id = lastId diff --git a/app/main/api/internal/logic/user/bindmobilelogic.go b/app/main/api/internal/logic/user/bindmobilelogic.go index aca9a50..5a22d1d 100644 --- a/app/main/api/internal/logic/user/bindmobilelogic.go +++ b/app/main/api/internal/logic/user/bindmobilelogic.go @@ -5,9 +5,9 @@ import ( "database/sql" "fmt" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/user/canceloutlogic.go b/app/main/api/internal/logic/user/canceloutlogic.go index fd016b0..2aed652 100644 --- a/app/main/api/internal/logic/user/canceloutlogic.go +++ b/app/main/api/internal/logic/user/canceloutlogic.go @@ -2,7 +2,7 @@ package user import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" @@ -11,7 +11,7 @@ import ( "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/stores/sqlx" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/user/detaillogic.go b/app/main/api/internal/logic/user/detaillogic.go index fb4b7b1..738dde1 100644 --- a/app/main/api/internal/logic/user/detaillogic.go +++ b/app/main/api/internal/logic/user/detaillogic.go @@ -2,9 +2,9 @@ package user import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" diff --git a/app/main/api/internal/logic/user/gettokenlogic.go b/app/main/api/internal/logic/user/gettokenlogic.go index 2fd0494..1515011 100644 --- a/app/main/api/internal/logic/user/gettokenlogic.go +++ b/app/main/api/internal/logic/user/gettokenlogic.go @@ -9,8 +9,8 @@ import ( "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/user/mobilecodeloginlogic.go b/app/main/api/internal/logic/user/mobilecodeloginlogic.go index e152e6c..824e873 100644 --- a/app/main/api/internal/logic/user/mobilecodeloginlogic.go +++ b/app/main/api/internal/logic/user/mobilecodeloginlogic.go @@ -4,9 +4,9 @@ import ( "context" "database/sql" "fmt" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" jwtx "qnc-server/common/jwt" "qnc-server/common/xerr" "qnc-server/pkg/lzkit/crypto" @@ -60,8 +60,8 @@ func (l *MobileCodeLoginLogic) MobileCodeLogin(req *types.MobileCodeLoginReq) (r } if user == nil { user = &model.User{Mobile: sql.NullString{String: encryptedMobile, Valid: true}} - // if len(user.Nickname) == 0 { - // user.Nickname = encryptedMobile + // if len(main.Nickname) == 0 { + // main.Nickname = encryptedMobile // } if transErr := l.svcCtx.UserModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { insertResult, userInsertErr := l.svcCtx.UserModel.Insert(ctx, session, user) @@ -70,7 +70,7 @@ func (l *MobileCodeLoginLogic) MobileCodeLogin(req *types.MobileCodeLoginReq) (r } lastId, lastInsertIdErr := insertResult.LastInsertId() if lastInsertIdErr != nil { - return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 获取新用户ID失败, err:%+v, user:%+v", lastInsertIdErr, user) + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 获取新用户ID失败, err:%+v, main:%+v", lastInsertIdErr, user) } user.Id = lastId diff --git a/app/main/api/internal/logic/user/mobileloginlogic.go b/app/main/api/internal/logic/user/mobileloginlogic.go index 14d6534..45e2089 100644 --- a/app/main/api/internal/logic/user/mobileloginlogic.go +++ b/app/main/api/internal/logic/user/mobileloginlogic.go @@ -3,7 +3,7 @@ package user import ( "context" "database/sql" - "qnc-server/app/user/model" + "qnc-server/app/main/model" jwtx "qnc-server/common/jwt" "qnc-server/common/tool" "qnc-server/common/xerr" @@ -13,8 +13,8 @@ import ( "github.com/pkg/errors" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/logic/user/registerlogic.go b/app/main/api/internal/logic/user/registerlogic.go index 39924c4..3e1e4bf 100644 --- a/app/main/api/internal/logic/user/registerlogic.go +++ b/app/main/api/internal/logic/user/registerlogic.go @@ -4,9 +4,9 @@ import ( "context" "database/sql" "fmt" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" jwtx "qnc-server/common/jwt" "qnc-server/common/tool" "qnc-server/common/xerr" @@ -64,8 +64,8 @@ func (l *RegisterLogic) Register(req *types.RegisterReq) (resp *types.RegisterRe if transErr := l.svcCtx.UserModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error { user := new(model.User) user.Mobile = sql.NullString{String: encryptedMobile, Valid: true} - // if len(user.Nickname) == 0 { - // user.Nickname = encryptedMobile + // if len(main.Nickname) == 0 { + // main.Nickname = encryptedMobile // } if len(req.Password) > 0 { user.Password = lzUtils.StringToNullString(tool.Md5ByString(req.Password)) @@ -76,7 +76,7 @@ func (l *RegisterLogic) Register(req *types.RegisterReq) (resp *types.RegisterRe } lastId, lastInsertIdErr := insertResult.LastInsertId() if lastInsertIdErr != nil { - return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 获取新用户ID失败, err:%+v, user:%+v", lastInsertIdErr, user) + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 获取新用户ID失败, err:%+v, main:%+v", lastInsertIdErr, user) } userId = lastId diff --git a/app/main/api/internal/logic/user/wxh5authlogic.go b/app/main/api/internal/logic/user/wxh5authlogic.go index ec58971..1ab6d5f 100644 --- a/app/main/api/internal/logic/user/wxh5authlogic.go +++ b/app/main/api/internal/logic/user/wxh5authlogic.go @@ -6,7 +6,7 @@ import ( "fmt" "io" "net/http" - "qnc-server/app/user/model" + "qnc-server/app/main/model" jwtx "qnc-server/common/jwt" "qnc-server/common/xerr" "time" @@ -14,8 +14,8 @@ import ( "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/stores/sqlx" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) @@ -67,7 +67,7 @@ func (l *WxH5AuthLogic) WxH5Auth(req *types.WXH5AuthReq) (resp *types.WXH5AuthRe if insertErr != nil { return errors.Wrapf(insertErr, "创建新用户失败,openid: %s", accessTokenResp.Openid) } - // 获取插入后生成的 user.Id + // 获取插入后生成的 main.Id lastInsertId, lastInsertIdErr := insertResult.LastInsertId() if lastInsertIdErr != nil { return errors.Wrapf(lastInsertIdErr, "获取新用户ID失败,openid: %s", accessTokenResp.Openid) diff --git a/app/main/api/internal/logic/user/wxminiauthlogic.go b/app/main/api/internal/logic/user/wxminiauthlogic.go index d268e62..5e94021 100644 --- a/app/main/api/internal/logic/user/wxminiauthlogic.go +++ b/app/main/api/internal/logic/user/wxminiauthlogic.go @@ -3,8 +3,8 @@ package user import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/main/api/internal/middleware/authinterceptormiddleware.go b/app/main/api/internal/middleware/authinterceptormiddleware.go index 16ebac9..86fdc01 100644 --- a/app/main/api/internal/middleware/authinterceptormiddleware.go +++ b/app/main/api/internal/middleware/authinterceptormiddleware.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" "net/http" - "qnc-server/app/user/cmd/api/internal/config" + "qnc-server/app/main/api/internal/config" "qnc-server/common/ctxdata" jwtx "qnc-server/common/jwt" "qnc-server/common/xerr" diff --git a/app/main/api/internal/queue/cleanQueryData.go b/app/main/api/internal/queue/cleanQueryData.go index a572a00..152b5f4 100644 --- a/app/main/api/internal/queue/cleanQueryData.go +++ b/app/main/api/internal/queue/cleanQueryData.go @@ -2,7 +2,7 @@ package queue import ( "context" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/svc" "time" "github.com/hibiken/asynq" diff --git a/app/main/api/internal/queue/delayed_task_handler.go b/app/main/api/internal/queue/delayed_task_handler.go new file mode 100644 index 0000000..4e5f042 --- /dev/null +++ b/app/main/api/internal/queue/delayed_task_handler.go @@ -0,0 +1,99 @@ +package queue + +import ( + "context" + "encoding/json" + "fmt" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" + + "github.com/hibiken/asynq" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type DelayedTaskHandler struct { + svcCtx *svc.ServiceContext +} + +func NewDelayedTaskHandler(svcCtx *svc.ServiceContext) *DelayedTaskHandler { + return &DelayedTaskHandler{ + svcCtx: svcCtx, + } +} + +func (h *DelayedTaskHandler) ProcessTask(ctx context.Context, t *asynq.Task) error { + var payload types.MsgDelayedTaskPayload + if err := json.Unmarshal(t.Payload(), &payload); err != nil { + return fmt.Errorf("解析任务载荷失败: %v", err) + } + + // 解析具体的任务数据 + var unfreezePayload types.UnfreezeAgentBalancePayload + if err := json.Unmarshal([]byte(payload.Data), &unfreezePayload); err != nil { + return fmt.Errorf("解析解冻代理金额任务数据失败: %v", err) + } + + // 处理解冻代理金额的逻辑 + err := h.handleUnfreezeAgentBalance(ctx, unfreezePayload) + if err != nil { + logx.Errorf("处理解冻代理金额任务失败: %v, 代理ID: %d, 订单号: %d", + err, unfreezePayload.AgentID, unfreezePayload.OrderID) + return err + } + + logx.Infof("解冻代理金额任务处理成功: 代理ID: %d, 订单号: %d, 金额: %.2f", + unfreezePayload.AgentID, unfreezePayload.OrderID, unfreezePayload.Amount) + return nil +} + +// handleUnfreezeAgentBalance 处理解冻代理金额的具体业务逻辑 +func (h *DelayedTaskHandler) handleUnfreezeAgentBalance(ctx context.Context, payload types.UnfreezeAgentBalancePayload) error { + // 开启事务处理解冻逻辑 + err := h.svcCtx.AgentService.AgentWalletModel.Trans(ctx, func(transCtx context.Context, session sqlx.Session) error { + // 1. 查询代理钱包 + agentWallet, err := h.svcCtx.AgentService.AgentWalletModel.FindOneByAgentId(transCtx, payload.AgentID) + if err != nil { + return fmt.Errorf("查询代理钱包失败: %v", err) + } + + // 2. 验证冻结金额 + if agentWallet.FrozenBalance < payload.Amount { + return fmt.Errorf("冻结余额不足: 当前冻结余额 %.2f, 需要解冻金额 %.2f", + agentWallet.FrozenBalance, payload.Amount) + } + + // 3. 查询订单状况 + order, err := h.svcCtx.OrderModel.FindOne(transCtx, payload.OrderID) + if err != nil { + return fmt.Errorf("查询订单失败: %v", err) + } + + if order.Status != model.OrderStatusPaid { + return fmt.Errorf("订单状态不正确: 当前状态 %s, 期望状态 %s", + order.Status, model.OrderStatusPaid) + } + + // 5. 更新钱包余额 + agentWallet.FrozenBalance -= payload.Amount + agentWallet.Balance += payload.Amount + + // 6. 保存更新 + if err := h.svcCtx.AgentService.AgentWalletModel.UpdateWithVersion(transCtx, session, agentWallet); err != nil { + return fmt.Errorf("更新钱包失败: %v", err) + } + + return nil + }) + + if err != nil { + logx.Errorf("解冻代理金额失败: %v, 代理ID: %d, 订单号: %d", + err, payload.AgentID, payload.OrderID) + return err + } + + logx.Infof("解冻代理金额成功: 代理ID: %d, 订单号: %d, 金额: %.2f", + payload.AgentID, payload.OrderID, payload.Amount) + return nil +} diff --git a/app/main/api/internal/queue/paySuccessNotify.go b/app/main/api/internal/queue/paySuccessNotify.go index 68a5e0f..f3e3381 100644 --- a/app/main/api/internal/queue/paySuccessNotify.go +++ b/app/main/api/internal/queue/paySuccessNotify.go @@ -7,9 +7,9 @@ import ( "encoding/json" "fmt" "os" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/pkg/lzkit/crypto" "qnc-server/pkg/lzkit/lzUtils" "time" diff --git a/app/main/api/internal/queue/routes.go b/app/main/api/internal/queue/routes.go index ed63f14..5266368 100644 --- a/app/main/api/internal/queue/routes.go +++ b/app/main/api/internal/queue/routes.go @@ -3,8 +3,8 @@ package queue import ( "context" "fmt" - "qnc-server/app/user/cmd/api/internal/svc" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/svc" + "qnc-server/app/main/api/internal/types" "github.com/hibiken/asynq" ) @@ -35,6 +35,7 @@ func (l *CronJob) Register() *asynq.ServeMux { mux := asynq.NewServeMux() mux.Handle(types.MsgPaySuccessQuery, NewPaySuccessNotifyUserHandler(l.svcCtx)) mux.Handle(types.MsgCleanQueryData, NewCleanQueryDataHandler(l.svcCtx)) + mux.Handle(types.MsgDelayedTask, NewDelayedTaskHandler(l.svcCtx)) return mux } diff --git a/app/main/api/internal/service/adminPromotionLinkStatsService.go b/app/main/api/internal/service/adminPromotionLinkStatsService.go new file mode 100644 index 0000000..d4181e5 --- /dev/null +++ b/app/main/api/internal/service/adminPromotionLinkStatsService.go @@ -0,0 +1,210 @@ +package service + +import ( + "context" + "database/sql" + "qnc-server/app/main/model" + "qnc-server/common/xerr" + "time" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +type AdminPromotionLinkStatsService struct { + logx.Logger + AdminPromotionLinkModel model.AdminPromotionLinkModel + AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel + AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel +} + +func NewAdminPromotionLinkStatsService( + AdminPromotionLinkModel model.AdminPromotionLinkModel, + AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel, + AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel, +) *AdminPromotionLinkStatsService { + return &AdminPromotionLinkStatsService{ + Logger: logx.WithContext(context.Background()), + AdminPromotionLinkModel: AdminPromotionLinkModel, + AdminPromotionLinkStatsTotalModel: AdminPromotionLinkStatsTotalModel, + AdminPromotionLinkStatsHistoryModel: AdminPromotionLinkStatsHistoryModel, + } +} + +// ensureTotalStats 确保总统计记录存在,如果不存在则创建 +func (s *AdminPromotionLinkStatsService) ensureTotalStats(ctx context.Context, session sqlx.Session, linkId int64) (*model.AdminPromotionLinkStatsTotal, error) { + totalStats, err := s.AdminPromotionLinkStatsTotalModel.FindOneByLinkId(ctx, linkId) + if err != nil { + if errors.Is(err, model.ErrNotFound) { + // 如果记录不存在,创建新记录 + totalStats = &model.AdminPromotionLinkStatsTotal{ + LinkId: linkId, + ClickCount: 0, + PayCount: 0, + PayAmount: 0, + } + _, err = s.AdminPromotionLinkStatsTotalModel.Insert(ctx, session, totalStats) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建总统计记录失败: %+v", err) + } + // 重新获取创建后的记录 + totalStats, err = s.AdminPromotionLinkStatsTotalModel.FindOneByLinkId(ctx, linkId) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取新创建的总统计记录失败: %+v", err) + } + } else { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询总统计失败: %+v", err) + } + } + return totalStats, nil +} + +// ensureHistoryStats 确保历史统计记录存在,如果不存在则创建 +func (s *AdminPromotionLinkStatsService) ensureHistoryStats(ctx context.Context, session sqlx.Session, linkId int64, today time.Time) (*model.AdminPromotionLinkStatsHistory, error) { + historyStats, err := s.AdminPromotionLinkStatsHistoryModel.FindOneByLinkIdStatsDate(ctx, linkId, today) + if err != nil { + if errors.Is(err, model.ErrNotFound) { + // 如果记录不存在,创建新记录 + historyStats = &model.AdminPromotionLinkStatsHistory{ + LinkId: linkId, + StatsDate: today, + ClickCount: 0, + PayCount: 0, + PayAmount: 0, + } + _, err = s.AdminPromotionLinkStatsHistoryModel.Insert(ctx, session, historyStats) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建今日统计记录失败: %+v", err) + } + // 重新获取创建后的记录 + historyStats, err = s.AdminPromotionLinkStatsHistoryModel.FindOneByLinkIdStatsDate(ctx, linkId, today) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取新创建的今日统计记录失败: %+v", err) + } + } else { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询今日统计记录失败: %+v", err) + } + } + return historyStats, nil +} + +// UpdateLinkStats 更新推广链接统计 +func (s *AdminPromotionLinkStatsService) UpdateLinkStats(ctx context.Context, linkId int64) error { + return s.AdminPromotionLinkStatsTotalModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error { + // 确保总统计记录存在 + totalStats, err := s.ensureTotalStats(ctx, session, linkId) + if err != nil { + return err + } + + // 更新总统计 + totalStats.ClickCount++ + totalStats.LastClickTime = sql.NullTime{Time: time.Now(), Valid: true} + err = s.AdminPromotionLinkStatsTotalModel.UpdateWithVersion(ctx, session, totalStats) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新总统计失败: %+v", err) + } + + // 确保历史统计记录存在 + now := time.Now() + today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local) + historyStats, err := s.ensureHistoryStats(ctx, session, linkId, today) + if err != nil { + return err + } + + // 更新历史统计 + historyStats.ClickCount++ + historyStats.LastClickTime = sql.NullTime{Time: time.Now(), Valid: true} + err = s.AdminPromotionLinkStatsHistoryModel.UpdateWithVersion(ctx, session, historyStats) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新历史统计失败: %+v", err) + } + + return nil + }) +} + +// UpdatePaymentStats 更新付费统计 +func (s *AdminPromotionLinkStatsService) UpdatePaymentStats(ctx context.Context, linkId int64, amount float64) error { + return s.AdminPromotionLinkStatsTotalModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error { + // 确保总统计记录存在 + totalStats, err := s.ensureTotalStats(ctx, session, linkId) + if err != nil { + return err + } + + // 更新总统计 + totalStats.PayCount++ + totalStats.PayAmount += amount + totalStats.LastPayTime = sql.NullTime{Time: time.Now(), Valid: true} + err = s.AdminPromotionLinkStatsTotalModel.UpdateWithVersion(ctx, session, totalStats) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新总统计失败: %+v", err) + } + + // 确保历史统计记录存在 + now := time.Now() + today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local) + historyStats, err := s.ensureHistoryStats(ctx, session, linkId, today) + if err != nil { + return err + } + + // 更新历史统计 + historyStats.PayCount++ + historyStats.PayAmount += amount + historyStats.LastPayTime = sql.NullTime{Time: time.Now(), Valid: true} + err = s.AdminPromotionLinkStatsHistoryModel.UpdateWithVersion(ctx, session, historyStats) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新历史统计失败: %+v", err) + } + + return nil + }) +} + +// CreateLinkStats 创建新的推广链接统计记录 +func (s *AdminPromotionLinkStatsService) CreateLinkStats(ctx context.Context, linkId int64) error { + return s.AdminPromotionLinkStatsTotalModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error { + // 检查总统计记录是否已存在 + _, err := s.AdminPromotionLinkStatsTotalModel.FindOneByLinkId(ctx, linkId) + if err == nil { + // 记录已存在,不需要创建 + return nil + } + if err != model.ErrNotFound { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询总统计记录失败: %+v", err) + } + + // 创建总统计记录 + totalStats := &model.AdminPromotionLinkStatsTotal{ + LinkId: linkId, + ClickCount: 0, + PayCount: 0, + PayAmount: 0, + } + _, err = s.AdminPromotionLinkStatsTotalModel.Insert(ctx, session, totalStats) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建总统计记录失败: %+v", err) + } + + // 创建今日历史统计记录 + now := time.Now() + today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local) + historyStats := &model.AdminPromotionLinkStatsHistory{ + LinkId: linkId, + StatsDate: today, + ClickCount: 0, + PayCount: 0, + PayAmount: 0, + } + _, err = s.AdminPromotionLinkStatsHistoryModel.Insert(ctx, session, historyStats) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建历史统计记录失败: %+v", err) + } + + return nil + }) +} diff --git a/app/main/api/internal/service/agentService.go b/app/main/api/internal/service/agentService.go index 8a0d530..147877a 100644 --- a/app/main/api/internal/service/agentService.go +++ b/app/main/api/internal/service/agentService.go @@ -2,11 +2,13 @@ package service import ( "context" - "qnc-server/app/user/cmd/api/internal/config" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/config" + "qnc-server/app/main/api/internal/types" + "qnc-server/app/main/model" "qnc-server/pkg/lzkit/lzUtils" "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/sqlx" ) @@ -28,6 +30,7 @@ type AgentService struct { AgentPlatformDeductionModel model.AgentPlatformDeductionModel AgentActiveStatModel model.AgentActiveStatModel AgentWithdrawalModel model.AgentWithdrawalModel + AsynqService *AsynqService } func NewAgentService(c config.Config, agentModel model.AgentModel, agentAuditModel model.AgentAuditModel, @@ -37,7 +40,7 @@ func NewAgentService(c config.Config, agentModel model.AgentModel, agentAuditMod agentMembershipRechargeOrderModel model.AgentMembershipRechargeOrderModel, agentMembershipUserConfigModel model.AgentMembershipUserConfigModel, agentProductConfigModel model.AgentProductConfigModel, agentPlatformDeductionModel model.AgentPlatformDeductionModel, - agentActiveStatModel model.AgentActiveStatModel, agentWithdrawalModel model.AgentWithdrawalModel) *AgentService { + agentActiveStatModel model.AgentActiveStatModel, asynqService *AsynqService, agentWithdrawalModel model.AgentWithdrawalModel) *AgentService { return &AgentService{ config: c, @@ -57,6 +60,7 @@ func NewAgentService(c config.Config, agentModel model.AgentModel, agentAuditMod AgentPlatformDeductionModel: agentPlatformDeductionModel, AgentActiveStatModel: agentActiveStatModel, AgentWithdrawalModel: agentWithdrawalModel, + AsynqService: asynqService, } } @@ -134,12 +138,18 @@ func (l *AgentService) AgentProcess(ctx context.Context, order *model.Order) err return findAgentWalletModelErr } - ancestorWallet.Balance += ancestorCommissionAmount + ancestorWallet.FrozenBalance += ancestorCommissionAmount ancestorWallet.TotalEarnings += ancestorCommissionAmount updateErr := l.AgentWalletModel.UpdateWithVersion(transCtx, session, ancestorWallet) if updateErr != nil { return updateErr } + // 发送解冻任务 + err := l.AsynqService.SendUnfreezeAgentBalanceTask(AncestorId, order.Id, ancestorCommissionAmount) + if err != nil { + logx.Errorf("创建解冻任务失败: %v, 代理ID: %d, 订单号: %d", err, AncestorId, order.Id) + return err + } } } @@ -167,7 +177,9 @@ func (l *AgentService) AgentCommission(ctx context.Context, agentID int64, order } // 推广人最终获得代理佣金 finalCommission := order.Amount - deductedAmount - agentWalletModel.Balance += finalCommission + + // 更新冻结余额而不是直接更新余额 + agentWalletModel.FrozenBalance += finalCommission agentWalletModel.TotalEarnings += finalCommission agentCommission := model.AgentCommission{ @@ -185,6 +197,19 @@ func (l *AgentService) AgentCommission(ctx context.Context, agentID int64, order if updateAgentWalletErr != nil { return updateAgentWalletErr } + // 创建24小时后解冻任务 + unfreezePayload := types.UnfreezeAgentBalancePayload{ + AgentID: agentID, + OrderID: order.Id, + Amount: finalCommission, + } + + // 发送解冻任务 + err := l.AsynqService.SendUnfreezeAgentBalanceTask(unfreezePayload.AgentID, unfreezePayload.OrderID, unfreezePayload.Amount) + if err != nil { + logx.Errorf("创建解冻任务失败: %v, 代理ID: %d, 订单号: %d", err, agentID, order.Id) + return err + } return nil } diff --git a/app/main/api/internal/service/alipayService.go b/app/main/api/internal/service/alipayService.go index 20cc3e6..2fe2ce3 100644 --- a/app/main/api/internal/service/alipayService.go +++ b/app/main/api/internal/service/alipayService.go @@ -6,7 +6,7 @@ import ( "encoding/hex" "fmt" "net/http" - "qnc-server/app/user/cmd/api/internal/config" + "qnc-server/app/main/api/internal/config" "qnc-server/pkg/lzkit/lzUtils" "strconv" "sync/atomic" diff --git a/app/main/api/internal/service/apirequestService.go b/app/main/api/internal/service/apirequestService.go index dcd1c4e..5b23737 100644 --- a/app/main/api/internal/service/apirequestService.go +++ b/app/main/api/internal/service/apirequestService.go @@ -8,8 +8,8 @@ import ( "io" "net/http" "net/url" - "qnc-server/app/user/cmd/api/internal/config" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/config" + "qnc-server/app/main/model" "qnc-server/pkg/lzkit/crypto" "qnc-server/pkg/lzkit/lzUtils" "sort" diff --git a/app/main/api/internal/service/applepayService.go b/app/main/api/internal/service/applepayService.go index 2ac8d96..747c199 100644 --- a/app/main/api/internal/service/applepayService.go +++ b/app/main/api/internal/service/applepayService.go @@ -9,7 +9,7 @@ import ( "fmt" "io/ioutil" "net/http" - "qnc-server/app/user/cmd/api/internal/config" + "qnc-server/app/main/api/internal/config" "strconv" "time" diff --git a/app/main/api/internal/service/asynqService.go b/app/main/api/internal/service/asynqService.go index 03c7feb..7084f24 100644 --- a/app/main/api/internal/service/asynqService.go +++ b/app/main/api/internal/service/asynqService.go @@ -4,8 +4,9 @@ package service import ( "encoding/json" - "qnc-server/app/user/cmd/api/internal/config" - "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/main/api/internal/config" + "qnc-server/app/main/api/internal/types" + "time" "github.com/hibiken/asynq" "github.com/zeromicro/go-zero/core/logx" @@ -58,3 +59,43 @@ func (s *AsynqService) SendQueryTask(orderID int64) error { logx.Infof("发送异步任务成功,任务ID: %s, 队列: %s, 订单号: %d", info.ID, info.Queue, orderID) return nil } + +// SendUnfreezeAgentBalanceTask 发送解冻代理金额的延迟任务 +func (s *AsynqService) SendUnfreezeAgentBalanceTask(agentID, orderID int64, amount float64) error { + // 准备任务的 payload + payload := types.UnfreezeAgentBalancePayload{ + AgentID: agentID, + OrderID: orderID, + Amount: amount, + FreezeTime: time.Now().Unix(), + } + + payloadBytes, err := json.Marshal(payload) + if err != nil { + logx.Errorf("发送解冻代理金额任务失败 (无法编码 payload): %v, 代理ID: %d, 订单号: %d", err, agentID, orderID) + return err + } + + // 设置任务选项 + options := []asynq.Option{ + asynq.MaxRetry(3), // 最大重试3次 + asynq.ProcessIn(24 * time.Hour), // 24小时后执行 + asynq.Timeout(5 * time.Minute), // 任务超时时间 + asynq.Retention(24 * time.Hour), // 任务结果保留时间 + asynq.Queue("agent_balance"), // 使用专门的队列 + } + + // 创建任务 + task := asynq.NewTask(types.MsgDelayedTask, payloadBytes, options...) + + // 将任务加入队列 + info, err := s.client.Enqueue(task) + if err != nil { + logx.Errorf("发送解冻代理金额任务失败 (加入队列失败): %v, 代理ID: %d, 订单号: %d", err, agentID, orderID) + return err + } + + logx.Infof("发送解冻代理金额任务成功,任务ID: %s, 队列: %s, 代理ID: %d, 订单号: %d, 金额: %.2f", + info.ID, info.Queue, agentID, orderID, amount) + return nil +} diff --git a/app/main/api/internal/service/dictService.go b/app/main/api/internal/service/dictService.go new file mode 100644 index 0000000..0836818 --- /dev/null +++ b/app/main/api/internal/service/dictService.go @@ -0,0 +1,47 @@ +package service + +import ( + "context" + "errors" + "qnc-server/app/main/model" +) + +type DictService struct { + adminDictTypeModel model.AdminDictTypeModel + adminDictDataModel model.AdminDictDataModel +} + +func NewDictService(adminDictTypeModel model.AdminDictTypeModel, adminDictDataModel model.AdminDictDataModel) *DictService { + return &DictService{adminDictTypeModel: adminDictTypeModel, adminDictDataModel: adminDictDataModel} +} +func (s *DictService) GetDictLabel(ctx context.Context, dictType string, dictValue int64) (string, error) { + dictTypeModel, err := s.adminDictTypeModel.FindOneByDictType(ctx, dictType) + if err != nil { + return "", err + } + if dictTypeModel.Status != 1 { + return "", errors.New("字典类型未启用") + } + dictData, err := s.adminDictDataModel.FindOneByDictTypeDictValue(ctx, dictTypeModel.DictType, dictValue) + if err != nil { + return "", err + } + if dictData.Status != 1 { + return "", errors.New("字典数据未启用") + } + return dictData.DictLabel, nil +} +func (s *DictService) GetDictValue(ctx context.Context, dictType string, dictLabel string) (int64, error) { + dictTypeModel, err := s.adminDictTypeModel.FindOneByDictType(ctx, dictType) + if err != nil { + return 0, err + } + if dictTypeModel.Status != 1 { + return 0, errors.New("字典类型未启用") + } + dictData, err := s.adminDictDataModel.FindOneByDictTypeDictLabel(ctx, dictTypeModel.DictType, dictLabel) + if err != nil { + return 0, err + } + return dictData.DictValue, nil +} diff --git a/app/main/api/internal/service/userService.go b/app/main/api/internal/service/userService.go index b50f395..4145a2e 100644 --- a/app/main/api/internal/service/userService.go +++ b/app/main/api/internal/service/userService.go @@ -2,7 +2,7 @@ package service import ( "context" - "qnc-server/app/user/model" + "qnc-server/app/main/model" "github.com/google/uuid" "github.com/zeromicro/go-zero/core/stores/sqlx" diff --git a/app/main/api/internal/service/verificationService.go b/app/main/api/internal/service/verificationService.go index 3454235..e24ddbd 100644 --- a/app/main/api/internal/service/verificationService.go +++ b/app/main/api/internal/service/verificationService.go @@ -6,7 +6,7 @@ import ( "io" "net/http" "net/url" - "qnc-server/app/user/cmd/api/internal/config" + "qnc-server/app/main/api/internal/config" "qnc-server/pkg/lzkit/crypto" "strings" diff --git a/app/main/api/internal/service/wechatpayService.go b/app/main/api/internal/service/wechatpayService.go index 0533616..7cf1460 100644 --- a/app/main/api/internal/service/wechatpayService.go +++ b/app/main/api/internal/service/wechatpayService.go @@ -4,8 +4,8 @@ import ( "context" "fmt" "net/http" - "qnc-server/app/user/cmd/api/internal/config" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/config" + "qnc-server/app/main/model" "qnc-server/common/ctxdata" "qnc-server/pkg/lzkit/lzUtils" "strconv" diff --git a/app/main/api/internal/service/westdexService.go b/app/main/api/internal/service/westdexService.go index 52bc147..6b3f32c 100644 --- a/app/main/api/internal/service/westdexService.go +++ b/app/main/api/internal/service/westdexService.go @@ -6,7 +6,7 @@ import ( "fmt" "io" "net/http" - "qnc-server/app/user/cmd/api/internal/config" + "qnc-server/app/main/api/internal/config" "qnc-server/pkg/lzkit/crypto" "strconv" "time" diff --git a/app/main/api/internal/service/yushanService.go b/app/main/api/internal/service/yushanService.go index 0e9ef4e..e425346 100644 --- a/app/main/api/internal/service/yushanService.go +++ b/app/main/api/internal/service/yushanService.go @@ -11,7 +11,7 @@ import ( "fmt" "io" "net/http" - "qnc-server/app/user/cmd/api/internal/config" + "qnc-server/app/main/api/internal/config" "strings" "time" diff --git a/app/main/api/internal/svc/servicecontext.go b/app/main/api/internal/svc/servicecontext.go index 9214e8b..80b4997 100644 --- a/app/main/api/internal/svc/servicecontext.go +++ b/app/main/api/internal/svc/servicecontext.go @@ -1,31 +1,49 @@ package svc import ( - "qnc-server/app/user/cmd/api/internal/config" - "qnc-server/app/user/cmd/api/internal/middleware" - "qnc-server/app/user/cmd/api/internal/service" - "qnc-server/app/user/model" + "qnc-server/app/main/api/internal/config" + "qnc-server/app/main/api/internal/middleware" + "qnc-server/app/main/api/internal/service" + "qnc-server/app/main/model" "qnc-server/pkg/core/aliyun/cloudauth" "github.com/hibiken/asynq" "github.com/zeromicro/go-zero/core/logx" + "github.com/zeromicro/go-zero/core/stores/cache" "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/rest" ) +// ServiceContext 服务上下文 type ServiceContext struct { - Config config.Config - Redis *redis.Redis - SourceInterceptor rest.Middleware - AuthInterceptor rest.Middleware - UserModel model.UserModel - UserAuthModel model.UserAuthModel - ProductModel model.ProductModel - FeatureModel model.FeatureModel - ProductFeatureModel model.ProductFeatureModel - OrderModel model.OrderModel - QueryModel model.QueryModel + Config config.Config + Redis *redis.Redis + + // 中间件 + SourceInterceptor rest.Middleware + AuthInterceptor rest.Middleware + + // 用户相关模型 + UserModel model.UserModel + UserAuthModel model.UserAuthModel + + // 产品相关模型 + ProductModel model.ProductModel + FeatureModel model.FeatureModel + ProductFeatureModel model.ProductFeatureModel + + // 订单相关模型 + OrderModel model.OrderModel + OrderRefundModel model.OrderRefundModel + AuthorizationModel model.AuthorizationModel + AuthorizationFaceModel model.AuthorizationFaceModel + QueryModel model.QueryModel + QueryCleanupLogModel model.QueryCleanupLogModel + QueryCleanupDetailModel model.QueryCleanupDetailModel + QueryCleanupConfigModel model.QueryCleanupConfigModel + + // 代理相关模型 AgentModel model.AgentModel AgentAuditModel model.AgentAuditModel AgentClosureModel model.AgentClosureModel @@ -43,35 +61,230 @@ type ServiceContext struct { AgentActiveStatModel model.AgentActiveStatModel AgentWithdrawalModel model.AgentWithdrawalModel AgentRealNameModel model.AgentRealNameModel - ExampleModel model.ExampleModel - GlobalNotificationsModel model.GlobalNotificationsModel - AuthorizationModel model.AuthorizationModel - AuthorizationFaceModel model.AuthorizationFaceModel - AlipayService *service.AliPayService - WechatPayService *service.WechatPayService - ApplePayService *service.ApplePayService - WestDexService *service.WestDexService - YushanService *service.YushanService - ApiRequestService *service.ApiRequestService - AsynqServer *asynq.Server // 服务端 - AsynqService *service.AsynqService // 客户端 - VerificationService *service.VerificationService - AgentService *service.AgentService - UserService *service.UserService + + // 管理后台相关模型 + AdminApiModel model.AdminApiModel + AdminMenuModel model.AdminMenuModel + AdminRoleModel model.AdminRoleModel + AdminRoleApiModel model.AdminRoleApiModel + AdminRoleMenuModel model.AdminRoleMenuModel + AdminUserModel model.AdminUserModel + AdminUserRoleModel model.AdminUserRoleModel + AdminDictDataModel model.AdminDictDataModel + AdminDictTypeModel model.AdminDictTypeModel + AdminPromotionLinkModel model.AdminPromotionLinkModel + AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel + AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel + AdminPromotionOrderModel model.AdminPromotionOrderModel + + // 其他模型 + ExampleModel model.ExampleModel + GlobalNotificationsModel model.GlobalNotificationsModel + + // 服务 + AlipayService *service.AliPayService + WechatPayService *service.WechatPayService + ApplePayService *service.ApplePayService + WestDexService *service.WestDexService + YushanService *service.YushanService + ApiRequestService *service.ApiRequestService + AsynqServer *asynq.Server + AsynqService *service.AsynqService + VerificationService *service.VerificationService + AgentService *service.AgentService + UserService *service.UserService + DictService *service.DictService + AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService // core service CloudAuthService *cloudauth.CloudAuthClient } -func NewServiceContext(c config.Config) *ServiceContext { - db := sqlx.NewMysql(c.DataSource) +// 用户相关模型初始化 +type userModels struct { + UserModel model.UserModel + UserAuthModel model.UserAuthModel +} - redisConf := redis.RedisConf{ - Host: c.CacheRedis[0].Host, - Pass: c.CacheRedis[0].Pass, - Type: c.CacheRedis[0].Type, +func initUserModels(db sqlx.SqlConn, redis cache.CacheConf) userModels { + return userModels{ + UserModel: model.NewUserModel(db, redis), + UserAuthModel: model.NewUserAuthModel(db, redis), } +} +// 产品相关模型初始化 +type productModels struct { + ProductModel model.ProductModel + FeatureModel model.FeatureModel + ProductFeatureModel model.ProductFeatureModel +} + +func initProductModels(db sqlx.SqlConn, redis cache.CacheConf) productModels { + return productModels{ + ProductModel: model.NewProductModel(db, redis), + FeatureModel: model.NewFeatureModel(db, redis), + ProductFeatureModel: model.NewProductFeatureModel(db, redis), + } +} + +// 订单相关模型初始化 +type orderModels struct { + OrderModel model.OrderModel + OrderRefundModel model.OrderRefundModel + AuthorizationModel model.AuthorizationModel + AuthorizationFaceModel model.AuthorizationFaceModel + QueryModel model.QueryModel + QueryCleanupLogModel model.QueryCleanupLogModel + QueryCleanupDetailModel model.QueryCleanupDetailModel + QueryCleanupConfigModel model.QueryCleanupConfigModel +} + +func initOrderModels(db sqlx.SqlConn, redis cache.CacheConf) orderModels { + return orderModels{ + OrderModel: model.NewOrderModel(db, redis), + OrderRefundModel: model.NewOrderRefundModel(db, redis), + AuthorizationModel: model.NewAuthorizationModel(db, redis), + AuthorizationFaceModel: model.NewAuthorizationFaceModel(db, redis), + QueryModel: model.NewQueryModel(db, redis), + QueryCleanupLogModel: model.NewQueryCleanupLogModel(db, redis), + QueryCleanupDetailModel: model.NewQueryCleanupDetailModel(db, redis), + QueryCleanupConfigModel: model.NewQueryCleanupConfigModel(db, redis), + } +} + +// 代理相关模型初始化 +type agentModels struct { + AgentModel model.AgentModel + AgentAuditModel model.AgentAuditModel + AgentClosureModel model.AgentClosureModel + AgentCommissionModel model.AgentCommissionModel + AgentCommissionDeductionModel model.AgentCommissionDeductionModel + AgentWalletModel model.AgentWalletModel + AgentLinkModel model.AgentLinkModel + AgentOrderModel model.AgentOrderModel + AgentRewardsModel model.AgentRewardsModel + AgentMembershipConfigModel model.AgentMembershipConfigModel + AgentMembershipRechargeOrderModel model.AgentMembershipRechargeOrderModel + AgentMembershipUserConfigModel model.AgentMembershipUserConfigModel + AgentProductConfigModel model.AgentProductConfigModel + AgentPlatformDeductionModel model.AgentPlatformDeductionModel + AgentActiveStatModel model.AgentActiveStatModel + AgentWithdrawalModel model.AgentWithdrawalModel + AgentRealNameModel model.AgentRealNameModel +} + +func initAgentModels(db sqlx.SqlConn, redis cache.CacheConf) agentModels { + return agentModels{ + AgentModel: model.NewAgentModel(db, redis), + AgentAuditModel: model.NewAgentAuditModel(db, redis), + AgentClosureModel: model.NewAgentClosureModel(db, redis), + AgentCommissionModel: model.NewAgentCommissionModel(db, redis), + AgentCommissionDeductionModel: model.NewAgentCommissionDeductionModel(db, redis), + AgentWalletModel: model.NewAgentWalletModel(db, redis), + AgentLinkModel: model.NewAgentLinkModel(db, redis), + AgentOrderModel: model.NewAgentOrderModel(db, redis), + AgentRewardsModel: model.NewAgentRewardsModel(db, redis), + AgentMembershipConfigModel: model.NewAgentMembershipConfigModel(db, redis), + AgentMembershipRechargeOrderModel: model.NewAgentMembershipRechargeOrderModel(db, redis), + AgentMembershipUserConfigModel: model.NewAgentMembershipUserConfigModel(db, redis), + AgentProductConfigModel: model.NewAgentProductConfigModel(db, redis), + AgentPlatformDeductionModel: model.NewAgentPlatformDeductionModel(db, redis), + AgentActiveStatModel: model.NewAgentActiveStatModel(db, redis), + AgentWithdrawalModel: model.NewAgentWithdrawalModel(db, redis), + AgentRealNameModel: model.NewAgentRealNameModel(db, redis), + } +} + +// 管理后台相关模型初始化 +type adminModels struct { + AdminApiModel model.AdminApiModel + AdminMenuModel model.AdminMenuModel + AdminRoleModel model.AdminRoleModel + AdminRoleApiModel model.AdminRoleApiModel + AdminRoleMenuModel model.AdminRoleMenuModel + AdminUserModel model.AdminUserModel + AdminUserRoleModel model.AdminUserRoleModel + AdminDictDataModel model.AdminDictDataModel + AdminDictTypeModel model.AdminDictTypeModel + AdminPromotionLinkModel model.AdminPromotionLinkModel + AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel + AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel + AdminPromotionOrderModel model.AdminPromotionOrderModel +} + +func initAdminModels(db sqlx.SqlConn, redis cache.CacheConf) adminModels { + return adminModels{ + AdminApiModel: model.NewAdminApiModel(db, redis), + AdminMenuModel: model.NewAdminMenuModel(db, redis), + AdminRoleModel: model.NewAdminRoleModel(db, redis), + AdminRoleApiModel: model.NewAdminRoleApiModel(db, redis), + AdminRoleMenuModel: model.NewAdminRoleMenuModel(db, redis), + AdminUserModel: model.NewAdminUserModel(db, redis), + AdminUserRoleModel: model.NewAdminUserRoleModel(db, redis), + AdminDictDataModel: model.NewAdminDictDataModel(db, redis), + AdminDictTypeModel: model.NewAdminDictTypeModel(db, redis), + AdminPromotionLinkModel: model.NewAdminPromotionLinkModel(db, redis), + AdminPromotionLinkStatsTotalModel: model.NewAdminPromotionLinkStatsTotalModel(db, redis), + AdminPromotionLinkStatsHistoryModel: model.NewAdminPromotionLinkStatsHistoryModel(db, redis), + AdminPromotionOrderModel: model.NewAdminPromotionOrderModel(db, redis), + } +} + +// 其他模型初始化 +type otherModels struct { + ExampleModel model.ExampleModel + GlobalNotificationsModel model.GlobalNotificationsModel +} + +func initOtherModels(db sqlx.SqlConn, redis cache.CacheConf) otherModels { + return otherModels{ + ExampleModel: model.NewExampleModel(db, redis), + GlobalNotificationsModel: model.NewGlobalNotificationsModel(db, redis), + } +} + +// 服务初始化 +type services struct { + AlipayService *service.AliPayService + WechatPayService *service.WechatPayService + ApplePayService *service.ApplePayService + WestDexService *service.WestDexService + YushanService *service.YushanService + ApiRequestService *service.ApiRequestService + AsynqServer *asynq.Server + AsynqService *service.AsynqService + VerificationService *service.VerificationService + AgentService *service.AgentService + UserService *service.UserService + DictService *service.DictService + AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService + + CloudAuthService *cloudauth.CloudAuthClient +} + +func initServices(c config.Config, userAuthModel model.UserAuthModel, westDexService *service.WestDexService, + yushanService *service.YushanService, featureModel model.FeatureModel, + productFeatureModel model.ProductFeatureModel, agentModels agentModels, + userModels userModels, adminModels adminModels) services { + + alipayService := service.NewAliPayService(c) + wechatPayService := service.NewWechatPayService(c, userAuthModel, service.InitTypeWxPayPubKey) + applePayService := service.NewApplePayService(c) + apiRequestService := service.NewApiRequestService(c, westDexService, yushanService, featureModel, productFeatureModel) + verificationService := service.NewVerificationService(c, westDexService, apiRequestService) + asynqService := service.NewAsynqService(c) + agentService := service.NewAgentService(c, agentModels.AgentModel, agentModels.AgentAuditModel, + agentModels.AgentClosureModel, agentModels.AgentCommissionModel, + agentModels.AgentCommissionDeductionModel, agentModels.AgentWalletModel, + agentModels.AgentLinkModel, agentModels.AgentOrderModel, agentModels.AgentRewardsModel, + agentModels.AgentMembershipConfigModel, agentModels.AgentMembershipRechargeOrderModel, + agentModels.AgentMembershipUserConfigModel, agentModels.AgentProductConfigModel, + agentModels.AgentPlatformDeductionModel, agentModels.AgentActiveStatModel, + asynqService, agentModels.AgentWithdrawalModel) + userService := service.NewUserService(userModels.UserModel, userModels.UserAuthModel) + dictService := service.NewDictService(adminModels.AdminDictTypeModel, adminModels.AdminDictDataModel) + AdminPromotionLinkStatsService := service.NewAdminPromotionLinkStatsService(adminModels.AdminPromotionLinkModel, adminModels.AdminPromotionLinkStatsTotalModel, adminModels.AdminPromotionLinkStatsHistoryModel) asynqServer := asynq.NewServer( asynq.RedisClientOpt{Addr: c.CacheRedis[0].Host, Password: c.CacheRedis[0].Pass}, asynq.Config{ @@ -82,6 +295,7 @@ func NewServiceContext(c config.Config) *ServiceContext { Concurrency: 10, }, ) + cloudAuthService, err := cloudauth.NewCloudAuthClient(cloudauth.CloudAuthConfig{ AccessKeyId: c.CloudAuth.AccessKeyId, AccessKeySecret: c.CloudAuth.AccessKeySecret, @@ -93,96 +307,135 @@ func NewServiceContext(c config.Config) *ServiceContext { logx.Errorf("初始化阿里云人脸认证服务失败: %+v", err) panic(err) } + + return services{ + AlipayService: alipayService, + WechatPayService: wechatPayService, + ApplePayService: applePayService, + WestDexService: westDexService, + YushanService: yushanService, + ApiRequestService: apiRequestService, + AsynqServer: asynqServer, + AsynqService: asynqService, + VerificationService: verificationService, + AgentService: agentService, + UserService: userService, + DictService: dictService, + AdminPromotionLinkStatsService: AdminPromotionLinkStatsService, + + // core service + CloudAuthService: cloudAuthService, + } +} + +// NewServiceContext 创建服务上下文 +func NewServiceContext(c config.Config) *ServiceContext { + db := sqlx.NewMysql(c.DataSource) + + // 使用配置中的CacheRedis配置 + cacheConf := c.CacheRedis + + // 初始化Redis客户端(用于异步任务等) + redisConf := redis.RedisConf{ + Host: cacheConf[0].Host, + Pass: cacheConf[0].Pass, + Type: cacheConf[0].Type, + } + redisClient := redis.MustNewRedis(redisConf) + + // 初始化各个模块的模型 + userModels := initUserModels(db, cacheConf) + productModels := initProductModels(db, cacheConf) + orderModels := initOrderModels(db, cacheConf) + agentModels := initAgentModels(db, cacheConf) + adminModels := initAdminModels(db, cacheConf) + otherModels := initOtherModels(db, cacheConf) + + // 初始化第三方服务 westDexService := service.NewWestDexService(c) yushanService := service.NewYushanService(c) - productFeatureModel := model.NewProductFeatureModel(db, c.CacheRedis) - featureModel := model.NewFeatureModel(db, c.CacheRedis) - userAuthModel := model.NewUserAuthModel(db, c.CacheRedis) - userModel := model.NewUserModel(db, c.CacheRedis) - productModel := model.NewProductModel(db, c.CacheRedis) - orderModel := model.NewOrderModel(db, c.CacheRedis) - queryModel := model.NewQueryModel(db, c.CacheRedis) - globalNotificationsModel := model.NewGlobalNotificationsModel(db, c.CacheRedis) - - agentModel := model.NewAgentModel(db, c.CacheRedis) - agentAuditModel := model.NewAgentAuditModel(db, c.CacheRedis) - agentCommissionModel := model.NewAgentCommissionModel(db, c.CacheRedis) - agentCommissionDeductionModel := model.NewAgentCommissionDeductionModel(db, c.CacheRedis) - agentWalletModel := model.NewAgentWalletModel(db, c.CacheRedis) - agentClosureModel := model.NewAgentClosureModel(db, c.CacheRedis) - agentLinkModel := model.NewAgentLinkModel(db, c.CacheRedis) - agentOrderModel := model.NewAgentOrderModel(db, c.CacheRedis) - agentRewardsModel := model.NewAgentRewardsModel(db, c.CacheRedis) - agentMembershipConfigModel := model.NewAgentMembershipConfigModel(db, c.CacheRedis) - agentMembershipRechargeOrderModel := model.NewAgentMembershipRechargeOrderModel(db, c.CacheRedis) - agentMembershipUserConfigModel := model.NewAgentMembershipUserConfigModel(db, c.CacheRedis) - agentProductConfigModel := model.NewAgentProductConfigModel(db, c.CacheRedis) - agentPlatformDeductionModel := model.NewAgentPlatformDeductionModel(db, c.CacheRedis) - agentActiveStatModel := model.NewAgentActiveStatModel(db, c.CacheRedis) - agentWithdrawalModel := model.NewAgentWithdrawalModel(db, c.CacheRedis) - agentRealNameModel := model.NewAgentRealNameModel(db, c.CacheRedis) - exampleModel := model.NewExampleModel(db, c.CacheRedis) - authorizationModel := model.NewAuthorizationModel(db, c.CacheRedis) - authorizationFaceModel := model.NewAuthorizationFaceModel(db, c.CacheRedis) - - alipayService := service.NewAliPayService(c) - wechatPayService := service.NewWechatPayService(c, userAuthModel, service.InitTypePlatformCert) - applePayService := service.NewApplePayService(c) - apiRequestService := service.NewApiRequestService(c, westDexService, yushanService, featureModel, productFeatureModel) - verificationService := service.NewVerificationService(c, westDexService, apiRequestService) - asynqService := service.NewAsynqService(c) - agentService := service.NewAgentService(c, agentModel, agentAuditModel, agentClosureModel, agentCommissionModel, - agentCommissionDeductionModel, agentWalletModel, agentLinkModel, agentOrderModel, agentRewardsModel, - agentMembershipConfigModel, agentMembershipRechargeOrderModel, agentMembershipUserConfigModel, - agentProductConfigModel, agentPlatformDeductionModel, agentActiveStatModel, agentWithdrawalModel) - userService := service.NewUserService(userModel, userAuthModel) + // 初始化所有服务 + services := initServices(c, userModels.UserAuthModel, westDexService, yushanService, + productModels.FeatureModel, productModels.ProductFeatureModel, agentModels, userModels, adminModels) return &ServiceContext{ - Config: c, - Redis: redis.MustNewRedis(redisConf), - SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle, - AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle, - AlipayService: alipayService, - WechatPayService: wechatPayService, - ApplePayService: applePayService, - WestDexService: westDexService, - YushanService: yushanService, - VerificationService: verificationService, - AsynqServer: asynqServer, - ApiRequestService: apiRequestService, - AsynqService: asynqService, - AgentService: agentService, - UserModel: userModel, - UserAuthModel: userAuthModel, - ProductModel: productModel, - OrderModel: orderModel, - QueryModel: queryModel, - GlobalNotificationsModel: globalNotificationsModel, - FeatureModel: featureModel, - ProductFeatureModel: productFeatureModel, - AgentModel: agentModel, - AgentAuditModel: agentAuditModel, - AgentCommissionModel: agentCommissionModel, - AgentCommissionDeductionModel: agentCommissionDeductionModel, - AgentWalletModel: agentWalletModel, - AgentClosureModel: agentClosureModel, - AgentLinkModel: agentLinkModel, - AgentOrderModel: agentOrderModel, - AgentRewardsModel: agentRewardsModel, - AgentMembershipConfigModel: agentMembershipConfigModel, - AgentMembershipRechargeOrderModel: agentMembershipRechargeOrderModel, - AgentMembershipUserConfigModel: agentMembershipUserConfigModel, - AgentProductConfigModel: agentProductConfigModel, - AgentPlatformDeductionModel: agentPlatformDeductionModel, - AgentActiveStatModel: agentActiveStatModel, - AgentWithdrawalModel: agentWithdrawalModel, - AgentRealNameModel: agentRealNameModel, - ExampleModel: exampleModel, - AuthorizationModel: authorizationModel, - AuthorizationFaceModel: authorizationFaceModel, - UserService: userService, - CloudAuthService: cloudAuthService, + Config: c, + Redis: redisClient, + SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle, + AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle, + + // 用户相关模型 + UserModel: userModels.UserModel, + UserAuthModel: userModels.UserAuthModel, + + // 产品相关模型 + ProductModel: productModels.ProductModel, + FeatureModel: productModels.FeatureModel, + ProductFeatureModel: productModels.ProductFeatureModel, + + // 订单相关模型 + OrderModel: orderModels.OrderModel, + QueryModel: orderModels.QueryModel, + OrderRefundModel: orderModels.OrderRefundModel, + QueryCleanupLogModel: orderModels.QueryCleanupLogModel, + QueryCleanupDetailModel: orderModels.QueryCleanupDetailModel, + QueryCleanupConfigModel: orderModels.QueryCleanupConfigModel, + // 代理相关模型 + AgentModel: agentModels.AgentModel, + AgentAuditModel: agentModels.AgentAuditModel, + AgentClosureModel: agentModels.AgentClosureModel, + AgentCommissionModel: agentModels.AgentCommissionModel, + AgentCommissionDeductionModel: agentModels.AgentCommissionDeductionModel, + AgentWalletModel: agentModels.AgentWalletModel, + AgentLinkModel: agentModels.AgentLinkModel, + AgentOrderModel: agentModels.AgentOrderModel, + AgentRewardsModel: agentModels.AgentRewardsModel, + AgentMembershipConfigModel: agentModels.AgentMembershipConfigModel, + AgentMembershipRechargeOrderModel: agentModels.AgentMembershipRechargeOrderModel, + AgentMembershipUserConfigModel: agentModels.AgentMembershipUserConfigModel, + AgentProductConfigModel: agentModels.AgentProductConfigModel, + AgentPlatformDeductionModel: agentModels.AgentPlatformDeductionModel, + AgentActiveStatModel: agentModels.AgentActiveStatModel, + AgentWithdrawalModel: agentModels.AgentWithdrawalModel, + AgentRealNameModel: agentModels.AgentRealNameModel, + + // 管理后台相关模型 + AdminApiModel: adminModels.AdminApiModel, + AdminMenuModel: adminModels.AdminMenuModel, + AdminRoleModel: adminModels.AdminRoleModel, + AdminRoleApiModel: adminModels.AdminRoleApiModel, + AdminRoleMenuModel: adminModels.AdminRoleMenuModel, + AdminUserModel: adminModels.AdminUserModel, + AdminUserRoleModel: adminModels.AdminUserRoleModel, + AdminDictDataModel: adminModels.AdminDictDataModel, + AdminDictTypeModel: adminModels.AdminDictTypeModel, + AdminPromotionLinkModel: adminModels.AdminPromotionLinkModel, + AdminPromotionLinkStatsTotalModel: adminModels.AdminPromotionLinkStatsTotalModel, + AdminPromotionLinkStatsHistoryModel: adminModels.AdminPromotionLinkStatsHistoryModel, + AdminPromotionOrderModel: adminModels.AdminPromotionOrderModel, + + // 其他模型 + ExampleModel: otherModels.ExampleModel, + GlobalNotificationsModel: otherModels.GlobalNotificationsModel, + + // 服务 + AlipayService: services.AlipayService, + WechatPayService: services.WechatPayService, + ApplePayService: services.ApplePayService, + WestDexService: services.WestDexService, + YushanService: services.YushanService, + ApiRequestService: services.ApiRequestService, + AsynqServer: services.AsynqServer, + AsynqService: services.AsynqService, + VerificationService: services.VerificationService, + AgentService: services.AgentService, + UserService: services.UserService, + DictService: services.DictService, + AdminPromotionLinkStatsService: services.AdminPromotionLinkStatsService, + + // core service + CloudAuthService: services.CloudAuthService, } } diff --git a/app/main/api/internal/types/payload.go b/app/main/api/internal/types/payload.go index 672918f..e2d2ea3 100644 --- a/app/main/api/internal/types/payload.go +++ b/app/main/api/internal/types/payload.go @@ -3,3 +3,17 @@ package types type MsgPaySuccessQueryPayload struct { OrderID int64 `json:"order_id"` } + +type MsgDelayedTaskPayload struct { + TaskID int64 `json:"task_id"` // 任务ID + TaskType string `json:"task_type"` // 任务类型 + Data string `json:"data"` // 任务数据 +} + +// UnfreezeAgentBalancePayload 解冻代理金额任务载荷 +type UnfreezeAgentBalancePayload struct { + AgentID int64 `json:"agent_id"` // 代理ID + OrderID int64 `json:"order_id"` // 订单ID + Amount float64 `json:"amount"` // 解冻金额 + FreezeTime int64 `json:"freeze_time"` // 冻结时间 +} diff --git a/app/main/api/internal/types/query.go b/app/main/api/internal/types/query.go index fbf9d3d..767834a 100644 --- a/app/main/api/internal/types/query.go +++ b/app/main/api/internal/types/query.go @@ -3,40 +3,47 @@ package types type MarriageReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` + Mobile string `json:"mobile" validate:"required,mobile"` } type HomeServiceReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` + Mobile string `json:"mobile" validate:"required,mobile"` } // RiskAssessment 查询请求结构 type RiskAssessmentReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` + Mobile string `json:"mobile" validate:"required,mobile"` } // CompanyInfo 查询请求结构 type CompanyInfoReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` + Mobile string `json:"mobile" validate:"required,mobile"` } // RentalInfo 查询请求结构 type RentalInfoReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` + Mobile string `json:"mobile" validate:"required,mobile"` } // PreLoanBackgroundCheck 查询请求结构 type PreLoanBackgroundCheckReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` + Mobile string `json:"mobile" validate:"required,mobile"` } // BackgroundCheck 查询请求结构 type BackgroundCheckReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` + Mobile string `json:"mobile" validate:"required,mobile"` } type EntLawsuitReq struct { EntName string `json:"ent_name" validate:"required,name"` diff --git a/app/main/api/internal/types/taskname.go b/app/main/api/internal/types/taskname.go index 33329ee..0e3f7dd 100644 --- a/app/main/api/internal/types/taskname.go +++ b/app/main/api/internal/types/taskname.go @@ -2,3 +2,4 @@ package types const MsgPaySuccessQuery = "msg:pay_success:query" const MsgCleanQueryData = "msg:clean_query_data" +const MsgDelayedTask = "msg:delayed_task" // 24小时后执行的延迟任务 diff --git a/app/main/api/internal/types/types.go b/app/main/api/internal/types/types.go index cee1bba..669f56e 100644 --- a/app/main/api/internal/types/types.go +++ b/app/main/api/internal/types/types.go @@ -15,6 +15,698 @@ type ActiveRewardData struct { SubWithdrawReward float64 `json:"sub_withdraw_reward"` } +type AdminCreateFeatureReq struct { + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 描述 +} + +type AdminCreateFeatureResp struct { + Id int64 `json:"id"` // 功能ID +} + +type AdminCreateNotificationReq struct { + Title string `json:"title"` // 通知标题 + NotificationPage string `json:"notification_page"` // 通知页面 + Content string `json:"content"` // 通知内容 + StartDate string `json:"start_date"` // 生效开始日期(yyyy-MM-dd) + StartTime string `json:"start_time"` // 生效开始时间(HH:mm:ss) + EndDate string `json:"end_date"` // 生效结束日期(yyyy-MM-dd) + EndTime string `json:"end_time"` // 生效结束时间(HH:mm:ss) + Status int64 `json:"status"` // 状态:1-启用,0-禁用 +} + +type AdminCreateNotificationResp struct { + Id int64 `json:"id"` // 通知ID +} + +type AdminCreateOrderReq struct { + OrderNo string `json:"order_no"` // 商户订单号 + PlatformOrderId string `json:"platform_order_id"` // 支付订单号 + ProductName string `json:"product_name"` // 产品名称 + PaymentPlatform string `json:"payment_platform"` // 支付方式 + PaymentScene string `json:"payment_scene"` // 支付平台 + Amount float64 `json:"amount"` // 金额 + Status string `json:"status,default=pending"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + IsPromotion int64 `json:"is_promotion,default=0"` // 是否推广订单:0-否,1-是 +} + +type AdminCreateOrderResp struct { + Id int64 `json:"id"` // 订单ID +} + +type AdminCreatePlatformUserReq struct { + Mobile string `json:"mobile"` // 手机号 + Password string `json:"password"` // 密码 + Nickname string `json:"nickname"` // 昵称 + Info string `json:"info"` // 备注信息 + Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否 +} + +type AdminCreatePlatformUserResp struct { + Id int64 `json:"id"` // 用户ID +} + +type AdminCreateProductReq struct { + ProductName string `json:"product_name"` // 服务名 + ProductEn string `json:"product_en"` // 英文名 + Description string `json:"description"` // 描述 + Notes string `json:"notes,optional"` // 备注 + CostPrice float64 `json:"cost_price"` // 成本 + SellPrice float64 `json:"sell_price"` // 售价 +} + +type AdminCreateProductResp struct { + Id int64 `json:"id"` // 产品ID +} + +type AdminCreateUserReq struct { + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Status int64 `json:"status,default=1"` // 状态:0-禁用,1-启用 + RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表 +} + +type AdminCreateUserResp struct { + Id int64 `json:"id"` // 用户ID +} + +type AdminDeleteFeatureReq struct { + Id int64 `path:"id"` // 功能ID +} + +type AdminDeleteFeatureResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminDeleteNotificationReq struct { + Id int64 `path:"id"` // 通知ID +} + +type AdminDeleteNotificationResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminDeleteOrderReq struct { + Id int64 `path:"id"` // 订单ID +} + +type AdminDeleteOrderResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminDeletePlatformUserReq struct { + Id int64 `path:"id"` // 用户ID +} + +type AdminDeletePlatformUserResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminDeleteProductReq struct { + Id int64 `path:"id"` // 产品ID +} + +type AdminDeleteProductResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminDeleteUserReq struct { + Id int64 `path:"id"` // 用户ID +} + +type AdminDeleteUserResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminGetAgentCommissionDeductionListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + ProductName *string `form:"product_name,optional"` // 产品名(可选) + Type *string `form:"type,optional"` // 类型(cost/pricing,可选) + Status *int64 `form:"status,optional"` // 状态(可选) +} + +type AdminGetAgentCommissionDeductionListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentCommissionDeductionListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentCommissionListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + ProductName *string `form:"product_name,optional"` // 产品名(可选) + Status *int64 `form:"status,optional"` // 状态(可选) +} + +type AdminGetAgentCommissionListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentCommissionListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentLinkListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + ProductName *string `form:"product_name,optional"` // 产品名(可选) + LinkIdentifier *string `form:"link_identifier,optional"` // 推广码(可选) +} + +type AdminGetAgentLinkListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentLinkListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + Mobile *string `form:"mobile,optional"` // 手机号(可选) + Region *string `form:"region,optional"` // 区域(可选) + ParentAgentId *int64 `form:"parent_agent_id,optional"` // 上级代理ID(可选) +} + +type AdminGetAgentListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentMembershipConfigListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + LevelName *string `form:"level_name,optional"` // 会员级别名称(可选) +} + +type AdminGetAgentMembershipConfigListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentMembershipConfigListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentMembershipRechargeOrderListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + UserId *int64 `form:"user_id,optional"` // 用户ID(可选) + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + OrderNo *string `form:"order_no,optional"` // 订单号(可选) + PlatformOrderId *string `form:"platform_order_id,optional"` // 平台订单号(可选) + Status *string `form:"status,optional"` // 状态(可选) + PaymentMethod *string `form:"payment_method,optional"` // 支付方式(可选) +} + +type AdminGetAgentMembershipRechargeOrderListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentMembershipRechargeOrderListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentPlatformDeductionListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + Type *string `form:"type,optional"` // 类型(cost/pricing,可选) + Status *int64 `form:"status,optional"` // 状态(可选) +} + +type AdminGetAgentPlatformDeductionListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentPlatformDeductionListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentProductionConfigListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + ProductName *string `form:"product_name,optional"` // 产品名(可选) + Id *int64 `form:"id,optional"` // 配置ID(可选) +} + +type AdminGetAgentProductionConfigListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentProductionConfigItem `json:"items"` // 列表数据 +} + +type AdminGetAgentRewardListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + RelationAgentId *int64 `form:"relation_agent_id,optional"` // 关联代理ID(可选) + Type *string `form:"type,optional"` // 奖励类型(可选) +} + +type AdminGetAgentRewardListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentRewardListItem `json:"items"` // 列表数据 +} + +type AdminGetAgentWithdrawalListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + AgentId *int64 `form:"agent_id,optional"` // 代理ID(可选) + Status *int64 `form:"status,optional"` // 状态(可选) + WithdrawNo *string `form:"withdraw_no,optional"` // 提现单号(可选) +} + +type AdminGetAgentWithdrawalListResp struct { + Total int64 `json:"total"` // 总数 + Items []AgentWithdrawalListItem `json:"items"` // 列表数据 +} + +type AdminGetFeatureDetailReq struct { + Id int64 `path:"id"` // 功能ID +} + +type AdminGetFeatureDetailResp struct { + Id int64 `json:"id"` // 功能ID + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 描述 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type AdminGetFeatureListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + ApiId *string `form:"api_id,optional"` // API标识 + Name *string `form:"name,optional"` // 描述 +} + +type AdminGetFeatureListResp struct { + Total int64 `json:"total"` // 总数 + Items []FeatureListItem `json:"items"` // 列表数据 +} + +type AdminGetNotificationDetailReq struct { + Id int64 `path:"id"` // 通知ID +} + +type AdminGetNotificationDetailResp struct { + Id int64 `json:"id"` // 通知ID + Title string `json:"title"` // 通知标题 + Content string `json:"content"` // 通知内容 + NotificationPage string `json:"notification_page"` // 通知页面 + StartDate string `json:"start_date"` // 生效开始日期 + StartTime string `json:"start_time"` // 生效开始时间 + EndDate string `json:"end_date"` // 生效结束日期 + EndTime string `json:"end_time"` // 生效结束时间 + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type AdminGetNotificationListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + Title *string `form:"title,optional"` // 通知标题(可选) + NotificationPage *string `form:"notification_page,optional"` // 通知页面(可选) + Status *int64 `form:"status,optional"` // 状态(可选) + StartDate *string `form:"start_date,optional"` // 开始日期范围(可选) + EndDate *string `form:"end_date,optional"` // 结束日期范围(可选) +} + +type AdminGetNotificationListResp struct { + Total int64 `json:"total"` // 总数 + Items []NotificationListItem `json:"items"` // 列表数据 +} + +type AdminGetOrderDetailReq struct { + Id int64 `path:"id"` // 订单ID +} + +type AdminGetOrderDetailResp struct { + Id int64 `json:"id"` // 订单ID + OrderNo string `json:"order_no"` // 商户订单号 + PlatformOrderId string `json:"platform_order_id"` // 支付订单号 + ProductName string `json:"product_name"` // 产品名称 + PaymentPlatform string `json:"payment_platform"` // 支付方式 + PaymentScene string `json:"payment_scene"` // 支付平台 + Amount float64 `json:"amount"` // 金额 + Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + QueryState string `json:"query_state"` // 查询状态:pending-待查询,success-查询成功,failed-查询失败 processing-查询中 + CreateTime string `json:"create_time"` // 创建时间 + PayTime string `json:"pay_time"` // 支付时间 + RefundTime string `json:"refund_time"` // 退款时间 + IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type AdminGetOrderListReq struct { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + OrderNo string `form:"order_no,optional"` // 商户订单号 + PlatformOrderId string `form:"platform_order_id,optional"` // 支付订单号 + ProductName string `form:"product_name,optional"` // 产品名称 + PaymentPlatform string `form:"payment_platform,optional"` // 支付方式 + PaymentScene string `form:"payment_scene,optional"` // 支付平台 + Amount float64 `form:"amount,optional"` // 金额 + Status string `form:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + IsPromotion int64 `form:"is_promotion,optional,default=-1"` // 是否推广订单:0-否,1-是 + CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始 + CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束 + PayTimeStart string `form:"pay_time_start,optional"` // 支付时间开始 + PayTimeEnd string `form:"pay_time_end,optional"` // 支付时间结束 + RefundTimeStart string `form:"refund_time_start,optional"` // 退款时间开始 + RefundTimeEnd string `form:"refund_time_end,optional"` // 退款时间结束 +} + +type AdminGetOrderListResp struct { + Total int64 `json:"total"` // 总数 + Items []OrderListItem `json:"items"` // 列表 +} + +type AdminGetPlatformUserDetailReq struct { + Id int64 `path:"id"` // 用户ID +} + +type AdminGetPlatformUserDetailResp struct { + Id int64 `json:"id"` // 用户ID + Mobile string `json:"mobile"` // 手机号 + Nickname string `json:"nickname"` // 昵称 + Info string `json:"info"` // 备注信息 + Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type AdminGetPlatformUserListReq struct { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Mobile string `form:"mobile,optional"` // 手机号 + Nickname string `form:"nickname,optional"` // 昵称 + Inside int64 `form:"inside,optional"` // 是否内部用户 1-是 0-否 + CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始 + CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束 + OrderBy string `form:"order_by,optional"` // 排序字段 + OrderType string `form:"order_type,optional"` // 排序类型 +} + +type AdminGetPlatformUserListResp struct { + Total int64 `json:"total"` // 总数 + Items []PlatformUserListItem `json:"items"` // 列表 +} + +type AdminGetProductDetailReq struct { + Id int64 `path:"id"` // 产品ID +} + +type AdminGetProductDetailResp struct { + Id int64 `json:"id"` // 产品ID + ProductName string `json:"product_name"` // 服务名 + ProductEn string `json:"product_en"` // 英文名 + Description string `json:"description"` // 描述 + Notes string `json:"notes"` // 备注 + CostPrice float64 `json:"cost_price"` // 成本 + SellPrice float64 `json:"sell_price"` // 售价 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type AdminGetProductFeatureListReq struct { + ProductId int64 `path:"product_id"` // 产品ID +} + +type AdminGetProductFeatureListResp struct { + Id int64 `json:"id"` // 关联ID + ProductId int64 `json:"product_id"` // 产品ID + FeatureId int64 `json:"feature_id"` // 功能ID + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 功能描述 + Sort int64 `json:"sort"` // 排序 + Enable int64 `json:"enable"` // 是否启用 + IsImportant int64 `json:"is_important"` // 是否重要 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type AdminGetProductListReq struct { + Page int64 `form:"page"` // 页码 + PageSize int64 `form:"pageSize"` // 每页数量 + ProductName *string `form:"product_name,optional"` // 服务名 + ProductEn *string `form:"product_en,optional"` // 英文名 +} + +type AdminGetProductListResp struct { + Total int64 `json:"total"` // 总数 + Items []ProductListItem `json:"items"` // 列表数据 +} + +type AdminGetQueryCleanupConfigListReq struct { + Status int64 `form:"status,optional"` // 状态:1-启用,0-禁用 +} + +type AdminGetQueryCleanupConfigListResp struct { + Items []QueryCleanupConfigItem `json:"items"` // 配置列表 +} + +type AdminGetQueryCleanupDetailListReq struct { + LogId int64 `path:"log_id"` // 清理日志ID + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"page_size,default=20"` // 每页数量 +} + +type AdminGetQueryCleanupDetailListResp struct { + Total int64 `json:"total"` // 总数 + Items []QueryCleanupDetailItem `json:"items"` // 列表 +} + +type AdminGetQueryCleanupLogListReq struct { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"page_size,default=20"` // 每页数量 + Status int64 `form:"status,optional"` // 状态:1-成功,2-失败 + StartTime string `form:"start_time,optional"` // 开始时间 + EndTime string `form:"end_time,optional"` // 结束时间 +} + +type AdminGetQueryCleanupLogListResp struct { + Total int64 `json:"total"` // 总数 + Items []QueryCleanupLogItem `json:"items"` // 列表 +} + +type AdminGetQueryDetailByOrderIdReq struct { + OrderId int64 `path:"order_id"` +} + +type AdminGetQueryDetailByOrderIdResp struct { + Id int64 `json:"id"` // 主键ID + OrderId int64 `json:"order_id"` // 订单ID + UserId int64 `json:"user_id"` // 用户ID + ProductName string `json:"product_name"` // 产品ID + QueryParams map[string]interface{} `json:"query_params"` + QueryData []AdminQueryItem `json:"query_data"` + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + QueryState string `json:"query_state"` // 查询状态 +} + +type AdminGetUserDetailReq struct { + Id int64 `path:"id"` // 用户ID +} + +type AdminGetUserDetailResp struct { + Id int64 `json:"id"` // 用户ID + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表 +} + +type AdminGetUserListReq struct { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Username string `form:"username,optional"` // 用户名 + RealName string `form:"real_name,optional"` // 真实姓名 + Status int64 `form:"status,optional,default=-1"` // 状态:0-禁用,1-启用 +} + +type AdminGetUserListResp struct { + Total int64 `json:"total"` // 总数 + Items []AdminUserListItem `json:"items"` // 列表 +} + +type AdminLoginReq struct { + Username string `json:"username" validate:"required"` + Password string `json:"password" validate:"required"` + Captcha bool `json:"captcha" validate:"required"` +} + +type AdminLoginResp struct { + AccessToken string `json:"access_token"` + AccessExpire int64 `json:"access_expire"` + RefreshAfter int64 `json:"refresh_after"` + Roles []string `json:"roles"` +} + +type AdminQueryItem struct { + Feature interface{} `json:"feature"` + Data interface{} `json:"data"` // 这里可以是 map 或 具体的 struct +} + +type AdminRefundOrderReq struct { + Id int64 `path:"id"` // 订单ID + RefundAmount float64 `json:"refund_amount"` // 退款金额 + RefundReason string `json:"refund_reason"` // 退款原因 +} + +type AdminRefundOrderResp struct { + Status string `json:"status"` // 退款状态 + RefundNo string `json:"refund_no"` // 退款单号 + Amount float64 `json:"amount"` // 退款金额 +} + +type AdminUpdateAgentMembershipConfigReq struct { + Id int64 `json:"id"` // 主键 + LevelName string `json:"level_name"` // 会员级别名称 + Price float64 `json:"price"` // 会员年费 + ReportCommission float64 `json:"report_commission"` // 直推报告收益 + LowerActivityReward *float64 `json:"lower_activity_reward,optional,omitempty"` // 下级活跃奖励金额 + NewActivityReward *float64 `json:"new_activity_reward,optional,omitempty"` // 新增活跃奖励金额 + LowerStandardCount *int64 `json:"lower_standard_count,optional,omitempty"` // 活跃下级达标个数 + NewLowerStandardCount *int64 `json:"new_lower_standard_count,optional,omitempty"` // 新增活跃下级达标个数 + LowerWithdrawRewardRatio *float64 `json:"lower_withdraw_reward_ratio,optional,omitempty"` // 下级提现奖励比例 + LowerConvertVipReward *float64 `json:"lower_convert_vip_reward,optional,omitempty"` // 下级转化VIP奖励 + LowerConvertSvipReward *float64 `json:"lower_convert_svip_reward,optional,omitempty"` // 下级转化SVIP奖励 + ExemptionAmount *float64 `json:"exemption_amount,optional,omitempty"` // 免责金额 + PriceIncreaseMax *float64 `json:"price_increase_max,optional,omitempty"` // 提价最高金额 + PriceRatio *float64 `json:"price_ratio,optional,omitempty"` // 提价区间收取比例 + PriceIncreaseAmount *float64 `json:"price_increase_amount,optional,omitempty"` // 在原本成本上加价的金额 +} + +type AdminUpdateAgentMembershipConfigResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateAgentProductionConfigReq struct { + Id int64 `json:"id"` // 主键 + CostPrice float64 `json:"cost_price"` // 成本 + PriceRangeMin float64 `json:"price_range_min"` // 最低定价 + PriceRangeMax float64 `json:"price_range_max"` // 最高定价 + PricingStandard float64 `json:"pricing_standard"` // 定价标准 + OverpricingRatio float64 `json:"overpricing_ratio"` // 超价比例 +} + +type AdminUpdateAgentProductionConfigResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateFeatureReq struct { + Id int64 `path:"id"` // 功能ID + ApiId *string `json:"api_id,optional"` // API标识 + Name *string `json:"name,optional"` // 描述 +} + +type AdminUpdateFeatureResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateNotificationReq struct { + Id int64 `path:"id"` // 通知ID + Title *string `json:"title,optional"` // 通知标题 + Content *string `json:"content,optional"` // 通知内容 + NotificationPage *string `json:"notification_page,optional"` // 通知页面 + StartDate *string `json:"start_date,optional"` // 生效开始日期 + StartTime *string `json:"start_time,optional"` // 生效开始时间 + EndDate *string `json:"end_date,optional"` // 生效结束日期 + EndTime *string `json:"end_time,optional"` // 生效结束时间 + Status *int64 `json:"status,optional"` // 状态 +} + +type AdminUpdateNotificationResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateOrderReq struct { + Id int64 `path:"id"` // 订单ID + OrderNo *string `json:"order_no,optional"` // 商户订单号 + PlatformOrderId *string `json:"platform_order_id,optional"` // 支付订单号 + ProductName *string `json:"product_name,optional"` // 产品名称 + PaymentPlatform *string `json:"payment_platform,optional"` // 支付方式 + PaymentScene *string `json:"payment_scene,optional"` // 支付平台 + Amount *float64 `json:"amount,optional"` // 金额 + Status *string `json:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + PayTime *string `json:"pay_time,optional"` // 支付时间 + RefundTime *string `json:"refund_time,optional"` // 退款时间 + IsPromotion *int64 `json:"is_promotion,optional"` // 是否推广订单:0-否,1-是 +} + +type AdminUpdateOrderResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdatePlatformUserReq struct { + Id int64 `path:"id"` // 用户ID + Mobile *string `json:"mobile,optional"` // 手机号 + Password *string `json:"password,optional"` // 密码 + Nickname *string `json:"nickname,optional"` // 昵称 + Info *string `json:"info,optional"` // 备注信息 + Inside *int64 `json:"inside,optional"` // 是否内部用户 1-是 0-否 +} + +type AdminUpdatePlatformUserResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateProductFeaturesReq struct { + ProductId int64 `path:"product_id"` // 产品ID + Features []ProductFeatureItem `json:"features"` // 功能列表 +} + +type AdminUpdateProductFeaturesResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateProductReq struct { + Id int64 `path:"id"` // 产品ID + ProductName *string `json:"product_name,optional"` // 服务名 + ProductEn *string `json:"product_en,optional"` // 英文名 + Description *string `json:"description,optional"` // 描述 + Notes *string `json:"notes,optional"` // 备注 + CostPrice *float64 `json:"cost_price,optional"` // 成本 + SellPrice *float64 `json:"sell_price,optional"` // 售价 +} + +type AdminUpdateProductResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateQueryCleanupConfigReq struct { + Id int64 `json:"id"` // 主键ID + ConfigValue string `json:"config_value"` // 配置值 + Status int64 `json:"status"` // 状态:1-启用,0-禁用 +} + +type AdminUpdateQueryCleanupConfigResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUpdateUserReq struct { + Id int64 `path:"id"` // 用户ID + Username *string `json:"username,optional"` // 用户名 + RealName *string `json:"real_name,optional"` // 真实姓名 + Status *int64 `json:"status,optional"` // 状态:0-禁用,1-启用 + RoleIds []int64 `json:"role_ids,optional"` // 关联的角色ID列表 +} + +type AdminUpdateUserResp struct { + Success bool `json:"success"` // 是否成功 +} + +type AdminUserInfoReq struct { +} + +type AdminUserInfoResp struct { + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Roles []string `json:"roles"` // 角色编码列表 +} + +type AdminUserListItem struct { + Id int64 `json:"id"` // 用户ID + Username string `json:"username"` // 用户名 + RealName string `json:"real_name"` // 真实姓名 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + CreateTime string `json:"create_time"` // 创建时间 + RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表 +} + type AgentActivateMembershipReq struct { Type string `json:"type,oneof=VIP SVIP"` // 会员类型:vip/svip } @@ -41,6 +733,27 @@ type AgentAuditStatusResp struct { AuditReason string `json:"audit_reason"` } +type AgentCommissionDeductionListItem struct { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + DeductedAgentId int64 `json:"deducted_agent_id"` // 被扣代理ID + Amount float64 `json:"amount"` // 金额 + ProductName string `json:"product_name"` // 产品名 + Type string `json:"type"` // 类型(cost/pricing) + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 +} + +type AgentCommissionListItem struct { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + OrderId int64 `json:"order_id"` // 订单ID + Amount float64 `json:"amount"` // 金额 + ProductName string `json:"product_name"` // 产品名 + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 +} + type AgentGeneratingLinkReq struct { Product string `json:"product"` Price string `json:"price"` @@ -61,6 +774,52 @@ type AgentInfoResp struct { IsRealName bool `json:"is_real_name"` } +type AgentLinkListItem struct { + AgentId int64 `json:"agent_id"` // 代理ID + ProductName string `json:"product_name"` // 产品名 + Price float64 `json:"price"` // 价格 + LinkIdentifier string `json:"link_identifier"` // 推广码 + CreateTime string `json:"create_time"` // 创建时间 +} + +type AgentListItem struct { + Id int64 `json:"id"` // 主键 + UserId int64 `json:"user_id"` // 用户ID + ParentAgentId int64 `json:"parent_agent_id"` // 上级代理ID + LevelName string `json:"level_name"` // 等级名称 + Region string `json:"region"` // 区域 + Mobile string `json:"mobile"` // 手机号 + MembershipExpiryTime string `json:"membership_expiry_time"` // 会员到期时间 + Balance float64 `json:"balance"` // 钱包余额 + TotalEarnings float64 `json:"total_earnings"` // 累计收益 + FrozenBalance float64 `json:"frozen_balance"` // 冻结余额 + WithdrawnAmount float64 `json:"withdrawn_amount"` // 提现总额 + CreateTime string `json:"create_time"` // 创建时间 + IsRealNameVerified bool `json:"is_real_name_verified"` // 是否已实名认证 + RealName string `json:"real_name"` // 实名姓名 + IdCard string `json:"id_card"` // 身份证号 + RealNameStatus string `json:"real_name_status"` // 实名状态(pending/approved/rejected) +} + +type AgentMembershipConfigListItem struct { + Id int64 `json:"id"` // 主键 + LevelName string `json:"level_name"` // 会员级别名称 + Price *float64 `json:"price"` // 会员年费 + ReportCommission *float64 `json:"report_commission"` // 直推报告收益 + LowerActivityReward *float64 `json:"lower_activity_reward"` // 下级活跃奖励金额 + NewActivityReward *float64 `json:"new_activity_reward"` // 新增活跃奖励金额 + LowerStandardCount *int64 `json:"lower_standard_count"` // 活跃下级达标个数 + NewLowerStandardCount *int64 `json:"new_lower_standard_count"` // 新增活跃下级达标个数 + LowerWithdrawRewardRatio *float64 `json:"lower_withdraw_reward_ratio"` // 下级提现奖励比例 + LowerConvertVipReward *float64 `json:"lower_convert_vip_reward"` // 下级转化VIP奖励 + LowerConvertSvipReward *float64 `json:"lower_convert_svip_reward"` // 下级转化SVIP奖励 + ExemptionAmount *float64 `json:"exemption_amount"` // 免责金额 + PriceIncreaseMax *float64 `json:"price_increase_max"` // 提价最高金额 + PriceRatio *float64 `json:"price_ratio"` // 提价区间收取比例 + PriceIncreaseAmount *float64 `json:"price_increase_amount"` // 在原本成本上加价的金额 + CreateTime string `json:"create_time"` // 创建时间 +} + type AgentMembershipProductConfigReq struct { ProductID int64 `form:"product_id"` } @@ -73,6 +832,19 @@ type AgentMembershipProductConfigResp struct { PriceRatio float64 `json:"price_ratio"` } +type AgentMembershipRechargeOrderListItem struct { + Id int64 `json:"id"` // 主键 + UserId int64 `json:"user_id"` // 用户ID + AgentId int64 `json:"agent_id"` // 代理ID + LevelName string `json:"level_name"` // 等级名称 + Amount float64 `json:"amount"` // 金额 + PaymentMethod string `json:"payment_method"` // 支付方式 + OrderNo string `json:"order_no"` // 订单号 + PlatformOrderId string `json:"platform_order_id"` // 平台订单号 + Status string `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 +} + type AgentMembershipUserConfig struct { ProductID int64 `json:"product_id"` PriceIncreaseAmount float64 `json:"price_increase_amount"` @@ -81,6 +853,15 @@ type AgentMembershipUserConfig struct { PriceRatio float64 `json:"price_ratio"` } +type AgentPlatformDeductionListItem struct { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + Amount float64 `json:"amount"` // 金额 + Type string `json:"type"` // 类型(cost/pricing) + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 +} + type AgentProductConfig struct { ProductID int64 `json:"product_id"` CostPrice float64 `json:"cost_price"` @@ -97,6 +878,17 @@ type AgentProductConfigResp struct { AgentProductConfig []AgentProductConfig } +type AgentProductionConfigItem struct { + Id int64 `json:"id"` // 主键 + ProductName string `json:"product_name"` // 产品名 + CostPrice float64 `json:"cost_price"` // 成本 + PriceRangeMin float64 `json:"price_range_min"` // 最低定价 + PriceRangeMax float64 `json:"price_range_max"` // 最高定价 + PricingStandard float64 `json:"pricing_standard"` // 定价标准 + OverpricingRatio float64 `json:"overpricing_ratio"` // 超价比例 + CreateTime string `json:"create_time"` // 创建时间 +} + type AgentRealNameReq struct { Name string `json:"name"` IDCard string `json:"id_card"` @@ -108,6 +900,15 @@ type AgentRealNameResp struct { Status string `json:"status"` } +type AgentRewardListItem struct { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + RelationAgentId int64 `json:"relation_agent_id"` // 关联代理ID + Amount float64 `json:"amount"` // 金额 + Type string `json:"type"` // 奖励类型 + CreateTime string `json:"create_time"` // 创建时间 +} + type AgentSubordinateContributionDetail struct { ID int64 `json:"id"` CreateTime string `json:"create_time"` @@ -144,6 +945,17 @@ type AgentSubordinateList struct { TotalContribution float64 `json:"total_contribution"` // 总贡献 } +type AgentWithdrawalListItem struct { + Id int64 `json:"id"` // 主键 + AgentId int64 `json:"agent_id"` // 代理ID + WithdrawNo string `json:"withdraw_no"` // 提现单号 + Amount float64 `json:"amount"` // 金额 + Status int64 `json:"status"` // 状态 + PayeeAccount string `json:"payee_account"` // 收款账户 + Remark string `json:"remark"` // 备注 + CreateTime string `json:"create_time"` // 创建时间 +} + type BindMobileReq struct { Mobile string `json:"mobile" validate:"required,mobile"` Code string `json:"code" validate:"required"` @@ -167,6 +979,68 @@ type ConfirmQueryStateResp struct { QueryState string `json:"query_state"` } +type CreateMenuReq struct { + Pid int64 `json:"pid,optional"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path,optional"` // 路由路径 + Component string `json:"component,optional"` // 组件路径 + Redirect string `json:"redirect,optional"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status,optional,default=1"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort,optional"` // 排序 +} + +type CreateMenuResp struct { + Id int64 `json:"id"` // 菜单ID +} + +type CreatePromotionLinkReq struct { + Name string `json:"name"` // 链接名称 +} + +type CreatePromotionLinkResp struct { + Id int64 `json:"id"` // 链接ID + Url string `json:"url"` // 生成的推广链接URL +} + +type CreateRoleReq struct { + RoleName string `json:"role_name"` // 角色名称 + RoleCode string `json:"role_code"` // 角色编码 + Description string `json:"description"` // 角色描述 + Status int64 `json:"status,default=1"` // 状态:0-禁用,1-启用 + Sort int64 `json:"sort,default=0"` // 排序 + MenuIds []int64 `json:"menu_ids"` // 关联的菜单ID列表 +} + +type CreateRoleResp struct { + Id int64 `json:"id"` // 角色ID +} + +type DeleteMenuReq struct { + Id int64 `path:"id"` // 菜单ID +} + +type DeleteMenuResp struct { + Success bool `json:"success"` // 是否成功 +} + +type DeletePromotionLinkReq struct { + Id int64 `path:"id"` // 链接ID +} + +type DeletePromotionLinkResp struct { + Success bool `json:"success"` // 是否成功 +} + +type DeleteRoleReq struct { + Id int64 `path:"id"` // 角色ID +} + +type DeleteRoleResp struct { + Success bool `json:"success"` // 是否成功 +} + type DirectPushReport struct { TotalCommission float64 `json:"total_commission"` TotalReport int `json:"total_report"` @@ -181,6 +1055,14 @@ type Feature struct { Name string `json:"name"` // 功能描述 } +type FeatureListItem struct { + Id int64 `json:"id"` // 功能ID + ApiId string `json:"api_id"` // API标识 + Name string `json:"name"` // 描述 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + type GetAgentRevenueInfoReq struct { } @@ -248,6 +1130,45 @@ type GetLinkDataResp struct { Product } +type GetMenuAllReq struct { +} + +type GetMenuAllResp struct { + Name string `json:"name"` + Path string `json:"path"` + Redirect string `json:"redirect,omitempty"` + Component string `json:"component,omitempty"` + Sort int64 `json:"sort"` + Meta map[string]interface{} `json:"meta"` + Children []GetMenuAllResp `json:"children"` +} + +type GetMenuDetailReq struct { + Id int64 `path:"id"` // 菜单ID +} + +type GetMenuDetailResp struct { + Id int64 `json:"id"` // 菜单ID + Pid int64 `json:"pid"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path"` // 路由路径 + Component string `json:"component"` // 组件路径 + Redirect string `json:"redirect"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"createTime"` // 创建时间 + UpdateTime string `json:"updateTime"` // 更新时间 +} + +type GetMenuListReq struct { + Name string `form:"name,optional"` // 菜单名称 + Path string `form:"path,optional"` // 路由路径 + Status int64 `form:"status,optional,default=-1"` // 状态:0-禁用,1-启用 + Type string `form:"type,optional"` // 类型 +} + type GetNotificationsResp struct { Notifications []Notification `json:"notifications"` // 通知列表 Total int64 `json:"total"` // 总记录数 @@ -261,6 +1182,51 @@ type GetProductByIDRequest struct { Id int64 `path:"id"` } +type GetPromotionLinkDetailReq struct { + Id int64 `path:"id"` // 链接ID +} + +type GetPromotionLinkDetailResp struct { + Name string `json:"name"` // 链接名称 + Url string `json:"url"` // 推广链接URL + ClickCount int64 `json:"click_count"` // 点击数 + PayCount int64 `json:"pay_count"` // 付费次数 + PayAmount string `json:"pay_amount"` // 付费金额 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + LastClickTime string `json:"last_click_time,optional"` // 最后点击时间 + LastPayTime string `json:"last_pay_time,optional"` // 最后付费时间 +} + +type GetPromotionLinkListReq struct { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Name string `form:"name,optional"` // 链接名称 + Url string `form:"url,optional"` // 推广链接URL +} + +type GetPromotionLinkListResp struct { + Total int64 `json:"total"` // 总数 + Items []PromotionLinkItem `json:"items"` // 列表 +} + +type GetPromotionStatsHistoryReq struct { + StartDate string `form:"start_date"` // 开始日期,格式:YYYY-MM-DD + EndDate string `form:"end_date"` // 结束日期,格式:YYYY-MM-DD +} + +type GetPromotionStatsTotalReq struct { +} + +type GetPromotionStatsTotalResp struct { + TodayPayAmount float64 `json:"today_pay_amount"` // 今日金额 + TodayClickCount int64 `json:"today_click_count"` // 今日点击数 + TodayPayCount int64 `json:"today_pay_count"` // 今日付费次数 + TotalPayAmount float64 `json:"total_pay_amount"` // 总金额 + TotalClickCount int64 `json:"total_click_count"` // 总点击数 + TotalPayCount int64 `json:"total_pay_count"` // 总付费次数 +} + type GetRewardsReq struct { Page int64 `form:"page"` // 页码 PageSize int64 `form:"page_size"` // 每页数据量 @@ -271,6 +1237,35 @@ type GetRewardsResp struct { List []Rewards `json:"list"` // 查询列表 } +type GetRoleDetailReq struct { + Id int64 `path:"id"` // 角色ID +} + +type GetRoleDetailResp struct { + Id int64 `json:"id"` // 角色ID + RoleName string `json:"role_name"` // 角色名称 + RoleCode string `json:"role_code"` // 角色编码 + Description string `json:"description"` // 角色描述 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 + MenuIds []int64 `json:"menu_ids"` // 关联的菜单ID列表 +} + +type GetRoleListReq struct { + Page int64 `form:"page,default=1"` // 页码 + PageSize int64 `form:"pageSize,default=20"` // 每页数量 + Name string `form:"name,optional"` // 角色名称 + Code string `form:"code,optional"` // 角色编码 + Status int64 `form:"status,optional,default=-1"` // 状态:0-禁用,1-启用 +} + +type GetRoleListResp struct { + Total int64 `json:"total"` // 总数 + Items []RoleListItem `json:"items"` // 列表 +} + type GetWithdrawalReq struct { Page int64 `form:"page"` // 页码 PageSize int64 `form:"page_size"` // 每页数据量 @@ -302,6 +1297,21 @@ type InitFaceVerifyResp struct { CertifyUrl string `json:"certify_url"` // 跳转认证页面URL } +type MenuListItem struct { + Id int64 `json:"id"` // 菜单ID + Pid int64 `json:"pid"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path"` // 路由路径 + Component string `json:"component"` // 组件路径 + Redirect string `json:"redirect"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"createTime"` // 创建时间 + Children []MenuListItem `json:"children"` // 子菜单 +} + type MobileCodeLoginReq struct { Mobile string `json:"mobile"` Code string `json:"code" validate:"required"` @@ -334,6 +1344,36 @@ type Notification struct { EndTime string `json:"endTime"` // 每天通知结束时间,格式 "HH:MM:SS" } +type NotificationListItem struct { + Id int64 `json:"id"` // 通知ID + Title string `json:"title"` // 通知标题 + NotificationPage string `json:"notification_page"` // 通知页面 + Content string `json:"content"` // 通知内容 + StartDate string `json:"start_date"` // 生效开始日期 + StartTime string `json:"start_time"` // 生效开始时间 + EndDate string `json:"end_date"` // 生效结束日期 + EndTime string `json:"end_time"` // 生效结束时间 + Status int64 `json:"status"` // 状态 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type OrderListItem struct { + Id int64 `json:"id"` // 订单ID + OrderNo string `json:"order_no"` // 商户订单号 + PlatformOrderId string `json:"platform_order_id"` // 支付订单号 + ProductName string `json:"product_name"` // 产品名称 + PaymentPlatform string `json:"payment_platform"` // 支付方式 + PaymentScene string `json:"payment_scene"` // 支付平台 + Amount float64 `json:"amount"` // 金额 + Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败 + QueryState string `json:"query_state"` // 查询状态:pending-待查询,success-查询成功,failed-查询失败 processing-查询中 + CreateTime string `json:"create_time"` // 创建时间 + PayTime string `json:"pay_time"` // 支付时间 + RefundTime string `json:"refund_time"` // 退款时间 + IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是 +} + type PaymentCheckReq struct { OrderNo string `json:"order_no" validate:"required"` } @@ -355,6 +1395,16 @@ type PaymentResp struct { OrderNo string `json:"order_no"` } +type PlatformUserListItem struct { + Id int64 `json:"id"` // 用户ID + Mobile string `json:"mobile"` // 手机号 + Nickname string `json:"nickname"` // 昵称 + Info string `json:"info"` // 备注信息 + Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + type Product struct { ProductName string `json:"product_name"` ProductEn string `json:"product_en"` @@ -371,10 +1421,50 @@ type ProductConfig struct { PriceRangeMax float64 `json:"price_range_max"` } +type ProductFeatureItem struct { + FeatureId int64 `json:"feature_id"` // 功能ID + Sort int64 `json:"sort"` // 排序 + Enable int64 `json:"enable"` // 是否启用 + IsImportant int64 `json:"is_important"` // 是否重要 +} + +type ProductListItem struct { + Id int64 `json:"id"` // 产品ID + ProductName string `json:"product_name"` // 服务名 + ProductEn string `json:"product_en"` // 英文名 + Description string `json:"description"` // 描述 + Notes string `json:"notes"` // 备注 + CostPrice float64 `json:"cost_price"` // 成本 + SellPrice float64 `json:"sell_price"` // 售价 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + type ProductResponse struct { Product } +type PromotionLinkItem struct { + Id int64 `json:"id"` // 链接ID + Name string `json:"name"` // 链接名称 + Url string `json:"url"` // 推广链接URL + ClickCount int64 `json:"click_count"` // 点击数 + PayCount int64 `json:"pay_count"` // 付费次数 + PayAmount string `json:"pay_amount"` // 付费金额 + CreateTime string `json:"create_time"` // 创建时间 + LastClickTime string `json:"last_click_time,optional"` // 最后点击时间 + LastPayTime string `json:"last_pay_time,optional"` // 最后付费时间 +} + +type PromotionStatsHistoryItem struct { + Id int64 `json:"id"` // 记录ID + LinkId int64 `json:"link_id"` // 链接ID + PayAmount float64 `json:"pay_amount"` // 金额 + ClickCount int64 `json:"click_count"` // 点击数 + PayCount int64 `json:"pay_count"` // 付费次数 + StatsDate string `json:"stats_date"` // 统计日期 +} + type Query struct { Id int64 `json:"id"` // 主键ID OrderId int64 `json:"order_id"` // 订单ID @@ -392,6 +1482,39 @@ type Query struct { IsRefunded bool `json:"is_refunded"` // 是否退款 } +type QueryCleanupConfigItem struct { + Id int64 `json:"id"` // 主键ID + ConfigKey string `json:"config_key"` // 配置键 + ConfigValue string `json:"config_value"` // 配置值 + ConfigDesc string `json:"config_desc"` // 配置描述 + Status int64 `json:"status"` // 状态:1-启用,0-禁用 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type QueryCleanupDetailItem struct { + Id int64 `json:"id"` // 主键ID + CleanupLogId int64 `json:"cleanup_log_id"` // 清理日志ID + QueryId int64 `json:"query_id"` // 查询ID + OrderId int64 `json:"order_id"` // 订单ID + UserId int64 `json:"user_id"` // 用户ID + ProductName string `json:"product_name"` // 产品名称 + QueryState string `json:"query_state"` // 查询状态 + CreateTimeOld string `json:"create_time_old"` // 原创建时间 + CreateTime string `json:"create_time"` // 创建时间 +} + +type QueryCleanupLogItem struct { + Id int64 `json:"id"` // 主键ID + CleanupTime string `json:"cleanup_time"` // 清理时间 + CleanupBefore string `json:"cleanup_before"` // 清理截止时间 + Status int64 `json:"status"` // 状态:1-成功,2-失败 + AffectedRows int64 `json:"affected_rows"` // 影响行数 + ErrorMsg string `json:"error_msg"` // 错误信息 + Remark string `json:"remark"` // 备注 + CreateTime string `json:"create_time"` // 创建时间 +} + type QueryDetailByOrderIdReq struct { OrderId int64 `path:"order_id"` } @@ -528,6 +1651,14 @@ type QuerySingleTestResp struct { Api string `json:"api"` } +type RecordLinkClickReq struct { + Path string `path:"path"` // 链接路径 +} + +type RecordLinkClickResp struct { + Success bool `json:"success"` // 是否成功 +} + type RegisterReq struct { Mobile string `json:"mobile" validate:"required,mobile"` Password string `json:"password" validate:"required,min=11,max=11,password"` @@ -553,6 +1684,17 @@ type Rewards struct { CreateTime string `json:"create_time"` } +type RoleListItem struct { + Id int64 `json:"id"` // 角色ID + RoleName string `json:"role_name"` // 角色名称 + RoleCode string `json:"role_code"` // 角色编码 + Description string `json:"description"` // 角色描述 + Status int64 `json:"status"` // 状态:0-禁用,1-启用 + Sort int64 `json:"sort"` // 排序 + CreateTime string `json:"create_time"` // 创建时间 + MenuIds []int64 `json:"menu_ids"` // 关联的菜单ID列表 +} + type SaveAgentMembershipUserConfigReq struct { ProductID int64 `json:"product_id"` PriceIncreaseAmount float64 `json:"price_increase_amount"` @@ -577,6 +1719,32 @@ type TimeRangeReport struct { Report int `json:"report"` // 报告量 } +type UpdateMenuReq struct { + Id int64 `path:"id"` // 菜单ID + Pid int64 `json:"pid,optional"` // 父菜单ID + Name string `json:"name"` // 路由名称 + Path string `json:"path,optional"` // 路由路径 + Component string `json:"component,optional"` // 组件路径 + Redirect string `json:"redirect,optional"` // 重定向路径 + Meta map[string]interface{} `json:"meta"` // 路由元数据 + Status int64 `json:"status,optional"` // 状态:0-禁用,1-启用 + Type string `json:"type"` // 类型 + Sort int64 `json:"sort,optional"` // 排序 +} + +type UpdateMenuResp struct { + Success bool `json:"success"` // 是否成功 +} + +type UpdatePromotionLinkReq struct { + Id int64 `path:"id"` // 链接ID + Name *string `json:"name,optional"` // 链接名称 +} + +type UpdatePromotionLinkResp struct { + Success bool `json:"success"` // 是否成功 +} + type UpdateQueryDataReq struct { Id int64 `json:"id"` // 查询ID QueryData string `json:"query_data"` // 查询数据(未加密的JSON) @@ -587,6 +1755,20 @@ type UpdateQueryDataResp struct { UpdatedAt string `json:"updated_at"` // 更新时间 } +type UpdateRoleReq struct { + Id int64 `path:"id"` // 角色ID + RoleName *string `json:"role_name,optional"` // 角色名称 + RoleCode *string `json:"role_code,optional"` // 角色编码 + Description *string `json:"description,optional"` // 角色描述 + Status *int64 `json:"status,optional"` // 状态:0-禁用,1-启用 + Sort *int64 `json:"sort,optional"` // 排序 + MenuIds []int64 `json:"menu_ids,optional"` // 关联的菜单ID列表 +} + +type UpdateRoleResp struct { + Success bool `json:"success"` // 是否成功 +} + type User struct { Id int64 `json:"id"` Mobile string `json:"mobile"` diff --git a/app/main/api/main.go b/app/main/api/main.go index efb4e8d..3bab516 100644 --- a/app/main/api/main.go +++ b/app/main/api/main.go @@ -5,10 +5,10 @@ import ( "flag" "fmt" "os" - "qnc-server/app/user/cmd/api/internal/config" - "qnc-server/app/user/cmd/api/internal/handler" - "qnc-server/app/user/cmd/api/internal/queue" - "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/main/api/internal/config" + "qnc-server/app/main/api/internal/handler" + "qnc-server/app/main/api/internal/queue" + "qnc-server/app/main/api/internal/svc" "github.com/zeromicro/go-zero/core/logx" @@ -26,7 +26,7 @@ func main() { // 根据 ENV 加载不同的配置文件 var defaultConfigFile string if env == "development" { - defaultConfigFile = "app/user/cmd/api/etc/main.dev.yaml" + defaultConfigFile = "app/main//api/etc/main.dev.yaml" } else { defaultConfigFile = "etc/main.yaml" } diff --git a/app/main/model/adminApiModel.go b/app/main/model/adminApiModel.go new file mode 100644 index 0000000..6ed3633 --- /dev/null +++ b/app/main/model/adminApiModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminApiModel = (*customAdminApiModel)(nil) + +type ( + // AdminApiModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminApiModel. + AdminApiModel interface { + adminApiModel + } + + customAdminApiModel struct { + *defaultAdminApiModel + } +) + +// NewAdminApiModel returns a model for the database table. +func NewAdminApiModel(conn sqlx.SqlConn, c cache.CacheConf) AdminApiModel { + return &customAdminApiModel{ + defaultAdminApiModel: newAdminApiModel(conn, c), + } +} diff --git a/app/main/model/adminApiModel_gen.go b/app/main/model/adminApiModel_gen.go new file mode 100644 index 0000000..4326faa --- /dev/null +++ b/app/main/model/adminApiModel_gen.go @@ -0,0 +1,411 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminApiFieldNames = builder.RawFieldNames(&AdminApi{}) + adminApiRows = strings.Join(adminApiFieldNames, ",") + adminApiRowsExpectAutoSet = strings.Join(stringx.Remove(adminApiFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminApiRowsWithPlaceHolder = strings.Join(stringx.Remove(adminApiFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminApiIdPrefix = "cache:qnc:adminApi:id:" + cacheQncAdminApiApiCodePrefix = "cache:qnc:adminApi:apiCode:" +) + +type ( + adminApiModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminApi) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminApi, error) + FindOneByApiCode(ctx context.Context, apiCode string) (*AdminApi, error) + Update(ctx context.Context, session sqlx.Session, data *AdminApi) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminApi) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminApi) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminApi, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminApi, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminApi, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminApi, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminApi, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminApiModel struct { + sqlc.CachedConn + table string + } + + AdminApi struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + ApiName string `db:"api_name"` // 接口名称 + ApiCode string `db:"api_code"` // 接口编码 + Method string `db:"method"` // 请求方法:GET、POST等 + Url string `db:"url"` // 接口URL + Status int64 `db:"status"` // 状态:0-禁用,1-启用 + Description string `db:"description"` // 接口描述 + } +) + +func newAdminApiModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminApiModel { + return &defaultAdminApiModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_api`", + } +} + +func (m *defaultAdminApiModel) Insert(ctx context.Context, session sqlx.Session, data *AdminApi) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheQncAdminApiApiCodePrefix, data.ApiCode) + qncAdminApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminApiIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminApiRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiName, data.ApiCode, data.Method, data.Url, data.Status, data.Description) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiName, data.ApiCode, data.Method, data.Url, data.Status, data.Description) + }, qncAdminApiApiCodeKey, qncAdminApiIdKey) +} + +func (m *defaultAdminApiModel) FindOne(ctx context.Context, id int64) (*AdminApi, error) { + qncAdminApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminApiIdPrefix, id) + var resp AdminApi + err := m.QueryRowCtx(ctx, &resp, qncAdminApiIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminApiRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminApiModel) FindOneByApiCode(ctx context.Context, apiCode string) (*AdminApi, error) { + qncAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheQncAdminApiApiCodePrefix, apiCode) + var resp AdminApi + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminApiApiCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `api_code` = ? and del_state = ? limit 1", adminApiRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, apiCode, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminApiModel) Update(ctx context.Context, session sqlx.Session, newData *AdminApi) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheQncAdminApiApiCodePrefix, data.ApiCode) + qncAdminApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminApiIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminApiRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id) + }, qncAdminApiApiCodeKey, qncAdminApiIdKey) +} + +func (m *defaultAdminApiModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminApi) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheQncAdminApiApiCodePrefix, data.ApiCode) + qncAdminApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminApiIdPrefix, data.Id) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminApiRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id, oldVersion) + }, qncAdminApiApiCodeKey, qncAdminApiIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminApiModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminApi) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminApiModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminApiModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminApiModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminApiModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminApi, error) { + + builder = builder.Columns(adminApiRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminApiModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminApi, error) { + + builder = builder.Columns(adminApiRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminApiModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminApi, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminApiRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminApiModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminApi, error) { + + builder = builder.Columns(adminApiRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminApiModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminApi, error) { + + builder = builder.Columns(adminApiRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminApiModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminApiModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminApiModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheQncAdminApiApiCodePrefix, data.ApiCode) + qncAdminApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminApiIdPrefix, id) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminApiApiCodeKey, qncAdminApiIdKey) + return err +} +func (m *defaultAdminApiModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminApiIdPrefix, primary) +} +func (m *defaultAdminApiModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminApiRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminApiModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminDictDataModel.go b/app/main/model/adminDictDataModel.go new file mode 100644 index 0000000..cbec9c9 --- /dev/null +++ b/app/main/model/adminDictDataModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminDictDataModel = (*customAdminDictDataModel)(nil) + +type ( + // AdminDictDataModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminDictDataModel. + AdminDictDataModel interface { + adminDictDataModel + } + + customAdminDictDataModel struct { + *defaultAdminDictDataModel + } +) + +// NewAdminDictDataModel returns a model for the database table. +func NewAdminDictDataModel(conn sqlx.SqlConn, c cache.CacheConf) AdminDictDataModel { + return &customAdminDictDataModel{ + defaultAdminDictDataModel: newAdminDictDataModel(conn, c), + } +} diff --git a/app/main/model/adminDictDataModel_gen.go b/app/main/model/adminDictDataModel_gen.go new file mode 100644 index 0000000..c0267f0 --- /dev/null +++ b/app/main/model/adminDictDataModel_gen.go @@ -0,0 +1,437 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminDictDataFieldNames = builder.RawFieldNames(&AdminDictData{}) + adminDictDataRows = strings.Join(adminDictDataFieldNames, ",") + adminDictDataRowsExpectAutoSet = strings.Join(stringx.Remove(adminDictDataFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminDictDataRowsWithPlaceHolder = strings.Join(stringx.Remove(adminDictDataFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminDictDataIdPrefix = "cache:qnc:adminDictData:id:" + cacheQncAdminDictDataDictTypeDictLabelPrefix = "cache:qnc:adminDictData:dictType:dictLabel:" + cacheQncAdminDictDataDictTypeDictValuePrefix = "cache:qnc:adminDictData:dictType:dictValue:" +) + +type ( + adminDictDataModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminDictData) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminDictData, error) + FindOneByDictTypeDictLabel(ctx context.Context, dictType string, dictLabel string) (*AdminDictData, error) + FindOneByDictTypeDictValue(ctx context.Context, dictType string, dictValue int64) (*AdminDictData, error) + Update(ctx context.Context, session sqlx.Session, data *AdminDictData) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminDictData) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminDictData) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminDictData, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictData, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictData, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminDictData, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminDictData, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminDictDataModel struct { + sqlc.CachedConn + table string + } + + AdminDictData struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + DictType string `db:"dict_type"` // 字典类型编码 + DictLabel string `db:"dict_label"` // 字典标签 + DictValue int64 `db:"dict_value"` // 字典键值 + DictSort int64 `db:"dict_sort"` // 字典排序 + Status int64 `db:"status"` // 状态:0-禁用,1-启用 + Remark sql.NullString `db:"remark"` // 备注 + } +) + +func newAdminDictDataModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminDictDataModel { + return &defaultAdminDictDataModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_dict_data`", + } +} + +func (m *defaultAdminDictDataModel) Insert(ctx context.Context, session sqlx.Session, data *AdminDictData) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel) + qncAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue) + qncAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictDataIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminDictDataRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictLabel, data.DictValue, data.DictSort, data.Status, data.Remark) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictLabel, data.DictValue, data.DictSort, data.Status, data.Remark) + }, qncAdminDictDataDictTypeDictLabelKey, qncAdminDictDataDictTypeDictValueKey, qncAdminDictDataIdKey) +} + +func (m *defaultAdminDictDataModel) FindOne(ctx context.Context, id int64) (*AdminDictData, error) { + qncAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictDataIdPrefix, id) + var resp AdminDictData + err := m.QueryRowCtx(ctx, &resp, qncAdminDictDataIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictDataRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminDictDataModel) FindOneByDictTypeDictLabel(ctx context.Context, dictType string, dictLabel string) (*AdminDictData, error) { + qncAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictLabelPrefix, dictType, dictLabel) + var resp AdminDictData + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminDictDataDictTypeDictLabelKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `dict_type` = ? and `dict_label` = ? and del_state = ? limit 1", adminDictDataRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, dictType, dictLabel, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminDictDataModel) FindOneByDictTypeDictValue(ctx context.Context, dictType string, dictValue int64) (*AdminDictData, error) { + qncAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictValuePrefix, dictType, dictValue) + var resp AdminDictData + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminDictDataDictTypeDictValueKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `dict_type` = ? and `dict_value` = ? and del_state = ? limit 1", adminDictDataRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, dictType, dictValue, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminDictDataModel) Update(ctx context.Context, session sqlx.Session, newData *AdminDictData) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel) + qncAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue) + qncAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictDataIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminDictDataRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id) + }, qncAdminDictDataDictTypeDictLabelKey, qncAdminDictDataDictTypeDictValueKey, qncAdminDictDataIdKey) +} + +func (m *defaultAdminDictDataModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminDictData) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel) + qncAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue) + qncAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictDataIdPrefix, data.Id) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminDictDataRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id, oldVersion) + }, qncAdminDictDataDictTypeDictLabelKey, qncAdminDictDataDictTypeDictValueKey, qncAdminDictDataIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminDictDataModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminDictData) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminDictDataModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminDictDataModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminDictDataModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminDictDataModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminDictData, error) { + + builder = builder.Columns(adminDictDataRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictData + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictDataModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictData, error) { + + builder = builder.Columns(adminDictDataRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictData + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictDataModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictData, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminDictDataRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminDictData + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminDictDataModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminDictData, error) { + + builder = builder.Columns(adminDictDataRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictData + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictDataModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminDictData, error) { + + builder = builder.Columns(adminDictDataRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictData + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictDataModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminDictDataModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminDictDataModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel) + qncAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheQncAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue) + qncAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictDataIdPrefix, id) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminDictDataDictTypeDictLabelKey, qncAdminDictDataDictTypeDictValueKey, qncAdminDictDataIdKey) + return err +} +func (m *defaultAdminDictDataModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminDictDataIdPrefix, primary) +} +func (m *defaultAdminDictDataModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictDataRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminDictDataModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminDictTypeModel.go b/app/main/model/adminDictTypeModel.go new file mode 100644 index 0000000..1153feb --- /dev/null +++ b/app/main/model/adminDictTypeModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminDictTypeModel = (*customAdminDictTypeModel)(nil) + +type ( + // AdminDictTypeModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminDictTypeModel. + AdminDictTypeModel interface { + adminDictTypeModel + } + + customAdminDictTypeModel struct { + *defaultAdminDictTypeModel + } +) + +// NewAdminDictTypeModel returns a model for the database table. +func NewAdminDictTypeModel(conn sqlx.SqlConn, c cache.CacheConf) AdminDictTypeModel { + return &customAdminDictTypeModel{ + defaultAdminDictTypeModel: newAdminDictTypeModel(conn, c), + } +} diff --git a/app/main/model/adminDictTypeModel_gen.go b/app/main/model/adminDictTypeModel_gen.go new file mode 100644 index 0000000..b082250 --- /dev/null +++ b/app/main/model/adminDictTypeModel_gen.go @@ -0,0 +1,409 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminDictTypeFieldNames = builder.RawFieldNames(&AdminDictType{}) + adminDictTypeRows = strings.Join(adminDictTypeFieldNames, ",") + adminDictTypeRowsExpectAutoSet = strings.Join(stringx.Remove(adminDictTypeFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminDictTypeRowsWithPlaceHolder = strings.Join(stringx.Remove(adminDictTypeFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminDictTypeIdPrefix = "cache:qnc:adminDictType:id:" + cacheQncAdminDictTypeDictTypePrefix = "cache:qnc:adminDictType:dictType:" +) + +type ( + adminDictTypeModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminDictType) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminDictType, error) + FindOneByDictType(ctx context.Context, dictType string) (*AdminDictType, error) + Update(ctx context.Context, session sqlx.Session, data *AdminDictType) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminDictType) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminDictType) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminDictType, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictType, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictType, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminDictType, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminDictType, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminDictTypeModel struct { + sqlc.CachedConn + table string + } + + AdminDictType struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + DictType string `db:"dict_type"` // 字典类型编码 + DictName string `db:"dict_name"` // 字典类型名称 + Status int64 `db:"status"` // 状态:0-禁用,1-启用 + Remark sql.NullString `db:"remark"` // 备注 + } +) + +func newAdminDictTypeModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminDictTypeModel { + return &defaultAdminDictTypeModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_dict_type`", + } +} + +func (m *defaultAdminDictTypeModel) Insert(ctx context.Context, session sqlx.Session, data *AdminDictType) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeDictTypePrefix, data.DictType) + qncAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, adminDictTypeRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictName, data.Status, data.Remark) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictName, data.Status, data.Remark) + }, qncAdminDictTypeDictTypeKey, qncAdminDictTypeIdKey) +} + +func (m *defaultAdminDictTypeModel) FindOne(ctx context.Context, id int64) (*AdminDictType, error) { + qncAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeIdPrefix, id) + var resp AdminDictType + err := m.QueryRowCtx(ctx, &resp, qncAdminDictTypeIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictTypeRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminDictTypeModel) FindOneByDictType(ctx context.Context, dictType string) (*AdminDictType, error) { + qncAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeDictTypePrefix, dictType) + var resp AdminDictType + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminDictTypeDictTypeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `dict_type` = ? and del_state = ? limit 1", adminDictTypeRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, dictType, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminDictTypeModel) Update(ctx context.Context, session sqlx.Session, newData *AdminDictType) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeDictTypePrefix, data.DictType) + qncAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminDictTypeRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id) + }, qncAdminDictTypeDictTypeKey, qncAdminDictTypeIdKey) +} + +func (m *defaultAdminDictTypeModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminDictType) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeDictTypePrefix, data.DictType) + qncAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeIdPrefix, data.Id) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminDictTypeRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id, oldVersion) + }, qncAdminDictTypeDictTypeKey, qncAdminDictTypeIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminDictTypeModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminDictType) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminDictTypeModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminDictTypeModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminDictTypeModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminDictTypeModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminDictType, error) { + + builder = builder.Columns(adminDictTypeRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictType + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictTypeModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictType, error) { + + builder = builder.Columns(adminDictTypeRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictType + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictTypeModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictType, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminDictTypeRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminDictType + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminDictTypeModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminDictType, error) { + + builder = builder.Columns(adminDictTypeRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictType + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictTypeModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminDictType, error) { + + builder = builder.Columns(adminDictTypeRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminDictType + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminDictTypeModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminDictTypeModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminDictTypeModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeDictTypePrefix, data.DictType) + qncAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheQncAdminDictTypeIdPrefix, id) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminDictTypeDictTypeKey, qncAdminDictTypeIdKey) + return err +} +func (m *defaultAdminDictTypeModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminDictTypeIdPrefix, primary) +} +func (m *defaultAdminDictTypeModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictTypeRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminDictTypeModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminMenuModel.go b/app/main/model/adminMenuModel.go new file mode 100644 index 0000000..c2dc171 --- /dev/null +++ b/app/main/model/adminMenuModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminMenuModel = (*customAdminMenuModel)(nil) + +type ( + // AdminMenuModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminMenuModel. + AdminMenuModel interface { + adminMenuModel + } + + customAdminMenuModel struct { + *defaultAdminMenuModel + } +) + +// NewAdminMenuModel returns a model for the database table. +func NewAdminMenuModel(conn sqlx.SqlConn, c cache.CacheConf) AdminMenuModel { + return &customAdminMenuModel{ + defaultAdminMenuModel: newAdminMenuModel(conn, c), + } +} diff --git a/app/main/model/adminMenuModel_gen.go b/app/main/model/adminMenuModel_gen.go new file mode 100644 index 0000000..66c9c0e --- /dev/null +++ b/app/main/model/adminMenuModel_gen.go @@ -0,0 +1,414 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminMenuFieldNames = builder.RawFieldNames(&AdminMenu{}) + adminMenuRows = strings.Join(adminMenuFieldNames, ",") + adminMenuRowsExpectAutoSet = strings.Join(stringx.Remove(adminMenuFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminMenuRowsWithPlaceHolder = strings.Join(stringx.Remove(adminMenuFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminMenuIdPrefix = "cache:qnc:adminMenu:id:" + cacheQncAdminMenuNamePathPrefix = "cache:qnc:adminMenu:name:path:" +) + +type ( + adminMenuModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminMenu) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminMenu, error) + FindOneByNamePath(ctx context.Context, name string, path string) (*AdminMenu, error) + Update(ctx context.Context, session sqlx.Session, data *AdminMenu) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminMenu) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminMenu) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminMenu, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminMenu, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminMenu, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminMenu, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminMenu, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminMenuModel struct { + sqlc.CachedConn + table string + } + + AdminMenu struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + Pid int64 `db:"pid"` // 父菜单ID + Name string `db:"name"` // 路由名称 + Path string `db:"path"` // 路由路径 + Component string `db:"component"` // 组件路径 + Redirect sql.NullString `db:"redirect"` // 重定向路径 + Meta string `db:"meta"` // 路由元数据配置 + Status int64 `db:"status"` // 状态: 0-禁用, 1-启用 + Type int64 `db:"type"` + Sort int64 `db:"sort"` // 排序号 + } +) + +func newAdminMenuModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminMenuModel { + return &defaultAdminMenuModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_menu`", + } +} + +func (m *defaultAdminMenuModel) Insert(ctx context.Context, session sqlx.Session, data *AdminMenu) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminMenuIdPrefix, data.Id) + qncAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheQncAdminMenuNamePathPrefix, data.Name, data.Path) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminMenuRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Pid, data.Name, data.Path, data.Component, data.Redirect, data.Meta, data.Status, data.Type, data.Sort) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Pid, data.Name, data.Path, data.Component, data.Redirect, data.Meta, data.Status, data.Type, data.Sort) + }, qncAdminMenuIdKey, qncAdminMenuNamePathKey) +} + +func (m *defaultAdminMenuModel) FindOne(ctx context.Context, id int64) (*AdminMenu, error) { + qncAdminMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminMenuIdPrefix, id) + var resp AdminMenu + err := m.QueryRowCtx(ctx, &resp, qncAdminMenuIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminMenuRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminMenuModel) FindOneByNamePath(ctx context.Context, name string, path string) (*AdminMenu, error) { + qncAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheQncAdminMenuNamePathPrefix, name, path) + var resp AdminMenu + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminMenuNamePathKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `name` = ? and `path` = ? and del_state = ? limit 1", adminMenuRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, name, path, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminMenuModel) Update(ctx context.Context, session sqlx.Session, newData *AdminMenu) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminMenuIdPrefix, data.Id) + qncAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheQncAdminMenuNamePathPrefix, data.Name, data.Path) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminMenuRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id) + }, qncAdminMenuIdKey, qncAdminMenuNamePathKey) +} + +func (m *defaultAdminMenuModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminMenu) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminMenuIdPrefix, data.Id) + qncAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheQncAdminMenuNamePathPrefix, data.Name, data.Path) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminMenuRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id, oldVersion) + }, qncAdminMenuIdKey, qncAdminMenuNamePathKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminMenuModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminMenu) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminMenuModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminMenuModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminMenuModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminMenuModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminMenu, error) { + + builder = builder.Columns(adminMenuRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminMenuModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminMenu, error) { + + builder = builder.Columns(adminMenuRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminMenuModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminMenu, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminMenuRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminMenuModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminMenu, error) { + + builder = builder.Columns(adminMenuRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminMenuModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminMenu, error) { + + builder = builder.Columns(adminMenuRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminMenuModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminMenuModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminMenuModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminMenuIdPrefix, id) + qncAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheQncAdminMenuNamePathPrefix, data.Name, data.Path) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminMenuIdKey, qncAdminMenuNamePathKey) + return err +} +func (m *defaultAdminMenuModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminMenuIdPrefix, primary) +} +func (m *defaultAdminMenuModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminMenuRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminMenuModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminPromotionLinkModel.go b/app/main/model/adminPromotionLinkModel.go new file mode 100644 index 0000000..d82c42e --- /dev/null +++ b/app/main/model/adminPromotionLinkModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminPromotionLinkModel = (*customAdminPromotionLinkModel)(nil) + +type ( + // AdminPromotionLinkModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminPromotionLinkModel. + AdminPromotionLinkModel interface { + adminPromotionLinkModel + } + + customAdminPromotionLinkModel struct { + *defaultAdminPromotionLinkModel + } +) + +// NewAdminPromotionLinkModel returns a model for the database table. +func NewAdminPromotionLinkModel(conn sqlx.SqlConn, c cache.CacheConf) AdminPromotionLinkModel { + return &customAdminPromotionLinkModel{ + defaultAdminPromotionLinkModel: newAdminPromotionLinkModel(conn, c), + } +} diff --git a/app/main/model/adminPromotionLinkModel_gen.go b/app/main/model/adminPromotionLinkModel_gen.go new file mode 100644 index 0000000..0da7850 --- /dev/null +++ b/app/main/model/adminPromotionLinkModel_gen.go @@ -0,0 +1,408 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminPromotionLinkFieldNames = builder.RawFieldNames(&AdminPromotionLink{}) + adminPromotionLinkRows = strings.Join(adminPromotionLinkFieldNames, ",") + adminPromotionLinkRowsExpectAutoSet = strings.Join(stringx.Remove(adminPromotionLinkFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminPromotionLinkRowsWithPlaceHolder = strings.Join(stringx.Remove(adminPromotionLinkFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminPromotionLinkIdPrefix = "cache:qnc:adminPromotionLink:id:" + cacheQncAdminPromotionLinkUrlPrefix = "cache:qnc:adminPromotionLink:url:" +) + +type ( + adminPromotionLinkModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionLink) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminPromotionLink, error) + FindOneByUrl(ctx context.Context, url string) (*AdminPromotionLink, error) + Update(ctx context.Context, session sqlx.Session, data *AdminPromotionLink) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminPromotionLink) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionLink) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionLink, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLink, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLink, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionLink, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionLink, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminPromotionLinkModel struct { + sqlc.CachedConn + table string + } + + AdminPromotionLink struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + Url string `db:"url"` // 推广链接URL + Name string `db:"name"` // 推广链接名称 + AdminUserId int64 `db:"admin_user_id"` // 推广者账号ID + } +) + +func newAdminPromotionLinkModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminPromotionLinkModel { + return &defaultAdminPromotionLinkModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_promotion_link`", + } +} + +func (m *defaultAdminPromotionLinkModel) Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionLink) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminPromotionLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkIdPrefix, data.Id) + qncAdminPromotionLinkUrlKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkUrlPrefix, data.Url) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, adminPromotionLinkRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Url, data.Name, data.AdminUserId) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Url, data.Name, data.AdminUserId) + }, qncAdminPromotionLinkIdKey, qncAdminPromotionLinkUrlKey) +} + +func (m *defaultAdminPromotionLinkModel) FindOne(ctx context.Context, id int64) (*AdminPromotionLink, error) { + qncAdminPromotionLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkIdPrefix, id) + var resp AdminPromotionLink + err := m.QueryRowCtx(ctx, &resp, qncAdminPromotionLinkIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionLinkRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkModel) FindOneByUrl(ctx context.Context, url string) (*AdminPromotionLink, error) { + qncAdminPromotionLinkUrlKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkUrlPrefix, url) + var resp AdminPromotionLink + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminPromotionLinkUrlKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `url` = ? and del_state = ? limit 1", adminPromotionLinkRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, url, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkModel) Update(ctx context.Context, session sqlx.Session, newData *AdminPromotionLink) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminPromotionLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkIdPrefix, data.Id) + qncAdminPromotionLinkUrlKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkUrlPrefix, data.Url) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminPromotionLinkRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Url, newData.Name, newData.AdminUserId, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Url, newData.Name, newData.AdminUserId, newData.Id) + }, qncAdminPromotionLinkIdKey, qncAdminPromotionLinkUrlKey) +} + +func (m *defaultAdminPromotionLinkModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminPromotionLink) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminPromotionLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkIdPrefix, data.Id) + qncAdminPromotionLinkUrlKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkUrlPrefix, data.Url) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminPromotionLinkRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Url, newData.Name, newData.AdminUserId, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Url, newData.Name, newData.AdminUserId, newData.Id, oldVersion) + }, qncAdminPromotionLinkIdKey, qncAdminPromotionLinkUrlKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminPromotionLinkModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionLink) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminPromotionLinkModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminPromotionLinkModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionLinkModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionLinkModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionLink, error) { + + builder = builder.Columns(adminPromotionLinkRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLink + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLink, error) { + + builder = builder.Columns(adminPromotionLinkRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLink + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLink, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminPromotionLinkRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminPromotionLink + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminPromotionLinkModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionLink, error) { + + builder = builder.Columns(adminPromotionLinkRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLink + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionLink, error) { + + builder = builder.Columns(adminPromotionLinkRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLink + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminPromotionLinkModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminPromotionLinkModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminPromotionLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkIdPrefix, id) + qncAdminPromotionLinkUrlKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkUrlPrefix, data.Url) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminPromotionLinkIdKey, qncAdminPromotionLinkUrlKey) + return err +} +func (m *defaultAdminPromotionLinkModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkIdPrefix, primary) +} +func (m *defaultAdminPromotionLinkModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionLinkRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminPromotionLinkModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminPromotionLinkStatsHistoryModel.go b/app/main/model/adminPromotionLinkStatsHistoryModel.go new file mode 100644 index 0000000..685db69 --- /dev/null +++ b/app/main/model/adminPromotionLinkStatsHistoryModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminPromotionLinkStatsHistoryModel = (*customAdminPromotionLinkStatsHistoryModel)(nil) + +type ( + // AdminPromotionLinkStatsHistoryModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminPromotionLinkStatsHistoryModel. + AdminPromotionLinkStatsHistoryModel interface { + adminPromotionLinkStatsHistoryModel + } + + customAdminPromotionLinkStatsHistoryModel struct { + *defaultAdminPromotionLinkStatsHistoryModel + } +) + +// NewAdminPromotionLinkStatsHistoryModel returns a model for the database table. +func NewAdminPromotionLinkStatsHistoryModel(conn sqlx.SqlConn, c cache.CacheConf) AdminPromotionLinkStatsHistoryModel { + return &customAdminPromotionLinkStatsHistoryModel{ + defaultAdminPromotionLinkStatsHistoryModel: newAdminPromotionLinkStatsHistoryModel(conn, c), + } +} diff --git a/app/main/model/adminPromotionLinkStatsHistoryModel_gen.go b/app/main/model/adminPromotionLinkStatsHistoryModel_gen.go new file mode 100644 index 0000000..4462b3a --- /dev/null +++ b/app/main/model/adminPromotionLinkStatsHistoryModel_gen.go @@ -0,0 +1,412 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminPromotionLinkStatsHistoryFieldNames = builder.RawFieldNames(&AdminPromotionLinkStatsHistory{}) + adminPromotionLinkStatsHistoryRows = strings.Join(adminPromotionLinkStatsHistoryFieldNames, ",") + adminPromotionLinkStatsHistoryRowsExpectAutoSet = strings.Join(stringx.Remove(adminPromotionLinkStatsHistoryFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminPromotionLinkStatsHistoryRowsWithPlaceHolder = strings.Join(stringx.Remove(adminPromotionLinkStatsHistoryFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminPromotionLinkStatsHistoryIdPrefix = "cache:qnc:adminPromotionLinkStatsHistory:id:" + cacheQncAdminPromotionLinkStatsHistoryLinkIdStatsDatePrefix = "cache:qnc:adminPromotionLinkStatsHistory:linkId:statsDate:" +) + +type ( + adminPromotionLinkStatsHistoryModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsHistory) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminPromotionLinkStatsHistory, error) + FindOneByLinkIdStatsDate(ctx context.Context, linkId int64, statsDate time.Time) (*AdminPromotionLinkStatsHistory, error) + Update(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsHistory) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsHistory) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsHistory) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionLinkStatsHistory, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsHistory, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsHistory, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionLinkStatsHistory, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionLinkStatsHistory, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminPromotionLinkStatsHistoryModel struct { + sqlc.CachedConn + table string + } + + AdminPromotionLinkStatsHistory struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + LinkId int64 `db:"link_id"` // 推广链接ID + StatsDate time.Time `db:"stats_date"` // 统计日期 + ClickCount int64 `db:"click_count"` // 点击数 + PayCount int64 `db:"pay_count"` // 付费次数 + PayAmount float64 `db:"pay_amount"` // 付费金额 + LastClickTime sql.NullTime `db:"last_click_time"` // 最后点击时间 + LastPayTime sql.NullTime `db:"last_pay_time"` // 最后付费时间 + } +) + +func newAdminPromotionLinkStatsHistoryModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminPromotionLinkStatsHistoryModel { + return &defaultAdminPromotionLinkStatsHistoryModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_promotion_link_stats_history`", + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsHistory) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminPromotionLinkStatsHistoryIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsHistoryIdPrefix, data.Id) + qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey := fmt.Sprintf("%s%v:%v", cacheQncAdminPromotionLinkStatsHistoryLinkIdStatsDatePrefix, data.LinkId, data.StatsDate) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminPromotionLinkStatsHistoryRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.LinkId, data.StatsDate, data.ClickCount, data.PayCount, data.PayAmount, data.LastClickTime, data.LastPayTime) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.LinkId, data.StatsDate, data.ClickCount, data.PayCount, data.PayAmount, data.LastClickTime, data.LastPayTime) + }, qncAdminPromotionLinkStatsHistoryIdKey, qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey) +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindOne(ctx context.Context, id int64) (*AdminPromotionLinkStatsHistory, error) { + qncAdminPromotionLinkStatsHistoryIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsHistoryIdPrefix, id) + var resp AdminPromotionLinkStatsHistory + err := m.QueryRowCtx(ctx, &resp, qncAdminPromotionLinkStatsHistoryIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionLinkStatsHistoryRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindOneByLinkIdStatsDate(ctx context.Context, linkId int64, statsDate time.Time) (*AdminPromotionLinkStatsHistory, error) { + qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey := fmt.Sprintf("%s%v:%v", cacheQncAdminPromotionLinkStatsHistoryLinkIdStatsDatePrefix, linkId, statsDate) + var resp AdminPromotionLinkStatsHistory + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `link_id` = ? and `stats_date` = ? and del_state = ? limit 1", adminPromotionLinkStatsHistoryRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, linkId, statsDate, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) Update(ctx context.Context, session sqlx.Session, newData *AdminPromotionLinkStatsHistory) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminPromotionLinkStatsHistoryIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsHistoryIdPrefix, data.Id) + qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey := fmt.Sprintf("%s%v:%v", cacheQncAdminPromotionLinkStatsHistoryLinkIdStatsDatePrefix, data.LinkId, data.StatsDate) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminPromotionLinkStatsHistoryRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.StatsDate, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.StatsDate, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id) + }, qncAdminPromotionLinkStatsHistoryIdKey, qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey) +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminPromotionLinkStatsHistory) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminPromotionLinkStatsHistoryIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsHistoryIdPrefix, data.Id) + qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey := fmt.Sprintf("%s%v:%v", cacheQncAdminPromotionLinkStatsHistoryLinkIdStatsDatePrefix, data.LinkId, data.StatsDate) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminPromotionLinkStatsHistoryRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.StatsDate, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.StatsDate, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id, oldVersion) + }, qncAdminPromotionLinkStatsHistoryIdKey, qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsHistory) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminPromotionLinkStatsHistoryModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionLinkStatsHistory, error) { + + builder = builder.Columns(adminPromotionLinkStatsHistoryRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsHistory + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsHistory, error) { + + builder = builder.Columns(adminPromotionLinkStatsHistoryRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsHistory + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsHistory, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminPromotionLinkStatsHistoryRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminPromotionLinkStatsHistory + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionLinkStatsHistory, error) { + + builder = builder.Columns(adminPromotionLinkStatsHistoryRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsHistory + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionLinkStatsHistory, error) { + + builder = builder.Columns(adminPromotionLinkStatsHistoryRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsHistory + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminPromotionLinkStatsHistoryModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminPromotionLinkStatsHistoryIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsHistoryIdPrefix, id) + qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey := fmt.Sprintf("%s%v:%v", cacheQncAdminPromotionLinkStatsHistoryLinkIdStatsDatePrefix, data.LinkId, data.StatsDate) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminPromotionLinkStatsHistoryIdKey, qncAdminPromotionLinkStatsHistoryLinkIdStatsDateKey) + return err +} +func (m *defaultAdminPromotionLinkStatsHistoryModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsHistoryIdPrefix, primary) +} +func (m *defaultAdminPromotionLinkStatsHistoryModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionLinkStatsHistoryRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminPromotionLinkStatsHistoryModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminPromotionLinkStatsTotalModel.go b/app/main/model/adminPromotionLinkStatsTotalModel.go new file mode 100644 index 0000000..e5dfacc --- /dev/null +++ b/app/main/model/adminPromotionLinkStatsTotalModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminPromotionLinkStatsTotalModel = (*customAdminPromotionLinkStatsTotalModel)(nil) + +type ( + // AdminPromotionLinkStatsTotalModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminPromotionLinkStatsTotalModel. + AdminPromotionLinkStatsTotalModel interface { + adminPromotionLinkStatsTotalModel + } + + customAdminPromotionLinkStatsTotalModel struct { + *defaultAdminPromotionLinkStatsTotalModel + } +) + +// NewAdminPromotionLinkStatsTotalModel returns a model for the database table. +func NewAdminPromotionLinkStatsTotalModel(conn sqlx.SqlConn, c cache.CacheConf) AdminPromotionLinkStatsTotalModel { + return &customAdminPromotionLinkStatsTotalModel{ + defaultAdminPromotionLinkStatsTotalModel: newAdminPromotionLinkStatsTotalModel(conn, c), + } +} diff --git a/app/main/model/adminPromotionLinkStatsTotalModel_gen.go b/app/main/model/adminPromotionLinkStatsTotalModel_gen.go new file mode 100644 index 0000000..2f6a51f --- /dev/null +++ b/app/main/model/adminPromotionLinkStatsTotalModel_gen.go @@ -0,0 +1,411 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminPromotionLinkStatsTotalFieldNames = builder.RawFieldNames(&AdminPromotionLinkStatsTotal{}) + adminPromotionLinkStatsTotalRows = strings.Join(adminPromotionLinkStatsTotalFieldNames, ",") + adminPromotionLinkStatsTotalRowsExpectAutoSet = strings.Join(stringx.Remove(adminPromotionLinkStatsTotalFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminPromotionLinkStatsTotalRowsWithPlaceHolder = strings.Join(stringx.Remove(adminPromotionLinkStatsTotalFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminPromotionLinkStatsTotalIdPrefix = "cache:qnc:adminPromotionLinkStatsTotal:id:" + cacheQncAdminPromotionLinkStatsTotalLinkIdPrefix = "cache:qnc:adminPromotionLinkStatsTotal:linkId:" +) + +type ( + adminPromotionLinkStatsTotalModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsTotal) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminPromotionLinkStatsTotal, error) + FindOneByLinkId(ctx context.Context, linkId int64) (*AdminPromotionLinkStatsTotal, error) + Update(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsTotal) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsTotal) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsTotal) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionLinkStatsTotal, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsTotal, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsTotal, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionLinkStatsTotal, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionLinkStatsTotal, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminPromotionLinkStatsTotalModel struct { + sqlc.CachedConn + table string + } + + AdminPromotionLinkStatsTotal struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + LinkId int64 `db:"link_id"` // 推广链接ID + ClickCount int64 `db:"click_count"` // 总点击数 + PayCount int64 `db:"pay_count"` // 总付费次数 + PayAmount float64 `db:"pay_amount"` // 总付费金额 + LastClickTime sql.NullTime `db:"last_click_time"` // 最后点击时间 + LastPayTime sql.NullTime `db:"last_pay_time"` // 最后付费时间 + } +) + +func newAdminPromotionLinkStatsTotalModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminPromotionLinkStatsTotalModel { + return &defaultAdminPromotionLinkStatsTotalModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_promotion_link_stats_total`", + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsTotal) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminPromotionLinkStatsTotalIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalIdPrefix, data.Id) + qncAdminPromotionLinkStatsTotalLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalLinkIdPrefix, data.LinkId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminPromotionLinkStatsTotalRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.LinkId, data.ClickCount, data.PayCount, data.PayAmount, data.LastClickTime, data.LastPayTime) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.LinkId, data.ClickCount, data.PayCount, data.PayAmount, data.LastClickTime, data.LastPayTime) + }, qncAdminPromotionLinkStatsTotalIdKey, qncAdminPromotionLinkStatsTotalLinkIdKey) +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindOne(ctx context.Context, id int64) (*AdminPromotionLinkStatsTotal, error) { + qncAdminPromotionLinkStatsTotalIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalIdPrefix, id) + var resp AdminPromotionLinkStatsTotal + err := m.QueryRowCtx(ctx, &resp, qncAdminPromotionLinkStatsTotalIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionLinkStatsTotalRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindOneByLinkId(ctx context.Context, linkId int64) (*AdminPromotionLinkStatsTotal, error) { + qncAdminPromotionLinkStatsTotalLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalLinkIdPrefix, linkId) + var resp AdminPromotionLinkStatsTotal + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminPromotionLinkStatsTotalLinkIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `link_id` = ? and del_state = ? limit 1", adminPromotionLinkStatsTotalRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, linkId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) Update(ctx context.Context, session sqlx.Session, newData *AdminPromotionLinkStatsTotal) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminPromotionLinkStatsTotalIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalIdPrefix, data.Id) + qncAdminPromotionLinkStatsTotalLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalLinkIdPrefix, data.LinkId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminPromotionLinkStatsTotalRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id) + }, qncAdminPromotionLinkStatsTotalIdKey, qncAdminPromotionLinkStatsTotalLinkIdKey) +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminPromotionLinkStatsTotal) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminPromotionLinkStatsTotalIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalIdPrefix, data.Id) + qncAdminPromotionLinkStatsTotalLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalLinkIdPrefix, data.LinkId) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminPromotionLinkStatsTotalRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.ClickCount, newData.PayCount, newData.PayAmount, newData.LastClickTime, newData.LastPayTime, newData.Id, oldVersion) + }, qncAdminPromotionLinkStatsTotalIdKey, qncAdminPromotionLinkStatsTotalLinkIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionLinkStatsTotal) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminPromotionLinkStatsTotalModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionLinkStatsTotal, error) { + + builder = builder.Columns(adminPromotionLinkStatsTotalRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsTotal + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsTotal, error) { + + builder = builder.Columns(adminPromotionLinkStatsTotalRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsTotal + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionLinkStatsTotal, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminPromotionLinkStatsTotalRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminPromotionLinkStatsTotal + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionLinkStatsTotal, error) { + + builder = builder.Columns(adminPromotionLinkStatsTotalRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsTotal + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionLinkStatsTotal, error) { + + builder = builder.Columns(adminPromotionLinkStatsTotalRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionLinkStatsTotal + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminPromotionLinkStatsTotalModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminPromotionLinkStatsTotalIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalIdPrefix, id) + qncAdminPromotionLinkStatsTotalLinkIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalLinkIdPrefix, data.LinkId) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminPromotionLinkStatsTotalIdKey, qncAdminPromotionLinkStatsTotalLinkIdKey) + return err +} +func (m *defaultAdminPromotionLinkStatsTotalModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminPromotionLinkStatsTotalIdPrefix, primary) +} +func (m *defaultAdminPromotionLinkStatsTotalModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionLinkStatsTotalRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminPromotionLinkStatsTotalModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminPromotionOrderModel.go b/app/main/model/adminPromotionOrderModel.go new file mode 100644 index 0000000..9d8366f --- /dev/null +++ b/app/main/model/adminPromotionOrderModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminPromotionOrderModel = (*customAdminPromotionOrderModel)(nil) + +type ( + // AdminPromotionOrderModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminPromotionOrderModel. + AdminPromotionOrderModel interface { + adminPromotionOrderModel + } + + customAdminPromotionOrderModel struct { + *defaultAdminPromotionOrderModel + } +) + +// NewAdminPromotionOrderModel returns a model for the database table. +func NewAdminPromotionOrderModel(conn sqlx.SqlConn, c cache.CacheConf) AdminPromotionOrderModel { + return &customAdminPromotionOrderModel{ + defaultAdminPromotionOrderModel: newAdminPromotionOrderModel(conn, c), + } +} diff --git a/app/main/model/adminPromotionOrderModel_gen.go b/app/main/model/adminPromotionOrderModel_gen.go new file mode 100644 index 0000000..bd9a9ab --- /dev/null +++ b/app/main/model/adminPromotionOrderModel_gen.go @@ -0,0 +1,409 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminPromotionOrderFieldNames = builder.RawFieldNames(&AdminPromotionOrder{}) + adminPromotionOrderRows = strings.Join(adminPromotionOrderFieldNames, ",") + adminPromotionOrderRowsExpectAutoSet = strings.Join(stringx.Remove(adminPromotionOrderFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminPromotionOrderRowsWithPlaceHolder = strings.Join(stringx.Remove(adminPromotionOrderFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminPromotionOrderIdPrefix = "cache:qnc:adminPromotionOrder:id:" + cacheQncAdminPromotionOrderOrderIdPrefix = "cache:qnc:adminPromotionOrder:orderId:" +) + +type ( + adminPromotionOrderModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionOrder) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminPromotionOrder, error) + FindOneByOrderId(ctx context.Context, orderId int64) (*AdminPromotionOrder, error) + Update(ctx context.Context, session sqlx.Session, data *AdminPromotionOrder) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminPromotionOrder) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionOrder) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionOrder, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionOrder, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionOrder, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionOrder, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionOrder, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminPromotionOrderModel struct { + sqlc.CachedConn + table string + } + + AdminPromotionOrder struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + LinkId int64 `db:"link_id"` // 推广链接ID + OrderId int64 `db:"order_id"` // 订单ID + UserId int64 `db:"user_id"` // 下单用户ID + AdminUserId int64 `db:"admin_user_id"` // 推广者账号ID + } +) + +func newAdminPromotionOrderModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminPromotionOrderModel { + return &defaultAdminPromotionOrderModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_promotion_order`", + } +} + +func (m *defaultAdminPromotionOrderModel) Insert(ctx context.Context, session sqlx.Session, data *AdminPromotionOrder) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminPromotionOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderIdPrefix, data.Id) + qncAdminPromotionOrderOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderOrderIdPrefix, data.OrderId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, adminPromotionOrderRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.LinkId, data.OrderId, data.UserId, data.AdminUserId) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.LinkId, data.OrderId, data.UserId, data.AdminUserId) + }, qncAdminPromotionOrderIdKey, qncAdminPromotionOrderOrderIdKey) +} + +func (m *defaultAdminPromotionOrderModel) FindOne(ctx context.Context, id int64) (*AdminPromotionOrder, error) { + qncAdminPromotionOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderIdPrefix, id) + var resp AdminPromotionOrder + err := m.QueryRowCtx(ctx, &resp, qncAdminPromotionOrderIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionOrderRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionOrderModel) FindOneByOrderId(ctx context.Context, orderId int64) (*AdminPromotionOrder, error) { + qncAdminPromotionOrderOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderOrderIdPrefix, orderId) + var resp AdminPromotionOrder + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminPromotionOrderOrderIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `order_id` = ? and del_state = ? limit 1", adminPromotionOrderRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, orderId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminPromotionOrderModel) Update(ctx context.Context, session sqlx.Session, newData *AdminPromotionOrder) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminPromotionOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderIdPrefix, data.Id) + qncAdminPromotionOrderOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderOrderIdPrefix, data.OrderId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminPromotionOrderRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.OrderId, newData.UserId, newData.AdminUserId, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.OrderId, newData.UserId, newData.AdminUserId, newData.Id) + }, qncAdminPromotionOrderIdKey, qncAdminPromotionOrderOrderIdKey) +} + +func (m *defaultAdminPromotionOrderModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminPromotionOrder) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminPromotionOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderIdPrefix, data.Id) + qncAdminPromotionOrderOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderOrderIdPrefix, data.OrderId) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminPromotionOrderRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.OrderId, newData.UserId, newData.AdminUserId, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.LinkId, newData.OrderId, newData.UserId, newData.AdminUserId, newData.Id, oldVersion) + }, qncAdminPromotionOrderIdKey, qncAdminPromotionOrderOrderIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminPromotionOrderModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminPromotionOrder) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminPromotionOrderModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminPromotionOrderModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionOrderModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminPromotionOrderModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminPromotionOrder, error) { + + builder = builder.Columns(adminPromotionOrderRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionOrder + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionOrderModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionOrder, error) { + + builder = builder.Columns(adminPromotionOrderRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionOrder + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionOrderModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminPromotionOrder, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminPromotionOrderRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminPromotionOrder + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminPromotionOrderModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminPromotionOrder, error) { + + builder = builder.Columns(adminPromotionOrderRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionOrder + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionOrderModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminPromotionOrder, error) { + + builder = builder.Columns(adminPromotionOrderRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminPromotionOrder + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminPromotionOrderModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminPromotionOrderModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminPromotionOrderModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminPromotionOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderIdPrefix, id) + qncAdminPromotionOrderOrderIdKey := fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderOrderIdPrefix, data.OrderId) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminPromotionOrderIdKey, qncAdminPromotionOrderOrderIdKey) + return err +} +func (m *defaultAdminPromotionOrderModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminPromotionOrderIdPrefix, primary) +} +func (m *defaultAdminPromotionOrderModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminPromotionOrderRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminPromotionOrderModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminRoleApiModel.go b/app/main/model/adminRoleApiModel.go new file mode 100644 index 0000000..bcb9fc7 --- /dev/null +++ b/app/main/model/adminRoleApiModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminRoleApiModel = (*customAdminRoleApiModel)(nil) + +type ( + // AdminRoleApiModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminRoleApiModel. + AdminRoleApiModel interface { + adminRoleApiModel + } + + customAdminRoleApiModel struct { + *defaultAdminRoleApiModel + } +) + +// NewAdminRoleApiModel returns a model for the database table. +func NewAdminRoleApiModel(conn sqlx.SqlConn, c cache.CacheConf) AdminRoleApiModel { + return &customAdminRoleApiModel{ + defaultAdminRoleApiModel: newAdminRoleApiModel(conn, c), + } +} diff --git a/app/main/model/adminRoleApiModel_gen.go b/app/main/model/adminRoleApiModel_gen.go new file mode 100644 index 0000000..7833003 --- /dev/null +++ b/app/main/model/adminRoleApiModel_gen.go @@ -0,0 +1,407 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminRoleApiFieldNames = builder.RawFieldNames(&AdminRoleApi{}) + adminRoleApiRows = strings.Join(adminRoleApiFieldNames, ",") + adminRoleApiRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleApiFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminRoleApiRowsWithPlaceHolder = strings.Join(stringx.Remove(adminRoleApiFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminRoleApiIdPrefix = "cache:qnc:adminRoleApi:id:" + cacheQncAdminRoleApiRoleIdApiIdPrefix = "cache:qnc:adminRoleApi:roleId:apiId:" +) + +type ( + adminRoleApiModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminRoleApi) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminRoleApi, error) + FindOneByRoleIdApiId(ctx context.Context, roleId int64, apiId int64) (*AdminRoleApi, error) + Update(ctx context.Context, session sqlx.Session, data *AdminRoleApi) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminRoleApi) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminRoleApi) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminRoleApi, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleApi, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleApi, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRoleApi, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRoleApi, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminRoleApiModel struct { + sqlc.CachedConn + table string + } + + AdminRoleApi struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + RoleId int64 `db:"role_id"` // 关联到角色表的id + ApiId int64 `db:"api_id"` // 关联到接口表的id + } +) + +func newAdminRoleApiModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminRoleApiModel { + return &defaultAdminRoleApiModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_role_api`", + } +} + +func (m *defaultAdminRoleApiModel) Insert(ctx context.Context, session sqlx.Session, data *AdminRoleApi) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleApiIdPrefix, data.Id) + qncAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?)", m.table, adminRoleApiRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.ApiId) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.ApiId) + }, qncAdminRoleApiIdKey, qncAdminRoleApiRoleIdApiIdKey) +} + +func (m *defaultAdminRoleApiModel) FindOne(ctx context.Context, id int64) (*AdminRoleApi, error) { + qncAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleApiIdPrefix, id) + var resp AdminRoleApi + err := m.QueryRowCtx(ctx, &resp, qncAdminRoleApiIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleApiRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminRoleApiModel) FindOneByRoleIdApiId(ctx context.Context, roleId int64, apiId int64) (*AdminRoleApi, error) { + qncAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleApiRoleIdApiIdPrefix, roleId, apiId) + var resp AdminRoleApi + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminRoleApiRoleIdApiIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `role_id` = ? and `api_id` = ? and del_state = ? limit 1", adminRoleApiRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, roleId, apiId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminRoleApiModel) Update(ctx context.Context, session sqlx.Session, newData *AdminRoleApi) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleApiIdPrefix, data.Id) + qncAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminRoleApiRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id) + }, qncAdminRoleApiIdKey, qncAdminRoleApiRoleIdApiIdKey) +} + +func (m *defaultAdminRoleApiModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminRoleApi) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleApiIdPrefix, data.Id) + qncAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminRoleApiRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id, oldVersion) + }, qncAdminRoleApiIdKey, qncAdminRoleApiRoleIdApiIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminRoleApiModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminRoleApi) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminRoleApiModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminRoleApiModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminRoleApiModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminRoleApiModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminRoleApi, error) { + + builder = builder.Columns(adminRoleApiRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleApiModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleApi, error) { + + builder = builder.Columns(adminRoleApiRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleApiModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleApi, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminRoleApiRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminRoleApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminRoleApiModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRoleApi, error) { + + builder = builder.Columns(adminRoleApiRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleApiModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRoleApi, error) { + + builder = builder.Columns(adminRoleApiRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleApi + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleApiModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminRoleApiModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminRoleApiModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleApiIdPrefix, id) + qncAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminRoleApiIdKey, qncAdminRoleApiRoleIdApiIdKey) + return err +} +func (m *defaultAdminRoleApiModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminRoleApiIdPrefix, primary) +} +func (m *defaultAdminRoleApiModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleApiRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminRoleApiModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminRoleMenuModel.go b/app/main/model/adminRoleMenuModel.go new file mode 100644 index 0000000..8dc9812 --- /dev/null +++ b/app/main/model/adminRoleMenuModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminRoleMenuModel = (*customAdminRoleMenuModel)(nil) + +type ( + // AdminRoleMenuModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminRoleMenuModel. + AdminRoleMenuModel interface { + adminRoleMenuModel + } + + customAdminRoleMenuModel struct { + *defaultAdminRoleMenuModel + } +) + +// NewAdminRoleMenuModel returns a model for the database table. +func NewAdminRoleMenuModel(conn sqlx.SqlConn, c cache.CacheConf) AdminRoleMenuModel { + return &customAdminRoleMenuModel{ + defaultAdminRoleMenuModel: newAdminRoleMenuModel(conn, c), + } +} diff --git a/app/main/model/adminRoleMenuModel_gen.go b/app/main/model/adminRoleMenuModel_gen.go new file mode 100644 index 0000000..8b7a698 --- /dev/null +++ b/app/main/model/adminRoleMenuModel_gen.go @@ -0,0 +1,407 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminRoleMenuFieldNames = builder.RawFieldNames(&AdminRoleMenu{}) + adminRoleMenuRows = strings.Join(adminRoleMenuFieldNames, ",") + adminRoleMenuRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleMenuFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminRoleMenuRowsWithPlaceHolder = strings.Join(stringx.Remove(adminRoleMenuFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminRoleMenuIdPrefix = "cache:qnc:adminRoleMenu:id:" + cacheQncAdminRoleMenuRoleIdMenuIdPrefix = "cache:qnc:adminRoleMenu:roleId:menuId:" +) + +type ( + adminRoleMenuModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminRoleMenu, error) + FindOneByRoleIdMenuId(ctx context.Context, roleId int64, menuId int64) (*AdminRoleMenu, error) + Update(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminRoleMenu, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleMenu, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleMenu, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRoleMenu, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRoleMenu, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminRoleMenuModel struct { + sqlc.CachedConn + table string + } + + AdminRoleMenu struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + RoleId int64 `db:"role_id"` // 关联到角色表的id + MenuId int64 `db:"menu_id"` // 关联到菜单表的id + } +) + +func newAdminRoleMenuModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminRoleMenuModel { + return &defaultAdminRoleMenuModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_role_menu`", + } +} + +func (m *defaultAdminRoleMenuModel) Insert(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleMenuIdPrefix, data.Id) + qncAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?)", m.table, adminRoleMenuRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.MenuId) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.MenuId) + }, qncAdminRoleMenuIdKey, qncAdminRoleMenuRoleIdMenuIdKey) +} + +func (m *defaultAdminRoleMenuModel) FindOne(ctx context.Context, id int64) (*AdminRoleMenu, error) { + qncAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleMenuIdPrefix, id) + var resp AdminRoleMenu + err := m.QueryRowCtx(ctx, &resp, qncAdminRoleMenuIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleMenuRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminRoleMenuModel) FindOneByRoleIdMenuId(ctx context.Context, roleId int64, menuId int64) (*AdminRoleMenu, error) { + qncAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleMenuRoleIdMenuIdPrefix, roleId, menuId) + var resp AdminRoleMenu + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminRoleMenuRoleIdMenuIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `role_id` = ? and `menu_id` = ? and del_state = ? limit 1", adminRoleMenuRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, roleId, menuId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminRoleMenuModel) Update(ctx context.Context, session sqlx.Session, newData *AdminRoleMenu) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleMenuIdPrefix, data.Id) + qncAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminRoleMenuRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id) + }, qncAdminRoleMenuIdKey, qncAdminRoleMenuRoleIdMenuIdKey) +} + +func (m *defaultAdminRoleMenuModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminRoleMenu) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleMenuIdPrefix, data.Id) + qncAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminRoleMenuRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id, oldVersion) + }, qncAdminRoleMenuIdKey, qncAdminRoleMenuRoleIdMenuIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminRoleMenuModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminRoleMenuModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminRoleMenuModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminRoleMenuModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminRoleMenuModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminRoleMenu, error) { + + builder = builder.Columns(adminRoleMenuRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleMenuModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleMenu, error) { + + builder = builder.Columns(adminRoleMenuRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleMenuModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleMenu, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminRoleMenuRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminRoleMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminRoleMenuModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRoleMenu, error) { + + builder = builder.Columns(adminRoleMenuRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleMenuModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRoleMenu, error) { + + builder = builder.Columns(adminRoleMenuRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRoleMenu + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleMenuModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminRoleMenuModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminRoleMenuModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleMenuIdPrefix, id) + qncAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminRoleMenuIdKey, qncAdminRoleMenuRoleIdMenuIdKey) + return err +} +func (m *defaultAdminRoleMenuModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminRoleMenuIdPrefix, primary) +} +func (m *defaultAdminRoleMenuModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleMenuRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminRoleMenuModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminRoleModel.go b/app/main/model/adminRoleModel.go new file mode 100644 index 0000000..26dc91d --- /dev/null +++ b/app/main/model/adminRoleModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminRoleModel = (*customAdminRoleModel)(nil) + +type ( + // AdminRoleModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminRoleModel. + AdminRoleModel interface { + adminRoleModel + } + + customAdminRoleModel struct { + *defaultAdminRoleModel + } +) + +// NewAdminRoleModel returns a model for the database table. +func NewAdminRoleModel(conn sqlx.SqlConn, c cache.CacheConf) AdminRoleModel { + return &customAdminRoleModel{ + defaultAdminRoleModel: newAdminRoleModel(conn, c), + } +} diff --git a/app/main/model/adminRoleModel_gen.go b/app/main/model/adminRoleModel_gen.go new file mode 100644 index 0000000..fdf4119 --- /dev/null +++ b/app/main/model/adminRoleModel_gen.go @@ -0,0 +1,410 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminRoleFieldNames = builder.RawFieldNames(&AdminRole{}) + adminRoleRows = strings.Join(adminRoleFieldNames, ",") + adminRoleRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminRoleRowsWithPlaceHolder = strings.Join(stringx.Remove(adminRoleFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminRoleIdPrefix = "cache:qnc:adminRole:id:" + cacheQncAdminRoleRoleCodePrefix = "cache:qnc:adminRole:roleCode:" +) + +type ( + adminRoleModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminRole) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminRole, error) + FindOneByRoleCode(ctx context.Context, roleCode string) (*AdminRole, error) + Update(ctx context.Context, session sqlx.Session, data *AdminRole) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminRole) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminRole) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminRole, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRole, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRole, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRole, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRole, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminRoleModel struct { + sqlc.CachedConn + table string + } + + AdminRole struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + RoleName string `db:"role_name"` // 角色名称 + RoleCode string `db:"role_code"` // 角色编码 + Description string `db:"description"` // 角色描述 + Status int64 `db:"status"` // 状态:0-禁用,1-启用 + Sort int64 `db:"sort"` // 排序 + } +) + +func newAdminRoleModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminRoleModel { + return &defaultAdminRoleModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_role`", + } +} + +func (m *defaultAdminRoleModel) Insert(ctx context.Context, session sqlx.Session, data *AdminRole) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleIdPrefix, data.Id) + qncAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheQncAdminRoleRoleCodePrefix, data.RoleCode) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminRoleRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleName, data.RoleCode, data.Description, data.Status, data.Sort) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleName, data.RoleCode, data.Description, data.Status, data.Sort) + }, qncAdminRoleIdKey, qncAdminRoleRoleCodeKey) +} + +func (m *defaultAdminRoleModel) FindOne(ctx context.Context, id int64) (*AdminRole, error) { + qncAdminRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleIdPrefix, id) + var resp AdminRole + err := m.QueryRowCtx(ctx, &resp, qncAdminRoleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminRoleModel) FindOneByRoleCode(ctx context.Context, roleCode string) (*AdminRole, error) { + qncAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheQncAdminRoleRoleCodePrefix, roleCode) + var resp AdminRole + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminRoleRoleCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `role_code` = ? and del_state = ? limit 1", adminRoleRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, roleCode, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminRoleModel) Update(ctx context.Context, session sqlx.Session, newData *AdminRole) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleIdPrefix, data.Id) + qncAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheQncAdminRoleRoleCodePrefix, data.RoleCode) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminRoleRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id) + }, qncAdminRoleIdKey, qncAdminRoleRoleCodeKey) +} + +func (m *defaultAdminRoleModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminRole) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleIdPrefix, data.Id) + qncAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheQncAdminRoleRoleCodePrefix, data.RoleCode) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminRoleRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id, oldVersion) + }, qncAdminRoleIdKey, qncAdminRoleRoleCodeKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminRoleModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminRole) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminRoleModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminRoleModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminRoleModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminRoleModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminRole, error) { + + builder = builder.Columns(adminRoleRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRole, error) { + + builder = builder.Columns(adminRoleRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRole, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminRoleRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminRoleModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRole, error) { + + builder = builder.Columns(adminRoleRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRole, error) { + + builder = builder.Columns(adminRoleRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminRoleModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminRoleModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminRoleModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminRoleIdPrefix, id) + qncAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheQncAdminRoleRoleCodePrefix, data.RoleCode) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminRoleIdKey, qncAdminRoleRoleCodeKey) + return err +} +func (m *defaultAdminRoleModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminRoleIdPrefix, primary) +} +func (m *defaultAdminRoleModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminRoleModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminUserModel.go b/app/main/model/adminUserModel.go new file mode 100644 index 0000000..25d463e --- /dev/null +++ b/app/main/model/adminUserModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminUserModel = (*customAdminUserModel)(nil) + +type ( + // AdminUserModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminUserModel. + AdminUserModel interface { + adminUserModel + } + + customAdminUserModel struct { + *defaultAdminUserModel + } +) + +// NewAdminUserModel returns a model for the database table. +func NewAdminUserModel(conn sqlx.SqlConn, c cache.CacheConf) AdminUserModel { + return &customAdminUserModel{ + defaultAdminUserModel: newAdminUserModel(conn, c), + } +} diff --git a/app/main/model/adminUserModel_gen.go b/app/main/model/adminUserModel_gen.go new file mode 100644 index 0000000..13a1ade --- /dev/null +++ b/app/main/model/adminUserModel_gen.go @@ -0,0 +1,435 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminUserFieldNames = builder.RawFieldNames(&AdminUser{}) + adminUserRows = strings.Join(adminUserFieldNames, ",") + adminUserRowsExpectAutoSet = strings.Join(stringx.Remove(adminUserFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminUserRowsWithPlaceHolder = strings.Join(stringx.Remove(adminUserFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminUserIdPrefix = "cache:qnc:adminUser:id:" + cacheQncAdminUserRealNamePrefix = "cache:qnc:adminUser:realName:" + cacheQncAdminUserUsernamePrefix = "cache:qnc:adminUser:username:" +) + +type ( + adminUserModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminUser) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminUser, error) + FindOneByRealName(ctx context.Context, realName string) (*AdminUser, error) + FindOneByUsername(ctx context.Context, username string) (*AdminUser, error) + Update(ctx context.Context, session sqlx.Session, data *AdminUser) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminUser) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminUser) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminUser, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUser, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUser, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminUser, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminUser, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminUserModel struct { + sqlc.CachedConn + table string + } + + AdminUser struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + Username string `db:"username"` // 用户名 + Password string `db:"password"` // 密码 + RealName string `db:"real_name"` // 真实姓名 + Status int64 `db:"status"` // 状态:0-禁用,1-启用 + } +) + +func newAdminUserModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminUserModel { + return &defaultAdminUserModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_user`", + } +} + +func (m *defaultAdminUserModel) Insert(ctx context.Context, session sqlx.Session, data *AdminUser) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminUserIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserIdPrefix, data.Id) + qncAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheQncAdminUserRealNamePrefix, data.RealName) + qncAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheQncAdminUserUsernamePrefix, data.Username) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, adminUserRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Username, data.Password, data.RealName, data.Status) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Username, data.Password, data.RealName, data.Status) + }, qncAdminUserIdKey, qncAdminUserRealNameKey, qncAdminUserUsernameKey) +} + +func (m *defaultAdminUserModel) FindOne(ctx context.Context, id int64) (*AdminUser, error) { + qncAdminUserIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserIdPrefix, id) + var resp AdminUser + err := m.QueryRowCtx(ctx, &resp, qncAdminUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminUserModel) FindOneByRealName(ctx context.Context, realName string) (*AdminUser, error) { + qncAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheQncAdminUserRealNamePrefix, realName) + var resp AdminUser + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminUserRealNameKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `real_name` = ? and del_state = ? limit 1", adminUserRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, realName, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminUserModel) FindOneByUsername(ctx context.Context, username string) (*AdminUser, error) { + qncAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheQncAdminUserUsernamePrefix, username) + var resp AdminUser + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminUserUsernameKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `username` = ? and del_state = ? limit 1", adminUserRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, username, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminUserModel) Update(ctx context.Context, session sqlx.Session, newData *AdminUser) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminUserIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserIdPrefix, data.Id) + qncAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheQncAdminUserRealNamePrefix, data.RealName) + qncAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheQncAdminUserUsernamePrefix, data.Username) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminUserRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id) + }, qncAdminUserIdKey, qncAdminUserRealNameKey, qncAdminUserUsernameKey) +} + +func (m *defaultAdminUserModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminUser) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminUserIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserIdPrefix, data.Id) + qncAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheQncAdminUserRealNamePrefix, data.RealName) + qncAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheQncAdminUserUsernamePrefix, data.Username) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminUserRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id, oldVersion) + }, qncAdminUserIdKey, qncAdminUserRealNameKey, qncAdminUserUsernameKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminUserModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminUser) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminUserModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminUserModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminUserModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminUserModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminUser, error) { + + builder = builder.Columns(adminUserRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUser + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUser, error) { + + builder = builder.Columns(adminUserRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUser + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUser, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminUserRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminUser + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminUserModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminUser, error) { + + builder = builder.Columns(adminUserRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUser + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminUser, error) { + + builder = builder.Columns(adminUserRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUser + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminUserModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminUserModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminUserIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserIdPrefix, id) + qncAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheQncAdminUserRealNamePrefix, data.RealName) + qncAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheQncAdminUserUsernamePrefix, data.Username) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminUserIdKey, qncAdminUserRealNameKey, qncAdminUserUsernameKey) + return err +} +func (m *defaultAdminUserModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminUserIdPrefix, primary) +} +func (m *defaultAdminUserModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminUserModel) tableName() string { + return m.table +} diff --git a/app/main/model/adminUserRoleModel.go b/app/main/model/adminUserRoleModel.go new file mode 100644 index 0000000..d9772ad --- /dev/null +++ b/app/main/model/adminUserRoleModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ AdminUserRoleModel = (*customAdminUserRoleModel)(nil) + +type ( + // AdminUserRoleModel is an interface to be customized, add more methods here, + // and implement the added methods in customAdminUserRoleModel. + AdminUserRoleModel interface { + adminUserRoleModel + } + + customAdminUserRoleModel struct { + *defaultAdminUserRoleModel + } +) + +// NewAdminUserRoleModel returns a model for the database table. +func NewAdminUserRoleModel(conn sqlx.SqlConn, c cache.CacheConf) AdminUserRoleModel { + return &customAdminUserRoleModel{ + defaultAdminUserRoleModel: newAdminUserRoleModel(conn, c), + } +} diff --git a/app/main/model/adminUserRoleModel_gen.go b/app/main/model/adminUserRoleModel_gen.go new file mode 100644 index 0000000..bf0d8e6 --- /dev/null +++ b/app/main/model/adminUserRoleModel_gen.go @@ -0,0 +1,407 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + adminUserRoleFieldNames = builder.RawFieldNames(&AdminUserRole{}) + adminUserRoleRows = strings.Join(adminUserRoleFieldNames, ",") + adminUserRoleRowsExpectAutoSet = strings.Join(stringx.Remove(adminUserRoleFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + adminUserRoleRowsWithPlaceHolder = strings.Join(stringx.Remove(adminUserRoleFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncAdminUserRoleIdPrefix = "cache:qnc:adminUserRole:id:" + cacheQncAdminUserRoleUserIdRoleIdPrefix = "cache:qnc:adminUserRole:userId:roleId:" +) + +type ( + adminUserRoleModel interface { + Insert(ctx context.Context, session sqlx.Session, data *AdminUserRole) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*AdminUserRole, error) + FindOneByUserIdRoleId(ctx context.Context, userId int64, roleId int64) (*AdminUserRole, error) + Update(ctx context.Context, session sqlx.Session, data *AdminUserRole) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminUserRole) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminUserRole) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*AdminUserRole, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUserRole, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUserRole, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminUserRole, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminUserRole, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultAdminUserRoleModel struct { + sqlc.CachedConn + table string + } + + AdminUserRole struct { + Id int64 `db:"id"` + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` + Version int64 `db:"version"` // 版本号 + UserId int64 `db:"user_id"` // 关联到用户表的id + RoleId int64 `db:"role_id"` // 关联到角色表的id + } +) + +func newAdminUserRoleModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminUserRoleModel { + return &defaultAdminUserRoleModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`admin_user_role`", + } +} + +func (m *defaultAdminUserRoleModel) Insert(ctx context.Context, session sqlx.Session, data *AdminUserRole) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserRoleIdPrefix, data.Id) + qncAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?)", m.table, adminUserRoleRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.UserId, data.RoleId) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.UserId, data.RoleId) + }, qncAdminUserRoleIdKey, qncAdminUserRoleUserIdRoleIdKey) +} + +func (m *defaultAdminUserRoleModel) FindOne(ctx context.Context, id int64) (*AdminUserRole, error) { + qncAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserRoleIdPrefix, id) + var resp AdminUserRole + err := m.QueryRowCtx(ctx, &resp, qncAdminUserRoleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRoleRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminUserRoleModel) FindOneByUserIdRoleId(ctx context.Context, userId int64, roleId int64) (*AdminUserRole, error) { + qncAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminUserRoleUserIdRoleIdPrefix, userId, roleId) + var resp AdminUserRole + err := m.QueryRowIndexCtx(ctx, &resp, qncAdminUserRoleUserIdRoleIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `user_id` = ? and `role_id` = ? and del_state = ? limit 1", adminUserRoleRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, userId, roleId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultAdminUserRoleModel) Update(ctx context.Context, session sqlx.Session, newData *AdminUserRole) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserRoleIdPrefix, data.Id) + qncAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, adminUserRoleRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id) + }, qncAdminUserRoleIdKey, qncAdminUserRoleUserIdRoleIdKey) +} + +func (m *defaultAdminUserRoleModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminUserRole) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserRoleIdPrefix, data.Id) + qncAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, adminUserRoleRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id, oldVersion) + }, qncAdminUserRoleIdKey, qncAdminUserRoleUserIdRoleIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultAdminUserRoleModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *AdminUserRole) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "AdminUserRoleModel delete err : %+v", err) + } + return nil +} + +func (m *defaultAdminUserRoleModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminUserRoleModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultAdminUserRoleModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*AdminUserRole, error) { + + builder = builder.Columns(adminUserRoleRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUserRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserRoleModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUserRole, error) { + + builder = builder.Columns(adminUserRoleRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUserRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserRoleModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUserRole, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(adminUserRoleRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*AdminUserRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultAdminUserRoleModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminUserRole, error) { + + builder = builder.Columns(adminUserRoleRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUserRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserRoleModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminUserRole, error) { + + builder = builder.Columns(adminUserRoleRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*AdminUserRole + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultAdminUserRoleModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultAdminUserRoleModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultAdminUserRoleModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheQncAdminUserRoleIdPrefix, id) + qncAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheQncAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncAdminUserRoleIdKey, qncAdminUserRoleUserIdRoleIdKey) + return err +} +func (m *defaultAdminUserRoleModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncAdminUserRoleIdPrefix, primary) +} +func (m *defaultAdminUserRoleModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRoleRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultAdminUserRoleModel) tableName() string { + return m.table +} diff --git a/app/main/model/agentClosureModel.go b/app/main/model/agentClosureModel.go index 09ef9b8..601fe96 100644 --- a/app/main/model/agentClosureModel.go +++ b/app/main/model/agentClosureModel.go @@ -3,7 +3,6 @@ package model import ( "context" "fmt" - "qnc-server/common/globalkey" "github.com/pkg/errors" diff --git a/app/main/model/agentMembershipRechargeOrderModel_gen.go b/app/main/model/agentMembershipRechargeOrderModel_gen.go index 3ccc924..3811d83 100644 --- a/app/main/model/agentMembershipRechargeOrderModel_gen.go +++ b/app/main/model/agentMembershipRechargeOrderModel_gen.go @@ -59,14 +59,14 @@ type ( AgentMembershipRechargeOrder struct { Id int64 `db:"id"` - UserId int64 `db:"user_id"` // 用户ID - AgentId int64 `db:"agent_id"` // 代理ID - LevelName string `db:"level_name"` // 会员级别,如 VIP,SVIP,normal - Amount float64 `db:"amount"` // 充值金额 - PaymentMethod string `db:"payment_method"` // 支付方式:支付宝,微信,苹果支付,其他 - OrderNo string `db:"order_no"` // 交易号 - PlatformOrderId sql.NullString `db:"platform_order_id"` - Status string `db:"status"` // 充值状态:1 成功,0 失败 + UserId int64 `db:"user_id"` // 用户ID + AgentId int64 `db:"agent_id"` // 代理ID + LevelName string `db:"level_name"` // 会员级别,如 VIP,SVIP,normal + Amount float64 `db:"amount"` // 充值金额 + PaymentMethod string `db:"payment_method"` // 支付方式:支付宝,微信,苹果支付,其他 + OrderNo string `db:"order_no"` // 交易号 + PlatformOrderId sql.NullString `db:"platform_order_id"` // 支付平台订单号 + Status string `db:"status"` CreateTime time.Time `db:"create_time"` UpdateTime time.Time `db:"update_time"` // 更新时间 DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 diff --git a/app/main/model/authorizationModel_gen.go b/app/main/model/authorizationModel_gen.go index 8297267..36d9315 100644 --- a/app/main/model/authorizationModel_gen.go +++ b/app/main/model/authorizationModel_gen.go @@ -58,8 +58,8 @@ type ( Authorization struct { Id int64 `db:"id"` OrderId int64 `db:"order_id"` - GrantType sql.NullString `db:"grant_type"` // 授权类型:face人脸,sms短信 - AuthType sql.NullInt64 `db:"auth_type"` // 1本人,2他人 + GrantType sql.NullString `db:"grant_type"` + AuthType sql.NullInt64 `db:"auth_type"` // 1本人,2他人 UserId int64 `db:"user_id"` TargetName string `db:"target_name"` TargetIdcard string `db:"target_idcard"` diff --git a/app/main/model/globalNotificationsModel_gen.go b/app/main/model/globalNotificationsModel_gen.go index 6fb3f53..89b3b30 100644 --- a/app/main/model/globalNotificationsModel_gen.go +++ b/app/main/model/globalNotificationsModel_gen.go @@ -62,10 +62,10 @@ type ( EndDate sql.NullTime `db:"end_date"` StartTime string `db:"start_time"` EndTime string `db:"end_time"` - CreatedAt time.Time `db:"created_at"` - UpdatedAt time.Time `db:"updated_at"` - Status string `db:"status"` - DelState int64 `db:"del_state"` // 删除状态 + CreateTime time.Time `db:"create_time"` + UpdateTime time.Time `db:"update_time"` + Status int64 `db:"status"` + DelState int64 `db:"del_state"` Version int64 `db:"version"` // 版本号 DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 } diff --git a/app/main/model/orderRefundModel.go b/app/main/model/orderRefundModel.go new file mode 100644 index 0000000..92c3174 --- /dev/null +++ b/app/main/model/orderRefundModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ OrderRefundModel = (*customOrderRefundModel)(nil) + +type ( + // OrderRefundModel is an interface to be customized, add more methods here, + // and implement the added methods in customOrderRefundModel. + OrderRefundModel interface { + orderRefundModel + } + + customOrderRefundModel struct { + *defaultOrderRefundModel + } +) + +// NewOrderRefundModel returns a model for the database table. +func NewOrderRefundModel(conn sqlx.SqlConn, c cache.CacheConf) OrderRefundModel { + return &customOrderRefundModel{ + defaultOrderRefundModel: newOrderRefundModel(conn, c), + } +} diff --git a/app/main/model/orderRefundModel_gen.go b/app/main/model/orderRefundModel_gen.go new file mode 100644 index 0000000..64d1efe --- /dev/null +++ b/app/main/model/orderRefundModel_gen.go @@ -0,0 +1,467 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + orderRefundFieldNames = builder.RawFieldNames(&OrderRefund{}) + orderRefundRows = strings.Join(orderRefundFieldNames, ",") + orderRefundRowsExpectAutoSet = strings.Join(stringx.Remove(orderRefundFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + orderRefundRowsWithPlaceHolder = strings.Join(stringx.Remove(orderRefundFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncOrderRefundIdPrefix = "cache:qnc:orderRefund:id:" + cacheQncOrderRefundOrderIdPrefix = "cache:qnc:orderRefund:orderId:" + cacheQncOrderRefundPlatformRefundIdPrefix = "cache:qnc:orderRefund:platformRefundId:" + cacheQncOrderRefundRefundNoPrefix = "cache:qnc:orderRefund:refundNo:" +) + +type ( + orderRefundModel interface { + Insert(ctx context.Context, session sqlx.Session, data *OrderRefund) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*OrderRefund, error) + FindOneByOrderId(ctx context.Context, orderId int64) (*OrderRefund, error) + FindOneByPlatformRefundId(ctx context.Context, platformRefundId sql.NullString) (*OrderRefund, error) + FindOneByRefundNo(ctx context.Context, refundNo string) (*OrderRefund, error) + Update(ctx context.Context, session sqlx.Session, data *OrderRefund) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *OrderRefund) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *OrderRefund) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*OrderRefund, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*OrderRefund, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*OrderRefund, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*OrderRefund, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*OrderRefund, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultOrderRefundModel struct { + sqlc.CachedConn + table string + } + + OrderRefund struct { + Id int64 `db:"id"` // 主键ID + RefundNo string `db:"refund_no"` // 退款单号 + OrderId int64 `db:"order_id"` // 关联的订单ID + UserId int64 `db:"user_id"` // 用户ID + ProductId int64 `db:"product_id"` // 产品ID + PlatformRefundId sql.NullString `db:"platform_refund_id"` // 支付平台退款单号 + RefundAmount float64 `db:"refund_amount"` // 退款金额 + RefundReason sql.NullString `db:"refund_reason"` // 退款原因 + Status string `db:"status"` // 退款状态 + DelState int64 `db:"del_state"` // 删除状态 + Version int64 `db:"version"` // 版本号 + CreateTime time.Time `db:"create_time"` // 创建时间 + UpdateTime time.Time `db:"update_time"` // 更新时间 + RefundTime sql.NullTime `db:"refund_time"` // 退款成功时间 + CloseTime sql.NullTime `db:"close_time"` // 退款关闭时间 + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + } +) + +func newOrderRefundModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultOrderRefundModel { + return &defaultOrderRefundModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`order_refund`", + } +} + +func (m *defaultOrderRefundModel) Insert(ctx context.Context, session sqlx.Session, data *OrderRefund) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncOrderRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundIdPrefix, data.Id) + qncOrderRefundOrderIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundOrderIdPrefix, data.OrderId) + qncOrderRefundPlatformRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundPlatformRefundIdPrefix, data.PlatformRefundId) + qncOrderRefundRefundNoKey := fmt.Sprintf("%s%v", cacheQncOrderRefundRefundNoPrefix, data.RefundNo) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, orderRefundRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.RefundNo, data.OrderId, data.UserId, data.ProductId, data.PlatformRefundId, data.RefundAmount, data.RefundReason, data.Status, data.DelState, data.Version, data.RefundTime, data.CloseTime, data.DeleteTime) + } + return conn.ExecCtx(ctx, query, data.RefundNo, data.OrderId, data.UserId, data.ProductId, data.PlatformRefundId, data.RefundAmount, data.RefundReason, data.Status, data.DelState, data.Version, data.RefundTime, data.CloseTime, data.DeleteTime) + }, qncOrderRefundIdKey, qncOrderRefundOrderIdKey, qncOrderRefundPlatformRefundIdKey, qncOrderRefundRefundNoKey) +} + +func (m *defaultOrderRefundModel) FindOne(ctx context.Context, id int64) (*OrderRefund, error) { + qncOrderRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundIdPrefix, id) + var resp OrderRefund + err := m.QueryRowCtx(ctx, &resp, qncOrderRefundIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", orderRefundRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) FindOneByOrderId(ctx context.Context, orderId int64) (*OrderRefund, error) { + qncOrderRefundOrderIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundOrderIdPrefix, orderId) + var resp OrderRefund + err := m.QueryRowIndexCtx(ctx, &resp, qncOrderRefundOrderIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `order_id` = ? and del_state = ? limit 1", orderRefundRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, orderId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) FindOneByPlatformRefundId(ctx context.Context, platformRefundId sql.NullString) (*OrderRefund, error) { + qncOrderRefundPlatformRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundPlatformRefundIdPrefix, platformRefundId) + var resp OrderRefund + err := m.QueryRowIndexCtx(ctx, &resp, qncOrderRefundPlatformRefundIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `platform_refund_id` = ? and del_state = ? limit 1", orderRefundRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, platformRefundId, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) FindOneByRefundNo(ctx context.Context, refundNo string) (*OrderRefund, error) { + qncOrderRefundRefundNoKey := fmt.Sprintf("%s%v", cacheQncOrderRefundRefundNoPrefix, refundNo) + var resp OrderRefund + err := m.QueryRowIndexCtx(ctx, &resp, qncOrderRefundRefundNoKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `refund_no` = ? and del_state = ? limit 1", orderRefundRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, refundNo, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) Update(ctx context.Context, session sqlx.Session, newData *OrderRefund) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncOrderRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundIdPrefix, data.Id) + qncOrderRefundOrderIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundOrderIdPrefix, data.OrderId) + qncOrderRefundPlatformRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundPlatformRefundIdPrefix, data.PlatformRefundId) + qncOrderRefundRefundNoKey := fmt.Sprintf("%s%v", cacheQncOrderRefundRefundNoPrefix, data.RefundNo) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, orderRefundRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.RefundNo, newData.OrderId, newData.UserId, newData.ProductId, newData.PlatformRefundId, newData.RefundAmount, newData.RefundReason, newData.Status, newData.DelState, newData.Version, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.RefundNo, newData.OrderId, newData.UserId, newData.ProductId, newData.PlatformRefundId, newData.RefundAmount, newData.RefundReason, newData.Status, newData.DelState, newData.Version, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id) + }, qncOrderRefundIdKey, qncOrderRefundOrderIdKey, qncOrderRefundPlatformRefundIdKey, qncOrderRefundRefundNoKey) +} + +func (m *defaultOrderRefundModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *OrderRefund) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncOrderRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundIdPrefix, data.Id) + qncOrderRefundOrderIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundOrderIdPrefix, data.OrderId) + qncOrderRefundPlatformRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundPlatformRefundIdPrefix, data.PlatformRefundId) + qncOrderRefundRefundNoKey := fmt.Sprintf("%s%v", cacheQncOrderRefundRefundNoPrefix, data.RefundNo) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, orderRefundRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.RefundNo, newData.OrderId, newData.UserId, newData.ProductId, newData.PlatformRefundId, newData.RefundAmount, newData.RefundReason, newData.Status, newData.DelState, newData.Version, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.RefundNo, newData.OrderId, newData.UserId, newData.ProductId, newData.PlatformRefundId, newData.RefundAmount, newData.RefundReason, newData.Status, newData.DelState, newData.Version, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id, oldVersion) + }, qncOrderRefundIdKey, qncOrderRefundOrderIdKey, qncOrderRefundPlatformRefundIdKey, qncOrderRefundRefundNoKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultOrderRefundModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *OrderRefund) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "OrderRefundModel delete err : %+v", err) + } + return nil +} + +func (m *defaultOrderRefundModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultOrderRefundModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultOrderRefundModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*OrderRefund, error) { + + builder = builder.Columns(orderRefundRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*OrderRefund + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*OrderRefund, error) { + + builder = builder.Columns(orderRefundRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*OrderRefund + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*OrderRefund, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(orderRefundRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*OrderRefund + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultOrderRefundModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*OrderRefund, error) { + + builder = builder.Columns(orderRefundRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*OrderRefund + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*OrderRefund, error) { + + builder = builder.Columns(orderRefundRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*OrderRefund + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultOrderRefundModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultOrderRefundModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultOrderRefundModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncOrderRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundIdPrefix, id) + qncOrderRefundOrderIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundOrderIdPrefix, data.OrderId) + qncOrderRefundPlatformRefundIdKey := fmt.Sprintf("%s%v", cacheQncOrderRefundPlatformRefundIdPrefix, data.PlatformRefundId) + qncOrderRefundRefundNoKey := fmt.Sprintf("%s%v", cacheQncOrderRefundRefundNoPrefix, data.RefundNo) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncOrderRefundIdKey, qncOrderRefundOrderIdKey, qncOrderRefundPlatformRefundIdKey, qncOrderRefundRefundNoKey) + return err +} +func (m *defaultOrderRefundModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncOrderRefundIdPrefix, primary) +} +func (m *defaultOrderRefundModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", orderRefundRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultOrderRefundModel) tableName() string { + return m.table +} diff --git a/app/main/model/queryCleanupConfigModel.go b/app/main/model/queryCleanupConfigModel.go new file mode 100644 index 0000000..1c69371 --- /dev/null +++ b/app/main/model/queryCleanupConfigModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ QueryCleanupConfigModel = (*customQueryCleanupConfigModel)(nil) + +type ( + // QueryCleanupConfigModel is an interface to be customized, add more methods here, + // and implement the added methods in customQueryCleanupConfigModel. + QueryCleanupConfigModel interface { + queryCleanupConfigModel + } + + customQueryCleanupConfigModel struct { + *defaultQueryCleanupConfigModel + } +) + +// NewQueryCleanupConfigModel returns a model for the database table. +func NewQueryCleanupConfigModel(conn sqlx.SqlConn, c cache.CacheConf) QueryCleanupConfigModel { + return &customQueryCleanupConfigModel{ + defaultQueryCleanupConfigModel: newQueryCleanupConfigModel(conn, c), + } +} diff --git a/app/main/model/queryCleanupConfigModel_gen.go b/app/main/model/queryCleanupConfigModel_gen.go new file mode 100644 index 0000000..7e18db3 --- /dev/null +++ b/app/main/model/queryCleanupConfigModel_gen.go @@ -0,0 +1,409 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + queryCleanupConfigFieldNames = builder.RawFieldNames(&QueryCleanupConfig{}) + queryCleanupConfigRows = strings.Join(queryCleanupConfigFieldNames, ",") + queryCleanupConfigRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupConfigFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + queryCleanupConfigRowsWithPlaceHolder = strings.Join(stringx.Remove(queryCleanupConfigFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncQueryCleanupConfigIdPrefix = "cache:qnc:queryCleanupConfig:id:" + cacheQncQueryCleanupConfigConfigKeyPrefix = "cache:qnc:queryCleanupConfig:configKey:" +) + +type ( + queryCleanupConfigModel interface { + Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*QueryCleanupConfig, error) + FindOneByConfigKey(ctx context.Context, configKey string) (*QueryCleanupConfig, error) + Update(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*QueryCleanupConfig, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupConfig, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupConfig, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupConfig, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupConfig, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultQueryCleanupConfigModel struct { + sqlc.CachedConn + table string + } + + QueryCleanupConfig struct { + Id int64 `db:"id"` // 主键ID + CreateTime time.Time `db:"create_time"` // 创建时间 + UpdateTime time.Time `db:"update_time"` // 更新时间 + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` // 删除状态:0-未删除,1-已删除 + Version int64 `db:"version"` // 版本号 + ConfigKey string `db:"config_key"` // 配置键 + ConfigValue string `db:"config_value"` // 配置值 + ConfigDesc string `db:"config_desc"` // 配置说明 + Status int64 `db:"status"` // 状态:1-启用,2-禁用 + } +) + +func newQueryCleanupConfigModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultQueryCleanupConfigModel { + return &defaultQueryCleanupConfigModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`query_cleanup_config`", + } +} + +func (m *defaultQueryCleanupConfigModel) Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigConfigKeyPrefix, data.ConfigKey) + qncQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, queryCleanupConfigRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ConfigKey, data.ConfigValue, data.ConfigDesc, data.Status) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ConfigKey, data.ConfigValue, data.ConfigDesc, data.Status) + }, qncQueryCleanupConfigConfigKeyKey, qncQueryCleanupConfigIdKey) +} + +func (m *defaultQueryCleanupConfigModel) FindOne(ctx context.Context, id int64) (*QueryCleanupConfig, error) { + qncQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigIdPrefix, id) + var resp QueryCleanupConfig + err := m.QueryRowCtx(ctx, &resp, qncQueryCleanupConfigIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupConfigRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultQueryCleanupConfigModel) FindOneByConfigKey(ctx context.Context, configKey string) (*QueryCleanupConfig, error) { + qncQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigConfigKeyPrefix, configKey) + var resp QueryCleanupConfig + err := m.QueryRowIndexCtx(ctx, &resp, qncQueryCleanupConfigConfigKeyKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) { + query := fmt.Sprintf("select %s from %s where `config_key` = ? and del_state = ? limit 1", queryCleanupConfigRows, m.table) + if err := conn.QueryRowCtx(ctx, &resp, query, configKey, globalkey.DelStateNo); err != nil { + return nil, err + } + return resp.Id, nil + }, m.queryPrimary) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultQueryCleanupConfigModel) Update(ctx context.Context, session sqlx.Session, newData *QueryCleanupConfig) (sql.Result, error) { + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return nil, err + } + qncQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigConfigKeyPrefix, data.ConfigKey) + qncQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, queryCleanupConfigRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id) + }, qncQueryCleanupConfigConfigKeyKey, qncQueryCleanupConfigIdKey) +} + +func (m *defaultQueryCleanupConfigModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *QueryCleanupConfig) error { + + oldVersion := newData.Version + newData.Version += 1 + + var sqlResult sql.Result + var err error + + data, err := m.FindOne(ctx, newData.Id) + if err != nil { + return err + } + qncQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigConfigKeyPrefix, data.ConfigKey) + qncQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigIdPrefix, data.Id) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, queryCleanupConfigRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id, oldVersion) + }, qncQueryCleanupConfigConfigKeyKey, qncQueryCleanupConfigIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultQueryCleanupConfigModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "QueryCleanupConfigModel delete err : %+v", err) + } + return nil +} + +func (m *defaultQueryCleanupConfigModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultQueryCleanupConfigModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultQueryCleanupConfigModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*QueryCleanupConfig, error) { + + builder = builder.Columns(queryCleanupConfigRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupConfig + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupConfigModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupConfig, error) { + + builder = builder.Columns(queryCleanupConfigRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupConfig + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupConfigModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupConfig, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(queryCleanupConfigRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*QueryCleanupConfig + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultQueryCleanupConfigModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupConfig, error) { + + builder = builder.Columns(queryCleanupConfigRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupConfig + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupConfigModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupConfig, error) { + + builder = builder.Columns(queryCleanupConfigRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupConfig + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupConfigModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultQueryCleanupConfigModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultQueryCleanupConfigModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + data, err := m.FindOne(ctx, id) + if err != nil { + return err + } + + qncQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigConfigKeyPrefix, data.ConfigKey) + qncQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigIdPrefix, id) + _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncQueryCleanupConfigConfigKeyKey, qncQueryCleanupConfigIdKey) + return err +} +func (m *defaultQueryCleanupConfigModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncQueryCleanupConfigIdPrefix, primary) +} +func (m *defaultQueryCleanupConfigModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupConfigRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultQueryCleanupConfigModel) tableName() string { + return m.table +} diff --git a/app/main/model/queryCleanupDetailModel.go b/app/main/model/queryCleanupDetailModel.go new file mode 100644 index 0000000..52de046 --- /dev/null +++ b/app/main/model/queryCleanupDetailModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ QueryCleanupDetailModel = (*customQueryCleanupDetailModel)(nil) + +type ( + // QueryCleanupDetailModel is an interface to be customized, add more methods here, + // and implement the added methods in customQueryCleanupDetailModel. + QueryCleanupDetailModel interface { + queryCleanupDetailModel + } + + customQueryCleanupDetailModel struct { + *defaultQueryCleanupDetailModel + } +) + +// NewQueryCleanupDetailModel returns a model for the database table. +func NewQueryCleanupDetailModel(conn sqlx.SqlConn, c cache.CacheConf) QueryCleanupDetailModel { + return &customQueryCleanupDetailModel{ + defaultQueryCleanupDetailModel: newQueryCleanupDetailModel(conn, c), + } +} diff --git a/app/main/model/queryCleanupDetailModel_gen.go b/app/main/model/queryCleanupDetailModel_gen.go new file mode 100644 index 0000000..7d2c407 --- /dev/null +++ b/app/main/model/queryCleanupDetailModel_gen.go @@ -0,0 +1,373 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + queryCleanupDetailFieldNames = builder.RawFieldNames(&QueryCleanupDetail{}) + queryCleanupDetailRows = strings.Join(queryCleanupDetailFieldNames, ",") + queryCleanupDetailRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupDetailFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + queryCleanupDetailRowsWithPlaceHolder = strings.Join(stringx.Remove(queryCleanupDetailFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncQueryCleanupDetailIdPrefix = "cache:qnc:queryCleanupDetail:id:" +) + +type ( + queryCleanupDetailModel interface { + Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*QueryCleanupDetail, error) + Update(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*QueryCleanupDetail, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupDetail, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupDetail, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupDetail, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupDetail, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultQueryCleanupDetailModel struct { + sqlc.CachedConn + table string + } + + QueryCleanupDetail struct { + Id int64 `db:"id"` // 主键ID + CreateTime time.Time `db:"create_time"` // 创建时间 + UpdateTime time.Time `db:"update_time"` // 更新时间 + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` // 删除状态:0-未删除,1-已删除 + Version int64 `db:"version"` // 版本号 + CleanupLogId int64 `db:"cleanup_log_id"` // 关联的清理日志ID + QueryId int64 `db:"query_id"` // 被清理的查询记录ID + OrderId int64 `db:"order_id"` // 关联的订单ID + UserId int64 `db:"user_id"` // 关联的用户ID + ProductId int64 `db:"product_id"` // 关联的产品ID + QueryState string `db:"query_state"` // 查询状态 + CreateTimeOld time.Time `db:"create_time_old"` // 原记录创建时间 + } +) + +func newQueryCleanupDetailModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultQueryCleanupDetailModel { + return &defaultQueryCleanupDetailModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`query_cleanup_detail`", + } +} + +func (m *defaultQueryCleanupDetailModel) Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupDetailIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, queryCleanupDetailRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld) + }, qncQueryCleanupDetailIdKey) +} + +func (m *defaultQueryCleanupDetailModel) FindOne(ctx context.Context, id int64) (*QueryCleanupDetail, error) { + qncQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupDetailIdPrefix, id) + var resp QueryCleanupDetail + err := m.QueryRowCtx(ctx, &resp, qncQueryCleanupDetailIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupDetailRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultQueryCleanupDetailModel) Update(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error) { + qncQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupDetailIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, queryCleanupDetailRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id) + }, qncQueryCleanupDetailIdKey) +} + +func (m *defaultQueryCleanupDetailModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) error { + + oldVersion := data.Version + data.Version += 1 + + var sqlResult sql.Result + var err error + + qncQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupDetailIdPrefix, data.Id) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, queryCleanupDetailRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id, oldVersion) + }, qncQueryCleanupDetailIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultQueryCleanupDetailModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "QueryCleanupDetailModel delete err : %+v", err) + } + return nil +} + +func (m *defaultQueryCleanupDetailModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultQueryCleanupDetailModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultQueryCleanupDetailModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*QueryCleanupDetail, error) { + + builder = builder.Columns(queryCleanupDetailRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupDetail + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupDetailModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupDetail, error) { + + builder = builder.Columns(queryCleanupDetailRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupDetail + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupDetailModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupDetail, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(queryCleanupDetailRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*QueryCleanupDetail + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultQueryCleanupDetailModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupDetail, error) { + + builder = builder.Columns(queryCleanupDetailRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupDetail + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupDetailModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupDetail, error) { + + builder = builder.Columns(queryCleanupDetailRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupDetail + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupDetailModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultQueryCleanupDetailModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultQueryCleanupDetailModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + qncQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupDetailIdPrefix, id) + _, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncQueryCleanupDetailIdKey) + return err +} +func (m *defaultQueryCleanupDetailModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncQueryCleanupDetailIdPrefix, primary) +} +func (m *defaultQueryCleanupDetailModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupDetailRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultQueryCleanupDetailModel) tableName() string { + return m.table +} diff --git a/app/main/model/queryCleanupLogModel.go b/app/main/model/queryCleanupLogModel.go new file mode 100644 index 0000000..b64cb69 --- /dev/null +++ b/app/main/model/queryCleanupLogModel.go @@ -0,0 +1,27 @@ +package model + +import ( + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +var _ QueryCleanupLogModel = (*customQueryCleanupLogModel)(nil) + +type ( + // QueryCleanupLogModel is an interface to be customized, add more methods here, + // and implement the added methods in customQueryCleanupLogModel. + QueryCleanupLogModel interface { + queryCleanupLogModel + } + + customQueryCleanupLogModel struct { + *defaultQueryCleanupLogModel + } +) + +// NewQueryCleanupLogModel returns a model for the database table. +func NewQueryCleanupLogModel(conn sqlx.SqlConn, c cache.CacheConf) QueryCleanupLogModel { + return &customQueryCleanupLogModel{ + defaultQueryCleanupLogModel: newQueryCleanupLogModel(conn, c), + } +} diff --git a/app/main/model/queryCleanupLogModel_gen.go b/app/main/model/queryCleanupLogModel_gen.go new file mode 100644 index 0000000..40b85e1 --- /dev/null +++ b/app/main/model/queryCleanupLogModel_gen.go @@ -0,0 +1,372 @@ +// Code generated by goctl. DO NOT EDIT! + +package model + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "time" + + "github.com/Masterminds/squirrel" + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/cache" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" + "qnc-server/common/globalkey" +) + +var ( + queryCleanupLogFieldNames = builder.RawFieldNames(&QueryCleanupLog{}) + queryCleanupLogRows = strings.Join(queryCleanupLogFieldNames, ",") + queryCleanupLogRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupLogFieldNames, "`id`", "`create_time`", "`update_time`"), ",") + queryCleanupLogRowsWithPlaceHolder = strings.Join(stringx.Remove(queryCleanupLogFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?" + + cacheQncQueryCleanupLogIdPrefix = "cache:qnc:queryCleanupLog:id:" +) + +type ( + queryCleanupLogModel interface { + Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error) + FindOne(ctx context.Context, id int64) (*QueryCleanupLog, error) + Update(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error) + UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) error + Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error + SelectBuilder() squirrel.SelectBuilder + DeleteSoft(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) error + FindSum(ctx context.Context, sumBuilder squirrel.SelectBuilder, field string) (float64, error) + FindCount(ctx context.Context, countBuilder squirrel.SelectBuilder, field string) (int64, error) + FindAll(ctx context.Context, rowBuilder squirrel.SelectBuilder, orderBy string) ([]*QueryCleanupLog, error) + FindPageListByPage(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupLog, error) + FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupLog, int64, error) + FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupLog, error) + FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupLog, error) + Delete(ctx context.Context, session sqlx.Session, id int64) error + } + + defaultQueryCleanupLogModel struct { + sqlc.CachedConn + table string + } + + QueryCleanupLog struct { + Id int64 `db:"id"` // 主键ID + CreateTime time.Time `db:"create_time"` // 创建时间 + UpdateTime time.Time `db:"update_time"` // 更新时间 + DeleteTime sql.NullTime `db:"delete_time"` // 删除时间 + DelState int64 `db:"del_state"` // 删除状态:0-未删除,1-已删除 + Version int64 `db:"version"` // 版本号 + CleanupTime time.Time `db:"cleanup_time"` // 清理执行时间 + CleanupBefore time.Time `db:"cleanup_before"` // 清理截止时间 + AffectedRows int64 `db:"affected_rows"` // 影响行数 + Status int64 `db:"status"` // 状态:1-成功,2-失败 + ErrorMsg sql.NullString `db:"error_msg"` // 错误信息 + Remark sql.NullString `db:"remark"` // 备注说明 + } +) + +func newQueryCleanupLogModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultQueryCleanupLogModel { + return &defaultQueryCleanupLogModel{ + CachedConn: sqlc.NewConn(conn, c), + table: "`query_cleanup_log`", + } +} + +func (m *defaultQueryCleanupLogModel) Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error) { + data.DelState = globalkey.DelStateNo + qncQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupLogIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, queryCleanupLogRowsExpectAutoSet) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark) + }, qncQueryCleanupLogIdKey) +} + +func (m *defaultQueryCleanupLogModel) FindOne(ctx context.Context, id int64) (*QueryCleanupLog, error) { + qncQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupLogIdPrefix, id) + var resp QueryCleanupLog + err := m.QueryRowCtx(ctx, &resp, qncQueryCleanupLogIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupLogRows, m.table) + return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo) + }) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultQueryCleanupLogModel) Update(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error) { + qncQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupLogIdPrefix, data.Id) + return m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, queryCleanupLogRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id) + }, qncQueryCleanupLogIdKey) +} + +func (m *defaultQueryCleanupLogModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) error { + + oldVersion := data.Version + data.Version += 1 + + var sqlResult sql.Result + var err error + + qncQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupLogIdPrefix, data.Id) + sqlResult, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("update %s set %s where `id` = ? and version = ? ", m.table, queryCleanupLogRowsWithPlaceHolder) + if session != nil { + return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id, oldVersion) + } + return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id, oldVersion) + }, qncQueryCleanupLogIdKey) + if err != nil { + return err + } + updateCount, err := sqlResult.RowsAffected() + if err != nil { + return err + } + if updateCount == 0 { + return ErrNoRowsUpdate + } + + return nil +} + +func (m *defaultQueryCleanupLogModel) DeleteSoft(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) error { + data.DelState = globalkey.DelStateYes + data.DeleteTime = sql.NullTime{Time: time.Now(), Valid: true} + if err := m.UpdateWithVersion(ctx, session, data); err != nil { + return errors.Wrapf(errors.New("delete soft failed "), "QueryCleanupLogModel delete err : %+v", err) + } + return nil +} + +func (m *defaultQueryCleanupLogModel) FindSum(ctx context.Context, builder squirrel.SelectBuilder, field string) (float64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindSum Least One Field"), "FindSum Least One Field") + } + + builder = builder.Columns("IFNULL(SUM(" + field + "),0)") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp float64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultQueryCleanupLogModel) FindCount(ctx context.Context, builder squirrel.SelectBuilder, field string) (int64, error) { + + if len(field) == 0 { + return 0, errors.Wrapf(errors.New("FindCount Least One Field"), "FindCount Least One Field") + } + + builder = builder.Columns("COUNT(" + field + ")") + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return 0, err + } + + var resp int64 + err = m.QueryRowNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return 0, err + } +} + +func (m *defaultQueryCleanupLogModel) FindAll(ctx context.Context, builder squirrel.SelectBuilder, orderBy string) ([]*QueryCleanupLog, error) { + + builder = builder.Columns(queryCleanupLogRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupLog + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupLogModel) FindPageListByPage(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupLog, error) { + + builder = builder.Columns(queryCleanupLogRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupLog + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupLogModel) FindPageListByPageWithTotal(ctx context.Context, builder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupLog, int64, error) { + + total, err := m.FindCount(ctx, builder, "id") + if err != nil { + return nil, 0, err + } + + builder = builder.Columns(queryCleanupLogRows) + + if orderBy == "" { + builder = builder.OrderBy("id DESC") + } else { + builder = builder.OrderBy(orderBy) + } + + if page < 1 { + page = 1 + } + offset := (page - 1) * pageSize + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).Offset(uint64(offset)).Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, total, err + } + + var resp []*QueryCleanupLog + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, total, nil + default: + return nil, total, err + } +} + +func (m *defaultQueryCleanupLogModel) FindPageListByIdDESC(ctx context.Context, builder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupLog, error) { + + builder = builder.Columns(queryCleanupLogRows) + + if preMinId > 0 { + builder = builder.Where(" id < ? ", preMinId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id DESC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupLog + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupLogModel) FindPageListByIdASC(ctx context.Context, builder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupLog, error) { + + builder = builder.Columns(queryCleanupLogRows) + + if preMaxId > 0 { + builder = builder.Where(" id > ? ", preMaxId) + } + + query, values, err := builder.Where("del_state = ?", globalkey.DelStateNo).OrderBy("id ASC").Limit(uint64(pageSize)).ToSql() + if err != nil { + return nil, err + } + + var resp []*QueryCleanupLog + err = m.QueryRowsNoCacheCtx(ctx, &resp, query, values...) + switch err { + case nil: + return resp, nil + default: + return nil, err + } +} + +func (m *defaultQueryCleanupLogModel) Trans(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { + + return m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { + return fn(ctx, session) + }) + +} + +func (m *defaultQueryCleanupLogModel) SelectBuilder() squirrel.SelectBuilder { + return squirrel.Select().From(m.table) +} +func (m *defaultQueryCleanupLogModel) Delete(ctx context.Context, session sqlx.Session, id int64) error { + qncQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheQncQueryCleanupLogIdPrefix, id) + _, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { + query := fmt.Sprintf("delete from %s where `id` = ?", m.table) + if session != nil { + return session.ExecCtx(ctx, query, id) + } + return conn.ExecCtx(ctx, query, id) + }, qncQueryCleanupLogIdKey) + return err +} +func (m *defaultQueryCleanupLogModel) formatPrimary(primary interface{}) string { + return fmt.Sprintf("%s%v", cacheQncQueryCleanupLogIdPrefix, primary) +} +func (m *defaultQueryCleanupLogModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error { + query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupLogRows, m.table) + return conn.QueryRowCtx(ctx, v, query, primary, globalkey.DelStateNo) +} + +func (m *defaultQueryCleanupLogModel) tableName() string { + return m.table +} diff --git a/app/main/model/queryModel.go b/app/main/model/queryModel.go index 4c63b98..1da5a84 100644 --- a/app/main/model/queryModel.go +++ b/app/main/model/queryModel.go @@ -31,7 +31,6 @@ func NewQueryModel(conn sqlx.SqlConn, c cache.CacheConf) QueryModel { defaultQueryModel: newQueryModel(conn, c), } } - func (m *customQueryModel) DeleteBefore(ctx context.Context, before time.Time) (int64, error) { var affected int64 = 0 diff --git a/app/main/model/vars.go b/app/main/model/vars.go index 5ea6b65..bd5a3f0 100644 --- a/app/main/model/vars.go +++ b/app/main/model/vars.go @@ -39,12 +39,18 @@ const ( OrderStatusRefunded = "refunded" OrderStatusClosed = "closed" ) - +const ( + OrderRefundStatusPending = "pending" + OrderRefundStatusSuccess = "success" + OrderRefundStatusFailed = "failed" + OrderRefundStatusClosed = "closed" +) const ( QueryStatePending = "pending" QueryStateFailed = "failed" QueryStateSuccess = "success" QueryStateProcessing = "processing" + QueryStateCleaned = "cleaned" ) const ( diff --git a/app/user/cmd/api/.air.toml b/app/user/cmd/api/.air.toml deleted file mode 100644 index a062f6e..0000000 --- a/app/user/cmd/api/.air.toml +++ /dev/null @@ -1,21 +0,0 @@ -# 用户api服务的air配置 -root = "." -tmp_dir = "tmp" - -[build] -cmd = "go build -o ./tmp/user-api ." -bin = "./tmp/user-api -f etc/user.yaml" -include_ext = ["go", "yaml"] -exclude_dir = ["tmp", "vendor"] -include_dir = ["internal", "etc"] -exclude_regex = ["_test\\.go"] -delay = 1000 - -[log] -time = true - -[color] -main = "red" -watcher = "cyan" -build = "yellow" -runner = "green" \ No newline at end of file diff --git a/deploy/script/README.md b/deploy/script/README.md deleted file mode 100644 index e8d77ab..0000000 --- a/deploy/script/README.md +++ /dev/null @@ -1,163 +0,0 @@ -# Go-Zero 代码生成工具 - -这是一个用于 Go-Zero 微服务项目的代码生成工具,支持生成数据库模型和 API 代码。 - -## 功能特性 - -- 数据库模型生成:支持生成 Go-Zero 风格的数据库模型代码 -- API 代码生成:支持生成 API 服务相关代码 -- 灵活的表名管理:支持通过命令行指定表名,无需修改配置文件 -- 配置文件支持:通过 config.json 配置数据库连接和表列表 -- 命令行参数:支持通过命令行参数覆盖配置文件设置 - -## 安装 - -确保你的系统已安装 Node.js(10.0+)。 - -```bash -# 安装依赖 -cd deploy/script -npm install -``` - -## 使用方法 - -### 查看配置 - -```bash -npm run config -``` - -### 生成所有配置的表模型 - -```bash -npm run model -``` - -### 生成指定表的模型 - -```bash -# 生成单个表 -npm run model:table agent - -# 生成多个表(逗号分隔,不含空格) -npm run model:tables agent,user,order - -# 或者使用完整命令 -node codegen.js model --tables agent,user,order -``` - -### 排除指定表 - -```bash -# 从配置的表中排除某些表 -npm run model:exclude user,order - -# 或者使用完整命令 -node codegen.js model --exclude user,order -``` - -### 生成所有数据库表的模型 - -```bash -npm run model:all - -# 生成所有表但排除某些表 -node codegen.js model --all --exclude system_table,temp_table -``` - -### 保存表配置 - -```bash -# 生成指定表并保存到配置文件 -npm run model:save agent,user,order -- --save - -# 或者使用完整命令 -node codegen.js model --tables agent,user,order --save -``` - -### 生成 API 代码 - -```bash -npm run api -``` - -### 生成带样式的 API 代码 - -```bash -npm run api:style -``` - -### 查看帮助信息 - -```bash -npm run help -``` - -## 配置文件 - -所有配置都保存在`config.json`文件中,你可以编辑此文件来修改数据库连接信息和要生成的表列表: - -```json -{ - "model": { - "dbUrl": "user:password@tcp(host:port)/database", - "outputDir": "./model", - "templateDir": "../template", - "targetDir": "../../app/user/model", - "tables": ["table1", "table2"], - "disabledTables": ["disabled_table1"] - }, - "api": { - "apiFile": "./app/user/cmd/api/desc/main.api", - "outputDir": "./app/user/cmd/api", - "templateDir": "./deploy/template", - "useStyle": false - } -} -``` - -## 表名管理 - -本工具提供了多种方式来指定需要生成的表: - -1. **配置文件指定**:在`config.json`的`tables`数组中列出要生成的表 -2. **命令行指定单个表**:使用`--table`参数指定单个表 -3. **命令行指定多个表**:使用`--tables`参数指定多个表(逗号分隔) -4. **排除特定表**:使用`--exclude`参数排除特定表 -5. **生成所有表**:使用`--all`参数生成数据库中的所有表 -6. **保存到配置**:使用`--save`参数将当前指定的表保存到配置文件 - -这种灵活的表名管理方式使你可以根据需要随时调整要生成的表,而无需频繁修改配置文件。 - -## 高级用法 - -### 通过命令行参数覆盖配置 - -```bash -# 使用不同的数据库连接 -node codegen.js model --db-url "user:pass@tcp(localhost:3306)/otherdb" - -# 使用不同的API文件 -node codegen.js api --api ./other_api.api - -# 指定输出目录 -node codegen.js api --dir ./output -``` - -### 组合使用参数 - -```bash -# 生成所有表但排除系统表,并使用自定义模板 -node codegen.js model --all --exclude system_log,system_user --template ./my-templates - -# 生成指定表并保存到配置 -node codegen.js model --tables user,order,product --save -``` - -## 脚本文件说明 - -- `codegen.js` - 统一入口脚本 -- `gen_models.js` - 模型生成脚本 -- `gen_api.js` - API 生成脚本 -- `config.json` - 配置文件 diff --git a/deploy/script/codegen.js b/deploy/script/codegen.js deleted file mode 100644 index 78cc773..0000000 --- a/deploy/script/codegen.js +++ /dev/null @@ -1,444 +0,0 @@ -#!/usr/bin/env node - -/** - * 代码生成统一入口脚本 - * 整合了model生成和api生成功能 - */ - -const { execSync } = require('child_process'); -const fs = require('fs'); -const path = require('path'); -const { generateApi } = require('./gen_api'); - -// 读取配置文件 -const CONFIG_FILE = path.join(__dirname, 'config.json'); -let config = {}; - -try { - if (fs.existsSync(CONFIG_FILE)) { - const configContent = fs.readFileSync(CONFIG_FILE, 'utf8'); - config = JSON.parse(configContent); - console.log('Configuration loaded from config.json'); - } else { - console.log('config.json not found, using default settings'); - } -} catch (error) { - console.error('Error loading configuration:', error.message); - console.log('Using default settings'); -} - -// 默认数据库配置 -const modelConfig = config.model || { - // 数据库连接信息 - dbUrl: 'qnc:5vg67b3UNHu8@tcp(127.0.0.1:21001)/qnc', - // 输出目录 - outputDir: './model', - // 模板目录 - templateDir: '../template', - // 目标目录 - targetDir: '../../app/user/model', - // 表名列表 - tables: [ - 'agent', - 'agent_audit', - 'agent_real_name' - ], - // 禁用的表名列表 - disabledTables: [] -}; - -// 默认API配置 -const apiConfig = config.api || { - // API定义文件路径 - apiFile: './app/user/cmd/api/desc/main.api', - // 输出目录 - outputDir: './app/user/cmd/api', - // 模板目录 - templateDir: './deploy/template', - // 是否使用样式 - useStyle: false -}; - -/** - * 将表名转换为驼峰命名法 - * @param {string} tableName 表名 - * @returns {string} 驼峰命名的表名 - */ -function convertToCamelCase(tableName) { - try { - // 将表名按_分割,并将每个部分首字母大写 - const parts = tableName.split('_'); - let camelCase = ''; - for (const part of parts) { - if (part.length > 0) { - camelCase += part.charAt(0).toUpperCase() + part.slice(1).toLowerCase(); - } - } - return camelCase; - } catch (error) { - console.error(`Error in convertToCamelCase for table: ${tableName}`); - console.error(error.message); - return tableName; // 出错时返回原表名 - } -} - -/** - * 确保目录存在 - * @param {string} dirPath 目录路径 - */ -function ensureDirectoryExists(dirPath) { - if (!fs.existsSync(dirPath)) { - console.log(`Creating directory: ${dirPath}`); - fs.mkdirSync(dirPath, { recursive: true }); - } -} - -/** - * 为单个表生成模型 - * @param {string} table 表名 - * @param {object} config 配置信息 - */ -function generateModelForTable(table, config) { - try { - console.log('========================================='); - console.log(`Processing table: ${table}`); - - // 生成模型 - console.log('Generating model...'); - const command = `goctl model mysql datasource -url="${config.dbUrl}" -table="${table}" -dir="${config.outputDir}" --home="${config.templateDir}" -cache=true --style=goZero`; - console.log(`Running command: ${command}`); - - execSync(command, { stdio: 'inherit' }); - - // 将表名转换为驼峰命名法 - const camelCaseName = convertToCamelCase(table); - console.log(`Table name converted to: ${camelCaseName}`); - - // 定义源文件和目标文件路径 - const sourceModelFile = path.join(config.outputDir, `${camelCaseName}Model.go`); - const sourceModelGenFile = path.join(config.outputDir, `${camelCaseName}Model_gen.go`); - const targetModelFile = path.join(config.targetDir, `${camelCaseName}Model.go`); - const targetModelGenFile = path.join(config.targetDir, `${camelCaseName}Model_gen.go`); - - console.log('Source files:'); - console.log(` - ${sourceModelFile}`); - console.log(` - ${sourceModelGenFile}`); - console.log('Target files:'); - console.log(` - ${targetModelFile}`); - console.log(` - ${targetModelGenFile}`); - - // 检查源文件是否存在并移动 - if (fs.existsSync(sourceModelFile)) { - console.log(`Moving ${sourceModelFile} to ${targetModelFile}`); - fs.copyFileSync(sourceModelFile, targetModelFile); - fs.unlinkSync(sourceModelFile); - } else { - console.log(`WARNING: Source file not found: ${sourceModelFile}`); - } - - if (fs.existsSync(sourceModelGenFile)) { - console.log(`Moving ${sourceModelGenFile} to ${targetModelGenFile}`); - fs.copyFileSync(sourceModelGenFile, targetModelGenFile); - fs.unlinkSync(sourceModelGenFile); - } else { - console.log(`WARNING: Source file not found: ${sourceModelGenFile}`); - } - - console.log(`Processing completed for table: ${table}`); - } catch (error) { - console.error(`ERROR processing table: ${table}`); - console.error(error.message); - console.error(error.stack); - } -} - -/** - * 生成指定表列表的模型 - * @param {string[]} tables 表名列表 - * @param {object} config 配置信息 - */ -function generateModels(tables, config) { - try { - // 确保目录存在 - ensureDirectoryExists(config.outputDir); - ensureDirectoryExists(config.targetDir); - - if (tables.length === 0) { - console.log('No tables specified for generation.'); - return; - } - - // 为每个表生成模型 - for (const table of tables) { - generateModelForTable(table, config); - } - - console.log('========================================='); - console.log('All models generated successfully.'); - } catch (error) { - console.error('ERROR in model generation:'); - console.error(error.message); - console.error(error.stack); - process.exit(1); - } -} - -/** - * 从数据库获取所有表名 - * @param {string} dbUrl 数据库连接URL - * @returns {Promise} 表名列表 - */ -async function getAllTablesFromDB(dbUrl) { - try { - // 解析数据库连接信息 - const dbName = dbUrl.split('/').pop().split('?')[0]; - console.log(`Fetching all tables from database: ${dbName}`); - - // 这里需要实现从数据库获取所有表的逻辑 - // 由于需要依赖额外的库,这里只是示例 - // 实际实现可能需要使用mysql2或其他数据库客户端库 - - // 模拟返回一些表名 - return [ - 'agent', - 'agent_audit', - 'agent_real_name', - 'agent_active_stat', - 'agent_closure', - 'agent_commission', - 'agent_commission_deduction', - 'agent_link', - 'agent_membership_config', - 'agent_membership_recharge_order', - 'agent_membership_user_config', - 'agent_order', - 'agent_platform_deduction', - 'agent_product_config', - 'agent_rewards', - 'agent_wallet', - 'agent_withdrawal', - 'feature', - 'global_notifications', - 'order', - 'product', - 'product_feature', - 'query', - 'user', - 'user_auth', - 'example', - 'authorization', - 'authorization_face' - ]; - } catch (error) { - console.error('Error fetching tables from database:', error.message); - return []; - } -} - -/** - * 显示配置信息 - */ -function showConfig() { - console.log('========================================='); - console.log('Current Configuration:'); - console.log('\nModel Configuration:'); - console.log(' Database URL:', modelConfig.dbUrl); - console.log(' Output Directory:', modelConfig.outputDir); - console.log(' Template Directory:', modelConfig.templateDir); - console.log(' Target Directory:', modelConfig.targetDir); - console.log(' Tables:'); - modelConfig.tables.forEach(table => console.log(` - ${table}`)); - - if (modelConfig.disabledTables && modelConfig.disabledTables.length > 0) { - console.log(' Disabled Tables:'); - modelConfig.disabledTables.forEach(table => console.log(` - ${table}`)); - } - - console.log('\nAPI Configuration:'); - console.log(' API File:', apiConfig.apiFile); - console.log(' Output Directory:', apiConfig.outputDir); - console.log(' Template Directory:', apiConfig.templateDir); - console.log(' Use Style:', apiConfig.useStyle ? 'Yes' : 'No'); - console.log('========================================='); -} - -/** - * 保存配置到文件 - * @param {object} config 配置对象 - */ -function saveConfig(config) { - try { - fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 4), 'utf8'); - console.log('Configuration saved to config.json'); - } catch (error) { - console.error('Error saving configuration:', error.message); - } -} - -/** - * 显示帮助信息 - */ -function showHelp() { - console.log('Usage: node codegen.js [options]'); - console.log('Commands:'); - console.log(' model Generate database models'); - console.log(' api Generate API code'); - console.log(' config Show current configuration'); - console.log(' help Show this help message'); - console.log(''); - console.log('Model Options:'); - console.log(' --table Generate model for specific table'); - console.log(' --tables Generate models for specific tables (comma-separated)'); - console.log(' --exclude Exclude specific tables (comma-separated)'); - console.log(' --all Generate models for all tables in database'); - console.log(' --db-url Database connection URL'); - console.log(' --template Template directory'); - console.log(' --save Save specified tables to config.json'); - console.log(''); - console.log('API Options:'); - console.log(' --api API definition file path'); - console.log(' --dir Output directory'); - console.log(' --template Template directory'); - console.log(' --style Use goZero style'); - console.log(''); - console.log('Configuration:'); - console.log(' Settings are loaded from config.json'); - console.log(' Command line options override config file settings'); - console.log(''); - console.log('Examples:'); - console.log(' node codegen.js model --table agent'); - console.log(' node codegen.js model --tables agent,user,order'); - console.log(' node codegen.js model --exclude user,order'); - console.log(' node codegen.js model --all --exclude system_table'); - console.log(' node codegen.js model --tables agent,user --save'); - process.exit(0); -} - -/** - * 主函数 - */ -async function main() { - // 解析命令行参数 - const args = process.argv.slice(2); - - if (args.length === 0 || args[0] === 'help') { - showHelp(); - } - - const command = args[0]; - - // 显示配置信息 - if (command === 'config') { - showConfig(); - return; - } - - // 处理模型生成命令 - if (command === 'model') { - const config = { ...modelConfig }; - let singleTable = null; - let tablesToGenerate = [...config.tables]; - let excludeTables = []; - let shouldSaveConfig = false; - let generateAllTables = false; - - // 处理其他参数 - for (let i = 1; i < args.length; i++) { - const arg = args[i]; - - if (arg === '--table' && i + 1 < args.length) { - singleTable = args[++i]; - tablesToGenerate = [singleTable]; - } else if (arg === '--tables' && i + 1 < args.length) { - const tableList = args[++i].split(',').map(t => t.trim()).filter(t => t); - tablesToGenerate = tableList; - } else if (arg === '--exclude' && i + 1 < args.length) { - excludeTables = args[++i].split(',').map(t => t.trim()).filter(t => t); - } else if (arg === '--all') { - generateAllTables = true; - } else if (arg === '--db-url' && i + 1 < args.length) { - config.dbUrl = args[++i]; - } else if (arg === '--template' && i + 1 < args.length) { - config.templateDir = args[++i]; - } else if (arg === '--save') { - shouldSaveConfig = true; - } - } - - // 如果指定了--all参数,获取所有表名 - if (generateAllTables) { - tablesToGenerate = await getAllTablesFromDB(config.dbUrl); - } - - // 排除指定的表 - if (excludeTables.length > 0) { - tablesToGenerate = tablesToGenerate.filter(table => !excludeTables.includes(table)); - } - - // 保存配置 - if (shouldSaveConfig) { - const newConfig = { ...config }; - newConfig.tables = tablesToGenerate; - - // 更新配置文件 - if (fs.existsSync(CONFIG_FILE)) { - const existingConfig = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8')); - existingConfig.model = newConfig; - saveConfig(existingConfig); - } else { - saveConfig({ model: newConfig, api: apiConfig }); - } - } - - // 生成单个表的模型或所有表的模型 - if (singleTable) { - generateModelForTable(singleTable, config); - } else { - generateModels(tablesToGenerate, config); - } - } - // 处理API生成命令 - else if (command === 'api') { - const config = { ...apiConfig }; - - // 处理其他参数 - for (let i = 1; i < args.length; i++) { - const arg = args[i]; - - if (arg === '--api' && i + 1 < args.length) { - config.apiFile = args[++i]; - } else if (arg === '--dir' && i + 1 < args.length) { - config.outputDir = args[++i]; - } else if (arg === '--template' && i + 1 < args.length) { - config.templateDir = args[++i]; - } else if (arg === '--style') { - config.useStyle = true; - } - } - - // 生成API代码 - generateApi(config); - } - else { - console.error(`Unknown command: ${command}`); - showHelp(); - } -} - -// 执行主函数 -if (require.main === module) { - main().catch(err => { - console.error('Error in main execution:', err); - process.exit(1); - }); -} - -// 导出函数,以便其他脚本可以调用 -module.exports = { - generateModels, - generateModelForTable, - generateApi, - showConfig, - saveConfig, - getAllTablesFromDB -}; \ No newline at end of file diff --git a/deploy/script/config.json b/deploy/script/config.json deleted file mode 100644 index 1453c0b..0000000 --- a/deploy/script/config.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "model": { - "dbUrl": "qnc:5vg67b3UNHu8@tcp(127.0.0.1:21001)/qnc", - "outputDir": "./model", - "templateDir": "../template", - "targetDir": "../../app/user/model", - "tables": [ - "agent", - "agent_audit", - "agent_real_name" - ], - "disabledTables": [ - "agent_active_stat", - "agent_closure", - "agent_commission", - "agent_commission_deduction", - "agent_link", - "agent_membership_config", - "agent_membership_recharge_order", - "agent_membership_user_config", - "agent_order", - "agent_platform_deduction", - "agent_product_config", - "agent_rewards", - "agent_wallet", - "agent_withdrawal", - "feature", - "global_notifications", - "order", - "product", - "product_feature", - "query", - "user", - "user_auth", - "example", - "authorization", - "authorization_face" - ] - }, - "api": { - "apiFile": "./app/user/cmd/api/desc/main.api", - "outputDir": "./app/user/cmd/api", - "templateDir": "./deploy/template", - "useStyle": false - } -} \ No newline at end of file diff --git a/deploy/script/gen_api.js b/deploy/script/gen_api.js deleted file mode 100644 index cc6f837..0000000 --- a/deploy/script/gen_api.js +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env node - -/** - * API代码生成脚本 - * 功能等同于gen_api.ps1 - */ - -const { execSync } = require('child_process'); -const fs = require('fs'); -const path = require('path'); - -// 配置信息 -const config = { - // API定义文件路径 - apiFile: './app/user/cmd/api/desc/main.api', - // 输出目录 - outputDir: './app/user/cmd/api', - // 模板目录 - templateDir: './deploy/template' -}; - -/** - * 生成API代码 - * @param {object} options 选项 - * @param {string} options.apiFile API定义文件路径 - * @param {string} options.outputDir 输出目录 - * @param {string} options.templateDir 模板目录 - * @param {boolean} options.useStyle 是否使用样式 - */ -function generateApi({ apiFile, outputDir, templateDir, useStyle = false }) { - try { - console.log('========================================='); - console.log('Generating API code...'); - - // 构建命令 - let command = `goctl api go --api ${apiFile} --dir ${outputDir} --home ${templateDir}`; - - // 如果需要使用样式 - if (useStyle) { - command += ' --style=goZero'; - console.log('Using goZero style'); - } - - console.log(`Running command: ${command}`); - - // 执行命令 - execSync(command, { stdio: 'inherit' }); - - console.log('API code generation completed!'); - console.log('========================================='); - } catch (error) { - console.error('ERROR in API generation:'); - console.error(error.message); - console.error(error.stack); - process.exit(1); - } -} - -/** - * 主函数 - */ -function main() { - // 解析命令行参数 - const args = process.argv.slice(2); - const options = { - apiFile: config.apiFile, - outputDir: config.outputDir, - templateDir: config.templateDir, - useStyle: false - }; - - // 处理命令行参数 - for (let i = 0; i < args.length; i++) { - const arg = args[i]; - - if (arg === '--api' && i + 1 < args.length) { - options.apiFile = args[++i]; - } else if (arg === '--dir' && i + 1 < args.length) { - options.outputDir = args[++i]; - } else if (arg === '--template' && i + 1 < args.length) { - options.templateDir = args[++i]; - } else if (arg === '--style') { - options.useStyle = true; - } else if (arg === '--help') { - console.log('Usage: node gen_api.js [options]'); - console.log('Options:'); - console.log(' --api API definition file path'); - console.log(' --dir Output directory'); - console.log(' --template Template directory'); - console.log(' --style Use goZero style'); - console.log(' --help Show this help message'); - process.exit(0); - } - } - - // 生成API代码 - generateApi(options); -} - -// 执行主函数 -if (require.main === module) { - main(); -} - -// 导出函数,以便其他脚本可以调用 -module.exports = { - generateApi -}; \ No newline at end of file diff --git a/deploy/script/gen_models.js b/deploy/script/gen_models.js deleted file mode 100644 index c0caab1..0000000 --- a/deploy/script/gen_models.js +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env node - -/** - * 数据库模型生成脚本 - * 功能等同于gen_models.ps1 - */ - -const { execSync } = require('child_process'); -const fs = require('fs'); -const path = require('path'); - -// 配置信息 -const config = { - // 数据库连接信息 - dbUrl: 'qnc:5vg67b3UNHu8@tcp(127.0.0.1:21001)/qnc', - // 输出目录 - outputDir: './model', - // 模板目录 - templateDir: '../template', - // 目标目录 - targetDir: '../../app/user/model', - // 表名列表 - tables: [ - // 'agent', - // 'agent_active_stat', - // 'agent_audit', - // 'agent_real_name' - // 'agent_closure', - // 'agent_commission', - // 'agent_commission_deduction', - // 'agent_link', - // 'agent_membership_config', - // 'agent_membership_recharge_order', - // 'agent_membership_user_config', - // 'agent_order', - // 'agent_platform_deduction', - // 'agent_product_config', - // 'agent_rewards', - // 'agent_wallet', - // 'agent_withdrawal', - // 'feature', - // 'global_notifications', - // 'order', - // 'product', - // 'product_feature', - // 'query', - // 'user', - // 'user_auth', - // 'example', - 'authorization', - // 'authorization_face' - ] -}; - -/** - * 将表名转换为驼峰命名法 - * @param {string} tableName 表名 - * @returns {string} 驼峰命名的表名 - */ -function convertToCamelCase(tableName) { - try { - // 将表名按_分割,并将每个部分首字母大写 - const parts = tableName.split('_'); - let camelCase = ''; - for (const part of parts) { - if (part.length > 0) { - camelCase += part.charAt(0).toUpperCase() + part.slice(1).toLowerCase(); - } - } - return camelCase; - } catch (error) { - console.error(`Error in convertToCamelCase for table: ${tableName}`); - console.error(error.message); - return tableName; // 出错时返回原表名 - } -} - -/** - * 确保目录存在 - * @param {string} dirPath 目录路径 - */ -function ensureDirectoryExists(dirPath) { - if (!fs.existsSync(dirPath)) { - console.log(`Creating directory: ${dirPath}`); - fs.mkdirSync(dirPath, { recursive: true }); - } -} - -/** - * 为单个表生成模型 - * @param {string} table 表名 - */ -function generateModelForTable(table) { - try { - console.log('========================================='); - console.log(`Processing table: ${table}`); - - // 生成模型 - console.log('Generating model...'); - const command = `goctl model mysql datasource -url="${config.dbUrl}" -table="${table}" -dir="${config.outputDir}" --home="${config.templateDir}" -cache=true --style=goZero`; - console.log(`Running command: ${command}`); - - execSync(command, { stdio: 'inherit' }); - - // 将表名转换为驼峰命名法 - const camelCaseName = convertToCamelCase(table); - console.log(`Table name converted to: ${camelCaseName}`); - - // 定义源文件和目标文件路径 - const sourceModelFile = path.join(config.outputDir, `${camelCaseName}Model.go`); - const sourceModelGenFile = path.join(config.outputDir, `${camelCaseName}Model_gen.go`); - const targetModelFile = path.join(config.targetDir, `${camelCaseName}Model.go`); - const targetModelGenFile = path.join(config.targetDir, `${camelCaseName}Model_gen.go`); - - console.log('Source files:'); - console.log(` - ${sourceModelFile}`); - console.log(` - ${sourceModelGenFile}`); - console.log('Target files:'); - console.log(` - ${targetModelFile}`); - console.log(` - ${targetModelGenFile}`); - - // 检查源文件是否存在并移动 - if (fs.existsSync(sourceModelFile)) { - console.log(`Moving ${sourceModelFile} to ${targetModelFile}`); - fs.copyFileSync(sourceModelFile, targetModelFile); - fs.unlinkSync(sourceModelFile); - } else { - console.log(`WARNING: Source file not found: ${sourceModelFile}`); - } - - if (fs.existsSync(sourceModelGenFile)) { - console.log(`Moving ${sourceModelGenFile} to ${targetModelGenFile}`); - fs.copyFileSync(sourceModelGenFile, targetModelGenFile); - fs.unlinkSync(sourceModelGenFile); - } else { - console.log(`WARNING: Source file not found: ${sourceModelGenFile}`); - } - - console.log(`Processing completed for table: ${table}`); - } catch (error) { - console.error(`ERROR processing table: ${table}`); - console.error(error.message); - console.error(error.stack); - } -} - -/** - * 主函数 - */ -function main() { - try { - // 确保目录存在 - ensureDirectoryExists(config.outputDir); - ensureDirectoryExists(config.targetDir); - - // 为每个表生成模型 - for (const table of config.tables) { - generateModelForTable(table); - } - - console.log('========================================='); - console.log('Script execution completed.'); - } catch (error) { - console.error('ERROR in main execution:'); - console.error(error.message); - console.error(error.stack); - process.exit(1); - } -} - -// 执行主函数 -main(); \ No newline at end of file diff --git a/deploy/script/gen_models.ps1 b/deploy/script/gen_models.ps1 index e8a9ae2..6a8c38c 100644 --- a/deploy/script/gen_models.ps1 +++ b/deploy/script/gen_models.ps1 @@ -1,64 +1,21 @@ # 设置输出编码为UTF-8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 -$OutputEncoding = [System.Text.Encoding]::UTF8 -[Console]::InputEncoding = [System.Text.Encoding]::UTF8 - -# 启用详细输出和错误处理 -$ErrorActionPreference = "Stop" -$VerbosePreference = "Continue" - -# 检查并创建必要的目录 -if (-not (Test-Path "./model")) { - Write-Output "Creating model directory..." - New-Item -ItemType Directory -Path "./model" | Out-Null -} - -if (-not (Test-Path "../../app/user/model")) { - Write-Output "Creating target directory..." - New-Item -ItemType Directory -Path "../../app/user/model" -Force | Out-Null -} - -# 将表名转换为驼峰命名法的函数 -function ConvertToCamelCase { - param ( - [string]$tableName - ) - try { - # 将表名按_分割,并将每个部分首字母大写 - $parts = $tableName -split '_' - $camelCase = "" - foreach ($part in $parts) { - if ($part.Length -gt 0) { - $camelCase += $part.Substring(0, 1).ToUpper() + $part.Substring(1).ToLower() - } - } - return $camelCase - } - catch { - Write-Output "Error in ConvertToCamelCase for table: $tableName" - Write-Output $_.Exception.Message - return $tableName # 出错时返回原表名 - } -} - -# 数据库连接信息 -$DB_URL = "qnc:5vg67b3UNHu8@tcp(127.0.0.1:21001)/qnc" +# 数据库连接信息 - 修改了URL格式 +$DB_URL = "qnc:5vg67b3UNHu8@(127.0.0.1:21001)/qnc" $OUTPUT_DIR = "./model" $TEMPLATE_DIR = "../template" -$TARGET_DIR = "../../app/user/model" -# 表名列表 - 每个元素后必须有逗号分隔 +# 表名列表 $tables = @( # "agent", # "agent_active_stat", # "agent_audit", - # "agent_real_name" # "agent_closure", # "agent_commission", # "agent_commission_deduction", # "agent_link", # "agent_membership_config", - # "agent_membership_recharge_order", + # "agent_membership_recharge_order" # "agent_membership_user_config", # "agent_order", # "agent_platform_deduction", @@ -66,74 +23,39 @@ $tables = @( # "agent_rewards", # "agent_wallet", # "agent_withdrawal", + # "agent_real_name" # "feature", - # "global_notifications", + # "global_notifications" # "order", + # "order_refund" # "product", # "product_feature", # "query", - # "user", - # "user_auth", - # "example", + # "query_cleanup_log" + # "query_cleanup_detail" + # "query_cleanup_config" + # "user" + # "user_auth" + # "example" "authorization" - # "authorization_face" + "authorization_face" + # "admin_user" + # "admin_user_role" + # "admin_api", + # "admin_menu" + # "admin_role", + # "admin_role_api", + # "admin_role_menu", + # "admin_dict_data" + # "admin_dict_type" + # "admin_promotion_link" + # "admin_promotion_link_stats_total" + # "admin_promotion_link_stats_history" + # "admin_promotion_order" + ) # 为每个表生成模型 foreach ($table in $tables) { - try { - Write-Output "=========================================" - Write-Output "Processing table: $table" - - # 生成模型 - Write-Output "Generating model..." - $command = "goctl model mysql datasource -url=`"$DB_URL`" -table=`"$table`" -dir=`"$OUTPUT_DIR`" --home=`"$TEMPLATE_DIR`" -cache=true --style=goZero" - Write-Output "Running command: $command" - Invoke-Expression $command - - # 将表名转换为驼峰命名法 - $camelCaseName = ConvertToCamelCase -tableName $table - Write-Output "Table name converted to: $camelCaseName" - - # 定义源文件和目标文件路径 - $sourceModelFile = "$OUTPUT_DIR/${camelCaseName}Model.go" - $sourceModelGenFile = "$OUTPUT_DIR/${camelCaseName}Model_gen.go" - $targetModelFile = "$TARGET_DIR/${camelCaseName}Model.go" - $targetModelGenFile = "$TARGET_DIR/${camelCaseName}Model_gen.go" - - Write-Output "Source files:" - Write-Output " - $sourceModelFile" - Write-Output " - $sourceModelGenFile" - Write-Output "Target files:" - Write-Output " - $targetModelFile" - Write-Output " - $targetModelGenFile" - - # 检查源文件是否存在 - if (-not (Test-Path $sourceModelFile)) { - Write-Output "WARNING: Source file not found: $sourceModelFile" - } - if (-not (Test-Path $sourceModelGenFile)) { - Write-Output "WARNING: Source file not found: $sourceModelGenFile" - } - - # 移动文件 - if (Test-Path $sourceModelFile) { - Write-Output "Moving $sourceModelFile to $targetModelFile" - Move-Item -Path $sourceModelFile -Destination $targetModelFile -Force - } - if (Test-Path $sourceModelGenFile) { - Write-Output "Moving $sourceModelGenFile to $targetModelGenFile" - Move-Item -Path $sourceModelGenFile -Destination $targetModelGenFile -Force - } - - Write-Output "Processing completed for table: $table" - } - catch { - Write-Output "ERROR processing table: $table" - Write-Output $_.Exception.Message - Write-Output $_.ScriptStackTrace - } + goctl model mysql datasource -url="qnc:5vg67b3UNHu8@tcp(127.0.0.1:21001)/qnc" -table="$table" -dir="./model" --home="../template" -cache=true --style=goZero } - -Write-Output "=========================================" -Write-Output "Script execution completed." diff --git a/deploy/script/package.json b/deploy/script/package.json deleted file mode 100644 index 0b38c14..0000000 --- a/deploy/script/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "qnc-codegen", - "version": "1.0.0", - "description": "代码生成工具 - Go-Zero微服务项目", - "main": "codegen.js", - "scripts": { - "model": "node codegen.js model", - "model:table": "node codegen.js model --table", - "model:tables": "node codegen.js model --tables", - "model:exclude": "node codegen.js model --exclude", - "model:all": "node codegen.js model --all", - "model:save": "node codegen.js model --tables", - "model:save-exclude": "node codegen.js model --exclude", - "api": "node codegen.js api", - "api:style": "node codegen.js api --style", - "config": "node codegen.js config", - "help": "node codegen.js help" - }, - "keywords": [ - "go-zero", - "codegen", - "microservice" - ], - "author": "", - "license": "ISC" -} \ No newline at end of file diff --git a/deploy/sql/user.sql b/deploy/sql/user.sql index b76d086..13affd4 100644 --- a/deploy/sql/user.sql +++ b/deploy/sql/user.sql @@ -2,7 +2,7 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- --- Table structure for user +-- Table structure for main -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( diff --git a/docker-compose.yml b/docker-compose.yml index 386ecdd..4daa421 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,90 +1,89 @@ -version: '3' +version: "3" services: + mysql: + image: mysql:8.0.34 + container_name: qnc_mysql + environment: + # 时区上海 - Time zone Shanghai (Change if needed) + TZ: Asia/Shanghai + # root 密码 - root password + MYSQL_ROOT_PASSWORD: yfg87gyuYiy1 + MYSQL_DATABASE: qnc + MYSQL_USER: qnc + MYSQL_PASSWORD: 5vg67b3UNHu8 + ports: + - "21001:3306" + volumes: + # 数据挂载 - Data mounting + - ./data/mysql/data:/var/lib/mysql + # 日志 + command: + # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配) + # Modify the Mysql 8.0 default password strategy to the original strategy (MySQL8.0 to change its default strategy will cause the password to be unable to match) + --default-authentication-plugin=mysql_native_password + --character-set-server=utf8mb4 + --collation-server=utf8mb4_general_ci + --explicit_defaults_for_timestamp=true + --lower_case_table_names=1 + privileged: true + restart: always + networks: + - qnc_net + - 1panel-network - mysql: - image: mysql:8.0.34 - container_name: qnc_mysql - environment: - # 时区上海 - Time zone Shanghai (Change if needed) - TZ: Asia/Shanghai - # root 密码 - root password - MYSQL_ROOT_PASSWORD: yfg87gyuYiy1 - MYSQL_DATABASE: qnc - MYSQL_USER: qnc - MYSQL_PASSWORD: 5vg67b3UNHu8 - ports: - - "21001:3306" - volumes: - # 数据挂载 - Data mounting - - ./data/mysql/data:/var/lib/mysql - # 日志 - command: - # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配) - # Modify the Mysql 8.0 default password strategy to the original strategy (MySQL8.0 to change its default strategy will cause the password to be unable to match) - --default-authentication-plugin=mysql_native_password - --character-set-server=utf8mb4 - --collation-server=utf8mb4_general_ci - --explicit_defaults_for_timestamp=true - --lower_case_table_names=1 - privileged: true - restart: always - networks: - - qnc_net - - 1panel-network + redis: + image: redis:7.4.0 + container_name: qnc_redis + ports: + - "21002:6379" + environment: + # 时区上海 - Time zone Shanghai (Change if needed) + TZ: Asia/Shanghai + volumes: + # 数据文件 - data files + - ./data/redis/data:/data:rw + command: "redis-server --requirepass 3m3WsgyCKWqz --appendonly yes" + privileged: true + restart: always + networks: + - qnc_net - redis: - image: redis:7.4.0 - container_name: qnc_redis - ports: - - "21002:6379" - environment: - # 时区上海 - Time zone Shanghai (Change if needed) - TZ: Asia/Shanghai - volumes: - # 数据文件 - data files - - ./data/redis/data:/data:rw - command: "redis-server --requirepass 3m3WsgyCKWqz --appendonly yes" - privileged: true - restart: always - networks: - - qnc_net + asynqmon: + image: hibiken/asynqmon:latest + container_name: qnc_asynqmon + ports: + - "21003:8080" + environment: + - TZ=Asia/Shanghai + command: + - "--redis-addr=qnc_redis:6379" + - "--redis-password=3m3WsgyCKWqz" + restart: always + networks: + - qnc_net + depends_on: + - redis - asynqmon: - image: hibiken/asynqmon:latest - container_name: qnc_asynqmon - ports: - - "21003:8080" - environment: - - TZ=Asia/Shanghai - command: - - '--redis-addr=qnc_redis:6379' - - '--redis-password=3m3WsgyCKWqz' - restart: always - networks: - - qnc_net - depends_on: - - redis - - main: - container_name: qnc_main - build: - context: . - dockerfile: ./app/user/cmd/api/Dockerfile - ports: - - "21004:8888" - environment: - - TZ=Asia/Shanghai - - ENV=production - depends_on: - - mysql - - redis - networks: - - qnc_net - restart: always + main: + container_name: qnc_main + build: + context: . + dockerfile: app/main/api/Dockerfile + ports: + - "21004:8888" + environment: + - TZ=Asia/Shanghai + - ENV=production + depends_on: + - mysql + - redis + networks: + - qnc_net + restart: always networks: - qnc_net: - driver: bridge - 1panel-network: - external: true + qnc_net: + driver: bridge + 1panel-network: + external: true diff --git a/gen_api.ps1 b/gen_api.ps1 index 32eca87..d571f8e 100644 --- a/gen_api.ps1 +++ b/gen_api.ps1 @@ -1,2 +1,2 @@ # API生成脚本 -goctl api go --api ./app/user/cmd/api/desc/main.api --dir ./app/user/cmd/api --home ./deploy/template \ No newline at end of file +goctl api go --api ./app/main/api/desc/main.api --dir ./app/main/api --home ./deploy/template \ No newline at end of file diff --git a/go.mod b/go.mod index f29bdac..c8fd893 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,6 @@ require ( github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.11 github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 github.com/alibabacloud-go/tea v1.2.2 - github.com/alibabacloud-go/tea-rpc v1.1.7 github.com/alibabacloud-go/tea-utils/v2 v2.0.7 github.com/aliyun/credentials-go v1.4.6 github.com/bytedance/sonic v1.13.0 @@ -20,14 +19,15 @@ require ( github.com/jinzhu/copier v0.4.0 github.com/pkg/errors v0.9.1 github.com/redis/go-redis/v9 v9.7.0 + github.com/samber/lo v1.50.0 github.com/shopspring/decimal v1.4.0 github.com/smartwalle/alipay/v3 v3.2.23 github.com/sony/sonyflake v1.2.0 github.com/tidwall/gjson v1.18.0 github.com/wechatpay-apiv3/wechatpay-go v0.2.20 github.com/zeromicro/go-zero v1.7.3 + golang.org/x/crypto v0.28.0 google.golang.org/grpc v1.67.1 - google.golang.org/protobuf v1.35.1 ) require ( @@ -40,7 +40,6 @@ require ( github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect github.com/alibabacloud-go/tea-oss-sdk v1.1.5 // indirect github.com/alibabacloud-go/tea-oss-utils v1.1.0 // indirect - github.com/alibabacloud-go/tea-rpc-utils v1.1.1 // indirect github.com/alibabacloud-go/tea-utils v1.4.5 // indirect github.com/alibabacloud-go/tea-xml v1.1.3 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -48,36 +47,21 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/clbanning/mxj/v2 v2.5.5 // indirect github.com/cloudwego/base64x v0.1.5 // indirect - github.com/coreos/go-semver v0.3.1 // indirect - github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/fatih/color v1.17.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.4 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-sql-driver/mysql v1.8.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/mock v1.6.0 // indirect - github.com/golang/protobuf v1.5.4 // indirect - github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/gofuzz v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect - github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -95,14 +79,10 @@ require ( github.com/smartwalle/nsign v1.0.9 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/cast v1.7.0 // indirect - github.com/stretchr/testify v1.10.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - go.etcd.io/etcd/api/v3 v3.5.15 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.5.15 // indirect - go.etcd.io/etcd/client/v3 v3.5.15 // indirect go.opentelemetry.io/otel v1.24.0 // indirect go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 // indirect @@ -114,31 +94,15 @@ require ( go.opentelemetry.io/otel/sdk v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect - go.uber.org/atomic v1.10.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect - go.uber.org/multierr v1.9.0 // indirect - go.uber.org/zap v1.24.0 // indirect golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect - golang.org/x/crypto v0.28.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/oauth2 v0.22.0 // indirect golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.21.0 // indirect + golang.org/x/text v0.22.0 // indirect golang.org/x/time v0.7.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect - gopkg.in/inf.v0 v0.9.1 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.29.3 // indirect - k8s.io/apimachinery v0.29.4 // indirect - k8s.io/client-go v0.29.3 // indirect - k8s.io/klog/v2 v2.110.1 // indirect - k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect - k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect - sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 0ed4fa8..161f0f0 100644 --- a/go.sum +++ b/go.sum @@ -59,12 +59,7 @@ github.com/alibabacloud-go/tea-oss-sdk v1.1.5 h1:CFUFcqanvBaoGN/CyTHUZrVNtFZd1WT github.com/alibabacloud-go/tea-oss-sdk v1.1.5/go.mod h1:5fhlKMa/kWRJNgPYRt+5qSg3UidRvNbf9Z2bI8Dp5/s= github.com/alibabacloud-go/tea-oss-utils v1.1.0 h1:y65crjjcZ2Pbb6UZtC2deuIZHDVTS3IaDWE7M9nVLRc= github.com/alibabacloud-go/tea-oss-utils v1.1.0/go.mod h1:PFCF12e9yEKyBUIn7X1IrF/pNjvxgkHy0CgxX4+xRuY= -github.com/alibabacloud-go/tea-rpc v1.1.7 h1:txkbgBb5DUBwQKqw9I+JY49eXGvvoAUSU2jnCr7Di+I= -github.com/alibabacloud-go/tea-rpc v1.1.7/go.mod h1:FU//dNbNYv1jSz1BGj6Sc3Co0IrbWsCnPiB/e1YnvgQ= -github.com/alibabacloud-go/tea-rpc-utils v1.1.1 h1:pthm/FnXIqXMNXXJhocvfEkbzUhHD8oWa10BlCHVKMw= -github.com/alibabacloud-go/tea-rpc-utils v1.1.1/go.mod h1:V5HdNi6Xdn0JMpgVhQ19vsFAS51tydr7BqcJtuXH1Yw= github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= -github.com/alibabacloud-go/tea-utils v1.3.4/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= github.com/alibabacloud-go/tea-utils v1.4.5 h1:h0/6Xd2f3bPE4XHTvkpjwxowIwRCJAJOqY6Eq8f3zfA= github.com/alibabacloud-go/tea-utils v1.4.5/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4= @@ -86,8 +81,6 @@ github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmP github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/aliyun/credentials-go v1.4.6 h1:CG8rc/nxCNKfXbZWpWDzI9GjF4Tuu3Es14qT8Y0ClOk= github.com/aliyun/credentials-go v1.4.6/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -111,18 +104,11 @@ github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCy github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= -github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= -github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= @@ -133,18 +119,10 @@ github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7z github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -155,17 +133,10 @@ github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27 github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= @@ -175,22 +146,13 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= -github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -203,20 +165,15 @@ github.com/hibiken/asynq v0.25.0 h1:VCPyRRrrjFChsTSI8x5OCPu51MlEz6Rk+1p0kHKnZug= github.com/hibiken/asynq v0.25.0/go.mod h1:DYQ1etBEl2Y+uSkqFElGYbk3M0ujLVwCfWE+TlvxtEk= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -231,8 +188,6 @@ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhR github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -250,10 +205,6 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= -github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= -github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= -github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= @@ -281,6 +232,8 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/samber/lo v1.50.0 h1:XrG0xOeHs+4FQ8gJR97zDz5uOFMW7OwFWiFVzqopKgY= +github.com/samber/lo v1.50.0/go.mod h1:RjZyNk6WSnUFRKK6EyOhsRJMqft3G+pg7dCWHQCWvsc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/smartwalle/alipay/v3 v3.2.23 h1:i1VwJeu70EmwpsXXz6GZZnMAtRx5MTfn2dPoql/L3zE= @@ -300,8 +253,6 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -335,19 +286,11 @@ github.com/wechatpay-apiv3/wechatpay-go v0.2.20 h1:gS8oFn1bHGnyapR2Zb4aqTV6l4kJW github.com/wechatpay-apiv3/wechatpay-go v0.2.20/go.mod h1:A254AUBVB6R+EqQFo3yTgeh7HtyqRRtN2w9hQSOrd4Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= github.com/zeromicro/go-zero v1.7.3 h1:yDUQF2DXDhUHc77/NZF6mzsoRPMBfldjPmG2O/ZSzss= github.com/zeromicro/go-zero v1.7.3/go.mod h1:9JIW3gHBGuc9LzvjZnNwINIq9QdiKu3AigajLtkJamQ= -go.etcd.io/etcd/api/v3 v3.5.15 h1:3KpLJir1ZEBrYuV2v+Twaa/e2MdDCEZ/70H+lzEiwsk= -go.etcd.io/etcd/api/v3 v3.5.15/go.mod h1:N9EhGzXq58WuMllgH9ZvnEr7SI9pS0k0+DHZezGp7jM= -go.etcd.io/etcd/client/pkg/v3 v3.5.15 h1:fo0HpWz/KlHGMCC+YejpiCmyWDEuIpnTDzpJLB5fWlA= -go.etcd.io/etcd/client/pkg/v3 v3.5.15/go.mod h1:mXDI4NAOwEiszrHCb0aqfAYNCrZP4e9hRca3d1YK8EU= -go.etcd.io/etcd/client/v3 v3.5.15 h1:23M0eY4Fd/inNv1ZfU3AxrbbOdW79r9V9Rl62Nm6ip4= -go.etcd.io/etcd/client/v3 v3.5.15/go.mod h1:CLSJxrYjvLtHsrPKsy7LmZEE+DK2ktfd2bN4RhBMwlU= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4= @@ -370,16 +313,10 @@ go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -400,8 +337,6 @@ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -413,9 +348,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -427,15 +360,11 @@ golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= -golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -445,8 +374,6 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -468,8 +395,6 @@ golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -478,8 +403,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= @@ -491,17 +416,11 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -532,8 +451,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0= -gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -546,22 +463,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw= -k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80= -k8s.io/apimachinery v0.29.4 h1:RaFdJiDmuKs/8cm1M6Dh1Kvyh59YQFDcFuFTSmXes6Q= -k8s.io/apimachinery v0.29.4/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y= -k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= -k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= -k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/pkg/lzkit/crypto/README.md b/pkg/lzkit/crypto/README.md index 0468c0d..863719d 100644 --- a/pkg/lzkit/crypto/README.md +++ b/pkg/lzkit/crypto/README.md @@ -172,7 +172,7 @@ func hexEncodingExample() { ```yaml # etc/main.yaml -Name: user-api +Name: main-api Host: 0.0.0.0 Port: 8888 diff --git a/pkg/lzkit/crypto/bcrypt.go b/pkg/lzkit/crypto/bcrypt.go new file mode 100644 index 0000000..7ed4512 --- /dev/null +++ b/pkg/lzkit/crypto/bcrypt.go @@ -0,0 +1,28 @@ +package crypto + +import ( + "golang.org/x/crypto/bcrypt" +) + +// PasswordHash 使用bcrypt对密码进行加密 +// cost参数确定加密的复杂度,默认为10,越高越安全但性能消耗越大 +func PasswordHash(password string, cost ...int) (string, error) { + defaultCost := 10 + if len(cost) > 0 && cost[0] > 0 { + defaultCost = cost[0] + } + + bytes, err := bcrypt.GenerateFromPassword([]byte(password), defaultCost) + if err != nil { + return "", err + } + + return string(bytes), nil +} + +// PasswordVerify 验证密码是否匹配 +// password是用户输入的明文密码,hash是存储的加密密码 +func PasswordVerify(password, hash string) bool { + err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) + return err == nil +} diff --git a/pkg/lzkit/md5/README.md b/pkg/lzkit/md5/README.md index 5398ec1..5e92541 100644 --- a/pkg/lzkit/md5/README.md +++ b/pkg/lzkit/md5/README.md @@ -59,13 +59,13 @@ hash = md5.FromBytes([]byte("hello")). ```go // 使用盐值加密(提高安全性) -hashedPassword := md5.EncryptStringWithSalt("password123", "user@example.com") +hashedPassword := md5.EncryptStringWithSalt("password123", "main@example.com") // 使用前缀加密 hashedValue := md5.EncryptStringWithPrefix("secret-data", "prefix-") // 验证带盐值的哈希 -isValid := md5.VerifyMD5WithSalt("password123", "user@example.com", hashedPassword) +isValid := md5.VerifyMD5WithSalt("password123", "main@example.com", hashedPassword) // 使用HMAC-MD5提高安全性 hmacHash := md5.MD5HMAC("message", "secret-key") diff --git a/pkg/lzkit/md5/example_test.go b/pkg/lzkit/md5/example_test.go index ffbd961..c834900 100644 --- a/pkg/lzkit/md5/example_test.go +++ b/pkg/lzkit/md5/example_test.go @@ -20,7 +20,7 @@ func Example() { fmt.Println("链式MD5:", chainHash) // 使用盐值 - saltedHash := md5.EncryptStringWithSalt("password123", "user@example.com") + saltedHash := md5.EncryptStringWithSalt("password123", "main@example.com") fmt.Println("加盐MD5:", saltedHash) // 验证哈希 @@ -63,9 +63,9 @@ func ExampleMD5_Sum() { func ExampleEncryptStringWithSalt() { // 为用户密码加盐,通常使用用户唯一标识(如邮箱)作为盐值 - hash := md5.EncryptStringWithSalt("password123", "user@example.com") + hash := md5.EncryptStringWithSalt("password123", "main@example.com") fmt.Println("盐值哈希长度:", len(hash)) - fmt.Println("是否为有效哈希:", md5.VerifyMD5WithSalt("password123", "user@example.com", hash)) + fmt.Println("是否为有效哈希:", md5.VerifyMD5WithSalt("password123", "main@example.com", hash)) // Output: // 盐值哈希长度: 32 // 是否为有效哈希: true diff --git a/t.jsonc b/t.jsonc deleted file mode 100644 index b177e62..0000000 --- a/t.jsonc +++ /dev/null @@ -1,191 +0,0 @@ -{ - "total": 4, - "datalist": [ - { - "orgName": "数字重庆信息技术服务有限公司", - "pName": "xxx", - "relationship": ["his_tm"], - "fsource": "", - "basicInfo": { - "regStatus": "存续(在营、开业、在册)", - "regCapital": "1000.000000万", - // 实收注册资本 - "reccap": 0, - "city": "重庆市", - // 门类代码 - "industry_code": "I", - // 门类名称 - "industry": "软件和信息技术服务业", - // 企业类型 - "type": "1", - // 国民经济行业分类代码 - "nic_code": "I659", - "legalPersonName": "xxx", - "regNumber": "500905012717869", - // 统一社会信用代码 - "creditCode": "91500000MA60TUMN6A", - "province": "重庆市", - "his_staffList": { - "result": [ - { - "name": "xxx", - "type": "2", - "typeJoin": [""] - } - ] - }, - "regorg": "重庆两江新区市场监督管理局", - "companyOrgType": "有限责任公司(自然人投资或控股的法人独资)", - "revdate": "", - "estiblishTime": "2020-04-09", - "opscope": "许可项目:第一类增值电信业务;第二类增值电信业务。(依法须经批准的项目,经相关部门批准后方可开展经营活动,具体经营项目以相关部门批准文件或许可证件为准) 一般项目:数据处理和存储支持服务;信息技术咨询服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;软件开发;信息系统集成服务;互联网数据服务;信息系统运行维护服务;大数据服务;信息安全设备销售;计算器设备销售;互联网设备销售;网络设备销售;物联网设备销售;互联网销售(除销售需要许可的商品);人工智能硬件销售;计算机软硬件及辅助设备零售;计算机软硬件及辅助设备批发;云计算设备销售;云计算装备技术服务。(除依法须经批准的项目外,凭营业执照依法自主开展经营活动)", - "reccapcur": "人民币", - "regCapitalCurrency": "人民币", - "nic_name": "信息传输、软件和信息技术服务业-软件和信息技术服务业-其他信息技术服务业", - "candate": "", - "district": "渝北区", - "name": "数字重庆信息技术服务有限公司", - "base": "cq", - "apprdate": "2023-09-13" - } - }, - { - "orgName": "西部数据交易有限公司", - "pName": "xxx", - "relationship": ["lp", "tm"], - "fsource": "1", - "basicInfo": { - "regStatus": "存续(在营、开业、在册)", - "regCapital": "4000.000000万", - "reccap": 1000, - "city": "重庆市", - "industry_code": "I", - "industry": "互联网和相关服务", - "type": "1", - "nic_code": "I6450", - "staffList": { - "result": [ - { - "name": "xxx", - "type": "2", - "typeJoin": ["执行董事"] - } - ] - }, - "legalPersonName": "xxx", - "regNumber": "500105014994548", - "creditCode": "91500105MA7EPYXA38", - "province": "重庆市", - "regorg": "重庆市江北区市场监督管理局", - "companyOrgType": "有限责任公司(非自然人投资或控股的法人独资)", - "revdate": "", - "estiblishTime": "2021-12-06", - "opscope": "许可项目:互联网信息服务,第二类增值电信业务(依法须经批准的项目,经相关部门批准后方可开展经营活动,具体经营项目以相关部门批准文件或许可证件为准) 一般项目:互联网数据服务,大数据服务,信息系统集成服务,软件开发,人工智能应用软件开发,技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广,数据处理服务,会议及展览服务,广告发布,信息咨询服务(不含许可类信息咨询服务),市场营销策划,科技中介服务,计算机系统服务,计算机软硬件及辅助设备零售,数据处理和存储支持服务,科普宣传服务,人工智能公共数据平台,业务培训(不含教育培训、职业技能培训等需取得许可的培训)(除依法须经批准的项目外,凭营业执照依法自主开展经营活动)", - "reccapcur": "人民币", - "regCapitalCurrency": "人民币", - "nic_name": "信息传输、软件和信息技术服务业-互联网和相关服务-互联网数据服务-互联网数据服务", - "candate": "", - "district": "江北区", - "name": "西部数据交易有限公司", - "base": "cq", - "apprdate": "2023-02-24" - } - }, - { - "orgName": "重庆必特思维软件有限公司", - "pName": "xxx", - "stockHolderItem": { - "orgHolderType": "自然人", - "investDate": "2004-05-27", - "investRate": "5.0%", - "subscriptAmt": 5, - "orgHolderName": "xxx" - }, - "relationship": ["sh", "tm"], - "fsource": "1", - "basicInfo": { - "regStatus": "注销", - "regCapital": "100万元人民币", - "reccap": 15, - "city": "重庆市", - "industry_code": "I", - "industry": "软件和信息技术服务业", - "type": "1", - "nic_code": "I6519", - "staffList": { - "result": [ - { - "name": "xxx", - "type": "2", - "typeJoin": ["经理"] - } - ] - }, - "legalPersonName": "xxx", - "regNumber": "5001032108594", - "creditCode": "91500103MA61F98N46", - "province": "重庆市", - "regorg": "重庆市工商行政管理局渝中区分局", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "revdate": "", - "estiblishTime": "2004-06-03", - "opscope": "计算机软、硬件技术开发及技术服务;销售计算机及配件、电子产品(不含电子出版物)、通信设备(不含无线电发射设备及地面卫星接收设施)、文化用品、五金、交电『以上范围法律,法规禁止经营的不得经营;法律、法规规定应经审批而未获审批前不得经营』。", - "reccapcur": "人民币", - "regCapitalCurrency": "人民币", - "nic_name": "信息传输、软件和信息技术服务业-软件和信息技术服务业-软件开发-其他软件开发", - "candate": "2006-12-25", - "district": "渝中区", - "name": "重庆必特思维软件有限公司", - "base": "cq", - "apprdate": "2006-12-25" - } - }, - { - "orgName": "数字重庆大数据应用发展有限公司", - "pName": "xxx", - "relationship": ["lp", "tm"], - "fsource": "1", - "basicInfo": { - "regStatus": "存续(在营、开业、在册)", - "regCapital": "20000.000000万", - "reccap": 10000, - "city": "重庆市", - "industry_code": "I", - "industry": "软件和信息技术服务业", - "type": "1", - "nic_code": "I653", - "staffList": { - "result": [ - { - "name": "xxx", - "type": "2", - "typeJoin": ["执行董事兼总经理"] - } - ] - }, - "legalPersonName": "xxx", - "regNumber": "500000011963485", - "creditCode": "91500000MA60G3R48R", - "province": "重庆市", - "regorg": "重庆市市场监督管理局", - "companyOrgType": "有限责任公司(非自然人投资或控股的法人独资)", - "revdate": "", - "estiblishTime": "2019-07-26", - "opscope": "许可项目:第一类增值电信业务;第二类增值电信业务;建设工程设计;建设工程施工;建筑智能化系统设计。(依法须经批准的项目,经相关部门批准后方可开展经营活动,具体经营项目以相关部门批准文件或许可证件为准) 一般项目:大数据服务;互联网数据服务;工业互联网数据服务;信息安全设备销售;计算器设备销售;互联网设备销售;网络设备销售;物联网设备销售;互联网销售(除销售需要许可的商品);人工智能硬件销售;计算机软硬件及辅助设备零售;计算机软硬件及辅助设备批发;云计算设备销售;云计算装备技术服务;人工智能行业应用系统集成服务;物联网应用服务;物联网技术研发;智能车载设备制造;智能车载设备销售;开展数据采集、汇聚、存储及处理服务;数据开发、分析、应用及相关增值服务;信息技术开发、咨询及转让;软件研发及信息系统集成服务;数据服务平台、云计算平台建设及运营维护;组织大数据基础设施项目建设,并对相关项目进行运营、维护及技术服务;大数据企业孵化;智慧城市信息系统的建设、运营及技术服务。。(除依法须经批准的项目外,凭营业执照依法自主开展经营活动)", - "reccapcur": "人民币", - "regCapitalCurrency": "人民币", - "nic_name": "信息传输、软件和信息技术服务业-软件和信息技术服务业-信息系统集成和物联网技术服务", - "candate": "", - "district": "渝北区", - "name": "数字重庆大数据应用发展有限公司", - "base": "cq", - "apprdate": "2022-10-31" - } - } - ], - "meta": { - "fieldDescriptions": { - "reccap": "实收注册资本" - } - } -} diff --git a/t2.jsonc b/t2.jsonc deleted file mode 100644 index 69bbab3..0000000 --- a/t2.jsonc +++ /dev/null @@ -1,4495 +0,0 @@ -{ - "datalist": [ - { - "adminPenalty": [ - { - "content": "", - "decisionDate": "2016-03-19", - "departmentName": "南宁市工商行政管理局高新技术产业开发区分局", - "legalPersonName": "李强", - "punishNumber": "南工商高新处字(2016)500010024号", - "reason": "公司成立后无正当理由超过6个月未开业的,或者开业后自行停业连续6个月以上", - "type": "" - }, - { - "content": "-", - "decisionDate": "2016-03-19", - "departmentName": "45011101", - "legalPersonName": "李强", - "punishNumber": "南工商高新处字(2016)500010024号", - "reason": "南宁恒发网络科技有限公司等3177户企业,未依法进行企业信息网上年报公示。经我分局执法人员在以上企业的执照注册住所检查,发现上述企业已不在其注册住所经营或办公,根据企业注册登记时所留电话也联系不上上述企业。", - "type": "吊销执照(登记证)" - } - ], - "basicInfo": { - "apprdate": "2016-03-19", - "base": "gx", - "candate": "", - "city": "", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450100742080353R", - "district": "", - "estiblishTime": "2002-10-16", - "industry": "房地产业", - "industry_code": "K", - "legalPersonName": "李强", - "name": "广西鼎铭房地产开发有限公司", - "nic_code": "K7010", - "nic_name": "房地产业-房地产业-房地产开发经营-房地产开发经营", - "opscope": "房地产开发经营(取得相应资质后方可在其资质等级核定范围内从事房地产开发经营活动);建筑材料、装饰材料、农副土特产品、日用百货、五金交电、汽车零配件的购销;计算机销售及维修。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "1000.000000万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "450000200012318", - "regStatus": "吊销,未注销", - "regorg": "南宁市市场监督管理局高新技术产业开发区分局", - "revdate": "2016-03-19", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["监事"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": { - "administrative": {}, - "bankrupt": { - "cases": [ - { - "c_ah": "(2013)桂破(预)终字第1号", - "c_dsrxx": [ - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "b2bc4cbb4597ca951323c4ee75582d94", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2013-10-09", - "d_larq": "2013-08-27", - "n_ajbs": "bde12cc6e38906392add0b9806a0b1e3", - "n_ajjzjd": "已结案", - "n_ajlx": "破产", - "n_crc": 2213659596, - "n_jafs": "驳回申请", - "n_jbfy": "广西壮族自治区高级人民法院", - "n_jbfy_cj": "高级人民法院", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2024)桂01破申104号", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "c376c436fd5737ebd8e9d2802685719c", - "c_ssdy": "广西壮族自治区", - "d_larq": "2024-12-31", - "n_ajbs": "f4efb2939d50e4e44fc038e83bacec71", - "n_ajjzjd": "未结案", - "n_ajlx": "破产申请审查", - "n_crc": 1230623427, - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_ssdw": "被申请人" - } - ], - "count": { - "area_stat": "广西壮族自治区(2)", - "ay_stat": "与公司、证券、保险、票据等有关的民事纠纷(2)", - "count_beigao": 2, - "count_jie_beigao": 1, - "count_jie_other": 0, - "count_jie_total": 1, - "count_jie_yuangao": 0, - "count_other": 0, - "count_total": 2, - "count_wei_beigao": 1, - "count_wei_other": 0, - "count_wei_total": 1, - "count_wei_yuangao": 0, - "count_yuangao": 0, - "jafs_stat": "驳回申请(1)", - "larq_stat": "2013(1),2024(1)" - } - }, - "cases_tree": { - "civil": [ - { - "c_ah": "(2011)西民二初字第188号", - "case_type": 300, - "n_ajbs": "ce78cb5040a8da71a367dddd1f402876", - "stage_type": 1 - }, - { - "c_ah": "(2011)城中民二初字第***号", - "case_type": 300, - "n_ajbs": "ae6cd28c29e7114921e933ba0021cda7", - "stage_type": 1 - }, - { - "c_ah": "(2012)青民二初字第***号", - "case_type": 300, - "n_ajbs": "980b487df274dc5064bf71bed0b574f8", - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第***号", - "case_type": 300, - "n_ajbs": "a3cbcd5991b0dc8dffc81d4edef53450", - "next": { - "c_ah": "(2015)南市民二终字第761号", - "case_type": 300, - "n_ajbs": "2e1572e789beeb3250cb8a3c4551331d", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第***号", - "case_type": 300, - "n_ajbs": "397bb5b3efed20970eabd9bc42b43e99", - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第696号", - "case_type": 300, - "n_ajbs": "19a203ba889603bbe0b25d671d0cfdd1", - "next": { - "c_ah": "(2016)桂0107执479号", - "case_type": 1000, - "n_ajbs": "2e772f0e3830f29b2b58ee6710664deb", - "next": { - "c_ah": "(2021)桂0107执恢332号", - "case_type": 1000, - "n_ajbs": "b6038222301aebedeb272a9bf23c2411", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第697号", - "case_type": 300, - "n_ajbs": "b99a3abefc68ddefc19092769b849774", - "next": { - "c_ah": "(2016)桂0107执480号", - "case_type": 1000, - "n_ajbs": "67b3f5e31746ee410f308329c2e71c6d", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2015)南铁民初字第354号", - "case_type": 300, - "n_ajbs": "c7bb68f44d4eb1122376c9d28d5b92c9", - "stage_type": 1 - }, - { - "c_ah": "(2015)南市民二终字第***号", - "case_type": 300, - "n_ajbs": "23f0da8964703e47398b0246bd411cc0", - "stage_type": 2 - }, - { - "c_ah": "(2016)桂0107民初***号", - "case_type": 300, - "n_ajbs": "b16fa3be64f28f82c0120f982f259ce5", - "next": { - "c_ah": "(2020)桂0107民监20号", - "case_type": 300, - "n_ajbs": "ac5a3436e300bddbf52c88ba72b132f8", - "next": { - "c_ah": "(2021)桂0107民再5号", - "case_type": 300, - "n_ajbs": "1601cceae6feee75e817b296fd7a2383", - "stage_type": 4 - }, - "stage_type": 3 - }, - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初1800号", - "case_type": 300, - "n_ajbs": "9cbac4e5e1c788a6f7b2a0d3e99c19aa", - "next": { - "c_ah": "(2016)桂0107执1708号", - "case_type": 1000, - "n_ajbs": "5ac3742e7b01d827596138397a183bc8", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初1984号", - "case_type": 300, - "n_ajbs": "b50d021466f5194f6dc702d45cc31037", - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初1985号", - "case_type": 300, - "n_ajbs": "cd78882c279e50e657f4258149cff9c2", - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初6524号", - "case_type": 300, - "n_ajbs": "a1d5d7c5f80da9a95d2b2d25ce76bf60", - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初6525号", - "case_type": 300, - "n_ajbs": "bed64f9d400f8e027be0308e32fd3bd9", - "stage_type": 1 - }, - { - "c_ah": "(2017)桂01民终****号", - "case_type": 300, - "n_ajbs": "f3227e9ad19747b39e54bbe7ea3e8620", - "next": { - "c_ah": "(2018)桂民再***号", - "case_type": 300, - "n_ajbs": "7aaf61175027315ca9ccf5255ec8dd1e", - "stage_type": 4 - }, - "stage_type": 2 - }, - { - "c_ah": "(2017)桂0103民初2872号", - "case_type": 300, - "n_ajbs": "a08705cb86c2d8cb974ff2c731dd4e69", - "stage_type": 1 - }, - { - "c_ah": "(2017)桂民申****号", - "case_type": 300, - "n_ajbs": "1ab706f40ba4ecf0d97a28247a18d533", - "stage_type": 3 - }, - { - "c_ah": "(2018)桂01民终6428号", - "case_type": 300, - "n_ajbs": "0baee96aab4f05d1a818dc854d1a136d", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6429号", - "case_type": 300, - "n_ajbs": "0b4fa40f20aced321c83def4d1d78d49", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6430号", - "case_type": 300, - "n_ajbs": "7354b28c1edfb872837c7cc20450c8bb", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6431号", - "case_type": 300, - "n_ajbs": "3e5a1bf7ed4f46ff17eb227acaabdde2", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6432号", - "case_type": 300, - "n_ajbs": "e223d3e50645a1760b44b316648752de", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6433号", - "case_type": 300, - "n_ajbs": "a91ee45363eba1743aaa779034510bf7", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6434号", - "case_type": 300, - "n_ajbs": "004c1fe7cae16f562652a5ec3b7a40f8", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6435号", - "case_type": 300, - "n_ajbs": "0e65f0a22be5f5c8c6a7601f1310fbf3", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6436号", - "case_type": 300, - "n_ajbs": "cf2142663b3c1ebbaaa79fe765597eca", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6437号", - "case_type": 300, - "n_ajbs": "7591de13423a8fc158a831a7866de5fe", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6438号", - "case_type": 300, - "n_ajbs": "5c7d0d4450108c76877d5df357177aea", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6439号", - "case_type": 300, - "n_ajbs": "e5e69872b0ea503cf7352d97a4c82f1a", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6440号", - "case_type": 300, - "n_ajbs": "9885829e86f91989b04126072c72c736", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6441号", - "case_type": 300, - "n_ajbs": "787434dd66233be20eb728e1531094d0", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6442号", - "case_type": 300, - "n_ajbs": "6c7df6ef8cfa15b68039100bed4de5a6", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6443号", - "case_type": 300, - "n_ajbs": "fd10b5ab209e1d339cd61e85847a3f58", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民初1232号", - "case_type": 300, - "n_ajbs": "53165ff19300f51b0063ddad26458953", - "next": { - "c_ah": "(2022)桂民终713号", - "case_type": 300, - "n_ajbs": "434bd8c8c94f0b6dded08cf3f10efa81", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2019)桂0103民初16680号", - "case_type": 300, - "n_ajbs": "06b860c4388a66e580b8c5253af27346", - "next": { - "c_ah": "(2020)桂0103执保254号", - "case_type": 1000, - "n_ajbs": "c5107a3beb1d827fef71072e4f6a5c64", - "next": { - "c_ah": "(2021)桂0103执5652号", - "case_type": 1000, - "n_ajbs": "14124b1098f5f3693beef922a586badd", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2020)桂0107民初4402号", - "case_type": 300, - "n_ajbs": "da1f23eca2f5cb2dc01849ccac038785", - "next": { - "c_ah": "(2021)桂01民终10117号", - "case_type": 300, - "n_ajbs": "d9074371e9008a4c89b063bd8964b023", - "next": { - "c_ah": "(2023)桂0107执1677号", - "case_type": 1000, - "n_ajbs": "e6246c51d9aef85a27db2d3d2c4d2710", - "stage_type": 5 - }, - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2020)桂01民终*****号", - "case_type": 300, - "n_ajbs": "8572959b09db3945b7eaefeb1390ae96", - "stage_type": 2 - }, - { - "c_ah": "(2021)桂0107民初1903号", - "case_type": 300, - "n_ajbs": "af7ad0787c99f6f6ce5e04daeb53f7dc", - "stage_type": 1 - }, - { - "c_ah": "(2021)桂0107民初4033号", - "case_type": 300, - "n_ajbs": "1d708a25b1bdde010e4f31d9f1112aff", - "next": { - "c_ah": "(2021)桂0107执保4200号", - "case_type": 1000, - "n_ajbs": "8e7997a0d7be940d7948824def76ccd1", - "next": { - "c_ah": "(2022)桂0107执5329号", - "case_type": 1000, - "n_ajbs": "e9333b2981821229cdeceacad06cd6bc", - "next": { - "c_ah": "(2023)桂0107执恢2594号", - "case_type": 1000, - "n_ajbs": "62834d00bd437f63a054d63ceceb68d4", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2021)桂0107民初6529号", - "case_type": 300, - "n_ajbs": "744e06488a38cecd0d33955d6aa10fe2", - "next": { - "c_ah": "(2021)桂0107执保4197号", - "case_type": 1000, - "n_ajbs": "247633f2d9d17ca3508816e4ea641765", - "next": { - "c_ah": "(2022)桂0107执5332号", - "case_type": 1000, - "n_ajbs": "5c77d5b423c30e38fa9d72af0990aff7", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2021)桂0107民初6530号", - "case_type": 300, - "n_ajbs": "c98897d88762b166a6100d6205ad7616", - "next": { - "c_ah": "(2022)桂01民终3182号", - "case_type": 300, - "n_ajbs": "09db87c7b81f7d75dad3ca475ebcc7f3", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2022)桂0107民初3520号", - "case_type": 300, - "n_ajbs": "016687d73ba110aa8cdd4a2ac9e3dd99", - "next": { - "c_ah": "(2023)桂0107执2561号", - "case_type": 1000, - "n_ajbs": "3ed3ad5129ccec036cadd76d956b8454", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2023)桂01民终7084号", - "case_type": 300, - "n_ajbs": "d37b8c5bf8e5f0a6cedea83df07387d2", - "stage_type": 2 - }, - { - "c_ah": "(2023)桂0107民初8601号", - "case_type": 300, - "n_ajbs": "027dd27afd450f1f93c9340a4f4330bf", - "next": { - "c_ah": "(2024)桂01民终1715号", - "case_type": 300, - "n_ajbs": "dd889cab80318f7232371ccd6ba9223d", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2023)桂0107民初11484号", - "case_type": 300, - "n_ajbs": "4c9aa71e1290e93a0819a0f5cc1b2c92", - "next": { - "c_ah": "(2023)桂0107执保3588号", - "case_type": 1000, - "n_ajbs": "74ccc2633f50fcac6825d958d923eb34", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2023)桂0107民初15009号", - "case_type": 300, - "n_ajbs": "bd9e991d89cb9f16c4669b20045df23c", - "stage_type": 1 - }, - { - "c_ah": "(2024)桂01民终4856号", - "case_type": 300, - "n_ajbs": "7f056b1b2e0d1c5f7577bea562b65d97", - "stage_type": 2 - }, - { - "c_ah": "(2024)桂01民终6998号", - "case_type": 300, - "n_ajbs": "7546cd6129f179313c1aa14370c28b3f", - "stage_type": 2 - } - ], - "criminal": [ - { - "c_ah": "(2011)桂刑经终字第18号", - "case_type": 200, - "n_ajbs": "e49ef61b5153a399de9873aae5feaa6c", - "stage_type": 2 - } - ] - }, - "civil": { - "cases": [ - { - "c_ah": "(2011)西民二初字第188号", - "c_dsrxx": [ - { - "c_mc": "南宁盛驰房地产咨询有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告南宁某甲房地产咨询有限责任公司,住所地南宁市大学东路x号世贸西城x座x号。法定代表人陈某,执行董事。委托代理人李能,广西民族律师事务所律师。委托代理人伍博,广西民族律师事务所实习律师。被告广西某乙房地产开发有限公司,原住所地南宁市科园大道x号高新苑x栋x号,现下落不明。法定代表人李某甲,现被羁押于南宁市第二看守所。", - "c_gkws_id": "583899a9-dae6-432e-b0e8-961f8d258635", - "c_gkws_pjjg": "被告广西某乙房地产开发有限公司支付原告南宁某甲房地产咨询有限责任公司酬金2475094.23元。案件受理费26601元,由被告广西某乙房地产开发有限公司负担。上述义务,义务人应于本判决生效之日起10日内履行完毕。逾期不履行金钱给付义务,依照《中华人民共和国民事诉讼法》第二百五十三条之规定,应加倍支付迟延履行期间的债务利息,权利人可在本案生效判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行人财产所在地法院申请执行。如不服本判决,可于判决书送达之日起15日内,向本院或南宁市中级人民法院递交上诉状,并按对方当事人的人数提供上诉状副本,上诉于广西壮族自治区南宁市中级人民法院,并于上诉期满之日起7日内预交上诉案件受理费,逾期未预交又不提出缓交或免交申请的,则按自动撤回上诉处理。", - "c_id": "c8400b73b16f51a9a9e09bbcd2558f55", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2013-08-16", - "d_larq": "2010-12-30", - "n_ajbs": "ce78cb5040a8da71a367dddd1f402876", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 830116275, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,房屋买卖合同纠纷,商品房委托代理销售合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,委托合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 2475094, - "n_qsbdje_level": 22, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2014)西民二初字第696号", - "c_ah_hx": "(2016)桂0107执479号:2e772f0e3830f29b2b58ee6710664deb", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告:中国农业银行股份有限公司南宁某支行。代表人:丘某,行长。委托代理人:许福天,广西钰锦律师事务所律师。委托代理人:秦钲尧,广西钰锦律师事务所实习律师。被告:黄某。委托代理人:黄奕农,广西昭盛律师事务所律师。委托代理人:韦浩,广西昭盛律师事务所实习律师。被告:广西某房地产开发有限公司。法定代表人:李某,经理。", - "c_gkws_id": "89f75e6e-13bf-4d6e-9f57-8e434e99f838", - "c_gkws_pjjg": "一、被告黄某偿还原告中国农业银行股份有限公司南宁某支行借款本金87860.6元;二、被告黄某偿还原告中国农业银行股份有限公司南宁某支行利息、罚息、复利、罚息欠息(截至2014年5月13日的利息7973.45元,罚息491.72元,复利302.6元,罚息欠息24.75元;从2014年5月14日起的利息、罚息、复利、罚息欠息按各方在《个人购房担保借款合同》中约定的计算方法计至本案生效判决规定的履行期限最后一日止);三、被告黄某偿还原告中国农业银行股份有限公司南宁某支行为实现债权而支出的律师代理费4833元;四、被告广西某房地产开发有限公司对被告黄某的上述第一、二、三项债务承担连带偿还责任;五、原告中国农业银行股份有限公司南宁某支行有权以被告黄某抵押的位于南宁市秀灵路7号鼎盛国际A座单元1211号房折价或者以拍卖、变卖该房所得的价款优先受偿。案件受理费2330元,由被告黄某、广西某房地产开发有限公司负担。上述债务,义务人应于本案判决生效之日起十日内履行完毕,如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。权利人可在本案生效判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行财产所在地人民法院申请执行。如不服本判决,可在本判决书送达之日起十五日内,向本院或南宁市中级人民法院递交上诉状,并按对方当事人的人数提出上诉状副本,上诉于南宁市中级人民法院。并在上诉期满之日起七日内向南宁市中级人民法院预交上诉案件受理费,逾期不预交又不提出缓交申请的,按自动撤回上诉处理。", - "c_id": "44ae4276c672e29cf23508a3b48d83aa", - "c_slfsxx": "1,2014-10-27 08:30:00,,", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2014-12-15", - "d_larq": "2014-08-18", - "n_ajbs": "19a203ba889603bbe0b25d671d0cfdd1", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2637126221, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 101486.12, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2014)西民二初字第697号", - "c_ah_hx": "(2016)桂0107执480号:67b3f5e31746ee410f308329c2e71c6d", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告:中国农业银行股份有限公司南宁某支行。代表人:丘某,行长。委托代理人:许福天,广西钰锦律师事务所律师。委托代理人:秦钲尧,广西钰锦律师事务所实习律师。被告:黄某。委托代理人:黄奕农,广西昭盛律师事务所律师。委托代理人:韦浩,广西昭盛律师事务所实习律师。被告:广西某房地产开发有限公司。法定代表人:李某,经理。", - "c_gkws_id": "f7fee607-3d98-41b1-8faf-3c2efba89e2b", - "c_gkws_pjjg": "一、被告黄某偿还原告中国农业银行股份有限公司南宁某支行借款本金99142.9元;二、被告黄某偿还原告中国农业银行股份有限公司南宁某支行利息、罚息、复利、罚息欠息(截至2014年5月13日的利息18601.63元,罚息2678.18元,复利2200.79元,罚息欠息59.78元;从2014年5月14日起的利息、罚息、复利、罚息欠息按各方在《个人购房担保借款合同》中约定的计算方法计至本案生效判决规定的履行期限最后一日止);三、被告黄某偿还原告中国农业银行股份有限公司南宁某支行为实现债权而支出的律师代理费6021元;四、被告广西某房地产开发有限公司对被告黄某的上述第一、二、三项债务承担连带偿还责任;五、原告中国农业银行股份有限公司南宁某支行有权以被告黄某抵押的位于南宁市秀灵路7号鼎盛国际A座单元1210号房折价或者以拍卖、变卖该房所得的价款优先受偿。案件受理费2874元,由被告黄某、广西某房地产开发有限公司负担。上述债务,义务人应于本案判决生效之日起十日内履行完毕,如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。权利人可在本案生效判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行财产所在地人民法院申请执行。如不服本判决,可在本判决书送达之日起十五日内,向本院或南宁市中级人民法院递交上诉状,并按对方当事人的人数提出上诉状副本,上诉于南宁市中级人民法院。并在上诉期满之日起七日内向南宁市中级人民法院预交上诉案件受理费,逾期不预交又不提出缓交申请的,按自动撤回上诉处理。", - "c_id": "ed209810a0236b2485b000ce55416bc1", - "c_slfsxx": "1,2014-10-27 08:30:00,,", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2014-12-15", - "d_larq": "2014-08-18", - "n_ajbs": "b99a3abefc68ddefc19092769b849774", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3345588433, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 128704.28, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2015)南铁民初字第354号", - "c_dsrxx": [ - { - "c_mc": "广西南城百货有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告广西南城百货有限责任公司,住所地南宁市友爱南路22号。法定代表人钟永利,该公司董事长。委托代理人李春辉,广西桂兴律师事务所律师。委托代理人唐振兴,广西桂兴律师事务所律师。被告广西鼎铭房地产开发有限公司,住所地南宁市西乡塘区科园大道。法定代表人李强。", - "c_gkws_id": "751bda44-c927-407b-87d1-a8640033844c", - "c_gkws_pjjg": "一、解除原告广西南城百货有限责任公司与被告广西鼎铭房地产开发有限公司于2006年8月30日签订的《地下室租赁合同》;二、被告广西鼎铭房地产开发有限公司向原告广西南城百货有限责任公司返还保证金100万元和利息(利息计算方法:以50万元为基数,自2008年11月1日起至本案生效判决确定的履行期限最后一日止,按中国人民银行同期流动资金贷款利率分段计付);三、驳回原告广西南城百货有限责任公司的其他诉讼请求。本案案件受理费17356元,公告费700元,总计18056元(原告已预交),由原告广西南城百货有限责任公司负担2557元,被告广西鼎铭房地产开发有限公司负担15499元。上述义务,义务人应于本案判决生效之日起十日内履行完毕。逾期则应依照《中华人民共和国民事诉讼法》第二百五十三条的规定,加倍支付延迟履行期间的债务利息。权利人可在本判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行财产所在地人民法院申请强制执行。如不服本判决,可在判决书送达之日起十五日内,向本院递交上诉状,并按对方当事人人数提交副本,上诉于南宁铁路运输中级法院,并于上诉期限届满之日起七日内预交上诉案件受理费17356元(收款单位:南宁铁路运输中级法院,账号:20×××26,开户银行:农业银行广西南宁凤凰岭支行)。逾期不交也不提出缓交申请,或者申请未获批准的,按自动撤回上诉处理。", - "c_id": "ca266966309fcd413aa50e29b7e49b7b", - "c_slfsxx": "1,2015-10-28 09:00:00,第三法庭,", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2015-11-17", - "d_larq": "2015-06-29", - "n_ajbs": "c7bb68f44d4eb1122376c9d28d5b92c9", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3354334356, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,租赁合同纠纷,房屋租赁合同纠纷", - "n_jabdje": 100, - "n_jabdje_level": 1, - "n_jafs": "判决", - "n_jbfy": "南宁铁路运输法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,租赁合同纠纷", - "n_pj_victory": "部分胜诉", - "n_qsbdje": 1395080.9, - "n_qsbdje_level": 20, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2015)南市民二终字第761号", - "c_ah_ys": "(2014)西民二初字第***号:a3cbcd5991b0dc8dffc81d4edef53450", - "c_dsrxx": [ - { - "c_mc": "庞文娟", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张诚", - "n_dsrlx": "自然人", - "n_ssdw": "原审第三人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "65bdd30017e7f573d51c4d26a243ecf0", - "c_slfsxx": ",2016-01-18 08:30:00,本院第四号法庭(一楼),1;,2016-04-21 08:30:00,本院第四号法庭(一楼),1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-05-14", - "d_larq": "2015-12-17", - "n_ajbs": "2e1572e789beeb3250cb8a3c4551331d", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1705911249, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审第三人" - }, - { - "c_ah": "(2016)桂0107民初1800号", - "c_ah_hx": "(2016)桂0107执1708号:5ac3742e7b01d827596138397a183bc8", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "66c53ff3860e235a8358f39055d94dd5", - "c_slfsxx": "1,2016-06-23 15:20:00,二区第四审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-09-19", - "d_larq": "2016-04-22", - "n_ajbs": "9cbac4e5e1c788a6f7b2a0d3e99c19aa", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2624885693, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 1768800, - "n_qsbdje_level": 21, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初1984号", - "c_dsrxx": [ - { - "c_mc": "贾治", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "南宁市吉信小额贷款有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西京源投资有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "9dcf75803d667a42ed1546a415c8bdb4", - "c_slfsxx": ",2016-07-05 08:30:00,第四审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-06-07", - "d_larq": "2016-05-04", - "n_ajbs": "b50d021466f5194f6dc702d45cc31037", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1950993116, - "n_jaay": "物权纠纷", - "n_jaay_tag": "物权纠纷", - "n_jaay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "物权纠纷", - "n_laay_tag": "物权纠纷", - "n_laay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 258110, - "n_qsbdje_level": 12, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初1985号", - "c_dsrxx": [ - { - "c_mc": "贾治", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "梁滨毅", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西京源投资有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "feb4ed2968d0ce06eee67654c664f7d1", - "c_slfsxx": ",2016-07-05 08:30:00,第四审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-06-07", - "d_larq": "2016-05-04", - "n_ajbs": "cd78882c279e50e657f4258149cff9c2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2629985615, - "n_jaay": "物权纠纷", - "n_jaay_tag": "物权纠纷", - "n_jaay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "物权纠纷", - "n_laay_tag": "物权纠纷", - "n_laay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 118619, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初6524号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "c83fbc670493763526e73364af733bb7", - "c_slfsxx": "1,2017-01-11 08:30:00,第五审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-06-13", - "d_larq": "2016-11-21", - "n_ajbs": "a1d5d7c5f80da9a95d2b2d25ce76bf60", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 685016378, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 4833, - "n_jabdje_level": 1, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 4833, - "n_qsbdje_level": 1, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初6525号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "b6844c4b0a7a5bf972753eedf0e8b234", - "c_slfsxx": "1,2017-01-11 09:00:00,二区第五审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-06-13", - "d_larq": "2016-11-21", - "n_ajbs": "bed64f9d400f8e027be0308e32fd3bd9", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2422023255, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 6, - "n_jabdje_level": 1, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 6021, - "n_qsbdje_level": 1, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2017)桂0103民初2872号", - "c_dsrxx": [ - { - "c_mc": "广西南宁广怡资产经营有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "张红梅", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重胜", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重贤", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张诚", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张达全", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张海燕", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重友", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "3dc22829cbcb0487072b10df830edd0f", - "c_slfsxx": "1,2017-06-22 08:30:00,本院第十三审判庭,2;2,2019-04-11 08:30:00,本院第十四A审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2019-06-26", - "d_larq": "2017-03-20", - "n_ajbs": "a08705cb86c2d8cb974ff2c731dd4e69", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2563796482, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷", - "n_jabdje": 4187000, - "n_jabdje_level": 26, - "n_jafs": "判决", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 10000000, - "n_qsbdje_level": 38, - "n_slcx": "一审", - "n_ssdw": "第三人", - "n_ssdw_ys": "第三人" - }, - { - "c_ah": "(2018)桂01民终6428号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "郭淑芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "7d4a30cf59c9fe76a33162f4fe7f6ef6", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "0baee96aab4f05d1a818dc854d1a136d", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 884242047, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6429号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "郭淑芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "6da3fa747216a1d96e134903285ea464", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "0b4fa40f20aced321c83def4d1d78d49", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3481030570, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6430号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "郭淑芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "7055f0eda331ec940d54d978f58743ae", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "7354b28c1edfb872837c7cc20450c8bb", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3105783815, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6431号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "梁甜甜", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "9ce2fa2fef3805e604b15ada940b15d3", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "3e5a1bf7ed4f46ff17eb227acaabdde2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 507790483, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6432号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "陈芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "fced8a28c56dc9314d5fb1ec27ff5faf", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "e223d3e50645a1760b44b316648752de", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1860469699, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6433号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "陈芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "0a285b62f9085701432a220e6da844ae", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "a91ee45363eba1743aaa779034510bf7", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1207495106, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6434号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "陈芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "8104da36703ba2310e8d2a7ff8f42b3a", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "004c1fe7cae16f562652a5ec3b7a40f8", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 832520699, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6435号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "李曼", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "e70573ea1bce2da775b5b9ef84c9acff", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "0e65f0a22be5f5c8c6a7601f1310fbf3", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 944512298, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6436号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "李鹏", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "78d3dcebdf9f3a19af4ab976f4f14da5", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "cf2142663b3c1ebbaaa79fe765597eca", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 873600192, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6437号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "梁铁君", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "0a71301d1ef87ad838b57e6cf8367531", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "7591de13423a8fc158a831a7866de5fe", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2413018883, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6438号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "梁铁君", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):梁铁君。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3741号", - "c_gkws_id": "87bf8e4a-cadc-4093-82b8-a9c6008df205", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "1fcd464a230ddd68b339ab8402323740", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "5c7d0d4450108c76877d5df357177aea", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3762566917, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6439号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "莫燕燕", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):莫燕燕。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3742号", - "c_gkws_id": "c66ba9ce-71f6-4c87-89ba-a9c6008a4244", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "d5ef4f2d367ad1ad98a9270701c1c71f", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "e5e69872b0ea503cf7352d97a4c82f1a", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2528107590, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6440号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "于伟曦", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):于伟曦。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3743号", - "c_gkws_id": "a4b783a8-aea1-419b-b4c6-a9c6008d9caa", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "8a1b6159e8b3fa23811f3c63e7d488cb", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "9885829e86f91989b04126072c72c736", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3147965928, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6441号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "于伟曦", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):于伟曦。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3744号", - "c_gkws_id": "952d4578-3a2d-4ac2-8e5c-a9c6008db6c0", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "bc29d948a535c55f0778bb8c2e9621fb", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "787434dd66233be20eb728e1531094d0", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 331619643, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6442号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "周强", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):周强。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3745号", - "c_gkws_id": "2897e6f9-8f58-46fd-bf6c-a9c6008d6ff3", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "521aad7908112c322bdddc429847f4d3", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "6c7df6ef8cfa15b68039100bed4de5a6", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 4248580466, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6443号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "周强", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):周强。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3746号", - "c_gkws_id": "59bbf8be-b29b-4acb-9fd5-a9c6008a5de8", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "6691aa86c511bb64e5d108b83a586c15", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "fd10b5ab209e1d339cd61e85847a3f58", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2420309272, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民初1232号", - "c_ah_hx": "(2022)桂民终713号:434bd8c8c94f0b6dded08cf3f10efa81", - "c_dsrxx": [ - { - "c_mc": "潘北仁", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "ee2dbb2b40def757a0d79d5c486bb61e", - "c_slfsxx": "3,2019-08-19 09:00:00,本院K10第二审判法庭,1;2,2019-05-17 09:00:00,本院K10第二审判法庭,1;1,2019-05-17 15:30:00,本院K10第二审判法庭,1;4,2019-08-19 15:30:00,本院K10第二审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-12-31", - "d_larq": "2018-12-03", - "n_ajbs": "53165ff19300f51b0063ddad26458953", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 528054165, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,房屋买卖合同纠纷,商品房销售合同纠纷", - "n_jabdje": 36500000, - "n_jabdje_level": 43, - "n_jafs": "判决", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,房屋买卖合同纠纷,商品房销售合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 36500000, - "n_qsbdje_level": 43, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2019)桂0103民初16680号", - "c_ah_hx": "(2020)桂0103执保254号:c5107a3beb1d827fef71072e4f6a5c64", - "c_dsrxx": [ - { - "c_mc": "中国工商银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "王玉权", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告:中国工商银行股份有限公司南宁分行,住所地:南宁市民族大道38-2号。统一社会信用代码:9145010389828087X4。主要负责人:杨世亮,该分行行长。委托诉讼代理人:崔凤涛,广西桂海天律师事务所律师。委托诉讼代理人:凌燕超,广西桂海天律师事务所律师。被告:王玉权,男,1964年12月19日出生,汉族,住南宁市兴宁区。被告:广西鼎铭房地产开发有限公司,住所地:南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人:李强。原告中国工商银行股份有限公司南宁分行与被告王玉权、广西鼎铭房地产开发有限公司金融借款合同纠纷一案,本院立案后,依法适用普通程序公开开庭进行了审理。原告的委托诉讼代理人凌燕超到庭参加诉讼。被告王玉权、广西鼎铭房地产开发有限公司经本院送达传票传唤,无正当理由未到庭参加诉讼,本院依法缺席审理。本案现已审理终结。原告向本院提出诉讼请求:1、被告王玉权偿还原告借款本金78950.71元;2、被告王玉权向原告支付利息4004.89元(利息按合同约定计至被告偿还完毕之日止,现暂计至2019年9月4日);3、被告王玉权承担本案的律师费4148元;4、被告广西鼎铭房地产开发有限公司对上述债务承担连带清偿责任;5、原告对权属被告王玉权的南宁市秀灵路7号鼎盛国际B座无单元十五层1501号房,有权以该财产折价或者拍卖、变卖所得的价款优先受偿;6、本案的诉讼费用由两被告负担。被告王玉权、广西鼎铭房地产开发有限公司未作书面答辩,亦未到庭参加诉讼。本案相关情况:一、合同名称:《个人购房借款/担保合同》【编号A:〔按〕字〔邕〕行〔明秀〕支行〔2007〕年〔1107〕号】。二、借款人:王玉权。三、借款本金:132000元。四、借款期限:2008年1月4日至2028年1月4日。五、还款方式:按月等额本息还款。六、借款利率:适用中国人民银行公布的同期同档次贷款基准利率为基准利率下浮15%。借款人未按合同约定日期(包括被宣布提前到期)偿还的贷款。贷款人有权按罚息利率按日计收利息;对不能按时支付的利息,按罚息利率计收复利。罚息利率在约定的贷款利率基础上加收30%确定。七、贷款违约情形:借款人连续三个月或累计六次未按时足额偿还贷款本息,贷款人有权停止发放尚未发放的贷款,宣布贷款提前到期,要求提前清偿全部或部分贷款以及所产生的利息、罚息及其他费用,直至解除合同。八、抵押物情况:王玉权提供位于南宁市秀灵路7号鼎盛国际B座单元1501号房于2008年1月24日办理预购商品房贷款抵押登记证明。九、律师费负担:由于借款人和担保人未按合同约定履行各自义务,贷款人为实现合同项下债权而产生的律师费等费用由借款人承担。本案审理中,原告委托广西桂海天律师事务所律师参加诉讼,支出律师代理费4148元。十、保证人及保证方式:广西鼎铭房地产开发有限公司作为保证人为借款人在合同项下的借款本金、利息、罚息、律师费及贷款人实现债权的费用承担连带保证责任。抵押人已正式办理完毕抵押登记手续,且贷款人收到记载有上述正式抵押登记信息的房屋他项权证书,保证人免除保证责任。十一、逾期情况:被告王玉权借款后,未按期足额还本付息,截至2019年9月4日止,已累计逾期14期,尚欠借款本金78950.71元,利息4004.89元。十二、合同违约责任:本院认为,涉案《个人购房借款/担保合同》系双方当事人真实意思表示,内容未悖法律、行政法规的强制性规定,合法有效,双方当事人均应恪守。上述合同签订后,原告已依约发放贷款,被告王玉权未按约定履行还本付息义务,多次逾期,显属违约,应承担相应违约责任。原告主张被告王玉权提前偿还剩余贷款本息,并赔偿律师代理费,于法有据,本院予以支持。关于原告主张的优先受偿权,因案涉抵押房产未完成正式抵押登记,抵押权未能设立,原告主张以抵押物处置价款优先受偿其债权,无法律依据,本院不予支持。在正式抵押登记尚未完成,房屋他项权证未办理的情形下,被告广西鼎铭房地产开发有限公司的阶段性保证责任免除条件亦未成就,原告有权直接请求被告广西鼎铭房地产开发有限公司对被告王玉权的上述债务承担连带清偿责任。被告广西鼎铭房地产开发有限公司承担保证责任后,有权向被告王玉权追偿。", - "c_gkws_id": "e37aaf7afa0c4efd901bacef0036d2ef", - "c_gkws_pjjg": "判决结果依照《中华人民共和国合同法》第六十条、第二百零五条、第二百零六条、第二百零七条,《中华人民共和国担保法》第三十一条和《中华人民共和国民事诉讼法》第六十四条、第一百四十四条之规定,判决如下:一、被告王玉权偿还原告中国工商银行股份有限公司南宁分行借款本金78950.71元;二、被告王玉权给付原告中国工商银行股份有限公司南宁分行利息【计算方法:截至2019年9月4日止,利息为4004.89元;此后至实际清偿之日止,以本金78950.71元为基数,按编号A:〔按〕字〔邕〕行〔明秀〕支行〔2007〕年〔1107〕号《个人购房借款/担保合同》约定计付】;三、被告王玉权赔偿原告中国工商银行股份有限公司南宁分行律师代理费4148元;四、被告广西鼎铭房地产开发有限公司对被告王玉权的上述债务承担连带清偿责任,被告广西鼎铭房地产开发有限公司承担保证责任后,有权向被告王玉权追偿;五、驳回原告中国工商银行股份有限公司南宁分行的其他诉讼请求。上述债务,义务人应于本案判决生效之日起十日内履行完毕,如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。权利人可在本案生效判决规定的履行期限最后一日起二年内向本院或与本院同级的被执行的财产所在地人民法院申请执行。本案受理费1978元,保全费891元,两项合计2869元,由被告王玉权负担,被告广西鼎铭房地产开发有限公司对前述费用承担连带偿付责任。如不服本判决,可在判决书送达之日起十五日内,向本院递交上诉状,并按照对方当事人的人数提交副本,上诉于南宁市中级人民法院,同时在上诉期届满之日起七日内预交上诉案件受理费(开户名称:南宁市中级人民法院,开户银行:中国农业银行南宁市竹溪支行,账号:20×××28。网银转账先选古城支行,再在备注栏注明竹溪支行)。逾期未预交又不提出缓交申请的,则按自动撤回上诉处理。", - "c_id": "4a2556a58d2f10005048a0e7b2424634", - "c_slfsxx": "1,,,2", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2020-08-28", - "d_larq": "2019-11-07", - "n_ajbs": "06b860c4388a66e580b8c5253af27346", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3952396476, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 87103.6, - "n_jabdje_level": 9, - "n_jafs": "判决", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "部分胜诉", - "n_qsbdje": 87103.6, - "n_qsbdje_level": 9, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2020)桂0107民初4402号", - "c_ah_hx": "(2021)桂01民终10117号:d9074371e9008a4c89b063bd8964b023", - "c_dsrxx": [ - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "a57fec4e3e60adfa7dfd321ce91aee87", - "c_slfsxx": "1,2020-08-13 08:30:00,本院高新五号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-07-29", - "d_larq": "2020-05-22", - "n_ajbs": "da1f23eca2f5cb2dc01849ccac038785", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 792179302, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_jabdje": 13380000, - "n_jabdje_level": 38, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 13380000, - "n_qsbdje_level": 38, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2020)桂0107民监20号", - "c_ah_hx": "(2021)桂0107民再5号:1601cceae6feee75e817b296fd7a2383", - "c_ah_ys": "(2016)桂0107民初***号:b16fa3be64f28f82c0120f982f259ce5", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "其他" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "其他" - } - ], - "c_gkws_dsr": "原审原告:张海婷,女,1977年6月7日出生,汉族,住江苏省泰兴市。原审被告:广西鼎铭房地产开发有限公司,住所南宁市西乡塘区科园大道31号高新苑29栋06号。组织机构代码:74208035-3。法定代表人:李强,总经理。", - "c_gkws_glah": "(2016)桂0107民初940号", - "c_gkws_id": "d260560ab82e4e17b555acc90034b5a7", - "c_gkws_pjjg": "一、本案由本院再审;二、再审期间中止原判决的执行。", - "c_id": "e8acca287a6c90721ca279c6d6198a03", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2020-12-30", - "d_larq": "2020-12-22", - "n_ajbs": "ac5a3436e300bddbf52c88ba72b132f8", - "n_ajjzjd": "已结案", - "n_ajlx": "民事依职权再审审查", - "n_crc": 1448364272, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje_level": 0, - "n_jafs": "本院再审", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "再审审查", - "n_ssdw": "其他" - }, - { - "c_ah": "(2021)桂0107民初1903号", - "c_dsrxx": [ - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "c57429589d2448f119006c42450fb75d", - "c_slfsxx": "1,2021-04-29 08:30:00,本院高新五号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-07-28", - "d_larq": "2021-01-28", - "n_ajbs": "af7ad0787c99f6f6ce5e04daeb53f7dc", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3380785681, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 102981.79, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂0107民再5号", - "c_ah_ys": "(2020)桂0107民监20号:ac5a3436e300bddbf52c88ba72b132f8", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "其他" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "其他" - } - ], - "c_id": "e4905d6a65c413f244adb7702fa90190", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-04-28", - "d_larq": "2021-02-22", - "n_ajbs": "1601cceae6feee75e817b296fd7a2383", - "n_ajjzjd": "已结案", - "n_ajlx": "民事再审", - "n_crc": 2339573738, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "撤销原判并驳回起诉", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 1508215.23, - "n_qsbdje_level": 21, - "n_slcx": "再审", - "n_ssdw": "其他" - }, - { - "c_ah": "(2021)桂0107民初4033号", - "c_ah_hx": "(2021)桂0107执保4200号:8e7997a0d7be940d7948824def76ccd1", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "e4713363848510cddbc1fec040ba53c1", - "c_slfsxx": "1,2021-09-02 15:30:00,本院一区速裁二号法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-09-24", - "d_larq": "2021-03-24", - "n_ajbs": "1d708a25b1bdde010e4f31d9f1112aff", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1768614939, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 54684.68, - "n_jabdje_level": 6, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 55894.39, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂0107民初6529号", - "c_ah_hx": "(2021)桂0107执保4197号:247633f2d9d17ca3508816e4ea641765", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "何明", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "176ecf7eb3ca96a6274a7a79f44ccadc", - "c_slfsxx": "1,2021-11-22 10:30:00,速裁一号法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-12-08", - "d_larq": "2021-05-18", - "n_ajbs": "744e06488a38cecd0d33955d6aa10fe2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3106977891, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 79912.85, - "n_jabdje_level": 8, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 78741.75, - "n_qsbdje_level": 8, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂0107民初6530号", - "c_ah_hx": "(2022)桂01民终3182号:09db87c7b81f7d75dad3ca475ebcc7f3", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "冯波", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "杨日新", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "1cd336335f135419acd08ae51716f798", - "c_slfsxx": "1,2021-11-22 10:30:00,速裁一号法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-12-08", - "d_larq": "2021-05-18", - "n_ajbs": "c98897d88762b166a6100d6205ad7616", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1124441253, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 56259.66, - "n_jabdje_level": 6, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 54736.89, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂01民终10117号", - "c_ah_hx": "(2023)桂0107执1677号:e6246c51d9aef85a27db2d3d2c4d2710", - "c_ah_ys": "(2020)桂0107民初4402号:da1f23eca2f5cb2dc01849ccac038785", - "c_dsrxx": [ - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "e7fee0d9bb691c31a87902711c1e1f61", - "c_slfsxx": "1,2022-04-29 08:30:00,本院K10第三审判法庭,1;2,2022-12-12 09:00:00,本院K10第四审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-12-30", - "d_larq": "2021-09-08", - "n_ajbs": "d9074371e9008a4c89b063bd8964b023", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1120230154, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "上诉人" - }, - { - "c_ah": "(2022)桂01民终3182号", - "c_ah_ys": "(2021)桂0107民初6530号:c98897d88762b166a6100d6205ad7616", - "c_dsrxx": [ - { - "c_mc": "冯波", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "杨日新", - "n_dsrlx": "自然人", - "n_ssdw": "原审被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审被告" - } - ], - "c_id": "ff61859119d9a681ae7f9c428a69256a", - "c_slfsxx": "1,2022-05-17 10:30:00,本院K10第十一审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-01-19", - "d_larq": "2022-03-21", - "n_ajbs": "09db87c7b81f7d75dad3ca475ebcc7f3", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2364525062, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "发回重审", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审被告" - }, - { - "c_ah": "(2022)桂0107民初3520号", - "c_ah_hx": "(2023)桂0107执2561号:3ed3ad5129ccec036cadd76d956b8454", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "甘翠英", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "d3a7420da728896b69bbf370ccad46e6", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-06-20", - "d_larq": "2022-04-01", - "n_ajbs": "016687d73ba110aa8cdd4a2ac9e3dd99", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1157937847, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 46464.35, - "n_jabdje_level": 5, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 51018.66, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2022)桂民终713号", - "c_ah_ys": "(2018)桂01民初1232号:53165ff19300f51b0063ddad26458953", - "c_dsrxx": [ - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "潘北仁", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - } - ], - "c_id": "51e581e2c643109088454c6549c9b3fc", - "c_slfsxx": "2,2022-06-06 09:00:00,本院K00第七审判法庭,1;1,2023-05-18 15:30:00,本院K00第五审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-06-08", - "d_larq": "2022-05-12", - "n_ajbs": "434bd8c8c94f0b6dded08cf3f10efa81", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3061428190, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje": 18000000, - "n_jabdje_level": 39, - "n_jafs": "改判(含变更原判决)", - "n_jbfy": "广西壮族自治区高级人民法院", - "n_jbfy_cj": "高级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "上诉人" - }, - { - "c_ah": "(2023)桂01民终7084号", - "c_dsrxx": [ - { - "c_mc": "周兰", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "张红梅", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张重胜", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张重贤", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张达全", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张海燕", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张重友", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "南宁高新技术开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "8732be02264968bdc5341fc773a81d11", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-07-09", - "d_larq": "2023-06-13", - "n_ajbs": "d37b8c5bf8e5f0a6cedea83df07387d2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2181508447, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "撤销原裁定并指令审理", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2023)桂0107民初8601号", - "c_ah_hx": "(2024)桂01民终1715号:dd889cab80318f7232371ccd6ba9223d", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "bf10412a6ba720725dd0ce160dceddc5", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-12-29", - "d_larq": "2023-07-17", - "n_ajbs": "027dd27afd450f1f93c9340a4f4330bf", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3950950459, - "n_jaay": "非讼程序案件案由", - "n_jaay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_jabdje": 700000, - "n_jabdje_level": 17, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "非讼程序案件案由", - "n_laay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_pj_victory": "未知", - "n_qsbdje": 700000, - "n_qsbdje_level": 17, - "n_slcx": "一审", - "n_ssdw": "第三人", - "n_ssdw_ys": "第三人" - }, - { - "c_ah": "(2023)桂0107民初11484号", - "c_ah_hx": "(2023)桂0107执保3588号:74ccc2633f50fcac6825d958d923eb34", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "侯安魁", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "9be43ecccddfb3b48fc6c024d5a126fe", - "c_slfsxx": "2,2024-02-23 15:20:00,本院K1E院部7号庭,1;1,2023-10-23 08:30:00,本院K1E院部8号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-04-10", - "d_larq": "2023-09-20", - "n_ajbs": "4c9aa71e1290e93a0819a0f5cc1b2c92", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 238691032, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 49158.73, - "n_jabdje_level": 5, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 50310.04, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2023)桂0107民初15009号", - "c_dsrxx": [ - { - "c_mc": "周兰", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "张红梅", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重胜", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重贤", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张达全", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张海燕", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重友", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "南宁高新技术开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "2a2e064c55d3b2c38b5e84a79f19acba", - "c_slfsxx": "1,2024-03-22 08:30:00,本院院部16号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-09-05", - "d_larq": "2023-11-27", - "n_ajbs": "bd9e991d89cb9f16c4669b20045df23c", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3282247532, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje": 5745700, - "n_jabdje_level": 29, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 5745700, - "n_qsbdje_level": 29, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2024)桂01民终1715号", - "c_ah_ys": "(2023)桂0107民初8601号:027dd27afd450f1f93c9340a4f4330bf", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "e8ce3565dc5a782a71758536b97fa2b4", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-07-12", - "d_larq": "2024-02-08", - "n_ajbs": "dd889cab80318f7232371ccd6ba9223d", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3170480267, - "n_jaay": "非讼程序案件案由", - "n_jaay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "非讼程序案件案由", - "n_laay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审第三人" - }, - { - "c_ah": "(2024)桂01民终4856号", - "c_dsrxx": [ - { - "c_mc": "贾治", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "曹智", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "66500dc6988b029b3bbfd3c008c0c51a", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-06-04", - "d_larq": "2024-05-06", - "n_ajbs": "7f056b1b2e0d1c5f7577bea562b65d97", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3708272358, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "撤销原裁定并指令审理", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2024)桂01民终6998号", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西全俱物业服务有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "603df73e70c0df1f57c05dad627e9fd3", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-07-23", - "d_larq": "2024-07-03", - "n_ajbs": "7546cd6129f179313c1aa14370c28b3f", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 4118898809, - "n_jaay": "侵权责任纠纷", - "n_jaay_tree": "侵权责任纠纷", - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "侵权责任纠纷", - "n_laay_tree": "侵权责任纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审第三人" - } - ], - "count": { - "area_stat": "广西壮族自治区(57)", - "ay_stat": "合同、准合同纠纷(50),物权纠纷(2),债权纠纷(2),非讼程序案件案由(2),侵权责任纠纷(1)", - "count_beigao": 43, - "count_jie_beigao": 43, - "count_jie_other": 11, - "count_jie_total": 57, - "count_jie_yuangao": 3, - "count_other": 11, - "count_total": 57, - "count_wei_beigao": 0, - "count_wei_other": 0, - "count_wei_total": 0, - "count_wei_yuangao": 0, - "count_yuangao": 3, - "jafs_stat": "判决(26),维持(23),撤销原裁定并指令审理(2),本院提审(1),发回重审(1),撤销原判并驳回起诉(1),改判(1),改判(含变更原判决)(1),本院再审(1)", - "larq_stat": "2010(1),2011(1),2012(1),2014(4),2015(3),2016(6),2017(3),2018(18),2019(1),2020(3),2021(6),2022(3),2023(4),2024(3)", - "money_beigao": 47, - "money_jie_beigao": 47, - "money_jie_other": 27, - "money_jie_total": 51, - "money_jie_yuangao": 39, - "money_other": 27, - "money_total": 51, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_percent": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 39 - } - }, - "count": { - "area_stat": "广西壮族自治区(84)", - "ay_stat": "合同、准合同纠纷(50),未知(14),民事(10),物权纠纷(2),与公司、证券、保险、票据等有关的民事纠纷(2),债权纠纷(2),非讼程序案件案由(2),破坏社会主义市场经济秩序罪(1),侵权责任纠纷(1)", - "count_beigao": 69, - "count_jie_beigao": 68, - "count_jie_other": 11, - "count_jie_total": 83, - "count_jie_yuangao": 4, - "count_other": 11, - "count_total": 84, - "count_wei_beigao": 1, - "count_wei_other": 0, - "count_wei_total": 1, - "count_wei_yuangao": 0, - "count_yuangao": 4, - "jafs_stat": "判决(26),维持(23),终结本次执行程序(8),保全完毕(7),执行完毕(4),终结执行(4),改判(2),撤销原裁定并指令审理(2),本院提审(1),驳回申请(1),改判(含变更原判决)(1),本院再审(1),发回重审(1),部分保全(1),撤销原判并驳回起诉(1)", - "larq_stat": "2010(1),2011(2),2012(1),2013(1),2014(4),2015(3),2016(12),2017(5),2018(19),2019(3),2020(4),2021(11),2022(5),2023(9),2024(4)", - "money_beigao": 50, - "money_jie_beigao": 50, - "money_jie_other": 27, - "money_jie_total": 55, - "money_jie_yuangao": 39, - "money_other": 27, - "money_total": 55, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_percent": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 39 - }, - "crc": 3093748000, - "criminal": { - "cases": [ - { - "c_ah": "(2011)桂刑经终字第18号", - "c_gkws_dsr": "抗诉机关广西壮族自治区南宁市人民检察院。上诉人(原审被告单位)广西鼎铭房地产开发有限公司,住所地南宁市××大道××号。法定代表人李强,董事长。诉讼代表人李健,男,汉族,广西鼎铭房地产开发有限公司股东,住广西博白县××水××田队。上诉人(原审被告人)李铭,男,1971年1月18日出生于广西壮族自治区博白县,汉族,大专文化,广西鼎铭房地产开发有限公司实际投资人,住广西南宁市××路××号。因涉嫌犯合同诈骗罪,于2009年3月29日被刑事拘留,同年4月30日被逮捕。现羁押于南宁市第三看守所,因病在广西壮族自治区监狱总医院就医。辩护人郭广,广西欣和律师事务所律师。上诉人(原审被告人)李强,男,1974年8月24日出生于广西壮族自治区博白县,汉族,大专文化,广西鼎铭房地产开发有限公司法定代表人,住广西××春路××楼××单××房。因涉嫌犯合同诈骗罪,于2009年3月24日被刑事拘留,同年4月30日被逮捕。现羁押于南宁市第二看守所。辩护人冯春丽,广西欣和律师事务所律师。上诉人(原审被告人)曹智,男,1973年9月21日出生于四川绵阳市,汉族,初中文化,广西鼎铭房地产开发有限公司总经理,住广西××路××号××房。因涉嫌犯合同诈骗罪,于2010年1月30日被刑事拘留,同年3月9日被逮捕。现羁押于南宁市第一看守所。辩护人李能,广西民族律师事务所律师。", - "c_gkws_id": "478a3c8f-6e24-43fc-8270-81f18ac1eb9f", - "c_gkws_pjjg": "一、维持广西壮族自治区南宁市中级人民法院(2010)南市刑二初字第13号刑事判决第(五)项,即:“对被告单位广西鼎铭房地产开发有限公司,被告人李铭、李强、曹智违法犯罪所得,予以继续追缴,发还给本案被害人。”二、撤销广西壮族自治区南宁市中级人民法院(2010)南市刑二初字第13号刑事判决第(一)、(二)、(三)、(四)项,即:“被告单位广西鼎铭房地产开发有限公司犯合同诈骗罪,判处罚金人民币100万元;被告人李铭犯合同诈骗罪,判处有期徒刑十五年,剥夺政治权利三年,并处罚金人民币20万元;被告人李强犯合同诈骗罪,判处有期徒刑十二年,剥夺政治权利一年,并处罚金人民币10万元;被告人曹智犯合同诈骗罪,判处有期十一年,剥夺政治权利一年,并处罚金人民币10万元。”三、上诉人(原审被告单位)广西鼎铭房地产开发有限公司犯合同诈骗罪,判处罚金人民币100万元;犯骗取贷款罪,判处罚金人民币100万元。数罪并罚,决定执行罚金人民币200万元(罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。四、上诉人(原审被告人)李铭犯合同诈骗罪,判处有期徒刑十五年,并处罚金人民币20万元;犯骗取贷款罪,判处有期徒刑四年,并处罚金人民币20万元。数罪并罚,决定执行有期徒刑十七年,并处罚金人民币40万元(刑期自判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2009年3月29日至2026年3月28日;罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。五、上诉人(原审被告人)李强犯合同诈骗罪,判处有期徒刑十二年,并处罚金人民币10万元;犯骗取贷款罪,判处有期徒刑三年,并处罚金人民币10万元。数罪并罚,决定执行有期徒刑十三年六个月,并处罚金人民币20万元(刑期自判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2009年3月24日至2022年9月23日;罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。六、上诉人(原审被告人)曹智犯合同诈骗罪,判处有期徒刑十一年,并处罚金人民币10万元;犯骗取贷款罪,判处有期徒刑三年,并处罚金人民币10万元。数罪并罚,决定执行有期徒刑十二年六个月,并处罚金人民币20万元(刑期自判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2010年1月30日至2022年7月29日;罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。本判决为终审判决。", - "c_id": "1eb626e00af72cad8ae49a81d239fa3a", - "c_slfsxx": "1,2011-09-15 08:45:00,第八审判庭,1;2,2013-04-26 09:00:00,第八审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2013-05-28", - "d_larq": "2011-05-19", - "n_ajbs": "e49ef61b5153a399de9873aae5feaa6c", - "n_ajjzjd": "已结案", - "n_ajlx": "刑事二审", - "n_bqqpcje_level": 0, - "n_ccxzxje_level": 0, - "n_crc": 2644887589, - "n_fzje_level": 0, - "n_jaay": "破坏社会主义市场经济秩序罪", - "n_jaay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", - "n_jafs": "改判", - "n_jbfy": "广西壮族自治区高级人民法院", - "n_jbfy_cj": "高级人民法院", - "n_laay": "破坏社会主义市场经济秩序罪", - "n_laay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", - "n_pcpcje_level": 0, - "n_slcx": "二审", - "n_ssdw": "上诉人" - } - ], - "count": { - "area_stat": "广西壮族自治区(1)", - "ay_stat": "破坏社会主义市场经济秩序罪(1)", - "count_beigao": 0, - "count_jie_beigao": 0, - "count_jie_other": 0, - "count_jie_total": 1, - "count_jie_yuangao": 1, - "count_other": 0, - "count_total": 1, - "count_wei_beigao": 0, - "count_wei_other": 0, - "count_wei_total": 0, - "count_wei_yuangao": 0, - "count_yuangao": 1, - "jafs_stat": "改判(1)", - "larq_stat": "2011(1)", - "money_beigao": 0, - "money_jie_beigao": 0, - "money_jie_other": 0, - "money_jie_total": 0, - "money_jie_yuangao": 0, - "money_other": 0, - "money_total": 0, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 0 - } - }, - "implement": { - "cases": [ - { - "c_ah": "(2016)桂0107执479号", - "c_ah_hx": "(2021)桂0107执恢332号:b6038222301aebedeb272a9bf23c2411", - "c_ah_ys": "(2014)西民二初字第696号:19a203ba889603bbe0b25d671d0cfdd1", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行,所在地址:南宁市友爱南路41号商住楼一层。负责人:丘常宏,行长。被执行人黄年环,女,1983年1月6日出生,住址:广西扶绥县,购房地址:南宁市秀灵路7号鼎盛国际A座单元1211号房。被执行人广西鼎铭房地产开发有限公司,住所址:南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人:李强。", - "c_gkws_id": "738c241a-95b8-4e2b-b7b9-5e13edb4e7dc", - "c_gkws_pjjg": "查封被执行人黄年环名下所有的位于南宁市秀灵路7号鼎盛国际A座单元1211号房,期限为三年。", - "c_id": "53aa248323e80ef5298f9915fd53268c", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-07-26", - "d_larq": "2016-04-18", - "n_ajbs": "2e772f0e3830f29b2b58ee6710664deb", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1902535492, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 107280.3, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执480号", - "c_ah_ys": "(2014)西民二初字第697号:b99a3abefc68ddefc19092769b849774", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行被执行人广西鼎铭房地产开发有限公司,地址南宁市。法定代表人李强。被执行人黄年环。", - "c_gkws_id": "fe2d3289-effb-4925-8ec1-523be96ebe48", - "c_gkws_pjjg": "终结广西壮族自治区南宁市西乡塘区人民法院(2014)西民二初字第697号民事判决书的本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或其他法律责任。本裁定送达后即发生法律效力。", - "c_id": "f59ba46a50e7e77be4e090f905c01091", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-07-26", - "d_larq": "2016-04-18", - "n_ajbs": "67b3f5e31746ee410f308329c2e71c6d", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1548490716, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 139772.02, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执1708号", - "c_ah_ys": "(2016)桂0107民初1800号:9cbac4e5e1c788a6f7b2a0d3e99c19aa", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人张海婷,女,1977年6月7日出生,汉族,住所地位于江苏省泰兴市。被执行人广西鼎铭房地产开发有限公司,住所地位于南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强,董事长。", - "c_gkws_glah": "(2016)桂0107民初1800号", - "c_gkws_id": "e1c1ca9a-e48a-4fb2-ba51-228965d31e39", - "c_gkws_pjjg": "查封被执行人广西鼎铭房地产开发有限公司名下所有的位于南宁市西乡塘区秀灵路7号鼎盛国际B座单元1028号商铺,期限为三年。", - "c_id": "b393b6ffd7006c906eba4b177d3ce912", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-20", - "d_larq": "2016-10-26", - "n_ajbs": "5ac3742e7b01d827596138397a183bc8", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 3659484611, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sqzxbdje": 1947919, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执1710号", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人张海婷,女,1977年6月7日出生,住所地江苏省泰兴市。被执行人广西鼎铭房地产开发有限公司,住所地南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强。", - "c_gkws_id": "86cb5b7f-6b46-4bce-9ee1-a93a0039aa4f", - "c_gkws_pjjg": "终结本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或申请法律责任。本裁定送达后即发生法律效力。", - "c_id": "5e91bb7562c9ffc4f1ab56368e0d42ec", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-20", - "d_larq": "2016-10-26", - "n_ajbs": "021d2380c9950416f7bd983f05219cc6", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 3937389045, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sqzxbdje": 1130985.9, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执1869号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "梁玉芬", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "吴华", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行,地址南宁市友爱南路41号商住楼一层。法定代表人刘杰。被执行人梁玉芬,女,1973年02月10日出生,地址南宁市。被执行人吴华,男,1971年04月02日出生,地址南宁市。被执行人广西鼎铭房地产开发有限公司,地址南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强。", - "c_gkws_id": "2fe3d400-471b-456b-a8a5-a939003ff785", - "c_gkws_pjjg": "终结本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或申请法律责任。本裁定送达后即发生法律效力。", - "c_id": "f778cf9e54c09c653ea66cc3686d0857", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-21", - "d_larq": "2016-11-15", - "n_ajbs": "6634a3e3f074e5456947271023459150", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 4171695506, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 175923.69, - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2016)桂0107执1871号", - "c_ah_hx": "(2023)桂0107执恢1701号:5a3a3e67f0c4d9343ce2f89a9bf78e66", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "唐觉荣", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行,地址南宁市友爱南路41号商住楼一层。法定代表人刘杰。被执行人唐觉荣,男,1982年11月21日出生,地址南宁市。被执行人广西鼎铭房地产开发有限公司,地址南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强。", - "c_gkws_id": "3e497ad6-41e7-4a3d-9745-a93900418792", - "c_gkws_pjjg": "终结本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或申请法律责任。本裁定送达后即发生法律效力。", - "c_id": "ff9d190351cffa6b075436cb775a196a", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-21", - "d_larq": "2016-11-15", - "n_ajbs": "07c9ef9256bb9cb96031d83ce207122c", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 529087666, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 138564.6, - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2017)桂7102执22号", - "c_dsrxx": [ - { - "c_mc": "广西南城百货有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人:广西南城百货有限责任公司,住所地南宁市友爱南路22号南棉商业街216号,组织机构代码:73221231-6。法定代表人:钟永利,该公司董事长。被执行人:广西鼎铭房地产开发有限公司,住所地南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人:李强。广西南城百货有限责任公司申请执行广西鼎铭房地产开发有限公司房屋租赁合同纠纷一案,本院于2015年11月5日作出的(2015)南铁民初字第354号民事判决书,已发生法律效力。申请执行人向本院申请强制执行,申请执行标的为人民币1266776.95元。本院于2017年1月9日依法立案执行,并向被执行人发出执行通知书,责令被执行人履行生效民事判决书所确定的义务,但被执行人至今未履行。本院在执行过程中,对被执行人广西鼎铭房地产开发有限公司的银行存款、土地、房产、车辆、工商等财产情况展开了调查,查出被执行人名下位于南宁市西乡塘区秀灵路7号鼎盛国际商铺B座单元1025、1039号房的两处不动产权,予以轮候查封,现等候首封法院处置;另查出被执行人在中国光大银行有存款人民币126748.54元,本院将其冻结,因该存款是保证金账户,无法划拨。现被执行人无其他可供执行的财产,申请人也明确表示提供不出被执行人的财产或线索。基于上述事实,申请人同意本院终结本次执行程序,待找到被执行人有可供执行的财产线索,再申请恢复执行。本院认为,被执行人广西鼎铭房地产开发有限公司现阶段确无可供执行的财产,现申请执行人书面同意本院终结本次执行程序,符合法律规定。依照《最高人民法院关于适用<中华人民共和国民事诉讼法>的解释》第五百一十九条、《最高人民法院关于执行案件立案、结案若干问题的意见》第十六条第三项规定,裁定如下:", - "c_gkws_glah": "(2015)南铁民初字第354号", - "c_gkws_id": "c8ccdb23-4d70-4240-93d9-a863003479b6", - "c_gkws_pjjg": "终结(2015)南铁民初字第354号民事判决书本次的执行程序。终结本次执行程序后,如申请执行人发现被执行人的可供执行财产的,可就尚未实现的债权申请重新立案,恢复南宁铁路运输法院(2015)南铁民初字第354号民事判决书的执行。申请重新立案执行时,应当提交执行申请书和提供财产线索或具备执行条件的证明。本裁定送达后立即生效行。", - "c_id": "a864d110aec96b361602eab920e4106f", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-06-28", - "d_larq": "2017-01-09", - "n_ajbs": "faf482c03bd2bc43c20725753886c727", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1092400076, - "n_jaay": "租赁合同纠纷", - "n_jabdje": 1244093, - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁铁路运输法院", - "n_jbfy_cj": "基层法院", - "n_laay": "租赁合同纠纷", - "n_sjdwje": 0, - "n_sqzxbdje": 1244093, - "n_ssdw": "被执行人", - "n_wzxje": 1244093 - }, - { - "c_ah": "(2017)桂0103执保1521号", - "c_dsrxx": [ - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "韦文海", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "潘元花", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "51c9fafbc2274e00f283aee9f5696158", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-09-12", - "d_larq": "2017-06-14", - "n_ajbs": "0f45c91500489f77df85e86b1881016f", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 63474981, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2018)桂0103执保1256号", - "c_dsrxx": [ - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "韦文海", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "潘元花", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "e25a19b74f35e284aecd9bd619026863", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-05-17", - "d_larq": "2018-05-04", - "n_ajbs": "0fa87e2f38d5518749260663a2950088", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 122322234, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2019)桂0107执保495号", - "c_dsrxx": [ - { - "c_mc": "张桂芳", - "n_dsrlx": "自然人", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - }, - { - "c_mc": "陈丹", - "n_dsrlx": "自然人", - "n_ssdw": "利害关系人" - }, - { - "c_mc": "李荣峰", - "n_dsrlx": "自然人", - "n_ssdw": "利害关系人" - } - ], - "c_id": "5a9db08c04d6111d059c2dbbfab4e3c5", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2019-03-14", - "d_larq": "2019-02-19", - "n_ajbs": "fe561a08fd0efe757ec94726326adb65", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 3278534719, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2019)桂0107执恢246号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "梁玉芬", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "吴华", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "a7a7314e2ac0bcd076e7783eadbdfa4d", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2019-08-21", - "d_larq": "2019-05-09", - "n_ajbs": "7527e73aca24f6fd4e98f2a4c290cf52", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 1097641588, - "n_jaay": "未知", - "n_jabdje": 178462.55, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、无因管理、不当得利", - "n_sjdwje": 380000, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2020)桂0103执保254号", - "c_ah_hx": "(2021)桂0103执5652号:14124b1098f5f3693beef922a586badd", - "c_ah_ys": "(2019)桂0103民初16680号:06b860c4388a66e580b8c5253af27346", - "c_dsrxx": [ - { - "c_mc": "中国工商银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "王玉权", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "93eb07fdf0cc6d498795dc3d2ed293cd", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2020-02-28", - "d_larq": "2020-01-21", - "n_ajbs": "c5107a3beb1d827fef71072e4f6a5c64", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 1352532658, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2021)桂0107执恢332号", - "c_ah_ys": "(2016)桂0107执479号:2e772f0e3830f29b2b58ee6710664deb", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "7d41a2c7271f745d542f1c52f6f9f817", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-05-28", - "d_larq": "2021-03-16", - "n_ajbs": "b6038222301aebedeb272a9bf23c2411", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 3014529685, - "n_jaay": "未知", - "n_jabdje": 107280.3, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 143637.78, - "n_sqzxbdje": 107280.3, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2021)桂0103执5652号", - "c_ah_ys": "(2020)桂0103执保254号:c5107a3beb1d827fef71072e4f6a5c64", - "c_dsrxx": [ - { - "c_mc": "中国工商银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "王玉权", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "35cad0a823ffb6facca09d56b9606268", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-09-14", - "d_larq": "2021-04-09", - "n_ajbs": "14124b1098f5f3693beef922a586badd", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1687907883, - "n_jaay": "借款合同纠纷", - "n_jabdje": 89972.6, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 91222.6, - "n_sqzxbdje": 89972.6, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2021)桂0107执保4197号", - "c_ah_hx": "(2022)桂0107执5332号:5c77d5b423c30e38fa9d72af0990aff7", - "c_ah_ys": "(2021)桂0107民初6529号:744e06488a38cecd0d33955d6aa10fe2", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "何明", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "4d6a7c5ac17390120da04e6bec956a25", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-11-24", - "d_larq": "2021-10-29", - "n_ajbs": "247633f2d9d17ca3508816e4ea641765", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 2876993130, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2021)桂0107执保4199号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "冯波", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "杨日新", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "aedada9aef109fc138c621e2d065a093", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-11-24", - "d_larq": "2021-10-29", - "n_ajbs": "2deda6828f26bd027e9ffcd417a0b802", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 2192571790, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2021)桂0107执保4200号", - "c_ah_hx": "(2022)桂0107执5329号:e9333b2981821229cdeceacad06cd6bc", - "c_ah_ys": "(2021)桂0107民初4033号:1d708a25b1bdde010e4f31d9f1112aff", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "282e48eeace8a9b33525e9f296c87010", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-11-24", - "d_larq": "2021-10-29", - "n_ajbs": "8e7997a0d7be940d7948824def76ccd1", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 4130211728, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2022)桂0107执5329号", - "c_ah_hx": "(2023)桂0107执恢2594号:62834d00bd437f63a054d63ceceb68d4", - "c_ah_ys": "(2021)桂0107执保4200号:8e7997a0d7be940d7948824def76ccd1", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "fe5e2fce12282dffb852edbf84dbad40", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-10-11", - "d_larq": "2022-05-31", - "n_ajbs": "e9333b2981821229cdeceacad06cd6bc", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1997109090, - "n_jaay": "借款合同纠纷", - "n_jabdje": 56721.68, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 0, - "n_sqzxbdje": 56721.68, - "n_ssdw": "被执行人", - "n_wzxje": 56721.68 - }, - { - "c_ah": "(2022)桂0107执5332号", - "c_ah_ys": "(2021)桂0107执保4197号:247633f2d9d17ca3508816e4ea641765", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "何明", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "5057f69d5330868ee5acf6a5ed97853a", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-08-19", - "d_larq": "2022-05-31", - "n_ajbs": "5c77d5b423c30e38fa9d72af0990aff7", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 153369861, - "n_jaay": "借款合同纠纷", - "n_jabdje": 82747.85, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 1141, - "n_sqzxbdje": 82747.85, - "n_ssdw": "被执行人", - "n_wzxje": 81606.85 - }, - { - "c_ah": "(2023)桂0107执1677号", - "c_ah_ys": "(2021)桂01民终10117号:d9074371e9008a4c89b063bd8964b023", - "c_dsrxx": [ - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "784b1a946968ff1aadc2e2dda9dd170f", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-08-22", - "d_larq": "2023-02-02", - "n_ajbs": "e6246c51d9aef85a27db2d3d2c4d2710", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1810123267, - "n_jaay": "建设工程合同纠纷", - "n_jabdje": 13482080, - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "建设工程合同纠纷", - "n_sjdwje": 700000, - "n_sqzxbdje": 13482080, - "n_ssdw": "被执行人", - "n_wzxje": 12782080 - }, - { - "c_ah": "(2023)桂0107执2561号", - "c_ah_ys": "(2022)桂0107民初3520号:016687d73ba110aa8cdd4a2ac9e3dd99", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "甘翠英", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "a7ee267ee9ca2c40e15ca10387498a4c", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-05-11", - "d_larq": "2023-03-03", - "n_ajbs": "3ed3ad5129ccec036cadd76d956b8454", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 2150167114, - "n_jaay": "借款合同纠纷", - "n_jabdje": 48149.29, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 622, - "n_sqzxbdje": 48149.29, - "n_ssdw": "被执行人", - "n_wzxje": 47527.29 - }, - { - "c_ah": "(2023)桂0107执恢1701号", - "c_ah_ys": "(2016)桂0107执1871号:07c9ef9256bb9cb96031d83ce207122c", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "唐觉荣", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "2c42e0b305344895687c79545f4cd48d", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-08-17", - "d_larq": "2023-07-20", - "n_ajbs": "5a3a3e67f0c4d9343ce2f89a9bf78e66", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 776289030, - "n_jaay": "未知", - "n_jabdje": 138564.6, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 140542.6, - "n_sqzxbdje": 138564.6, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2023)桂0107执保3588号", - "c_ah_ys": "(2023)桂0107民初11484号:4c9aa71e1290e93a0819a0f5cc1b2c92", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "侯安魁", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "db231c94da999449d759d865b73759fc", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-12-21", - "d_larq": "2023-11-10", - "n_ajbs": "74ccc2633f50fcac6825d958d923eb34", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 2104653087, - "n_jaay": "未知", - "n_jafs": "部分保全", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2023)桂0107执恢2594号", - "c_ah_ys": "(2022)桂0107执5329号:e9333b2981821229cdeceacad06cd6bc", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_id": "f5742286260a4cba9fe7b1320033b049", - "c_id": "26515fd4263902833366300ebd543735", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-11-28", - "d_larq": "2023-11-23", - "n_ajbs": "62834d00bd437f63a054d63ceceb68d4", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 1071715949, - "n_jaay": "未知", - "n_jabdje": 56721.68, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 57472.68, - "n_sqzxbdje": 56721.68, - "n_ssdw": "被执行人", - "n_wzxje": 0 - } - ], - "count": { - "area_stat": "广西壮族自治区(24)", - "ay_stat": "未知(14),民事(10)", - "count_beigao": 24, - "count_jie_beigao": 24, - "count_jie_other": 0, - "count_jie_total": 24, - "count_jie_yuangao": 0, - "count_other": 0, - "count_total": 24, - "count_wei_beigao": 0, - "count_wei_other": 0, - "count_wei_total": 0, - "count_wei_yuangao": 0, - "count_yuangao": 0, - "jafs_stat": "终结本次执行程序(8),保全完毕(7),执行完毕(4),终结执行(4),部分保全(1)", - "larq_stat": "2016(6),2017(2),2018(1),2019(2),2020(1),2021(5),2022(2),2023(5)", - "money_beigao": 39, - "money_jie_beigao": 39, - "money_jie_other": 0, - "money_jie_total": 39, - "money_jie_yuangao": 0, - "money_other": 0, - "money_total": 39, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_percent": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 0 - } - }, - "preservation": {} - }, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "广西鼎铭房地产开发有限公司", - "pName": "李强", - "relationship": ["sh", "lp", "tm"], - "stockHolderItem": { - "investDate": "", - "investRate": "10.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 100 - } - }, - { - "basicInfo": { - "apprdate": "2016-05-28", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450107MA5KK3PU6A", - "district": "", - "estiblishTime": "2004-07-02", - "industry": "零售业", - "industry_code": "F", - "legalPersonName": "李健", - "name": "南宁市铭鼎商贸有限公司", - "nic_code": "F5211", - "nic_name": "批发和零售业-零售业-综合零售-百货零售", - "opscope": "窗帘布艺,家居用品,装饰材料(危险化学品除外),日用百货,服装,纺织品。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "100.000000万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4501002508737", - "regStatus": "吊销,未注销", - "regorg": "南宁市西乡塘区市场监督管理局", - "revdate": "2016-05-28", - "type": "1" - }, - "executedPerson": [ - { - "caseCode": "(2010)青执字第01000号", - "caseCreateTime": "2010-09-06", - "execCourtName": "", - "execMoney": 283845, - "partyCardNum": "452528********3012", - "pname": "李健" - }, - { - "caseCode": "(2010)青执字第00188号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 308464, - "partyCardNum": "45252819691****3012", - "pname": "李健" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "南宁市铭鼎商贸有限公司", - "pName": "李强", - "relationship": ["sh"], - "stockHolderItem": { - "investDate": "", - "investRate": "20.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 20 - } - }, - { - "basicInfo": { - "apprdate": "2018-06-25", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司分公司(自然人投资或控股)", - "creditCode": "", - "district": "青秀区", - "estiblishTime": "2002-01-28", - "his_staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": [""] - } - ] - }, - "industry": "房地产业", - "industry_code": "K", - "legalPersonName": "李强", - "name": "广西鼎铭房地产置换服务有限公司南宁分公司", - "nic_code": "K7030", - "nic_name": "房地产业-房地产业-房地产中介服务-房地产中介服务", - "opscope": "房地产信息咨询服务,房地产交易居间、代理、行纪;商品信息咨询(不含期货、金融、保险、证券等国家专项规定),商品交易居间、代理、行纪。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "5.0万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4501001005198", - "regStatus": "吊销,未注销", - "regorg": "南宁市青秀区市场监督管理局", - "revdate": "2018-06-25", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": [""] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": {}, - "orgName": "广西鼎铭房地产置换服务有限公司南宁分公司", - "pName": "李强", - "relationship": ["lp", "tm", "his_tm"] - }, - { - "adminPenalty": [ - { - "content": "", - "decisionDate": "2010-08-23", - "departmentName": "海淀分局", - "legalPersonName": "李强", - "punishNumber": "京工商海处字(2010)第D2389号", - "reason": "", - "type": "逾期年检" - } - ], - "basicInfo": { - "apprdate": "2006-04-13", - "base": "bj", - "candate": "", - "city": "北京市", - "companyOrgType": "其他有限责任公司分公司", - "creditCode": "91110108MA0464P97H", - "district": "海淀区", - "estiblishTime": "2006-04-13", - "industry": "软件和信息技术服务业", - "industry_code": "I", - "legalPersonName": "李强", - "name": "深圳市亿讯时空信息技术有限公司北京分公司", - "nic_code": "I6599", - "nic_name": "信息传输、软件和信息技术服务业-软件和信息技术服务业-其他信息技术服务业-其他未列明信息技术服务业", - "opscope": "计算机软件和系统集成及辅助设备;网络工程;通讯设备的技术开发、咨询;广告设计。", - "province": "北京市", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "", - "regCapitalCurrency": "人民币", - "regNumber": "1101081949120", - "regStatus": "吊销", - "regorg": "北京市工商行政管理局海淀分局", - "revdate": "2010-11-25", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["负责人"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "深圳市亿讯时空信息技术有限公司北京分公司", - "pName": "李强", - "relationship": ["lp", "tm"] - }, - { - "basicInfo": { - "apprdate": "2008-09-04", - "base": "gd", - "candate": "2020-04-07", - "city": "深圳市", - "companyOrgType": "有限责任公司", - "creditCode": "91440300786556245H", - "district": "福田区", - "estiblishTime": "2006-03-23", - "industry": "科技推广和应用服务业", - "industry_code": "M", - "legalPersonName": "李铭", - "name": "深圳市亿讯时空信息技术有限公司", - "nic_code": "M7590", - "nic_name": "科学研究和技术服务业-科技推广和应用服务业-其他科技推广服务业-其他科技推广服务业", - "opscope": "一般经营项目是:计算机软件和系统集成及辅助设备、网络工程、通讯设备的技术开发、咨询、销售,国内贸易(不含专营、专控、专卖商品),从事货物、技术进出口业务(不含分销、国家专营专控商品);广告业务。,许可经营项目是:", - "province": "广东省", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "1000.000000万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "440301103603769", - "regStatus": "吊销,未注销", - "regorg": "福田局", - "revdate": "2020-04-07", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["董事,总经理"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2010)青执字第00198号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 444028, - "partyCardNum": "36042819721****0037", - "pname": "秦学文" - }, - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "深圳市亿讯时空信息技术有限公司", - "pName": "李强", - "relationship": ["sh", "tm"], - "stockHolderItem": { - "investDate": "", - "investRate": "17.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 170 - } - }, - { - "basicInfo": { - "apprdate": "2004-06-30", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450100MA5KJ83P3J", - "district": "", - "estiblishTime": "2003-08-06", - "industry": "零售业", - "industry_code": "F", - "legalPersonName": "李健", - "name": "南宁市豆花香食品有限公司", - "nic_code": "F5227", - "nic_name": "批发和零售业-零售业-食品、饮料及烟草制品专门零售-烟草制品零售", - "opscope": "豆制品的生产及销售;农副土特产品,日用百货,五金交电的销售。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "50万元人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4501002505675", - "regStatus": "吊销,未注销", - "regorg": "南宁市行政审批局", - "revdate": "2007-02-08", - "type": "1" - }, - "executedPerson": [ - { - "caseCode": "(2010)青执字第01000号", - "caseCreateTime": "2010-09-06", - "execCourtName": "", - "execMoney": 283845, - "partyCardNum": "452528********3012", - "pname": "李健" - }, - { - "caseCode": "(2010)青执字第00188号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 308464, - "partyCardNum": "45252819691****3012", - "pname": "李健" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "南宁市豆花香食品有限公司", - "pName": "李强", - "relationship": ["sh"], - "stockHolderItem": { - "investDate": "2003-08-06", - "investRate": "50.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 25 - } - }, - { - "basicInfo": { - "apprdate": "2005-09-26", - "base": "gx", - "candate": "", - "city": "柳州市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450200MA5KPNEG3T", - "district": "", - "estiblishTime": "2001-04-11", - "industry": "软件和信息技术服务业", - "industry_code": "I", - "legalPersonName": "李健", - "name": "广西鼎铭房地产置换服务有限公司", - "nic_code": "I6513", - "nic_name": "信息传输、软件和信息技术服务业-软件和信息技术服务业-软件开发-应用软件开发", - "opscope": "连锁经营:房地产信息咨询服务,房地产交易居间、代理、行纪;商品信息咨询(不含期货、金融、保险、证券等国家专项规定),商品交易居间、代理、行纪。", - "province": "广西壮族自治区", - "reccap": 200, - "reccapcur": "人民币", - "regCapital": "250万元人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4502002501968", - "regStatus": "吊销,未注销", - "regorg": "柳州市市场监督管理局", - "revdate": "2009-01-04", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["监事"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2010)青执字第01000号", - "caseCreateTime": "2010-09-06", - "execCourtName": "", - "execMoney": 283845, - "partyCardNum": "452528********3012", - "pname": "李健" - }, - { - "caseCode": "(2010)青执字第00188号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 308464, - "partyCardNum": "45252819691****3012", - "pname": "李健" - }, - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "广西鼎铭房地产置换服务有限公司", - "pName": "李强", - "relationship": ["sh", "tm"], - "stockHolderItem": { - "investDate": "", - "investRate": "10.87%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 50 - } - }, - { - "basicInfo": { - "apprdate": "2005-03-10", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "914500007479525012", - "district": "", - "estiblishTime": "2003-02-27", - "industry": "建筑装饰、装修和其他建筑业", - "industry_code": "E", - "legalPersonName": "李健", - "name": "广西鼎铭装饰工程有限公司", - "nic_code": "E5011", - "nic_name": "建筑业-建筑装饰、装修和其他建筑业-建筑装饰和装修业-公共建筑装饰和装修", - "opscope": "建筑装修装饰工程专业承包(暂定)叁级;五金交电、日用百货、建筑材料、装饰材料、机电产品、汽车配件、摩托车配件的购销。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "300万元人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4500002501464", - "regStatus": "吊销,未注销", - "regorg": "广西壮族自治区市场监督管理局", - "revdate": "2007-09-14", - "type": "1" - }, - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "广西鼎铭装饰工程有限公司", - "pName": "李强", - "relationship": ["sh"], - "stockHolderItem": { - "investDate": "", - "investRate": "5.26%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 30 - } - } - ], - "total": 8 -} diff --git a/t3.jsonc b/t3.jsonc deleted file mode 100644 index e90752e..0000000 --- a/t3.jsonc +++ /dev/null @@ -1,5210 +0,0 @@ -[ - { - "apiID": "CAR061", - "data": { "carNum": "0" }, - "success": true, - "timestamp": "2025-03-19 17:00:59" - }, - { - "apiID": "G28BJ05", - "data": null, - "success": false, - "timestamp": "2025-03-19 17:00:59", - "error": "未匹配到相关结果" - }, - { - "apiID": "G27BJ05", - "data": null, - "success": false, - "timestamp": "2025-03-19 17:00:59", - "error": "未匹配到相关结果" - }, - { - "apiID": "G26BJ05", - "data": null, - "success": false, - "timestamp": "2025-03-19 17:00:59", - "error": "未匹配到相关结果" - }, - { - "apiID": "G03HZ01", - "data": { "filterType": "0" }, - "success": true, - "timestamp": "2025-03-19 17:00:59" - }, - { - "apiID": "G05HZ01", - "data": { - "datalist": [ - { - "adminPenalty": [ - { - "content": "", - "decisionDate": "2016-03-19", - "departmentName": "南宁市工商行政管理局高新技术产业开发区分局", - "legalPersonName": "李强", - "punishNumber": "南工商高新处字(2016)500010024号", - "reason": "公司成立后无正当理由超过6个月未开业的,或者开业后自行停业连续6个月以上", - "type": "" - }, - { - "content": "-", - "decisionDate": "2016-03-19", - "departmentName": "45011101", - "legalPersonName": "李强", - "punishNumber": "南工商高新处字(2016)500010024号", - "reason": "南宁恒发网络科技有限公司等3177户企业,未依法进行企业信息网上年报公示。经我分局执法人员在以上企业的执照注册住所检查,发现上述企业已不在其注册住所经营或办公,根据企业注册登记时所留电话也联系不上上述企业。", - "type": "吊销执照(登记证)" - } - ], - "basicInfo": { - "apprdate": "2016-03-19", - "base": "gx", - "candate": "", - "city": "", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450100742080353R", - "district": "", - "estiblishTime": "2002-10-16", - "industry": "房地产业", - "industry_code": "K", - "legalPersonName": "李强", - "name": "广西鼎铭房地产开发有限公司", - "nic_code": "K7010", - "nic_name": "房地产业-房地产业-房地产开发经营-房地产开发经营", - "opscope": "房地产开发经营(取得相应资质后方可在其资质等级核定范围内从事房地产开发经营活动);建筑材料、装饰材料、农副土特产品、日用百货、五金交电、汽车零配件的购销;计算机销售及维修。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "1000.000000万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "450000200012318", - "regStatus": "吊销,未注销", - "regorg": "南宁市市场监督管理局高新技术产业开发区分局", - "revdate": "2016-03-19", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["监事"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": { - "administrative": {}, - "bankrupt": { - "cases": [ - { - "c_ah": "(2013)桂破(预)终字第1号", - "c_dsrxx": [ - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "b2bc4cbb4597ca951323c4ee75582d94", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2013-10-09", - "d_larq": "2013-08-27", - "n_ajbs": "bde12cc6e38906392add0b9806a0b1e3", - "n_ajjzjd": "已结案", - "n_ajlx": "破产", - "n_crc": 2213659596, - "n_jafs": "驳回申请", - "n_jbfy": "广西壮族自治区高级人民法院", - "n_jbfy_cj": "高级人民法院", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2024)桂01破申104号", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "c376c436fd5737ebd8e9d2802685719c", - "c_ssdy": "广西壮族自治区", - "d_larq": "2024-12-31", - "n_ajbs": "f4efb2939d50e4e44fc038e83bacec71", - "n_ajjzjd": "未结案", - "n_ajlx": "破产申请审查", - "n_crc": 1230623427, - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_ssdw": "被申请人" - } - ], - "count": { - "area_stat": "广西壮族自治区(2)", - "ay_stat": "与公司、证券、保险、票据等有关的民事纠纷(2)", - "count_beigao": 2, - "count_jie_beigao": 1, - "count_jie_other": 0, - "count_jie_total": 1, - "count_jie_yuangao": 0, - "count_other": 0, - "count_total": 2, - "count_wei_beigao": 1, - "count_wei_other": 0, - "count_wei_total": 1, - "count_wei_yuangao": 0, - "count_yuangao": 0, - "jafs_stat": "驳回申请(1)", - "larq_stat": "2013(1),2024(1)" - } - }, - "cases_tree": { - "civil": [ - { - "c_ah": "(2011)西民二初字第188号", - "case_type": 300, - "n_ajbs": "ce78cb5040a8da71a367dddd1f402876", - "stage_type": 1 - }, - { - "c_ah": "(2011)城中民二初字第***号", - "case_type": 300, - "n_ajbs": "ae6cd28c29e7114921e933ba0021cda7", - "stage_type": 1 - }, - { - "c_ah": "(2012)青民二初字第***号", - "case_type": 300, - "n_ajbs": "980b487df274dc5064bf71bed0b574f8", - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第***号", - "case_type": 300, - "n_ajbs": "a3cbcd5991b0dc8dffc81d4edef53450", - "next": { - "c_ah": "(2015)南市民二终字第761号", - "case_type": 300, - "n_ajbs": "2e1572e789beeb3250cb8a3c4551331d", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第***号", - "case_type": 300, - "n_ajbs": "397bb5b3efed20970eabd9bc42b43e99", - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第696号", - "case_type": 300, - "n_ajbs": "19a203ba889603bbe0b25d671d0cfdd1", - "next": { - "c_ah": "(2016)桂0107执479号", - "case_type": 1000, - "n_ajbs": "2e772f0e3830f29b2b58ee6710664deb", - "next": { - "c_ah": "(2021)桂0107执恢332号", - "case_type": 1000, - "n_ajbs": "b6038222301aebedeb272a9bf23c2411", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2014)西民二初字第697号", - "case_type": 300, - "n_ajbs": "b99a3abefc68ddefc19092769b849774", - "next": { - "c_ah": "(2016)桂0107执480号", - "case_type": 1000, - "n_ajbs": "67b3f5e31746ee410f308329c2e71c6d", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2015)南铁民初字第354号", - "case_type": 300, - "n_ajbs": "c7bb68f44d4eb1122376c9d28d5b92c9", - "stage_type": 1 - }, - { - "c_ah": "(2015)南市民二终字第***号", - "case_type": 300, - "n_ajbs": "23f0da8964703e47398b0246bd411cc0", - "stage_type": 2 - }, - { - "c_ah": "(2016)桂0107民初***号", - "case_type": 300, - "n_ajbs": "b16fa3be64f28f82c0120f982f259ce5", - "next": { - "c_ah": "(2020)桂0107民监20号", - "case_type": 300, - "n_ajbs": "ac5a3436e300bddbf52c88ba72b132f8", - "next": { - "c_ah": "(2021)桂0107民再5号", - "case_type": 300, - "n_ajbs": "1601cceae6feee75e817b296fd7a2383", - "stage_type": 4 - }, - "stage_type": 3 - }, - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初1800号", - "case_type": 300, - "n_ajbs": "9cbac4e5e1c788a6f7b2a0d3e99c19aa", - "next": { - "c_ah": "(2016)桂0107执1708号", - "case_type": 1000, - "n_ajbs": "5ac3742e7b01d827596138397a183bc8", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初1984号", - "case_type": 300, - "n_ajbs": "b50d021466f5194f6dc702d45cc31037", - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初1985号", - "case_type": 300, - "n_ajbs": "cd78882c279e50e657f4258149cff9c2", - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初6524号", - "case_type": 300, - "n_ajbs": "a1d5d7c5f80da9a95d2b2d25ce76bf60", - "stage_type": 1 - }, - { - "c_ah": "(2016)桂0107民初6525号", - "case_type": 300, - "n_ajbs": "bed64f9d400f8e027be0308e32fd3bd9", - "stage_type": 1 - }, - { - "c_ah": "(2017)桂01民终****号", - "case_type": 300, - "n_ajbs": "f3227e9ad19747b39e54bbe7ea3e8620", - "next": { - "c_ah": "(2018)桂民再***号", - "case_type": 300, - "n_ajbs": "7aaf61175027315ca9ccf5255ec8dd1e", - "stage_type": 4 - }, - "stage_type": 2 - }, - { - "c_ah": "(2017)桂0103民初2872号", - "case_type": 300, - "n_ajbs": "a08705cb86c2d8cb974ff2c731dd4e69", - "stage_type": 1 - }, - { - "c_ah": "(2017)桂民申****号", - "case_type": 300, - "n_ajbs": "1ab706f40ba4ecf0d97a28247a18d533", - "stage_type": 3 - }, - { - "c_ah": "(2018)桂01民终6428号", - "case_type": 300, - "n_ajbs": "0baee96aab4f05d1a818dc854d1a136d", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6429号", - "case_type": 300, - "n_ajbs": "0b4fa40f20aced321c83def4d1d78d49", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6430号", - "case_type": 300, - "n_ajbs": "7354b28c1edfb872837c7cc20450c8bb", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6431号", - "case_type": 300, - "n_ajbs": "3e5a1bf7ed4f46ff17eb227acaabdde2", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6432号", - "case_type": 300, - "n_ajbs": "e223d3e50645a1760b44b316648752de", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6433号", - "case_type": 300, - "n_ajbs": "a91ee45363eba1743aaa779034510bf7", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6434号", - "case_type": 300, - "n_ajbs": "004c1fe7cae16f562652a5ec3b7a40f8", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6435号", - "case_type": 300, - "n_ajbs": "0e65f0a22be5f5c8c6a7601f1310fbf3", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6436号", - "case_type": 300, - "n_ajbs": "cf2142663b3c1ebbaaa79fe765597eca", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6437号", - "case_type": 300, - "n_ajbs": "7591de13423a8fc158a831a7866de5fe", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6438号", - "case_type": 300, - "n_ajbs": "5c7d0d4450108c76877d5df357177aea", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6439号", - "case_type": 300, - "n_ajbs": "e5e69872b0ea503cf7352d97a4c82f1a", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6440号", - "case_type": 300, - "n_ajbs": "9885829e86f91989b04126072c72c736", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6441号", - "case_type": 300, - "n_ajbs": "787434dd66233be20eb728e1531094d0", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6442号", - "case_type": 300, - "n_ajbs": "6c7df6ef8cfa15b68039100bed4de5a6", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民终6443号", - "case_type": 300, - "n_ajbs": "fd10b5ab209e1d339cd61e85847a3f58", - "stage_type": 2 - }, - { - "c_ah": "(2018)桂01民初1232号", - "case_type": 300, - "n_ajbs": "53165ff19300f51b0063ddad26458953", - "next": { - "c_ah": "(2022)桂民终713号", - "case_type": 300, - "n_ajbs": "434bd8c8c94f0b6dded08cf3f10efa81", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2019)桂0103民初16680号", - "case_type": 300, - "n_ajbs": "06b860c4388a66e580b8c5253af27346", - "next": { - "c_ah": "(2020)桂0103执保254号", - "case_type": 1000, - "n_ajbs": "c5107a3beb1d827fef71072e4f6a5c64", - "next": { - "c_ah": "(2021)桂0103执5652号", - "case_type": 1000, - "n_ajbs": "14124b1098f5f3693beef922a586badd", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2020)桂0107民初4402号", - "case_type": 300, - "n_ajbs": "da1f23eca2f5cb2dc01849ccac038785", - "next": { - "c_ah": "(2021)桂01民终10117号", - "case_type": 300, - "n_ajbs": "d9074371e9008a4c89b063bd8964b023", - "next": { - "c_ah": "(2023)桂0107执1677号", - "case_type": 1000, - "n_ajbs": "e6246c51d9aef85a27db2d3d2c4d2710", - "stage_type": 5 - }, - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2020)桂01民终*****号", - "case_type": 300, - "n_ajbs": "8572959b09db3945b7eaefeb1390ae96", - "stage_type": 2 - }, - { - "c_ah": "(2021)桂0107民初1903号", - "case_type": 300, - "n_ajbs": "af7ad0787c99f6f6ce5e04daeb53f7dc", - "stage_type": 1 - }, - { - "c_ah": "(2021)桂0107民初4033号", - "case_type": 300, - "n_ajbs": "1d708a25b1bdde010e4f31d9f1112aff", - "next": { - "c_ah": "(2021)桂0107执保4200号", - "case_type": 1000, - "n_ajbs": "8e7997a0d7be940d7948824def76ccd1", - "next": { - "c_ah": "(2022)桂0107执5329号", - "case_type": 1000, - "n_ajbs": "e9333b2981821229cdeceacad06cd6bc", - "next": { - "c_ah": "(2023)桂0107执恢2594号", - "case_type": 1000, - "n_ajbs": "62834d00bd437f63a054d63ceceb68d4", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2021)桂0107民初6529号", - "case_type": 300, - "n_ajbs": "744e06488a38cecd0d33955d6aa10fe2", - "next": { - "c_ah": "(2021)桂0107执保4197号", - "case_type": 1000, - "n_ajbs": "247633f2d9d17ca3508816e4ea641765", - "next": { - "c_ah": "(2022)桂0107执5332号", - "case_type": 1000, - "n_ajbs": "5c77d5b423c30e38fa9d72af0990aff7", - "stage_type": 5 - }, - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2021)桂0107民初6530号", - "case_type": 300, - "n_ajbs": "c98897d88762b166a6100d6205ad7616", - "next": { - "c_ah": "(2022)桂01民终3182号", - "case_type": 300, - "n_ajbs": "09db87c7b81f7d75dad3ca475ebcc7f3", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2022)桂0107民初3520号", - "case_type": 300, - "n_ajbs": "016687d73ba110aa8cdd4a2ac9e3dd99", - "next": { - "c_ah": "(2023)桂0107执2561号", - "case_type": 1000, - "n_ajbs": "3ed3ad5129ccec036cadd76d956b8454", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2023)桂01民终7084号", - "case_type": 300, - "n_ajbs": "d37b8c5bf8e5f0a6cedea83df07387d2", - "stage_type": 2 - }, - { - "c_ah": "(2023)桂0107民初8601号", - "case_type": 300, - "n_ajbs": "027dd27afd450f1f93c9340a4f4330bf", - "next": { - "c_ah": "(2024)桂01民终1715号", - "case_type": 300, - "n_ajbs": "dd889cab80318f7232371ccd6ba9223d", - "stage_type": 2 - }, - "stage_type": 1 - }, - { - "c_ah": "(2023)桂0107民初11484号", - "case_type": 300, - "n_ajbs": "4c9aa71e1290e93a0819a0f5cc1b2c92", - "next": { - "c_ah": "(2023)桂0107执保3588号", - "case_type": 1000, - "n_ajbs": "74ccc2633f50fcac6825d958d923eb34", - "stage_type": 5 - }, - "stage_type": 1 - }, - { - "c_ah": "(2023)桂0107民初15009号", - "case_type": 300, - "n_ajbs": "bd9e991d89cb9f16c4669b20045df23c", - "stage_type": 1 - }, - { - "c_ah": "(2024)桂01民终4856号", - "case_type": 300, - "n_ajbs": "7f056b1b2e0d1c5f7577bea562b65d97", - "stage_type": 2 - }, - { - "c_ah": "(2024)桂01民终6998号", - "case_type": 300, - "n_ajbs": "7546cd6129f179313c1aa14370c28b3f", - "stage_type": 2 - } - ], - "criminal": [ - { - "c_ah": "(2011)桂刑经终字第18号", - "case_type": 200, - "n_ajbs": "e49ef61b5153a399de9873aae5feaa6c", - "stage_type": 2 - } - ] - }, - "civil": { - "cases": [ - { - "c_ah": "(2011)西民二初字第188号", - "c_dsrxx": [ - { - "c_mc": "南宁盛驰房地产咨询有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告南宁某甲房地产咨询有限责任公司,住所地南宁市大学东路x号世贸西城x座x号。法定代表人陈某,执行董事。委托代理人李能,广西民族律师事务所律师。委托代理人伍博,广西民族律师事务所实习律师。被告广西某乙房地产开发有限公司,原住所地南宁市科园大道x号高新苑x栋x号,现下落不明。法定代表人李某甲,现被羁押于南宁市第二看守所。", - "c_gkws_id": "583899a9-dae6-432e-b0e8-961f8d258635", - "c_gkws_pjjg": "被告广西某乙房地产开发有限公司支付原告南宁某甲房地产咨询有限责任公司酬金2475094.23元。案件受理费26601元,由被告广西某乙房地产开发有限公司负担。上述义务,义务人应于本判决生效之日起10日内履行完毕。逾期不履行金钱给付义务,依照《中华人民共和国民事诉讼法》第二百五十三条之规定,应加倍支付迟延履行期间的债务利息,权利人可在本案生效判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行人财产所在地法院申请执行。如不服本判决,可于判决书送达之日起15日内,向本院或南宁市中级人民法院递交上诉状,并按对方当事人的人数提供上诉状副本,上诉于广西壮族自治区南宁市中级人民法院,并于上诉期满之日起7日内预交上诉案件受理费,逾期未预交又不提出缓交或免交申请的,则按自动撤回上诉处理。", - "c_id": "c8400b73b16f51a9a9e09bbcd2558f55", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2013-08-16", - "d_larq": "2010-12-30", - "n_ajbs": "ce78cb5040a8da71a367dddd1f402876", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 830116275, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,房屋买卖合同纠纷,商品房委托代理销售合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,委托合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 2475094, - "n_qsbdje_level": 22, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2014)西民二初字第696号", - "c_ah_hx": "(2016)桂0107执479号:2e772f0e3830f29b2b58ee6710664deb", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告:中国农业银行股份有限公司南宁某支行。代表人:丘某,行长。委托代理人:许福天,广西钰锦律师事务所律师。委托代理人:秦钲尧,广西钰锦律师事务所实习律师。被告:黄某。委托代理人:黄奕农,广西昭盛律师事务所律师。委托代理人:韦浩,广西昭盛律师事务所实习律师。被告:广西某房地产开发有限公司。法定代表人:李某,经理。", - "c_gkws_id": "89f75e6e-13bf-4d6e-9f57-8e434e99f838", - "c_gkws_pjjg": "一、被告黄某偿还原告中国农业银行股份有限公司南宁某支行借款本金87860.6元;二、被告黄某偿还原告中国农业银行股份有限公司南宁某支行利息、罚息、复利、罚息欠息(截至2014年5月13日的利息7973.45元,罚息491.72元,复利302.6元,罚息欠息24.75元;从2014年5月14日起的利息、罚息、复利、罚息欠息按各方在《个人购房担保借款合同》中约定的计算方法计至本案生效判决规定的履行期限最后一日止);三、被告黄某偿还原告中国农业银行股份有限公司南宁某支行为实现债权而支出的律师代理费4833元;四、被告广西某房地产开发有限公司对被告黄某的上述第一、二、三项债务承担连带偿还责任;五、原告中国农业银行股份有限公司南宁某支行有权以被告黄某抵押的位于南宁市秀灵路7号鼎盛国际A座单元1211号房折价或者以拍卖、变卖该房所得的价款优先受偿。案件受理费2330元,由被告黄某、广西某房地产开发有限公司负担。上述债务,义务人应于本案判决生效之日起十日内履行完毕,如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。权利人可在本案生效判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行财产所在地人民法院申请执行。如不服本判决,可在本判决书送达之日起十五日内,向本院或南宁市中级人民法院递交上诉状,并按对方当事人的人数提出上诉状副本,上诉于南宁市中级人民法院。并在上诉期满之日起七日内向南宁市中级人民法院预交上诉案件受理费,逾期不预交又不提出缓交申请的,按自动撤回上诉处理。", - "c_id": "44ae4276c672e29cf23508a3b48d83aa", - "c_slfsxx": "1,2014-10-27 08:30:00,,", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2014-12-15", - "d_larq": "2014-08-18", - "n_ajbs": "19a203ba889603bbe0b25d671d0cfdd1", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2637126221, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 101486.12, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2014)西民二初字第697号", - "c_ah_hx": "(2016)桂0107执480号:67b3f5e31746ee410f308329c2e71c6d", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告:中国农业银行股份有限公司南宁某支行。代表人:丘某,行长。委托代理人:许福天,广西钰锦律师事务所律师。委托代理人:秦钲尧,广西钰锦律师事务所实习律师。被告:黄某。委托代理人:黄奕农,广西昭盛律师事务所律师。委托代理人:韦浩,广西昭盛律师事务所实习律师。被告:广西某房地产开发有限公司。法定代表人:李某,经理。", - "c_gkws_id": "f7fee607-3d98-41b1-8faf-3c2efba89e2b", - "c_gkws_pjjg": "一、被告黄某偿还原告中国农业银行股份有限公司南宁某支行借款本金99142.9元;二、被告黄某偿还原告中国农业银行股份有限公司南宁某支行利息、罚息、复利、罚息欠息(截至2014年5月13日的利息18601.63元,罚息2678.18元,复利2200.79元,罚息欠息59.78元;从2014年5月14日起的利息、罚息、复利、罚息欠息按各方在《个人购房担保借款合同》中约定的计算方法计至本案生效判决规定的履行期限最后一日止);三、被告黄某偿还原告中国农业银行股份有限公司南宁某支行为实现债权而支出的律师代理费6021元;四、被告广西某房地产开发有限公司对被告黄某的上述第一、二、三项债务承担连带偿还责任;五、原告中国农业银行股份有限公司南宁某支行有权以被告黄某抵押的位于南宁市秀灵路7号鼎盛国际A座单元1210号房折价或者以拍卖、变卖该房所得的价款优先受偿。案件受理费2874元,由被告黄某、广西某房地产开发有限公司负担。上述债务,义务人应于本案判决生效之日起十日内履行完毕,如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。权利人可在本案生效判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行财产所在地人民法院申请执行。如不服本判决,可在本判决书送达之日起十五日内,向本院或南宁市中级人民法院递交上诉状,并按对方当事人的人数提出上诉状副本,上诉于南宁市中级人民法院。并在上诉期满之日起七日内向南宁市中级人民法院预交上诉案件受理费,逾期不预交又不提出缓交申请的,按自动撤回上诉处理。", - "c_id": "ed209810a0236b2485b000ce55416bc1", - "c_slfsxx": "1,2014-10-27 08:30:00,,", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2014-12-15", - "d_larq": "2014-08-18", - "n_ajbs": "b99a3abefc68ddefc19092769b849774", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3345588433, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 128704.28, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2015)南铁民初字第354号", - "c_dsrxx": [ - { - "c_mc": "广西南城百货有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告广西南城百货有限责任公司,住所地南宁市友爱南路22号。法定代表人钟永利,该公司董事长。委托代理人李春辉,广西桂兴律师事务所律师。委托代理人唐振兴,广西桂兴律师事务所律师。被告广西鼎铭房地产开发有限公司,住所地南宁市西乡塘区科园大道。法定代表人李强。", - "c_gkws_id": "751bda44-c927-407b-87d1-a8640033844c", - "c_gkws_pjjg": "一、解除原告广西南城百货有限责任公司与被告广西鼎铭房地产开发有限公司于2006年8月30日签订的《地下室租赁合同》;二、被告广西鼎铭房地产开发有限公司向原告广西南城百货有限责任公司返还保证金100万元和利息(利息计算方法:以50万元为基数,自2008年11月1日起至本案生效判决确定的履行期限最后一日止,按中国人民银行同期流动资金贷款利率分段计付);三、驳回原告广西南城百货有限责任公司的其他诉讼请求。本案案件受理费17356元,公告费700元,总计18056元(原告已预交),由原告广西南城百货有限责任公司负担2557元,被告广西鼎铭房地产开发有限公司负担15499元。上述义务,义务人应于本案判决生效之日起十日内履行完毕。逾期则应依照《中华人民共和国民事诉讼法》第二百五十三条的规定,加倍支付延迟履行期间的债务利息。权利人可在本判决规定的履行期限最后一日起二年内,向本院或与本院同级的被执行财产所在地人民法院申请强制执行。如不服本判决,可在判决书送达之日起十五日内,向本院递交上诉状,并按对方当事人人数提交副本,上诉于南宁铁路运输中级法院,并于上诉期限届满之日起七日内预交上诉案件受理费17356元(收款单位:南宁铁路运输中级法院,账号:20×××26,开户银行:农业银行广西南宁凤凰岭支行)。逾期不交也不提出缓交申请,或者申请未获批准的,按自动撤回上诉处理。", - "c_id": "ca266966309fcd413aa50e29b7e49b7b", - "c_slfsxx": "1,2015-10-28 09:00:00,第三法庭,", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2015-11-17", - "d_larq": "2015-06-29", - "n_ajbs": "c7bb68f44d4eb1122376c9d28d5b92c9", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3354334356, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,租赁合同纠纷,房屋租赁合同纠纷", - "n_jabdje": 100, - "n_jabdje_level": 1, - "n_jafs": "判决", - "n_jbfy": "南宁铁路运输法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,租赁合同纠纷", - "n_pj_victory": "部分胜诉", - "n_qsbdje": 1395080.9, - "n_qsbdje_level": 20, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2015)南市民二终字第761号", - "c_ah_ys": "(2014)西民二初字第***号:a3cbcd5991b0dc8dffc81d4edef53450", - "c_dsrxx": [ - { - "c_mc": "庞文娟", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张诚", - "n_dsrlx": "自然人", - "n_ssdw": "原审第三人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "65bdd30017e7f573d51c4d26a243ecf0", - "c_slfsxx": ",2016-01-18 08:30:00,本院第四号法庭(一楼),1;,2016-04-21 08:30:00,本院第四号法庭(一楼),1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-05-14", - "d_larq": "2015-12-17", - "n_ajbs": "2e1572e789beeb3250cb8a3c4551331d", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1705911249, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审第三人" - }, - { - "c_ah": "(2016)桂0107民初1800号", - "c_ah_hx": "(2016)桂0107执1708号:5ac3742e7b01d827596138397a183bc8", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "66c53ff3860e235a8358f39055d94dd5", - "c_slfsxx": "1,2016-06-23 15:20:00,二区第四审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-09-19", - "d_larq": "2016-04-22", - "n_ajbs": "9cbac4e5e1c788a6f7b2a0d3e99c19aa", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2624885693, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 1768800, - "n_qsbdje_level": 21, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初1984号", - "c_dsrxx": [ - { - "c_mc": "贾治", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "南宁市吉信小额贷款有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西京源投资有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "9dcf75803d667a42ed1546a415c8bdb4", - "c_slfsxx": ",2016-07-05 08:30:00,第四审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-06-07", - "d_larq": "2016-05-04", - "n_ajbs": "b50d021466f5194f6dc702d45cc31037", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1950993116, - "n_jaay": "物权纠纷", - "n_jaay_tag": "物权纠纷", - "n_jaay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "物权纠纷", - "n_laay_tag": "物权纠纷", - "n_laay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 258110, - "n_qsbdje_level": 12, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初1985号", - "c_dsrxx": [ - { - "c_mc": "贾治", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "梁滨毅", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西京源投资有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "feb4ed2968d0ce06eee67654c664f7d1", - "c_slfsxx": ",2016-07-05 08:30:00,第四审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-06-07", - "d_larq": "2016-05-04", - "n_ajbs": "cd78882c279e50e657f4258149cff9c2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2629985615, - "n_jaay": "物权纠纷", - "n_jaay_tag": "物权纠纷", - "n_jaay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "物权纠纷", - "n_laay_tag": "物权纠纷", - "n_laay_tree": "物权纠纷,物权保护纠纷,财产损害赔偿纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 118619, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初6524号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "c83fbc670493763526e73364af733bb7", - "c_slfsxx": "1,2017-01-11 08:30:00,第五审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-06-13", - "d_larq": "2016-11-21", - "n_ajbs": "a1d5d7c5f80da9a95d2b2d25ce76bf60", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 685016378, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 4833, - "n_jabdje_level": 1, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 4833, - "n_qsbdje_level": 1, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2016)桂0107民初6525号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "b6844c4b0a7a5bf972753eedf0e8b234", - "c_slfsxx": "1,2017-01-11 09:00:00,二区第五审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-06-13", - "d_larq": "2016-11-21", - "n_ajbs": "bed64f9d400f8e027be0308e32fd3bd9", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2422023255, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 6, - "n_jabdje_level": 1, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 6021, - "n_qsbdje_level": 1, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2017)桂0103民初2872号", - "c_dsrxx": [ - { - "c_mc": "广西南宁广怡资产经营有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "张红梅", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重胜", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重贤", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张诚", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张达全", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张海燕", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重友", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "3dc22829cbcb0487072b10df830edd0f", - "c_slfsxx": "1,2017-06-22 08:30:00,本院第十三审判庭,2;2,2019-04-11 08:30:00,本院第十四A审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2019-06-26", - "d_larq": "2017-03-20", - "n_ajbs": "a08705cb86c2d8cb974ff2c731dd4e69", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 2563796482, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷", - "n_jabdje": 4187000, - "n_jabdje_level": 26, - "n_jafs": "判决", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 10000000, - "n_qsbdje_level": 38, - "n_slcx": "一审", - "n_ssdw": "第三人", - "n_ssdw_ys": "第三人" - }, - { - "c_ah": "(2018)桂01民终6428号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "郭淑芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "7d4a30cf59c9fe76a33162f4fe7f6ef6", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "0baee96aab4f05d1a818dc854d1a136d", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 884242047, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6429号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "郭淑芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "6da3fa747216a1d96e134903285ea464", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "0b4fa40f20aced321c83def4d1d78d49", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3481030570, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6430号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "郭淑芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "7055f0eda331ec940d54d978f58743ae", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "7354b28c1edfb872837c7cc20450c8bb", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3105783815, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6431号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "梁甜甜", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "9ce2fa2fef3805e604b15ada940b15d3", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "3e5a1bf7ed4f46ff17eb227acaabdde2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 507790483, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6432号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "陈芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "fced8a28c56dc9314d5fb1ec27ff5faf", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "e223d3e50645a1760b44b316648752de", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1860469699, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6433号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "陈芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "0a285b62f9085701432a220e6da844ae", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "a91ee45363eba1743aaa779034510bf7", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1207495106, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6434号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "陈芳", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "8104da36703ba2310e8d2a7ff8f42b3a", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "004c1fe7cae16f562652a5ec3b7a40f8", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 832520699, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6435号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "李曼", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "e70573ea1bce2da775b5b9ef84c9acff", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "0e65f0a22be5f5c8c6a7601f1310fbf3", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 944512298, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6436号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "李鹏", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "78d3dcebdf9f3a19af4ab976f4f14da5", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "cf2142663b3c1ebbaaa79fe765597eca", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 873600192, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6437号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "梁铁君", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "0a71301d1ef87ad838b57e6cf8367531", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "7591de13423a8fc158a831a7866de5fe", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2413018883, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6438号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "梁铁君", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):梁铁君。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3741号", - "c_gkws_id": "87bf8e4a-cadc-4093-82b8-a9c6008df205", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "1fcd464a230ddd68b339ab8402323740", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "5c7d0d4450108c76877d5df357177aea", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3762566917, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6439号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "莫燕燕", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):莫燕燕。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3742号", - "c_gkws_id": "c66ba9ce-71f6-4c87-89ba-a9c6008a4244", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "d5ef4f2d367ad1ad98a9270701c1c71f", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "e5e69872b0ea503cf7352d97a4c82f1a", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2528107590, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6440号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "于伟曦", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):于伟曦。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3743号", - "c_gkws_id": "a4b783a8-aea1-419b-b4c6-a9c6008d9caa", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "8a1b6159e8b3fa23811f3c63e7d488cb", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "9885829e86f91989b04126072c72c736", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3147965928, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6441号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "于伟曦", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):于伟曦。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3744号", - "c_gkws_id": "952d4578-3a2d-4ac2-8e5c-a9c6008db6c0", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "bc29d948a535c55f0778bb8c2e9621fb", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "787434dd66233be20eb728e1531094d0", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 331619643, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6442号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "周强", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):周强。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3745号", - "c_gkws_id": "2897e6f9-8f58-46fd-bf6c-a9c6008d6ff3", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "521aad7908112c322bdddc429847f4d3", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "6c7df6ef8cfa15b68039100bed4de5a6", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 4248580466, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民终6443号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "周强", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_gkws_dsr": "上诉人(原审原告):中国农业银行股份有限公司南宁友爱支行。负责人:刘杰,该行行长。被上诉人(原审被告):周强。被上诉人(原审被告):广西鼎铭房地产开发有限公司。法定代表人:李强。", - "c_gkws_glah": "(2016)桂0107民初3746号", - "c_gkws_id": "59bbf8be-b29b-4acb-9fd5-a9c6008a5de8", - "c_gkws_pjjg": "驳回上诉,维持原裁定。本裁定为终审裁定。", - "c_id": "6691aa86c511bb64e5d108b83a586c15", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-08-13", - "d_larq": "2018-07-13", - "n_ajbs": "fd10b5ab209e1d339cd61e85847a3f58", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2420309272, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2018)桂01民初1232号", - "c_ah_hx": "(2022)桂民终713号:434bd8c8c94f0b6dded08cf3f10efa81", - "c_dsrxx": [ - { - "c_mc": "潘北仁", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "ee2dbb2b40def757a0d79d5c486bb61e", - "c_slfsxx": "3,2019-08-19 09:00:00,本院K10第二审判法庭,1;2,2019-05-17 09:00:00,本院K10第二审判法庭,1;1,2019-05-17 15:30:00,本院K10第二审判法庭,1;4,2019-08-19 15:30:00,本院K10第二审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-12-31", - "d_larq": "2018-12-03", - "n_ajbs": "53165ff19300f51b0063ddad26458953", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 528054165, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,房屋买卖合同纠纷,商品房销售合同纠纷", - "n_jabdje": 36500000, - "n_jabdje_level": 43, - "n_jafs": "判决", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,房屋买卖合同纠纷,商品房销售合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 36500000, - "n_qsbdje_level": 43, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2019)桂0103民初16680号", - "c_ah_hx": "(2020)桂0103执保254号:c5107a3beb1d827fef71072e4f6a5c64", - "c_dsrxx": [ - { - "c_mc": "中国工商银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "王玉权", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_gkws_dsr": "原告:中国工商银行股份有限公司南宁分行,住所地:南宁市民族大道38-2号。统一社会信用代码:9145010389828087X4。主要负责人:杨世亮,该分行行长。委托诉讼代理人:崔凤涛,广西桂海天律师事务所律师。委托诉讼代理人:凌燕超,广西桂海天律师事务所律师。被告:王玉权,男,1964年12月19日出生,汉族,住南宁市兴宁区。被告:广西鼎铭房地产开发有限公司,住所地:南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人:李强。原告中国工商银行股份有限公司南宁分行与被告王玉权、广西鼎铭房地产开发有限公司金融借款合同纠纷一案,本院立案后,依法适用普通程序公开开庭进行了审理。原告的委托诉讼代理人凌燕超到庭参加诉讼。被告王玉权、广西鼎铭房地产开发有限公司经本院送达传票传唤,无正当理由未到庭参加诉讼,本院依法缺席审理。本案现已审理终结。原告向本院提出诉讼请求:1、被告王玉权偿还原告借款本金78950.71元;2、被告王玉权向原告支付利息4004.89元(利息按合同约定计至被告偿还完毕之日止,现暂计至2019年9月4日);3、被告王玉权承担本案的律师费4148元;4、被告广西鼎铭房地产开发有限公司对上述债务承担连带清偿责任;5、原告对权属被告王玉权的南宁市秀灵路7号鼎盛国际B座无单元十五层1501号房,有权以该财产折价或者拍卖、变卖所得的价款优先受偿;6、本案的诉讼费用由两被告负担。被告王玉权、广西鼎铭房地产开发有限公司未作书面答辩,亦未到庭参加诉讼。本案相关情况:一、合同名称:《个人购房借款/担保合同》【编号A:〔按〕字〔邕〕行〔明秀〕支行〔2007〕年〔1107〕号】。二、借款人:王玉权。三、借款本金:132000元。四、借款期限:2008年1月4日至2028年1月4日。五、还款方式:按月等额本息还款。六、借款利率:适用中国人民银行公布的同期同档次贷款基准利率为基准利率下浮15%。借款人未按合同约定日期(包括被宣布提前到期)偿还的贷款。贷款人有权按罚息利率按日计收利息;对不能按时支付的利息,按罚息利率计收复利。罚息利率在约定的贷款利率基础上加收30%确定。七、贷款违约情形:借款人连续三个月或累计六次未按时足额偿还贷款本息,贷款人有权停止发放尚未发放的贷款,宣布贷款提前到期,要求提前清偿全部或部分贷款以及所产生的利息、罚息及其他费用,直至解除合同。八、抵押物情况:王玉权提供位于南宁市秀灵路7号鼎盛国际B座单元1501号房于2008年1月24日办理预购商品房贷款抵押登记证明。九、律师费负担:由于借款人和担保人未按合同约定履行各自义务,贷款人为实现合同项下债权而产生的律师费等费用由借款人承担。本案审理中,原告委托广西桂海天律师事务所律师参加诉讼,支出律师代理费4148元。十、保证人及保证方式:广西鼎铭房地产开发有限公司作为保证人为借款人在合同项下的借款本金、利息、罚息、律师费及贷款人实现债权的费用承担连带保证责任。抵押人已正式办理完毕抵押登记手续,且贷款人收到记载有上述正式抵押登记信息的房屋他项权证书,保证人免除保证责任。十一、逾期情况:被告王玉权借款后,未按期足额还本付息,截至2019年9月4日止,已累计逾期14期,尚欠借款本金78950.71元,利息4004.89元。十二、合同违约责任:本院认为,涉案《个人购房借款/担保合同》系双方当事人真实意思表示,内容未悖法律、行政法规的强制性规定,合法有效,双方当事人均应恪守。上述合同签订后,原告已依约发放贷款,被告王玉权未按约定履行还本付息义务,多次逾期,显属违约,应承担相应违约责任。原告主张被告王玉权提前偿还剩余贷款本息,并赔偿律师代理费,于法有据,本院予以支持。关于原告主张的优先受偿权,因案涉抵押房产未完成正式抵押登记,抵押权未能设立,原告主张以抵押物处置价款优先受偿其债权,无法律依据,本院不予支持。在正式抵押登记尚未完成,房屋他项权证未办理的情形下,被告广西鼎铭房地产开发有限公司的阶段性保证责任免除条件亦未成就,原告有权直接请求被告广西鼎铭房地产开发有限公司对被告王玉权的上述债务承担连带清偿责任。被告广西鼎铭房地产开发有限公司承担保证责任后,有权向被告王玉权追偿。", - "c_gkws_id": "e37aaf7afa0c4efd901bacef0036d2ef", - "c_gkws_pjjg": "判决结果依照《中华人民共和国合同法》第六十条、第二百零五条、第二百零六条、第二百零七条,《中华人民共和国担保法》第三十一条和《中华人民共和国民事诉讼法》第六十四条、第一百四十四条之规定,判决如下:一、被告王玉权偿还原告中国工商银行股份有限公司南宁分行借款本金78950.71元;二、被告王玉权给付原告中国工商银行股份有限公司南宁分行利息【计算方法:截至2019年9月4日止,利息为4004.89元;此后至实际清偿之日止,以本金78950.71元为基数,按编号A:〔按〕字〔邕〕行〔明秀〕支行〔2007〕年〔1107〕号《个人购房借款/担保合同》约定计付】;三、被告王玉权赔偿原告中国工商银行股份有限公司南宁分行律师代理费4148元;四、被告广西鼎铭房地产开发有限公司对被告王玉权的上述债务承担连带清偿责任,被告广西鼎铭房地产开发有限公司承担保证责任后,有权向被告王玉权追偿;五、驳回原告中国工商银行股份有限公司南宁分行的其他诉讼请求。上述债务,义务人应于本案判决生效之日起十日内履行完毕,如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。权利人可在本案生效判决规定的履行期限最后一日起二年内向本院或与本院同级的被执行的财产所在地人民法院申请执行。本案受理费1978元,保全费891元,两项合计2869元,由被告王玉权负担,被告广西鼎铭房地产开发有限公司对前述费用承担连带偿付责任。如不服本判决,可在判决书送达之日起十五日内,向本院递交上诉状,并按照对方当事人的人数提交副本,上诉于南宁市中级人民法院,同时在上诉期届满之日起七日内预交上诉案件受理费(开户名称:南宁市中级人民法院,开户银行:中国农业银行南宁市竹溪支行,账号:20×××28。网银转账先选古城支行,再在备注栏注明竹溪支行)。逾期未预交又不提出缓交申请的,则按自动撤回上诉处理。", - "c_id": "4a2556a58d2f10005048a0e7b2424634", - "c_slfsxx": "1,,,2", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2020-08-28", - "d_larq": "2019-11-07", - "n_ajbs": "06b860c4388a66e580b8c5253af27346", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3952396476, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 87103.6, - "n_jabdje_level": 9, - "n_jafs": "判决", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "部分胜诉", - "n_qsbdje": 87103.6, - "n_qsbdje_level": 9, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2020)桂0107民初4402号", - "c_ah_hx": "(2021)桂01民终10117号:d9074371e9008a4c89b063bd8964b023", - "c_dsrxx": [ - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "a57fec4e3e60adfa7dfd321ce91aee87", - "c_slfsxx": "1,2020-08-13 08:30:00,本院高新五号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-07-29", - "d_larq": "2020-05-22", - "n_ajbs": "da1f23eca2f5cb2dc01849ccac038785", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 792179302, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_jabdje": 13380000, - "n_jabdje_level": 38, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 13380000, - "n_qsbdje_level": 38, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2020)桂0107民监20号", - "c_ah_hx": "(2021)桂0107民再5号:1601cceae6feee75e817b296fd7a2383", - "c_ah_ys": "(2016)桂0107民初***号:b16fa3be64f28f82c0120f982f259ce5", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "其他" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "其他" - } - ], - "c_gkws_dsr": "原审原告:张海婷,女,1977年6月7日出生,汉族,住江苏省泰兴市。原审被告:广西鼎铭房地产开发有限公司,住所南宁市西乡塘区科园大道31号高新苑29栋06号。组织机构代码:74208035-3。法定代表人:李强,总经理。", - "c_gkws_glah": "(2016)桂0107民初940号", - "c_gkws_id": "d260560ab82e4e17b555acc90034b5a7", - "c_gkws_pjjg": "一、本案由本院再审;二、再审期间中止原判决的执行。", - "c_id": "e8acca287a6c90721ca279c6d6198a03", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2020-12-30", - "d_larq": "2020-12-22", - "n_ajbs": "ac5a3436e300bddbf52c88ba72b132f8", - "n_ajjzjd": "已结案", - "n_ajlx": "民事依职权再审审查", - "n_crc": 1448364272, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje_level": 0, - "n_jafs": "本院再审", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "再审审查", - "n_ssdw": "其他" - }, - { - "c_ah": "(2021)桂0107民初1903号", - "c_dsrxx": [ - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "c57429589d2448f119006c42450fb75d", - "c_slfsxx": "1,2021-04-29 08:30:00,本院高新五号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-07-28", - "d_larq": "2021-01-28", - "n_ajbs": "af7ad0787c99f6f6ce5e04daeb53f7dc", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3380785681, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 102981.79, - "n_qsbdje_level": 11, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂0107民再5号", - "c_ah_ys": "(2020)桂0107民监20号:ac5a3436e300bddbf52c88ba72b132f8", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "其他" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "其他" - } - ], - "c_id": "e4905d6a65c413f244adb7702fa90190", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-04-28", - "d_larq": "2021-02-22", - "n_ajbs": "1601cceae6feee75e817b296fd7a2383", - "n_ajjzjd": "已结案", - "n_ajlx": "民事再审", - "n_crc": 2339573738, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "撤销原判并驳回起诉", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 1508215.23, - "n_qsbdje_level": 21, - "n_slcx": "再审", - "n_ssdw": "其他" - }, - { - "c_ah": "(2021)桂0107民初4033号", - "c_ah_hx": "(2021)桂0107执保4200号:8e7997a0d7be940d7948824def76ccd1", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "e4713363848510cddbc1fec040ba53c1", - "c_slfsxx": "1,2021-09-02 15:30:00,本院一区速裁二号法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-09-24", - "d_larq": "2021-03-24", - "n_ajbs": "1d708a25b1bdde010e4f31d9f1112aff", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1768614939, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 54684.68, - "n_jabdje_level": 6, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 55894.39, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂0107民初6529号", - "c_ah_hx": "(2021)桂0107执保4197号:247633f2d9d17ca3508816e4ea641765", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "何明", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "176ecf7eb3ca96a6274a7a79f44ccadc", - "c_slfsxx": "1,2021-11-22 10:30:00,速裁一号法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-12-08", - "d_larq": "2021-05-18", - "n_ajbs": "744e06488a38cecd0d33955d6aa10fe2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3106977891, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 79912.85, - "n_jabdje_level": 8, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 78741.75, - "n_qsbdje_level": 8, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂0107民初6530号", - "c_ah_hx": "(2022)桂01民终3182号:09db87c7b81f7d75dad3ca475ebcc7f3", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "冯波", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "杨日新", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "1cd336335f135419acd08ae51716f798", - "c_slfsxx": "1,2021-11-22 10:30:00,速裁一号法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-12-08", - "d_larq": "2021-05-18", - "n_ajbs": "c98897d88762b166a6100d6205ad7616", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1124441253, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 56259.66, - "n_jabdje_level": 6, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 54736.89, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2021)桂01民终10117号", - "c_ah_hx": "(2023)桂0107执1677号:e6246c51d9aef85a27db2d3d2c4d2710", - "c_ah_ys": "(2020)桂0107民初4402号:da1f23eca2f5cb2dc01849ccac038785", - "c_dsrxx": [ - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "e7fee0d9bb691c31a87902711c1e1f61", - "c_slfsxx": "1,2022-04-29 08:30:00,本院K10第三审判法庭,1;2,2022-12-12 09:00:00,本院K10第四审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-12-30", - "d_larq": "2021-09-08", - "n_ajbs": "d9074371e9008a4c89b063bd8964b023", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 1120230154, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷,建设工程施工合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "上诉人" - }, - { - "c_ah": "(2022)桂01民终3182号", - "c_ah_ys": "(2021)桂0107民初6530号:c98897d88762b166a6100d6205ad7616", - "c_dsrxx": [ - { - "c_mc": "冯波", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "杨日新", - "n_dsrlx": "自然人", - "n_ssdw": "原审被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审被告" - } - ], - "c_id": "ff61859119d9a681ae7f9c428a69256a", - "c_slfsxx": "1,2022-05-17 10:30:00,本院K10第十一审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-01-19", - "d_larq": "2022-03-21", - "n_ajbs": "09db87c7b81f7d75dad3ca475ebcc7f3", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2364525062, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "发回重审", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审被告" - }, - { - "c_ah": "(2022)桂0107民初3520号", - "c_ah_hx": "(2023)桂0107执2561号:3ed3ad5129ccec036cadd76d956b8454", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "甘翠英", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "d3a7420da728896b69bbf370ccad46e6", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-06-20", - "d_larq": "2022-04-01", - "n_ajbs": "016687d73ba110aa8cdd4a2ac9e3dd99", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 1157937847, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 46464.35, - "n_jabdje_level": 5, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 51018.66, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2022)桂民终713号", - "c_ah_ys": "(2018)桂01民初1232号:53165ff19300f51b0063ddad26458953", - "c_dsrxx": [ - { - "c_mc": "南宁高新技术产业开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "上诉人" - }, - { - "c_mc": "潘北仁", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - } - ], - "c_id": "51e581e2c643109088454c6549c9b3fc", - "c_slfsxx": "2,2022-06-06 09:00:00,本院K00第七审判法庭,1;1,2023-05-18 15:30:00,本院K00第五审判法庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-06-08", - "d_larq": "2022-05-12", - "n_ajbs": "434bd8c8c94f0b6dded08cf3f10efa81", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3061428190, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje": 18000000, - "n_jabdje_level": 39, - "n_jafs": "改判(含变更原判决)", - "n_jbfy": "广西壮族自治区高级人民法院", - "n_jbfy_cj": "高级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "上诉人" - }, - { - "c_ah": "(2023)桂01民终7084号", - "c_dsrxx": [ - { - "c_mc": "周兰", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "张红梅", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张重胜", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张重贤", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张达全", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张海燕", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "张重友", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "南宁高新技术开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "8732be02264968bdc5341fc773a81d11", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-07-09", - "d_larq": "2023-06-13", - "n_ajbs": "d37b8c5bf8e5f0a6cedea83df07387d2", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 2181508447, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje": 0, - "n_jabdje_level": 0, - "n_jafs": "撤销原裁定并指令审理", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2023)桂0107民初8601号", - "c_ah_hx": "(2024)桂01民终1715号:dd889cab80318f7232371ccd6ba9223d", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "第三人" - } - ], - "c_id": "bf10412a6ba720725dd0ce160dceddc5", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-12-29", - "d_larq": "2023-07-17", - "n_ajbs": "027dd27afd450f1f93c9340a4f4330bf", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3950950459, - "n_jaay": "非讼程序案件案由", - "n_jaay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_jabdje": 700000, - "n_jabdje_level": 17, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "非讼程序案件案由", - "n_laay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_pj_victory": "未知", - "n_qsbdje": 700000, - "n_qsbdje_level": 17, - "n_slcx": "一审", - "n_ssdw": "第三人", - "n_ssdw_ys": "第三人" - }, - { - "c_ah": "(2023)桂0107民初11484号", - "c_ah_hx": "(2023)桂0107执保3588号:74ccc2633f50fcac6825d958d923eb34", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "原告" - }, - { - "c_mc": "侯安魁", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "9be43ecccddfb3b48fc6c024d5a126fe", - "c_slfsxx": "2,2024-02-23 15:20:00,本院K1E院部7号庭,1;1,2023-10-23 08:30:00,本院K1E院部8号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-04-10", - "d_larq": "2023-09-20", - "n_ajbs": "4c9aa71e1290e93a0819a0f5cc1b2c92", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 238691032, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jabdje": 49158.73, - "n_jabdje_level": 5, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tag": "合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 50310.04, - "n_qsbdje_level": 6, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2023)桂0107民初15009号", - "c_dsrxx": [ - { - "c_mc": "周兰", - "n_dsrlx": "自然人", - "n_ssdw": "原告" - }, - { - "c_mc": "张红梅", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重胜", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重贤", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张达全", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张海燕", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "张重友", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - }, - { - "c_mc": "南宁高新技术开发区管理委员会", - "n_dsrlx": "企业组织", - "n_ssdw": "被告" - } - ], - "c_id": "2a2e064c55d3b2c38b5e84a79f19acba", - "c_slfsxx": "1,2024-03-22 08:30:00,本院院部16号庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-09-05", - "d_larq": "2023-11-27", - "n_ajbs": "bd9e991d89cb9f16c4669b20045df23c", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "n_crc": 3282247532, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje": 5745700, - "n_jabdje_level": 29, - "n_jafs": "判决", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje": 5745700, - "n_qsbdje_level": 29, - "n_slcx": "一审", - "n_ssdw": "被告", - "n_ssdw_ys": "被告" - }, - { - "c_ah": "(2024)桂01民终1715号", - "c_ah_ys": "(2023)桂0107民初8601号:027dd27afd450f1f93c9340a4f4330bf", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "e8ce3565dc5a782a71758536b97fa2b4", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-07-12", - "d_larq": "2024-02-08", - "n_ajbs": "dd889cab80318f7232371ccd6ba9223d", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3170480267, - "n_jaay": "非讼程序案件案由", - "n_jaay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "非讼程序案件案由", - "n_laay_tree": "非讼程序案件案由,执行程序中的异议之诉,执行分配方案异议之诉", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审第三人" - }, - { - "c_ah": "(2024)桂01民终4856号", - "c_dsrxx": [ - { - "c_mc": "贾治", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "曹智", - "n_dsrlx": "自然人", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - } - ], - "c_id": "66500dc6988b029b3bbfd3c008c0c51a", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-06-04", - "d_larq": "2024-05-06", - "n_ajbs": "7f056b1b2e0d1c5f7577bea562b65d97", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 3708272358, - "n_jaay": "合同、准合同纠纷", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷", - "n_jabdje_level": 0, - "n_jafs": "撤销原裁定并指令审理", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "合同、准合同纠纷", - "n_laay_tree": "合同、准合同纠纷,合同纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "被上诉人" - }, - { - "c_ah": "(2024)桂01民终6998号", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "上诉人" - }, - { - "c_mc": "广西全俱物业服务有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被上诉人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "原审第三人" - } - ], - "c_id": "603df73e70c0df1f57c05dad627e9fd3", - "c_slfsxx": "1,,,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2024-07-23", - "d_larq": "2024-07-03", - "n_ajbs": "7546cd6129f179313c1aa14370c28b3f", - "n_ajjzjd": "已结案", - "n_ajlx": "民事二审", - "n_crc": 4118898809, - "n_jaay": "侵权责任纠纷", - "n_jaay_tree": "侵权责任纠纷", - "n_jabdje_level": 0, - "n_jafs": "维持", - "n_jbfy": "广西壮族自治区南宁市中级人民法院", - "n_jbfy_cj": "中级人民法院", - "n_laay": "侵权责任纠纷", - "n_laay_tree": "侵权责任纠纷", - "n_pj_victory": "未知", - "n_qsbdje_level": 0, - "n_slcx": "二审", - "n_ssdw": "原审第三人" - } - ], - "count": { - "area_stat": "广西壮族自治区(57)", - "ay_stat": "合同、准合同纠纷(50),物权纠纷(2),债权纠纷(2),非讼程序案件案由(2),侵权责任纠纷(1)", - "count_beigao": 43, - "count_jie_beigao": 43, - "count_jie_other": 11, - "count_jie_total": 57, - "count_jie_yuangao": 3, - "count_other": 11, - "count_total": 57, - "count_wei_beigao": 0, - "count_wei_other": 0, - "count_wei_total": 0, - "count_wei_yuangao": 0, - "count_yuangao": 3, - "jafs_stat": "判决(26),维持(23),撤销原裁定并指令审理(2),本院提审(1),发回重审(1),撤销原判并驳回起诉(1),改判(1),改判(含变更原判决)(1),本院再审(1)", - "larq_stat": "2010(1),2011(1),2012(1),2014(4),2015(3),2016(6),2017(3),2018(18),2019(1),2020(3),2021(6),2022(3),2023(4),2024(3)", - "money_beigao": 47, - "money_jie_beigao": 47, - "money_jie_other": 27, - "money_jie_total": 51, - "money_jie_yuangao": 39, - "money_other": 27, - "money_total": 51, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_percent": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 39 - } - }, - "count": { - "area_stat": "广西壮族自治区(84)", - "ay_stat": "合同、准合同纠纷(50),未知(14),民事(10),物权纠纷(2),与公司、证券、保险、票据等有关的民事纠纷(2),债权纠纷(2),非讼程序案件案由(2),破坏社会主义市场经济秩序罪(1),侵权责任纠纷(1)", - "count_beigao": 69, - "count_jie_beigao": 68, - "count_jie_other": 11, - "count_jie_total": 83, - "count_jie_yuangao": 4, - "count_other": 11, - "count_total": 84, - "count_wei_beigao": 1, - "count_wei_other": 0, - "count_wei_total": 1, - "count_wei_yuangao": 0, - "count_yuangao": 4, - "jafs_stat": "判决(26),维持(23),终结本次执行程序(8),保全完毕(7),执行完毕(4),终结执行(4),改判(2),撤销原裁定并指令审理(2),本院提审(1),驳回申请(1),改判(含变更原判决)(1),本院再审(1),发回重审(1),部分保全(1),撤销原判并驳回起诉(1)", - "larq_stat": "2010(1),2011(2),2012(1),2013(1),2014(4),2015(3),2016(12),2017(5),2018(19),2019(3),2020(4),2021(11),2022(5),2023(9),2024(4)", - "money_beigao": 50, - "money_jie_beigao": 50, - "money_jie_other": 27, - "money_jie_total": 55, - "money_jie_yuangao": 39, - "money_other": 27, - "money_total": 55, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_percent": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 39 - }, - "crc": 3093748000, - "criminal": { - "cases": [ - { - "c_ah": "(2011)桂刑经终字第18号", - "c_gkws_dsr": "抗诉机关广西壮族自治区南宁市人民检察院。上诉人(原审被告单位)广西鼎铭房地产开发有限公司,住所地南宁市××大道××号。法定代表人李强,董事长。诉讼代表人李健,男,汉族,广西鼎铭房地产开发有限公司股东,住广西博白县××水××田队。上诉人(原审被告人)李铭,男,1971年1月18日出生于广西壮族自治区博白县,汉族,大专文化,广西鼎铭房地产开发有限公司实际投资人,住广西南宁市××路××号。因涉嫌犯合同诈骗罪,于2009年3月29日被刑事拘留,同年4月30日被逮捕。现羁押于南宁市第三看守所,因病在广西壮族自治区监狱总医院就医。辩护人郭广,广西欣和律师事务所律师。上诉人(原审被告人)李强,男,1974年8月24日出生于广西壮族自治区博白县,汉族,大专文化,广西鼎铭房地产开发有限公司法定代表人,住广西××春路××楼××单××房。因涉嫌犯合同诈骗罪,于2009年3月24日被刑事拘留,同年4月30日被逮捕。现羁押于南宁市第二看守所。辩护人冯春丽,广西欣和律师事务所律师。上诉人(原审被告人)曹智,男,1973年9月21日出生于四川绵阳市,汉族,初中文化,广西鼎铭房地产开发有限公司总经理,住广西××路××号××房。因涉嫌犯合同诈骗罪,于2010年1月30日被刑事拘留,同年3月9日被逮捕。现羁押于南宁市第一看守所。辩护人李能,广西民族律师事务所律师。", - "c_gkws_id": "478a3c8f-6e24-43fc-8270-81f18ac1eb9f", - "c_gkws_pjjg": "一、维持广西壮族自治区南宁市中级人民法院(2010)南市刑二初字第13号刑事判决第(五)项,即:“对被告单位广西鼎铭房地产开发有限公司,被告人李铭、李强、曹智违法犯罪所得,予以继续追缴,发还给本案被害人。”二、撤销广西壮族自治区南宁市中级人民法院(2010)南市刑二初字第13号刑事判决第(一)、(二)、(三)、(四)项,即:“被告单位广西鼎铭房地产开发有限公司犯合同诈骗罪,判处罚金人民币100万元;被告人李铭犯合同诈骗罪,判处有期徒刑十五年,剥夺政治权利三年,并处罚金人民币20万元;被告人李强犯合同诈骗罪,判处有期徒刑十二年,剥夺政治权利一年,并处罚金人民币10万元;被告人曹智犯合同诈骗罪,判处有期十一年,剥夺政治权利一年,并处罚金人民币10万元。”三、上诉人(原审被告单位)广西鼎铭房地产开发有限公司犯合同诈骗罪,判处罚金人民币100万元;犯骗取贷款罪,判处罚金人民币100万元。数罪并罚,决定执行罚金人民币200万元(罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。四、上诉人(原审被告人)李铭犯合同诈骗罪,判处有期徒刑十五年,并处罚金人民币20万元;犯骗取贷款罪,判处有期徒刑四年,并处罚金人民币20万元。数罪并罚,决定执行有期徒刑十七年,并处罚金人民币40万元(刑期自判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2009年3月29日至2026年3月28日;罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。五、上诉人(原审被告人)李强犯合同诈骗罪,判处有期徒刑十二年,并处罚金人民币10万元;犯骗取贷款罪,判处有期徒刑三年,并处罚金人民币10万元。数罪并罚,决定执行有期徒刑十三年六个月,并处罚金人民币20万元(刑期自判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2009年3月24日至2022年9月23日;罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。六、上诉人(原审被告人)曹智犯合同诈骗罪,判处有期徒刑十一年,并处罚金人民币10万元;犯骗取贷款罪,判处有期徒刑三年,并处罚金人民币10万元。数罪并罚,决定执行有期徒刑十二年六个月,并处罚金人民币20万元(刑期自判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2010年1月30日至2022年7月29日;罚金自判决生效之日起一个月内缴纳,期满不缴纳的,强制缴纳)。本判决为终审判决。", - "c_id": "1eb626e00af72cad8ae49a81d239fa3a", - "c_slfsxx": "1,2011-09-15 08:45:00,第八审判庭,1;2,2013-04-26 09:00:00,第八审判庭,1", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2013-05-28", - "d_larq": "2011-05-19", - "n_ajbs": "e49ef61b5153a399de9873aae5feaa6c", - "n_ajjzjd": "已结案", - "n_ajlx": "刑事二审", - "n_bqqpcje_level": 0, - "n_ccxzxje_level": 0, - "n_crc": 2644887589, - "n_fzje_level": 0, - "n_jaay": "破坏社会主义市场经济秩序罪", - "n_jaay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", - "n_jafs": "改判", - "n_jbfy": "广西壮族自治区高级人民法院", - "n_jbfy_cj": "高级人民法院", - "n_laay": "破坏社会主义市场经济秩序罪", - "n_laay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", - "n_pcpcje_level": 0, - "n_slcx": "二审", - "n_ssdw": "上诉人" - } - ], - "count": { - "area_stat": "广西壮族自治区(1)", - "ay_stat": "破坏社会主义市场经济秩序罪(1)", - "count_beigao": 0, - "count_jie_beigao": 0, - "count_jie_other": 0, - "count_jie_total": 1, - "count_jie_yuangao": 1, - "count_other": 0, - "count_total": 1, - "count_wei_beigao": 0, - "count_wei_other": 0, - "count_wei_total": 0, - "count_wei_yuangao": 0, - "count_yuangao": 1, - "jafs_stat": "改判(1)", - "larq_stat": "2011(1)", - "money_beigao": 0, - "money_jie_beigao": 0, - "money_jie_other": 0, - "money_jie_total": 0, - "money_jie_yuangao": 0, - "money_other": 0, - "money_total": 0, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 0 - } - }, - "implement": { - "cases": [ - { - "c_ah": "(2016)桂0107执479号", - "c_ah_hx": "(2021)桂0107执恢332号:b6038222301aebedeb272a9bf23c2411", - "c_ah_ys": "(2014)西民二初字第696号:19a203ba889603bbe0b25d671d0cfdd1", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行,所在地址:南宁市友爱南路41号商住楼一层。负责人:丘常宏,行长。被执行人黄年环,女,1983年1月6日出生,住址:广西扶绥县,购房地址:南宁市秀灵路7号鼎盛国际A座单元1211号房。被执行人广西鼎铭房地产开发有限公司,住所址:南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人:李强。", - "c_gkws_id": "738c241a-95b8-4e2b-b7b9-5e13edb4e7dc", - "c_gkws_pjjg": "查封被执行人黄年环名下所有的位于南宁市秀灵路7号鼎盛国际A座单元1211号房,期限为三年。", - "c_id": "53aa248323e80ef5298f9915fd53268c", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-07-26", - "d_larq": "2016-04-18", - "n_ajbs": "2e772f0e3830f29b2b58ee6710664deb", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1902535492, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 107280.3, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执480号", - "c_ah_ys": "(2014)西民二初字第697号:b99a3abefc68ddefc19092769b849774", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行被执行人广西鼎铭房地产开发有限公司,地址南宁市。法定代表人李强。被执行人黄年环。", - "c_gkws_id": "fe2d3289-effb-4925-8ec1-523be96ebe48", - "c_gkws_pjjg": "终结广西壮族自治区南宁市西乡塘区人民法院(2014)西民二初字第697号民事判决书的本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或其他法律责任。本裁定送达后即发生法律效力。", - "c_id": "f59ba46a50e7e77be4e090f905c01091", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-07-26", - "d_larq": "2016-04-18", - "n_ajbs": "67b3f5e31746ee410f308329c2e71c6d", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1548490716, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 139772.02, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执1708号", - "c_ah_ys": "(2016)桂0107民初1800号:9cbac4e5e1c788a6f7b2a0d3e99c19aa", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人张海婷,女,1977年6月7日出生,汉族,住所地位于江苏省泰兴市。被执行人广西鼎铭房地产开发有限公司,住所地位于南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强,董事长。", - "c_gkws_glah": "(2016)桂0107民初1800号", - "c_gkws_id": "e1c1ca9a-e48a-4fb2-ba51-228965d31e39", - "c_gkws_pjjg": "查封被执行人广西鼎铭房地产开发有限公司名下所有的位于南宁市西乡塘区秀灵路7号鼎盛国际B座单元1028号商铺,期限为三年。", - "c_id": "b393b6ffd7006c906eba4b177d3ce912", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-20", - "d_larq": "2016-10-26", - "n_ajbs": "5ac3742e7b01d827596138397a183bc8", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 3659484611, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sqzxbdje": 1947919, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执1710号", - "c_dsrxx": [ - { - "c_mc": "张海婷", - "n_dsrlx": "自然人", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人张海婷,女,1977年6月7日出生,住所地江苏省泰兴市。被执行人广西鼎铭房地产开发有限公司,住所地南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强。", - "c_gkws_id": "86cb5b7f-6b46-4bce-9ee1-a93a0039aa4f", - "c_gkws_pjjg": "终结本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或申请法律责任。本裁定送达后即发生法律效力。", - "c_id": "5e91bb7562c9ffc4f1ab56368e0d42ec", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-20", - "d_larq": "2016-10-26", - "n_ajbs": "021d2380c9950416f7bd983f05219cc6", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 3937389045, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sqzxbdje": 1130985.9, - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2016)桂0107执1869号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "梁玉芬", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "吴华", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行,地址南宁市友爱南路41号商住楼一层。法定代表人刘杰。被执行人梁玉芬,女,1973年02月10日出生,地址南宁市。被执行人吴华,男,1971年04月02日出生,地址南宁市。被执行人广西鼎铭房地产开发有限公司,地址南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强。", - "c_gkws_id": "2fe3d400-471b-456b-a8a5-a939003ff785", - "c_gkws_pjjg": "终结本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或申请法律责任。本裁定送达后即发生法律效力。", - "c_id": "f778cf9e54c09c653ea66cc3686d0857", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-21", - "d_larq": "2016-11-15", - "n_ajbs": "6634a3e3f074e5456947271023459150", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 4171695506, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 175923.69, - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2016)桂0107执1871号", - "c_ah_hx": "(2023)桂0107执恢1701号:5a3a3e67f0c4d9343ce2f89a9bf78e66", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "唐觉荣", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_gkws_dsr": "申请执行人中国农业银行股份有限公司南宁友爱支行,地址南宁市友爱南路41号商住楼一层。法定代表人刘杰。被执行人唐觉荣,男,1982年11月21日出生,地址南宁市。被执行人广西鼎铭房地产开发有限公司,地址南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人李强。", - "c_gkws_id": "3e497ad6-41e7-4a3d-9745-a93900418792", - "c_gkws_pjjg": "终结本次执行程序。终结本次执行程序后,如申请执行人发现被执行人有财产可供执行或原不具备执行条件的财产现已具备执行条件的,可就尚未实现的债权向本院申请恢复执行。申请执行人提出恢复执行申请不受申请执行期间的限制。对尚在查封、冻结期间的被执行人财产,查封、冻结期间届满后,申请执行人需要续行查封、冻结的,应当在查封、冻结期间届满前十五日内,向本院提出续行查封、冻结的书面申请,逾期不提出申请的,由申请执行人承担相应财产损失的风险或申请法律责任。本裁定送达后即发生法律效力。", - "c_id": "ff9d190351cffa6b075436cb775a196a", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2016-12-21", - "d_larq": "2016-11-15", - "n_ajbs": "07c9ef9256bb9cb96031d83ce207122c", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 529087666, - "n_jaay": "民事", - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "民事", - "n_sjdwje": 0, - "n_sqzxbdje": 138564.6, - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2017)桂7102执22号", - "c_dsrxx": [ - { - "c_mc": "广西南城百货有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_dsr": "申请执行人:广西南城百货有限责任公司,住所地南宁市友爱南路22号南棉商业街216号,组织机构代码:73221231-6。法定代表人:钟永利,该公司董事长。被执行人:广西鼎铭房地产开发有限公司,住所地南宁市西乡塘区科园大道31号高新苑29栋06号。法定代表人:李强。广西南城百货有限责任公司申请执行广西鼎铭房地产开发有限公司房屋租赁合同纠纷一案,本院于2015年11月5日作出的(2015)南铁民初字第354号民事判决书,已发生法律效力。申请执行人向本院申请强制执行,申请执行标的为人民币1266776.95元。本院于2017年1月9日依法立案执行,并向被执行人发出执行通知书,责令被执行人履行生效民事判决书所确定的义务,但被执行人至今未履行。本院在执行过程中,对被执行人广西鼎铭房地产开发有限公司的银行存款、土地、房产、车辆、工商等财产情况展开了调查,查出被执行人名下位于南宁市西乡塘区秀灵路7号鼎盛国际商铺B座单元1025、1039号房的两处不动产权,予以轮候查封,现等候首封法院处置;另查出被执行人在中国光大银行有存款人民币126748.54元,本院将其冻结,因该存款是保证金账户,无法划拨。现被执行人无其他可供执行的财产,申请人也明确表示提供不出被执行人的财产或线索。基于上述事实,申请人同意本院终结本次执行程序,待找到被执行人有可供执行的财产线索,再申请恢复执行。本院认为,被执行人广西鼎铭房地产开发有限公司现阶段确无可供执行的财产,现申请执行人书面同意本院终结本次执行程序,符合法律规定。依照《最高人民法院关于适用<中华人民共和国民事诉讼法>的解释》第五百一十九条、《最高人民法院关于执行案件立案、结案若干问题的意见》第十六条第三项规定,裁定如下:", - "c_gkws_glah": "(2015)南铁民初字第354号", - "c_gkws_id": "c8ccdb23-4d70-4240-93d9-a863003479b6", - "c_gkws_pjjg": "终结(2015)南铁民初字第354号民事判决书本次的执行程序。终结本次执行程序后,如申请执行人发现被执行人的可供执行财产的,可就尚未实现的债权申请重新立案,恢复南宁铁路运输法院(2015)南铁民初字第354号民事判决书的执行。申请重新立案执行时,应当提交执行申请书和提供财产线索或具备执行条件的证明。本裁定送达后立即生效行。", - "c_id": "a864d110aec96b361602eab920e4106f", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-06-28", - "d_larq": "2017-01-09", - "n_ajbs": "faf482c03bd2bc43c20725753886c727", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1092400076, - "n_jaay": "租赁合同纠纷", - "n_jabdje": 1244093, - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁铁路运输法院", - "n_jbfy_cj": "基层法院", - "n_laay": "租赁合同纠纷", - "n_sjdwje": 0, - "n_sqzxbdje": 1244093, - "n_ssdw": "被执行人", - "n_wzxje": 1244093 - }, - { - "c_ah": "(2017)桂0103执保1521号", - "c_dsrxx": [ - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "韦文海", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "潘元花", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "51c9fafbc2274e00f283aee9f5696158", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2017-09-12", - "d_larq": "2017-06-14", - "n_ajbs": "0f45c91500489f77df85e86b1881016f", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 63474981, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2018)桂0103执保1256号", - "c_dsrxx": [ - { - "c_mc": "中国光大银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "韦文海", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "潘元花", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "e25a19b74f35e284aecd9bd619026863", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2018-05-17", - "d_larq": "2018-05-04", - "n_ajbs": "0fa87e2f38d5518749260663a2950088", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 122322234, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2019)桂0107执保495号", - "c_dsrxx": [ - { - "c_mc": "张桂芳", - "n_dsrlx": "自然人", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - }, - { - "c_mc": "陈丹", - "n_dsrlx": "自然人", - "n_ssdw": "利害关系人" - }, - { - "c_mc": "李荣峰", - "n_dsrlx": "自然人", - "n_ssdw": "利害关系人" - } - ], - "c_id": "5a9db08c04d6111d059c2dbbfab4e3c5", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2019-03-14", - "d_larq": "2019-02-19", - "n_ajbs": "fe561a08fd0efe757ec94726326adb65", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 3278534719, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被执行人" - }, - { - "c_ah": "(2019)桂0107执恢246号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "梁玉芬", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "吴华", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "a7a7314e2ac0bcd076e7783eadbdfa4d", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2019-08-21", - "d_larq": "2019-05-09", - "n_ajbs": "7527e73aca24f6fd4e98f2a4c290cf52", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 1097641588, - "n_jaay": "未知", - "n_jabdje": 178462.55, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "合同、无因管理、不当得利", - "n_sjdwje": 380000, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2020)桂0103执保254号", - "c_ah_hx": "(2021)桂0103执5652号:14124b1098f5f3693beef922a586badd", - "c_ah_ys": "(2019)桂0103民初16680号:06b860c4388a66e580b8c5253af27346", - "c_dsrxx": [ - { - "c_mc": "中国工商银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "王玉权", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "93eb07fdf0cc6d498795dc3d2ed293cd", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2020-02-28", - "d_larq": "2020-01-21", - "n_ajbs": "c5107a3beb1d827fef71072e4f6a5c64", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 1352532658, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2021)桂0107执恢332号", - "c_ah_ys": "(2016)桂0107执479号:2e772f0e3830f29b2b58ee6710664deb", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "黄年环", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "7d41a2c7271f745d542f1c52f6f9f817", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-05-28", - "d_larq": "2021-03-16", - "n_ajbs": "b6038222301aebedeb272a9bf23c2411", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 3014529685, - "n_jaay": "未知", - "n_jabdje": 107280.3, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 143637.78, - "n_sqzxbdje": 107280.3, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2021)桂0103执5652号", - "c_ah_ys": "(2020)桂0103执保254号:c5107a3beb1d827fef71072e4f6a5c64", - "c_dsrxx": [ - { - "c_mc": "中国工商银行股份有限公司南宁分行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "王玉权", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "35cad0a823ffb6facca09d56b9606268", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-09-14", - "d_larq": "2021-04-09", - "n_ajbs": "14124b1098f5f3693beef922a586badd", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1687907883, - "n_jaay": "借款合同纠纷", - "n_jabdje": 89972.6, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市青秀区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 91222.6, - "n_sqzxbdje": 89972.6, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2021)桂0107执保4197号", - "c_ah_hx": "(2022)桂0107执5332号:5c77d5b423c30e38fa9d72af0990aff7", - "c_ah_ys": "(2021)桂0107民初6529号:744e06488a38cecd0d33955d6aa10fe2", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "何明", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "4d6a7c5ac17390120da04e6bec956a25", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-11-24", - "d_larq": "2021-10-29", - "n_ajbs": "247633f2d9d17ca3508816e4ea641765", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 2876993130, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2021)桂0107执保4199号", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "冯波", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "杨日新", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "aedada9aef109fc138c621e2d065a093", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-11-24", - "d_larq": "2021-10-29", - "n_ajbs": "2deda6828f26bd027e9ffcd417a0b802", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 2192571790, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2021)桂0107执保4200号", - "c_ah_hx": "(2022)桂0107执5329号:e9333b2981821229cdeceacad06cd6bc", - "c_ah_ys": "(2021)桂0107民初4033号:1d708a25b1bdde010e4f31d9f1112aff", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "282e48eeace8a9b33525e9f296c87010", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2021-11-24", - "d_larq": "2021-10-29", - "n_ajbs": "8e7997a0d7be940d7948824def76ccd1", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 4130211728, - "n_jaay": "未知", - "n_jafs": "保全完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2022)桂0107执5329号", - "c_ah_hx": "(2023)桂0107执恢2594号:62834d00bd437f63a054d63ceceb68d4", - "c_ah_ys": "(2021)桂0107执保4200号:8e7997a0d7be940d7948824def76ccd1", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "fe5e2fce12282dffb852edbf84dbad40", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-10-11", - "d_larq": "2022-05-31", - "n_ajbs": "e9333b2981821229cdeceacad06cd6bc", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1997109090, - "n_jaay": "借款合同纠纷", - "n_jabdje": 56721.68, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 0, - "n_sqzxbdje": 56721.68, - "n_ssdw": "被执行人", - "n_wzxje": 56721.68 - }, - { - "c_ah": "(2022)桂0107执5332号", - "c_ah_ys": "(2021)桂0107执保4197号:247633f2d9d17ca3508816e4ea641765", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "何明", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "5057f69d5330868ee5acf6a5ed97853a", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2022-08-19", - "d_larq": "2022-05-31", - "n_ajbs": "5c77d5b423c30e38fa9d72af0990aff7", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 153369861, - "n_jaay": "借款合同纠纷", - "n_jabdje": 82747.85, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 1141, - "n_sqzxbdje": 82747.85, - "n_ssdw": "被执行人", - "n_wzxje": 81606.85 - }, - { - "c_ah": "(2023)桂0107执1677号", - "c_ah_ys": "(2021)桂01民终10117号:d9074371e9008a4c89b063bd8964b023", - "c_dsrxx": [ - { - "c_mc": "广西巨安建筑安装工程有限责任公司", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "784b1a946968ff1aadc2e2dda9dd170f", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-08-22", - "d_larq": "2023-02-02", - "n_ajbs": "e6246c51d9aef85a27db2d3d2c4d2710", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 1810123267, - "n_jaay": "建设工程合同纠纷", - "n_jabdje": 13482080, - "n_jafs": "终结本次执行程序", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "建设工程合同纠纷", - "n_sjdwje": 700000, - "n_sqzxbdje": 13482080, - "n_ssdw": "被执行人", - "n_wzxje": 12782080 - }, - { - "c_ah": "(2023)桂0107执2561号", - "c_ah_ys": "(2022)桂0107民初3520号:016687d73ba110aa8cdd4a2ac9e3dd99", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "甘翠英", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "a7ee267ee9ca2c40e15ca10387498a4c", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-05-11", - "d_larq": "2023-03-03", - "n_ajbs": "3ed3ad5129ccec036cadd76d956b8454", - "n_ajjzjd": "已结案", - "n_ajlx": "首次执行", - "n_crc": 2150167114, - "n_jaay": "借款合同纠纷", - "n_jabdje": 48149.29, - "n_jafs": "终结执行", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 622, - "n_sqzxbdje": 48149.29, - "n_ssdw": "被执行人", - "n_wzxje": 47527.29 - }, - { - "c_ah": "(2023)桂0107执恢1701号", - "c_ah_ys": "(2016)桂0107执1871号:07c9ef9256bb9cb96031d83ce207122c", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁友爱支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "唐觉荣", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_id": "2c42e0b305344895687c79545f4cd48d", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-08-17", - "d_larq": "2023-07-20", - "n_ajbs": "5a3a3e67f0c4d9343ce2f89a9bf78e66", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 776289030, - "n_jaay": "未知", - "n_jabdje": 138564.6, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 140542.6, - "n_sqzxbdje": 138564.6, - "n_ssdw": "被执行人", - "n_wzxje": 0 - }, - { - "c_ah": "(2023)桂0107执保3588号", - "c_ah_ys": "(2023)桂0107民初11484号:4c9aa71e1290e93a0819a0f5cc1b2c92", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请人" - }, - { - "c_mc": "侯安魁", - "n_dsrlx": "自然人", - "n_ssdw": "被申请人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被申请人" - } - ], - "c_id": "db231c94da999449d759d865b73759fc", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-12-21", - "d_larq": "2023-11-10", - "n_ajbs": "74ccc2633f50fcac6825d958d923eb34", - "n_ajjzjd": "已结案", - "n_ajlx": "财产保全执行", - "n_crc": 2104653087, - "n_jaay": "未知", - "n_jafs": "部分保全", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "未知", - "n_ssdw": "被申请人" - }, - { - "c_ah": "(2023)桂0107执恢2594号", - "c_ah_ys": "(2022)桂0107执5329号:e9333b2981821229cdeceacad06cd6bc", - "c_dsrxx": [ - { - "c_mc": "中国农业银行股份有限公司南宁科技支行", - "n_dsrlx": "企业组织", - "n_ssdw": "申请执行人" - }, - { - "c_mc": "曾昭南", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "徐文珍", - "n_dsrlx": "自然人", - "n_ssdw": "被执行人" - }, - { - "c_mc": "广西鼎铭房地产开发有限公司", - "n_dsrlx": "企业组织", - "n_ssdw": "被执行人" - } - ], - "c_gkws_id": "f5742286260a4cba9fe7b1320033b049", - "c_id": "26515fd4263902833366300ebd543735", - "c_ssdy": "广西壮族自治区", - "d_jarq": "2023-11-28", - "d_larq": "2023-11-23", - "n_ajbs": "62834d00bd437f63a054d63ceceb68d4", - "n_ajjzjd": "已结案", - "n_ajlx": "恢复执行", - "n_crc": 1071715949, - "n_jaay": "未知", - "n_jabdje": 56721.68, - "n_jafs": "执行完毕", - "n_jbfy": "南宁市西乡塘区人民法院", - "n_jbfy_cj": "基层法院", - "n_laay": "借款合同纠纷", - "n_sjdwje": 57472.68, - "n_sqzxbdje": 56721.68, - "n_ssdw": "被执行人", - "n_wzxje": 0 - } - ], - "count": { - "area_stat": "广西壮族自治区(24)", - "ay_stat": "未知(14),民事(10)", - "count_beigao": 24, - "count_jie_beigao": 24, - "count_jie_other": 0, - "count_jie_total": 24, - "count_jie_yuangao": 0, - "count_other": 0, - "count_total": 24, - "count_wei_beigao": 0, - "count_wei_other": 0, - "count_wei_total": 0, - "count_wei_yuangao": 0, - "count_yuangao": 0, - "jafs_stat": "终结本次执行程序(8),保全完毕(7),执行完毕(4),终结执行(4),部分保全(1)", - "larq_stat": "2016(6),2017(2),2018(1),2019(2),2020(1),2021(5),2022(2),2023(5)", - "money_beigao": 39, - "money_jie_beigao": 39, - "money_jie_other": 0, - "money_jie_total": 39, - "money_jie_yuangao": 0, - "money_other": 0, - "money_total": 39, - "money_wei_beigao": 0, - "money_wei_other": 0, - "money_wei_percent": 0, - "money_wei_total": 0, - "money_wei_yuangao": 0, - "money_yuangao": 0 - } - }, - "preservation": {} - }, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "广西鼎铭房地产开发有限公司", - "pName": "李强", - "relationship": ["sh", "lp", "tm"], - "stockHolderItem": { - "investDate": "", - "investRate": "10.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 100 - } - }, - { - "basicInfo": { - "apprdate": "2016-05-28", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450107MA5KK3PU6A", - "district": "", - "estiblishTime": "2004-07-02", - "industry": "零售业", - "industry_code": "F", - "legalPersonName": "李健", - "name": "南宁市铭鼎商贸有限公司", - "nic_code": "F5211", - "nic_name": "批发和零售业-零售业-综合零售-百货零售", - "opscope": "窗帘布艺,家居用品,装饰材料(危险化学品除外),日用百货,服装,纺织品。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "100.000000万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4501002508737", - "regStatus": "吊销,未注销", - "regorg": "南宁市西乡塘区市场监督管理局", - "revdate": "2016-05-28", - "type": "1" - }, - "executedPerson": [ - { - "caseCode": "(2010)青执字第01000号", - "caseCreateTime": "2010-09-06", - "execCourtName": "", - "execMoney": 283845, - "partyCardNum": "452528********3012", - "pname": "李健" - }, - { - "caseCode": "(2010)青执字第00188号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 308464, - "partyCardNum": "45252819691****3012", - "pname": "李健" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "南宁市铭鼎商贸有限公司", - "pName": "李强", - "relationship": ["sh"], - "stockHolderItem": { - "investDate": "", - "investRate": "20.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 20 - } - }, - { - "basicInfo": { - "apprdate": "2018-06-25", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司分公司(自然人投资或控股)", - "creditCode": "", - "district": "青秀区", - "estiblishTime": "2002-01-28", - "his_staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": [""] - } - ] - }, - "industry": "房地产业", - "industry_code": "K", - "legalPersonName": "李强", - "name": "广西鼎铭房地产置换服务有限公司南宁分公司", - "nic_code": "K7030", - "nic_name": "房地产业-房地产业-房地产中介服务-房地产中介服务", - "opscope": "房地产信息咨询服务,房地产交易居间、代理、行纪;商品信息咨询(不含期货、金融、保险、证券等国家专项规定),商品交易居间、代理、行纪。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "5.0万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4501001005198", - "regStatus": "吊销,未注销", - "regorg": "南宁市青秀区市场监督管理局", - "revdate": "2018-06-25", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": [""] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": {}, - "orgName": "广西鼎铭房地产置换服务有限公司南宁分公司", - "pName": "李强", - "relationship": ["lp", "tm", "his_tm"] - }, - { - "adminPenalty": [ - { - "content": "", - "decisionDate": "2010-08-23", - "departmentName": "海淀分局", - "legalPersonName": "李强", - "punishNumber": "京工商海处字(2010)第D2389号", - "reason": "", - "type": "逾期年检" - } - ], - "basicInfo": { - "apprdate": "2006-04-13", - "base": "bj", - "candate": "", - "city": "北京市", - "companyOrgType": "其他有限责任公司分公司", - "creditCode": "91110108MA0464P97H", - "district": "海淀区", - "estiblishTime": "2006-04-13", - "industry": "软件和信息技术服务业", - "industry_code": "I", - "legalPersonName": "李强", - "name": "深圳市亿讯时空信息技术有限公司北京分公司", - "nic_code": "I6599", - "nic_name": "信息传输、软件和信息技术服务业-软件和信息技术服务业-其他信息技术服务业-其他未列明信息技术服务业", - "opscope": "计算机软件和系统集成及辅助设备;网络工程;通讯设备的技术开发、咨询;广告设计。", - "province": "北京市", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "", - "regCapitalCurrency": "人民币", - "regNumber": "1101081949120", - "regStatus": "吊销", - "regorg": "北京市工商行政管理局海淀分局", - "revdate": "2010-11-25", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["负责人"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "深圳市亿讯时空信息技术有限公司北京分公司", - "pName": "李强", - "relationship": ["lp", "tm"] - }, - { - "basicInfo": { - "apprdate": "2008-09-04", - "base": "gd", - "candate": "2020-04-07", - "city": "深圳市", - "companyOrgType": "有限责任公司", - "creditCode": "91440300786556245H", - "district": "福田区", - "estiblishTime": "2006-03-23", - "industry": "科技推广和应用服务业", - "industry_code": "M", - "legalPersonName": "李铭", - "name": "深圳市亿讯时空信息技术有限公司", - "nic_code": "M7590", - "nic_name": "科学研究和技术服务业-科技推广和应用服务业-其他科技推广服务业-其他科技推广服务业", - "opscope": "一般经营项目是:计算机软件和系统集成及辅助设备、网络工程、通讯设备的技术开发、咨询、销售,国内贸易(不含专营、专控、专卖商品),从事货物、技术进出口业务(不含分销、国家专营专控商品);广告业务。,许可经营项目是:", - "province": "广东省", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "1000.000000万人民币", - "regCapitalCurrency": "人民币", - "regNumber": "440301103603769", - "regStatus": "吊销,未注销", - "regorg": "福田局", - "revdate": "2020-04-07", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["董事,总经理"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2010)青执字第00198号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 444028, - "partyCardNum": "36042819721****0037", - "pname": "秦学文" - }, - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "深圳市亿讯时空信息技术有限公司", - "pName": "李强", - "relationship": ["sh", "tm"], - "stockHolderItem": { - "investDate": "", - "investRate": "17.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 170 - } - }, - { - "basicInfo": { - "apprdate": "2004-06-30", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450100MA5KJ83P3J", - "district": "", - "estiblishTime": "2003-08-06", - "industry": "零售业", - "industry_code": "F", - "legalPersonName": "李健", - "name": "南宁市豆花香食品有限公司", - "nic_code": "F5227", - "nic_name": "批发和零售业-零售业-食品、饮料及烟草制品专门零售-烟草制品零售", - "opscope": "豆制品的生产及销售;农副土特产品,日用百货,五金交电的销售。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "50万元人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4501002505675", - "regStatus": "吊销,未注销", - "regorg": "南宁市行政审批局", - "revdate": "2007-02-08", - "type": "1" - }, - "executedPerson": [ - { - "caseCode": "(2010)青执字第01000号", - "caseCreateTime": "2010-09-06", - "execCourtName": "", - "execMoney": 283845, - "partyCardNum": "452528********3012", - "pname": "李健" - }, - { - "caseCode": "(2010)青执字第00188号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 308464, - "partyCardNum": "45252819691****3012", - "pname": "李健" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "南宁市豆花香食品有限公司", - "pName": "李强", - "relationship": ["sh"], - "stockHolderItem": { - "investDate": "2003-08-06", - "investRate": "50.0%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 25 - } - }, - { - "basicInfo": { - "apprdate": "2005-09-26", - "base": "gx", - "candate": "", - "city": "柳州市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "91450200MA5KPNEG3T", - "district": "", - "estiblishTime": "2001-04-11", - "industry": "软件和信息技术服务业", - "industry_code": "I", - "legalPersonName": "李健", - "name": "广西鼎铭房地产置换服务有限公司", - "nic_code": "I6513", - "nic_name": "信息传输、软件和信息技术服务业-软件和信息技术服务业-软件开发-应用软件开发", - "opscope": "连锁经营:房地产信息咨询服务,房地产交易居间、代理、行纪;商品信息咨询(不含期货、金融、保险、证券等国家专项规定),商品交易居间、代理、行纪。", - "province": "广西壮族自治区", - "reccap": 200, - "reccapcur": "人民币", - "regCapital": "250万元人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4502002501968", - "regStatus": "吊销,未注销", - "regorg": "柳州市市场监督管理局", - "revdate": "2009-01-04", - "staffList": { - "result": [ - { - "name": "李强", - "type": "2", - "typeJoin": ["监事"] - } - ] - }, - "type": "1" - }, - "dishonestExecutedPerson": [ - { - "areaname": "广西", - "businessentity": "", - "cardnum": "4525281974****3016", - "casecode": "(2014)城中执字第00062号", - "courtname": "柳州市城中区人民法院", - "disrupttypename": "其他有履行能力而拒不履行生效法律文书确定义务", - "duty": "中国农业银行股份有限公司柳州城中支行申请执行李强220604.73元", - "gistid": "(2010)城中民二初字第480号民事判决书", - "gistunit": "柳州市城中区人民法院", - "iname": "李强", - "performance": "全部未履行", - "performedPart": "", - "publishdate": "2014-06-19", - "regdate": "2014-02-11", - "type": "0", - "unperformPart": "" - } - ], - "executedPerson": [ - { - "caseCode": "(2010)青执字第01000号", - "caseCreateTime": "2010-09-06", - "execCourtName": "", - "execMoney": 283845, - "partyCardNum": "452528********3012", - "pname": "李健" - }, - { - "caseCode": "(2010)青执字第00188号", - "caseCreateTime": "2010-02-08", - "execCourtName": "", - "execMoney": 308464, - "partyCardNum": "45252819691****3012", - "pname": "李健" - }, - { - "caseCode": "(2014)城中执字第00062号", - "caseCreateTime": "2014-02-11", - "execCourtName": "", - "execMoney": 220605, - "partyCardNum": "45252819740****3016", - "pname": "李强" - } - ], - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "广西鼎铭房地产置换服务有限公司", - "pName": "李强", - "relationship": ["sh", "tm"], - "stockHolderItem": { - "investDate": "", - "investRate": "10.87%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 50 - } - }, - { - "basicInfo": { - "apprdate": "2005-03-10", - "base": "gx", - "candate": "", - "city": "南宁市", - "companyOrgType": "有限责任公司(自然人投资或控股)", - "creditCode": "914500007479525012", - "district": "", - "estiblishTime": "2003-02-27", - "industry": "建筑装饰、装修和其他建筑业", - "industry_code": "E", - "legalPersonName": "李健", - "name": "广西鼎铭装饰工程有限公司", - "nic_code": "E5011", - "nic_name": "建筑业-建筑装饰、装修和其他建筑业-建筑装饰和装修业-公共建筑装饰和装修", - "opscope": "建筑装修装饰工程专业承包(暂定)叁级;五金交电、日用百货、建筑材料、装饰材料、机电产品、汽车配件、摩托车配件的购销。", - "province": "广西壮族自治区", - "reccap": 0, - "reccapcur": "人民币", - "regCapital": "300万元人民币", - "regCapitalCurrency": "人民币", - "regNumber": "4500002501464", - "regStatus": "吊销,未注销", - "regorg": "广西壮族自治区市场监督管理局", - "revdate": "2007-09-14", - "type": "1" - }, - "fsource": "1", - "lawsuitInfo": { - "data": {}, - "sxbzxr": [], - "xgbzxr": [] - }, - "orgName": "广西鼎铭装饰工程有限公司", - "pName": "李强", - "relationship": ["sh"], - "stockHolderItem": { - "investDate": "", - "investRate": "5.26%", - "orgHolderName": "李强", - "orgHolderType": "自然人", - "subscriptAmt": 30 - } - } - ], - "total": 8 - }, - "success": true, - "timestamp": "2025-03-19 17:00:59" - }, - { - "apiID": "G34BJ03", - "data": { "risk_level": "C" }, - "success": true, - "timestamp": "2025-03-19 17:00:59" - }, - { - "apiID": "G22SC01", - "data": { - "xgbzxr": [ - { - "msg": "查询成功", - "xgbzxr": [ - { - "fbrq": "2018-08-31", - "ah": "(2016)闽0211执1574号", - "zxfy": "厦门市集美区人民法院", - "id": "763f693a894c680d4da65fae0e488fac" - }, - { - "fbrq": "2018-08-31", - "ah": "(2016)闽0211执1577号", - "zxfy": "厦门市集美区人民法院", - "id": "d439c2c8e6330de7c00bbae668cb9b2b" - } - ] - } - ], - "sxbzxr": [ - { - "msg": "查询成功", - "sxbzxr": [ - { - "zxyjwh": "(2016)闽0211民初1580号", - "larq": "2016-09-05", - "ah": "(2016)闽0211执01577号", - "sf": "福建", - "yw": "被执行人支付欠款107000元,并支付相应利息。", - "id": "cf8bd8d8c886f62113b7833de7aaaa72", - "xwqx": "其他有履行能力而拒不履行生效法律文书确定义务", - "zxyjdw": "厦门市集美区人民法院", - "zxfy": "厦门市集美区人民法院", - "xb": "男", - "pjje_gj": 0, - "lxqk": "全部未履行", - "fbrq": "2016-09-14" - }, - { - "xb": "男", - "pjje_gj": 0, - "id": "b01fd675f91230bec6c407c5b54ffd5c", - "larq": "2016-09-05", - "zxyjwh": "(2016)闽0211民初1579号", - "ah": "(2016)闽0211执01574号", - "zxfy": "厦门市集美区人民法院", - "sf": "福建", - "lxqk": "全部未履行", - "fbrq": "2016-09-13", - "yw": "被执行人支付欠款87300元,并支付相应利息。", - "zxyjdw": "厦门市集美区人民法院", - "xwqx": "其他有履行能力而拒不履行生效法律文书确定义务" - }, - { - "zxyjwh": "2015年海民(商)初字第12658号", - "pjje_gj": 0, - "sf": "北京", - "lxqk": "全部未履行", - "fbrq": "2016-11-09", - "id": "aa98cae8cbf0e1a87cab4c713c59faa1", - "yw": "判决如下: 一、被告李金桂于本判决生效后十日内偿还原告兵器装备集团财务有限责任公司贷款本金二万一千零三十一元四角七分及逾期利息(截止至二O一四年十二月二十三日,逾期利息为四千八百五十四元三角五分,自二O一四年十二月二十四日起至贷款全部清偿之日止的逾期利息按《汽车消费贷款合同》及其附件约定计算); 二、原告兵器装备集团财务有限责任公司对被告李金桂所有的重庆长安汽车股份有限公司生产的长安牌小型轿车一辆(车架号LS5A2AGE7CA502800、发动机号CC4A037967)折价或拍卖、变卖后所得的价款享有优先受偿权; 三、驳回原告兵器装备集团财务有限责任公司其他诉讼请求。 如果被告李金桂未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。 案件受理费三百七十四元(原告兵器装备集团财务有限责任公司已预交),由原告兵器装备集团财务有限责任公司负担一百一十八元,已交纳;由被告李金桂负担二百五十六元,于本判决书生效后七日内交纳。 如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,按照不服一审判决部分的上诉请求数额交纳上诉案件受理费,上诉于北京市第一中级人民法院。如在上诉期满后七日内未交纳上诉费的,按自动撤回上诉处理。", - "zxyjdw": "北京市海淀区人民法院", - "xwqx": "其他有履行能力而拒不履行生效法律文书确定义务", - "ah": "(2016)京0108执8160号", - "zxfy": "北京市海淀区人民法院", - "xb": "男", - "larq": "2016-08-08" - } - ] - } - ], - "entout": [ - { - "entout": { - "preservation": {}, - "crc": 2762880847, - "cases_tree": { - "civil": [ - { - "next": { - "case_type": 1000, - "c_ah": "(2016)京0108执8160号", - "stage_type": 5, - "n_ajbs": "832fafae7643647d551787930f147590" - }, - "stage_type": 1, - "n_ajbs": "7c1f637f3151d40fcec0823c38b0db93", - "case_type": 300, - "c_ah": "2015年海民(商)初字第12658号" - }, - { - "next": { - "stage_type": 5, - "n_ajbs": "7a5ea05094475f99cbef996336ca1d31", - "case_type": 1000, - "c_ah": "(2016)闽0211执1574号" - }, - "stage_type": 1, - "n_ajbs": "5cc30560cd5fa7ee48353b343de70c19", - "case_type": 300, - "c_ah": "(2016)闽0211民初1579号" - }, - { - "c_ah": "(2016)闽0211民初1580号", - "next": { - "next": { - "case_type": 1000, - "c_ah": "(2021)闽0211执恢61号", - "stage_type": 5, - "n_ajbs": "2aa71340454fcb9b1f9a945f873068cb" - }, - "stage_type": 5, - "n_ajbs": "f43d8506f30bea3e45ff866d95622e1a", - "case_type": 1000, - "c_ah": "(2016)闽0211执1577号" - }, - "stage_type": 1, - "n_ajbs": "4c3de60302c6e8d4271a4ce7ff6ae5fa", - "case_type": 300 - } - ], - "criminal": [ - { - "stage_type": 1, - "n_ajbs": "c1a0943effb20f93044b9bcbe3a17e65", - "case_type": 200, - "c_ah": "(2017)闽0211刑初263号" - } - ] - }, - "administrative": {}, - "implement": { - "cases": [ - { - "n_wzxje": 26141.82, - "c_gkws_dsr": "申请执行人兵器装备集团财务有限责任公司,住所地北京市海淀区车道沟10号院3号科研办公楼5层,注册号:110000010276355。法定代表人李守武,董事长。委托代理人毕建伟,北京大成律师事务所律师。委托代理人骆慧超,北京大成律师事务所律师。被执行人李金桂,男,1984年3月5日出生。", - "n_sqzxbdje": 26141.82, - "n_crc": 489164562, - "n_ajlx": "首次执行", - "n_jaay": "合同、无因管理、不当得利", - "n_ssdw": "被执行人", - "n_ajjzjd": "已结案", - "c_dsrxx": [ - { - "n_ssdw": "申请执行人", - "c_mc": "兵器装备集团财务有限责任公司", - "n_dsrlx": "企业组织" - }, - { - "n_ssdw": "被执行人", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - } - ], - "n_laay": "合同、无因管理、不当得利", - "d_larq": "2016-08-08", - "n_jabdje": 26141.82, - "n_jbfy_cj": "基层法院", - "n_jafs": "终结本次执行程序", - "c_gkws_id": "a3f56823-db70-4ccb-aa91-88b6e1dba7a4", - "c_gkws_pjjg": "终结本次执行程序。申请执行人发现被执行人有可供执行财产的,可以再次申请执行。本裁定书送达后立即生效。", - "c_ssdy": "北京市", - "n_ajbs": "832fafae7643647d551787930f147590", - "c_id": "24fb6bc170328430d3d1e7be2db29d5d", - "c_ah_ys": "2015年海民(商)初字第12658号:7c1f637f3151d40fcec0823c38b0db93", - "n_jbfy": "北京市海淀区人民法院", - "d_jarq": "2016-11-11", - "c_ah": "(2016)京0108执8160号" - }, - { - "n_jbfy_cj": "基层法院", - "c_dsrxx": [ - { - "n_ssdw": "申请执行人", - "c_mc": "傅光全", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被执行人", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - } - ], - "n_laay": "借款合同纠纷", - "c_gkws_glah": "(2016)闽0211民初1579号", - "n_wzxje": 87300, - "n_jafs": "终结本次执行程序", - "d_jarq": "2016-12-20", - "n_sjdwje": 0, - "c_ah": "(2016)闽0211执1574号", - "n_ajlx": "首次执行", - "d_larq": "2016-09-05", - "n_ssdw": "被执行人", - "n_ajjzjd": "已结案", - "n_jbfy": "厦门市集美区人民法院", - "c_gkws_pjjg": "冻结、划拨被执行人李金桂银行存款人民币88510元及迟延履行期间的债务利息,不足部份查封、扣押、冻结、提取被执行人李金桂相应价值的财产。本裁定立即执行。", - "c_ssdy": "福建省", - "n_ajbs": "7a5ea05094475f99cbef996336ca1d31", - "n_crc": 3832637578, - "c_ah_ys": "(2016)闽0211民初1579号:5cc30560cd5fa7ee48353b343de70c19", - "n_jaay": "借款合同纠纷", - "c_gkws_dsr": "申请执行人:傅光全,男,汉族,1970年10月2日出生,住福建省厦门市集美区。被执行人:李金桂,男,汉族,1984年3月5日出生,住广西博白县。", - "c_id": "c9fdcf72c6239589e3ff992d13092766", - "c_gkws_id": "a7e6a143-00cb-4005-b667-83f7c4697292", - "n_jabdje": 87300, - "n_sqzxbdje": 87300 - }, - { - "n_jbfy_cj": "基层法院", - "c_id": "1b408462583bb231cd352a5fcff87567", - "c_ah_hx": "(2021)闽0211执恢61号:2aa71340454fcb9b1f9a945f873068cb", - "n_wzxje": 107000, - "n_ssdw": "被执行人", - "n_sjdwje": 0, - "n_sqzxbdje": 107000, - "n_crc": 2943948511, - "n_jbfy": "厦门市集美区人民法院", - "d_larq": "2016-09-05", - "d_jarq": "2016-12-20", - "n_jaay": "借款合同纠纷", - "n_jafs": "终结本次执行程序", - "n_ajbs": "f43d8506f30bea3e45ff866d95622e1a", - "c_ah_ys": "(2016)闽0211民初1580号:4c3de60302c6e8d4271a4ce7ff6ae5fa", - "n_ajjzjd": "已结案", - "c_dsrxx": [ - { - "n_ssdw": "申请执行人", - "c_mc": "苏成庆", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被执行人", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - } - ], - "n_laay": "借款合同纠纷", - "c_ah": "(2016)闽0211执1577号", - "c_ssdy": "福建省", - "n_jabdje": 107000, - "n_ajlx": "首次执行" - }, - { - "n_jbfy_cj": "基层法院", - "n_sqzxbdje": 133882.74, - "n_crc": 2150103446, - "n_ajlx": "恢复执行", - "c_dsrxx": [ - { - "n_ssdw": "申请执行人", - "c_mc": "苏成庆", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被执行人", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - } - ], - "n_jbfy": "厦门市集美区人民法院", - "d_jarq": "2021-06-24", - "n_ajbs": "2aa71340454fcb9b1f9a945f873068cb", - "c_id": "ace493ddb14c52b330012f1d99caa0dc", - "n_ssdw": "被执行人", - "c_ssdy": "福建省", - "n_laay": "借款合同纠纷", - "n_wzxje": 0, - "n_jafs": "终结执行", - "n_jabdje": 137030.74, - "c_ah_ys": "(2016)闽0211执1577号:f43d8506f30bea3e45ff866d95622e1a", - "n_ajjzjd": "已结案", - "d_larq": "2021-03-03", - "n_jaay": "未知", - "c_ah": "(2021)闽0211执恢61号" - }, - { - "n_jafs": "保全完毕", - "n_ajbs": "1d92c20a4e6734aa1fc33899425aab9e", - "n_ajlx": "财产保全执行", - "n_jbfy": "厦门市集美区人民法院", - "d_jarq": "2024-06-28", - "n_ssdw": "被申请人", - "n_jbfy_cj": "基层法院", - "n_ajjzjd": "已结案", - "n_laay": "未知", - "d_larq": "2024-05-09", - "n_jaay": "未知", - "c_ah": "(2024)闽0211执保1854号", - "c_ssdy": "福建省", - "c_id": "06a7181ed12a07c6ddbd63647fd729a3", - "n_crc": 2076821931, - "c_dsrxx": [ - { - "n_ssdw": "被申请人", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "李奎", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "洪黎明", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "夏欢", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "徐信伟", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "哈同", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "徐玮喆", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "徐毅凯", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "张裕斌", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被申请人", - "c_mc": "沈涛", - "n_dsrlx": "自然人" - } - ] - } - ], - "count": { - "money_yuangao": 0, - "count_wei_beigao": 0, - "count_yuangao": 0, - "money_wei_beigao": 0, - "money_wei_percent": 0, - "money_other": 0, - "money_wei_yuangao": 0, - "money_jie_yuangao": 0, - "count_jie_yuangao": 0, - "count_total": 5, - "money_jie_other": 0, - "ay_stat": "民事(4),未知(1)", - "count_wei_yuangao": 0, - "money_wei_total": 0, - "money_total": 13, - "jafs_stat": "终结本次执行程序(3),终结执行(1),保全完毕(1)", - "money_jie_total": 13, - "larq_stat": "2016(3),2021(1),2024(1)", - "money_jie_beigao": 13, - "count_jie_total": 5, - "count_beigao": 5, - "money_wei_other": 0, - "area_stat": "福建省(4),北京市(1)", - "count_wei_total": 0, - "count_wei_other": 0, - "count_jie_other": 0, - "count_jie_beigao": 5, - "money_beigao": 13, - "count_other": 0 - } - }, - "criminal": { - "cases": [ - { - "c_dsrxx": [ - { - "n_ssdw": "被告人", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - } - ], - "n_jaay": "破坏社会主义市场经济秩序罪", - "d_jarq": "2017-05-03", - "n_pcpcje_level": 0, - "c_gkws_pjjg": "一、被告人李金桂犯合同诈骗罪,判处有期徒刑一年,并处罚金人民币八千元。(刑期从判决执行之日起计算。判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2017年1月21日起至2018年1月20日止。罚金限判决生效后三十日内缴清。)二、责令被告人李金桂退赔被害单位厦门开口乐食品有限公司经济损失人民币73241元。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向福建省厦门市中级人民法院提出上诉。书面上诉的,应当提交上诉状正本一份、副本二份。", - "n_dzzm_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", - "d_larq": "2017-04-20", - "n_jaay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", - "n_ccxzxje_gj": 8000, - "n_dzzm": "破坏社会主义市场经济秩序罪", - "n_fzje_level": 8, - "n_ajlx": "刑事一审", - "c_ah": "(2017)闽0211刑初263号", - "n_ccxzxje_level": 0, - "c_gkws_dsr": "公诉机关厦门市集美区人民检察院。被告人李金桂,男,1984年3月5日出生,汉族,小学文化,个体经营者,户籍所广西壮族自治区博白县。因涉嫌犯合同诈骗罪于2017年1月21日被刑事拘留,同月26日被逮捕。辩护人白宝聪,福建明证律师事务所律师。", - "n_jbfy_cj": "基层法院", - "c_id": "6626c18ff033214d16fb5c39f0bdf452", - "n_fzje": 73241, - "n_bqqpcje_level": 0, - "n_ssdw_ys": "被告人", - "c_gkws_id": "eb139c12-a35d-4648-83b3-a7a20062e6e5", - "n_ccxzxje_gj_level": 1, - "c_ssdy": "福建省", - "n_laay": "破坏社会主义市场经济秩序罪", - "n_ssdw": "被告人", - "n_pcjg": "给予刑事处罚", - "n_slcx": "一审", - "n_jbfy": "厦门市集美区人民法院", - "n_ajbs": "c1a0943effb20f93044b9bcbe3a17e65", - "n_laay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", - "n_jafs": "判决", - "n_ajjzjd": "已结案", - "c_slfsxx": "1,2017-05-03 08:00:00,1,1", - "n_crc": 1349635859 - } - ], - "count": { - "count_wei_yuangao": 0, - "count_other": 0, - "money_wei_total": 0, - "money_total": 1, - "count_jie_beigao": 1, - "count_wei_other": 0, - "money_wei_percent": 0, - "count_wei_total": 0, - "money_yuangao": 0, - "ay_stat": "破坏社会主义市场经济秩序罪(1)", - "money_wei_yuangao": 0, - "count_beigao": 1, - "money_jie_total": 1, - "count_total": 1, - "money_wei_other": 0, - "count_jie_yuangao": 0, - "count_jie_other": 0, - "jafs_stat": "判决(1)", - "larq_stat": "2017(1)", - "money_jie_beigao": 1, - "count_yuangao": 0, - "money_jie_yuangao": 0, - "money_jie_other": 0, - "money_other": 0, - "count_wei_beigao": 0, - "area_stat": "福建省(1)", - "money_beigao": 1, - "money_wei_beigao": 0, - "count_jie_total": 1 - } - }, - "bankrupt": {}, - "civil": { - "cases": [ - { - "n_crc": 3975361782, - "n_qsbdje": 37885.82, - "c_ah_hx": "(2016)京0108执8160号:832fafae7643647d551787930f147590", - "c_ssdy": "北京市", - "c_ah": "2015年海民(商)初字第12658号", - "n_jaay": "合同、准合同纠纷", - "n_ssdw": "被告", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jafs": "判决", - "c_dsrxx": [ - { - "n_ssdw": "原告", - "c_mc": "兵器装备集团财务有限责任公司", - "n_dsrlx": "企业组织" - }, - { - "n_ssdw": "被告", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - } - ], - "n_laay_tag": "合同纠纷", - "n_laay": "合同、准合同纠纷", - "n_ssdw_ys": "被告", - "n_ajjzjd": "已结案", - "c_slfsxx": ",,,1", - "n_pj_victory": "未知", - "n_jaay_tag": "合同纠纷", - "n_ajlx": "民事一审", - "d_larq": "2015-03-02", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,金融借款合同纠纷", - "n_jbfy_cj": "基层法院", - "d_jarq": "2015-06-01", - "n_jabdje": 37885.82, - "c_id": "f0925546359545472f7aca2b28da7170", - "n_slcx": "一审", - "n_qsbdje_level": 4, - "n_jbfy": "北京市海淀区人民法院", - "n_jabdje_level": 4, - "n_ajbs": "7c1f637f3151d40fcec0823c38b0db93" - }, - { - "n_laay_tag": "合同纠纷", - "n_qsbdje": 110142, - "c_id": "446c37f3b828b71fbff529bb1db9f2de", - "n_jbfy": "厦门市集美区人民法院", - "c_gkws_id": "745781009f174897ba6cac15009847f4", - "c_slfsxx": "1,2016-06-28 16:00:00,1,1", - "c_ssdy": "福建省", - "n_jaay": "合同、准合同纠纷", - "n_pj_victory": "未知", - "n_ssdw_ys": "被告", - "d_jarq": "2016-06-30", - "n_qsbdje_level": 11, - "d_larq": "2016-05-04", - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_slcx": "一审", - "c_ah_hx": "(2016)闽0211执1574号:7a5ea05094475f99cbef996336ca1d31", - "n_ajbs": "5cc30560cd5fa7ee48353b343de70c19", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_jabdje_level": 9, - "c_ah": "(2016)闽0211民初1579号", - "n_laay": "合同、准合同纠纷", - "n_jabdje": 86000, - "n_jaay_tag": "合同纠纷", - "n_crc": 1198841303, - "n_ssdw": "被告", - "c_gkws_dsr": "原告傅光全,男,汉族,1970年10月2日出生,住福建省厦门市集美区。委托代理人张记根,福建厦信律师事务所律师。被告李金桂,男,汉族,1984年3月5日出生,住广西博白县。被告巢情,女,住广西博白县。被告丁铃,男,汉族,1984年2月26日出生,住安徽省巢湖市居巢区。", - "n_jafs": "判决", - "n_jbfy_cj": "基层法院", - "c_gkws_pjjg": "准许原告傅光全撤回对被告巢情的起诉。", - "n_ajjzjd": "已结案", - "n_ajlx": "民事一审", - "c_dsrxx": [ - { - "n_ssdw": "原告", - "c_mc": "傅光全", - "n_dsrlx": "自然人" - }, - { - "c_mc": "丁铃", - "n_dsrlx": "自然人", - "n_ssdw": "被告" - }, - { - "n_dsrlx": "自然人", - "n_ssdw": "被告", - "c_mc": "李金桂" - } - ] - }, - { - "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "c_gkws_id": "d55ba2165ca44d43a343ac1500984695", - "c_slfsxx": "1,2016-06-29 15:00:00,1,1", - "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,民间借贷纠纷", - "n_pj_victory": "未知", - "c_gkws_dsr": "原告苏成庆,男,汉族,1978年3月12日出生,住福建省厦门市集美区。委托代理人张记根,福建厦信律师事务所律师。被告李金桂,男,汉族,1984年3月5日出生,住广西博白县。被告巢情,女,住广西博白县。", - "n_qsbdje": 111504, - "n_jbfy": "厦门市集美区人民法院", - "n_laay": "合同、准合同纠纷", - "d_larq": "2016-05-04", - "c_ah": "(2016)闽0211民初1580号", - "n_qsbdje_level": 11, - "n_ajbs": "4c3de60302c6e8d4271a4ce7ff6ae5fa", - "n_slcx": "一审", - "n_ajjzjd": "已结案", - "c_ah_hx": "(2016)闽0211执1577号:f43d8506f30bea3e45ff866d95622e1a", - "c_gkws_pjjg": "准许原告苏成庆撤回对被告巢情的起诉。", - "n_jabdje": 107000, - "n_jaay": "合同、准合同纠纷", - "c_ssdy": "福建省", - "n_ajlx": "民事一审", - "n_laay_tag": "合同纠纷", - "n_jaay_tag": "合同纠纷", - "n_ssdw": "被告", - "n_ssdw_ys": "被告", - "n_jbfy_cj": "基层法院", - "c_id": "10a1f6d658ed68f411f183dd693d1747", - "n_jabdje_level": 11, - "n_jafs": "判决", - "d_jarq": "2016-06-30", - "n_crc": 1562165082, - "c_dsrxx": [ - { - "n_ssdw": "原告", - "c_mc": "苏成庆", - "n_dsrlx": "自然人" - }, - { - "n_ssdw": "被告", - "c_mc": "李金桂", - "n_dsrlx": "自然人" - } - ] - } - ], - "count": { - "count_wei_other": 0, - "money_wei_total": 0, - "money_wei_other": 0, - "money_jie_total": 12, - "count_total": 3, - "money_jie_other": 0, - "count_yuangao": 0, - "money_wei_yuangao": 0, - "money_wei_beigao": 0, - "count_other": 0, - "count_beigao": 3, - "money_total": 12, - "count_jie_beigao": 3, - "money_jie_yuangao": 0, - "area_stat": "福建省(2),北京市(1)", - "count_wei_beigao": 0, - "jafs_stat": "判决(3)", - "money_wei_percent": 0, - "money_beigao": 12, - "count_jie_yuangao": 0, - "larq_stat": "2015(1),2016(2)", - "money_yuangao": 0, - "count_wei_yuangao": 0, - "money_other": 0, - "money_jie_beigao": 12, - "count_jie_total": 3, - "count_wei_total": 0, - "ay_stat": "合同、准合同纠纷(3)", - "count_jie_other": 0 - } - }, - "count": { - "count_jie_beigao": 9, - "money_wei_beigao": 0, - "money_wei_yuangao": 0, - "count_beigao": 9, - "money_jie_total": 15, - "money_jie_other": 0, - "ay_stat": "民事(4),合同、准合同纠纷(3),破坏社会主义市场经济秩序罪(1),未知(1)", - "count_wei_beigao": 0, - "count_jie_yuangao": 0, - "money_wei_other": 0, - "money_total": 15, - "count_jie_total": 9, - "money_yuangao": 0, - "money_wei_total": 0, - "count_wei_total": 0, - "money_beigao": 15, - "area_stat": "福建省(7),北京市(2)", - "money_jie_beigao": 15, - "count_wei_yuangao": 0, - "count_yuangao": 0, - "money_jie_yuangao": 0, - "count_other": 0, - "count_total": 9, - "money_wei_percent": 0, - "jafs_stat": "判决(4),终结本次执行程序(3),终结执行(1),保全完毕(1)", - "money_other": 0, - "count_jie_other": 0, - "larq_stat": "2015(1),2016(5),2017(1),2021(1),2024(1)", - "count_wei_other": 0 - } - }, - "msg": "查询成功" - } - ] - }, - "success": true, - "timestamp": "2025-03-19 17:00:59" - } -]