[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"approved-friend-links":32,"project-slug-ych":33},{"code":4,"msg":5,"data":6},0,"操作成功",{"police_number":7,"login_password_enabled":8,"copyright":9,"wechat_pay_api_key":7,"admin_login_wechat_enabled":8,"wechat_pay_public_key_id":10,"member_price":11,"police_link":7,"payment_enabled":12,"contact_email":13,"wechat_pay_serial_no":14,"member_discount":15,"wechat_pay_mch_id":16,"alipay_return_url":7,"alipay_private_key":17,"admin_login_password_enabled":8,"wechat_id":18,"wechat_pay_app_id":19,"owner_name":20,"site_domain":21,"site_desc":22,"login_wechat_qr_enabled":8,"alipay_public_key":23,"wechat_pay_private_key":24,"site_name":25,"icp_number":26,"alipay_notify_url":7,"wechat_pay_public_key":27,"payment_alipay_enabled":8,"icp_link":28,"wechat_pay_api_v3_key":29,"login_email_enabled":12,"alipay_app_id":30,"member_enabled":12,"wechat_pay_notify_url":31,"admin_login_email_enabled":12},"","false","© 2026 makexu.com 版权所有","PUB_KEY_ID_0117465997412026060900182334001401","168","true","370663537@qq.com","38039BC91B0D03B6C7DDDBAEAB823D1201FDA789","0.70","1746599741","MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJKx4pNlM6dJN10cqHxscvHhyBOu7KY6+23rmnIs1GtIvd8bu09I1mCyzWUDM26VxLz2l55I44gmK+\u002FnIhxqzsl0znvbZh5r3fj8CYbQRcDM7L9I7hOr9k5vWc\u002FAQy2jb9AmNuV3xa8F1bVkve00nN2U6Oap2aoNdDhSsSA1NeC0WwtVLaq2wkqqKBY\u002FUrfNLR3xr0iP0YRQy+paY6jta4Tz88KHE+x3ZRfxben+tejAsYVpjVTpcfDKzzKSTqDcY1vbPjApCsN66kKmEwD4HmPRNphksLiIOqyWc+zaJE39JM620Br6NuxvMiR0dmbncE3UaztvvXUSL0kDKnYKKhAgMBAAECggEAfO9U7VyZuehsVyfaPIkE6xmWBO7UiGr7pKiAmIbOSdQwgNqoiU0lbQhIsnsh6qXqdvJXs7pE\u002F5tirWu8MJ9w6Z11Yq4c7FbqIjIgzbSd\u002F+l6gbIiYWrM4O6sT2wLtvWimBgQ0HPGxF2h6otTV4VC98cyEe1x12EgMFOewy1cRY7QP68VBaGpOS6twrCJtLw9PvOPfeY6Fkur65ESAp1N7ELgJRHE0vtQljY01EYM30BwesDIZpUaGqmepzRhFKOkfiQDtgXM3GZOUXJHWR06j2T9PYcmDEFRkPPtLABI42UJPwtIb75kiXjv6uysob0vo746WtdIGRkuQNRjyyh\u002FsQKBgQDLxUCWAexSrrbnr5UITlMwocY0Fuo1U9pjABfB5MnrWoQPWsJgAOgiXt\u002FsNRtdZDMpo7fTku2rhDueiUHWY7aLUbvvvzbuBLfNXIX7wy2qNEPMmRpn9KkzLeB0MYwMvTXgT+zD\u002Fr6lIO3RYQE9JYaojBMuykDu+2Y9C9yRGTGjbwKBgQCsU6gc8cODXKHSCovZO8M6fbOpSoc6GezozvMvD\u002Fg1sOwNwovZ4VJwIFyGTyssbjjEp\u002F5B5B\u002FDg+HGygaPubuzTyc0\u002FfZ5uxgDfMjzExMhJiol0JdgSX+m3pC\u002Fc189pcvkSAKXQrGApXN3i95OrGOj\u002FiRr1AuGH8sYk0+vWYjS7wKBgGSEAL\u002F+YtzGYmMXMaTPPioXIvY+93kmy+tZ+F4kxZXbKJmKY6eHyvppYnvaFo2TB8nagKtVJvgcWmxxuJBQz5MZ1mMFJ8txeFlM8qqmNLho36jlPSlafrxIPRgT+Mmv7AuiYWCtIM3D2IwYFcxb3nj13+CM1EsOp\u002FglCcBpdRrxAoGAFLL3voJLubumtFQP+Ef1a1EuA2ewVopGqrAxBbYlWk2mDQERS1qFTHKWqotX5D5ZE0YahE+igRmWRQp\u002FP0RQB3m6e+MFeBnBCKo0eP4RjinHZkNn62jorGKPgG+bQQxpMUJ1DTY1m\u002F5DoFhsm4aZcVlVhp4xxCqNeqY3LBjVFoECgYEAmOxK+rzVnF83wfTE65lMXqN8UWTOWSDsbiGzx6YSg02X67MfDk2asD\u002FyciUiCCE25lRxwm0SuaetOTMbZO5mD8ZZEq7GQSt9L+r1LFjkB\u002FwmX6tbAJI3rpAWpD0ntcASCN8QfaWh3liFMaSjkn1OmhCCrV\u002FbS+aOJ1wZwJK4jeg=","dajiang8070","wxebc91c29d4bd3fe8","码客徐","www.makexu.com","分享优质开发工具、项目实战、编程教程、AI开发、源码项目和技术资源，帮助程序员快速成长，让开发更高效。","MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApUboIRwnBzMLC+hFy+b1Fhsy4xacSBoMfasdqMicCrK70hj+mCrUqJ2hGUn2gClNvMGyO+90p9UNhrDGCzpact8CCZCs6t7vQCrnD4PEmEKl62XcCwngrPEKP5gP6sSWDL\u002Fm8cHabF\u002FVn9HlayaS0nePd89XRgSi8gd0oh5qyUbt2s27zY3fpIsd66naVwMLn7CBwDLFKDINnFeRu\u002FsAN3SKYcwl7T1yhpPb99yoSCKA+yYaPaT85UKLOqESk6kUabPsUDDmpkZn6nHHXUQa3\u002FSJUSnn7a\u002F+YOZsSveZg4ei1AMSmXTZH\u002FnB9MuHgyZ0pnI2Bw3LR1YpNcyUoKtZfQIDAQAB","-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDnmf8oIN9HbAUi\nuaNZwKB\u002F3pDPtavwOLpF6PpKJsLts3fOeXHUwbNJzcjrxTe5DKKMNOk5t3cFXPtb\nBH18pEFNi1zHWkN5aZ1BrViCwYpo7FRucie7Dc9sGFeaRZMsRH+piHUkCh5I3QJM\nYCXIbsiTeavWiRCSLsmcQ2KfStSw8NO9+Tio6dTQb7lmSCBEK51zlge8tgvEyoWm\nsXCAlAz0GgzxTrIWo4saJ2ooIkX0ljvmPyTxyZ2+nXzI8RYKA1DZ38yoy4Pa+xXv\nxOa0VV5kidl8s+6F8rk7133boU+44gmKOE8lK5+a3FBkrI1D3rSxFGnQ0WIYC\u002F\u002F0\nB+TRUVFTAgMBAAECggEBAIAN+bKqWkoXQ8+rbNJXW2bYHKF8BZFRDE1TP\u002FB39heP\nv5J+O54za3pHOeyCowjCH63+I2YyNrDUdHYiyW99Mk453BatpdkfuD90JRhHAsx4\nv0ZCAA3A2QsfenBmP7WeOif2ty4yGgSXjonEL5\u002FfAS\u002FpekWoi20ISZkI+SKyMV+S\n+2+aoInmX9KcK1E\u002FM8vA6\u002FaNUOYmGM5hk1342ezQ131\u002FlwrksN4i1cuUdGaXJ8SI\nlmXTavDC1ypQKXtyigorOCW2Y\u002FAzNVjL04Pb\u002FiSsB0yjagSHU69veSLJTf+XCGFt\ne3YfScQDhLblq142RnKVfMQvePaAI3dQ1tOqgUrHuaECgYEA+DzzcmiyxOSicu37\n+Nvwc5d8DETyxBDqF\u002F1GJ6bZLwflZvBOx67K\u002FNlT9Z3L2yNGjrL0w0oQJnOWH0hb\nyW7piXXqnQ2\u002FNkNLzks0goY6zjyI3FHMvDEvdxiyz4PD6H+JeMUSANLnGztR9aFh\nAO1mgtH+TF95mUenytEYcTde4JUCgYEA7tfgcWm8SsctkahZOwbClWPDy69wxUh5\nlLDgwj1+XJ7Pa5MaACUvQV8E6LFA7HHZZCIf2JGOgzXW0UEym46Z6v2OiXOasLKN\nBwtnFytKbzOK7nkkr+U6ympW1eZXJN5A4MZRLQl2gKA8teZL8Gz+F2i0+uVlR0cb\nK7G\u002FdfAS6EcCgYEAoc8hJR9n\u002F\u002F3EgkPsbe\u002F3kXFZ86lx0SnxXYfDlg8lHIn6F5pm\nz7R5Lk3\u002Fc2fTPNmGoXe3IiEB2\u002F6WCXgiFHBOnEKXlp4iWJ2PKT5OURJr\u002FIjq8SoE\n2Vr6RJh93dRW\u002FBM+KdHThWP0LwUAzKrPz0nv+zAkoeXOHoLdtc+MLihYmO0CgYEA\nrp8glmqy4o0rMOI\u002FkttHaoeNQB8duO9bDK4hNYJWH4twpPrguJh3Kzk4UpQ9nmFC\nimY0mFcbNa0oSMd9I6QnvlnxW2ctAuEYIL1ietsIybKKcf4aJ4vV5uXGZQ7KScdA\n8dWsxdu0SyhcGrWscbSONTk1kHYlDO7c255SF\u002F0VJcMCgYB0v6C3bNIPkbAlvFlo\nBTgccv3dBUa2Zo\u002FOJa8xGW\u002FVz3RuL6qTjFRVEYJILVmrSR2fT1w44EET2fGW6cb4\nb5a\u002FDGz9scZwUBwhhMleBPUu2LL6\u002FFkuP2amFFr5uRK8GwbZ5TvrtpNgdBoMhvPb\n1+z709LIwIzFbq5WLW3OEao7MA==\n-----END PRIVATE KEY-----","码客徐的小栈","皖ICP备2024065487号-6","-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAymOTDu1kxxydfrQEgKbe\nne0+i+Bq55TY+BWkkev\u002Ffy9NtSS0Fpbz4g7rscQg6W+4CmYz4VSD6GrC3pXwjRhK\nUGZDHhUnUV9Hf6SLWepxfh8SihdqDbBu6mRKRwyQw7RBYhxLZV+udagchCtSBut1\niQ6H+ozn+3jVUdX\u002F2rGuXBt1WIWbFomPj1MIQuolSORM85nr8cqWyimgECm70imE\nTlRR0s9WkksWoF0WwFdoWWAjxo4LVNdf9\u002FEySIu5I5NuYslwWjb+T87D\u002FNkIoI92\ne1jjAOsPgl5oJ10wLjNjbOMy9+\u002FrzDDz6yAyuKMKj\u002Flhu2D35Cx8ZJDC798vTbZS\nfQIDAQAB\n-----END PUBLIC KEY-----","https:\u002F\u002Fbeian.miit.gov.cn\u002F","K8mX2pQ7vN4rT9yL6cD1wH5sJ3eF0aZB","9021000164659589","https:\u002F\u002Fwww.makexu.com\u002Fapi\u002Forder\u002Fnotify\u002Fwechat",[],{"project":34,"introHtml":73,"deployHtml":7,"tocIntro":74,"tocDeploy":75},{"id":35,"title":36,"projectCode":37,"slug":38,"summary":39,"hot":40,"sortNum":4,"status":41,"price":42,"originalPrice":43,"salesCount":4,"categoryId":44,"categoryName":45,"viewCount":45,"tagIds":46,"tagList":51,"images":64,"resources":65,"videos":71,"createTime":72,"publishTime":72,"isNew":40},"2085957521467805697","演唱会购票系统","SV004","ych","本项目是一套演唱会在线购票系统，采用前后端分离架构，覆盖从用户浏览演唱会、查看票档与座位图、在线选座下单、支付到订单状态流转的完整购票流程。系统围绕**普通用户、管理员**双角色构建：普通用户可搜索演唱会、在线选座、下单购票并管理订单，也可提交反馈建议；管理员负责演唱会、票档、座位、订单、用户、公告、轮播图、反馈的全面管理及平台数据统计，辅助运营决策。",false,3,99,200,"1",null,[47,48,49,50],"2063897838560788481","2063897893363564545","2063897973206335490","2063898057671229442",[52,55,58,61],{"id":47,"name":53,"color":54,"sortNum":45,"status":45},"SpringBoot","#22c55e",{"id":48,"name":56,"color":57,"sortNum":45,"status":45},"Vue","#f59e0b",{"id":49,"name":59,"color":60,"sortNum":45,"status":45},"Redis","#ef4444",{"id":50,"name":62,"color":63,"sortNum":45,"status":45},"MySQL","#06b6d4",[],[66],{"id":67,"projectId":35,"resourceType":68,"name":69,"url":45,"sortNum":4,"fileId":70},"2105572967826632706","source","完整源码+SQL","2085963505091252226",[],"2026-08-08 13:13:23","\u003Ch1 id=\"%E6%BC%94%E5%94%B1%E4%BC%9A%E8%B4%AD%E7%A5%A8%E7%B3%BB%E7%BB%9F-%E2%80%94-%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D%E6%96%87%E6%A1%A3\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E6%BC%94%E5%94%B1%E4%BC%9A%E8%B4%AD%E7%A5%A8%E7%B3%BB%E7%BB%9F-%E2%80%94-%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D%E6%96%87%E6%A1%A3\" aria-hidden=\"true\">\u003C\u002Fa> 演唱会购票系统 — 项目介绍文档\u003C\u002Fh1>\n\u003Ch2 id=\"%E4%B8%80%E3%80%81%E9%A1%B9%E7%9B%AE%E6%A6%82%E8%BF%B0\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%B8%80%E3%80%81%E9%A1%B9%E7%9B%AE%E6%A6%82%E8%BF%B0\" aria-hidden=\"true\">\u003C\u002Fa> 一、项目概述\u003C\u002Fh2>\n\u003Cp>本项目是一套\u003Cstrong>演唱会在线购票系统\u003C\u002Fstrong>，采用前后端分离架构，覆盖从用户浏览演唱会、查看票档与座位图、在线选座下单、支付到订单状态流转的完整购票流程。系统围绕\u003Cstrong>普通用户、管理员\u003C\u002Fstrong>双角色构建：普通用户可搜索演唱会、在线选座、下单购票并管理订单，也可提交反馈建议；管理员负责演唱会、票档、座位、订单、用户、公告、轮播图、反馈的全面管理及平台数据统计，辅助运营决策。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>属性\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>项目名称\u003C\u002Ftd>\n\u003Ctd>演唱会购票系统（Concert Ticket System）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>架构模式\u003C\u002Ftd>\n\u003Ctd>B\u002FS 前后端分离\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>后端技术\u003C\u002Ftd>\n\u003Ctd>Spring Boot 3.5.11 \u002F MyBatis-Plus 3.5.6 \u002F MySQL 8.0 \u002F Redis \u002F JWT\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>前端技术\u003C\u002Ftd>\n\u003Ctd>Vue 3 \u002F Element Plus \u002F Pinia \u002F Axios \u002F ECharts \u002F Vite\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>开发语言\u003C\u002Ftd>\n\u003Ctd>Java 21 \u002F JavaScript（ES6+）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>适用场景\u003C\u002Ftd>\n\u003Ctd>计算机毕设、课程设计、源码学习与二次开发\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"%E4%BA%8C%E3%80%81%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%BA%8C%E3%80%81%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84\" aria-hidden=\"true\">\u003C\u002Fa> 二、技术架构\u003C\u002Fh2>\n\u003Ch3 id=\"2.1-%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.1-%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" aria-hidden=\"true\">\u003C\u002Fa> 2.1 后端技术栈\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>类别\u003C\u002Fth>\n\u003Cth>技术选型\u003C\u002Fth>\n\u003Cth>版本\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>核心框架\u003C\u002Ftd>\n\u003Ctd>Spring Boot\u003C\u002Ftd>\n\u003Ctd>3.5.11\u003C\u002Ftd>\n\u003Ctd>Java 企业级开发框架\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ORM 框架\u003C\u002Ftd>\n\u003Ctd>MyBatis-Plus\u003C\u002Ftd>\n\u003Ctd>3.5.6\u003C\u002Ftd>\n\u003Ctd>增强版 MyBatis，简化 CRUD\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>数据库\u003C\u002Ftd>\n\u003Ctd>MySQL\u003C\u002Ftd>\n\u003Ctd>8.0+\u003C\u002Ftd>\n\u003Ctd>关系型数据库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>缓存\u003C\u002Ftd>\n\u003Ctd>Spring Data Redis\u003C\u002Ftd>\n\u003Ctd>随 Spring Boot 管理\u003C\u002Ftd>\n\u003Ctd>演唱会详情缓存、Lua 原子库存、分布式锁\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>安全认证\u003C\u002Ftd>\n\u003Ctd>java-jwt（JWT）\u003C\u002Ftd>\n\u003Ctd>4.4.0\u003C\u002Ftd>\n\u003Ctd>无状态 Token 认证\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>JSON 处理\u003C\u002Ftd>\n\u003Ctd>fastjson2\u003C\u002Ftd>\n\u003Ctd>2.0.43\u003C\u002Ftd>\n\u003Ctd>高性能 JSON 序列化\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>参数校验\u003C\u002Ftd>\n\u003Ctd>Spring Validation\u003C\u002Ftd>\n\u003Ctd>随 Spring Boot 管理\u003C\u002Ftd>\n\u003Ctd>DTO 参数校验\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>工具库\u003C\u002Ftd>\n\u003Ctd>Lombok\u003C\u002Ftd>\n\u003Ctd>随 Spring Boot 管理\u003C\u002Ftd>\n\u003Ctd>简化样板代码\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>构建工具\u003C\u002Ftd>\n\u003Ctd>Maven\u003C\u002Ftd>\n\u003Ctd>3.8+\u003C\u002Ftd>\n\u003Ctd>依赖管理与项目构建\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"2.2-%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.2-%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88\" aria-hidden=\"true\">\u003C\u002Fa> 2.2 前端技术栈\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>类别\u003C\u002Fth>\n\u003Cth>技术选型\u003C\u002Fth>\n\u003Cth>版本\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>核心框架\u003C\u002Ftd>\n\u003Ctd>Vue 3（Composition API）\u003C\u002Ftd>\n\u003Ctd>3.4+\u003C\u002Ftd>\n\u003Ctd>渐进式前端框架\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>UI 组件库\u003C\u002Ftd>\n\u003Ctd>Element Plus\u003C\u002Ftd>\n\u003Ctd>2.5+\u003C\u002Ftd>\n\u003Ctd>企业级桌面端组件库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>路由\u003C\u002Ftd>\n\u003Ctd>Vue Router\u003C\u002Ftd>\n\u003Ctd>4.2+\u003C\u002Ftd>\n\u003Ctd>单页应用路由管理\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>状态管理\u003C\u002Ftd>\n\u003Ctd>Pinia\u003C\u002Ftd>\n\u003Ctd>2.1+\u003C\u002Ftd>\n\u003Ctd>Vue 官方状态管理库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>HTTP 客户端\u003C\u002Ftd>\n\u003Ctd>Axios\u003C\u002Ftd>\n\u003Ctd>1.6+\u003C\u002Ftd>\n\u003Ctd>基于 Promise 的 HTTP 库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>图表\u003C\u002Ftd>\n\u003Ctd>ECharts \u002F vue-echarts\u003C\u002Ftd>\n\u003Ctd>5.6+ \u002F 6.6+\u003C\u002Ftd>\n\u003Ctd>数据可视化图表库\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>构建工具\u003C\u002Ftd>\n\u003Ctd>Vite\u003C\u002Ftd>\n\u003Ctd>5.0+\u003C\u002Ftd>\n\u003Ctd>下一代前端构建工具\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"2.3-%E6%9E%B6%E6%9E%84%E5%9B%BE\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.3-%E6%9E%B6%E6%9E%84%E5%9B%BE\" aria-hidden=\"true\">\u003C\u002Fa> 2.3 架构图\u003C\u002Fh3>\n\u003Cdiv class=\"code-block-wrapper\">\u003Cdiv class=\"code-block-header\">\u003Cbutton class=\"code-copy-btn\" data-code=\"┌─────────────────────────────────────────────────────────┐\n│                      浏览器（Browser）                    │\n├───────────────────────┬─────────────────────────────────┤\n│   前台页面（Front）     │     后台管理（Admin）             │\n│   localhost:3000       │     localhost:3000\u002Fadmin         │\n│   · 首页\u002F轮播图\u002F公告    │     · 数据统计仪表盘（ECharts）    │\n│   · 演唱会搜索\u002F列表     │     · 演唱会管理（增删改查）        │\n│   · 演唱会详情\u002F票档     │     · 票档管理（票价\u002F库存）        │\n│   · 在线选座\u002F购票       │     · 座位管理（批量生成\u002F统计）     │\n│   · 我的订单\u002F个人中心   │     · 全平台订单管理              │\n│   · 反馈建议\u002F公告列表   │     · 用户管理（启用\u002F禁用）        │\n│                       │     · 反馈\u002F公告\u002F轮播图管理         │\n└───────────────────────┴─────────────────────────────────┘\n                          │  HTTP \u002Fapi\u002F*\n                          ▼\n┌─────────────────────────────────────────────────────────┐\n│              Spring Boot 后端（localhost:8080）            │\n├─────────────┬──────────────┬──────────────┬──────────────┤\n│  Interceptor │  Controller  │   Service    │   Mapper     │\n│  JwtInterceptor│ user\u002Fconcert│   业务逻辑    │  MyBatis-Plus│\n│  @Anonymous  │ order\u002Fseat   │   事务管理    │  XML 自定义SQL│\n│  AdminInterceptor│ admin\u002F公告│   定时任务    │  Redis 缓存  │\n└─────────────┴──────────────┴──────────────┴──────────────┘\n                          │\n                          ▼\n┌─────────────────────────────────────────────────────────┐\n│              MySQL 8.0（concert_ticket_system）          │\n│   8 张数据表：user, concert, seat_type, seat, orders,      │\n│   notice, banner, feedback                                │\n└─────────────────────────────────────────────────────────┘\n\" title=\"复制代码\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode class=\"language-text\">\u003Cspan class=\"line\">\u003Cspan>┌─────────────────────────────────────────────────────────┐\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│                      浏览器（Browser）                    │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├───────────────────────┬─────────────────────────────────┤\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   前台页面（Front）     │     后台管理（Admin）             │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   localhost:3000       │     localhost:3000\u002Fadmin         │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 首页\u002F轮播图\u002F公告    │     · 数据统计仪表盘（ECharts）    │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 演唱会搜索\u002F列表     │     · 演唱会管理（增删改查）        │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 演唱会详情\u002F票档     │     · 票档管理（票价\u002F库存）        │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 在线选座\u002F购票       │     · 座位管理（批量生成\u002F统计）     │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 我的订单\u002F个人中心   │     · 全平台订单管理              │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   · 反馈建议\u002F公告列表   │     · 用户管理（启用\u002F禁用）        │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│                       │     · 反馈\u002F公告\u002F轮播图管理         │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└───────────────────────┴─────────────────────────────────┘\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          │  HTTP \u002Fapi\u002F*\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          ▼\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>┌─────────────────────────────────────────────────────────┐\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│              Spring Boot 后端（localhost:8080）            │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├─────────────┬──────────────┬──────────────┬──────────────┤\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│  Interceptor │  Controller  │   Service    │   Mapper     │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│  JwtInterceptor│ user\u002Fconcert│   业务逻辑    │  MyBatis-Plus│\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│  @Anonymous  │ order\u002Fseat   │   事务管理    │  XML 自定义SQL│\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│  AdminInterceptor│ admin\u002F公告│   定时任务    │  Redis 缓存  │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└─────────────┴──────────────┴──────────────┴──────────────┘\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                          ▼\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>┌─────────────────────────────────────────────────────────┐\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│              MySQL 8.0（concert_ticket_system）          │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   8 张数据表：user, concert, seat_type, seat, orders,      │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   notice, banner, feedback                                │\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└─────────────────────────────────────────────────────────┘\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"2.4-%E5%AE%89%E5%85%A8%E8%AE%BE%E8%AE%A1\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#2.4-%E5%AE%89%E5%85%A8%E8%AE%BE%E8%AE%A1\" aria-hidden=\"true\">\u003C\u002Fa> 2.4 安全设计\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>JWT 认证拦截器\u003C\u002Fstrong>：\u003Ccode>JwtInterceptor\u003C\u002Fcode> 统一拦截 \u003Ccode>\u002Fapi\u002F**\u003C\u002Fcode> 接口，解析 \u003Ccode>Authorization: Bearer &lt;token&gt;\u003C\u002Fcode> 后，将 \u003Ccode>userId \u002F username \u002F role\u003C\u002Fcode> 写入 request 属性供业务层使用，Token 无效或过期返回 401\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>@Anonymous\u003C\u002Fcode> 注解\u003C\u002Fstrong>：标注公开接口（注册、登录、演唱会列表\u002F详情、公告、轮播图、首页统计等），免登录访问，无需维护路径白名单\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>AdminInterceptor\u003C\u002Fcode> 拦截器\u003C\u002Fstrong>：拦截 \u003Ccode>\u002Fapi\u002Fadmin\u002F**\u003C\u002Fcode> 后台接口，校验当前用户角色为管理员（role=1），权限不足返回 403\u003C\u002Fli>\n\u003Cli>\u003Cstrong>密码 MD5 加密\u003C\u002Fstrong>：注册、修改密码时使用 MD5 摘要存储，数据库不保存明文\u003C\u002Fli>\n\u003Cli>\u003Cstrong>逻辑删除\u003C\u002Fstrong>：所有业务表均含 \u003Ccode>deleted\u003C\u002Fcode> 字段，MyBatis-Plus 全局逻辑删除配置，避免物理删除造成数据丢失\u003C\u002Fli>\n\u003Cli>\u003Cstrong>统一响应与异常\u003C\u002Fstrong>：所有接口返回 \u003Ccode>Result&lt;T&gt;\u003C\u002Fcode> 统一结构，\u003Ccode>GlobalExceptionHandler\u003C\u002Fcode> 全局兜底异常并映射为统一错误码\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"%E4%B8%89%E3%80%81%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%B8%89%E3%80%81%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97\" aria-hidden=\"true\">\u003C\u002Fa> 三、功能模块\u003C\u002Fh2>\n\u003Ch3 id=\"3.1-%E5%89%8D%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%EF%BC%89\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#3.1-%E5%89%8D%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%EF%BC%89\" aria-hidden=\"true\">\u003C\u002Fa> 3.1 前台功能（普通用户）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>模块\u003C\u002Fth>\n\u003Cth>功能点\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>首页\u003C\u002Ftd>\n\u003Ctd>轮播图展示、公告滚动、平台统计、限时抢购、正在热售\u003C\u002Ftd>\n\u003Ctd>轮播 Banner、公告类型标识（重要\u002F普通）、演唱会\u002F门票\u002F用户\u002F好评率统计、抢购倒计时、热门演唱会推荐\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>演唱会搜索\u003C\u002Ftd>\n\u003Ctd>关键词、状态筛选\u003C\u002Ftd>\n\u003Ctd>支持按标题\u002F演出者\u002F场馆模糊搜索；按售票状态（未开售\u002F销售中\u002F已售罄）筛选\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>演唱会详情\u003C\u002Ftd>\n\u003Ctd>演出信息、票档选择、座位图展示\u003C\u002Ftd>\n\u003Ctd>展示海报、演出艺人、演出时间、场馆、售票状态、演出介绍，以及票档列表与剩余库存\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>在线选座购票\u003C\u002Ftd>\n\u003Ctd>选择票档、在线选座、自动计价\u003C\u002Ftd>\n\u003Ctd>可视化座位图（可选\u002F已选\u002F已售），支持批量选座，下单即锁定座位并原子扣减票档库存\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>我的订单\u003C\u002Ftd>\n\u003Ctd>订单列表、支付\u002F取消、订单详情\u003C\u002Ftd>\n\u003Ctd>订单全生命周期管理；待支付订单 15 分钟内未支付由定时任务自动取消并释放座位与库存\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>个人中心\u003C\u002Ftd>\n\u003Ctd>修改资料、上传头像、修改密码\u003C\u002Ftd>\n\u003Ctd>昵称\u002F手机号\u002F邮箱\u002F头像可编辑；修改密码需验证原密码\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>反馈建议\u003C\u002Ftd>\n\u003Ctd>提交反馈、查看我的反馈\u003C\u002Ftd>\n\u003Ctd>提交标题与内容，管理员处理后可查看回复\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>公告列表\u003C\u002Ftd>\n\u003Ctd>公告浏览\u003C\u002Ftd>\n\u003Ctd>查看公告列表与详情，重要公告带类型标识与置顶\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"3.2-%E5%90%8E%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E7%AE%A1%E7%90%86%E5%91%98%EF%BC%89\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#3.2-%E5%90%8E%E5%8F%B0%E5%8A%9F%E8%83%BD%EF%BC%88%E7%AE%A1%E7%90%86%E5%91%98%EF%BC%89\" aria-hidden=\"true\">\u003C\u002Fa> 3.2 后台功能（管理员）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>模块\u003C\u002Fth>\n\u003Cth>功能点\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>仪表盘\u003C\u002Ftd>\n\u003Ctd>平台数据统计\u003C\u002Ftd>\n\u003Ctd>ECharts 可视化：总销售额、总订单数、总用户数、总演唱会数、今日订单、今日销售额、最近 7 天订单趋势、订单状态分布、演唱会销售排行\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>演唱会管理\u003C\u002Ftd>\n\u003Ctd>演唱会增删改查\u003C\u002Ftd>\n\u003Ctd>维护标题、演出者、场馆、演出时间、海报、售票状态（未开售\u002F销售中\u002F已售罄\u002F已结束）、限时抢购标记\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>票档管理\u003C\u002Ftd>\n\u003Ctd>票档增删改查\u003C\u002Ftd>\n\u003Ctd>维护票档名称（内场 VIP、看台区等）、票价、总库存、剩余库存、排序\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>座位管理\u003C\u002Ftd>\n\u003Ctd>座位列表、批量生成、清除、统计\u003C\u002Ftd>\n\u003Ctd>按票档批量生成座位（行 × 列），实时统计可售\u002F已售\u002F锁定数量\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>订单管理\u003C\u002Ftd>\n\u003Ctd>全平台订单查询\u003C\u002Ftd>\n\u003Ctd>按订单号、用户 ID、状态多条件分页检索\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>用户管理\u003C\u002Ftd>\n\u003Ctd>用户列表、启用\u002F禁用\u003C\u002Ftd>\n\u003Ctd>按用户名\u002F手机号\u002F角色\u002F状态检索，可禁用异常账号\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>反馈管理\u003C\u002Ftd>\n\u003Ctd>反馈列表、回复、删除\u003C\u002Ftd>\n\u003Ctd>处理用户反馈并回复，反馈处理状态自动流转\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>公告管理\u003C\u002Ftd>\n\u003Ctd>公告增删改查\u003C\u002Ftd>\n\u003Ctd>类型（普通\u002F重要）、置顶、启用\u002F禁用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>轮播图管理\u003C\u002Ftd>\n\u003Ctd>轮播图增删改查\u003C\u002Ftd>\n\u003Ctd>标题、图片、跳转链接、排序、启用\u002F禁用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>个人信息\u003C\u002Ftd>\n\u003Ctd>查看\u002F修改管理员信息\u003C\u002Ftd>\n\u003Ctd>与前台个人中心一致\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"%E5%9B%9B%E3%80%81%E9%A1%B9%E7%9B%AE%E4%BA%AE%E7%82%B9\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E5%9B%9B%E3%80%81%E9%A1%B9%E7%9B%AE%E4%BA%AE%E7%82%B9\" aria-hidden=\"true\">\u003C\u002Fa> 四、项目亮点\u003C\u002Fh2>\n\u003Ch3 id=\"4.1-%E5%8F%8C%E8%A7%92%E8%89%B2%E6%9D%83%E9%99%90%E4%BD%93%E7%B3%BB\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.1-%E5%8F%8C%E8%A7%92%E8%89%B2%E6%9D%83%E9%99%90%E4%BD%93%E7%B3%BB\" aria-hidden=\"true\">\u003C\u002Fa> 4.1 双角色权限体系\u003C\u002Fh3>\n\u003Cp>系统基于 \u003Ccode>role\u003C\u002Fcode> 字段实现**普通用户（0）\u002F 管理员（1）**双角色模型：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>注册接口仅允许注册普通用户，管理员账号通过数据库初始化脚本内置；\u003C\u002Fli>\n\u003Cli>前台与后台页面分离，前端路由守卫（\u003Ccode>requiresAdmin\u003C\u002Fcode>）与后端 \u003Ccode>AdminInterceptor\u003C\u002Fcode> 双重校验，非管理员无法访问后台；\u003C\u002Fli>\n\u003Cli>订单详情等敏感接口额外校验归属（\u003Ccode>userId\u003C\u002Fcode>），杜绝越权访问。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"4.2-%E5%9C%A8%E7%BA%BF%E9%80%89%E5%BA%A7%E8%B4%AD%E7%A5%A8\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.2-%E5%9C%A8%E7%BA%BF%E9%80%89%E5%BA%A7%E8%B4%AD%E7%A5%A8\" aria-hidden=\"true\">\u003C\u002Fa> 4.2 在线选座购票\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>可视化座位图\u003C\u002Fstrong>：前端按排\u002F座渲染座位矩阵，清晰区分可选 \u002F 已选 \u002F 已售三种状态，并展示票档剩余库存；\u003C\u002Fli>\n\u003Cli>\u003Cstrong>座位状态机\u003C\u002Fstrong>：选座下单 → 锁定座位（0 可售 → 2 锁定，防止并发抢占）→ 支付成功确认已售（1）→ 取消或超时自动释放；\u003C\u002Fli>\n\u003Cli>支持批量选座，按所选座位数量自动计算订单总价。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"4.3-%E5%BA%93%E5%AD%98%E9%98%B2%E8%B6%85%E5%8D%96%E4%B8%8E%E8%AE%A2%E5%8D%95%E8%B6%85%E6%97%B6%E8%87%AA%E5%8A%A8%E5%8F%96%E6%B6%88\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.3-%E5%BA%93%E5%AD%98%E9%98%B2%E8%B6%85%E5%8D%96%E4%B8%8E%E8%AE%A2%E5%8D%95%E8%B6%85%E6%97%B6%E8%87%AA%E5%8A%A8%E5%8F%96%E6%B6%88\" aria-hidden=\"true\">\u003C\u002Fa> 4.3 库存防超卖与订单超时自动取消\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>原子扣减\u003C\u002Fstrong>：下单时通过 \u003Ccode>UPDATE seat_type SET remain_quantity = remain_quantity - ? WHERE remain_quantity &gt;= ?\u003C\u002Fcode> 原子扣减票档库存，避免并发下超卖；取消\u002F超时自动恢复库存；\u003C\u002Fli>\n\u003Cli>\u003Cstrong>座位锁定\u003C\u002Fstrong>：下单时按行批量锁定所选座位，防止多个用户同时选中同一座位；\u003C\u002Fli>\n\u003Cli>\u003Cstrong>定时任务\u003C\u002Fstrong>：\u003Ccode>OrderExpireTask\u003C\u002Fcode> 每分钟（cron \u003Ccode>0 * * * * ?\u003C\u002Fcode>）扫描一次，自动取消超时（15 分钟）的待支付订单并恢复库存、释放座位，防止死单占用库存。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"4.4-redis-%E7%BC%93%E5%AD%98%E4%B8%8E%E5%8E%9F%E5%AD%90%E5%8C%96%E5%B7%A5%E5%85%B7\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.4-redis-%E7%BC%93%E5%AD%98%E4%B8%8E%E5%8E%9F%E5%AD%90%E5%8C%96%E5%B7%A5%E5%85%B7\" aria-hidden=\"true\">\u003C\u002Fa> 4.4 Redis 缓存与原子化工具\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>演唱会详情缓存\u003C\u002Fstrong>：演唱会详情接口使用 Redis 缓存（\u003Ccode>concert:detail:{id}\u003C\u002Fcode>，1 小时过期），更新\u002F删除演唱会时主动清除缓存，优化高并发读场景；\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>RedisUtil\u003C\u002Fcode> 工具类\u003C\u002Fstrong>：内置 Lua 脚本实现原子扣减\u002F恢复库存、分布式锁（\u003Ccode>tryLock\u003C\u002Fcode> \u002F \u003Ccode>releaseLock\u003C\u002Fcode>）、防重复提交标记，为后续高并发扩展预留能力。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"4.5-%E9%99%90%E6%97%B6%E6%8A%A2%E8%B4%AD%E4%B8%8E%E5%A4%9A%E7%8A%B6%E6%80%81%E6%BC%94%E5%94%B1%E4%BC%9A\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.5-%E9%99%90%E6%97%B6%E6%8A%A2%E8%B4%AD%E4%B8%8E%E5%A4%9A%E7%8A%B6%E6%80%81%E6%BC%94%E5%94%B1%E4%BC%9A\" aria-hidden=\"true\">\u003C\u002Fa> 4.5 限时抢购与多状态演唱会\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Ccode>concert\u003C\u002Fcode> 表通过 \u003Ccode>flash_sale\u003C\u002Fcode> 字段标记\u003Cstrong>限时抢购\u003C\u002Fstrong>，首页展示抢购专区并带倒计时；\u003C\u002Fli>\n\u003Cli>演唱会状态机：\u003Cstrong>未开售（0）→ 销售中（1）→ 已售罄（2）→ 已结束（3）\u003C\u002Fstrong>，后台可随时调整售票状态。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"4.6-%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E8%BF%90%E8%90%A5\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.6-%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E8%BF%90%E8%90%A5\" aria-hidden=\"true\">\u003C\u002Fa> 4.6 数据可视化运营\u003C\u002Fh3>\n\u003Cp>后台仪表盘集成 ECharts 图表：总销售额、订单量等核心指标卡片，最近 7 天订单趋势折线图、订单状态分布饼图、演唱会销售排行柱状图，辅助运营决策。\u003C\u002Fp>\n\u003Ch3 id=\"4.7-%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83%E6%80%A7\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#4.7-%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83%E6%80%A7\" aria-hidden=\"true\">\u003C\u002Fa> 4.7 代码规范性\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>全局统一异常处理（\u003Ccode>GlobalExceptionHandler\u003C\u002Fcode>），错误信息统一封装；\u003C\u002Fli>\n\u003Cli>统一响应体（\u003Ccode>Result&lt;T&gt;\u003C\u002Fcode>），所有接口返回格式一致；\u003C\u002Fli>\n\u003Cli>所有数据库操作使用 Lambda 表达式构建条件（\u003Ccode>LambdaQueryWrapper\u003C\u002Fcode>），避免字段名硬编码；\u003C\u002Fli>\n\u003Cli>实体继承 \u003Ccode>BaseEntity\u003C\u002Fcode>，公共字段（id、createTime、updateTime、deleted）统一维护；\u003C\u002Fli>\n\u003Cli>状态字段统一数字枚举（演唱会、订单、用户角色\u002F状态），前端直接映射展示状态文本；\u003C\u002Fli>\n\u003Cli>文件上传路径集中配置（\u003Ccode>file.upload-path\u003C\u002Fcode>），默认头像、上传资源走统一静态映射。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"%E4%BA%94%E3%80%81%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84\" tabindex=\"-1\">\u003Ca class=\"header-anchor header-anchor\" href=\"#%E4%BA%94%E3%80%81%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84\" aria-hidden=\"true\">\u003C\u002Fa> 五、项目结构\u003C\u002Fh2>\n\u003Cdiv class=\"code-block-wrapper\">\u003Cdiv class=\"code-block-header\">\u003Cbutton class=\"code-copy-btn\" data-code=\"concert-ticket-system\u002F\n├── db\u002F                                 # 数据库初始化脚本\n│   └── concert_ticket_system.sql       # 建表 + 初始数据脚本\n├── springboot\u002F                         # 后端 Spring Boot 项目\n│   ├── pom.xml\n│   └── src\u002Fmain\u002F\n│       ├── java\u002Fcom\u002Fexample\u002F\n│       │   ├── common\u002F                 # 公共模块\n│       │   │   ├── annotation\u002F        # @Anonymous 注解\n│       │   │   ├── interceptor\u002F       # JwtInterceptor、AdminInterceptor 拦截器\n│       │   │   ├── utils\u002F             # JwtUtil、OrderNoUtil、RedisUtil\n│       │   │   ├── BaseEntity.java    # 基础实体\n│       │   │   └── Result.java        # 统一响应体\n│       │   ├── config\u002F                # WebConfig、RedisConfig、MybatisPlusConfig、\n│       │   │                          # JacksonConfig、GlobalExceptionHandler\n│       │   ├── modules\u002F               # 业务模块\n│       │   │   ├── admin\u002F             # 平台数据统计\n│       │   │   ├── banner\u002F            # 轮播图\n│       │   │   ├── concert\u002F           # 演唱会\n│       │   │   ├── feedback\u002F          # 用户反馈\n│       │   │   ├── notice\u002F            # 公告\n│       │   │   ├── order\u002F             # 订单 + 过期订单定时任务 + 票务领域服务\n│       │   │   ├── seat\u002F              # 票档 + 座位\n│       │   │   └── user\u002F              # 用户（注册\u002F登录\u002F个人中心）\n│       │   └── MainApplication.java   # 启动类\n│       └── resources\u002F\n│           ├── mapper\u002F                # MyBatis XML 自定义 SQL\n│           ├── static\u002Fimages\u002F         # 静态资源（演唱会海报、默认头像）\n│           └── application.yml        # 主配置文件\n├── vue\u002F                               # 前端 Vue 3 项目\n│   ├── package.json\n│   ├── vite.config.js\n│   └── src\u002F\n│       ├── api\u002F                       # API 封装（7 个模块）\n│       ├── components\u002FNavbar.vue      # 前台导航栏\n│       ├── layouts\u002FFrontLayout.vue    # 前台布局（导航 + 页脚）\n│       ├── router\u002Findex.js            # 路由配置（含登录\u002F管理员守卫）\n│       ├── store\u002Fuser.js              # Pinia 用户状态\n│       ├── utils\u002Frequest.js           # Axios 拦截器（认证 + 错误处理）\n│       └── views\u002F\n│           ├── 前台页面                # Home、ConcertList、ConcertDetail、Order、\n│           │                          # OrderDetail、Profile、Feedback、NoticeList、\n│           │                          # Login、Register\n│           └── admin\u002F                 # 后台：Layout、Dashboard、Concert、SeatType、\n│                                      # Seat、Order、User、Feedback、Notice、Banner、Profile\n└── uploads\u002F                           # 文件上传目录\n    └── avatars\u002F                       # 用户头像\n\" title=\"复制代码\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Crect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\u002F>\u003C\u002Fsvg>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode class=\"language-text\">\u003Cspan class=\"line\">\u003Cspan>concert-ticket-system\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├── db\u002F                                 # 数据库初始化脚本\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   └── concert_ticket_system.sql       # 建表 + 初始数据脚本\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├── springboot\u002F                         # 后端 Spring Boot 项目\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   ├── pom.xml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   └── src\u002Fmain\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── java\u002Fcom\u002Fexample\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   ├── common\u002F                 # 公共模块\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── annotation\u002F        # @Anonymous 注解\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── interceptor\u002F       # JwtInterceptor、AdminInterceptor 拦截器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── utils\u002F             # JwtUtil、OrderNoUtil、RedisUtil\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── BaseEntity.java    # 基础实体\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   └── Result.java        # 统一响应体\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   ├── config\u002F                # WebConfig、RedisConfig、MybatisPlusConfig、\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │                          # JacksonConfig、GlobalExceptionHandler\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   ├── modules\u002F               # 业务模块\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── admin\u002F             # 平台数据统计\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── banner\u002F            # 轮播图\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── concert\u002F           # 演唱会\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── feedback\u002F          # 用户反馈\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── notice\u002F            # 公告\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── order\u002F             # 订单 + 过期订单定时任务 + 票务领域服务\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   ├── seat\u002F              # 票档 + 座位\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   │   └── user\u002F              # 用户（注册\u002F登录\u002F个人中心）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       │   └── MainApplication.java   # 启动类\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       └── resources\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│           ├── mapper\u002F                # MyBatis XML 自定义 SQL\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│           ├── static\u002Fimages\u002F         # 静态资源（演唱会海报、默认头像）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│           └── application.yml        # 主配置文件\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>├── vue\u002F                               # 前端 Vue 3 项目\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   ├── package.json\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   ├── vite.config.js\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│   └── src\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── api\u002F                       # API 封装（7 个模块）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── components\u002FNavbar.vue      # 前台导航栏\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── layouts\u002FFrontLayout.vue    # 前台布局（导航 + 页脚）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── router\u002Findex.js            # 路由配置（含登录\u002F管理员守卫）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── store\u002Fuser.js              # Pinia 用户状态\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       ├── utils\u002Frequest.js           # Axios 拦截器（认证 + 错误处理）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│       └── views\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│           ├── 前台页面                # Home、ConcertList、ConcertDetail、Order、\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│           │                          # OrderDetail、Profile、Feedback、NoticeList、\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│           │                          # Login、Register\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│           └── admin\u002F                 # 后台：Layout、Dashboard、Concert、SeatType、\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>│                                      # Seat、Order、User、Feedback、Notice、Banner、Profile\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>└── uploads\u002F                           # 文件上传目录\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    └── avatars\u002F                       # 用户头像\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>",[],[]]