feat:完善规则引擎版本信息

ruoyi_test
sunshine7058 2024-05-08 17:04:12 +08:00
parent db59d7edc8
commit 6935d5556f
44 changed files with 475 additions and 273 deletions

View File

@ -14,11 +14,11 @@ public class ConfigCodeConstants {
/** /**
* *
*/ */
public final static String BASE_FILE_PATH="D:/workspace/gtl-muyu-server/muyu-modules/muyu-rule_engine/muyu-rule_engine-server/src/main/java/com/muyu/ruleEngine/scope/"; public final static String BASE_FILE_PATH="D:\\2108A\\cloud-server_test\\muyu-modules\\muyu-rule_engine\\muyu-rule_engine-common\\src\\main\\java\\com\\muyu\\ruleEngine\\context\\";
/** /**
* *
*/ */
public final static String[] CONFIG_FILE_NAME_ARRAY=new String[]{"TestClass.txt","TaskContextHolder.java","DataSetContextHolder.java","RecordContextHolder.java","DataModelContextHolder.java"}; public final static String[] CONFIG_FILE_NAME_ARRAY=new String[]{"engine_custom.txt","TaskContextHolder.java","DataSetContextHolder.java","RecordContextHolder.java","DataModelContextHolder.java"};
/** /**
* *
*/ */

View File

@ -0,0 +1,44 @@
package com.muyu.ruleEngine.constant;
import lombok.Data;
/**
*
*
* @author HuFangMing
* @ClassName: EngineVersionConstants
* @createTime: 2024/5/7 20:09
*/
public class EngineVersionConstants {
/**
*
*/
public final static String VERSION_CLASS_SUFFIX=EngineVersionConstants.DEFAULT_VERSION_CLASS+EngineVersionConstants.VERSION_SEPARATOR;
/**
*
*/
public final static String VERSION_SEPARATOR="_";
/**
*
*/
public final static String DEFAULT_VERSION_CLASS="engine_custom";
/**
*
*/
public final static String VERSION_CODE="version_code";
/**
*
*/
public final static String DEFAULT_SCOPE_ENGINE="scope_engine";
/**
*
*/
public final static String[] SCOPE_ENGINE=new String[]{"TaskEngine","DataSetEngine","RecordEngine","DataModelEngine"};
}

View File

@ -7,7 +7,7 @@ import lombok.experimental.SuperBuilder;
/** /**
* *
* @ClassName DataModelContextHolder * @ClassName DataModelContextHolder
* @Author * @Author hufangming
*/ */
@Data @Data
@SuperBuilder @SuperBuilder

View File

@ -7,7 +7,7 @@ import lombok.experimental.SuperBuilder;
/** /**
* *
* @ClassName DataSetContextHolder * @ClassName DataSetContextHolder
* @Author * @Author hufangming
*/ */
@Data @Data
@SuperBuilder @SuperBuilder

View File

@ -7,7 +7,7 @@ import lombok.experimental.SuperBuilder;
/** /**
* *
* @ClassName RecordContextHolder * @ClassName RecordContextHolder
* @Author * @Author hufangming
*/ */
@Data @Data
@SuperBuilder @SuperBuilder

View File

@ -1,8 +0,0 @@
import java.util.List;
public class TestClass {
public static String ruleTest(List<String> list) {
}
}

View File

@ -0,0 +1,14 @@
import com.muyu.ruleEngine.engine.scope.scope_engine;
/**
* 自定义引擎
* @ClassName engine_custom
* @Author: hufangming
* @Version: version_code
*/
public class engine_custom extends scope_engine{
@Override
public void execution () {
}
}

View File

@ -30,10 +30,10 @@ import lombok.experimental.SuperBuilder;
@SuperBuilder @SuperBuilder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@TableName("engine_config") @TableName("engine_version")
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value = "EngineConfig", description = "引擎规则配置") @ApiModel(value = "EngineVersion", description = "引擎规则版本")
public class EngineConfig extends BaseEntity { public class EngineVersion extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 编号 */ /** 编号 */
@ -90,8 +90,8 @@ public class EngineConfig extends BaseEntity {
/** /**
* *
*/ */
public static EngineConfig queryBuild( EngineConfigQueryReq engineConfigQueryReq){ public static EngineVersion queryBuild( EngineConfigQueryReq engineConfigQueryReq){
return EngineConfig.builder() return EngineVersion.builder()
.versionCode(engineConfigQueryReq.getVersionCode()) .versionCode(engineConfigQueryReq.getVersionCode())
.ruleContent(engineConfigQueryReq.getRuleContent()) .ruleContent(engineConfigQueryReq.getRuleContent())
.engineMaintenanceId(engineConfigQueryReq.getEngineMaintenanceId()) .engineMaintenanceId(engineConfigQueryReq.getEngineMaintenanceId())
@ -106,8 +106,8 @@ public class EngineConfig extends BaseEntity {
/** /**
* *
*/ */
public static EngineConfig saveBuild(EngineConfigSaveReq engineConfigSaveReq,Supplier<String> createBy){ public static EngineVersion saveBuild(EngineConfigSaveReq engineConfigSaveReq,Supplier<String> createBy){
return EngineConfig.builder() return EngineVersion.builder()
.versionCode(engineConfigSaveReq.getVersionCode()) .versionCode(engineConfigSaveReq.getVersionCode())
.ruleContent(engineConfigSaveReq.getRuleContent()) .ruleContent(engineConfigSaveReq.getRuleContent())
.engineMaintenanceId(engineConfigSaveReq.getEngineMaintenanceId()) .engineMaintenanceId(engineConfigSaveReq.getEngineMaintenanceId())
@ -125,8 +125,8 @@ public class EngineConfig extends BaseEntity {
/** /**
* *
*/ */
public static EngineConfig editBuild(Long id, EngineConfigEditReq engineConfigEditReq, Supplier<String> updateBy){ public static EngineVersion editBuild(Long id, EngineConfigEditReq engineConfigEditReq, Supplier<String> updateBy){
return EngineConfig.builder() return EngineVersion.builder()
.id(id) .id(id)
.versionCode(engineConfigEditReq.getVersionCode()) .versionCode(engineConfigEditReq.getVersionCode())
.ruleContent(engineConfigEditReq.getRuleContent()) .ruleContent(engineConfigEditReq.getRuleContent())

View File

@ -1,6 +1,7 @@
package com.muyu.ruleEngine.domain.req; package com.muyu.ruleEngine.domain.req;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -20,7 +21,15 @@ import lombok.experimental.SuperBuilder;
@SuperBuilder @SuperBuilder
@ApiModel(value = "VersionClassCreateReq", description = "引擎版本") @ApiModel(value = "VersionClassCreateReq", description = "引擎版本")
public class VersionClassCreateReq { public class VersionClassCreateReq {
private String engineCode; /** 引擎编码 */
private String versionCode; @ApiModelProperty(name = "引擎编码", value = "引擎编码", required = true)
private String scope; private String engineCode;
/** 作用域编号 */
@ApiModelProperty(name = "作用域编号", value = "作用域编号", required = true)
private Integer scope;
/** 版本编码 */
@ApiModelProperty(name = "版本编码", value = "版本编码", required = true)
private String versionCode;
} }

View File

@ -18,6 +18,13 @@ import lombok.experimental.SuperBuilder;
@NoArgsConstructor @NoArgsConstructor
@SuperBuilder @SuperBuilder
public class VersionClassCreateResp { public class VersionClassCreateResp {
private String versionClass;
private String ruleContent; /**
*
*/
private String versionClass;
/**
*
*/
private String ruleContent;
} }

View File

@ -3,7 +3,7 @@ package com.muyu.ruleEngine.engine;
/** /**
* *
* @ClassName Engine * @ClassName Engine
* @Author: * @Author: hufangming
* @Date: 2024/5/6 13:48 * @Date: 2024/5/6 13:48
*/ */
public interface Engine<V> { public interface Engine<V> {

View File

@ -3,7 +3,7 @@ package com.muyu.ruleEngine.engine.action;
/** /**
* *
* @ClassName ActionDiscard * @ClassName ActionDiscard
* @Author: * @Author: hufangming
* @Date: 2024/5/6 13:48 * @Date: 2024/5/6 13:48
*/ */
public class ActionDiscard extends RuntimeException{ public class ActionDiscard extends RuntimeException{

View File

@ -6,7 +6,7 @@ import com.muyu.ruleEngine.engine.scope.DataModelEngine;
/** /**
* *
* @ClassName IsNotNullEngineCustom * @ClassName IsNotNullEngineCustom
* @Author: * @Author: hufangming
* @Date: 2024/5/6 13:48 * @Date: 2024/5/6 13:48
*/ */
public class IsNotNullEngineCustom extends DataModelEngine { public class IsNotNullEngineCustom extends DataModelEngine {

View File

@ -8,7 +8,7 @@ import com.muyu.ruleEngine.context.DataModelContextHolder;
/** /**
* *
* @ClassName DataModelEngine * @ClassName DataModelEngine
* @Author: * @Author: hufangming
* @Date: 2024/5/6 13:48 * @Date: 2024/5/6 13:48
*/ */
public abstract class DataModelEngine implements Engine<DataModelProcessModel> { public abstract class DataModelEngine implements Engine<DataModelProcessModel> {

View File

@ -10,7 +10,7 @@ import java.util.List;
/** /**
* *
* @ClassName DataSetEngine * @ClassName DataSetEngine
* @Author: * @Author: hufangming
* @Date: 2024/5/6 13:48 * @Date: 2024/5/6 13:48
*/ */
public abstract class DataSetEngine implements Engine<DataSetProcessModel> { public abstract class DataSetEngine implements Engine<DataSetProcessModel> {

View File

@ -10,7 +10,7 @@ import java.util.List;
/** /**
* *
* @ClassName RecordEngine * @ClassName RecordEngine
* @Author: * @Author: hufangming
* @Date: 2024/5/6 13:48 * @Date: 2024/5/6 13:48
*/ */
public abstract class RecordEngine implements Engine<RecordProcessModel> { public abstract class RecordEngine implements Engine<RecordProcessModel> {

View File

@ -8,7 +8,7 @@ import lombok.experimental.SuperBuilder;
/** /**
* *
* @ClassName DataModel * @ClassName DataModel
* @Author * @Author hufangming
* @Date 2024/5/5 18:48 * @Date 2024/5/5 18:48
*/ */
@Data @Data

View File

@ -8,7 +8,7 @@ import java.util.List;
/** /**
* *
* @ClassName DataSetModel * @ClassName DataSetModel
* @Author * @Author hufangming
* @Date 2024/5/5 18:48 * @Date 2024/5/5 18:48
*/ */
@Data @Data

View File

@ -9,7 +9,7 @@ import java.util.List;
/** /**
* *
* @ClassName RecordModel * @ClassName RecordModel
* @Author * @Author hufangming
* @Date 2024/5/5 18:48 * @Date 2024/5/5 18:48
*/ */
@Data @Data

View File

@ -6,7 +6,7 @@ import lombok.Data;
/** /**
* *
* @ClassName DataModelProcessModel * @ClassName DataModelProcessModel
* @Author * @Author hufangming
* @Date 2024/5/5 18:37 * @Date 2024/5/5 18:37
*/ */
@Data @Data

View File

@ -8,7 +8,7 @@ import lombok.NoArgsConstructor;
/** /**
* *
* @ClassName DataSetProcessModel * @ClassName DataSetProcessModel
* @Author * @Author hufangming
* @Date 2024/5/5 18:37 * @Date 2024/5/5 18:37
*/ */
@Data @Data

View File

@ -7,7 +7,7 @@ import java.util.List;
/** /**
* *
* @ClassName RecordProcessModel * @ClassName RecordProcessModel
* @Author * @Author hufangming
* @Date 2024/5/5 18:37 * @Date 2024/5/5 18:37
*/ */
@Data @Data

View File

@ -12,7 +12,7 @@ import java.util.List;
/** /**
* *
* @ClassName ScopeContextHolderUtil * @ClassName ScopeContextHolderUtil
* @Author * @Author hufangming
* @Date 2024/5/6 20:51 * @Date 2024/5/6 20:51
*/ */

View File

@ -6,7 +6,7 @@ import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType; import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.RequiresPermissions; import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.ruleEngine.domain.EngineConfig; import com.muyu.ruleEngine.domain.EngineVersion;
import com.muyu.ruleEngine.domain.model.TestData; import com.muyu.ruleEngine.domain.model.TestData;
import com.muyu.ruleEngine.domain.req.EngineConfigEditReq; import com.muyu.ruleEngine.domain.req.EngineConfigEditReq;
import com.muyu.ruleEngine.domain.req.EngineConfigQueryReq; import com.muyu.ruleEngine.domain.req.EngineConfigQueryReq;
@ -32,7 +32,7 @@ import org.springframework.web.bind.annotation.RestController;
/** /**
* Controller * Controller
* *
* @author gtl * @author hufangming
* @date 2024-05-02 * @date 2024-05-02
*/ */
@Api(tags = "引擎配置") @Api(tags = "引擎配置")
@ -63,83 +63,7 @@ public class EngineConfigController extends BaseController {
return Result.success(engineConfigService.getScopeInfoById(id)); return Result.success(engineConfigService.getScopeInfoById(id));
} }
/**
*
*/
@ApiOperation("获取引擎规则配置列表")
@RequiresPermissions("ruleEngine:config:list")
@GetMapping("/list")
public Result<List<EngineConfig>> list(EngineConfigQueryReq engineConfigQueryReq) {
return Result.success(engineConfigService.list(EngineConfig.queryBuild(engineConfigQueryReq)));
}
/**
*
*/
@ApiOperation("测试引擎规则配置")
@RequiresPermissions("ruleEngine:config:add")
@PostMapping(value = "/test")
public Result<Object> ruleTest(@RequestBody TestData testData) {
return Result.success(engineConfigService.ruleTest(testData));
}
/**
*
*/
@RequiresPermissions("ruleEngine:config:add")
@Log(title = "引擎规则配置", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("新增引擎规则配置")
public Result<String> add(@RequestBody EngineConfigSaveReq engineConfigSaveReq) {
return toAjax(engineConfigService.save(EngineConfig.saveBuild(engineConfigSaveReq, SecurityUtils::getUsername)));
}
/**
*
*/
@RequiresPermissions("ruleEngine:config:edit")
@Log(title = "引擎规则配置", businessType = BusinessType.UPDATE)
@PutMapping("/{id}")
@ApiOperation("修改引擎规则配置")
public Result<String> edit(@PathVariable Long id, @RequestBody EngineConfigEditReq engineConfigEditReq) {
return toAjax(engineConfigService.updateById(EngineConfig.editBuild(id,engineConfigEditReq, SecurityUtils::getUsername)));
}
/**
*
*/
@RequiresPermissions("ruleEngine:config:remove")
@Log(title = "引擎规则配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
@ApiOperation("删除引擎规则配置")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
public Result<String> remove(@PathVariable List<Long> ids) {
return toAjax(engineConfigService.removeBatchByIds(ids));
}
/**
*
*/
@PutMapping("/activate/{id}")
@RequiresPermissions("ruleEngine:config:activate")
@Log(title = "激活引擎", businessType = BusinessType.UPDATE)
public Result updateActivateStatus(@PathVariable Long id) {
engineConfigService.updateActivateStatus(id);
return Result.success();
}
/**
*
*/
@PutMapping("/close/{id}")
@RequiresPermissions("ruleEngine:config:close")
@Log(title = "关闭引擎" , businessType = BusinessType.UPDATE)
public Result updateCloseStatus(@PathVariable Long id) {
engineConfigService.updateCloseStatus(id);
return Result.success();
}
/** /**
* *
*/ */

View File

@ -30,7 +30,7 @@ import com.muyu.ruleEngine.domain.req.EngineMaintenanceEditReq;
/** /**
* Controller * Controller
* *
* @author gtl * @author hufangming
* @date 2024-05-02 * @date 2024-05-02
*/ */
@Api(tags = "引擎维护") @Api(tags = "引擎维护")
@ -84,7 +84,7 @@ public class EngineMaintenanceController extends BaseController {
@PostMapping @PostMapping
@ApiOperation("新增引擎维护") @ApiOperation("新增引擎维护")
public Result<String> add(@RequestBody EngineMaintenanceSaveReq engineMaintenanceSaveReq) { public Result<String> add(@RequestBody EngineMaintenanceSaveReq engineMaintenanceSaveReq) {
return toAjax(engineMaintenanceService.saveEngineMaintenance(EngineMaintenance.saveBuild(engineMaintenanceSaveReq, SecurityUtils::getUsername))); return toAjax(engineMaintenanceService.save(EngineMaintenance.saveBuild(engineMaintenanceSaveReq, SecurityUtils::getUsername)));
} }
/** /**
@ -97,6 +97,29 @@ public class EngineMaintenanceController extends BaseController {
public Result<String> edit(@PathVariable Long id, @RequestBody EngineMaintenanceEditReq engineMaintenanceEditReq) { public Result<String> edit(@PathVariable Long id, @RequestBody EngineMaintenanceEditReq engineMaintenanceEditReq) {
return toAjax(engineMaintenanceService.updateById(EngineMaintenance.editBuild(id,engineMaintenanceEditReq, SecurityUtils::getUsername))); return toAjax(engineMaintenanceService.updateById(EngineMaintenance.editBuild(id,engineMaintenanceEditReq, SecurityUtils::getUsername)));
} }
/**
*
*/
@PutMapping("/activate/{id}")
// @RequiresPermissions("ruleEngine:config:activate")
@Log(title = "激活引擎", businessType = BusinessType.UPDATE)
public Result updateActivateStatus(@PathVariable Long id) {
engineMaintenanceService.updateActivateStatus(id);
return Result.success();
}
/**
*
*/
@PutMapping("/close/{id}")
// @RequiresPermissions("ruleEngine:config:close")
@Log(title = "关闭引擎" , businessType = BusinessType.UPDATE)
public Result updateCloseStatus(@PathVariable Long id) {
engineMaintenanceService.updateCloseStatus(id);
return Result.success();
}
/** /**
* *

View File

@ -0,0 +1,111 @@
package com.muyu.ruleEngine.controller;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.ruleEngine.domain.EngineVersion;
import com.muyu.ruleEngine.domain.model.TestData;
import com.muyu.ruleEngine.domain.req.EngineConfigEditReq;
import com.muyu.ruleEngine.domain.req.EngineConfigQueryReq;
import com.muyu.ruleEngine.domain.req.EngineConfigSaveReq;
import com.muyu.ruleEngine.domain.req.VersionClassCreateReq;
import com.muyu.ruleEngine.domain.resp.VersionClassCreateResp;
import com.muyu.ruleEngine.service.EngineVersionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Controller
*
* @author HuFangMing
* @ClassName: EngineVersionController
* @createTime: 2024/5/7 21:11
*/
@Api(tags = "引擎版本")
@RestController
@RequestMapping("/version")
public class EngineVersionController extends BaseController {
@Autowired
private EngineVersionService engineVersionService;
/**
*
*/
@ApiOperation("查询引擎规则版本列表")
@RequiresPermissions("ruleEngine:version:list")
@GetMapping("/list")
public Result<List<EngineVersion>> list(EngineConfigQueryReq engineConfigQueryReq) {
return Result.success(engineVersionService.list(EngineVersion.queryBuild(engineConfigQueryReq)));
}
/**
*
*/
@ApiOperation("生成引擎版本类并返回规则模版")
// @RequiresPermissions("ruleEngine:version:query")
@PostMapping(value = "/createVersionClass")
public Result<VersionClassCreateResp> createVersionClass(@RequestBody VersionClassCreateReq req) {
return Result.success(engineVersionService.createVersionClass(req));
}
/**
*
*/
@ApiOperation("测试引擎规则配置")
@RequiresPermissions("ruleEngine:version:add")
@PostMapping(value = "/test")
public Result<Object> ruleTest(@RequestBody TestData testData) {
return Result.success(engineVersionService.ruleTest(testData));
}
/**
*
*/
@RequiresPermissions("ruleEngine:version:add")
@Log(title = "引擎规则配置", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("新增引擎规则配置")
public Result<String> add(@RequestBody EngineConfigSaveReq engineConfigSaveReq) {
return toAjax(engineVersionService.save(EngineVersion.saveBuild(engineConfigSaveReq, SecurityUtils::getUsername)));
}
/**
*
*/
@RequiresPermissions("ruleEngine:version:edit")
@Log(title = "引擎规则配置", businessType = BusinessType.UPDATE)
@PutMapping("/{id}")
@ApiOperation("修改引擎规则配置")
public Result<String> edit(@PathVariable Long id, @RequestBody EngineConfigEditReq engineConfigEditReq) {
return toAjax(engineVersionService.updateById(EngineVersion.editBuild(id,engineConfigEditReq, SecurityUtils::getUsername)));
}
/**
*
*/
@RequiresPermissions("ruleEngine:version:remove")
@Log(title = "引擎规则配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
@ApiOperation("删除引擎规则配置")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
public Result<String> remove(@PathVariable List<Long> ids) {
return toAjax(engineVersionService.removeBatchByIds(ids));
}
}

View File

@ -1,14 +0,0 @@
package com.muyu.ruleEngine.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.ruleEngine.domain.EngineConfig;
/**
* Mapper
*
* @author gtl
* @date 2024-05-02
*/
public interface EngineConfigMapper extends BaseMapper<EngineConfig> {
}

View File

@ -6,7 +6,7 @@ import com.muyu.ruleEngine.domain.EngineMaintenance;
/** /**
* Mapper * Mapper
* *
* @author gtl * @author hufangming
* @date 2024-05-02 * @date 2024-05-02
*/ */
public interface EngineMaintenanceMapper extends BaseMapper<EngineMaintenance> { public interface EngineMaintenanceMapper extends BaseMapper<EngineMaintenance> {

View File

@ -0,0 +1,14 @@
package com.muyu.ruleEngine.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.ruleEngine.domain.EngineVersion;
/**
* Mapper
*
* @author hufangming
* @date 2024-05-02
*/
public interface EngineVersionMapper extends BaseMapper<EngineVersion> {
}

View File

@ -1,7 +1,7 @@
package com.muyu.ruleEngine.service; package com.muyu.ruleEngine.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.ruleEngine.domain.EngineConfig; import com.muyu.ruleEngine.domain.EngineVersion;
import com.muyu.ruleEngine.domain.model.TestData; import com.muyu.ruleEngine.domain.model.TestData;
import com.muyu.ruleEngine.domain.req.VersionClassCreateReq; import com.muyu.ruleEngine.domain.req.VersionClassCreateReq;
import com.muyu.ruleEngine.domain.resp.EngineConfigScopeResp; import com.muyu.ruleEngine.domain.resp.EngineConfigScopeResp;
@ -11,10 +11,10 @@ import java.util.List;
/** /**
* Service * Service
* *
* @author gtl * @author hufangming
* @date 2024-05-02 * @date 2024-05-02
*/ */
public interface EngineConfigService extends IService<EngineConfig> { public interface EngineConfigService {
/** /**
* *
* *
@ -22,13 +22,7 @@ public interface EngineConfigService extends IService<EngineConfig> {
*/ */
public List<EngineConfigScopeResp> getScopeList(); public List<EngineConfigScopeResp> getScopeList();
/**
*
*
* @param engineConfig
* @return
*/
public List<EngineConfig> list(EngineConfig engineConfig);
/** /**
* *
@ -37,15 +31,9 @@ public interface EngineConfigService extends IService<EngineConfig> {
*/ */
EngineConfigScopeResp getScopeInfoById(Integer id); EngineConfigScopeResp getScopeInfoById(Integer id);
/**
*
* @param testData
*/
Object ruleTest(TestData testData);
void updateActivateStatus(Long id);
void updateCloseStatus(Long id);
VersionClassCreateResp createVersionClass(VersionClassCreateReq versionClassCreateReq); VersionClassCreateResp createVersionClass(VersionClassCreateReq versionClassCreateReq);
} }

View File

@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
/** /**
* Service * Service
* *
* @author gtl * @author hufangming
* @date 2024-05-02 * @date 2024-05-02
*/ */
public interface EngineMaintenanceService extends IService<EngineMaintenance> { public interface EngineMaintenanceService extends IService<EngineMaintenance> {
@ -19,12 +19,6 @@ public interface EngineMaintenanceService extends IService<EngineMaintenance> {
*/ */
public List<EngineMaintenance> list(EngineMaintenance engineMaintenance); public List<EngineMaintenance> list(EngineMaintenance engineMaintenance);
/**
*
* @param engineMaintenance
* @return
*/
boolean saveEngineMaintenance(EngineMaintenance engineMaintenance);
/** /**
* *
@ -32,4 +26,16 @@ public interface EngineMaintenanceService extends IService<EngineMaintenance> {
* @return * @return
*/ */
boolean removeBatchEngineMaintenanceByIds(List<Long> ids); boolean removeBatchEngineMaintenanceByIds(List<Long> ids);
/**
*
* @param id
*/
void updateActivateStatus(Long id);
/**
*
* @param id
*/
void updateCloseStatus(Long id);
} }

View File

@ -0,0 +1,40 @@
package com.muyu.ruleEngine.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.ruleEngine.domain.EngineVersion;
import com.muyu.ruleEngine.domain.model.TestData;
import com.muyu.ruleEngine.domain.req.VersionClassCreateReq;
import com.muyu.ruleEngine.domain.resp.VersionClassCreateResp;
import java.util.List;
/**
*
*
* @author HuFangMing
* @ClassName: EngineVersionService
* @createTime: 2024/5/7 21:21
*/
public interface EngineVersionService extends IService<EngineVersion> {
/**
*
*
* @param engineConfig
* @return
*/
public List<EngineVersion> list(EngineVersion engineConfig);
/**
*
* @param testData
*/
Object ruleTest(TestData testData);
/**
*
* @param req
* @return
*/
VersionClassCreateResp createVersionClass(VersionClassCreateReq req);
}

View File

@ -8,13 +8,13 @@ import com.muyu.common.core.exception.ServiceException;
import com.muyu.common.core.utils.ObjUtils; import com.muyu.common.core.utils.ObjUtils;
import com.muyu.ruleEngine.constant.ConfigCodeConstants; import com.muyu.ruleEngine.constant.ConfigCodeConstants;
import com.muyu.ruleEngine.constant.RuleOperationConstants; import com.muyu.ruleEngine.constant.RuleOperationConstants;
import com.muyu.ruleEngine.domain.EngineConfig; import com.muyu.ruleEngine.domain.EngineVersion;
import com.muyu.ruleEngine.domain.model.TestData; import com.muyu.ruleEngine.domain.model.TestData;
import com.muyu.ruleEngine.domain.req.VersionClassCreateReq; import com.muyu.ruleEngine.domain.req.VersionClassCreateReq;
import com.muyu.ruleEngine.domain.resp.EngineConfigScopeResp; import com.muyu.ruleEngine.domain.resp.EngineConfigScopeResp;
import com.muyu.ruleEngine.domain.resp.VersionClassCreateResp; import com.muyu.ruleEngine.domain.resp.VersionClassCreateResp;
import com.muyu.ruleEngine.dynamicLoad.DynamicLoader; import com.muyu.ruleEngine.dynamicLoad.DynamicLoader;
import com.muyu.ruleEngine.mapper.EngineConfigMapper; import com.muyu.ruleEngine.mapper.EngineVersionMapper;
import com.muyu.ruleEngine.service.EngineConfigService; import com.muyu.ruleEngine.service.EngineConfigService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -29,12 +29,12 @@ import java.util.Map;
/** /**
* Service * Service
* *
* @author gtl * @author hufangming
* @date 2024-05-02 * @date 2024-05-02
*/ */
@Slf4j @Slf4j
@Service @Service
public class EngineConfigServiceImpl extends ServiceImpl<EngineConfigMapper, EngineConfig> implements EngineConfigService { public class EngineConfigServiceImpl implements EngineConfigService {
/** /**
* *
@ -62,36 +62,10 @@ public class EngineConfigServiceImpl extends ServiceImpl<EngineConfigMapper, Eng
return list; return list;
} }
/**
*
*
* @param engineConfig
* @return
*/
@Override
public List<EngineConfig> list(EngineConfig engineConfig) {
LambdaQueryWrapper<EngineConfig> queryWrapper = new LambdaQueryWrapper<>();
if (ObjUtils.notNull(engineConfig.getVersionCode())){
queryWrapper.eq(EngineConfig::getVersionCode, engineConfig.getVersionCode());
}
if (ObjUtils.notNull(engineConfig.getRuleContent())){
queryWrapper.eq(EngineConfig::getRuleContent, engineConfig.getRuleContent());
}
if (ObjUtils.notNull(engineConfig.getEngineMaintenanceId())){
queryWrapper.eq(EngineConfig::getEngineMaintenanceId, engineConfig.getEngineMaintenanceId());
}
return list(queryWrapper);
}
/** /**
* *
* @param id * @param id
@ -111,50 +85,6 @@ public class EngineConfigServiceImpl extends ServiceImpl<EngineConfigMapper, Eng
return EngineConfigScopeResp.builder().type(type).name(scope).code(code).build(); return EngineConfigScopeResp.builder().type(type).name(scope).code(code).build();
} }
/**
*
* @param testData
*/
@Override
public Object ruleTest(TestData testData) {
Object invoke=null;
try {
EngineConfig config = this.getById(testData.getId());
String content = config.getRuleContent().replaceAll("\r\n", "");
// 对source进行编译生成class文件存放在Map中这里用bytecode接收
Map<String, byte[]> bytecode = DynamicLoader.compile(RuleOperationConstants.CLASS_NAME + RuleOperationConstants.FILE_SUFFIX,content );
// 加载class文件到虚拟机中然后通过反射执行
@SuppressWarnings("resource")
DynamicLoader.MemoryClassLoader classLoader = new DynamicLoader.MemoryClassLoader(
bytecode);
Class<?> clazz = classLoader.loadClass(RuleOperationConstants.CLASS_NAME);
// 调用ruleTest方法
Method mainMethod = clazz.getDeclaredMethod(RuleOperationConstants.METHOD_NAME, List.class);
invoke = mainMethod.invoke(null, testData.getList());
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("测试失败");
}
return invoke;
}
@Override
public void updateActivateStatus(Long id) {
this.update(new UpdateWrapper<>(){{
eq("engineMaintenanceId",id);
set("isActivate", "Y");
}});
}
@Override
public void updateCloseStatus(Long id) {
this.update(new LambdaUpdateWrapper<>(){{
eq(EngineConfig::getEngineMaintenanceId,id);
set(EngineConfig::getIsActivate,"N");
}});
}
@Override @Override
public VersionClassCreateResp createVersionClass(VersionClassCreateReq versionClassCreateReq) { public VersionClassCreateResp createVersionClass(VersionClassCreateReq versionClassCreateReq) {

View File

@ -1,24 +1,25 @@
package com.muyu.ruleEngine.service.impl; package com.muyu.ruleEngine.service.impl;
import java.util.List; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.utils.ObjUtils; import com.muyu.common.core.utils.ObjUtils;
import com.muyu.ruleEngine.domain.EngineConfig; import com.muyu.ruleEngine.domain.EngineMaintenance;
import com.muyu.ruleEngine.domain.resp.EngineConfigScopeResp; import com.muyu.ruleEngine.domain.EngineVersion;
import com.muyu.ruleEngine.service.EngineConfigService; import com.muyu.ruleEngine.mapper.EngineMaintenanceMapper;
import com.muyu.ruleEngine.service.EngineMaintenanceService;
import com.muyu.ruleEngine.service.EngineVersionService;
import java.util.List;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.muyu.ruleEngine.mapper.EngineMaintenanceMapper;
import com.muyu.ruleEngine.domain.EngineMaintenance;
import com.muyu.ruleEngine.service.EngineMaintenanceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
/** /**
* Service * Service
* *
* @author gtl * @author hufangming
* @date 2024-05-02 * @date 2024-05-02
*/ */
@Slf4j @Slf4j
@ -26,7 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
public class EngineMaintenanceServiceImpl extends ServiceImpl<EngineMaintenanceMapper, EngineMaintenance> implements EngineMaintenanceService { public class EngineMaintenanceServiceImpl extends ServiceImpl<EngineMaintenanceMapper, EngineMaintenance> implements EngineMaintenanceService {
@Autowired @Autowired
private EngineConfigService engineConfigService; private EngineVersionService engineVersionService;
/** /**
* *
@ -62,27 +63,10 @@ public class EngineMaintenanceServiceImpl extends ServiceImpl<EngineMaintenanceM
if (ObjUtils.notNull(engineMaintenance.getStatus())){ if (ObjUtils.notNull(engineMaintenance.getStatus())){
queryWrapper.eq(EngineMaintenance::getStatus, engineMaintenance.getStatus()); queryWrapper.eq(EngineMaintenance::getStatus, engineMaintenance.getStatus());
} }
return list(queryWrapper); return list(queryWrapper);
} }
/**
*
* @param engineMaintenance
* @return
*/
@Override
@Transactional
public boolean saveEngineMaintenance(EngineMaintenance engineMaintenance) {
boolean save = this.save(engineMaintenance);
EngineConfigScopeResp scopeInfo = engineConfigService.getScopeInfoById(0);
engineConfigService.save(EngineConfig.builder().versionCode("1.0").ruleContent(scopeInfo.getCode()).engineMaintenanceId(engineMaintenance.getId()).build());
return save;
}
/** /**
* *
@ -93,13 +77,27 @@ public class EngineMaintenanceServiceImpl extends ServiceImpl<EngineMaintenanceM
@Transactional @Transactional
public boolean removeBatchEngineMaintenanceByIds(List<Long> ids) { public boolean removeBatchEngineMaintenanceByIds(List<Long> ids) {
boolean removed = this.removeBatchByIds(ids); boolean removed = this.removeBatchByIds(ids);
List<EngineConfig> engineConfigs = engineConfigService.list(new LambdaQueryWrapper<EngineConfig>() List<EngineVersion> engineConfigs = engineVersionService.list(new LambdaQueryWrapper<EngineVersion>()
.in(EngineConfig::getEngineMaintenanceId, ids)); .in(EngineVersion::getEngineMaintenanceId, ids));
if(!engineConfigs.isEmpty()){ if(!engineConfigs.isEmpty()){
engineConfigService.removeBatchByIds(engineConfigs.stream().map(EngineConfig::getId).toList()); engineVersionService.removeBatchByIds(engineConfigs.stream().map(EngineVersion::getId).toList());
} }
return removed; return removed;
} }
@Override
public void updateActivateStatus(Long id) {
this.update(new LambdaUpdateWrapper<EngineMaintenance>()
.eq(EngineMaintenance::getId,id)
.set(EngineMaintenance::getIsActivate,"Y"));
}
@Override
public void updateCloseStatus(Long id) {
this.update(new LambdaUpdateWrapper<EngineMaintenance>()
.eq(EngineMaintenance::getId,id)
.set(EngineMaintenance::getIsActivate,"N"));
}
} }

View File

@ -0,0 +1,116 @@
package com.muyu.ruleEngine.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.exception.ServiceException;
import com.muyu.common.core.utils.ObjUtils;
import com.muyu.ruleEngine.constant.EngineVersionConstants;
import com.muyu.ruleEngine.constant.RuleOperationConstants;
import com.muyu.ruleEngine.domain.EngineVersion;
import com.muyu.ruleEngine.domain.model.TestData;
import com.muyu.ruleEngine.domain.req.VersionClassCreateReq;
import com.muyu.ruleEngine.domain.resp.EngineConfigScopeResp;
import com.muyu.ruleEngine.domain.resp.VersionClassCreateResp;
import com.muyu.ruleEngine.dynamicLoad.DynamicLoader;
import com.muyu.ruleEngine.mapper.EngineVersionMapper;
import com.muyu.ruleEngine.service.EngineConfigService;
import com.muyu.ruleEngine.service.EngineVersionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
/**
* Service
*
* @author hufangming
* @date 2024-05-02
*/
@Slf4j
@Service
public class EngineVersionServiceImpl extends ServiceImpl<EngineVersionMapper, EngineVersion> implements EngineVersionService {
@Autowired
private EngineConfigService engineConfigService;
/**
*
*
* @param engineConfig
* @return
*/
@Override
public List<EngineVersion> list(EngineVersion engineConfig) {
LambdaQueryWrapper<EngineVersion> queryWrapper = new LambdaQueryWrapper<>();
if (ObjUtils.notNull(engineConfig.getVersionCode())){
queryWrapper.eq(EngineVersion::getVersionCode, engineConfig.getVersionCode());
}
if (ObjUtils.notNull(engineConfig.getRuleContent())){
queryWrapper.eq(EngineVersion::getRuleContent, engineConfig.getRuleContent());
}
if (ObjUtils.notNull(engineConfig.getEngineMaintenanceId())){
queryWrapper.eq(EngineVersion::getEngineMaintenanceId, engineConfig.getEngineMaintenanceId());
}
return list(queryWrapper);
}
/**
*
* @param testData
*/
@Override
public Object ruleTest(TestData testData) {
Object invoke=null;
try {
EngineVersion config = this.getById(testData.getId());
String content = config.getRuleContent().replaceAll("\r\n", "");
// 对source进行编译生成class文件存放在Map中这里用bytecode接收
Map<String, byte[]> bytecode = DynamicLoader.compile(RuleOperationConstants.CLASS_NAME + RuleOperationConstants.FILE_SUFFIX,content );
// 加载class文件到虚拟机中然后通过反射执行
@SuppressWarnings("resource")
DynamicLoader.MemoryClassLoader classLoader = new DynamicLoader.MemoryClassLoader(
bytecode);
Class<?> clazz = classLoader.loadClass(RuleOperationConstants.CLASS_NAME);
// 调用ruleTest方法
Method mainMethod = clazz.getDeclaredMethod(RuleOperationConstants.METHOD_NAME, List.class);
invoke = mainMethod.invoke(null, testData.getList());
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("测试失败");
}
return invoke;
}
/**
*
* @param req
* @return
*/
@Override
public VersionClassCreateResp createVersionClass(VersionClassCreateReq req) {
String versionClass = EngineVersionConstants.VERSION_CLASS_SUFFIX + req.getEngineCode() + EngineVersionConstants.VERSION_SEPARATOR + req.getVersionCode();
EngineConfigScopeResp scopeResp = engineConfigService.getScopeInfoById(0);
String ruleContent = scopeResp.getCode().replaceAll(EngineVersionConstants.DEFAULT_SCOPE_ENGINE, EngineVersionConstants.SCOPE_ENGINE[req.getScope() - 1])
.replaceAll(EngineVersionConstants.VERSION_CODE, req.getVersionCode())
.replaceAll(EngineVersionConstants.DEFAULT_VERSION_CLASS, versionClass);
return VersionClassCreateResp.builder()
.versionClass(versionClass)
.ruleContent(ruleContent)
.build();
}
}

View File

@ -19,7 +19,7 @@ import java.util.List;
/** /**
* *
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
@RestController @RestController

View File

@ -11,7 +11,7 @@ import lombok.experimental.SuperBuilder;
/** /**
* *
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
@Data @Data

View File

@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
/** /**
* *
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
@Data @Data

View File

@ -8,7 +8,7 @@ import lombok.experimental.SuperBuilder;
/** /**
* *
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
@Data @Data

View File

@ -10,7 +10,7 @@ import java.util.Date;
/** /**
* *
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
@Data @Data

View File

@ -8,7 +8,7 @@ import java.util.List;
/** /**
* mapper * mapper
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
public interface AsUserDeptMapper { public interface AsUserDeptMapper {

View File

@ -9,7 +9,7 @@ import java.util.List;
/** /**
* *
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
public interface IAsUserDeptService { public interface IAsUserDeptService {

View File

@ -15,7 +15,7 @@ import java.util.List;
/** /**
* *
* *
* @author CHX * @author hufangming
* on 2024/4/14 * on 2024/4/14
*/ */
@Service @Service