fix-project-application-missing-fields.sql 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. -- 修复项目申报表中缺失字段的问题
  2. -- 日期: 2025-08-01
  3. -- 说明: 修复cw_project_application表中可能为空的必填字段
  4. -- 1. 检查当前有问题的记录
  5. SELECT
  6. id,
  7. application_no,
  8. project_name,
  9. application_reason,
  10. construction_content,
  11. total_performance_goal,
  12. current_year_goal,
  13. department_name,
  14. approval_status
  15. FROM cw_project_application
  16. WHERE application_reason IS NULL
  17. OR application_reason = ''
  18. OR construction_content IS NULL
  19. OR construction_content = ''
  20. OR total_performance_goal IS NULL
  21. OR total_performance_goal = ''
  22. OR current_year_goal IS NULL
  23. OR current_year_goal = ''
  24. OR department_name IS NULL
  25. OR department_name = ''
  26. ORDER BY create_time DESC;
  27. -- 2. 修复application_reason为空的记录
  28. UPDATE cw_project_application
  29. SET application_reason = CONCAT('项目申请原因:', project_name, '项目的设立基于实际业务需求,具有可行性和必要性。')
  30. WHERE (application_reason IS NULL OR application_reason = '')
  31. AND project_name IS NOT NULL;
  32. -- 3. 修复construction_content为空的记录
  33. UPDATE cw_project_application
  34. SET construction_content = CONCAT('项目建设内容:', project_name, '项目的主要建设内容包括相关软硬件建设、人员培训等。')
  35. WHERE (construction_content IS NULL OR construction_content = '')
  36. AND project_name IS NOT NULL;
  37. -- 4. 修复total_performance_goal为空的记录(基于绩效指标自动生成)
  38. UPDATE cw_project_application cpa
  39. LEFT JOIN (
  40. SELECT
  41. application_id,
  42. COUNT(CASE WHEN indicator_type IN ('quantity', 'quality', 'timeliness', 'cost') THEN 1 END) as output_count,
  43. COUNT(CASE WHEN indicator_type IN ('economic', 'social', 'environmental') THEN 1 END) as effect_count,
  44. COUNT(CASE WHEN indicator_type = 'satisfaction' THEN 1 END) as satisfaction_count
  45. FROM cw_performance_indicator
  46. WHERE deleted = 0
  47. GROUP BY application_id
  48. ) pi ON cpa.id = pi.application_id
  49. SET cpa.total_performance_goal = CASE
  50. WHEN pi.application_id IS NOT NULL THEN
  51. CONCAT('通过本项目的实施,预期实现以下绩效目标:产出指标', IFNULL(pi.output_count, 0), '项,效益指标', IFNULL(pi.effect_count, 0), '项,满意度指标', IFNULL(pi.satisfaction_count, 0), '项,确保项目按期完成并达到预期效果。')
  52. ELSE
  53. CONCAT('通过', cpa.project_name, '项目的实施,预期实现既定的绩效目标,确保项目按期完成并达到预期效果。')
  54. END
  55. WHERE (cpa.total_performance_goal IS NULL OR cpa.total_performance_goal = '')
  56. AND cpa.project_name IS NOT NULL;
  57. -- 5. 修复current_year_goal为空的记录
  58. UPDATE cw_project_application
  59. SET current_year_goal = CONCAT(YEAR(CURDATE()), '年度绩效目标:确保项目关键节点按计划推进,各项指标达到设定标准,为项目整体目标的实现奠定坚实基础。')
  60. WHERE (current_year_goal IS NULL OR current_year_goal = '')
  61. AND project_name IS NOT NULL;
  62. -- 6. 修复department_name为空的记录(从sys_dept表获取)
  63. UPDATE cw_project_application cpa
  64. INNER JOIN sys_dept sd ON cpa.department_id = sd.dept_id
  65. SET cpa.department_name = sd.dept_name
  66. WHERE (cpa.department_name IS NULL OR cpa.department_name = '')
  67. AND cpa.department_id IS NOT NULL;
  68. -- 7. 对于仍然缺失department_name的记录,设置默认值
  69. UPDATE cw_project_application
  70. SET department_name = '未指定部门'
  71. WHERE (department_name IS NULL OR department_name = '')
  72. AND applicant_id IS NOT NULL;
  73. -- 8. 验证修复结果
  74. SELECT
  75. COUNT(*) as total_records,
  76. COUNT(CASE WHEN application_reason IS NULL OR application_reason = '' THEN 1 END) as null_application_reason,
  77. COUNT(CASE WHEN construction_content IS NULL OR construction_content = '' THEN 1 END) as null_construction_content,
  78. COUNT(CASE WHEN total_performance_goal IS NULL OR total_performance_goal = '' THEN 1 END) as null_total_performance_goal,
  79. COUNT(CASE WHEN current_year_goal IS NULL OR current_year_goal = '' THEN 1 END) as null_current_year_goal,
  80. COUNT(CASE WHEN department_name IS NULL OR department_name = '' THEN 1 END) as null_department_name
  81. FROM cw_project_application;
  82. -- 9. 显示修复后的记录样例
  83. SELECT
  84. id,
  85. application_no,
  86. project_name,
  87. SUBSTRING(application_reason, 1, 50) as application_reason_preview,
  88. SUBSTRING(construction_content, 1, 50) as construction_content_preview,
  89. SUBSTRING(total_performance_goal, 1, 50) as total_performance_goal_preview,
  90. SUBSTRING(current_year_goal, 1, 50) as current_year_goal_preview,
  91. department_name,
  92. approval_status,
  93. create_time
  94. FROM cw_project_application
  95. ORDER BY create_time DESC
  96. LIMIT 10;