Commit 9a319eb7 by liangkaiping

copy

parent b9a5f749
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud-drools</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-drools-api</artifactId>
<dependencies>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-orm</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-common-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-core</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.yizhi.drools.application.constant;
/**
* @ClassName Constants
* @Description TODO
* @Author shengchenglong
* @DATE 2019-11-29 10:08
* @Version 1.0
*/
public class DroolsConstants {
public static final Integer DELETED_NO = 0;
public static final Integer DELETED_YES = 1;
public static final Integer TEMPLATE_NO = 0;
public static final Integer TEMPLATE_YES = 1;
/**
* 1:内容规则,2:用户规则
*/
public static final Integer RULE_TYPE_CONTENT = 1;
public static final Integer RULE_TYPE_USER = 2;
/**
* 策略时间类型:1:长期,2:自定义
*/
public static final Integer STRATEGY_TIME_LONG = 1;
public static final Integer STRATEGY_TIME_CUSTOM = 2;
/**
* 多条规则之间的逻辑关系
*/
public static final String AND = "and";
public static final String OR = "or";
/**
* 规则item的属性对应值得关系
*/
public static final String RELATION_EQUALS = "equals";
public static final String RELATION_NOT_EQUALS = "notEquals";
public static final String RELATION_CONTAINS = "contains";
public static final String RELATION_NOT_CONTAINS = "notContains";
/**
* 每个业务的标识符
*/
public static final String BUSINESS_NAME_COURSE = "course";
public static final String BUSINESS_NAME_TRAININGPROJECT = "trainingProject";
public static final String BUSINESS_NAME_EXAM = "exam";
public static final String BUSINESS_NAME_ASSIGNMENT = "assignment";
public static final String BUSINESS_NAME_RESEARCH = "research";
public static final String BUSINESS_NAME_LIVE = "live";
public static final String BUSINESS_NAME_CASE = "case";
public static final String BUSINESS_NAME_CASEACTIVITY = "caseActivity";
public static final String BUSINESS_NAME_USER = "account";
public static final String BUSINESS_NAME_ALBUM = "album";
/**
* 每个业务在esearch服务中对应的实体
*/
public static final String BUSINESS_CLASS_NAME_COURSE = "com.fulan.esearch.pojo.biz.Course";
public static final String BUSINESS_CLASS_NAME_TRAININGPROJECT = "com.fulan.esearch.pojo.biz.TrainingProject";
public static final String BUSINESS_CLASS_NAME_EXAM = "com.fulan.esearch.pojo.biz.Exam";
public static final String BUSINESS_CLASS_NAME_ASSIGNMENT = "com.fulan.esearch.pojo.biz.Assignment";
public static final String BUSINESS_CLASS_NAME_RESEARCH = "com.fulan.esearch.pojo.biz.Research";
public static final String BUSINESS_CLASS_NAME_LIVE = "com.fulan.esearch.pojo.biz.Live";
public static final String BUSINESS_CLASS_NAME_CASE = "com.fulan.esearch.pojo.biz.StudentCase";
public static final String BUSINESS_CLASS_NAME_CASEACTIVITY = "com.fulan.esearch.pojo.biz.CaseLibrary";
public static final String BUSINESS_CLASS_NAME_ALBUM = "com.fulan.esearch.pojo.biz.Album";
public static final String BUSINESS_CLASS_NAME_USER = "com.fulan.esearch.pojo.system.Account";
/**
* 根据业务值获取业务在es中的实体类名
*
* @param businessName
* @return
*/
public static String getBusinessClassName(String businessName) {
String businessClassName = null;
switch (businessName) {
case BUSINESS_NAME_COURSE:
businessClassName = BUSINESS_CLASS_NAME_COURSE;
break;
case BUSINESS_NAME_TRAININGPROJECT:
businessClassName = BUSINESS_CLASS_NAME_TRAININGPROJECT;
break;
case BUSINESS_NAME_EXAM:
businessClassName = BUSINESS_CLASS_NAME_EXAM;
break;
case BUSINESS_NAME_ASSIGNMENT:
businessClassName = BUSINESS_CLASS_NAME_ASSIGNMENT;
break;
case BUSINESS_NAME_RESEARCH:
businessClassName = BUSINESS_CLASS_NAME_RESEARCH;
break;
case BUSINESS_NAME_LIVE:
businessClassName = BUSINESS_CLASS_NAME_LIVE;
break;
case BUSINESS_NAME_CASE:
businessClassName = BUSINESS_CLASS_NAME_CASE;
break;
case BUSINESS_NAME_CASEACTIVITY:
businessClassName = BUSINESS_CLASS_NAME_CASEACTIVITY;
break;
case BUSINESS_NAME_USER:
businessClassName = BUSINESS_CLASS_NAME_USER;
break;
case BUSINESS_NAME_ALBUM:
businessClassName = BUSINESS_CLASS_NAME_ALBUM;
break;
default:
break;
}
return businessClassName;
}
/**
* 根据业务值获取业务的中文名
*
* @param businessName
* @return
*/
public static String getBusinessCHN(String businessName) {
String nameCHN = null;
switch (businessName) {
case BUSINESS_NAME_COURSE:
nameCHN = "课程";
break;
case BUSINESS_NAME_TRAININGPROJECT:
nameCHN = "培训项目";
break;
case BUSINESS_NAME_EXAM:
nameCHN = "考试";
break;
case BUSINESS_NAME_ASSIGNMENT:
nameCHN = "作业";
break;
case BUSINESS_NAME_RESEARCH:
nameCHN = "调研";
break;
case BUSINESS_NAME_LIVE:
nameCHN = "直播";
break;
case BUSINESS_NAME_CASE:
nameCHN = "作品";
break;
case BUSINESS_NAME_CASEACTIVITY:
nameCHN = "原创活动";
break;
case BUSINESS_NAME_USER:
nameCHN = "用户";
break;
case BUSINESS_NAME_ALBUM:
nameCHN = "专辑";
break;
default:
break;
}
return nameCHN;
}
}
package com.yizhi.drools.application.drools.core;
/**
* @ClassName Carrier
* @Description 数据载体,
* O:origin-源数据
* C:condition-条件数据(判断依据)
* R:result-结果数据
* @Author shengchenglong
* @DATE 2019-11-19 15:11
* @Version 1.0
*/
public interface Carrier<Origin, Condition, Result> {
Condition getCondition();
Origin getOrigin();
Result getResult();
}
package com.yizhi.drools.application.feign;
import com.yizhi.drools.application.vo.drools.AccountVo4ManageParam;
import com.yizhi.drools.application.vo.drools.AccountVo4ManageResponse;
import com.yizhi.drools.application.vo.drools.BusinessVo4PortalParam;
import com.yizhi.drools.application.vo.drools.BusinessVo4PortalResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @ClassName RecommendClient
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-31 15:16
* @Version 1.0
*/
@FeignClient(value = "esearch", contextId = "RecommendClient")
public interface RecommendClient {
@PostMapping("/recommend/recommend4Manage")
BusinessVo4PortalResponse recommend4Manage(@RequestBody BusinessVo4PortalParam param);
@PostMapping("/recommend/recommend4Portal")
BusinessVo4PortalResponse recommend4Portal(@RequestBody BusinessVo4PortalParam param);
@PostMapping("/recommend/recommend4ManageAccount")
AccountVo4ManageResponse recommend4ManageAccount(@RequestBody AccountVo4ManageParam param);
}
package com.yizhi.drools.application.feign;
import com.yizhi.drools.application.vo.drools.BusinessVo4PortalParam;
import com.yizhi.drools.application.vo.drools.BusinessVo4PortalResponse;
import com.yizhi.drools.application.vo.manage.StrategyPageVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
/**
* @ClassName RecommendStrategyClient
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-26 16:13
* @Version 1.0
*/
@FeignClient(name = "rules", contextId = "RecommendStrategyClient")
public interface RecommendStrategyClient {
@PostMapping("/manage/recommendStrategy/list4PortalConfig")
Map<Long, StrategyPageVo> list4PortalConfig(@RequestBody List<Long> strategyIds);
@PostMapping("/manage/recommendStrategy/businessVo4Portal")
BusinessVo4PortalResponse businessVo4Portal(@RequestBody BusinessVo4PortalParam param);
@PostMapping("/manage/recommendStrategy/businessVo4Manage")
BusinessVo4PortalResponse businessVo4Manage(@RequestBody BusinessVo4PortalParam param);
}
//package com.fulan.drools.validator.constraint;
//
//import javax.validation.Constraint;
//import javax.validation.Payload;
//import java.lang.annotation.ElementType;
//import java.lang.annotation.Retention;
//import java.lang.annotation.RetentionPolicy;
//import java.lang.annotation.Target;
//
///**
// * @ClassName StrategyTime
// * @Description TODO
// * @Author shengchenglong
// * @DATE 2019-12-05 11:19
// * @Version 1.0
// */
//@Target(ElementType.FIELD)
//@Retention(RetentionPolicy.RUNTIME)
//@Constraint(validatedBy = StrategyTimeConstraintValidator.class)
//public @interface StrategyTime {
//
// String message() default "";
//
// Class<?>[] groups() default { };
//
// Class<? extends Payload>[] payload() default { };
//
//}
//package com.fulan.drools.validator.constraint;
//
//import javax.validation.ConstraintValidator;
//import javax.validation.ConstraintValidatorContext;
//import java.util.Date;
//
///**
// * @ClassName StrategyTimeConstraintValidator
// * @Description TODO
// * @Author shengchenglong
// * @DATE 2019-12-05 11:19
// * @Version 1.0
// */
//public class StrategyTimeConstraintValidator implements ConstraintValidator<StrategyTime, Date> {
//
// @Override
// public void initialize(StrategyTime constraintAnnotation) {
//
// }
//
// @Override
// public boolean isValid(Date time, ConstraintValidatorContext context) {
//
//
// return false;
// }
//}
package com.yizhi.drools.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong
* @since 2019-11-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendRuleItemVo")
@TableName("recommend_rule_item")
public class RecommendRuleItemVo extends Model<RecommendRuleItemVo> {
private static final long serialVersionUID = 1L;
private Long id;
@TableField("rule_id")
private Long ruleId;
@ApiModelProperty(value = "搜索对象类型名")
@TableField("class_name")
private String className;
@ApiModelProperty(value = "business 类型")
@TableField("business")
private String business;
@ApiModelProperty(value = "搜索属性名称")
@TableField("property_name")
private String propertyName;
@ApiModelProperty(value = "1:contains; 2:notContains; 3:equals; 4:notEquals;")
private String relation;
@ApiModelProperty(value = "搜索值(这里注意:contains类似关键词,equals可能是一个指定的id)")
@TableField("target_val")
private String targetVal;
@ApiModelProperty(value = "target_val 为id时,记录name,回显用")
private String name;
@ApiModelProperty(value = "1:内容规则,2:用户规则")
private Integer type;
@ApiModelProperty(value = "and or(与上一条规则详情的逻辑关系,第一条、仅有一条、都为and)")
@TableField("and_or")
private String andOr;
@TableLogic
@ApiModelProperty(value = "1:已删除,0未删除")
private Integer deleted;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "组织id")
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.vo.domain;
//package com.fulan.drools.domain;
//
//import com.baomidou.mybatisplus.activerecord.Model;
//import com.baomidou.mybatisplus.annotations.TableField;
//import com.baomidou.mybatisplus.annotations.TableName;
//import com.baomidou.mybatisplus.enums.FieldFill;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.Data;
//import lombok.EqualsAndHashCode;
//
//import java.io.Serializable;
//import java.util.Date;
//
//
///**
// * <p>
// *
// * </p>
// *
// * @author shengchenglong123
// * @since 2019-11-28
// */
//
//@Data
//@EqualsAndHashCode(callSuper = true)
//@Api(tags = "RecommendRuleRuleItem", description = "")
//@TableName("recommend_rule_rule_item")
//public class RecommendRuleRuleItem extends Model<RecommendRuleRuleItem> {
//
// private static final long serialVersionUID = 1L;
//
//
// @ApiModelProperty(value = "主键id")
// private Long id;
//
// @TableField("rule_id")
// private Long ruleId;
//
// @TableField("rule_item_id")
// private Long ruleItemId;
//
// @ApiModelProperty(value = "and or(与上一条规则详情的逻辑关系,第一条、仅有一条、都为and)")
// @TableField("and_or")
// private String andOr;
//
// @ApiModelProperty(value = "排序")
// private Integer sort;
//
// private Integer deleted;
//
// @ApiModelProperty(value = "创建者id")
// @TableField(value = "create_by_id", fill = FieldFill.INSERT)
// private Long createById;
//
// @ApiModelProperty(value = "创建者名称")
// @TableField(value = "create_by_name", fill = FieldFill.INSERT)
// private String createByName;
//
// @ApiModelProperty(value = "创建时间")
// @TableField(value = "create_time", fill = FieldFill.INSERT)
// private Date createTime;
//
// @ApiModelProperty(value = "更新者id")
// @TableField(value = "update_by_id", fill = FieldFill.UPDATE)
// private Long updateById;
//
// @ApiModelProperty(value = "修改者名称")
// @TableField(value = "update_by_name", fill = FieldFill.UPDATE)
// private String updateByName;
//
// @ApiModelProperty(value = "修改时间")
// @TableField(value = "update_time", fill = FieldFill.UPDATE)
// private Date updateTime;
//
//
// @Override
// protected Serializable pkVal() {
// return this.id;
// }
//
//}
package com.yizhi.drools.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong
* @since 2019-11-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendRuleVo")
@TableName("recommend_rule")
public class RecommendRuleVo extends Model<RecommendRuleVo> {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty("规则名称")
private String name;
@ApiModelProperty("是否是模板:0否,1是")
private Integer template;
@ApiModelProperty(value = "1:内容规则,2:用户规则")
private Integer type;
@ApiModelProperty(value = "1:已删除,0未删除")
@TableLogic
private Integer deleted;
@ApiModelProperty(value = "组织id")
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong123
* @since 2019-11-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendStrategyRuleVo")
@TableName("recommend_strategy_rule")
public class RecommendStrategyRuleVo extends Model<RecommendStrategyRuleVo> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@TableField("strategy_id")
private Long strategyId;
@TableField("rule_id")
private Long ruleId;
@ApiModelProperty(value = "and or(与上一条规则详情的逻辑关系,第一条、仅有一条、都为and)")
@TableField("and_or")
private String andOr;
@ApiModelProperty(value = "排序")
private Integer sort;
private Integer deleted;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong
* @since 2019-11-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendStrategyVo")
@TableName("recommend_strategy")
public class RecommendStrategyVo extends Model<RecommendStrategyVo> {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty(value = "策略名称")
private String name;
@ApiModelProperty(value = "1:长期,2:自定义")
@TableField("time_type")
private Integer timeType;
@ApiModelProperty(value = "开始时间")
@TableField("start_time")
private Date startTime;
@ApiModelProperty(value = "结束时间")
@TableField("end_time")
private Date endTime;
@TableLogic
@ApiModelProperty(value = "1:已删除,0未删除")
private Integer deleted;
@ApiModelProperty(value = "组织id")
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.vo.drools;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @ClassName AccountVo4Manage
* @Description TODO
* @Author shengchenglong
* @DATE 2020-06-01 16:58
* @Version 1.0
*/
@Data
@ApiModel("用户vo")
public class AccountVo4Manage {
private static final long serialVersionUID = 1L;
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("序号")
private Integer num;
@ApiModelProperty("账号名称")
private String name;
@ApiModelProperty("全名")
private String fullName;
@ApiModelProperty("手机号")
private String mobile;
@ApiModelProperty("职位")
private String position;
}
package com.yizhi.drools.application.vo.drools;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.drools.application.vo.manage.RuleVo;
import lombok.Data;
import java.util.List;
/**
* @ClassName BusinessVo4PortalParam
* @Description TODO
* @Author shengchenglong
* @DATE 2020-01-02 18:18
* @Version 1.0
*/
@Data
public class AccountVo4ManageParam {
private static final long serialVersionUID = 1L;
private Integer pageNo;
private Integer pageSize;
private List<RuleVo> ruleVos;
/**
* 仅在管理端搜索内容时用
*/
private String keyword;
private RequestContext requestContext;
}
package com.yizhi.drools.application.vo.drools;
import lombok.Data;
import java.util.List;
/**
* @ClassName BusinessVo4PortalResponse
* @Description TODO
* @Author shengchenglong
* @DATE 2020-01-02 18:20
* @Version 1.0
*/
@Data
public class AccountVo4ManageResponse {
private static final long serialVersionUID = 1L;
private Integer pageNo;
private Integer pageSize;
private Integer total;
private List<AccountVo4Manage> list;
}
package com.yizhi.drools.application.vo.drools;
import lombok.Data;
/**
* @ClassName BusinessVo4Portal
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-31 14:55
* @Version 1.0
*/
@Data
public class BusinessVo4Portal {
private static final long serialVersionUID = 1L;
private Long id;
private String image;
private String name;
private String type;
private String code;
}
package com.yizhi.drools.application.vo.drools;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.drools.application.vo.manage.RuleVo;
import lombok.Data;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassName BusinessVo4PortalParam
* @Description TODO
* @Author shengchenglong
* @DATE 2020-01-02 18:18
* @Version 1.0
*/
@Data
public class BusinessVo4PortalParam {
private static final long serialVersionUID = 1L;
private Integer pageNo;
private Integer pageSize;
private List<Long> strategyIds;
private List<RuleVo> ruleVos;
/**
* 仅在管理端搜索内容时用
*/
private String keyword;
/**
* 仅在管理端搜索内容时用
*/
private String business;
private RequestContext requestContext;
private Map<Long, List<RuleVo>> strategyRuleVoMap = new HashMap<>();
}
package com.yizhi.drools.application.vo.drools;
import lombok.Data;
import java.util.List;
/**
* @ClassName BusinessVo4PortalResponse
* @Description TODO
* @Author shengchenglong
* @DATE 2020-01-02 18:20
* @Version 1.0
*/
@Data
public class BusinessVo4PortalResponse {
private static final long serialVersionUID = 1L;
private Integer pageNo;
private Integer pageSize;
private Integer total;
private List<BusinessVo4Portal> list;
}
package com.yizhi.drools.application.vo.drools;
import lombok.Data;
/**
* @ClassName UserRuleVo
* @Description TODO
* @Author shengchenglong
* @DATE 2019-11-27 15:27
* @Version 1.0
*/
@Data
public class UserRuleVo {
}
package com.yizhi.drools.application.vo.manage;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* @ClassName RuleContentRange
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-25 16:13
* @Version 1.0
*/
@Data
@ApiModel("规则内容 - vo")
public class RuleContentRangeVo {
private static final long serialVersionUID = 1L;
private Long id;
private Integer num;
private String code;
private String business;
private String content;
}
package com.yizhi.drools.application.vo.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @ClassName RuleTemplateSave
* @Description TODO
* @Author shengchenglong
* @DATE 2019-11-28 11:28
* @Version 1.0
*/
@Data
@ApiModel("规则item - vo")
public class RuleItemVo implements Comparable<RuleItemVo> {
private static final long serialVersionUID = 1L;
@ApiModelProperty("业务类型")
private String business;
private String businessClassName;
@NotBlank(message = "property:属性类型不能为空")
@ApiModelProperty("属性类型")
private String property;
// @NotBlank(message = "relation:关系类型不能为空")
@ApiModelProperty("关系类型")
private String relation;
@ApiModelProperty("匹配值")
private String value;
@ApiModelProperty("当value为id时,记录下选择的内容的名称")
private String name;
@NotNull(message = "sort:排序不能为空")
@ApiModelProperty("排序")
private Integer sort;
@NotBlank(message = "andOr:逻辑关系不能为空")
@ApiModelProperty("逻辑关系")
private String andOr;
@Override
public int compareTo(RuleItemVo ruleTemplateSave) {
return this.sort - ruleTemplateSave.getSort();
}
}
package com.yizhi.drools.application.vo.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @ClassName RulePageVo
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-04 14:31
* @Version 1.0
*/
@Data
@ApiModel("规则引用列表vo")
public class RulePageVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty("规则id")
private Long id;
@ApiModelProperty("规则名称")
private String name;
@ApiModelProperty("创建时间")
private Date createTime;
}
package com.yizhi.drools.application.vo.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @ClassName RuleTemplateSaveList
* @Description TODO
* @Author shengchenglong
* @DATE 2019-11-28 15:16
* @Version 1.0
*/
@Data
@ApiModel("规则 - vo")
public class RuleVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty("规则id,修改必传")
private Long id;
@ApiModelProperty("规则名称,引用规则可不传")
private String name;
@ApiModelProperty("注意:该id为引用规则的id,如果该值不为空,则后台处理直接引用,不管以下type和list传入任何值(保存为模板可不传)")
private Long quoteRuleId;
@ApiModelProperty(value = "and or(与上一条规则详情的逻辑关系,第一条、仅有一条、都为and)(保存为模板可不传,保存为单条内容规则可不传)")
private String andOr;
@NotNull(message = "sort:排序不能为空")
@ApiModelProperty("排序(保存为模板可不传)")
private Integer sort;
@NotNull(message = "type:参数不能为空")
@Range(min = 1, max = 2, message = "可选值:1内容规则,2用户规则")
@ApiModelProperty("类型:1内容规则,2用户规则")
private Integer type;
@Valid
@NotEmpty(message = "list:参数不能为空")
@ApiModelProperty("规则item - 保存vo集合")
private List<RuleItemVo> list;
@ApiModelProperty("回显用:是否是模板,如果是模板,则不允许修改")
private boolean template;
}
package com.yizhi.drools.application.vo.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @ClassName StrategyPageVo
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-05 20:03
* @Version 1.0
*/
@ApiModel("推荐策略列表vo")
@Data
public class StrategyPageVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("策略名称")
private String name;
@ApiModelProperty("开始时间")
private Date startTime;
@ApiModelProperty("结束时间")
private Date endTime;
@ApiModelProperty("创建时间")
private Date createTime;
}
package com.yizhi.drools.application.vo.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* @ClassName StratetgyVo
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-05 10:53
* @Version 1.0
*/
@Data
@ApiModel("策略保存vo")
public class StrategyVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty("策略id,修改必传")
private Long id;
@NotEmpty(message = "策略名称不能为空")
@Size(max = 50, message = "策略名称50字以内")
@ApiModelProperty("策略名称")
private String strategyName;
@NotNull(message = "策略时段不能为空")
@Range(min = 1, max = 2, message = "策略时段选型错误:1:长期,2:自定义")
@ApiModelProperty(value = "策略时段:1:长期,2:自定义")
private Integer timeType;
@ApiModelProperty(value = "自定义时间:开始时间")
private Date startTime;
@ApiModelProperty(value = "自定义时间:结束时间")
private Date endTime;
@NotEmpty(message = "规则不能为空")
@ApiModelProperty("规则集合")
private List<RuleVo> ruleVos;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud-drools</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-drools-service</artifactId>
<dependencies>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-system-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-orm</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-drools-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- deploy 时跳过该模块 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.yizhi.drools.application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @author shengchenglong
*/
@SpringBootApplication
@EnableTransactionManagement
@EnableDiscoveryClient
//@MapperScan("com.fulan.drools.mapper")
@EnableFeignClients(basePackages = "com.yizhi")
@ComponentScan(basePackages = {"com.yizhi"})
public class CloudDroolsApplication {
public static void main(String[] args) {
SpringApplication.run(CloudDroolsApplication.class, args);
}
}
package com.yizhi.drools.application;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @Author: shengchenglong
* @Date: 2018/3/6 14:30
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("规则引擎服务")
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.yizhi.drools.application"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("drools")
//版本
.version("1.0")
.build();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("docs.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
package com.yizhi.drools.application.controller.manage;
import com.alibaba.fastjson.JSONReader;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.drools.application.constant.DroolsConstants;
import com.yizhi.drools.application.domain.RecommendRule;
import com.yizhi.drools.application.domain.RecommendRuleItem;
import com.yizhi.drools.application.feign.RecommendClient;
import com.yizhi.drools.application.service.IRecommendRuleItemService;
import com.yizhi.drools.application.service.IRecommendRuleService;
import com.yizhi.drools.application.service.IRecommendStrategyRuleService;
import com.yizhi.drools.application.service.IRecommendStrategyService;
import com.yizhi.drools.application.util.ContextUtil;
import com.yizhi.drools.application.util.ResponseUtil;
import com.yizhi.drools.application.vo.drools.*;
import com.yizhi.drools.application.vo.manage.*;
import com.yizhi.util.application.domain.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 前端控制器
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
@Slf4j
@RestController
@RequestMapping("/manage/recommendRule")
@Api(tags = "推荐规则 - 管理端接口")
public class RecommendRuleController {
@Autowired
private IRecommendRuleService ruleService;
@Autowired
private IRecommendRuleItemService ruleItemService;
@Autowired
private IRecommendStrategyRuleService strategyRuleService;
@Autowired
private IRecommendStrategyService strategyService;
@Autowired
private RecommendClient recommendClient;
@GetMapping("/getJson")
public Response getJson() {
InputStream ist = RecommendRuleController.class.getClassLoader().getResourceAsStream("rule.json");
InputStreamReader is = new InputStreamReader(ist);
JSONReader jsonReader = new JSONReader(is);
Object o = jsonReader.readObject();
return Response.ok(o);
}
@PostMapping("/template/save")
@ApiOperation(value = "规则保存(修改)模板, 然后返回内容规则的id")
public Response<Long> templateSave(
@ApiParam @Validated @RequestBody RuleVo ruleTemplateSave) {
Long ruleId;
if (ruleTemplateSave.getId() != null) {
ruleId = ruleService.update(ruleTemplateSave, DroolsConstants.TEMPLATE_YES);
} else {
ruleId = ruleService.insert(ruleTemplateSave, DroolsConstants.TEMPLATE_YES);
}
if (ruleId != null) {
return Response.ok(ruleId);
}
return Response.fail();
}
@GetMapping("/page")
@ApiOperation(value = "规则列表页(引用规则列表页)", response = RulePageVo.class)
public Response<RulePageVo> page(
@ApiParam("规则类型,内容规则:1,用户规则:2") @RequestParam Integer type,
@ApiParam @RequestParam(required = false) String name,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
Page<RecommendRule> page = new Page<>(pageNo, pageSize);
page = ruleService.selectPageByTypeAndName(page, type, name);
if (page != null) {
List<RecommendRule> records = page.getRecords();
if (!CollectionUtils.isEmpty(records)) {
List<RulePageVo> list = new ArrayList<>();
records.forEach(item -> {
RulePageVo vo = new RulePageVo();
vo.setId(item.getId());
vo.setCreateTime(item.getCreateTime());
vo.setName(item.getName());
list.add(vo);
});
return ResponseUtil.pageResponse4PageParam(page, list);
}
}
return Response.fail();
}
@PostMapping("/ids/get")
@ApiOperation(value = "根据规则id获取规则详情(回显)", response = RuleItemVo.class)
public Response<RuleVo> getContentRuleById(@RequestBody ArrayList<String> ruleIds) {
if (CollectionUtils.isEmpty(ruleIds)) {
return Response.ok();
}
// 组装 RuleVo
RecommendRule recommendRule = new RecommendRule();
ContextUtil.buildTenantEntity4Select(recommendRule);
EntityWrapper<RecommendRule> ew = new EntityWrapper<>(recommendRule);
ew.in("id", ruleIds);
List<RecommendRule> recommendRuleList = recommendRule.selectList(ew);
if (!CollectionUtils.isEmpty(recommendRuleList)) {
Map<Long, RuleVo> map = new HashMap<>();
RuleVo ruleVo;
for (RecommendRule rule : recommendRuleList) {
ruleVo = new RuleVo();
ruleVo.setQuoteRuleId(rule.getId());
ruleVo.setTemplate(true);
ruleVo.setType(rule.getType());
ruleVo.setList(new ArrayList<>());
ruleVo.setName(rule.getName());
map.put(rule.getId(), ruleVo);
}
// 组装 RuleItemVo
RecommendRuleItem item = new RecommendRuleItem();
ContextUtil.buildTenantEntity4Select(item);
EntityWrapper<RecommendRuleItem> itemEw = new EntityWrapper<>(item);
itemEw.in("rule_id", ruleIds);
itemEw.orderBy("sort");
List<RecommendRuleItem> items = item.selectList(itemEw);
if (!CollectionUtils.isEmpty(items)) {
RuleItemVo ruleItemVo;
for (RecommendRuleItem recommendRuleItem : items) {
ruleItemVo = new RuleItemVo();
ruleItemVo.setSort(recommendRuleItem.getSort());
ruleItemVo.setAndOr(recommendRuleItem.getAndOr());
ruleItemVo.setBusiness(recommendRuleItem.getBusiness());
ruleItemVo.setProperty(recommendRuleItem.getPropertyName());
ruleItemVo.setRelation(recommendRuleItem.getRelation());
ruleItemVo.setValue(recommendRuleItem.getTargetVal());
ruleItemVo.setName(recommendRuleItem.getName());
if (map.containsKey(recommendRuleItem.getRuleId())) {
map.get(recommendRuleItem.getRuleId()).getList().add(ruleItemVo);
}
}
return Response.ok(map);
}
}
return Response.fail();
}
@ApiOperation("规则复制")
@PostMapping("/copy")
public Response copy(@RequestBody HashMap<String, String> map) {
String str = map.get("id");
if (StringUtils.isEmpty(str)) {
return Response.fail("4001", "id不能为空");
}
Long id = Long.valueOf(str);
return Response.ok(ruleService.copy(id));
}
@ApiOperation("删除规则")
@PostMapping("/delete")
public Response delete(@ApiParam @RequestBody HashMap<String, String> map) {
String str = map.get("id");
if (StringUtils.isEmpty(str)) {
return Response.fail("4001", "id不能为空");
}
Long id = Long.valueOf(str);
// 先查看有没有跟本规则关联的策略
EntityWrapper ew = new EntityWrapper();
ew.eq("rule_id", id);
int count = strategyRuleService.selectCount(ew);
if (count > 0) {
return Response.fail("4001", "当前规则已被策略引用");
}
boolean flag = ruleService.deleteById(id);
if (flag) {
ew = new EntityWrapper();
ew.eq("rule_id", id);
boolean resFlag = ruleItemService.delete(ew);
}
return Response.ok();
}
@ApiOperation("查看关联活动(关联策略)")
@GetMapping("/strategy/page")
public Response<StrategyPageVo> strategyPage(
@ApiParam @RequestParam("ruleId") Long ruleId,
@ApiParam @RequestParam(required = false) String name,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize
) {
Page<StrategyPageVo> page = strategyService.pageByNameAndRuleId(name, ruleId, new Page(pageNo, pageSize));
if (page != null) {
return ResponseUtil.pageResponse4PageParam(page, page.getRecords());
}
return Response.fail();
}
@ApiOperation(value = "查看规则范围", response = RuleContentRangeVo.class)
@GetMapping("/content/range/page")
public Response<RuleContentRangeVo> conteRangePage(
@ApiParam("id") @RequestParam("id") Long id,
@ApiParam("关键字") @RequestParam(name = "keyword", required = false) String keyword,
@ApiParam("内容类型") @RequestParam(name = "business", required = false) String business,
@RequestParam(defaultValue = "1", required = false) Integer pageNo,
@RequestParam(defaultValue = "10", required = false) Integer pageSize
) {
RecommendRule rule = ruleService.selectById(id);
if (rule == null) {
return Response.fail("规则不存在");
}
EntityWrapper ew = new EntityWrapper();
ew.eq("rule_id", id);
if (StringUtils.isNotEmpty(business)) {
ew.eq("business", business);
}
ew.orderBy("sort");
List<RecommendRuleItem> ruleList = ruleItemService.selectList(ew);
if (!CollectionUtils.isEmpty(ruleList)) {
List<RuleItemVo> ruleItemVos = new ArrayList<>(ruleList.size());
for (RecommendRuleItem ruleItem : ruleList) {
RuleItemVo itemVo = new RuleItemVo();
itemVo.setBusiness(ruleItem.getBusiness());
itemVo.setAndOr(ruleItem.getAndOr());
itemVo.setProperty(ruleItem.getPropertyName());
itemVo.setRelation(ruleItem.getRelation());
itemVo.setValue(ruleItem.getTargetVal());
itemVo.setSort(ruleItem.getSort());
itemVo.setName(ruleItem.getName());
ruleItemVos.add(itemVo);
}
BusinessVo4PortalParam param = new BusinessVo4PortalParam();
List<RuleVo> ruleVos = new ArrayList<>();
RuleVo ruleVo = new RuleVo();
ruleVo.setType(rule.getType());
ruleVo.setAndOr(DroolsConstants.AND);
ruleVo.setList(ruleItemVos);
ruleVos.add(ruleVo);
param.setRuleVos(ruleVos);
param.setKeyword(keyword);
param.setPageNo(pageNo);
param.setPageSize(pageSize);
param.setRequestContext(ContextHolder.get());
BusinessVo4PortalResponse response = recommendClient.recommend4Manage(param);
log.info("-------------------------------------------" + response.toString());
Map<String, Integer> pageMap = new HashMap<>();
pageMap.put("pageNo", response.getPageNo());
pageMap.put("pageSize", response.getPageSize());
pageMap.put("pageTotal", response.getTotal());
List<BusinessVo4Portal> vo4Portals = response.getList();
if (!CollectionUtils.isEmpty(vo4Portals)) {
List<RuleContentRangeVo> vos = new ArrayList<>(vo4Portals.size());
for (int i = 0; i < vo4Portals.size(); i++) {
BusinessVo4Portal p = vo4Portals.get(i);
RuleContentRangeVo vo = new RuleContentRangeVo();
vo.setNum(i + 1);
vo.setId(vo.getId());
vo.setContent(p.getName());
vo.setCode(p.getCode());
vo.setBusiness(DroolsConstants.getBusinessCHN(p.getType()));
vos.add(vo);
}
return Response.ok(vos, pageMap);
}
}
return Response.ok();
}
@ApiOperation("查看用户规则范围")
@GetMapping("/getVisibleRangeToUser")
public Response getVisibleRange(@ApiParam("规则id") @RequestParam("id") Long id,
@ApiParam("查询keyWord") @RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(defaultValue = "1", required = false) Integer pageNo,
@RequestParam(defaultValue = "10", required = false) Integer pageSize) {
RecommendRule rule = ruleService.selectById(id);
if (rule == null) {
return Response.fail("规则不存在");
}
EntityWrapper ew = new EntityWrapper();
ew.eq("rule_id", id);
ew.orderBy("sort");
List<RecommendRuleItem> ruleList = ruleItemService.selectList(ew);
if (!CollectionUtils.isEmpty(ruleList)) {
List<RuleItemVo> ruleItemVos = new ArrayList<>(ruleList.size());
for (RecommendRuleItem ruleItem : ruleList) {
RuleItemVo itemVo = new RuleItemVo();
itemVo.setBusiness(ruleItem.getBusiness());
itemVo.setAndOr(ruleItem.getAndOr());
itemVo.setProperty(ruleItem.getPropertyName());
itemVo.setRelation(ruleItem.getRelation());
itemVo.setValue(ruleItem.getTargetVal());
itemVo.setSort(ruleItem.getSort());
itemVo.setName(ruleItem.getName());
ruleItemVos.add(itemVo);
}
AccountVo4ManageParam param = new AccountVo4ManageParam();
List<RuleVo> ruleVos = new ArrayList<>();
RuleVo ruleVo = new RuleVo();
ruleVo.setType(rule.getType());
ruleVo.setAndOr(DroolsConstants.AND);
ruleVo.setList(ruleItemVos);
ruleVos.add(ruleVo);
param.setRuleVos(ruleVos);
param.setKeyword(keyword);
param.setPageNo(pageNo);
param.setPageSize(pageSize);
param.setRequestContext(ContextHolder.get());
AccountVo4ManageResponse response = recommendClient.recommend4ManageAccount(param);
if (response == null) {
return Response.ok();
}
log.info("-------------------------------------------" + response);
Map<String, Integer> pageMap = new HashMap<>();
pageMap.put("pageNo", response.getPageNo());
pageMap.put("pageSize", response.getPageSize());
pageMap.put("pageTotal", response.getTotal());
List<AccountVo4Manage> vo4Manages = response.getList();
return Response.ok(vo4Manages, pageMap);
}
return Response.ok();
}
// *********************************** ********************************************
}
\ No newline at end of file
package com.yizhi.drools.application.controller.manage;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
@RestController
@RequestMapping("/manage/recommendRuleItem")
public class RecommendRuleItemController {
}
package com.yizhi.drools.application.controller.manage;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.drools.application.constant.DroolsConstants;
import com.yizhi.drools.application.domain.RecommendStrategy;
import com.yizhi.drools.application.feign.RecommendClient;
import com.yizhi.drools.application.service.IRecommendRuleItemService;
import com.yizhi.drools.application.service.IRecommendRuleService;
import com.yizhi.drools.application.service.IRecommendStrategyRuleService;
import com.yizhi.drools.application.service.IRecommendStrategyService;
import com.yizhi.drools.application.util.ContextUtil;
import com.yizhi.drools.application.util.ResponseUtil;
import com.yizhi.drools.application.vo.drools.*;
import com.yizhi.drools.application.vo.manage.RuleContentRangeVo;
import com.yizhi.drools.application.vo.manage.RuleVo;
import com.yizhi.drools.application.vo.manage.StrategyPageVo;
import com.yizhi.drools.application.vo.manage.StrategyVo;
import com.yizhi.util.application.domain.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* <p>
* 前端控制器
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
@Api(tags = "推荐策略 - 管理端接口")
@RestController
@RequestMapping("/manage/recommendStrategy")
@Slf4j
public class RecommendStrategyController {
@Autowired
private IRecommendStrategyService strategyService;
@Autowired
private IRecommendRuleService ruleService;
@Autowired
private IRecommendRuleItemService ruleItemService;
@Autowired
private IRecommendStrategyRuleService strategyRuleService;
@Autowired
private RecommendClient recommendClient;
@PostMapping("/save")
@ApiOperation(value = "内容规则保存模板, 然后返回内容规则的id")
public Response save(@ApiParam @Validated @RequestBody StrategyVo strategyVo) {
try {
RecommendStrategy strategy = new RecommendStrategy();
strategy.setName(strategyVo.getStrategyName());
ContextUtil.buildTenantEntity4Select(strategy);
EntityWrapper ew = new EntityWrapper(strategy);
if (strategyVo.getId() != null) {
ew.ne("id", strategyVo.getId());
}
int count = strategyService.selectCount(ew);
if (count > 0) {
return Response.fail("4001", "策略名称已经存在!");
}
boolean flag = strategyService.save(strategyVo);
if (flag) {
return Response.ok(flag);
}
return Response.fail();
} catch (Exception e) {
e.printStackTrace();
return Response.fail("4001", e.getLocalizedMessage());
}
}
@GetMapping("/page")
@ApiOperation(value = "策略列表分页", response = StrategyPageVo.class)
public Response<StrategyPageVo> listPage(
@ApiParam("策略名称") @RequestParam(required = false) String name,
@ApiParam("开始时间") @RequestParam(required = false) String startTime,
@ApiParam("结束时间") @RequestParam(required = false) String endTime,
@ApiParam("是否是门户配置的列表") @RequestParam(required = false) Boolean isForPortal,
@RequestParam(name = "", defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize
) {
Page<RecommendStrategy> page = new Page<>(pageNo, pageSize);
RecommendStrategy strategy = new RecommendStrategy();
ContextUtil.buildTenantEntity4Select(strategy);
EntityWrapper<RecommendStrategy> ew = new EntityWrapper<>(strategy);
if (StringUtils.isNotEmpty(name)) {
ew.like("name", name);
}
Date startTimeDate = null;
Date endTimeDate = null;
if (StringUtils.isNotEmpty(startTime)) {
startTimeDate = DateUtil.beginOfDay(new Date(Long.valueOf(startTime)));
}
if (StringUtils.isNotEmpty(endTime)) {
endTimeDate = DateUtil.endOfDay(new Date(Long.valueOf(endTime)));
}
//通过时间查询时 带上长期有效的结果
if (startTime != null && endTime != null) {
ew.andNew().gt("start_time", startTimeDate).and().lt("end_time", endTimeDate).or().eq("time_type",1);
} else {
if (startTime != null) {
ew.gt("start_time", startTimeDate).or().eq("time_type",1);
}
if (endTime != null) {
ew.lt("end_time", endTimeDate).or().eq("time_type",1);
}
}
ew.orderBy("create_time", false);
ew.orderBy("update_time", false);
page = strategyService.selectPage(page, ew);
Date date=new Date();
List<RecommendStrategy> strategies = page.getRecords();
List<StrategyPageVo> list = new ArrayList<>();
if (!CollectionUtils.isEmpty(strategies)) {
strategies.forEach(item -> {
StrategyPageVo vo = new StrategyPageVo();
vo.setCreateTime(item.getCreateTime());
vo.setEndTime(item.getEndTime());
vo.setName(item.getName());
vo.setStartTime(item.getStartTime());
vo.setId(item.getId());
list.add(vo);
});
}
return ResponseUtil.pageResponse4PageParam(page, list);
}
@ApiOperation("查看策略")
@GetMapping("/view")
public Response view(@ApiParam @RequestParam(name = "id") Long id) {
RecommendStrategy strategy = strategyService.selectById(id);
if (strategy == null) {
return Response.fail("4001", "该id不存在");
}
// 组装 策略vo
StrategyVo strategyVo = new StrategyVo();
strategyVo.setTimeType(strategy.getTimeType());
strategyVo.setEndTime(strategy.getEndTime());
strategyVo.setStartTime(strategy.getStartTime());
strategyVo.setStrategyName(strategy.getName());
strategyVo.setRuleVos(ruleService.listRuleVosByStrategyId(id, false, null));
return Response.ok(strategyVo);
}
@PostMapping("/copy")
@ApiOperation(value = "策略复制")
public Response copy(@ApiParam("需要复制的策略id") @RequestBody HashMap<String, String> map) {
String str = map.get("id");
if (StringUtils.isEmpty(str)) {
return Response.fail("4001", "id不能为空");
}
Long id = Long.valueOf(str);
try {
strategyService.copy(id);
return Response.ok();
} catch (Exception e) {
e.printStackTrace();
return Response.fail("4001", e.getLocalizedMessage());
}
}
@ApiOperation("删除策略")
@PostMapping("/delete")
public Response delete(@ApiParam @RequestBody HashMap<String, String> map) {
// TODO 先查看本策略有没有被使用
String str = map.get("id");
if (StringUtils.isEmpty(str)) {
return Response.fail("4001", "id不能为空");
}
Long id = Long.valueOf(str);
boolean flag = strategyService.delete(id);
return Response.ok();
}
@ApiOperation(value = "查看规则范围", response = RuleContentRangeVo.class)
@GetMapping("/content/range/page")
public Response<RuleContentRangeVo> contentRangePage(
@ApiParam("id") @RequestParam("id") Long id,
@ApiParam("关键字") @RequestParam(name = "keyword", required = false) String keyword,
@ApiParam("内容类型") @RequestParam(name = "business", required = false) String business,
@RequestParam(defaultValue = "1", required = false) Integer pageNo,
@RequestParam(defaultValue = "10", required = false) Integer pageSize
) {
List<RuleVo> ruleList = ruleService.listRuleVosByStrategyId(id, true, business);
if (!CollectionUtils.isEmpty(ruleList)) {
BusinessVo4PortalParam param = new BusinessVo4PortalParam();
param.setRuleVos(ruleList);
if (StringUtils.isNotEmpty(keyword)) {
param.setKeyword(keyword);
}
if (StringUtils.isNotEmpty(business)) {
param.setBusiness(business);
}
param.setPageNo(pageNo);
param.setPageSize(pageSize);
param.setRequestContext(ContextHolder.get());
BusinessVo4PortalResponse response = recommendClient.recommend4Manage(param);
log.info("-------------------------------------------" + response.toString());
Map<String, Integer> pageMap = new HashMap<>();
pageMap.put("pageNo", response.getPageNo());
pageMap.put("pageSize", response.getPageSize());
pageMap.put("pageTotal", response.getTotal());
List<BusinessVo4Portal> vo4Portals = response.getList();
if (!CollectionUtils.isEmpty(vo4Portals)) {
List<RuleContentRangeVo> vos = new ArrayList<>(vo4Portals.size());
for (int i = 0; i < vo4Portals.size(); i++) {
BusinessVo4Portal p = vo4Portals.get(i);
RuleContentRangeVo vo = new RuleContentRangeVo();
vo.setNum(i + 1);
vo.setId(vo.getId());
vo.setContent(p.getName());
vo.setCode(p.getCode());
vo.setBusiness(DroolsConstants.getBusinessCHN(p.getType()));
vos.add(vo);
}
return Response.ok(vos, pageMap);
}
}
return Response.ok();
}
@ApiOperation("查看用户规则范围")
@GetMapping("/getVisibleRangeToUser")
public Response getVisibleRange(@ApiParam("策略id") @RequestParam("id") Long id,
@ApiParam("查询keyWord") @RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(defaultValue = "1", required = false) Integer pageNo,
@RequestParam(defaultValue = "10", required = false) Integer pageSize) {
RecommendStrategy recommendStrategy = strategyService.selectById(id);
if (recommendStrategy == null) {
return Response.fail("该策略不存在!");
}
List<RuleVo> ruleList = ruleService.listRuleVosByStrategyId(id, true, null);
if (!CollectionUtils.isEmpty(ruleList)) {
AccountVo4ManageParam param = new AccountVo4ManageParam();
param.setRuleVos(ruleList);
if (StringUtils.isNotEmpty(keyword)) {
param.setKeyword(keyword);
}
param.setPageNo(pageNo);
param.setPageSize(pageSize);
param.setRequestContext(ContextHolder.get());
AccountVo4ManageResponse response = recommendClient.recommend4ManageAccount(param);
log.info("-------------------------------------------" + response.toString());
Map<String, Integer> pageMap = new HashMap<>();
pageMap.put("pageNo", response.getPageNo());
pageMap.put("pageSize", response.getPageSize());
pageMap.put("pageTotal", response.getTotal());
List<AccountVo4Manage> vo4Manages = response.getList();
return Response.ok(vo4Manages, pageMap);
}
return Response.ok();
}
// ********************************* remote api **********************************
/**
* 门户配置的策略回显
*
* @param strategyIds
* @return
*/
@PostMapping("/list4PortalConfig")
public Map<Long, StrategyPageVo> list4PortalConfig(@RequestBody List<Long> strategyIds) {
if (!CollectionUtils.isEmpty(strategyIds)) {
EntityWrapper<RecommendStrategy> recommendStrategyEntityWrapper = new EntityWrapper<>();
recommendStrategyEntityWrapper.in("id", strategyIds);
List<RecommendStrategy> strategyList = strategyService.selectList(recommendStrategyEntityWrapper);
if (!CollectionUtils.isEmpty(strategyList)) {
Map<Long, StrategyPageVo> map = new HashMap<>(strategyList.size());
strategyList.forEach(strategy -> {
StrategyPageVo vo = new StrategyPageVo();
vo.setId(strategy.getId());
vo.setCreateTime(strategy.getCreateTime());
vo.setEndTime(strategy.getEndTime());
vo.setName(strategy.getName());
vo.setStartTime(strategy.getStartTime());
map.put(vo.getId(), vo);
});
return map;
}
}
return null;
}
// ************************************ 尝试组装一个 *****************************************
/**
* 返回给管理端的推荐内容
*
* @param param
* @return
*/
@PostMapping("/businessVo4Manage")
public BusinessVo4PortalResponse businessVo4Manage(@RequestBody BusinessVo4PortalParam param) {
List<Long> strategyIds = param.getStrategyIds();
if (!CollectionUtils.isEmpty(strategyIds)) {
//去除已经过期的策略id
deletePastDueStrategy(strategyIds);
List<RuleVo> vos = new ArrayList<>();
for (Long strategyId : strategyIds) {
vos.addAll(ruleService.listRuleVosByStrategyId(strategyId, true, null));
}
param.setRuleVos(vos);
param.setRequestContext(ContextHolder.get());
BusinessVo4PortalResponse businessVo4Portals = recommendClient.recommend4Manage(param);
log.info("--------------------- " + businessVo4Portals);
return businessVo4Portals;
}
return null;
}
/**
* 返回给学员端的推荐内容
*
* @param param
* @return
*/
@PostMapping("/businessVo4Portal")
public BusinessVo4PortalResponse businessVo4Portal(@RequestBody BusinessVo4PortalParam param) {
// 先查询这个用户在不在推荐范围内
List<Long> strategyIds = param.getStrategyIds();
if (!CollectionUtils.isEmpty(strategyIds)) {
//去除已经过期的策略id
deletePastDueStrategy(strategyIds);
List<RuleVo> vos = new ArrayList<>();
for (Long strategyId : strategyIds) {
param.getStrategyRuleVoMap().put(strategyId, ruleService.listRuleVosByStrategyId(strategyId, true, null));
}
param.setRequestContext(ContextHolder.get());
BusinessVo4PortalResponse businessVo4Portals = recommendClient.recommend4Portal(param);
log.info("--------------------- " + businessVo4Portals);
return businessVo4Portals;
}
return null;
}
private void deletePastDueStrategy(List<Long> strategyIds) {
Date date=new Date();
EntityWrapper<RecommendStrategy> wrapper = new EntityWrapper<>();
wrapper.in("id",strategyIds);
List<RecommendStrategy> recommendStrategies=strategyService.selectList(wrapper);
if (recommendStrategies.isEmpty()){
return;
}
for (RecommendStrategy r:recommendStrategies) {
if (r.getTimeType()==2&&r.getEndTime().getTime()<date.getTime()){
strategyIds.remove(r.getId());
}
}
}
}
\ No newline at end of file
package com.yizhi.drools.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong
* @since 2019-11-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendRuleVo")
@TableName("recommend_rule")
public class RecommendRule extends Model<RecommendRule> {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty("规则名称")
private String name;
@ApiModelProperty("是否是模板:0否,1是")
private Integer template;
@ApiModelProperty(value = "1:内容规则,2:用户规则")
private Integer type;
@ApiModelProperty(value = "1:已删除,0未删除")
@TableLogic
private Integer deleted;
@ApiModelProperty(value = "组织id")
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong
* @since 2019-11-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendRuleItemVo")
@TableName("recommend_rule_item")
public class RecommendRuleItem extends Model<RecommendRuleItem> {
private static final long serialVersionUID = 1L;
private Long id;
@TableField("rule_id")
private Long ruleId;
@ApiModelProperty(value = "搜索对象类型名")
@TableField("class_name")
private String className;
@ApiModelProperty(value = "business 类型")
@TableField("business")
private String business;
@ApiModelProperty(value = "搜索属性名称")
@TableField("property_name")
private String propertyName;
@ApiModelProperty(value = "1:contains; 2:notContains; 3:equals; 4:notEquals;")
private String relation;
@ApiModelProperty(value = "搜索值(这里注意:contains类似关键词,equals可能是一个指定的id)")
@TableField("target_val")
private String targetVal;
@ApiModelProperty(value = "target_val 为id时,记录name,回显用")
private String name;
@ApiModelProperty(value = "1:内容规则,2:用户规则")
private Integer type;
@ApiModelProperty(value = "and or(与上一条规则详情的逻辑关系,第一条、仅有一条、都为and)")
@TableField("and_or")
private String andOr;
@TableLogic
@ApiModelProperty(value = "1:已删除,0未删除")
private Integer deleted;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "组织id")
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.domain;//package com.fulan.drools.domain;
//
//import com.baomidou.mybatisplus.activerecord.Model;
//import com.baomidou.mybatisplus.annotations.TableField;
//import com.baomidou.mybatisplus.annotations.TableName;
//import com.baomidou.mybatisplus.enums.FieldFill;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.Data;
//import lombok.EqualsAndHashCode;
//
//import java.io.Serializable;
//import java.util.Date;
//
//
///**
// * <p>
// *
// * </p>
// *
// * @author shengchenglong123
// * @since 2019-11-28
// */
//
//@Data
//@EqualsAndHashCode(callSuper = true)
//@Api(tags = "RecommendRuleRuleItem", description = "")
//@TableName("recommend_rule_rule_item")
//public class RecommendRuleRuleItem extends Model<RecommendRuleRuleItem> {
//
// private static final long serialVersionUID = 1L;
//
//
// @ApiModelProperty(value = "主键id")
// private Long id;
//
// @TableField("rule_id")
// private Long ruleId;
//
// @TableField("rule_item_id")
// private Long ruleItemId;
//
// @ApiModelProperty(value = "and or(与上一条规则详情的逻辑关系,第一条、仅有一条、都为and)")
// @TableField("and_or")
// private String andOr;
//
// @ApiModelProperty(value = "排序")
// private Integer sort;
//
// private Integer deleted;
//
// @ApiModelProperty(value = "创建者id")
// @TableField(value = "create_by_id", fill = FieldFill.INSERT)
// private Long createById;
//
// @ApiModelProperty(value = "创建者名称")
// @TableField(value = "create_by_name", fill = FieldFill.INSERT)
// private String createByName;
//
// @ApiModelProperty(value = "创建时间")
// @TableField(value = "create_time", fill = FieldFill.INSERT)
// private Date createTime;
//
// @ApiModelProperty(value = "更新者id")
// @TableField(value = "update_by_id", fill = FieldFill.UPDATE)
// private Long updateById;
//
// @ApiModelProperty(value = "修改者名称")
// @TableField(value = "update_by_name", fill = FieldFill.UPDATE)
// private String updateByName;
//
// @ApiModelProperty(value = "修改时间")
// @TableField(value = "update_time", fill = FieldFill.UPDATE)
// private Date updateTime;
//
//
// @Override
// protected Serializable pkVal() {
// return this.id;
// }
//
//}
package com.yizhi.drools.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong
* @since 2019-11-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendStrategyVo")
@TableName("recommend_strategy")
public class RecommendStrategy extends Model<RecommendStrategy> {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty(value = "策略名称")
private String name;
@ApiModelProperty(value = "1:长期,2:自定义")
@TableField("time_type")
private Integer timeType;
@ApiModelProperty(value = "开始时间")
@TableField("start_time")
private Date startTime;
@ApiModelProperty(value = "结束时间")
@TableField("end_time")
private Date endTime;
@TableLogic
@ApiModelProperty(value = "1:已删除,0未删除")
private Integer deleted;
@ApiModelProperty(value = "组织id")
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author shengchenglong123
* @since 2019-11-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Api(tags = "RecommendStrategyRuleVo")
@TableName("recommend_strategy_rule")
public class RecommendStrategyRule extends Model<RecommendStrategyRule> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@TableField("strategy_id")
private Long strategyId;
@TableField("rule_id")
private Long ruleId;
@ApiModelProperty(value = "and or(与上一条规则详情的逻辑关系,第一条、仅有一条、都为and)")
@TableField("and_or")
private String andOr;
@ApiModelProperty(value = "排序")
private Integer sort;
private Integer deleted;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.drools.application.exception;
import com.yizhi.util.application.domain.Response;
import lombok.extern.log4j.Log4j2;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName GlobalExecptionHandler
* @Description TODO
* @Author shengchenglong
* @DATE 2019-11-28 15:57
* @Version 1.0
*/
@ControllerAdvice
@ResponseBody
@Log4j2
public class GlobalExecptionHandler {
/**
* 分隔符
*/
private static final String SEPARATOR = ",";
/**
* 拦截数据校验异常
*
* @param request 请求
* @param e 校验异常
* @return 通用返回格式
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public Response notValidException(HttpServletRequest request, MethodArgumentNotValidException e) {
e.printStackTrace();
BindingResult bindingResult = e.getBindingResult();
List<String> errorMsgList = new ArrayList();
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorMsgList.add(fieldError.getDefaultMessage());
}
return Response.fail(errorMsgList.toString());
}
}
package com.yizhi.drools.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.drools.application.domain.RecommendRuleItem;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
public interface RecommendRuleItemMapper extends BaseMapper<RecommendRuleItem> {
@Select("<script>" +
"select * from " +
"recommend_rule_item " +
"where rule_id = #{ruleId} and deleted = 0 " +
"<if test=\"business != null and business != ''\"> " +
"and business = #{business} " +
"</if>" +
"order by sort " +
"</script>")
List<RecommendRuleItem> listByRuleId(@Param("ruleId") Long ruleId, @Param("business") String business);
}
package com.yizhi.drools.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.drools.application.domain.RecommendRule;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
public interface RecommendRuleMapper extends BaseMapper<RecommendRule> {
@Select("select * " +
"from recommend_rule r " +
"left join recommend_strategy_rule sr on sr.rule_id = r.id " +
"where r.deleted = 0 and sr.deleted = 0 and sr.strategy_id = #{strategyId} ")
List<RecommendRule> listByStrategyId(@Param("strategyId") Long strategyId);
@Select("<script>" +
"select id " +
"from recommend_rule " +
"where template = #{template} and deleted = 0 " +
"and id in (<foreach item=\"ruleId\" collection=\"ruleIds\" separator=\",\"> " +
"#{ruleId} " +
"</foreach>) " +
"</script>")
List<Long> listTemplateYesOrNoRuleIds(@Param("ruleIds") List<Long> ruleIds, @Param("template") Integer template);
}
//package com.fulan.drools.mapper;
//
//import com.baomidou.mybatisplus.mapper.BaseMapper;
//import com.fulan.drools.domain.RecommendRuleRuleItem;
//
///**
// * <p>
// * Mapper 接口
// * </p>
// *
// * @author shengchenglong123
// * @since 2019-11-28
// */
//public interface RecommendRuleRuleItemMapper extends BaseMapper<RecommendRuleRuleItem> {
//
//}
package com.yizhi.drools.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.drools.application.domain.RecommendStrategy;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.session.RowBounds;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
public interface RecommendStrategyMapper extends BaseMapper<RecommendStrategy> {
@Select("<script>" +
"select * " +
"from recommend_strategy str " +
"left join recommend_strategy_rule strr on strr.strategy_id = str.id " +
"where strr.deleted = 0 and str.deleted = 0 " +
"and strr.rule_id = #{ruleId} " +
"<if test=\"name != null and name != ''\"> " +
"and str.name like concat(\"%\", #{name}, \"%\") " +
"</if> " +
"</script>")
List<RecommendStrategy> listByNameAndRuleId(@Param("name") String name, @Param("ruleId") Long ruleId, RowBounds rowBounds);
@Select("<script>" +
"select count(1) " +
"from recommend_strategy str " +
"left join recommend_strategy_rule strr on strr.strategy_id = str.id " +
"where strr.deleted = 0 and str.deleted = 0 " +
"and strr.rule_id = #{ruleId} " +
"<if test=\"name != null and name != ''\"> " +
"and str.name like concat(\"%\", #{name}, \"%\") " +
"</if> " +
"</script>")
int countListByNameAndRuleId(@Param("name") String name, @Param("ruleId") Long ruleId);
}
package com.yizhi.drools.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.drools.application.domain.RecommendStrategyRule;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author shengchenglong123
* @since 2019-11-28
*/
public interface RecommendStrategyRuleMapper extends BaseMapper<RecommendStrategyRule> {
/**
* 获取策略下的规则的id
*
* @param strategyId
* @return
*/
@Select("select rule_id " +
"from recommend_strategy_rule " +
"where strategy_id = #{strategyId} and deleted = 0 " +
"order by sort")
List<Long> getRuleIds(@Param("strategyId") Long strategyId);
/**
* 根据策略id查询 策略-规则 关联
*
* @param strategyId
* @return
*/
@Select("select * " +
"from recommend_strategy_rule " +
"where strategy_id = #{strategyId} and deleted = 0 " +
"order by sort")
List<RecommendStrategyRule> listByStrategyId(@Param("strategyId") Long strategyId);
}
package com.yizhi.drools.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.drools.application.domain.RecommendRuleItem;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
public interface IRecommendRuleItemService extends IService<RecommendRuleItem> {
List<RecommendRuleItem> listByRuleId(Long ruleId, String business);
}
package com.yizhi.drools.application.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.drools.application.constant.DroolsConstants;
import com.yizhi.drools.application.domain.RecommendRule;
import com.yizhi.drools.application.vo.manage.RuleVo;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
public interface IRecommendRuleService extends IService<RecommendRule> {
/**
* 添加规则
*
* @param ruleVo
* @param isTemplate
* @return 内容规则的id
* @see DroolsConstants
*/
Long update(RuleVo ruleVo, Integer isTemplate);
/**
* 修改规则
*
* @param ruleVo
* @param isTemplate
* @return
*/
Long insert(RuleVo ruleVo, Integer isTemplate);
/**
* 规则引用列表
*
* @param type
* @return
*/
Page<RecommendRule> selectPageByTypeAndName(Page<RecommendRule> page, Integer type, String name);
List<RuleVo> listRuleVosByStrategyId(Long strategyId, boolean withClassName, String business);
boolean copy(Long ruleId);
Page getVisibleRange(Long id, String keyWord, Integer pageNo, Integer pageSize);
}
package com.yizhi.drools.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.drools.application.domain.RecommendStrategyRule;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author shengchenglong123
* @since 2019-11-28
*/
public interface IRecommendStrategyRuleService extends IService<RecommendStrategyRule> {
List<RecommendStrategyRule> listByStrategyId(Long strategyId);
List<Long> getRuleIds(Long strategyId);
}
package com.yizhi.drools.application.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.drools.application.domain.RecommendStrategy;
import com.yizhi.drools.application.vo.manage.StrategyPageVo;
import com.yizhi.drools.application.vo.manage.StrategyVo;
/**
* <p>
* 服务类
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
public interface IRecommendStrategyService extends IService<RecommendStrategy> {
boolean save(StrategyVo strategyVo) throws Exception;
boolean copy(Long id) throws Exception;
boolean delete(Long id);
Page<StrategyPageVo> pageByNameAndRuleId(String name, Long ruleId, Page page);
Page getVisibleRange(Long id, String keyWord, Integer pageNo, Integer pageSize);
}
package com.yizhi.drools.application.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.drools.application.domain.RecommendRuleItem;
import com.yizhi.drools.application.mapper.RecommendRuleItemMapper;
import com.yizhi.drools.application.service.IRecommendRuleItemService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class RecommendRuleItemServiceImpl extends ServiceImpl<RecommendRuleItemMapper, RecommendRuleItem> implements IRecommendRuleItemService {
@Override
public List<RecommendRuleItem> listByRuleId(Long ruleId, String business) {
return this.baseMapper.listByRuleId(ruleId, business);
}
}
package com.yizhi.drools.application.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.toolkit.StringUtils;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.drools.application.constant.DroolsConstants;
import com.yizhi.drools.application.domain.RecommendRule;
import com.yizhi.drools.application.domain.RecommendRuleItem;
import com.yizhi.drools.application.domain.RecommendStrategyRule;
import com.yizhi.drools.application.mapper.RecommendRuleItemMapper;
import com.yizhi.drools.application.mapper.RecommendRuleMapper;
import com.yizhi.drools.application.service.IRecommendRuleItemService;
import com.yizhi.drools.application.service.IRecommendRuleService;
import com.yizhi.drools.application.service.IRecommendStrategyRuleService;
import com.yizhi.drools.application.util.ContextUtil;
import com.yizhi.drools.application.vo.manage.RuleItemVo;
import com.yizhi.drools.application.vo.manage.RuleVo;
import com.yizhi.system.application.system.remote.AccountClient;
import com.yizhi.system.application.vo.DroolsAccountVO;
import com.yizhi.system.application.vo.RuleVisibleRangeVo;
import com.yizhi.system.application.vo.SystemRuleItemVo;
import com.yizhi.util.application.page.PageInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yizhi.application.orm.id.IdGenerator;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class RecommendRuleServiceImpl extends ServiceImpl<RecommendRuleMapper, RecommendRule> implements IRecommendRuleService {
@Autowired
private IdGenerator idGenerator;
@Autowired
private IRecommendRuleItemService ruleItemService;
@Autowired
private RecommendRuleItemMapper ruleItemMapper;
@Autowired
private IRecommendStrategyRuleService strategyRuleService;
@Autowired
private AccountClient accountClient;
@Override
public Long insert(RuleVo ruleVo, Integer isTemplate) {
RecommendRule rule = new RecommendRule();
rule.setName(ruleVo.getName());
rule.setId(idGenerator.generate());
rule.setDeleted(DroolsConstants.DELETED_NO);
rule.setTemplate(isTemplate);
rule.setType(ruleVo.getType());
ContextUtil.buildTenantEntity4Insert(rule);
if (rule.insert()) {
ruleSaveThenDealRuleItem(ruleVo, rule.getId());
}
return rule.getId();
}
@Override
public Long update(RuleVo ruleVo, Integer isTemplate) {
RecommendRule rule = new RecommendRule();
rule.setId(ruleVo.getId());
rule.setName(ruleVo.getName());
rule.setDeleted(DroolsConstants.DELETED_NO);
rule.setTemplate(isTemplate);
rule.setType(ruleVo.getType());
// 修改rule
int num = this.baseMapper.updateById(rule);
if (num == 1) {
// 删除以前的 ruleItem
EntityWrapper ew = new EntityWrapper();
ew.eq("rule_id", rule.getId());
int ruleItemDelNum = ruleItemMapper.delete(ew);
ruleSaveThenDealRuleItem(ruleVo, rule.getId());
}
return rule.getId();
}
@Override
public Page<RecommendRule> selectPageByTypeAndName(Page<RecommendRule> page, Integer type, String name) {
RecommendRule rule = new RecommendRule();
ContextUtil.buildTenantEntity4Select(rule);
rule.setType(type);
rule.setTemplate(DroolsConstants.TEMPLATE_YES);
EntityWrapper<RecommendRule> ew = new EntityWrapper<>(rule);
if (StringUtils.isNotEmpty(name)) {
ew.like("name", name);
}
ew.orderBy("create_time", false);
ew.orderBy("update_time", false);
page = rule.selectPage(page, ew);
return page;
}
@Override
public List<RuleVo> listRuleVosByStrategyId(Long strategyId, boolean withClassName, String business) {
List<RecommendStrategyRule> strategyRuleList = strategyRuleService.listByStrategyId(strategyId);
List<RuleVo> ruleVos = new ArrayList<>();
if (!org.springframework.util.CollectionUtils.isEmpty(strategyRuleList)) {
strategyRuleList.forEach(strategyRule -> {
RecommendRule rule = this.baseMapper.selectById(strategyRule.getRuleId());
if (rule != null) {
// 组装 ruleVo
RuleVo ruleVo = new RuleVo();
ruleVo.setAndOr(strategyRule.getAndOr());
ruleVo.setType(rule.getType());
ruleVo.setTemplate(DroolsConstants.TEMPLATE_YES.equals(rule.getTemplate()));
ruleVo.setName(rule.getName());
ruleVo.setSort(strategyRule.getSort());
if (rule.getTemplate().equals(DroolsConstants.RULE_TYPE_CONTENT)) {
ruleVo.setQuoteRuleId(rule.getId());
}
// 组装 ruleItemVo
List<RecommendRuleItem> ruleItemList = ruleItemService.listByRuleId(rule.getId(), business);
if (!org.springframework.util.CollectionUtils.isEmpty(ruleItemList)) {
List<RuleItemVo> list = new ArrayList<>(ruleItemList.size());
ruleItemList.forEach(ruleItem -> {
RuleItemVo vo = new RuleItemVo();
vo.setSort(ruleItem.getSort());
vo.setAndOr(ruleItem.getAndOr());
vo.setBusiness(ruleItem.getBusiness());
vo.setProperty(ruleItem.getPropertyName());
vo.setRelation(ruleItem.getRelation());
vo.setValue(ruleItem.getTargetVal());
vo.setName(ruleItem.getName());
if (withClassName) {
vo.setBusinessClassName(ruleItem.getClassName());
}
list.add(vo);
});
ruleVo.setList(list);
}
ruleVos.add(ruleVo);
}
});
}
return ruleVos;
}
@Override
public boolean copy(Long ruleId) {
String currentTimeStr = "-复制-".concat(String.valueOf(System.currentTimeMillis()));
RecommendRule ruleTarget;
List<RecommendRule> ruleListTarget = new ArrayList<>();
List<RecommendRuleItem> ruleItemListTarget = new ArrayList<>();
RecommendRule rule = this.baseMapper.selectById(ruleId);
if (rule != null) {
// 复制 rule
ruleTarget = copyRule(currentTimeStr, rule);
ruleListTarget.add(ruleTarget);
// 复制 rule_item
ruleItemListTarget.addAll(copyRuleItem(rule.getId(), ruleTarget.getId()));
}
if (!CollectionUtils.isEmpty(ruleListTarget)) {
this.insertBatch(ruleListTarget);
}
if (!CollectionUtils.isEmpty(ruleItemListTarget)) {
ruleItemService.insertBatch(ruleItemListTarget);
}
return true;
}
/**
* 修改,新增 rule 时的 ruleItem保存
*
* @param ruleVo
* @param ruleId
* @return
*/
private boolean ruleSaveThenDealRuleItem(RuleVo ruleVo, long ruleId) {
List<RuleItemVo> list = ruleVo.getList();
if (CollectionUtils.isEmpty(list)) {
return true;
}
List<RecommendRuleItem> ruleItems = new ArrayList<>(list.size());
// 组装每一个ruleItem
for (RuleItemVo templateSave : list) {
RecommendRuleItem ruleItem = new RecommendRuleItem();
ruleItem.setRuleId(ruleId);
ruleItem.setBusiness(templateSave.getBusiness());
ruleItem.setRelation(templateSave.getRelation());
ruleItem.setDeleted(DroolsConstants.DELETED_NO);
ruleItem.setId(idGenerator.generate());
ruleItem.setAndOr(templateSave.getSort().equals(1) ? DroolsConstants.AND : templateSave.getAndOr());
ruleItem.setPropertyName(templateSave.getProperty());
ruleItem.setSort(templateSave.getSort());
ruleItem.setTargetVal(templateSave.getValue());
ruleItem.setType(ruleVo.getType());
ruleItem.setName(templateSave.getName());
if (ruleItem.getType().equals(DroolsConstants.RULE_TYPE_CONTENT)) {
ruleItem.setClassName(templateSave.getBusiness());
} else {
ruleItem.setClassName(DroolsConstants.BUSINESS_CLASS_NAME_USER);
ruleItem.setBusiness("account");
}
ContextUtil.buildTenantEntity4Insert(ruleItem);
ruleItems.add(ruleItem);
}
if (!CollectionUtils.isEmpty(ruleItems)) {
return ruleItemService.insertBatch(ruleItems);
}
return false;
}
private RecommendRule copyRule(String currentTimeStr, RecommendRule origin) {
RecommendRule ruleTarget = new RecommendRule();
ruleTarget.setType(origin.getType());
ruleTarget.setDeleted(DroolsConstants.DELETED_NO);
ruleTarget.setId(idGenerator.generate());
ruleTarget.setTemplate(origin.getTemplate());
ruleTarget.setName(origin.getName().concat(currentTimeStr));
ContextUtil.buildTenantEntity4Insert(ruleTarget);
return ruleTarget;
}
private List<RecommendRuleItem> copyRuleItem(Long ruleId, Long ruleIdTarget) {
RecommendRuleItem ruleItem = new RecommendRuleItem();
ruleItem.setRuleId(ruleId);
ContextUtil.buildTenantEntity4Select(ruleItem);
List<RecommendRuleItem> ruleItemList = ruleItem.selectList(new EntityWrapper(ruleItem));
List<RecommendRuleItem> ruleItemListTarget = new ArrayList<>();
if (CollectionUtils.isNotEmpty(ruleItemList)) {
RecommendRuleItem ruleItemTarget = null;
for (RecommendRuleItem item : ruleItemList) {
ruleItemTarget = new RecommendRuleItem();
ruleItemTarget.setId(idGenerator.generate());
ruleItemTarget.setName(item.getName());
ruleItemTarget.setBusiness(item.getBusiness());
ruleItemTarget.setRuleId(ruleIdTarget);
ruleItemTarget.setAndOr(item.getAndOr());
ruleItemTarget.setClassName(item.getClassName());
ruleItemTarget.setDeleted(DroolsConstants.DELETED_NO);
ruleItemTarget.setPropertyName(item.getPropertyName());
ruleItemTarget.setRelation(item.getRelation());
ruleItemTarget.setSort(item.getSort());
ruleItemTarget.setTargetVal(item.getTargetVal());
ruleItemTarget.setType(item.getType());
ContextUtil.buildTenantEntity4Insert(ruleItemTarget);
ruleItemListTarget.add(ruleItemTarget);
}
}
return ruleItemListTarget;
}
@Override
public Page getVisibleRange(Long id, String keyword, Integer pageNo, Integer pageSize) {
RequestContext context = ContextHolder.get();
Page page = new Page(pageNo, pageSize);
List<RecommendRuleItem> items = ruleItemService.listByRuleId(id, null);
if (CollectionUtils.isNotEmpty(items)) {
RuleVisibleRangeVo rangeVo = new RuleVisibleRangeVo();
rangeVo.setKeyword(keyword);
rangeVo.setPageNo(pageNo);
rangeVo.setPageSize(pageSize);
rangeVo.setCompanyId(context.getCompanyId());
rangeVo.setSiteId(context.getSiteId());
List<SystemRuleItemVo> ruleItemVos = new ArrayList<>(items.size());
items.forEach(a -> {
//只获取用户规则的项
if (DroolsConstants.RULE_TYPE_USER.equals(a.getType())) {
SystemRuleItemVo vo = new SystemRuleItemVo();
BeanUtils.copyProperties(a, vo);
vo.setId(a.getId());
ruleItemVos.add(vo);
}
});
rangeVo.setRuleItemVos(ruleItemVos);
PageInfo<DroolsAccountVO> pageByDrools = accountClient.getPageByRuleItems(rangeVo);
page.setRecords(pageByDrools.getRecords());
page.setTotal(pageByDrools.getPageRecords());
}
return page;
}
// @Override
// public Map<String, QueryBuilder> builderQueryBuilder(Long id) {
// RecommendRuleItemVo ruleItem = new RecommendRuleItemVo();
// ContextUtil.buildTenantEntity4Select(ruleItem);
// EntityWrapper ew = new EntityWrapper(ruleItem);
// ew.eq("rule_id", id);
// ew.orderBy("sort");
//
// List<RecommendRuleItemVo> ruleItemList = this.baseMapper.selectList(ew);
// if (CollectionUtils.isNotEmpty(ruleItemList)) {
// QueryBuilder queryBuilder = QueryBuilders.boolQuery();
// ruleItemList.forEach(item -> {
// item.
//
//
// });
// }
//
//
//
//
// return null;
// }
}
package com.yizhi.drools.application.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.drools.application.domain.RecommendStrategyRule;
import com.yizhi.drools.application.mapper.RecommendStrategyRuleMapper;
import com.yizhi.drools.application.service.IRecommendStrategyRuleService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author shengchenglong123
* @since 2019-11-28
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class RecommendStrategyRuleServiceImpl extends ServiceImpl<RecommendStrategyRuleMapper, RecommendStrategyRule> implements IRecommendStrategyRuleService {
@Override
public List<Long> getRuleIds(Long strategyId) {
return this.baseMapper.getRuleIds(strategyId);
}
@Override
public List<RecommendStrategyRule> listByStrategyId(Long strategyId) {
return this.baseMapper.listByStrategyId(strategyId);
}
}
package com.yizhi.drools.application.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.drools.application.constant.DroolsConstants;
import com.yizhi.drools.application.domain.RecommendRule;
import com.yizhi.drools.application.domain.RecommendRuleItem;
import com.yizhi.drools.application.domain.RecommendStrategy;
import com.yizhi.drools.application.domain.RecommendStrategyRule;
import com.yizhi.drools.application.mapper.RecommendRuleMapper;
import com.yizhi.drools.application.mapper.RecommendStrategyMapper;
import com.yizhi.drools.application.service.IRecommendRuleItemService;
import com.yizhi.drools.application.service.IRecommendRuleService;
import com.yizhi.drools.application.service.IRecommendStrategyRuleService;
import com.yizhi.drools.application.service.IRecommendStrategyService;
import com.yizhi.drools.application.util.ContextUtil;
import com.yizhi.drools.application.vo.manage.RuleVo;
import com.yizhi.drools.application.vo.manage.StrategyPageVo;
import com.yizhi.drools.application.vo.manage.StrategyVo;
import com.yizhi.system.application.system.remote.AccountClient;
import com.yizhi.system.application.vo.DroolsAccountVO;
import com.yizhi.system.application.vo.RuleVisibleRangeVo;
import com.yizhi.system.application.vo.SystemRuleItemVo;
import com.yizhi.util.application.page.PageInfo;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务实现类
* </p>
*
* @author shengchenglong123
* @since 2019-11-27
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class RecommendStrategyServiceImpl extends ServiceImpl<RecommendStrategyMapper, RecommendStrategy> implements IRecommendStrategyService {
@Autowired
private IdGenerator idGenerator;
@Autowired
private IRecommendRuleService ruleService;
@Autowired
private RecommendRuleMapper ruleMapper;
@Autowired
private IRecommendStrategyRuleService strategyRuleService;
@Autowired
private IRecommendRuleItemService ruleItemService;
@Autowired
private RecommendStrategyMapper strategyMapper;
@Autowired
private AccountClient accountClient;
@Override
public boolean save(StrategyVo strategyVo) throws Exception {
RecommendStrategy strategy = new RecommendStrategy();
ContextUtil.buildTenantEntity4Insert(strategy);
strategy.setDeleted(DroolsConstants.DELETED_NO);
strategy.setName(strategyVo.getStrategyName());
strategy.setTimeType(strategyVo.getTimeType());
// 自定义时间
if (strategy.getTimeType().equals(DroolsConstants.STRATEGY_TIME_CUSTOM)) {
strategy.setStartTime(strategyVo.getStartTime());
strategy.setEndTime(strategyVo.getEndTime());
}
Long oldId = strategyVo.getId();
boolean flag;
// 修改
if (oldId != null) {
strategy.setId(oldId);
flag = strategyMapper.updateById(strategy).equals(1);
if (flag) {
// 查出之前关联的 rule
List<Long> ruleIds = strategyRuleService.getRuleIds(oldId);
if (!CollectionUtils.isEmpty(ruleIds)) {
// 删除 strategy-rule 关联
EntityWrapper ew = new EntityWrapper();
ew.eq("strategy_id", oldId);
flag = flag && strategyRuleService.delete(ew);
// 删除 非模板的 rule
ew = new EntityWrapper();
ew.in("id", ruleIds);
ew.eq("template", DroolsConstants.TEMPLATE_NO);
flag = flag && ruleService.delete(ew);
// 删除 非模板的 ruleItem
ruleIds = ruleMapper.listTemplateYesOrNoRuleIds(ruleIds, DroolsConstants.TEMPLATE_NO);
if (!CollectionUtils.isEmpty(ruleIds)) {
ew = new EntityWrapper();
ew.in("rule_id", ruleIds);
flag = flag && ruleItemService.delete(ew);
}
}
}
}
// 新增
else {
strategy.setId(idGenerator.generate());
flag = strategyMapper.insert(strategy).equals(1);
}
// 插入 rule
if (flag) {
// 插入规则
List<RuleVo> ruleVos = strategyVo.getRuleVos();
List<RecommendStrategyRule> strategyRules = new ArrayList<>();
Long ruleId;
RecommendStrategyRule strategyRule;
for (RuleVo ruleVo : ruleVos) {
// 如果该规则是引用的
if (ruleVo.getQuoteRuleId() != null) {
ruleId = ruleVo.getQuoteRuleId();
}
// 否则是新增的规则
else {
ruleId = ruleService.insert(ruleVo, DroolsConstants.TEMPLATE_NO);
if (ruleId == null) {
throw new Exception("---------------- 插入规则时,失败 ----------------");
}
}
// 组装 策略与规则的关联关系
strategyRule = new RecommendStrategyRule();
ContextUtil.buildTenantEntity4Insert(strategyRule);
strategyRule.setStrategyId(strategy.getId());
strategyRule.setId(idGenerator.generate());
strategyRule.setAndOr(ruleVo.getSort().equals(1) ? DroolsConstants.AND : ruleVo.getAndOr());
strategyRule.setDeleted(DroolsConstants.DELETED_NO);
strategyRule.setRuleId(ruleId);
strategyRule.setSort(ruleVo.getSort());
strategyRules.add(strategyRule);
}
// 插入 策略与规则的关联关系
return strategyRuleService.insertBatch(strategyRules);
}
return false;
}
@Override
public boolean copy(Long id) throws Exception {
RecommendStrategy strategy = new RecommendStrategy();
strategy.setId(id);
strategy = strategy.selectById();
if (strategy == null) {
throw new Exception("该id不存在");
}
// 1. 复制策略
String currentTimeStr = "-复制-".concat(String.valueOf(System.currentTimeMillis()));
RecommendStrategy strategyTarget = new RecommendStrategy();
// BeanUtils.copyProperties(strategyTarget, strategy);
BeanUtils.copyProperties(strategy, strategyTarget);
strategyTarget.setId(idGenerator.generate());
strategyTarget.setName(strategyTarget.getName().concat(currentTimeStr));
strategyTarget.setCreateById(null);
strategyTarget.setCreateTime(null);
strategyTarget.setCreateByName(null);
strategyTarget.setUpdateById(null);
strategyTarget.setUpdateByName(null);
strategyTarget.setUpdateTime(null);
ContextUtil.buildTenantEntity4Insert(strategyTarget);
// 2. 复制相关的 rule 和 ruleItem
RecommendStrategyRule strategyRule = new RecommendStrategyRule();
strategyRule.setStrategyId(id);
EntityWrapper<RecommendStrategyRule> ew = new EntityWrapper<>(strategyRule);
List<RecommendStrategyRule> strategyRuleList = strategyRule.selectList(ew);
List<RecommendStrategyRule> strategyRuleListTarget = new ArrayList<>();
List<RecommendRule> ruleListTarget = new ArrayList<>();
List<RecommendRuleItem> ruleItemListTarget = new ArrayList<>();
if (!CollectionUtils.isEmpty(strategyRuleList)) {
RecommendRule rule;
RecommendRule ruleTarget;
for (RecommendStrategyRule strategyRule4 : strategyRuleList) {
rule = ruleService.selectById(strategyRule4.getRuleId());
if (rule != null) {
// 2.1 如果不是模板的话
if (rule.getTemplate().equals(DroolsConstants.TEMPLATE_NO)) {
// 复制 rule
ruleTarget = copyRule(currentTimeStr, rule);
ruleListTarget.add(ruleTarget);
// 复制 rule_item
ruleItemListTarget.addAll(copyRuleItem(rule.getId(), ruleTarget.getId()));
// 复制一条关联关系
strategyRuleListTarget.add(copyStrategyRule(strategyTarget.getId(), strategyRule4, ruleTarget.getId()));
}
// 2.2 如果不是模板的话
else {
strategyRuleListTarget.add(copyStrategyRule(strategyTarget.getId(), strategyRule4, rule.getId()));
}
}
}
}
strategyTarget.insert();
if (!CollectionUtils.isEmpty(ruleListTarget)) {
ruleService.insertBatch(ruleListTarget);
}
if (!CollectionUtils.isEmpty(strategyRuleListTarget)) {
strategyRuleService.insertBatch(strategyRuleListTarget);
}
if (!CollectionUtils.isEmpty(ruleItemListTarget)) {
ruleItemService.insertBatch(ruleItemListTarget);
}
return true;
}
@Override
public boolean delete(Long id) {
int num = this.baseMapper.deleteById(id);
if (num == 1) {
EntityWrapper ew = new EntityWrapper();
ew.eq("strategy_id", id);
boolean flag = strategyRuleService.delete(ew);
return flag;
}
return true;
}
@Override
public Page<StrategyPageVo> pageByNameAndRuleId(String name, Long ruleId, Page page) {
List<RecommendStrategy> list = this.baseMapper.listByNameAndRuleId(name, ruleId, new RowBounds(page.getOffset(), page.getLimit()));
page.setRecords(list);
page.setTotal(this.baseMapper.countListByNameAndRuleId(name, ruleId));
return page;
}
private RecommendStrategyRule copyStrategyRule(Long strategyId, RecommendStrategyRule origin, Long ruleId) {
RecommendStrategyRule sr = new RecommendStrategyRule();
sr.setStrategyId(strategyId);
sr.setSort(origin.getSort());
sr.setRuleId(ruleId);
sr.setDeleted(DroolsConstants.DELETED_NO);
sr.setAndOr(origin.getAndOr());
sr.setId(idGenerator.generate());
return sr;
}
private RecommendRule copyRule(String currentTimeStr, RecommendRule origin) {
RecommendRule ruleTarget = new RecommendRule();
ruleTarget.setType(origin.getType());
ruleTarget.setDeleted(DroolsConstants.DELETED_NO);
ruleTarget.setId(idGenerator.generate());
ruleTarget.setTemplate(origin.getTemplate());
ruleTarget.setName(origin.getName().concat(currentTimeStr));
ContextUtil.buildTenantEntity4Insert(ruleTarget);
return ruleTarget;
}
private List<RecommendRuleItem> copyRuleItem(Long ruleId, Long ruleIdTarget) {
RecommendRuleItem ruleItem = new RecommendRuleItem();
ruleItem.setRuleId(ruleId);
ContextUtil.buildTenantEntity4Select(ruleItem);
List<RecommendRuleItem> ruleItemList = ruleItem.selectList(new EntityWrapper(ruleItem));
List<RecommendRuleItem> ruleItemListTarget = new ArrayList<>();
if (!CollectionUtils.isEmpty(ruleItemList)) {
for (RecommendRuleItem item : ruleItemList) {
RecommendRuleItem ruleItemTarget = new RecommendRuleItem();
ruleItemTarget.setId(idGenerator.generate());
ruleItemTarget.setBusiness(item.getBusiness());
ruleItemTarget.setName(item.getName());
ruleItemTarget.setRuleId(ruleIdTarget);
ruleItemTarget.setAndOr(item.getAndOr());
ruleItemTarget.setClassName(item.getClassName());
ruleItemTarget.setDeleted(DroolsConstants.DELETED_NO);
ruleItemTarget.setPropertyName(item.getPropertyName());
ruleItemTarget.setRelation(item.getRelation());
ruleItemTarget.setSort(item.getSort());
ruleItemTarget.setTargetVal(item.getTargetVal());
ruleItemTarget.setType(item.getType());
ContextUtil.buildTenantEntity4Insert(ruleItemTarget);
ruleItemListTarget.add(ruleItemTarget);
}
}
return ruleItemListTarget;
}
@Override
public Page getVisibleRange(Long id, String keyword, Integer pageNo, Integer pageSize) {
Page page = new Page(pageNo, pageSize);
Map<Long, String> map = new HashMap();
List<Long> ruleIds = null;
List<RecommendStrategyRule> recommendStrategyRules = this.strategyRuleService.listByStrategyId(id);
if (!CollectionUtils.isEmpty(recommendStrategyRules)) {
ruleIds = new ArrayList<>(recommendStrategyRules.size());
for (RecommendStrategyRule a : recommendStrategyRules) {
if (!map.containsKey(a.getRuleId())) {
map.put(a.getRuleId(), a.getAndOr());
}
ruleIds.add(a.getRuleId());
}
}
if (!CollectionUtils.isEmpty(ruleIds)) {
RequestContext context = ContextHolder.get();
RuleVisibleRangeVo rangeVo = new RuleVisibleRangeVo();
rangeVo.setKeyword(keyword);
rangeVo.setPageNo(pageNo);
rangeVo.setPageSize(pageSize);
rangeVo.setCompanyId(context.getCompanyId());
rangeVo.setSiteId(context.getSiteId());
rangeVo.setIsStrategy(true);
List<SystemRuleItemVo> ruleItemVos = new ArrayList<>();
for (Long ruleId : ruleIds) {
List<RecommendRuleItem> items = ruleItemService.listByRuleId(ruleId, null);
if (!CollectionUtils.isEmpty(items)) {
items.forEach(a -> {
//只获取用户规则的项
if (a.getType() == 2) {
SystemRuleItemVo vo = new SystemRuleItemVo();
BeanUtils.copyProperties(a, vo);
vo.setId(a.getId());
vo.setRulesAndOr(map.get(a.getRuleId()));
ruleItemVos.add(vo);
}
});
}
}
rangeVo.setRuleItemVos(ruleItemVos);
PageInfo<DroolsAccountVO> pageByDrools = accountClient.getPageByRuleItems(rangeVo);
page.setRecords(pageByDrools.getRecords());
page.setTotal(pageByDrools.getPageRecords());
}
return page;
}
}
\ No newline at end of file
package com.yizhi.drools.application.util;
import com.baomidou.mybatisplus.annotations.TableField;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import lombok.extern.slf4j.Slf4j;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @ClassName ContextUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-04 14:06
* @Version 1.0
*/
@Slf4j
public class ContextUtil {
/**
* 拼装 orgId,siteId,companyId
* @param o
*/
public static void buildTenantEntity4Insert(Object o) {
RequestContext context = ContextHolder.get();
if (context == null) {
context = new RequestContext();
context.setOrgId(0L);
context.setSiteId(0L);
context.setCompanyId(0L);
}
try {
Class clazz = o.getClass();
// orgId
Field field = clazz.getDeclaredField("orgId");
Annotation annotation = field.getAnnotation(TableField.class);
Method method;
if (annotation != null) {
method = clazz.getMethod("setOrgId", Long.class);
method.invoke(o, context.getOrgId());
}
// siteId
field = clazz.getDeclaredField("siteId");
annotation = field.getAnnotation(TableField.class);
if (annotation != null) {
method = clazz.getMethod("setSiteId", Long.class);
method.invoke(o, context.getSiteId());
}
// companyId
field = clazz.getDeclaredField("companyId");
annotation = field.getAnnotation(TableField.class);
if (annotation != null) {
method = clazz.getMethod("setCompanyId", Long.class);
method.invoke(o, context.getCompanyId());
}
} catch (NoSuchFieldException e) {
log.info(e.getLocalizedMessage());
} catch (NoSuchMethodException e) {
log.info(e.getLocalizedMessage());
} catch (IllegalAccessException e) {
log.info(e.getLocalizedMessage());
} catch (InvocationTargetException e) {
log.info(e.getLocalizedMessage());
}
}
/**
* 拼装 siteId,companyId
* @param o
*/
public static void buildTenantEntity4Select(Object o) {
RequestContext context = ContextHolder.get();
if (context == null) {
context = new RequestContext();
context.setSiteId(0L);
context.setCompanyId(0L);
}
try {
Class clazz = o.getClass();
// siteId
Field field = clazz.getDeclaredField("siteId");
Annotation annotation = field.getAnnotation(TableField.class);
Method method;
if (annotation != null) {
method = clazz.getMethod("setSiteId", Long.class);
method.invoke(o, context.getSiteId());
}
// companyId
field = clazz.getDeclaredField("companyId");
annotation = field.getAnnotation(TableField.class);
if (annotation != null) {
method = clazz.getMethod("setCompanyId", Long.class);
method.invoke(o, context.getCompanyId());
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
package com.yizhi.drools.application.util;
/**
* @ClassName QueryBuilderUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-30 10:39
* @Version 1.0
*/
public class QueryBuilderUtil {
}
package com.yizhi.drools.application.util;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.util.application.domain.Response;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassName ResponstUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2019-12-04 15:00
* @Version 1.0
*/
public class ResponseUtil {
public static Response pageResponse4PageParam(Page originPage, List records) {
Map<String, Integer> pageMap = new HashMap<>();
pageMap.put("pageNo", originPage.getCurrent());
pageMap.put("pageSize", originPage.getSize());
pageMap.put("pageTotal", originPage.getTotal());
return Response.ok(records, pageMap);
}
}
<?xml version="1.0" encoding="utf-8" ?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="recommend" packages="rules.recommend">
<ksession name="recommend"/>
</kbase>
</kmodule>
\ No newline at end of file
server.port=35900
spring.application.name=rules
ACTIVE=${spring.profiles.active}
spring.profiles.active=prod
# nacos
spring.cloud.nacos.config.shared-dataids=common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace=${spring.profiles.active}
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.server-addr=192.168.0.203:8848
\ No newline at end of file
{
"business": {
"course": "课程",
"trainingProject": "学习项目",
"exam": "考试",
"assignment": "作业",
"research": "调研",
"live": "直播",
"case": "作品",
"caseActivity": "原创活动",
"album": "专辑"
},
"property": {
"course": {
"name": "名称",
"code": "编码",
"classify": "分类",
"keyword": "关键词",
"all": "全部"
},
"trainingProject": {
"name": "名称",
"classify": "分类",
"keyword": "关键词",
"all": "全部"
},
"exam": {
"name": "名称",
"keyword": "关键词",
"all": "全部"
},
"assignment": {
"name": "名称",
"keyword": "关键词",
"all": "全部"
},
"research": {
"name": "名称",
"keyword": "关键词",
"all": "全部"
},
"live": {
"name": "主题",
"code": "直播号",
"keyword": "关键词",
"anchorName": "主播名称",
"all": "全部"
},
"case": {
"name": "名称",
"classify": "分类",
"keyword": "关键词",
"belongCaseActivity": "所属案例活动",
"author": "作者",
"all": "全部"
},
"caseActivity": {
"name": "名称",
"classify": "分类",
"keyword": "关键词",
"all": "全部"
},
"album": {
"name": "名称",
"classify": "分类",
"keyword": "关键词",
"all": "全部"
},
"user": {
"fullName": "姓名",
"duty": "职务",
"org": "所在部门",
"remark1": "备注1",
"remark2": "备注2",
"remark3": "备注3",
"all": "全部"
}
},
"relation": {
"contains": "包含",
"notContains": "不包含",
"equals": "等于",
"notEquals": "不等于"
}
}
\ No newline at end of file
package rules.recommend
import com.fulan.application.domain.RecommendRule
rule "course"
when
then
end
package com.fulan.application;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.drools.application.controller.manage.RecommendRuleController;
import com.yizhi.drools.application.controller.manage.RecommendStrategyController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: shengchenglong
* @Date: 2018/6/6 10:07
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class CloudDroolsApplicationTest {
@Autowired
private RecommendRuleController recommendRuleController;
@Autowired
private RecommendStrategyController strategyController;
@Test
public void test1() {
// 获取json
// recommendRuleController.getJson();
// 规则引用
// recommendRuleController.ruleQuotePage(1, "st", 1, 10);
ArrayList<Long> ids = new ArrayList<>();
ids.add(1211644153810829312L);
// recommendRuleController.getContentRuleById(ids);
// recommendRuleController.businessVo4Portal(ids);
}
@Test
public void test2() {
// recommendRuleController.page(1, null, 1, 10);
// strategyController.listPage(null, null, null, 2, 1);
// recommendRuleController.strategyPage(1209094208227037184L, null, 1, 10);
Map<String, String> map = new HashMap<>();
map.put("id", "1209068925532950529");
RequestContext context = new RequestContext();
context.setCompanyId(0L);
context.setSiteId(0L);
context.setOrgId(0L);
recommendRuleController.copy((HashMap<String, String>) map);
}
}
package com.fulan.application;
import com.yizhi.drools.application.vo.manage.RuleItemVo;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @Author: shengchenglong
* @Date: 2018/6/6 10:07
*/
public class SingleTest {
@Test
public void test1() {
RuleItemVo save = new RuleItemVo();
save.setSort(0);
RuleItemVo save1 = new RuleItemVo();
save1.setSort(9);
RuleItemVo save2 = new RuleItemVo();
save2.setSort(3);
List<RuleItemVo> saves = new ArrayList<>();
saves.add(save);
saves.add(save1);
saves.add(save2);
Collections.sort(saves);
System.out.println(saves);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.yizhi</groupId>
<artifactId>wmy-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.yizhi</groupId>
<artifactId>cloud-drools</artifactId>
<version>1.0-SNAPSHOT</version>
<name>cloud-drools</name>
<packaging>pom</packaging>
<description>cloud-drools</description>
<modules>
<module>cloud-drools-api</module>
<module>cloud-drools-service</module>
</modules>
<repositories>
<repository>
<id>wmy4.0</id>
<url>http://mvn.km365.pw/nexus/content/groups/wmy4.0-group/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment