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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. `quantity` varchar(16) DEFAULT NULL COMMENT '数量文本(吨),最多两位小数,不参与汇总',
  14. `calendar_kind` varchar(16) NOT NULL DEFAULT 'acid' COMMENT '日历类型:acid酸派车 alkali碱派车 other其他',
  15. `tenant_no` varchar(64) NOT NULL COMMENT '租户编号',
  16. `order_num` int DEFAULT NULL COMMENT '排序号',
  17. `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  18. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  19. `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门',
  20. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  21. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  22. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  23. `del_flag` smallint NOT NULL DEFAULT 0 COMMENT '删除标记',
  24. PRIMARY KEY (`id`),
  25. KEY `idx_dispatch_calendar_month` (`tenant_no`,`del_flag`,`dispatch_date`),
  26. KEY `idx_dispatch_calendar_vehicle` (`tenant_no`,`vehicle_id`,`dispatch_date`)
  27. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='手工派车日历';
  28. -- 维护与查看分权;仅向已有日历入口且具有运输计划维护能力的角色授予维护按钮。
  29. -- Web 现有 pl:plan:list 是运输计划编辑入口,没有 add/edit 粒度;
  30. -- 小程序使用明确的 mini:pl:plan:manage。单独日历只读角色不会获得写权限。
  31. -- F 类型为操作权限,不生成路由;visible=1 保证现有权限解析器能读取此权限。
  32. -- 可重复执行,不恢复软删除菜单/授权;不改变已有日历入口及运输计划菜单。
  33. START TRANSACTION;
  34. INSERT INTO sys_menu (
  35. id,menu_name,parent_id,menu_type,path,component,perms,is_frame,visible,status,
  36. tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  37. )
  38. SELECT UUID(),'维护派车日历',leaf.id,'F',NULL,NULL,'pl:dispatch-calendar:manage',
  39. 1,'1','1',leaf.tenant_no,1,'独立手工派车新增修改删除权限','system','',NOW(),NOW(),0
  40. FROM sys_menu leaf
  41. 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'
  42. 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'
  43. 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'
  44. WHERE leaf.perms='pl:dispatch-calendar:list' AND leaf.del_flag=0 AND leaf.status='1' AND leaf.visible='1'
  45. AND root.parent_id='0' AND root.path='/web' AND parent.path='/pl'
  46. AND NOT EXISTS (SELECT 1 FROM sys_menu existing
  47. WHERE existing.tenant_no=leaf.tenant_no AND existing.perms='pl:dispatch-calendar:manage');
  48. INSERT INTO sys_role_menu (
  49. id,role_id,menu_id,tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  50. )
  51. SELECT UUID(),r.id,target.id,r.tenant_no,0,'日历入口与运输计划维护角色交集授权','system','',NOW(),NOW(),0
  52. FROM sys_role r
  53. 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'
  54. 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'
  55. 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'
  56. 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'
  57. JOIN sys_menu target ON target.parent_id=leaf.id AND target.tenant_no=r.tenant_no
  58. AND target.perms='pl:dispatch-calendar:manage' AND target.del_flag=0 AND target.status='1' AND target.visible='1'
  59. WHERE r.del_flag=0 AND r.status='1' AND root.parent_id='0' AND root.path='/web' AND parent.path='/pl'
  60. AND EXISTS (SELECT 1 FROM sys_role_menu calendar_access
  61. WHERE calendar_access.role_id=r.id AND calendar_access.menu_id=leaf.id
  62. AND calendar_access.tenant_no=r.tenant_no AND calendar_access.del_flag=0)
  63. AND EXISTS (
  64. SELECT 1 FROM sys_role_menu source_access JOIN sys_menu source ON source.id=source_access.menu_id
  65. WHERE source_access.role_id=r.id AND source_access.tenant_no=r.tenant_no
  66. 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'
  67. AND source.perms IN ('pl:plan:list','mini:pl:plan:manage')
  68. )
  69. AND NOT EXISTS (SELECT 1 FROM sys_role_menu existing
  70. WHERE existing.role_id=r.id AND existing.menu_id=target.id AND existing.tenant_no=r.tenant_no);
  71. INSERT INTO sys_menu (
  72. id,menu_name,parent_id,menu_type,path,component,perms,is_frame,visible,status,
  73. tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  74. )
  75. SELECT UUID(),'维护派车日历',leaf.id,'F',NULL,NULL,'mini:pl:dispatch-calendar:manage',
  76. 1,'1','1',leaf.tenant_no,1,'独立手工派车新增修改删除权限','system','',NOW(),NOW(),0
  77. FROM sys_menu leaf
  78. 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'
  79. 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'
  80. WHERE leaf.perms='mini:pl:dispatch-calendar:list' AND leaf.del_flag=0 AND leaf.status='1' AND leaf.visible='1'
  81. AND root.parent_id='0' AND root.path='/mini' AND parent.path='/mini/pl'
  82. AND NOT EXISTS (SELECT 1 FROM sys_menu existing
  83. WHERE existing.tenant_no=leaf.tenant_no AND existing.perms='mini:pl:dispatch-calendar:manage');
  84. INSERT INTO sys_role_menu (
  85. id,role_id,menu_id,tenant_no,order_num,remark,create_by,create_dept_id,create_time,update_time,del_flag
  86. )
  87. SELECT UUID(),r.id,target.id,r.tenant_no,0,'日历入口与运输计划维护角色交集授权','system','',NOW(),NOW(),0
  88. FROM sys_role r
  89. 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'
  90. 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'
  91. 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'
  92. JOIN sys_menu target ON target.parent_id=leaf.id AND target.tenant_no=r.tenant_no
  93. AND target.perms='mini:pl:dispatch-calendar:manage' AND target.del_flag=0 AND target.status='1' AND target.visible='1'
  94. WHERE r.del_flag=0 AND r.status='1' AND root.parent_id='0' AND root.path='/mini' AND parent.path='/mini/pl'
  95. AND EXISTS (SELECT 1 FROM sys_role_menu calendar_access
  96. WHERE calendar_access.role_id=r.id AND calendar_access.menu_id=leaf.id
  97. AND calendar_access.tenant_no=r.tenant_no AND calendar_access.del_flag=0)
  98. AND EXISTS (
  99. SELECT 1 FROM sys_role_menu source_access JOIN sys_menu source ON source.id=source_access.menu_id
  100. WHERE source_access.role_id=r.id AND source_access.tenant_no=r.tenant_no
  101. 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'
  102. AND source.perms IN ('pl:plan:list','mini:pl:plan:manage')
  103. )
  104. AND NOT EXISTS (SELECT 1 FROM sys_role_menu existing
  105. WHERE existing.role_id=r.id AND existing.menu_id=target.id AND existing.tenant_no=r.tenant_no);
  106. COMMIT;