package erpserver // import ( // "net/http" // "management/internal/erpserver/handler" // mw "management/internal/pkg/middleware" // "github.com/go-chi/chi/v5" // "github.com/go-chi/chi/v5/middleware" // ) // func NewRouter(handler handler.IHandler, mw mw.Middleware) *chi.Mux { // r := chi.NewRouter() // r.Use(middleware.RequestID) // r.Use(middleware.RealIP) // // r.Use(middleware.Logger) // r.Use(middleware.Recoverer) // staticServer := http.FileServer(http.Dir("./web/statics/")) // r.Handle("/statics/*", http.StripPrefix("/statics", staticServer)) // uploadServer := http.FileServer(http.Dir("./upload/")) // r.Handle("/upload/*", http.StripPrefix("/upload", uploadServer)) // r.Group(func(r chi.Router) { // r.Use(mw.NoSurf) // CSRF // r.Use(mw.LoadSession) // Session // // capthchaHandler := common.NewCaptchaHandler(handler)) // // r.Get("/captcha", handler.CommonHandler().CaptchaHandler().Captcha) // r.Get("/", handler.SystemHandler().UserHandler().Login) // r.Post("/login", handler.SystemHandler().UserHandler().Login) // r.Get("/logout", handler.SystemHandler().UserHandler().Logout) // r.With(mw.Authorize, mw.Audit).Post("/upload/img", handler.CommonHandler().UploadHandler().Img) // r.With(mw.Authorize, mw.Audit).Post("/upload/file", handler.CommonHandler().UploadHandler().File) // r.With(mw.Authorize, mw.Audit).Post("/upload/mutilfile", handler.CommonHandler().UploadHandler().MutilFiles) // r.With(mw.Authorize).Get("/home.html", handler.SystemHandler().Home) // r.With(mw.Authorize).Get("/dashboard", handler.SystemHandler().Dashboard) // r.With(mw.Authorize).Get("/pear.json", handler.SystemHandler().ConfigHandler().Pear) // r.Route("/system", func(r chi.Router) { // r.Use(mw.Authorize) // r.Route("/config", func(r chi.Router) { // r.Use(mw.Audit) // r.Get("/list", handler.SystemHandler().ConfigHandler().List) // r.Post("/list", handler.SystemHandler().ConfigHandler().List) // r.Get("/add", handler.SystemHandler().ConfigHandler().Add) // r.Get("/edit", handler.SystemHandler().ConfigHandler().Edit) // r.Post("/save", handler.SystemHandler().ConfigHandler().Save) // r.Post("/reset_pear", handler.SystemHandler().ConfigHandler().ResetPear) // r.Post("/refresh", handler.SystemHandler().ConfigHandler().Refresh) // }) // r.Route("/department", func(r chi.Router) { // r.Use(mw.Audit) // r.Get("/list", handler.SystemHandler().DepartmentHandler().List) // r.Post("/list", handler.SystemHandler().DepartmentHandler().List) // r.Get("/add", handler.SystemHandler().DepartmentHandler().Add) // r.Get("/add_children", handler.SystemHandler().DepartmentHandler().AddChildren) // r.Get("/edit", handler.SystemHandler().DepartmentHandler().Edit) // r.Post("/save", handler.SystemHandler().DepartmentHandler().Save) // r.Post("/data", handler.SystemHandler().DepartmentHandler().Data) // r.Post("/refresh", handler.SystemHandler().DepartmentHandler().Refresh) // r.Post("/rebuild_parent_path", handler.SystemHandler().DepartmentHandler().RebuildParentPath) // }) // r.Route("/role", func(r chi.Router) { // r.Use(mw.Audit) // r.Get("/list", handler.SystemHandler().RoleHandler().List) // r.Post("/list", handler.SystemHandler().RoleHandler().List) // r.Get("/add", handler.SystemHandler().RoleHandler().Add) // r.Get("/add_children", handler.SystemHandler().RoleHandler().AddChildren) // r.Get("/edit", handler.SystemHandler().RoleHandler().Edit) // r.Post("/save", handler.SystemHandler().RoleHandler().Save) // r.Post("/data", handler.SystemHandler().RoleHandler().Data) // r.Post("/refresh", handler.SystemHandler().RoleHandler().Refresh) // r.Post("/rebuild_parent_path", handler.SystemHandler().RoleHandler().RebuildParentPath) // r.Post("/refresh_role_menus", handler.SystemHandler().RoleHandler().RefreshRoleMenus) // r.Get("/set_menu", handler.SystemHandler().RoleHandler().SetMenu) // r.Post("/set_menu", handler.SystemHandler().RoleHandler().SetMenu) // }) // r.Route("/user", func(r chi.Router) { // r.Get("/list", handler.SystemHandler().UserHandler().List) // r.Post("/list", handler.SystemHandler().UserHandler().List) // r.Get("/add", handler.SystemHandler().UserHandler().Add) // r.Get("/edit", handler.SystemHandler().UserHandler().Edit) // r.Post("/save", handler.SystemHandler().UserHandler().Save) // r.Get("/profile", handler.SystemHandler().UserHandler().Profile) // r.Post("/data", handler.SystemHandler().UserHandler().Data) // }) // r.Route("/login_log", func(r chi.Router) { // r.Get("/list", handler.SystemHandler().LoginLogHandler().List) // r.Post("/list", handler.SystemHandler().LoginLogHandler().List) // }) // r.Route("/audit_log", func(r chi.Router) { // r.Get("/list", handler.SystemHandler().AuditHandler().List) // r.Post("/list", handler.SystemHandler().AuditHandler().List) // }) // r.Get("/menus", handler.SystemHandler().MenuHandler().Menus) // r.Route("/menu", func(r chi.Router) { // r.Use(mw.Audit) // r.Get("/list", handler.SystemHandler().MenuHandler().List) // r.Post("/list", handler.SystemHandler().MenuHandler().List) // r.Get("/add", handler.SystemHandler().MenuHandler().Add) // r.Get("/add_children", handler.SystemHandler().MenuHandler().AddChildren) // r.Get("/edit", handler.SystemHandler().MenuHandler().Edit) // r.Post("/save", handler.SystemHandler().MenuHandler().Save) // r.Post("/data", handler.SystemHandler().MenuHandler().Data) // r.Post("/refresh_cache", handler.SystemHandler().MenuHandler().Refresh) // }) // r.Route("/category", func(r chi.Router) { // r.Use(mw.Audit) // r.Get("/list", handler.SystemHandler().CategoryHandler().List) // r.Post("/list", handler.SystemHandler().CategoryHandler().List) // r.Get("/add", handler.SystemHandler().CategoryHandler().Add) // r.Get("/add_children", handler.SystemHandler().CategoryHandler().AddChildren) // r.Get("/edit", handler.SystemHandler().CategoryHandler().Edit) // r.Post("/save", handler.SystemHandler().CategoryHandler().Save) // r.Post("/data", handler.SystemHandler().CategoryHandler().Data) // r.Post("/refresh", handler.SystemHandler().CategoryHandler().Refresh) // r.Post("/rebuild_parent_path", handler.SystemHandler().CategoryHandler().RebuildParentPath) // }) // }) // // 客户 // r.Route("/customer", func(r chi.Router) { // r.Use(mw.Authorize) // r.Get("/list", handler.CustomerHandler().List) // r.Post("/list", handler.CustomerHandler().List) // r.Get("/add", handler.CustomerHandler().Add) // r.Get("/edit", handler.CustomerHandler().Edit) // r.Post("/save", handler.CustomerHandler().Save) // }) // // 项目 // r.Route("/project", func(r chi.Router) { // r.Use(mw.Authorize) // r.Get("/list", handler.ProjectHandler().List) // r.Post("/list", handler.ProjectHandler().List) // r.Get("/add", handler.ProjectHandler().Add) // r.Get("/edit", handler.ProjectHandler().Edit) // r.Post("/save", handler.ProjectHandler().Save) // r.Post("/data", handler.ProjectHandler().Data) // r.Get("/dashboard", handler.ProjectHandler().Dashboard) // r.Post("/dashboard", handler.ProjectHandler().Dashboard) // }) // // 项目预算 // r.Route("/budget", func(r chi.Router) { // r.Use(mw.Authorize) // r.Get("/list", handler.BudgetHandler().List) // r.Post("/list", handler.BudgetHandler().List) // r.Get("/add", handler.BudgetHandler().Add) // r.Get("/edit", handler.BudgetHandler().Edit) // r.Post("/save", handler.BudgetHandler().Save) // r.Post("/data", handler.BudgetHandler().Data) // }) // // 回款单 // r.Route("/income", func(r chi.Router) { // r.Use(mw.Authorize) // r.Get("/list", handler.IncomeHandler().List) // r.Post("/list", handler.IncomeHandler().List) // r.Get("/add", handler.IncomeHandler().Add) // r.Get("/edit", handler.IncomeHandler().Edit) // r.Post("/save", handler.IncomeHandler().Save) // }) // // 费用报销单 // r.Route("/expense", func(r chi.Router) { // r.Use(mw.Authorize) // r.Get("/list", handler.ExpenseHandler().List) // r.Post("/list", handler.ExpenseHandler().List) // r.Get("/add", handler.ExpenseHandler().Add) // r.Get("/edit", handler.ExpenseHandler().Edit) // r.Post("/save", handler.ExpenseHandler().Save) // }) // }) // return r // } /* 我现在要设计一个订单号,要求如下: 1、可读性强,但不能被预测:包含:业务标识(订单、支付),便于人工识别。 2、唯一性:确保全局唯一,不能重复(特别是高并发场景下)。 3、值递增:生成的订单号都是递增,可排序。 4、高性能:支持高并发生成,避免阻塞或延迟,设计的时候尽量考虑内存生成,最差也是基于Redis生成。 5、能适应分库分表:订单号中包括分库分表信息,方便路由。 6、分布式部署:以服务的方式对外提供,集群部署避免单点瓶颈, 用golang语言开发 该chat使用中文交流 */