BE_DataBase_Rename.groovy 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import com.yinjie.printerAuthorize.common.api.BusinessExecutor
  2. import com.yinjie.printerAuthorize.common.datas.ERPModule
  3. import com.yinjie.printerAuthorize.common.entity.base.InvokeCallParams
  4. import com.yinjie.printerAuthorize.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. }