diff --git a/io.sc.algorithm.weka/build.gradle b/io.sc.algorithm.weka/build.gradle new file mode 100644 index 00000000..71d55bd6 --- /dev/null +++ b/io.sc.algorithm.weka/build.gradle @@ -0,0 +1,6 @@ +dependencies { + api( + "nz.ac.waikato.cms.weka:weka-stable:${weka_version}", + project(":io.sc.platform.core"), + ) +} diff --git a/io.sc.engine.st.frontend/src/views/DepFactor/DepFactor.vue b/io.sc.engine.st.frontend/src/views/DepFactor/DepFactor.vue new file mode 100644 index 00000000..2e1b4216 --- /dev/null +++ b/io.sc.engine.st.frontend/src/views/DepFactor/DepFactor.vue @@ -0,0 +1,189 @@ + + diff --git a/io.sc.engine.st.frontend/src/views/DepFactor/DepFactorDefine.vue b/io.sc.engine.st.frontend/src/views/DepFactor/DepFactorDefine.vue new file mode 100644 index 00000000..fb6126fb --- /dev/null +++ b/io.sc.engine.st.frontend/src/views/DepFactor/DepFactorDefine.vue @@ -0,0 +1,267 @@ + + diff --git a/io.sc.engine.st.frontend/src/views/EAD.vue b/io.sc.engine.st.frontend/src/views/EAD.vue deleted file mode 100644 index e5ed12b4..00000000 --- a/io.sc.engine.st.frontend/src/views/EAD.vue +++ /dev/null @@ -1,122 +0,0 @@ - - diff --git a/io.sc.engine.st.frontend/src/views/EconomicIndicator.vue b/io.sc.engine.st.frontend/src/views/EconomicIndicator.vue deleted file mode 100644 index 0eb63140..00000000 --- a/io.sc.engine.st.frontend/src/views/EconomicIndicator.vue +++ /dev/null @@ -1,160 +0,0 @@ - - diff --git a/io.sc.engine.st/build.gradle b/io.sc.engine.st/build.gradle index fce47b71..e88433e6 100644 --- a/io.sc.engine.st/build.gradle +++ b/io.sc.engine.st/build.gradle @@ -1,6 +1,8 @@ dependencies { api( + project(":io.sc.algorithm.weka"), project(":io.sc.platform.core"), + project(":io.sc.platform.groovy"), project(":io.sc.platform.orm"), project(":io.sc.platform.mvc"), diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/controller/DepFactorWebController.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/controller/DepFactorWebController.java new file mode 100644 index 00000000..669158f6 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/controller/DepFactorWebController.java @@ -0,0 +1,25 @@ +package io.sc.engine.st.controller; + +import io.sc.engine.st.jpa.entity.DepFactorEntity; +import io.sc.engine.st.jpa.repository.DepFactorRepository; +import io.sc.engine.st.service.DepFactorService; +import io.sc.engine.st.vo.DepFactorVo; +import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.orm.service.support.QueryResult; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@RestController("io.sc.engine.st.controller.DepFactorWebController") +@RequestMapping("/api/st/depFactor") +public class DepFactorWebController extends RestCrudController { + @Override + protected Page query(HttpServletRequest request, HttpServletResponse response, QueryParameter queryParameter) throws Exception { + String defineId =request.getParameter("defineId"); + return QueryResult.page(service.findByFactorDefineId(defineId)); + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/DepFactorDefineEntity.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/DepFactorDefineEntity.java new file mode 100644 index 00000000..4403d778 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/DepFactorDefineEntity.java @@ -0,0 +1,206 @@ +package io.sc.engine.st.jpa.entity; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.sc.engine.st.enums.FactorDefineType; +import io.sc.engine.st.enums.Period; +import io.sc.engine.st.enums.ValueType; +import io.sc.engine.st.jpa.entity.sub.*; +import io.sc.engine.st.vo.DepFactorDefineVo; +import io.sc.platform.core.util.DateUtil; +import io.sc.platform.orm.api.validator.ValidatorMessage; +import io.sc.platform.orm.api.validator.ValidatorRegExp; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.math.BigDecimal; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +@Entity(name="io.sc.engine.st.jpa.entity.DepFactorDefineEntity") +@Table(name="ST_DEP_FACTOR_DEF") +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name="TYPE_",discriminatorType=DiscriminatorType.STRING,length=20) +@JsonIgnoreProperties(ignoreUnknown=true) +@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type",visible=true,defaultImpl = DepFolderEntity.class ) +@JsonSubTypes({ + @JsonSubTypes.Type(value = DepFolderEntity.class, name = "FOLDER"), + @JsonSubTypes.Type(value = DepOriginalFactorDefineEntity.class, name = "ORIGINAL"), + @JsonSubTypes.Type(value = DepArithmeticFactorDefineEntity.class, name = "EXTEND_ARITHMETIC"), + @JsonSubTypes.Type(value = DepDelayFactorDefineEntity.class, name = "EXTEND_DELAY"), + @JsonSubTypes.Type(value = DepDifferentialFactorDefineEntity.class, name = "EXTEND_DIFFERENTIAL") +}) +public class DepFactorDefineEntity extends CorporationAuditorEntity { + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_", length=36) + @Size(max=36) + protected String id; + + // 类型 + @Column(name="TYPE_",insertable=false,updatable=false) + @Enumerated(EnumType.STRING) + protected FactorDefineType type; + + // 代码 + @Column(name="CODE_", length=255) + @Size(max=255) + @Pattern(regexp = ValidatorRegExp.ID,message = ValidatorMessage.ID) + protected String code; + + // 名称 + @Column(name="NAME_", length=255) + @NotBlank + @Size(max=255) + protected String name; + + // 描述 + @Column(name="DESCRIPTION_", length=255) + @Size(max=255) + protected String description; + + // 顺序 + @Column(name="ORDER_") + protected Integer order; + + // 周期 + @Column(name="PERIOD_", length=20) + @Enumerated(EnumType.STRING) + protected Period period; + + // 值类型 + @Column(name="VALUE_TYPE_", length=20) + @Enumerated(EnumType.STRING) + protected ValueType valueType; + + // 父 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "PARENT_ID_") + protected DepFactorDefineEntity parent; + + @OneToMany(mappedBy="define",fetch = FetchType.LAZY) + @OrderBy("year,quarter,month") + protected List factors =new ArrayList<>(); + + public Object convertValue(String value) throws ParseException { + if(value==null){ + return null; + } + switch (valueType){ + case NUMERIC: + return new BigDecimal(value); + case STRING: + return value; + case DATE: + return DateUtil.tryParseDate(value); + default: + return value; + } + } + @Override + public void toVo(DepFactorDefineVo vo) { + if(vo!=null){ + vo.setType(this.getType()); + vo.setId(this.getId()); + vo.setCode(this.getCode()); + vo.setName(this.getName()); + vo.setDescription(this.getDescription()); + vo.setOrder(this.getOrder()); + vo.setPeriod(this.getPeriod()); + vo.setValueType(this.getValueType()); + vo.setParent(this.getParent()==null?null:this.getParent().getId()); + } + } + + public DepFactorDefineEntity(){} + public DepFactorDefineEntity(String id){ + this.id =id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public FactorDefineType getType() { + return type; + } + + public void setType(FactorDefineType type) { + this.type = type; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + public Period getPeriod() { + return period; + } + + public void setPeriod(Period period) { + this.period = period; + } + + public ValueType getValueType() { + return valueType; + } + + public void setValueType(ValueType valueType) { + this.valueType = valueType; + } + + public DepFactorDefineEntity getParent() { + return parent; + } + + public void setParent(DepFactorDefineEntity parent) { + this.parent = parent; + } + + public List getFactors() { + return factors; + } + + public void setFactors(List factors) { + this.factors = factors; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/DepFactorEntity.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/DepFactorEntity.java new file mode 100644 index 00000000..3531ed1e --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/DepFactorEntity.java @@ -0,0 +1,107 @@ +package io.sc.engine.st.jpa.entity; + +import io.sc.engine.st.support.PeriodWrapper; +import io.sc.engine.st.vo.DepFactorVo; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +@Entity(name="io.sc.engine.st.jpa.entity.DepFactorEntity") +@Table(name="ST_DEP_FACTOR") +public class DepFactorEntity extends CorporationAuditorEntity { + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_", length=36) + @Size(max=36) + protected String id; + + @Column(name="YEAR_") + protected Integer year; + + @Column(name="QUARTER_") + protected Integer quarter; + + @Column(name="MONTH_") + protected Integer month; + + @Column(name="VALUE_", length=255) + @Size(max=255) + protected String value; + + @ManyToOne(fetch=FetchType.LAZY) + @JoinColumn(name="DEF_ID_") + protected DepFactorDefineEntity define; + + public PeriodWrapper calUniqueKey(){ + return new PeriodWrapper(year,quarter,month); + } + + @Override + public DepFactorVo toVo() { + DepFactorVo vo =new DepFactorVo(); + super.toVo(vo); + vo.setId(this.getId()); + vo.setYear(this.getYear()); + vo.setQuarter(this.getQuarter()); + vo.setMonth(this.getMonth()); + vo.setValue(this.getValue()); + vo.setDefine(this.getDefine()==null?null:this.getDefine().getId()); + return vo; + } + + public DepFactorEntity(){} + public DepFactorEntity(String id){ + this.id =id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } + + public Integer getQuarter() { + return quarter; + } + + public void setQuarter(Integer quarter) { + this.quarter = quarter; + } + + public Integer getMonth() { + return month; + } + + public void setMonth(Integer month) { + this.month = month; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public DepFactorDefineEntity getDefine() { + return define; + } + + public void setDefine(DepFactorDefineEntity define) { + this.define = define; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/EconomicIndicatorEntity.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/EconomicIndicatorEntity.java deleted file mode 100644 index 1374f56b..00000000 --- a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/EconomicIndicatorEntity.java +++ /dev/null @@ -1,157 +0,0 @@ -package io.sc.engine.st.jpa.entity; - -import io.sc.engine.st.enums.StatisticalPeriodType; -import io.sc.engine.st.vo.EconomicIndicatorVo; -import io.sc.platform.orm.entity.CorporationAuditorEntity; -import org.hibernate.annotations.GenericGenerator; - -import javax.persistence.*; -import javax.validation.constraints.Size; - -@Entity(name="io.sc.engine.st.jpa.entity.EconomicIndicatorEntity" /* 避免和 io.sc.platform.system.dictionary.jpa.entity.DictionaryEntity 冲突 */) -@Table(name="ST_ECONOMIC_INDICATOR") -public class EconomicIndicatorEntity extends CorporationAuditorEntity { - @Id - @GeneratedValue(generator = "system-uuid") - @GenericGenerator(name = "system-uuid", strategy = "uuid2") - @Column(name="ID_", length=36) - @Size(max=36) - protected String id; - - @Column(name="PERIOD_TYPE_") - @Enumerated(EnumType.STRING) - protected StatisticalPeriodType periodType; - - @Column(name="YEAR_") - protected Integer year; - - @Column(name="MONTH_") - protected Integer month; - - @Column(name="QUARTER_") - protected Integer quarter; - - @Column(name="GDP_") - protected Double gdp; - - @Column(name="M2_") - protected Double m2; - - @Column(name="CPI_") - protected Double cpi; - - @Column(name="HPI_") - protected Double hpi; - - @Column(name="PMI_") - protected Double pmi; - - @Column(name="BLR_") - protected Double blr; - - @Override - public EconomicIndicatorVo toVo() { - EconomicIndicatorVo vo =new EconomicIndicatorVo(); - super.toVo(vo); - vo.setId(this.getId()); - vo.setPeriodType(this.getPeriodType()); - vo.setYear(this.getYear()); - vo.setMonth(this.getMonth()); - vo.setQuarter(this.getQuarter()); - vo.setGdp(this.getGdp()); - vo.setM2(this.getM2()); - vo.setCpi(this.getCpi()); - vo.setHpi(this.getHpi()); - vo.setPmi(this.getPmi()); - vo.setBlr(this.getBlr()); - return vo; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public StatisticalPeriodType getPeriodType() { - return periodType; - } - - public void setPeriodType(StatisticalPeriodType periodType) { - this.periodType = periodType; - } - - public Integer getYear() { - return year; - } - - public void setYear(Integer year) { - this.year = year; - } - - public Integer getMonth() { - return month; - } - - public void setMonth(Integer month) { - this.month = month; - } - - public Integer getQuarter() { - return quarter; - } - - public void setQuarter(Integer quarter) { - this.quarter = quarter; - } - - public Double getGdp() { - return gdp; - } - - public void setGdp(Double gdp) { - this.gdp = gdp; - } - - public Double getM2() { - return m2; - } - - public void setM2(Double m2) { - this.m2 = m2; - } - - public Double getCpi() { - return cpi; - } - - public void setCpi(Double cpi) { - this.cpi = cpi; - } - - public Double getHpi() { - return hpi; - } - - public void setHpi(Double hpi) { - this.hpi = hpi; - } - - public Double getPmi() { - return pmi; - } - - public void setPmi(Double pmi) { - this.pmi = pmi; - } - - public Double getBlr() { - return blr; - } - - public void setBlr(Double blr) { - this.blr = blr; - } -} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepArithmeticFactorDefineEntity.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepArithmeticFactorDefineEntity.java new file mode 100644 index 00000000..77b9e733 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepArithmeticFactorDefineEntity.java @@ -0,0 +1,57 @@ +package io.sc.engine.st.jpa.entity.sub; + +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.engine.st.vo.DepFactorDefineVo; +import io.sc.engine.st.vo.sub.DepArithmeticFactorDefineVo; + +import javax.persistence.Column; +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.validation.constraints.Size; + +/** + * 算术运算自变量定义实体类 + */ +@Entity +@DiscriminatorValue("EXTEND_ARITHMETIC") +public class DepArithmeticFactorDefineEntity extends DepFactorDefineEntity { + // 算术公式 + @Column(name="ARITHMETIC_FORMULA_", length=512) + @Size(max=512) + protected String formula; + + // 算术反公式 + @Column(name="ARITHMETIC_FORMULA_REV_", length=512) + @Size(max=512) + protected String reverseFormula; + + @Override + public DepFactorDefineVo toVo() { + DepArithmeticFactorDefineVo vo =new DepArithmeticFactorDefineVo(); + super.toVo(vo); + vo.setFormula(this.getFormula()); + vo.setReverseFormula(this.getReverseFormula()); + return vo; + } + + public DepArithmeticFactorDefineEntity(){} + public DepArithmeticFactorDefineEntity(String id){ + this.id =id; + } + + public String getFormula() { + return formula; + } + + public void setFormula(String formula) { + this.formula = formula; + } + + public String getReverseFormula() { + return reverseFormula; + } + + public void setReverseFormula(String reverseFormula) { + this.reverseFormula = reverseFormula; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepDelayFactorDefineEntity.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepDelayFactorDefineEntity.java new file mode 100644 index 00000000..1e21e737 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepDelayFactorDefineEntity.java @@ -0,0 +1,53 @@ +package io.sc.engine.st.jpa.entity.sub; + +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.engine.st.vo.DepFactorDefineVo; +import io.sc.engine.st.vo.sub.DepDelayFactorDefineVo; + +import javax.persistence.*; + +/** + * 滞后运算自变量定义实体类 + */ +@Entity +@DiscriminatorValue("EXTEND_DELAY") +public class DepDelayFactorDefineEntity extends DepFactorDefineEntity { + // 滞后自变量定义 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "DELAY_FACTOR_DEF_ID_") + protected DepFactorDefineEntity delayFactorDefine; + + // 滞后期数 + @Column(name="DELAY_ISSUE_") + protected Integer delayIssue; + + @Override + public DepFactorDefineVo toVo() { + DepDelayFactorDefineVo vo =new DepDelayFactorDefineVo(); + super.toVo(vo); + vo.setDelayFactorDefine(this.getDelayFactorDefine()==null?null:this.getDelayFactorDefine().getId()); + vo.setDelayIssue(this.getDelayIssue()); + return vo; + } + + public DepDelayFactorDefineEntity(){} + public DepDelayFactorDefineEntity(String id){ + this.id =id; + } + + public DepFactorDefineEntity getDelayFactorDefine() { + return delayFactorDefine; + } + + public void setDelayFactorDefine(DepFactorDefineEntity delayFactorDefine) { + this.delayFactorDefine = delayFactorDefine; + } + + public Integer getDelayIssue() { + return delayIssue; + } + + public void setDelayIssue(Integer delayIssue) { + this.delayIssue = delayIssue; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepDifferentialFactorDefineEntity.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepDifferentialFactorDefineEntity.java new file mode 100644 index 00000000..31d454b6 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepDifferentialFactorDefineEntity.java @@ -0,0 +1,53 @@ +package io.sc.engine.st.jpa.entity.sub; + +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.engine.st.vo.DepFactorDefineVo; +import io.sc.engine.st.vo.sub.DepDifferentialFactorDefineVo; + +import javax.persistence.*; + +/** + * 差分运算自变量定义实体类 + */ +@Entity +@DiscriminatorValue("EXTEND_DIFFERENTIAL") +public class DepDifferentialFactorDefineEntity extends DepFactorDefineEntity { + // 差分自变量定义 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "DIFFERENTIAL_FACTOR_DEF_ID_") + protected DepFactorDefineEntity differentialFactorDefine; + + // 差分阶数 + @Column(name="DIFFERENTIAL_DEGREE_") + protected Integer differentialDegree; + + @Override + public DepFactorDefineVo toVo() { + DepDifferentialFactorDefineVo vo =new DepDifferentialFactorDefineVo(); + super.toVo(vo); + vo.setDifferentialFactorDefine(this.getDifferentialFactorDefine()==null?null:this.getDifferentialFactorDefine().getId()); + vo.setDifferentialDegree(this.getDifferentialDegree()); + return vo; + } + + public DepDifferentialFactorDefineEntity(){} + public DepDifferentialFactorDefineEntity(String id){ + this.id =id; + } + + public DepFactorDefineEntity getDifferentialFactorDefine() { + return differentialFactorDefine; + } + + public void setDifferentialFactorDefine(DepFactorDefineEntity differentialFactorDefine) { + this.differentialFactorDefine = differentialFactorDefine; + } + + public Integer getDifferentialDegree() { + return differentialDegree; + } + + public void setDifferentialDegree(Integer differentialDegree) { + this.differentialDegree = differentialDegree; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepFolderEntity.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepFolderEntity.java new file mode 100644 index 00000000..f70b885f --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/entity/sub/DepFolderEntity.java @@ -0,0 +1,24 @@ +package io.sc.engine.st.jpa.entity.sub; + +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.engine.st.vo.DepFactorDefineVo; +import io.sc.engine.st.vo.sub.DepFolderVo; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +@Entity +@DiscriminatorValue("FOLDER") +public class DepFolderEntity extends DepFactorDefineEntity { + @Override + public DepFactorDefineVo toVo() { + DepFolderVo vo =new DepFolderVo(); + super.toVo(vo); + return vo; + } + + public DepFolderEntity(){} + public DepFolderEntity(String id){ + this.id =id; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/repository/DepFactorDefineRepository.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/repository/DepFactorDefineRepository.java new file mode 100644 index 00000000..64fa87d4 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/repository/DepFactorDefineRepository.java @@ -0,0 +1,18 @@ +package io.sc.engine.st.jpa.repository; + +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.platform.orm.repository.DaoRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service("io.sc.engine.st.jpa.repository.DepFactorDefineRepository") +public interface DepFactorDefineRepository extends DaoRepository{ + @Query("select e from io.sc.engine.st.jpa.entity.DepFactorDefineEntity e where e.code in (:defineCodes)") + public List findByCodes(@Param("defineCodes") List defineCodes); + + @Query("select e from io.sc.engine.st.jpa.entity.DepFactorDefineEntity e where e.id<>:defineId") + public List findAllWithoutById(@Param("defineId") String defineId); +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/repository/DepFactorRepository.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/repository/DepFactorRepository.java new file mode 100644 index 00000000..e7c940e3 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/jpa/repository/DepFactorRepository.java @@ -0,0 +1,15 @@ +package io.sc.engine.st.jpa.repository; + +import io.sc.engine.st.jpa.entity.DepFactorEntity; +import io.sc.platform.orm.repository.DaoRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service("io.sc.engine.st.jpa.repository.DepFactorRepository") +public interface DepFactorRepository extends DaoRepository{ + @Query("select e from io.sc.engine.st.jpa.entity.DepFactorEntity e where e.define.id=:defineId order by e.year, e.quarter, e.month") + public List findByDefineId(@Param("defineId") String defineId); +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/service/DepFactorDefineService.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/DepFactorDefineService.java new file mode 100644 index 00000000..548a1ed9 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/DepFactorDefineService.java @@ -0,0 +1,12 @@ +package io.sc.engine.st.service; + +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.engine.st.jpa.repository.DepFactorDefineRepository; +import io.sc.engine.st.vo.DepFactorDefineVo; +import io.sc.platform.orm.service.DaoService; + +import java.util.List; + +public interface DepFactorDefineService extends DaoService{ + public List findAllWithoutById(String defineId) throws Exception; +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/service/DepFactorService.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/DepFactorService.java new file mode 100644 index 00000000..54cddea4 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/DepFactorService.java @@ -0,0 +1,13 @@ +package io.sc.engine.st.service; + +import io.sc.engine.st.jpa.entity.DepFactorEntity; +import io.sc.engine.st.jpa.repository.DepFactorRepository; +import io.sc.engine.st.vo.DepFactorVo; +import io.sc.platform.orm.service.DaoService; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +public interface DepFactorService extends DaoService{ + public List findByFactorDefineId(@RequestParam("defineId") String defineId) throws Exception; +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/service/EconomicIndicatorService.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/EconomicIndicatorService.java deleted file mode 100644 index b7aadfdd..00000000 --- a/io.sc.engine.st/src/main/java/io/sc/engine/st/service/EconomicIndicatorService.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.sc.engine.st.service; - -import io.sc.engine.st.jpa.entity.EconomicIndicatorEntity; -import io.sc.engine.st.jpa.repository.EconomicIndicatorRepository; -import io.sc.platform.orm.service.DaoService; -import io.sc.platform.orm.service.support.QueryParameter; -import org.springframework.data.domain.Page; - -import java.util.Map; - -public interface EconomicIndicatorService extends DaoService{ -} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/DepFactorDefineServiceImpl.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/DepFactorDefineServiceImpl.java new file mode 100644 index 00000000..e057c7e0 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/DepFactorDefineServiceImpl.java @@ -0,0 +1,23 @@ +package io.sc.engine.st.service.impl; + +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.engine.st.jpa.repository.DepFactorDefineRepository; +import io.sc.engine.st.service.DepFactorDefineService; +import io.sc.engine.st.vo.DepFactorDefineVo; +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.platform.orm.util.EntityVoUtil; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; + +@Service("io.sc.engine.st.service.impl.DepFactorDefineServiceImpl") +public class DepFactorDefineServiceImpl extends DaoServiceImpl implements DepFactorDefineService { + @Override + public List findAllWithoutById(String defineId) throws Exception { + if(!StringUtils.hasText(defineId)){ + EntityVoUtil.toVo(repository.findAll()); + } + return EntityVoUtil.toVo(repository.findAllWithoutById(defineId)); + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/DepFactorServiceImpl.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/DepFactorServiceImpl.java new file mode 100644 index 00000000..bc0f6ed9 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/DepFactorServiceImpl.java @@ -0,0 +1,210 @@ +package io.sc.engine.st.service.impl; + +import io.sc.engine.st.enums.FactorDefineType; +import io.sc.engine.st.enums.Period; +import io.sc.engine.st.exception.FactorDefinePeroidNotSameException; +import io.sc.engine.st.jpa.entity.DepFactorDefineEntity; +import io.sc.engine.st.jpa.entity.DepFactorEntity; +import io.sc.engine.st.jpa.entity.sub.DepArithmeticFactorDefineEntity; +import io.sc.engine.st.jpa.entity.sub.DepDelayFactorDefineEntity; +import io.sc.engine.st.jpa.entity.sub.DepDifferentialFactorDefineEntity; +import io.sc.engine.st.jpa.repository.DepFactorRepository; +import io.sc.engine.st.service.DepFactorDefineService; +import io.sc.engine.st.service.DepFactorService; +import io.sc.engine.st.support.FormulaUtil; +import io.sc.engine.st.support.PeriodWrapper; +import io.sc.engine.st.vo.DepFactorVo; +import io.sc.platform.groovy.GroovyScriptExecutor; +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.platform.orm.util.EntityVoUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.*; + +@Service("io.sc.engine.st.service.impl.DepFactorServiceImpl") +public class DepFactorServiceImpl extends DaoServiceImpl implements DepFactorService { + @Autowired private DepFactorDefineService depFactorDefineService; + + @Override + public List findByFactorDefineId(String defineId) throws Exception { + if(!StringUtils.hasText(defineId)){ + return Collections.emptyList(); + } + DepFactorDefineEntity factorDefineEntity = depFactorDefineService.findById(defineId); + if(factorDefineEntity==null){ + return Collections.emptyList(); + } + + if(FactorDefineType.FOLDER.equals(factorDefineEntity.getType())){ + return Collections.emptyList(); + } + if(FactorDefineType.ORIGINAL.equals(factorDefineEntity.getType())){ + return EntityVoUtil.toVo(repository.findByDefineId(defineId)); + } + if(factorDefineEntity instanceof DepArithmeticFactorDefineEntity){ + DepArithmeticFactorDefineEntity arithmeticFactorDefineEntity =(DepArithmeticFactorDefineEntity)factorDefineEntity; + return cal(arithmeticFactorDefineEntity); + }else if(factorDefineEntity instanceof DepDelayFactorDefineEntity){ + DepDelayFactorDefineEntity delayFactorDefineEntity =(DepDelayFactorDefineEntity)factorDefineEntity; + return cal(delayFactorDefineEntity); + }else if(factorDefineEntity instanceof DepDifferentialFactorDefineEntity){ + DepDifferentialFactorDefineEntity differentialFactorDefineEntity =(DepDifferentialFactorDefineEntity)factorDefineEntity; + return cal(differentialFactorDefineEntity); + } + return Collections.emptyList(); + } + + private List cal(DepArithmeticFactorDefineEntity selfEntity) throws Exception { + // 获取算术运算表达式中引用的其他自变量代码 + List variableNames = FormulaUtil.extractVariableNames(selfEntity.getFormula()); + // 查找算术运算表达式中引用的其他自变量定义 + List referenceEntities = depFactorDefineService.getRepository().findByCodes(variableNames); + // 算术运算表达式中引用的其他自变量的周期是否相同 + if(!isSamePeroid(referenceEntities,selfEntity.getPeriod())){ + throw new FactorDefinePeroidNotSameException(); + } + + // 所有算术运算表达式中引用的其他自变量集合的行 key 集合 + Set rowKeys =new LinkedHashSet<>(); + // 查找算术运算表达式中引用的其他自变量Map + // key : 自变量定义代码 + // value: 自变量的值 Map(key:唯一标识,value:值) + Map> variableValueMap =new HashMap<>(); + for(DepFactorDefineEntity defineEntity : referenceEntities){ + Map records =new HashMap<>(); + List factorEntities =repository.findByDefineId(defineEntity.getId()); + if(factorEntities!=null){ + for(DepFactorEntity factorEntity : factorEntities){ + rowKeys.add(new PeriodWrapper(factorEntity.getYear(),factorEntity.getQuarter(),factorEntity.getMonth())); + records.put(factorEntity.calUniqueKey(),defineEntity.convertValue(factorEntity.getValue())); + } + } + variableValueMap.put(defineEntity.getCode(),records); + } + + // 结果集 + List result =new ArrayList<>(); + for(PeriodWrapper rowKey : rowKeys){ + DepFactorVo vo =new DepFactorVo(); + vo.setYear(rowKey.getYear()); + vo.setQuarter(rowKey.getQuarter()); + vo.setMonth(rowKey.getMonth()); + Map context =new HashMap<>(); + for(String variableName : variableNames){ + Map values =variableValueMap.get(variableName); + Object value =values.get(rowKey); + context.put(variableName,value); + } + String groovyScript =FormulaUtil.getGroovyScript(selfEntity.getFormula()); + String value =GroovyScriptExecutor.getInstance().eval(groovyScript,context).toString(); + vo.setValue(new BigDecimal(value).setScale(6,BigDecimal.ROUND_HALF_UP).toString()); + result.add(vo); + } + return result; + } + + private List cal(DepDelayFactorDefineEntity selfEntity) throws Exception { + // 获取滞后自变量定义引用的自变量定义实体 + DepFactorDefineEntity referenceEntity =selfEntity.getDelayFactorDefine(); + if(referenceEntity==null){ + return Collections.emptyList(); + } + + // 滞后自变量定义和引用的自变量定义实体的周期是否相同 + if(!referenceEntity.getPeriod().equals(selfEntity.getPeriod())){ + throw new FactorDefinePeroidNotSameException(); + } + + List factorEntities =repository.findByDefineId(referenceEntity.getId()); + if(factorEntities==null || factorEntities.isEmpty()){ + return Collections.emptyList(); + } + + Map recordCache =new LinkedHashMap<>(); + for(DepFactorEntity factorEntity : factorEntities){ + recordCache.put(factorEntity.calUniqueKey(),selfEntity.convertValue(factorEntity.getValue())); + } + + // 结果集 + List result =new ArrayList<>(); + for(PeriodWrapper key : recordCache.keySet()){ + DepFactorVo vo =new DepFactorVo(); + vo.setYear(key.getYear()); + vo.setQuarter(key.getQuarter()); + vo.setMonth(key.getMonth()); + Object value =recordCache.get(key.previous(selfEntity.getDelayIssue())); + vo.setValue(value==null?null:value.toString()); + result.add(vo); + } + return result; + } + + private List cal(DepDifferentialFactorDefineEntity selfEntity) throws Exception { + // 获取差分自变量定义引用的自变量定义实体 + DepFactorDefineEntity referenceEntity =selfEntity.getDifferentialFactorDefine(); + if(referenceEntity==null){ + return Collections.emptyList(); + } + + // 滞后自变量定义和引用的自变量定义实体的周期是否相同 + if(!referenceEntity.getPeriod().equals(selfEntity.getPeriod())){ + throw new FactorDefinePeroidNotSameException(); + } + + List factorEntities =repository.findByDefineId(referenceEntity.getId()); + if(factorEntities==null || factorEntities.isEmpty()){ + return Collections.emptyList(); + } + + Map recordCache =new LinkedHashMap<>(); + for(DepFactorEntity factorEntity : factorEntities){ + recordCache.put(factorEntity.calUniqueKey(),selfEntity.convertValue(factorEntity.getValue())); + } + + for(int i=0;i recordCacheTemp =new LinkedHashMap<>(); + for (PeriodWrapper key : recordCache.keySet()) { + Object value =recordCache.get(key); + Object value_1 =recordCache.get(key.previous(1)); + if(value_1!=null){ + recordCacheTemp.put(key,new BigDecimal(value.toString()).subtract(new BigDecimal(value_1.toString()))); + }else{ + recordCacheTemp.put(key,null); + } + } + recordCache =recordCacheTemp; + } + + // 结果集 + List result =new ArrayList<>(); + for(PeriodWrapper key : recordCache.keySet()){ + DepFactorVo vo =new DepFactorVo(); + vo.setYear(key.getYear()); + vo.setQuarter(key.getQuarter()); + vo.setMonth(key.getMonth()); + Object value =recordCache.get(key); + vo.setValue(value==null?null:value.toString()); + result.add(vo); + } + return result; + } + + + private boolean isSamePeroid(List factorDefineEntities,Period period){ + if(period==null){ + return false; + } + if(factorDefineEntities==null || !factorDefineEntities.isEmpty()){ + return true; + } + for(DepFactorDefineEntity defineEntity : factorDefineEntities){ + if(!period.equals(defineEntity.getPeriod())){ + return false; + } + } + return true; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/support/Column.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/support/Column.java new file mode 100644 index 00000000..5a874009 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/support/Column.java @@ -0,0 +1,33 @@ +package io.sc.engine.st.support; + +import io.sc.engine.st.enums.ValueType; + +import java.util.ArrayList; +import java.util.List; + +public class Column { + private String code; + private ValueType valueType =ValueType.NUMERIC; + + public Column(){} + public Column(String code,ValueType valueType){ + this.code =code; + this.valueType =valueType; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public ValueType getValueType() { + return valueType; + } + + public void setValueType(ValueType valueType) { + this.valueType = valueType; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/DepFactorDefineVo.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/DepFactorDefineVo.java new file mode 100644 index 00000000..45ead782 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/DepFactorDefineVo.java @@ -0,0 +1,90 @@ +package io.sc.engine.st.vo; + +import io.sc.engine.st.enums.FactorDefineType; +import io.sc.engine.st.enums.Period; +import io.sc.engine.st.enums.ValueType; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class DepFactorDefineVo extends CorporationAuditorVo { + protected String id; + protected FactorDefineType type; + protected String code; + protected String name; + protected String description; + protected Integer order; + protected Period period; + protected ValueType valueType; + protected String parent; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public FactorDefineType getType() { + return type; + } + + public void setType(FactorDefineType type) { + this.type = type; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + public Period getPeriod() { + return period; + } + + public void setPeriod(Period period) { + this.period = period; + } + + public ValueType getValueType() { + return valueType; + } + + public void setValueType(ValueType valueType) { + this.valueType = valueType; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepArithmeticFactorDefineVo.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepArithmeticFactorDefineVo.java new file mode 100644 index 00000000..e0f19bf7 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepArithmeticFactorDefineVo.java @@ -0,0 +1,24 @@ +package io.sc.engine.st.vo.sub; + +import io.sc.engine.st.vo.DepFactorDefineVo; + +public class DepArithmeticFactorDefineVo extends DepFactorDefineVo { + protected String formula; + protected String reverseFormula; + + public String getFormula() { + return formula; + } + + public void setFormula(String formula) { + this.formula = formula; + } + + public String getReverseFormula() { + return reverseFormula; + } + + public void setReverseFormula(String reverseFormula) { + this.reverseFormula = reverseFormula; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepDelayFactorDefineVo.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepDelayFactorDefineVo.java new file mode 100644 index 00000000..1559675f --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepDelayFactorDefineVo.java @@ -0,0 +1,24 @@ +package io.sc.engine.st.vo.sub; + +import io.sc.engine.st.vo.DepFactorDefineVo; + +public class DepDelayFactorDefineVo extends DepFactorDefineVo { + protected String delayFactorDefine; + protected Integer delayIssue; + + public String getDelayFactorDefine() { + return delayFactorDefine; + } + + public void setDelayFactorDefine(String delayFactorDefine) { + this.delayFactorDefine = delayFactorDefine; + } + + public Integer getDelayIssue() { + return delayIssue; + } + + public void setDelayIssue(Integer delayIssue) { + this.delayIssue = delayIssue; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepDifferentialFactorDefineVo.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepDifferentialFactorDefineVo.java new file mode 100644 index 00000000..86e6d5cb --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepDifferentialFactorDefineVo.java @@ -0,0 +1,24 @@ +package io.sc.engine.st.vo.sub; + +import io.sc.engine.st.vo.DepFactorDefineVo; + +public class DepDifferentialFactorDefineVo extends DepFactorDefineVo { + protected String differentialFactorDefine; + protected Integer differentialDegree; + + public String getDifferentialFactorDefine() { + return differentialFactorDefine; + } + + public void setDifferentialFactorDefine(String differentialFactorDefine) { + this.differentialFactorDefine = differentialFactorDefine; + } + + public Integer getDifferentialDegree() { + return differentialDegree; + } + + public void setDifferentialDegree(Integer differentialDegree) { + this.differentialDegree = differentialDegree; + } +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepFolderVo.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepFolderVo.java new file mode 100644 index 00000000..7914e022 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepFolderVo.java @@ -0,0 +1,7 @@ +package io.sc.engine.st.vo.sub; + +import io.sc.engine.st.vo.DepFactorDefineVo; + +public class DepFolderVo extends DepFactorDefineVo { + +} diff --git a/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepOriginalFactorDefineVo.java b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepOriginalFactorDefineVo.java new file mode 100644 index 00000000..b37fd3c8 --- /dev/null +++ b/io.sc.engine.st/src/main/java/io/sc/engine/st/vo/sub/DepOriginalFactorDefineVo.java @@ -0,0 +1,7 @@ +package io.sc.engine.st.vo.sub; + +import io.sc.engine.st.vo.DepFactorDefineVo; + +public class DepOriginalFactorDefineVo extends DepFactorDefineVo { + +} diff --git a/io.sc.platform.jdbc.liquibase/src/main/java/io/sc/platform/jdbc/liquibase/task/CsvImportTaskChange.java b/io.sc.platform.jdbc.liquibase/src/main/java/io/sc/platform/jdbc/liquibase/task/CsvImportTaskChange.java index 657aff0c..828310b0 100644 --- a/io.sc.platform.jdbc.liquibase/src/main/java/io/sc/platform/jdbc/liquibase/task/CsvImportTaskChange.java +++ b/io.sc.platform.jdbc.liquibase/src/main/java/io/sc/platform/jdbc/liquibase/task/CsvImportTaskChange.java @@ -111,13 +111,22 @@ public class CsvImportTaskChange implements CustomTaskChange { for(int i=0;i