10 changed files with 428 additions and 1 deletions
			
			
		@ -0,0 +1,23 @@ | 
				
			|||||
 | 
					package com.epmet.dto.screen.form; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import lombok.Data; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.io.Serializable; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * desc:初始化客户指标权重参数实体类 | 
				
			||||
 | 
					 * @author liujianjun | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					@Data | 
				
			||||
 | 
					public class IndexCalculateForm implements Serializable { | 
				
			||||
 | 
					    private static final long serialVersionUID = 3280392511156378209L; | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * desc:客户id | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String customerId; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * desc:月份id | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String monthId; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,154 @@ | 
				
			|||||
 | 
					package com.epmet.controller; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import com.epmet.commons.extappauth.annotation.ExternalAppRequestAuth; | 
				
			||||
 | 
					import com.epmet.commons.extappauth.bean.ExternalAppRequestParam; | 
				
			||||
 | 
					import com.epmet.commons.tools.utils.Result; | 
				
			||||
 | 
					import com.epmet.dto.screen.form.IndexCalculateForm; | 
				
			||||
 | 
					import com.epmet.service.screen.IndexCalculateService; | 
				
			||||
 | 
					import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.PostMapping; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.RequestBody; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * 指标计算controller | 
				
			||||
 | 
					 * | 
				
			||||
 | 
					 * @author liujianjun@elink-cn.com | 
				
			||||
 | 
					 * @date 2020/8/24 14:38 | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					@RestController | 
				
			||||
 | 
					@RequestMapping("indexcalculate") | 
				
			||||
 | 
					public class IndexCalculateController { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Autowired | 
				
			||||
 | 
					    private IndexCalculateService indexCalculateService; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 1、党建能力-党员相关指标计算(按照月份) | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **/ | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("cpc") | 
				
			||||
 | 
					    public Result cpcIndexCalculate(ExternalAppRequestParam externalAppRequestParam, @RequestBody IndexCalculateForm formDTO) { | 
				
			||||
 | 
					        indexCalculateService.cpcIndexCalculate(formDTO); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					   /* *//** | 
				
			||||
 | 
					     * 2、党建能力-网格相关指标上报(按照月份) | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **//*
 | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("gridpartyability") | 
				
			||||
 | 
					    public Result gridPartyAbility(ExternalAppRequestParam externalAppRequestParam, @RequestBody List<GridPartyAbilityFormDTO> formDTO) { | 
				
			||||
 | 
					        factIndexCollectService.insertGridPartyAbility(formDTO, externalAppRequestParam.getCustomerId()); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    *//**
 | 
				
			||||
 | 
					     * 3、党建能力-街道及社区相关指标 | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **//*
 | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("orgpartyability") | 
				
			||||
 | 
					    public Result orgPartyAbility(ExternalAppRequestParam externalAppRequestParam, @RequestBody List<OrgPartyAbilityFormDTO> formDTO) { | 
				
			||||
 | 
					        factIndexCollectService.insertOrgPartyAbility(formDTO, externalAppRequestParam.getCustomerId()); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    *//**
 | 
				
			||||
 | 
					     * 4、服务能力-网格相关指标 | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **//*
 | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("gridserviceability") | 
				
			||||
 | 
					    public Result gridServiceAbility(ExternalAppRequestParam externalAppRequestParam, @RequestBody List<GridServiceAbilityFormDTO> formDTO) { | 
				
			||||
 | 
					        factIndexCollectService.insertGridServiceAbility(formDTO, externalAppRequestParam.getCustomerId()); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    *//**
 | 
				
			||||
 | 
					     * 5、服务能力-组织(街道|社区|全区)相关指标 | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **//*
 | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("orgserviceability") | 
				
			||||
 | 
					    public Result orgServiceAbility(ExternalAppRequestParam externalAppRequestParam, @RequestBody List<OrgServiceAbilityFormDTO> formDTO) { | 
				
			||||
 | 
					        factIndexCollectService.insertOrgServiceAbility(formDTO, externalAppRequestParam.getCustomerId()); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    *//**
 | 
				
			||||
 | 
					     * 6、治理能力-网格相关指标 | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **//*
 | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("gridgovrnability") | 
				
			||||
 | 
					    public Result gridGovrnAbility(ExternalAppRequestParam externalAppRequestParam, @RequestBody List<GridGovrnAbilityFormDTO> formDTO) { | 
				
			||||
 | 
					        factIndexCollectService.insertGridGovrnAbility(formDTO, externalAppRequestParam.getCustomerId()); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    *//**
 | 
				
			||||
 | 
					     * 7、治理能力-街道及社区相关指标 | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **//*
 | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("orggovrnability") | 
				
			||||
 | 
					    public Result orgGovrnAbility(ExternalAppRequestParam externalAppRequestParam, @RequestBody List<OrgGovrnAbilityFormDTO> formDTO) { | 
				
			||||
 | 
					        factIndexCollectService.insertOrgGovrnAbility(formDTO, externalAppRequestParam.getCustomerId()); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    *//**
 | 
				
			||||
 | 
					     * 8、治理能力-部门相关指标 | 
				
			||||
 | 
					     * | 
				
			||||
 | 
					     * @param externalAppRequestParam | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     * @return com.epmet.commons.tools.utils.Result | 
				
			||||
 | 
					     * @Author zhangyong | 
				
			||||
 | 
					     * @Date 10:52 2020-08-20 | 
				
			||||
 | 
					     **//*
 | 
				
			||||
 | 
					    @ExternalAppRequestAuth | 
				
			||||
 | 
					    @PostMapping("deptgovrnability") | 
				
			||||
 | 
					    public Result deptGovrnAbility(ExternalAppRequestParam externalAppRequestParam, @RequestBody List<DeptGovrnAbilityFormDTO> formDTO) { | 
				
			||||
 | 
					        factIndexCollectService.insertDeptGovrnAbility(formDTO, externalAppRequestParam.getCustomerId()); | 
				
			||||
 | 
					        return new Result(); | 
				
			||||
 | 
					    }*/ | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,17 @@ | 
				
			|||||
 | 
					package com.epmet.service.screen; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import com.epmet.dto.screen.form.IndexCalculateForm; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * 指标计算service | 
				
			||||
 | 
					 * | 
				
			||||
 | 
					 * @author liujianjun@elink-cn.com | 
				
			||||
 | 
					 * @date 2020/8/18 10:25 | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					public interface IndexCalculateService { | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * desc:计算党员相关指标 | 
				
			||||
 | 
					     * @param formDTO | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    void cpcIndexCalculate(IndexCalculateForm formDTO); | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					package com.epmet.service.screen.impl; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import com.epmet.dto.screen.form.IndexCalculateForm; | 
				
			||||
 | 
					import com.epmet.service.screen.IndexCalculateService; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * @author liujianjun | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					public class IndexCalculateServiceImpl implements IndexCalculateService { | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public void cpcIndexCalculate(IndexCalculateForm formDTO) { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,17 @@ | 
				
			|||||
 | 
					package com.epmet.support.normalizing; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * 指标正负相关枚举 | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					public enum Correlation { | 
				
			||||
 | 
					    POSITIVE("positive","正相关"), | 
				
			||||
 | 
					    NEGATIVE("negative","负相关"), | 
				
			||||
 | 
					    ; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    private String code; | 
				
			||||
 | 
					    private String desc; | 
				
			||||
 | 
					    Correlation(String code,String desc){ | 
				
			||||
 | 
					        this.code = code; | 
				
			||||
 | 
					        this.desc = desc; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,43 @@ | 
				
			|||||
 | 
					package com.epmet.support.normalizing; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.math.BigDecimal; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * Double的分值计算 | 
				
			||||
 | 
					 * 每一种数据类型的计算都要继承ScoreCalculator并且实现其抽象方法,实现数据类型的转换 | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					public class DoubleScoreCalculator extends ScoreCalculator { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 初始化double类型分值计算 | 
				
			||||
 | 
					     * ☆☆☆ 务必在该构造方法最后调用父类的prepare()方法 ☆☆☆ | 
				
			||||
 | 
					     * @param sourceArray 数据所在的数组 | 
				
			||||
 | 
					     * @param minScore 分值区间的左边界 | 
				
			||||
 | 
					     * @param maxScore 分值区间的右边界 | 
				
			||||
 | 
					     * @param correlation 相关性 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    public DoubleScoreCalculator(Double[] sourceArray, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) { | 
				
			||||
 | 
					        this.sourceArrary = sourceArray; | 
				
			||||
 | 
					        this.minScore = minScore; | 
				
			||||
 | 
					        this.maxScore = maxScore; | 
				
			||||
 | 
					        this.correlation = correlation; | 
				
			||||
 | 
					        this.prepare(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public BigDecimal getMaxFromSourceArray() { | 
				
			||||
 | 
					        Double[] doubleSourceArrary = (Double[]) this.sourceArrary; | 
				
			||||
 | 
					        return new BigDecimal(doubleSourceArrary[doubleSourceArrary.length - 1]); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public BigDecimal getMinFromSourceArray() { | 
				
			||||
 | 
					        Double[] intSourceArrary = (Double[]) this.sourceArrary; | 
				
			||||
 | 
					        return new BigDecimal(intSourceArrary[0]); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public BigDecimal convertValue2BigDecimal(Object sourceValue) { | 
				
			||||
 | 
					        return new BigDecimal((Double) sourceValue); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,45 @@ | 
				
			|||||
 | 
					package com.epmet.support.normalizing; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.math.BigDecimal; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * Integer的分值计算 | 
				
			||||
 | 
					 * 每一种数据类型的计算都要继承ScoreCalculator并且实现其抽象方法,实现数据类型的转换 | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					public class IntegerScoreCalculator extends ScoreCalculator { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 初始化整数分值计算 | 
				
			||||
 | 
					     * ☆☆☆ 务必在该构造方法最后调用父类的prepare()方法 ☆☆☆ | 
				
			||||
 | 
					     * @param sourceArray 数据所在的数组 | 
				
			||||
 | 
					     * @param minScore 分值区间的左边界 | 
				
			||||
 | 
					     * @param maxScore 分值区间的右边界 | 
				
			||||
 | 
					     * @param correlation 相关性 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    public IntegerScoreCalculator(Integer[] sourceArray, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) { | 
				
			||||
 | 
					        this.sourceArrary = sourceArray; | 
				
			||||
 | 
					        this.minScore = minScore; | 
				
			||||
 | 
					        this.maxScore = maxScore; | 
				
			||||
 | 
					        this.correlation = correlation; | 
				
			||||
 | 
					        this.prepare(); | 
				
			||||
 | 
					        System.out.println("最小值:"+minScore+";最大值:"+maxScore); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public BigDecimal getMaxFromSourceArray() { | 
				
			||||
 | 
					        Integer[] intSourceArrary = (Integer[]) this.sourceArrary; | 
				
			||||
 | 
					        return new BigDecimal(intSourceArrary[intSourceArrary.length - 1]); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public BigDecimal getMinFromSourceArray() { | 
				
			||||
 | 
					        Integer[] intSourceArrary = (Integer[]) this.sourceArrary; | 
				
			||||
 | 
					        return new BigDecimal(intSourceArrary[0]); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public BigDecimal convertValue2BigDecimal(Object sourceValue) { | 
				
			||||
 | 
					        return new BigDecimal((Integer) sourceValue); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,114 @@ | 
				
			|||||
 | 
					package com.epmet.support.normalizing; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.math.BigDecimal; | 
				
			||||
 | 
					import java.math.MathContext; | 
				
			||||
 | 
					import java.util.Arrays; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * 所有数据类型计算器的父类,实现算法骨架,数据类型转换方法则由子类实现 | 
				
			||||
 | 
					 * @param <T> 数据类型泛型 | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					public abstract class ScoreCalculator<T> { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    protected T[] sourceArrary; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    protected BigDecimal minScore; | 
				
			||||
 | 
					    protected BigDecimal maxScore; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    protected Correlation correlation; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    private BigDecimal maxValue; | 
				
			||||
 | 
					    private BigDecimal minValue; | 
				
			||||
 | 
					    private BigDecimal coefficient; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 计算准备 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    protected void prepare() { | 
				
			||||
 | 
					        // 校验数组
 | 
				
			||||
 | 
					        if (!validSourceArray(sourceArrary)) { | 
				
			||||
 | 
					            throw new RuntimeException("入参数组错误:请设置非空数组"); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        Arrays.sort(sourceArrary); | 
				
			||||
 | 
					        maxValue = getMaxFromSourceArray(); | 
				
			||||
 | 
					        minValue = getMinFromSourceArray(); | 
				
			||||
 | 
					        //计算系数
 | 
				
			||||
 | 
					        System.out.println("最小值:"+minScore+";最大值:"+maxScore); | 
				
			||||
 | 
					        coefficient = getCoefficient(minValue, maxValue); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 归一算法 | 
				
			||||
 | 
					     * @return | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    public BigDecimal normalize(T sourceValue) { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if (sourceValue == null) { | 
				
			||||
 | 
					            throw new RuntimeException("入参数组错误:请设置sourceValue"); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if (!Arrays.asList(sourceArrary).contains(sourceValue)) { | 
				
			||||
 | 
					            throw new RuntimeException("请确认要计算的数组在数组中存在"); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if (correlation == Correlation.POSITIVE) { | 
				
			||||
 | 
					            // 正相关
 | 
				
			||||
 | 
					            BigDecimal x = coefficient.multiply(convertValue2BigDecimal(sourceValue).subtract(minValue)); | 
				
			||||
 | 
					            BigDecimal score = minScore.add(x, MathContext.DECIMAL32); | 
				
			||||
 | 
					            return score; | 
				
			||||
 | 
					        } else if (correlation == Correlation.NEGATIVE) { | 
				
			||||
 | 
					            // 负相关
 | 
				
			||||
 | 
					            BigDecimal x = coefficient.multiply(convertValue2BigDecimal(sourceValue).subtract(minValue)); | 
				
			||||
 | 
					            BigDecimal score = minScore.add(x); | 
				
			||||
 | 
					            return maxScore.subtract(score, MathContext.DECIMAL32); | 
				
			||||
 | 
					        } else { | 
				
			||||
 | 
					            throw new RuntimeException("错误的相关性"); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 校验数组 | 
				
			||||
 | 
					     * @param sourceArray | 
				
			||||
 | 
					     * @param <T> | 
				
			||||
 | 
					     * @return | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    protected  <T> boolean validSourceArray(T[] sourceArray) { | 
				
			||||
 | 
					        if (sourceArray == null || sourceArray.length == 0) { | 
				
			||||
 | 
					            return false; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return true; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 计算系数 | 
				
			||||
 | 
					     * @return | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    protected BigDecimal getCoefficient(BigDecimal min, BigDecimal max) { | 
				
			||||
 | 
					        BigDecimal fenmu = max.subtract(min); | 
				
			||||
 | 
					        if (fenmu.toString().equals("0"))return new BigDecimal(0); | 
				
			||||
 | 
					        BigDecimal fenzi = maxScore.subtract(minScore); | 
				
			||||
 | 
					        BigDecimal divide = fenzi.divide(fenmu, MathContext.DECIMAL32); | 
				
			||||
 | 
					        System.out.println("分子:"+fenzi+"分母:"+fenmu+"系数:"+divide.toString()); | 
				
			||||
 | 
					        return divide; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 从源数组中获取最大值 | 
				
			||||
 | 
					     * @return | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    protected abstract BigDecimal getMaxFromSourceArray(); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 从源数组中获取最小值 | 
				
			||||
 | 
					     * @return | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    protected abstract BigDecimal getMinFromSourceArray(); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 将值转化为BigDecimal | 
				
			||||
 | 
					     * @param sourceValue | 
				
			||||
 | 
					     * @return | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    protected abstract BigDecimal convertValue2BigDecimal(T sourceValue); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue