Browse Source
# Conflicts: # epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenUserTotalDataDao.xmldev_shibei_match
43 changed files with 1109 additions and 155 deletions
@ -0,0 +1,43 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.datareport.dao.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.dao.BaseDao; |
||||
|
import com.epmet.screen.dto.result.PublicPartiRankResultDTO; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 公众参与-各类(话题|议题|项目|注册人数|参与人数)总数 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-24 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface ScreenPublicPartiTotalDataDao{ |
||||
|
/** |
||||
|
* @Description 查询公众参与各类总数 |
||||
|
* @param agencyId |
||||
|
* @return |
||||
|
* @author wangc |
||||
|
* @date 2020.08.20 16:00 |
||||
|
**/ |
||||
|
List<PublicPartiRankResultDTO> selectPublicPartiTotal(@Param("agencyId") String agencyId); |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
|
||||
|
<mapper namespace="com.epmet.datareport.dao.screen.ScreenPublicPartiTotalDataDao"> |
||||
|
|
||||
|
<!-- 查询公众参与各类总数 --> |
||||
|
<select id="selectPublicPartiTotal" resultType="com.epmet.screen.dto.result.PublicPartiRankResultDTO"> |
||||
|
SELECT |
||||
|
ORG_NAME AS NAME, |
||||
|
REG_USER_TOTAL AS regNum, |
||||
|
JOIN_USER_TOTAL AS joinNum, |
||||
|
TOPIC_TOTAL AS topicNum, |
||||
|
ISSUE_TOTAL AS issueNum, |
||||
|
PROJECT_TOTAL AS projectNum |
||||
|
FROM |
||||
|
screen_public_parti_total_data |
||||
|
WHERE |
||||
|
DEL_FLAG = '0' |
||||
|
AND PARENT_ID = #{agencyId} |
||||
|
ORDER BY |
||||
|
(REG_USER_TOTAL + JOIN_USER_TOTAL + TOPIC_TOTAL + ISSUE_TOTAL + PROJECT_TOTAL) DESC, |
||||
|
REG_USER_TOTAL desc, |
||||
|
JOIN_USER_TOTAL desc, |
||||
|
TOPIC_TOTAL desc, |
||||
|
ISSUE_TOTAL desc, |
||||
|
PROJECT_TOTAL desc |
||||
|
</select> |
||||
|
|
||||
|
</mapper> |
@ -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,67 @@ |
|||||
|
package com.epmet.dto.screencoll.form; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* 18、公众参与各类总数 入参 |
||||
|
* 公众参与-各类(用户|党员|党群|话题|议题|项目|注册人数|参与人数)总数 |
||||
|
* @Auther: zhangyong |
||||
|
* @Date: 2020-08-18 09:59 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class PublicPartiTotalDataFormDTO implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 组织类别 agency:组织;网格:grid |
||||
|
*/ |
||||
|
private String orgType; |
||||
|
|
||||
|
/** |
||||
|
* 组织Id 可以为网格,机关id |
||||
|
*/ |
||||
|
private String orgId; |
||||
|
|
||||
|
/** |
||||
|
* 上级组织Id,如果是网格,传入网格所属的组织id |
||||
|
*/ |
||||
|
private String parentId; |
||||
|
|
||||
|
/** |
||||
|
* 组织名称(可以是网格名称,也可以是组织名称) |
||||
|
*/ |
||||
|
private String orgName; |
||||
|
|
||||
|
/** |
||||
|
* 话题总数 |
||||
|
*/ |
||||
|
private Integer topicTotal; |
||||
|
|
||||
|
/** |
||||
|
* 议题总数 |
||||
|
*/ |
||||
|
private Integer issueTotal; |
||||
|
|
||||
|
/** |
||||
|
* 注册人数 |
||||
|
*/ |
||||
|
private Integer regUserTotal; |
||||
|
|
||||
|
/** |
||||
|
* 项目总数 |
||||
|
*/ |
||||
|
private Integer projectTotal; |
||||
|
|
||||
|
/** |
||||
|
* 参与人数 |
||||
|
*/ |
||||
|
private Integer joinUserTotal; |
||||
|
|
||||
|
/** |
||||
|
* 数据更新至: yyyy|yyyyMM|yyyyMMdd(08-21新增) |
||||
|
*/ |
||||
|
private String dataEndTime; |
||||
|
} |
@ -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,60 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dao.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.dao.BaseDao; |
||||
|
import com.epmet.dto.screencoll.form.PublicPartiTotalDataFormDTO; |
||||
|
import com.epmet.entity.screen.ScreenPublicPartiTotalDataEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 公众参与-各类(话题|议题|项目|注册人数|参与人数)总数 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-24 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface ScreenPublicPartiTotalDataDao extends BaseDao<ScreenPublicPartiTotalDataEntity> { |
||||
|
|
||||
|
/** |
||||
|
* 18、公众参与各类总数 |
||||
|
* 公众参与-各类(用户|党员|党群|话题|议题|项目|注册人数|参与人数)总数 |
||||
|
* 1) 根据CUSTOMER_ID、ORG_ID进行查询,如果有数据,则先进行物理删除 |
||||
|
* |
||||
|
* @param customerId |
||||
|
* @param orgIds 组织Id集合 |
||||
|
* @Author zhangyong |
||||
|
* @Date 10:52 2020-08-25 |
||||
|
**/ |
||||
|
void deletePublicPartiTotalData(@Param("customerId") String customerId, |
||||
|
@Param("orgIds") String[] orgIds); |
||||
|
|
||||
|
/** |
||||
|
* 18、公众参与各类总数 |
||||
|
* 2) 在批量新增 |
||||
|
* |
||||
|
* @param list |
||||
|
* @param customerId |
||||
|
* @Author zhangyong |
||||
|
* @Date 10:52 2020-08-25 |
||||
|
**/ |
||||
|
void batchInsertPublicPartiTotalData(@Param("list") List<PublicPartiTotalDataFormDTO> list, @Param("customerId")String customerId); |
||||
|
} |
@ -0,0 +1,96 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.entity.screen; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* 公众参与-各类(话题|议题|项目|注册人数|参与人数)总数 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-24 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper=false) |
||||
|
@TableName("screen_public_parti_total_data") |
||||
|
public class ScreenPublicPartiTotalDataEntity extends BaseEpmetEntity { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 客户Id |
||||
|
*/ |
||||
|
private String customerId; |
||||
|
|
||||
|
/** |
||||
|
* 组织类别 agency:组织;网格:grid;部门:department; |
||||
|
*/ |
||||
|
private String orgType; |
||||
|
|
||||
|
/** |
||||
|
* 组织Id 可以为网格,机关id |
||||
|
*/ |
||||
|
private String orgId; |
||||
|
|
||||
|
/** |
||||
|
* 上级组织Id,如果是网格,传入网格所属组织id |
||||
|
*/ |
||||
|
private String parentId; |
||||
|
|
||||
|
/** |
||||
|
* 组织名称,也可能是网格名称 |
||||
|
*/ |
||||
|
private String orgName; |
||||
|
|
||||
|
/** |
||||
|
* 数据更新至: yyyy|yyyyMM|yyyyMMdd(08-21新增) |
||||
|
*/ |
||||
|
private String dataEndTime; |
||||
|
|
||||
|
/** |
||||
|
* 话题总数 |
||||
|
*/ |
||||
|
private Integer topicTotal; |
||||
|
|
||||
|
/** |
||||
|
* 议题总数 |
||||
|
*/ |
||||
|
private Integer issueTotal; |
||||
|
|
||||
|
/** |
||||
|
* 项目总数 |
||||
|
*/ |
||||
|
private Integer projectTotal; |
||||
|
|
||||
|
/** |
||||
|
* 注册人数 |
||||
|
*/ |
||||
|
private Integer regUserTotal; |
||||
|
|
||||
|
/** |
||||
|
* 参与人数 |
||||
|
*/ |
||||
|
private Integer joinUserTotal; |
||||
|
|
||||
|
} |
@ -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,16 @@ |
|||||
|
package com.epmet.service.screen.impl; |
||||
|
|
||||
|
import com.epmet.dto.screen.form.IndexCalculateForm; |
||||
|
import com.epmet.service.screen.IndexCalculateService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* @author liujianjun |
||||
|
*/ |
||||
|
@Service |
||||
|
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,52 @@ |
|||||
|
package com.epmet.support.normalizing; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 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.clone(); |
||||
|
this.minScore = minScore; |
||||
|
this.maxScore = maxScore; |
||||
|
this.correlation = correlation; |
||||
|
this.prepare(); |
||||
|
} |
||||
|
|
||||
|
public DoubleScoreCalculator(List<Double> sourceArray, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) { |
||||
|
this.sourceArrary = sourceArray.toArray(); |
||||
|
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,55 @@ |
|||||
|
package com.epmet.support.normalizing; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 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.clone(); |
||||
|
this.minScore = minScore; |
||||
|
this.maxScore = maxScore; |
||||
|
this.correlation = correlation; |
||||
|
this.prepare(); |
||||
|
System.out.println("最小值:"+minScore+";最大值:"+maxScore); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public IntegerScoreCalculator(List<Integer> sourceList, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) { |
||||
|
this.sourceArrary = sourceList.toArray(); |
||||
|
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,178 @@ |
|||||
|
package com.epmet.support.normalizing; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.math.MathContext; |
||||
|
import java.util.Arrays; |
||||
|
import java.util.List; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* 所有数据类型计算器的父类,实现算法骨架,数据类型转换方法则由子类实现 |
||||
|
* ☆☆☆ 如果需要保持传入的数组元素顺序不变,请在实现类的构造方法中将传入数组进行克隆 ☆☆☆ |
||||
|
* @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 sourceValue |
||||
|
* @param weight |
||||
|
* @return |
||||
|
*/ |
||||
|
public BigDecimal normalize(T sourceValue, BigDecimal weight) { |
||||
|
return normalize(sourceValue).multiply(weight); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量归一算法 |
||||
|
* @param sourceValues |
||||
|
* @return |
||||
|
*/ |
||||
|
public BigDecimal[] normalize(T[] sourceValues) { |
||||
|
|
||||
|
BigDecimal[] scores = new BigDecimal[sourceValues.length]; |
||||
|
|
||||
|
for (int i=0;i<sourceValues.length;i++) { |
||||
|
BigDecimal score = normalize(sourceValues[i]); |
||||
|
scores[i] = score; |
||||
|
} |
||||
|
return scores; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量归一算法,返回List |
||||
|
* @param sourceValues |
||||
|
* @return |
||||
|
*/ |
||||
|
public List<BigDecimal> normalize(List<T> sourceValues) { |
||||
|
return sourceValues.stream().map(s -> normalize(s)).collect(Collectors.toList()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量归一算法,带权重 |
||||
|
* @param sourceValues |
||||
|
* @param weight |
||||
|
* @return |
||||
|
*/ |
||||
|
public BigDecimal[] normalize(T[] sourceValues, BigDecimal weight) { |
||||
|
|
||||
|
BigDecimal[] scores = new BigDecimal[sourceValues.length]; |
||||
|
|
||||
|
for (int i=0;i<sourceValues.length;i++) { |
||||
|
BigDecimal score = normalize(sourceValues[i]); |
||||
|
scores[i] = score.multiply(weight); |
||||
|
} |
||||
|
return scores; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量归一算法,返回List |
||||
|
* @param sourceValues |
||||
|
* @return |
||||
|
*/ |
||||
|
public List<BigDecimal> normalize(List<T> sourceValues, BigDecimal weight) { |
||||
|
return sourceValues.stream().map(s -> normalize(s).multiply(weight)).collect(Collectors.toList()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 校验数组 |
||||
|
* @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); |
||||
|
|
||||
|
} |
@ -0,0 +1,84 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
|
||||
|
<mapper namespace="com.epmet.dao.screen.ScreenPublicPartiTotalDataDao"> |
||||
|
|
||||
|
<resultMap type="com.epmet.entity.screen.ScreenPublicPartiTotalDataEntity" id="screenPublicPartiTotalDataMap"> |
||||
|
<result property="id" column="ID"/> |
||||
|
<result property="customerId" column="CUSTOMER_ID"/> |
||||
|
<result property="orgType" column="ORG_TYPE"/> |
||||
|
<result property="orgId" column="ORG_ID"/> |
||||
|
<result property="parentId" column="PARENT_ID"/> |
||||
|
<result property="orgName" column="ORG_NAME"/> |
||||
|
<result property="dataEndTime" column="DATA_END_TIME"/> |
||||
|
<result property="topicTotal" column="TOPIC_TOTAL"/> |
||||
|
<result property="issueTotal" column="ISSUE_TOTAL"/> |
||||
|
<result property="projectTotal" column="PROJECT_TOTAL"/> |
||||
|
<result property="regUserTotal" column="REG_USER_TOTAL"/> |
||||
|
<result property="joinUserTotal" column="JOIN_USER_TOTAL"/> |
||||
|
<result property="delFlag" column="DEL_FLAG"/> |
||||
|
<result property="revision" column="REVISION"/> |
||||
|
<result property="createdBy" column="CREATED_BY"/> |
||||
|
<result property="createdTime" column="CREATED_TIME"/> |
||||
|
<result property="updatedBy" column="UPDATED_BY"/> |
||||
|
<result property="updatedTime" column="UPDATED_TIME"/> |
||||
|
</resultMap> |
||||
|
|
||||
|
<delete id="deletePublicPartiTotalData"> |
||||
|
delete from screen_public_parti_total_data |
||||
|
where CUSTOMER_ID = #{customerId} |
||||
|
AND ORG_ID IN |
||||
|
<foreach item="item" collection="orgIds" open="(" separator="," close=")"> |
||||
|
#{item} |
||||
|
</foreach> |
||||
|
</delete> |
||||
|
|
||||
|
<insert id="batchInsertPublicPartiTotalData" parameterType="map"> |
||||
|
insert into screen_public_parti_total_data |
||||
|
( |
||||
|
ID, |
||||
|
CUSTOMER_ID, |
||||
|
ORG_TYPE, |
||||
|
ORG_ID, |
||||
|
PARENT_ID, |
||||
|
ORG_NAME, |
||||
|
DATA_END_TIME, |
||||
|
TOPIC_TOTAL, |
||||
|
ISSUE_TOTAL, |
||||
|
PROJECT_TOTAL, |
||||
|
REG_USER_TOTAL, |
||||
|
JOIN_USER_TOTAL, |
||||
|
DEL_FLAG, |
||||
|
REVISION, |
||||
|
CREATED_BY, |
||||
|
CREATED_TIME, |
||||
|
UPDATED_BY, |
||||
|
UPDATED_TIME |
||||
|
) values |
||||
|
<foreach collection="list" item="item" index="index" separator=","> |
||||
|
( |
||||
|
(SELECT REPLACE(UUID(), '-', '') AS id), |
||||
|
#{customerId}, |
||||
|
#{item.orgType}, |
||||
|
#{item.orgId}, |
||||
|
#{item.parentId}, |
||||
|
#{item.orgName}, |
||||
|
#{item.dataEndTime}, |
||||
|
#{item.topicTotal}, |
||||
|
#{item.issueTotal}, |
||||
|
#{item.projectTotal}, |
||||
|
#{item.regUserTotal}, |
||||
|
|
||||
|
#{item.joinUserTotal}, |
||||
|
0, |
||||
|
0, |
||||
|
'APP_USER', |
||||
|
now(), |
||||
|
'APP_USER', |
||||
|
now() |
||||
|
) |
||||
|
</foreach> |
||||
|
</insert> |
||||
|
|
||||
|
|
||||
|
</mapper> |
Loading…
Reference in new issue