Run_1_Script2DataBase.groovy 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Ignore_ReadUTF8File as ReadUTF8File
  2. import com.yinjie.printerAuthorize.common.api.BusinessExecutor
  3. import com.yinjie.printerAuthorize.common.api.NoSqlKeysService
  4. import com.yinjie.printerAuthorize.common.api.SupplierInitService
  5. import com.yinjie.printerAuthorize.common.datas.RedisKeys
  6. import com.yinjie.printerAuthorize.common.entity.doc.BusinessScript
  7. import com.yinjie.printerAuthorize.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)