| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import Ignore_ReadUTF8File as ReadUTF8File
- import com.sdtool.common.api.BusinessExecutor
- import com.sdtool.common.api.NoSqlKeysService
- import com.sdtool.common.api.SupplierInitService
- import com.sdtool.common.datas.RedisKeys
- import com.sdtool.common.entity.doc.BusinessScript
- import com.sdtool.common.tool.ERPUtils
- import com.dySweetFishPlugin.redis.RedisService
- import groovy.io.FileType
- import org.apache.commons.io.FilenameUtils
- import org.apache.logging.log4j.Logger
- import org.codehaus.groovy.control.CompilationFailedException
- import java.lang.reflect.InvocationTargetException
- static def fillBusinessScript(String directoryName, int commonFlag, String appHome, SupplierInitService supplierService, RedisService redisService, NoSqlKeysService keysService, Logger logger, String dataSourceId, long supplierCode) {
- File directoryScript = new File(directoryName)
- if (!directoryScript.exists()) {
- directoryScript.mkdirs()
- }
- directoryScript.eachFileRecurse(FileType.FILES, { x ->
- String code = FilenameUtils.getBaseName(x.getName())
- if (code.startsWith("BE_")) {
- code = code.substring(3)
- if (!redisService.hexists(keysService.getRedisKey(RedisKeys.KEY_BUSINESSSCRIPT, supplierCode), code)) {
- //读取脚本信息
- try (GroovyClassLoader groovyCl = new GroovyClassLoader(supplierService.getClass().getClassLoader(), ERPUtils.buildERPGroovyConfig())) {
- //添加公共commons目录
- groovyCl.addClasspath(appHome + File.separator + "conf" + File.separator + "script" + File.separator + 0 + File.separator + "commons")
- //添加当前目录
- groovyCl.addClasspath(x.getParent().toString())
- String fileStr = ReadUTF8File.execute(x.toPath(), false, logger)
- Class groovyClass = groovyCl.parseClass(fileStr, "BE_" + code + "_" + supplierCode + ".groovy")
- BusinessExecutor p = (BusinessExecutor) groovyClass.getDeclaredConstructor().newInstance()
- BusinessScript businessScript = BusinessScript.newBuilder()
- .businessName(p.scriptName())
- .businessCode(code)
- .businessModule(p.module().getValue())
- .systemFlag(1)
- .commonFlag(commonFlag)
- .build()
- supplierService.addBusinessScriptLocal(businessScript, dataSourceId, supplierCode)
- groovyCl.clearCache()
- } catch (IOException | CompilationFailedException | ClassCastException | InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
- logger.error(e.getMessage(), e)
- }
- }
- }
- })
- }
- static def createRunnable(String appHome, SupplierInitService supplierService, RedisService redisService, NoSqlKeysService keysService, Logger logger, String dataSourceId, long supplierCode) {
- //2024-10-05 tt 脚本分为公共脚本和私有脚本,放在0目录下的为公共脚本,supplierCode下的为私有脚本,均需要写入数据库
- logger.info("初始化脚本开始=====" + supplierCode)
- String directoryName = appHome + File.separator +
- "conf" + File.separator +
- "script" + File.separator +
- 0 + File.separator
- fillBusinessScript(directoryName, 1, appHome, supplierService, redisService, keysService, logger, dataSourceId, supplierCode)
- directoryName = appHome + File.separator +
- "conf" + File.separator +
- "script" + File.separator +
- supplierCode + File.separator
- fillBusinessScript(directoryName, 0, appHome, supplierService, redisService, keysService, logger, dataSourceId, supplierCode)
- logger.info("初始化脚本结束=====" + supplierCode)
- }
- //groovy最后一个表达式的值为返回
- createRunnable(appHome, supplierService, redisService, keysService, logger, dataSourceId, supplierCode)
|