BE_DataBase_Rename.groovy 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import com.sdtool.common.api.BusinessExecutor
  2. import com.sdtool.common.datas.ERPModule
  3. import com.sdtool.common.entity.base.InvokeCallParams
  4. import com.sdtool.common.entity.base.InvokeCallResult
  5. import com.dySweetFishPlugin.sql.DBService
  6. import com.dySweetFishPlugin.sql.dao.OperatorWait
  7. import com.sweetfish.service.RetResult
  8. import groovy.json.JsonSlurper
  9. import org.apache.logging.log4j.LogManager
  10. import org.apache.logging.log4j.Logger
  11. import org.rex.RMap
  12. import org.rex.db.exception.DBException
  13. import javax.annotation.Resource
  14. /**
  15. * 修改数据库中的表和视图名称,方便创建一个新库出来
  16. * 调用AdminRest的execAdminAsync方法即可
  17. * businessCode = DataBase_Rename
  18. * execParams = {destSource:'erp002', tableSchema:'zmerp20230523', oldSupplier:'1000', newSupplier:'2000'}
  19. * PostMap的地址全部为
  20. * http://192.168.1.24:8000/apis/admin/v1/execAdminAsync?businessCode=DataBase_Rename&execParams={destSource:'erp002', tableSchema:'zmerp20230523', oldSupplier:'1000', newSupplier:'2000'}
  21. * 需要先在rexdb的配置中添加erp002的数据源
  22. * tableSchema对应为数据库
  23. *
  24. */
  25. class BE_DataBase_Rename implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  26. protected final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  27. @Resource
  28. DBService dbService
  29. @Override
  30. String scriptName() {
  31. return "数据库表名视图名批量修改-用于新建一个ERP库"
  32. }
  33. @Override
  34. ERPModule module() {
  35. return ERPModule.DATA_SYNC
  36. }
  37. @Override
  38. OperatorWait getAWait(InvokeCallParams source) {
  39. return OperatorWait.ASNYC
  40. }
  41. @Override
  42. boolean needLogin(InvokeCallParams source) {
  43. return true
  44. }
  45. @Override
  46. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  47. JsonSlurper jsonSlurper = new JsonSlurper()
  48. def invokeData = jsonSlurper.parseText(source.params)
  49. String destSource = invokeData["destSource"] as String
  50. String tableSchema = invokeData["tableSchema"] as String
  51. String oldSupplier = invokeData["oldSupplier"] as String
  52. String newSupplier = invokeData["newSupplier"] as String
  53. List<RMap> tableList = dbService.getMapList(destSource, "select * from information_schema.TABLES where table_schema = '" + tableSchema + "'")
  54. tableList.each { map ->
  55. String tableName = map.getString("tableName")
  56. String newTableName = tableName.replace(oldSupplier, newSupplier)
  57. if (map.getString("tableType").equalsIgnoreCase("base table")) {
  58. String sql = "rename table " + tableName + " to " + newTableName
  59. logger.info(sql)
  60. try {
  61. dbService.update(destSource, sql)
  62. } catch (DBException e) {
  63. logger.error(e.getMessage())
  64. }
  65. } else if (map.getString("tableType").equalsIgnoreCase("view")) {
  66. //视图里面的语句也需要修改
  67. RMap viewMap = dbService.getMap(destSource, "show create table " + tableName)
  68. String viewCreateSql = viewMap.getString("create view")
  69. String sql1 = "drop view if exists " + tableName
  70. logger.info(sql1)
  71. String sql2 = viewCreateSql.replace(oldSupplier, newSupplier)
  72. logger.info(sql2)
  73. try {
  74. dbService.update(destSource, sql1)
  75. dbService.update(destSource, sql2)
  76. } catch (DBException e) {
  77. logger.error(e.getMessage())
  78. }
  79. }
  80. }
  81. return RetResult.successT()
  82. }
  83. }