migrate_20261008_pl_purchase_cert.sql 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. -- 易制毒购买证 / 运输证 / 计划产品行关联(P2)
  2. -- 执行前请确认库为 MySQL 5.7 utf8mb4
  3. CREATE TABLE IF NOT EXISTS `pl_purchase_cert` (
  4. `id` varchar(64) NOT NULL COMMENT '主键UUID',
  5. `cert_no` varchar(64) NOT NULL COMMENT '购买证编号',
  6. `issue_date` date DEFAULT NULL COMMENT '核发日期',
  7. `buyer_name` varchar(200) DEFAULT NULL COMMENT '购买单位或个人',
  8. `buyer_legal` varchar(100) DEFAULT NULL COMMENT '购买方法人',
  9. `buyer_tel` varchar(50) DEFAULT NULL COMMENT '购买方电话',
  10. `buyer_addr` varchar(500) DEFAULT NULL COMMENT '购买方住所',
  11. `seller_name` varchar(200) DEFAULT NULL COMMENT '销售单位',
  12. `seller_legal` varchar(100) DEFAULT NULL COMMENT '销售方法人',
  13. `seller_tel` varchar(50) DEFAULT NULL COMMENT '销售方电话',
  14. `seller_addr` varchar(500) DEFAULT NULL COMMENT '销售方住所',
  15. `product_name` varchar(200) NOT NULL COMMENT '购买物品/品名',
  16. `usage_desc` varchar(200) DEFAULT NULL COMMENT '用途',
  17. `total_qty` decimal(18,3) NOT NULL DEFAULT 0.000 COMMENT '购买证数量',
  18. `unit` varchar(20) NOT NULL DEFAULT '吨' COMMENT '单位',
  19. `valid_times` varchar(50) DEFAULT NULL COMMENT '有效次数(如多次有效)',
  20. `valid_from` date DEFAULT NULL COMMENT '有效开始',
  21. `valid_to` date DEFAULT NULL COMMENT '有效截止',
  22. `police_org` varchar(200) DEFAULT NULL COMMENT '公安机关',
  23. `handler_name` varchar(100) DEFAULT NULL COMMENT '经办人',
  24. `police_tel` varchar(50) DEFAULT NULL COMMENT '机关电话',
  25. `attachment_urls` varchar(2000) DEFAULT NULL COMMENT '附件URL,逗号分隔',
  26. `ocr_result_json` mediumtext NULL COMMENT 'DeepSeek识别结果JSON',
  27. `tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0',
  28. `order_num` int(11) DEFAULT NULL,
  29. `remark` varchar(512) DEFAULT NULL,
  30. `create_by` varchar(64) DEFAULT NULL,
  31. `create_dept_id` varchar(64) NOT NULL DEFAULT '',
  32. `create_time` datetime NOT NULL,
  33. `update_by` varchar(64) DEFAULT NULL,
  34. `update_time` datetime NOT NULL,
  35. `del_flag` smallint(6) NOT NULL DEFAULT 0,
  36. PRIMARY KEY (`id`),
  37. KEY `idx_ppc_tenant_no` (`tenant_no`,`cert_no`),
  38. KEY `idx_ppc_product` (`tenant_no`,`product_name`)
  39. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='易制毒购买备案证明';
  40. CREATE TABLE IF NOT EXISTS `pl_transport_cert` (
  41. `id` varchar(64) NOT NULL,
  42. `purchase_cert_id` varchar(64) NOT NULL COMMENT '主挂购买证ID',
  43. `cert_no` varchar(64) NOT NULL COMMENT '运输证编号',
  44. `issue_date` date DEFAULT NULL,
  45. `owner_name` varchar(200) DEFAULT NULL COMMENT '货主',
  46. `owner_legal` varchar(100) DEFAULT NULL,
  47. `owner_tel` varchar(50) DEFAULT NULL,
  48. `owner_addr` varchar(500) DEFAULT NULL,
  49. `product_name` varchar(200) DEFAULT NULL COMMENT '品名',
  50. `pack_spec` varchar(100) DEFAULT NULL COMMENT '包装',
  51. `permit_cert_nos` varchar(500) DEFAULT NULL COMMENT '购买许可/备案/出口许可证号,逗号分隔',
  52. `carrier_name` varchar(200) DEFAULT NULL COMMENT '运输单位',
  53. `carrier_contact` varchar(200) DEFAULT NULL COMMENT '住所/电话',
  54. `transport_mode` varchar(50) DEFAULT NULL COMMENT '运输方式',
  55. `plate_nos` varchar(500) DEFAULT NULL COMMENT '车号(次),逗号或顿号分隔',
  56. `route_desc` varchar(1000) DEFAULT NULL COMMENT '运输路线',
  57. `consignee_name` varchar(200) DEFAULT NULL COMMENT '收货单位',
  58. `total_qty` decimal(18,3) NOT NULL DEFAULT 0.000 COMMENT '运输证数量',
  59. `unit` varchar(20) NOT NULL DEFAULT '吨',
  60. `valid_times` varchar(50) DEFAULT NULL,
  61. `valid_from` date DEFAULT NULL,
  62. `valid_to` date DEFAULT NULL,
  63. `applicant_unit` varchar(200) DEFAULT NULL,
  64. `police_org` varchar(200) DEFAULT NULL,
  65. `handler_name` varchar(100) DEFAULT NULL,
  66. `police_tel` varchar(50) DEFAULT NULL COMMENT '公安机关联系电话',
  67. `attachment_urls` varchar(2000) DEFAULT NULL,
  68. `ocr_result_json` mediumtext NULL COMMENT 'DeepSeek识别结果JSON',
  69. `tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0',
  70. `order_num` int(11) DEFAULT NULL,
  71. `remark` varchar(512) DEFAULT NULL,
  72. `create_by` varchar(64) DEFAULT NULL,
  73. `create_dept_id` varchar(64) NOT NULL DEFAULT '',
  74. `create_time` datetime NOT NULL,
  75. `update_by` varchar(64) DEFAULT NULL,
  76. `update_time` datetime NOT NULL,
  77. `del_flag` smallint(6) NOT NULL DEFAULT 0,
  78. PRIMARY KEY (`id`),
  79. KEY `idx_ptc_purchase` (`tenant_no`,`purchase_cert_id`),
  80. KEY `idx_ptc_cert_no` (`tenant_no`,`cert_no`)
  81. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='易制毒运输备案证明';
  82. CREATE TABLE IF NOT EXISTS `pl_plan_product_cert_link` (
  83. `id` varchar(64) NOT NULL,
  84. `plan_id` varchar(64) NOT NULL,
  85. `plan_product_id` varchar(64) NOT NULL,
  86. `purchase_cert_id` varchar(64) NOT NULL,
  87. `transport_cert_id` varchar(64) NOT NULL,
  88. `link_status` varchar(20) NOT NULL DEFAULT 'linked' COMMENT 'linked-已关联 occupied-已占用(齐备) voided-已失效',
  89. `occupy_plan_qty` decimal(18,3) DEFAULT NULL COMMENT '齐备时按计划量占用',
  90. `occupy_actual_qty` decimal(18,3) DEFAULT NULL COMMENT '归档实际量(P4填写)',
  91. `tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0',
  92. `order_num` int(11) DEFAULT NULL,
  93. `remark` varchar(512) DEFAULT NULL,
  94. `create_by` varchar(64) DEFAULT NULL,
  95. `create_dept_id` varchar(64) NOT NULL DEFAULT '',
  96. `create_time` datetime NOT NULL,
  97. `update_by` varchar(64) DEFAULT NULL,
  98. `update_time` datetime NOT NULL,
  99. `del_flag` smallint(6) NOT NULL DEFAULT 0,
  100. PRIMARY KEY (`id`),
  101. KEY `idx_ppcl_plan` (`tenant_no`,`plan_id`),
  102. KEY `idx_ppcl_product` (`tenant_no`,`plan_product_id`),
  103. KEY `idx_ppcl_purchase` (`tenant_no`,`purchase_cert_id`,`link_status`),
  104. KEY `idx_ppcl_transport` (`tenant_no`,`transport_cert_id`,`link_status`)
  105. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运输计划易制毒产品行证书关联';
  106. -- ---------------------------------------------------------------------------
  107. -- 菜单:与「危化品证上传」同级挂在 PL_MENU_ROOT 下;按钮权限 edit / confirm
  108. -- 角色授权:复制已有 pl:plan-cert:upload 的角色
  109. -- ---------------------------------------------------------------------------
  110. -- 仅首次插入时后移后续菜单(幂等:已存在 PL_PURCHASE_CERT 则跳过)
  111. UPDATE `sys_menu` m
  112. SET m.`order_num` = m.`order_num` + 1,
  113. m.`update_by` = 'system',
  114. m.`update_time` = NOW()
  115. WHERE m.`parent_id` = 'PL_MENU_ROOT'
  116. AND m.`del_flag` = 0
  117. AND m.`order_num` >= 4
  118. AND m.`id` <> 'PL_PURCHASE_CERT'
  119. AND NOT EXISTS (
  120. SELECT 1 FROM (SELECT `id` FROM `sys_menu` WHERE `id` = 'PL_PURCHASE_CERT' AND `del_flag` = 0) t
  121. );
  122. INSERT INTO `sys_menu` (
  123. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  124. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  125. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  126. ) VALUES
  127. (
  128. 'PL_PURCHASE_CERT', '购买证管理', 'PL_MENU_ROOT', 'C', 'purchase-cert',
  129. 'pl/purchase-cert/index', 'pl:purchase-cert:list',
  130. 1, '1', '1', 'shanxia2.0', 4, '易制毒购买证/运输证管理与待确认计划关联',
  131. 'system', '', NOW(), 'system', NOW(), 0
  132. ),
  133. (
  134. 'PL_PURCHASE_CERT_E', '录入编辑', 'PL_PURCHASE_CERT', 'F', '', '',
  135. 'pl:purchase-cert:edit',
  136. 1, '1', '1', 'shanxia2.0', 1, NULL,
  137. 'system', '', NOW(), 'system', NOW(), 0
  138. ),
  139. (
  140. 'PL_PURCHASE_CERT_C', '确认生效', 'PL_PURCHASE_CERT', 'F', '', '',
  141. 'pl:purchase-cert:confirm',
  142. 1, '1', '1', 'shanxia2.0', 2, NULL,
  143. 'system', '', NOW(), 'system', NOW(), 0
  144. )
  145. ON DUPLICATE KEY UPDATE
  146. `menu_name` = VALUES(`menu_name`),
  147. `parent_id` = VALUES(`parent_id`),
  148. `path` = VALUES(`path`),
  149. `component` = VALUES(`component`),
  150. `perms` = VALUES(`perms`),
  151. `order_num` = VALUES(`order_num`),
  152. `remark` = VALUES(`remark`),
  153. `update_by` = 'system',
  154. `update_time` = NOW(),
  155. `del_flag` = 0;
  156. -- 给已有「危化品证上传」按钮权限的角色同步授权(含祖先 PL_PURCHASE_CERT)
  157. -- id 用角色+菜单确定性拼接,避免 UUID() 主键碰撞
  158. INSERT INTO `sys_role_menu` (
  159. `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`,
  160. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  161. )
  162. SELECT
  163. CONCAT('RM_PC_', LEFT(REPLACE(rm.role_id, '-', ''), 20), '_', m.suffix),
  164. rm.role_id,
  165. m.id,
  166. 'shanxia2.0',
  167. 0,
  168. NULL,
  169. 'system',
  170. '',
  171. NOW(),
  172. 'system',
  173. NOW(),
  174. 0
  175. FROM (
  176. SELECT DISTINCT `role_id`
  177. FROM `sys_role_menu`
  178. WHERE `del_flag` = 0
  179. AND `menu_id` IN ('PL_PLAN_CERT', 'PL_PLAN_CERT_U', 'PL_PLAN_CERT_R')
  180. ) rm
  181. CROSS JOIN (
  182. SELECT 'PL_PURCHASE_CERT' AS id, 'L' AS suffix
  183. UNION ALL SELECT 'PL_PURCHASE_CERT_E', 'E'
  184. UNION ALL SELECT 'PL_PURCHASE_CERT_C', 'C'
  185. ) m
  186. WHERE NOT EXISTS (
  187. SELECT 1 FROM `sys_role_menu` x
  188. WHERE x.`role_id` = rm.`role_id`
  189. AND x.`menu_id` = m.id
  190. AND x.`del_flag` = 0
  191. );