2026-10-26-manual-dispatch-calendar.sql 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. -- 手工派车日历;独立记录,不生成或修改运输计划。MySQL 5.7 / utf8mb4。
  2. -- 同车同日允许多条,一条记录计一车次;不设置车辆+日期唯一约束。
  3. SET NAMES utf8mb4;
  4. CREATE TABLE IF NOT EXISTS `pl_dispatch_calendar` (
  5. `id` varchar(64) NOT NULL COMMENT '主键UUID',
  6. `dispatch_date` date NOT NULL COMMENT '派车日期',
  7. `vehicle_id` varchar(64) NOT NULL COMMENT '车辆ID',
  8. `license_plate` varchar(20) NOT NULL COMMENT '车牌快照',
  9. `product_id` varchar(64) NOT NULL COMMENT '产品ID',
  10. `product_name` varchar(200) NOT NULL COMMENT '产品名称快照',
  11. `origin` varchar(255) NOT NULL COMMENT '始发地',
  12. `destination` varchar(255) NOT NULL COMMENT '目的地',
  13. `tenant_no` varchar(64) NOT NULL COMMENT '租户编号',
  14. `order_num` int DEFAULT NULL COMMENT '排序号',
  15. `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  16. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  17. `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门',
  18. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  19. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  20. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  21. `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '删除标记',
  22. PRIMARY KEY (`id`),
  23. KEY `idx_dispatch_calendar_month` (`tenant_no`,`del_flag`,`dispatch_date`),
  24. KEY `idx_dispatch_calendar_vehicle` (`tenant_no`,`vehicle_id`,`dispatch_date`)
  25. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='手工派车日历';
  26. -- 维护与查看分权;仅向已有日历入口且具有运输计划维护能力的角色授予维护按钮。
  27. -- Web 现有 pl:plan:list 是运输计划编辑入口,没有 add/edit 粒度;
  28. -- 小程序使用明确的 mini:pl:plan:manage。单独日历只读角色不会获得写权限。
  29. -- F 类型为操作权限,不生成路由;visible=1 保证现有权限解析器能读取此权限。
  30. -- 可重复执行,不恢复软删除菜单/授权;不改变已有日历入口及运输计划菜单。
  31. START TRANSACTION;
  32. INSERT INTO sys_menu (
  33. id,menu_name,parent_id,menu_type,path,component,perms,is_frame,visible,status,
  34. tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  35. )
  36. SELECT UUID(),'维护派车日历',leaf.id,'F',NULL,NULL,'pl:dispatch-calendar:manage',
  37. 1,'1','1',leaf.tenant_no,1,'独立手工派车新增修改删除权限','system','',NOW(),NOW(),0
  38. FROM sys_menu leaf
  39. JOIN sys_menu folder ON folder.id=leaf.parent_id AND folder.tenant_no=leaf.tenant_no AND folder.del_flag=0 AND folder.status='1' AND folder.visible='1'
  40. JOIN sys_menu parent ON parent.id=folder.parent_id AND parent.tenant_no=leaf.tenant_no AND parent.del_flag=0 AND parent.status='1' AND parent.visible='1'
  41. JOIN sys_menu root ON root.id=parent.parent_id AND root.tenant_no=leaf.tenant_no AND root.del_flag=0 AND root.status='1' AND root.visible='1'
  42. WHERE leaf.perms='pl:dispatch-calendar:list' AND leaf.del_flag=0 AND leaf.status='1' AND leaf.visible='1'
  43. AND root.parent_id='0' AND root.path='/web' AND parent.path='/pl'
  44. AND NOT EXISTS (SELECT 1 FROM sys_menu existing
  45. WHERE existing.tenant_no=leaf.tenant_no AND existing.perms='pl:dispatch-calendar:manage');
  46. INSERT INTO sys_role_menu (
  47. id,role_id,menu_id,tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  48. )
  49. SELECT UUID(),r.id,target.id,r.tenant_no,0,'日历入口与运输计划维护角色交集授权','system','',NOW(),NOW(),0
  50. FROM sys_role r
  51. JOIN sys_menu leaf ON leaf.perms='pl:dispatch-calendar:list' AND leaf.tenant_no=r.tenant_no AND leaf.del_flag=0 AND leaf.status='1' AND leaf.visible='1'
  52. JOIN sys_menu folder ON folder.id=leaf.parent_id AND folder.tenant_no=leaf.tenant_no AND folder.del_flag=0 AND folder.status='1' AND folder.visible='1'
  53. JOIN sys_menu parent ON parent.id=folder.parent_id AND parent.tenant_no=leaf.tenant_no AND parent.del_flag=0 AND parent.status='1' AND parent.visible='1'
  54. JOIN sys_menu root ON root.id=parent.parent_id AND root.tenant_no=leaf.tenant_no AND root.del_flag=0 AND root.status='1' AND root.visible='1'
  55. JOIN sys_menu target ON target.parent_id=leaf.id AND target.tenant_no=r.tenant_no
  56. AND target.perms='pl:dispatch-calendar:manage' AND target.del_flag=0 AND target.status='1' AND target.visible='1'
  57. WHERE r.del_flag=0 AND r.status='1' AND root.parent_id='0' AND root.path='/web' AND parent.path='/pl'
  58. AND EXISTS (SELECT 1 FROM sys_role_menu calendar_access
  59. WHERE calendar_access.role_id=r.id AND calendar_access.menu_id=leaf.id
  60. AND calendar_access.tenant_no=r.tenant_no AND calendar_access.del_flag=0)
  61. AND EXISTS (
  62. SELECT 1 FROM sys_role_menu source_access JOIN sys_menu source ON source.id=source_access.menu_id
  63. WHERE source_access.role_id=r.id AND source_access.tenant_no=r.tenant_no
  64. AND source.tenant_no=r.tenant_no AND source_access.del_flag=0 AND source.del_flag=0 AND source.status='1' AND source.visible='1'
  65. AND source.perms IN ('pl:plan:list','mini:pl:plan:manage')
  66. )
  67. AND NOT EXISTS (SELECT 1 FROM sys_role_menu existing
  68. WHERE existing.role_id=r.id AND existing.menu_id=target.id AND existing.tenant_no=r.tenant_no);
  69. INSERT INTO sys_menu (
  70. id,menu_name,parent_id,menu_type,path,component,perms,is_frame,visible,status,
  71. tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  72. )
  73. SELECT UUID(),'维护派车日历',leaf.id,'F',NULL,NULL,'mini:pl:dispatch-calendar:manage',
  74. 1,'1','1',leaf.tenant_no,1,'独立手工派车新增修改删除权限','system','',NOW(),NOW(),0
  75. FROM sys_menu leaf
  76. JOIN sys_menu parent ON parent.id=leaf.parent_id AND parent.tenant_no=leaf.tenant_no AND parent.del_flag=0 AND parent.status='1' AND parent.visible='1'
  77. JOIN sys_menu root ON root.id=parent.parent_id AND root.tenant_no=leaf.tenant_no AND root.del_flag=0 AND root.status='1' AND root.visible='1'
  78. WHERE leaf.perms='mini:pl:dispatch-calendar:list' AND leaf.del_flag=0 AND leaf.status='1' AND leaf.visible='1'
  79. AND root.parent_id='0' AND root.path='/mini' AND parent.path='/mini/pl'
  80. AND NOT EXISTS (SELECT 1 FROM sys_menu existing
  81. WHERE existing.tenant_no=leaf.tenant_no AND existing.perms='mini:pl:dispatch-calendar:manage');
  82. INSERT INTO sys_role_menu (
  83. id,role_id,menu_id,tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  84. )
  85. SELECT UUID(),r.id,target.id,r.tenant_no,0,'日历入口与运输计划维护角色交集授权','system','',NOW(),NOW(),0
  86. FROM sys_role r
  87. JOIN sys_menu leaf ON leaf.perms='mini:pl:dispatch-calendar:list' AND leaf.tenant_no=r.tenant_no AND leaf.del_flag=0 AND leaf.status='1' AND leaf.visible='1'
  88. JOIN sys_menu parent ON parent.id=leaf.parent_id AND parent.tenant_no=leaf.tenant_no AND parent.del_flag=0 AND parent.status='1' AND parent.visible='1'
  89. JOIN sys_menu root ON root.id=parent.parent_id AND root.tenant_no=leaf.tenant_no AND root.del_flag=0 AND root.status='1' AND root.visible='1'
  90. JOIN sys_menu target ON target.parent_id=leaf.id AND target.tenant_no=r.tenant_no
  91. AND target.perms='mini:pl:dispatch-calendar:manage' AND target.del_flag=0 AND target.status='1' AND target.visible='1'
  92. WHERE r.del_flag=0 AND r.status='1' AND root.parent_id='0' AND root.path='/mini' AND parent.path='/mini/pl'
  93. AND EXISTS (SELECT 1 FROM sys_role_menu calendar_access
  94. WHERE calendar_access.role_id=r.id AND calendar_access.menu_id=leaf.id
  95. AND calendar_access.tenant_no=r.tenant_no AND calendar_access.del_flag=0)
  96. AND EXISTS (
  97. SELECT 1 FROM sys_role_menu source_access JOIN sys_menu source ON source.id=source_access.menu_id
  98. WHERE source_access.role_id=r.id AND source_access.tenant_no=r.tenant_no
  99. AND source.tenant_no=r.tenant_no AND source_access.del_flag=0 AND source.del_flag=0 AND source.status='1' AND source.visible='1'
  100. AND source.perms IN ('pl:plan:list','mini:pl:plan:manage')
  101. )
  102. AND NOT EXISTS (SELECT 1 FROM sys_role_menu existing
  103. WHERE existing.role_id=r.id AND existing.menu_id=target.id AND existing.tenant_no=r.tenant_no);
  104. COMMIT;