Run_1_Script2DataBase.groovy 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Ignore_ReadUTF8File as ReadUTF8File
  2. import com.sdtool.common.api.BusinessExecutor
  3. import com.sdtool.common.api.NoSqlKeysService
  4. import com.sdtool.common.api.SupplierInitService
  5. import com.sdtool.common.datas.RedisKeys
  6. import com.sdtool.common.entity.doc.BusinessScript
  7. import com.sdtool.common.tool.ERPUtils
  8. import com.dySweetFishPlugin.redis.RedisService
  9. import groovy.io.FileType
  10. import org.apache.commons.io.FilenameUtils
  11. import org.apache.logging.log4j.Logger
  12. import org.codehaus.groovy.control.CompilationFailedException
  13. import java.lang.reflect.InvocationTargetException
  14. static def fillBusinessScript(String directoryName, int commonFlag, String appHome, SupplierInitService supplierService, RedisService redisService, NoSqlKeysService keysService, Logger logger, String dataSourceId, long supplierCode) {
  15. File directoryScript = new File(directoryName)
  16. if (!directoryScript.exists()) {
  17. directoryScript.mkdirs()
  18. }
  19. directoryScript.eachFileRecurse(FileType.FILES, { x ->
  20. String code = FilenameUtils.getBaseName(x.getName())
  21. if (code.startsWith("BE_")) {
  22. code = code.substring(3)
  23. if (!redisService.hexists(keysService.getRedisKey(RedisKeys.KEY_BUSINESSSCRIPT, supplierCode), code)) {
  24. //读取脚本信息
  25. try (GroovyClassLoader groovyCl = new GroovyClassLoader(supplierService.getClass().getClassLoader(), ERPUtils.buildERPGroovyConfig())) {
  26. //添加公共commons目录
  27. groovyCl.addClasspath(appHome + File.separator + "conf" + File.separator + "script" + File.separator + 0 + File.separator + "commons")
  28. //添加当前目录
  29. groovyCl.addClasspath(x.getParent().toString())
  30. String fileStr = ReadUTF8File.execute(x.toPath(), false, logger)
  31. Class groovyClass = groovyCl.parseClass(fileStr, "BE_" + code + "_" + supplierCode + ".groovy")
  32. BusinessExecutor p = (BusinessExecutor) groovyClass.getDeclaredConstructor().newInstance()
  33. BusinessScript businessScript = BusinessScript.newBuilder()
  34. .businessName(p.scriptName())
  35. .businessCode(code)
  36. .businessModule(p.module().getValue())
  37. .systemFlag(1)
  38. .commonFlag(commonFlag)
  39. .build()
  40. supplierService.addBusinessScriptLocal(businessScript, dataSourceId, supplierCode)
  41. groovyCl.clearCache()
  42. } catch (IOException | CompilationFailedException | ClassCastException | InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
  43. logger.error(e.getMessage(), e)
  44. }
  45. }
  46. }
  47. })
  48. }
  49. static def createRunnable(String appHome, SupplierInitService supplierService, RedisService redisService, NoSqlKeysService keysService, Logger logger, String dataSourceId, long supplierCode) {
  50. //2024-10-05 tt 脚本分为公共脚本和私有脚本,放在0目录下的为公共脚本,supplierCode下的为私有脚本,均需要写入数据库
  51. logger.info("初始化脚本开始=====" + supplierCode)
  52. String directoryName = appHome + File.separator +
  53. "conf" + File.separator +
  54. "script" + File.separator +
  55. 0 + File.separator
  56. fillBusinessScript(directoryName, 1, appHome, supplierService, redisService, keysService, logger, dataSourceId, supplierCode)
  57. directoryName = appHome + File.separator +
  58. "conf" + File.separator +
  59. "script" + File.separator +
  60. supplierCode + File.separator
  61. fillBusinessScript(directoryName, 0, appHome, supplierService, redisService, keysService, logger, dataSourceId, supplierCode)
  62. logger.info("初始化脚本结束=====" + supplierCode)
  63. }
  64. //groovy最后一个表达式的值为返回
  65. createRunnable(appHome, supplierService, redisService, keysService, logger, dataSourceId, supplierCode)