From 8f33f6dc70f61bb3e8d7883a6ca6b48d670675fb Mon Sep 17 00:00:00 2001 From: jianjun Date: Sun, 27 Sep 2020 10:33:34 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/screencoll/form/UserJoinFormDTO.java | 5 +- .../screen/ScreenUserJoinEntity.java | 4 +- .../impl/PublicPartExtractServiceImpl.java | 13 +++-- .../impl/ShiBeiScreenCollServiceImpl.java | 53 +++++++++++++++--- ...评价指标体系算法需求-备注.xlsx | Bin 64274 -> 64561 bytes 5 files changed, 60 insertions(+), 15 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screencoll/form/UserJoinFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screencoll/form/UserJoinFormDTO.java index 9abd6012d6..b160224471 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screencoll/form/UserJoinFormDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screencoll/form/UserJoinFormDTO.java @@ -3,6 +3,7 @@ package com.epmet.dto.screencoll.form; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; /** * 11、基层治理-公众参与 入参 @@ -47,7 +48,7 @@ public class UserJoinFormDTO implements Serializable { /** * 人均议题 */ - private Integer avgIssue; + private BigDecimal avgIssue; /** * 总的参与次数 @@ -57,5 +58,5 @@ public class UserJoinFormDTO implements Serializable { /** * 平均参与度 */ - private Integer avgJoin; + private BigDecimal avgJoin; } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenUserJoinEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenUserJoinEntity.java index 75668a1215..138e19cd30 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenUserJoinEntity.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenUserJoinEntity.java @@ -90,7 +90,7 @@ public class ScreenUserJoinEntity extends BaseEpmetEntity { /** * 人均议题 */ - private Integer avgIssue; + private BigDecimal avgIssue; /** * 人均议题较上月增长率(采集的时候后台自己计算) @@ -105,7 +105,7 @@ public class ScreenUserJoinEntity extends BaseEpmetEntity { /** * 平均参与度 */ - private Integer avgJoin; + private BigDecimal avgJoin; /** * 平均参与度较上月增长率(采集的时候后台自己计算) diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java index 3fd70b4e5a..bb94830ba1 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java @@ -53,7 +53,7 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService { /** * desc: 【月】抽取公众参与 人均议题 总次数和平均参与度 * target:screen_user_join - * 总参与:统计周期内议题表决的人数 + * 总参与:统计周期内议题表决(虽然可以评价 但是只有表决的人可以评价 所以按表决人数算)的人数 * 百人人均议题:统计周期内总的议题数/(注册用户数/100) * 百人平均参与度:每个议题的实际参与数/应参与数 的平均值:(每个议题的实际参与数/应参与数)的和)/被表决的议题数 * 不考虑市北:人均议题:统计周期内议题总数/发过议题的人数 参与度:各个行为(表决)的总数/发生行为的人数 @@ -102,7 +102,12 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService { //百人人均议题:统计周期内总的议题数/(注册用户数/100) BigDecimal avgIssueCount = new BigDecimal(issue.getIssueIncr()).divide(new BigDecimal(user.getUserCount()).divide(new BigDecimal(NumConstant.ONE_HUNDRED))); // 需要修改字段类型 - //entity.setAvgIssue(avgIssueCount); + entity.setAvgIssue(avgIssueCount); + + //百人平均参与度:每个议题的实际参与数/应参与数 的平均值:(每个议题的实际参与数/应参与数)的和)/被表决的议题数 + + + entity.setAvgJoin(new BigDecimal(0)); }); @@ -144,10 +149,10 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService { entity.setJoinTotal(0); entity.setJoinTotalUpRate(new BigDecimal("0")); entity.setJoinTotalUpFlag(""); - entity.setAvgIssue(0); + entity.setAvgIssue(new BigDecimal(0)); entity.setAvgIssueUpRate(new BigDecimal("0")); entity.setAvgIssueUpFlag(""); - entity.setAvgJoin(0); + entity.setAvgJoin(new BigDecimal(0)); entity.setAgvgJoinUpRate(new BigDecimal("0")); entity.setAgvgJoinUpFlag(""); result.put(entity.getOrgId(), entity); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ShiBeiScreenCollServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ShiBeiScreenCollServiceImpl.java index 4a5e9697fb..9438f4c3ea 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ShiBeiScreenCollServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ShiBeiScreenCollServiceImpl.java @@ -413,15 +413,35 @@ public class ShiBeiScreenCollServiceImpl implements ShiBeiScreenCollService { * @Author zhangyong * @Date 15:38 2020-08-21 **/ - private BigDecimal calculateGrowthRateNumber(Integer old, Integer now){ - if (NumConstant.ZERO == old){ + private BigDecimal calculateGrowthRateNumber(Integer old, Integer now) { + if (NumConstant.ZERO == old) { return new BigDecimal(now * NumConstant.ONE_HUNDRED); } BigDecimal bignum1 = new BigDecimal((now - old) * NumConstant.ONE_HUNDRED); - BigDecimal bignum2 = bignum1.divide(new BigDecimal(old),2,BigDecimal.ROUND_HALF_UP); + BigDecimal bignum2 = bignum1.divide(new BigDecimal(old), 2, BigDecimal.ROUND_HALF_UP); return bignum2; } + /** + * 计算 本月数值 相较于 上月数值,的增长率 + * + * @param old 上月数值 + * @param now 本月数值 + * @return java.math.BigDecimal + * @Author zhangyong + * @Date 15:38 2020-08-21 + **/ + private BigDecimal calculateGrowthRateNumber(BigDecimal old, BigDecimal now) { + BigDecimal oneHundred = new BigDecimal(NumConstant.ONE_HUNDRED); + if (old.compareTo(new BigDecimal(NumConstant.ZERO)) == NumConstant.ZERO) { + return now.multiply(oneHundred); + } + BigDecimal bignum1 = now.subtract(old).multiply(oneHundred); + BigDecimal bignum2 = bignum1.divide(old, 2, BigDecimal.ROUND_HALF_UP); + return bignum2; + } + + /** * 计算 本月数值 相较于 上月数值,的增长率, 得出标识 * @@ -431,10 +451,29 @@ public class ShiBeiScreenCollServiceImpl implements ShiBeiScreenCollService { * @Author zhangyong * @Date 15:38 2020-08-21 **/ - private String calculateGrowthRateFlag(Integer old, Integer now){ - if (old > now){ + private String calculateGrowthRateFlag(Integer old, Integer now) { + if (old > now) { + return CompareConstant.DECR_STR; + } else if (old < now) { + return CompareConstant.INCR_STR; + } else { + return CompareConstant.EQ_STR; + } + } + + /** + * 计算 本月数值 相较于 上月数值,的增长率, 得出标识 + * + * @param old 上月数值 + * @param now 本月数值 + * @return java.util.String + * @Author zhangyong + * @Date 15:38 2020-08-21 + **/ + private String calculateGrowthRateFlag(BigDecimal old, BigDecimal now) { + if (old.compareTo(now) == 1) { return CompareConstant.DECR_STR; - } else if (old < now){ + } else if (old.compareTo(now) == -1) { return CompareConstant.INCR_STR; } else { return CompareConstant.EQ_STR; @@ -448,7 +487,7 @@ public class ShiBeiScreenCollServiceImpl implements ShiBeiScreenCollService { if (formDTO.getIsFirst()) { int deleteNum; do { - deleteNum = screenPioneerDataDao.deletePioneerDataByCustomerId(customerId,IndexCalConstant.DELETE_SIZE); + deleteNum = screenPioneerDataDao.deletePioneerDataByCustomerId(customerId, IndexCalConstant.DELETE_SIZE); } while (deleteNum != NumConstant.ZERO); } if (!CollectionUtils.isEmpty(formDTO.getDataList())) { diff --git a/epmet-module/data-statistical/data-statistical-server/src/test/java/resources/评价指标体系算法需求-备注.xlsx b/epmet-module/data-statistical/data-statistical-server/src/test/java/resources/评价指标体系算法需求-备注.xlsx index ea2e9e044c82c8eb971d59802f735a538572a6db..e7bd157f47e787b91e5067aa3e2daa3d21f2b00d 100644 GIT binary patch literal 64561 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 literal 64274 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 E0btD&IsgCw From 04a3d0145dc2ad23ad8e670bdea5c3c871cf2ad5 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Sun, 27 Sep 2020 10:36:19 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=85=9A=E5=BB=BA=E5=BC=95=E9=A2=86?= =?UTF-8?q?=E3=80=90=E7=BB=84=E7=BB=87=E6=AC=A1=E6=95=B0=EF=BC=8C=E5=8F=82?= =?UTF-8?q?=E4=B8=8E=E4=BA=BA=E6=95=B0=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/controller/DemoController.java | 5 +- .../screen/ScreenPartyBranchDataDao.java | 30 +++++++ .../screen/ScreenPartyLinkMassesDataDao.java | 3 +- .../toscreen/impl/PartyGuideServiceImpl.java | 81 ++++++++++++++++++- .../screen/ScreenPartyBranchDataService.java | 30 +++++++ .../ScreenPartyLinkMassesDataService.java | 3 +- .../impl/ScreenCustomerAgencyServiceImpl.java | 2 +- .../ScreenPartyBranchDataServiceImpl.java | 50 ++++++++++++ .../ScreenPartyLinkMassesDataServiceImpl.java | 5 +- .../screen/ScreenCustomerAgencyDao.xml | 3 +- .../screen/ScreenCustomerGridDao.xml | 3 +- .../screen/ScreenPartyBranchDataDao.xml | 59 ++++++++++++++ .../screen/ScreenPartyLinkMassesDataDao.xml | 1 - 13 files changed, 258 insertions(+), 17 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java index d67cded1db..8b0dc2156a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java @@ -17,6 +17,7 @@ import com.epmet.dao.stats.DimDateDao; import com.epmet.dao.stats.DimMonthDao; import com.epmet.dto.AgencySubTreeDto; import com.epmet.dto.extract.form.ExtractOriginFormDTO; +import com.epmet.dto.extract.form.ScreenExtractFormDTO; import com.epmet.dto.indexcal.CalculateCommonFormDTO; import com.epmet.dto.screen.form.ScreenCentralZoneDataFormDTO; import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO; @@ -651,8 +652,8 @@ public class DemoController { private PartyGuideService partyGuideService; @PostMapping("zxczxc") - public Result getZxcZxc(@RequestBody CustomerIdAndDateIdFormDTO formDTO){ -// partyGuideService.partyGuideExtract(formDTO.getCustomerId(),formDTO.getDateId()); + public Result getZxcZxc(@RequestBody ScreenExtractFormDTO formDTO){ + partyGuideService.partyGuideExtract(formDTO); return new Result(); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyBranchDataDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyBranchDataDao.java index 8c5211cefc..9911306d4e 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyBranchDataDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyBranchDataDao.java @@ -65,4 +65,34 @@ public interface ScreenPartyBranchDataDao extends BaseDao lists); + + /** + * @Description 删除旧的建设情况数据 + * @Param customerId + * @Param monthId + * @Param orgIds + * @author zxc + * @date 2020/9/27 9:04 上午 + */ + Integer deleteOldScreenPartyBranchData(@Param("customerId")String customerId,@Param("monthId") String monthId,@Param("orgIds") List orgIds); + + /** + * @Description 根据orgId查询建设情况数据 + * @Param customerId + * @Param monthId + * @Param orgIds + * @author zxc + * @date 2020/9/27 9:38 上午 + */ + List selectScreenPartyBranchDataByOrgId(@Param("customerId") String customerId, @Param("monthId") String monthId,@Param("orgIds") List orgIds); + + /** + * @Description 根据parentId查询建设情况数据 + * @Param customerId + * @Param monthId + * @Param parentId + * @author zxc + * @date 2020/9/27 9:38 上午 + */ + List selectScreenPartyBranchDataByParentId(@Param("customerId")String customerId,@Param("monthId") String monthId,@Param("parentId") String parentId); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyLinkMassesDataDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyLinkMassesDataDao.java index 586ab1d0a8..14e2e781bc 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyLinkMassesDataDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyLinkMassesDataDao.java @@ -68,12 +68,11 @@ public interface ScreenPartyLinkMassesDataDao extends BaseDao orgIds); + Integer deleteOldPartyLinkInfo(@Param("customerId") String customerId, @Param("orgIds") List orgIds); /** * @Description 查询党员联系群众信息 diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java index 57d1556e55..aac1f632bf 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java @@ -2,6 +2,7 @@ package com.epmet.service.evaluationindex.extract.toscreen.impl; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.DateUtils; import com.epmet.constant.ScreenConstant; import com.epmet.dto.extract.form.ScreenExtractFormDTO; import com.epmet.dto.extract.form.ScreenPartyBranchDataFormDTO; @@ -286,13 +287,13 @@ public class PartyGuideServiceImpl implements PartyGuideService { if (party.getOrgId().equals(join.getOrgId())){ party.setAverageJoinUserCount(join.getJoinUserCount()); party.setAverageJoinUserCount(party.getJoinUserCount() / party.getOrganizeCount()); + party.setYearId(DateUtils.getYearId(monthId)); } }); }); } result.addAll(screenPartyBranchDataList); }); - // 社区级别的 Map> groupByAgency = result.stream().collect(Collectors.groupingBy(ScreenPartyBranchDataFormDTO::getParentId)); List orgNameAgencyList = agencyService.selectOrgNameAgency(orgIds); @@ -309,14 +310,61 @@ public class PartyGuideServiceImpl implements PartyGuideService { form.setOrgId(agencyId); form.setCustomerId(customerId); form.setOrgType(ScreenConstant.AGENCY); + form.setMonthId(monthId); + form.setYearId(DateUtils.getYearId(monthId)); form.setOrganizeCount(actList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getOrganizeCount))); form.setJoinUserCount(actList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getJoinUserCount))); form.setAverageJoinUserCount(form.getJoinUserCount() / form.getOrganizeCount()); result.add(form); }); - + delAndInsertOrganize(result,customerId,monthId,orgIds); }else { - + List directGridIds = gridService.selectDirectGrid(orgIds); + agencyIdList.forEach(agency -> { + String agencyId = agency.getAgencyId(); + List disGridIds = new ArrayList<>(); + directGridIds.forEach(grid -> { + if (agencyId.equals(grid.getAgencyId())){ + disGridIds.add(grid.getGridId()); + } + }); + // 存在直属网格 + if (!CollectionUtils.isEmpty(disGridIds)){ + List gridResult = new ArrayList<>(); + List joinUserCountList = actUserRelationService.selectJoinUserCount(customerId, monthId); + List orgNameList = agencyService.selectOrgNameGrid(disGridIds); + List screenPartyBranchDataList = actInfoService.selectActInfo(customerId, monthId, ScreenConstant.GRID, disGridIds); + if (!CollectionUtils.isEmpty(screenPartyBranchDataList)){ + screenPartyBranchDataList.forEach(party -> { + orgNameList.forEach(org -> { + if (party.getOrgId().equals(org.getGridId())){ + party.setOrgName(org.getGridName()); + } + }); + ScreenPartyBranchDataFormDTO copyParty = ConvertUtils.sourceToTarget(party, ScreenPartyBranchDataFormDTO.class); + gridResult.add(copyParty); + }); + } + } + List disPartyBranchDataList = partyBranchDataService.selectScreenPartyBranchDataByOrgId(customerId, monthId, disGridIds); + List screenPartyBranchDataList = partyBranchDataService.selectScreenPartyBranchDataByParentId(customerId, monthId, agencyId); + screenPartyBranchDataList.addAll(disPartyBranchDataList); + if (!CollectionUtils.isEmpty(screenPartyBranchDataList)){ + ScreenPartyBranchDataFormDTO form = new ScreenPartyBranchDataFormDTO(); + form.setOrgId(agencyId); + form.setOrgType(ScreenConstant.AGENCY); + form.setOrgName(screenPartyBranchDataList.get(NumConstant.ZERO).getOrgName()); + form.setCustomerId(customerId); + form.setMonthId(monthId); + form.setYearId(DateUtils.getYearId(monthId)); + form.setParentId(screenPartyBranchDataList.get(NumConstant.ZERO).getParentId()); + form.setJoinUserCount(screenPartyBranchDataList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getJoinUserCount))); + form.setOrganizeCount(screenPartyBranchDataList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getOrganizeCount))); + form.setAverageJoinUserCount(form.getJoinUserCount() / form.getOrganizeCount()); + result.add(form); + } + }); + delAndInsertOrganize(result,customerId,monthId,orgIds); } } } @@ -381,7 +429,7 @@ public class PartyGuideServiceImpl implements PartyGuideService { } Integer delNum; do { - delNum = linkMassesDataService.deleteOldPartyLinkInfo(customerId, monthId, orgIds); + delNum = linkMassesDataService.deleteOldPartyLinkInfo(customerId, orgIds); }while (delNum > NumConstant.ZERO); List> partition = ListUtils.partition(finalResult, NumConstant.ONE_HUNDRED); partition.forEach(p -> { @@ -403,6 +451,31 @@ public class PartyGuideServiceImpl implements PartyGuideService { List screenPartyBranchData = agencyService.selectAllAgencyIdToOrganize(customerId, monthId); List screenPartyBranchDataList = gridService.selectAllGridIdToOrganize(customerId, monthId); screenPartyBranchDataList.addAll(screenPartyBranchData); + List finalResult = new ArrayList<>(); + screenPartyBranchDataList.forEach(rl -> { + orgIds.forEach(orgId -> { + if (rl.getOrgId().equals(orgId)){ + finalResult.add(rl); + } + }); + }); + if (!CollectionUtils.isEmpty(result)){ + finalResult.forEach(fr -> { + result.forEach(r -> { + if (fr.getOrgId().equals(r.getOrgId())){ + BeanUtils.copyProperties(r,fr); + } + }); + }); + } + Integer delNum; + do { + delNum = partyBranchDataService.deleteOldScreenPartyBranchData(customerId, monthId, orgIds); + }while (delNum > NumConstant.ZERO); + List> partition = ListUtils.partition(finalResult, NumConstant.ONE_HUNDRED); + partition.forEach(p -> { + partyBranchDataService.insertScreenPartyBranchData(p); + }); } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyBranchDataService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyBranchDataService.java index 68197d665c..1fc80f30ca 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyBranchDataService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyBranchDataService.java @@ -39,4 +39,34 @@ public interface ScreenPartyBranchDataService extends BaseService lists); + /** + * @Description 删除旧的建设情况数据 + * @Param customerId + * @Param monthId + * @Param orgIds + * @author zxc + * @date 2020/9/27 9:04 上午 + */ + Integer deleteOldScreenPartyBranchData(String customerId, String monthId, List orgIds); + + /** + * @Description 根据orgId查询建设情况数据 + * @Param customerId + * @Param monthId + * @Param orgIds + * @author zxc + * @date 2020/9/27 9:38 上午 + */ + List selectScreenPartyBranchDataByOrgId(String customerId, String monthId, List orgIds); + + /** + * @Description 根据parentId查询建设情况数据 + * @Param customerId + * @Param monthId + * @Param parentId + * @author zxc + * @date 2020/9/27 9:38 上午 + */ + List selectScreenPartyBranchDataByParentId(String customerId, String monthId, String parentId); + } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyLinkMassesDataService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyLinkMassesDataService.java index f03255904a..77b8cdb3eb 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyLinkMassesDataService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyLinkMassesDataService.java @@ -42,12 +42,11 @@ public interface ScreenPartyLinkMassesDataService extends BaseService orgIds); + Integer deleteOldPartyLinkInfo(String customerId, List orgIds); /** * @Description 查询党员联系群众信息 diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenCustomerAgencyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenCustomerAgencyServiceImpl.java index 0a79ebf476..d506856d0e 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenCustomerAgencyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenCustomerAgencyServiceImpl.java @@ -175,7 +175,7 @@ public class ScreenCustomerAgencyServiceImpl implements ScreenCustomerAgencyServ @Override public List selectAllAgencyIdToOrganize(String customerId, String monthId) { - return null; + return screenCustomerAgencyDao.selectAllAgencyIdToOrganize(customerId, monthId); } /** diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyBranchDataServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyBranchDataServiceImpl.java index 271ac60c71..afd2e8aee3 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyBranchDataServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyBranchDataServiceImpl.java @@ -18,7 +18,10 @@ package com.epmet.service.evaluationindex.screen.impl; +import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.constant.DataSourceConstant; import com.epmet.dao.evaluationindex.screen.ScreenPartyBranchDataDao; import com.epmet.dto.extract.form.ScreenPartyBranchDataFormDTO; import com.epmet.entity.evaluationindex.screen.ScreenPartyBranchDataEntity; @@ -26,6 +29,7 @@ import com.epmet.service.evaluationindex.screen.ScreenPartyBranchDataService; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; /** @@ -35,6 +39,7 @@ import java.util.List; * @since v1.0.0 2020-09-22 */ @Service +@DataSource(DataSourceConstant.EVALUATION_INDEX) public class ScreenPartyBranchDataServiceImpl extends BaseServiceImpl implements ScreenPartyBranchDataService { /** @@ -49,4 +54,49 @@ public class ScreenPartyBranchDataServiceImpl extends BaseServiceImpl orgIds) { + if (!CollectionUtils.isEmpty(orgIds)){ + return baseDao.deleteOldScreenPartyBranchData(customerId, monthId, orgIds); + } + return NumConstant.ZERO; + } + + /** + * @Description 根据orgId查询建设情况数据 + * @Param customerId + * @Param monthId + * @Param orgIds + * @author zxc + * @date 2020/9/27 9:38 上午 + */ + @Override + public List selectScreenPartyBranchDataByOrgId(String customerId, String monthId, List orgIds) { + if (!CollectionUtils.isEmpty(orgIds)){ + return baseDao.selectScreenPartyBranchDataByOrgId(customerId, monthId, orgIds); + } + return new ArrayList<>(); + } + + /** + * @Description 根据parentId查询建设情况数据 + * @Param customerId + * @Param monthId + * @Param parentId + * @author zxc + * @date 2020/9/27 9:38 上午 + */ + @Override + public List selectScreenPartyBranchDataByParentId(String customerId, String monthId, String parentId) { + return baseDao.selectScreenPartyBranchDataByParentId(customerId, monthId, parentId); + } } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyLinkMassesDataServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyLinkMassesDataServiceImpl.java index 2aec948249..2915297086 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyLinkMassesDataServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyLinkMassesDataServiceImpl.java @@ -57,14 +57,13 @@ public class ScreenPartyLinkMassesDataServiceImpl extends BaseServiceImpl orgIds) { - return baseDao.deleteOldPartyLinkInfo(customerId, monthId, orgIds); + public Integer deleteOldPartyLinkInfo(String customerId, List orgIds) { + return baseDao.deleteOldPartyLinkInfo(customerId, orgIds); } /** diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml index 594ded8702..1c1907e4a7 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml @@ -328,7 +328,8 @@ AGENCY_NAME AS orgName, CUSTOMER_ID AS customerId, PID AS parentId, - #{monthId} AS dataEndTime + #{monthId} AS monthId, + SUBSTR(#{monthId},1,4) AS yearId FROM screen_customer_agency WHERE diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerGridDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerGridDao.xml index 7f4df45113..ae09cefb52 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerGridDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerGridDao.xml @@ -319,7 +319,8 @@ grid_name AS orgName, CUSTOMER_ID AS customerId, PARENT_AGENCY_ID AS parentId, - #{monthId} AS dataEndTime + #{monthId} AS monthId, + SUBSTR(#{monthId},1,4) AS yearId FROM screen_customer_grid WHERE diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml index 92b2b888b7..ae9430e214 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml @@ -109,4 +109,63 @@ ) + + + + delete from screen_party_branch_data + where CUSTOMER_ID = #{customerId} + and MONTH_ID = #{monthId} + and + ( + + org_id = #{orgId} + + ) + LIMIT 1000 + + + + + + + diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyLinkMassesDataDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyLinkMassesDataDao.xml index 20d7c3f7e7..f2c7adcb3d 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyLinkMassesDataDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyLinkMassesDataDao.xml @@ -13,7 +13,6 @@ delete from screen_party_link_masses_data where CUSTOMER_ID = #{customerId} - and DATA_END_TIME = #{monthId} and ( From 211706987486dee869a2f34c8f9af0d9082202fe Mon Sep 17 00:00:00 2001 From: jianjun Date: Sun, 27 Sep 2020 11:10:36 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E5=80=BC=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/IndexDictEntity.java | 5 +++++ .../epmet/model/IndexExcelDataListener.java | 13 ++++++++++++- .../main/java/com/epmet/model/IndexModel.java | 5 +++++ ...评价指标体系算法需求-备注.xlsx | Bin 64561 -> 64588 bytes 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/IndexDictEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/IndexDictEntity.java index 149c4c128c..d05a586f76 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/IndexDictEntity.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/IndexDictEntity.java @@ -59,4 +59,9 @@ public class IndexDictEntity extends BaseEpmetEntity { * 正相关:positive;负相关:negative */ private String correlation; + + /** + * 指标值类型 无:none;整数:integer;小数: decimal;百分比:percent + */ + private String valueType; } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java index fc8ec41c57..ea56c96a37 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java @@ -42,7 +42,6 @@ public class IndexExcelDataListener extends AnalysisEventListener { List indexModelList = new ArrayList<>(); private String preWheight; - private Integer wheightSum = 0; /** * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 */ @@ -104,6 +103,17 @@ public class IndexExcelDataListener extends AnalysisEventListener { } } + //指标值类型 无:none;整数:integer;小数: decimal;百分比:percent + if (StringUtils.isNotBlank(data.getValueType())) { + if ("整数".equals(data.getValueType())) { + data.setValueType("integer"); + } else if ("小数".equals(data.getValueType())) { + data.setValueType("decimal"); + } else if ("百分比".equals(data.getValueType())) { + data.setValueType("percent"); + } + } + IndexDictEntity entity = new IndexDictEntity(); IndexDictEntity entity2 = new IndexDictEntity(); IndexDictEntity entity3 = new IndexDictEntity(); @@ -306,6 +316,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { entity5.setCorrelation(data.getCorrelation()); entity5.setLevel("5"); entity5.setIndexCode(Pinyin4jUtil.getSpellPinYin(data.getLevel5Index(), false, 4)); + entity.setValueType(data.getValueType()); indexDicMap.put(data.getLevel5Index(), entity5); } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexModel.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexModel.java index b2e124ff09..cc1aed7759 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexModel.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexModel.java @@ -26,6 +26,11 @@ public class IndexModel { //没有阈值:无,有就是百分数 @ExcelProperty(value = "阈值") private String threshold; + /** + * 指标值类型 无:none;整数:integer;小数: decimal;百分比:percent + */ + @ExcelProperty(value = "五级指标值类型") + private String valueType; /** * 正相关:positive;负相关:negative */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/test/java/resources/评价指标体系算法需求-备注.xlsx b/epmet-module/data-statistical/data-statistical-server/src/test/java/resources/评价指标体系算法需求-备注.xlsx index e7bd157f47e787b91e5067aa3e2daa3d21f2b00d..7f624f10bb926ad557fbafe646b70a5785ace043 100644 GIT binary patch delta 23112 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
0G`D5s<2Pz#3;chh)W+#Prm=X-z>XGuHI2 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 delta 23104 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 From cef5c26a12ac0881bca054c3cb29f7fc1e8fa46c Mon Sep 17 00:00:00 2001 From: wangchao Date: Sun, 27 Sep 2020 13:03:34 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=8A=9E=E7=BB=93=E7=8E=87=E5=88=86?= =?UTF-8?q?=E6=AF=8D=E9=9D=9E=E7=A9=BA=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataToIndex/impl/IndexCollCommunityServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollCommunityServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollCommunityServiceImpl.java index 8391e684b7..6cd619a2fd 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollCommunityServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollCommunityServiceImpl.java @@ -134,18 +134,18 @@ public class IndexCollCommunityServiceImpl implements IndexCollCommunityService BigDecimal element = new BigDecimal(entity.getClosedProjectCount()); //分母,即机关参与过的项目数(去重) Integer denominator = agencyParticipatedCount.get(entity.getAgencyId()); - if (agencyParticipatedCount.get(entity.getAgencyId()) != NumConstant.ZERO) { + if (null != denominator && denominator != NumConstant.ZERO) { //办结率 entity.setClosedProjectRatio( element.divide(new BigDecimal(denominator), NumConstant.SIX, RoundingMode.HALF_UP) ); + }else{ + entity.setClosedProjectRatio(BigDecimal.ZERO); } //办结效率 entity.setHandleProjectRatio(efficiencyMap.get(entity.getAgencyId())); }); - - factIndexGovrnAblityOrgMonthlyService.deleteByCustomer(customerId, dimId.getMonthId(), OrgTypeConstant.COMMUNITY); factIndexGovrnAblityOrgMonthlyService.saveList(list); From 71234ea71be038af3f4fe9876efe052368e4a060 Mon Sep 17 00:00:00 2001 From: wangchao Date: Sun, 27 Sep 2020 13:09:01 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=9F=BA=E5=B1=82=E6=B2=BB=E7=90=86-?= =?UTF-8?q?=E7=83=AD=E5=BF=83=E5=B8=82=E6=B0=91=E3=80=81=E5=85=9A=E5=91=98?= =?UTF-8?q?=E6=8E=92=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/dto/indexcal/CpcScoreResultDTO.java | 27 ++++ .../java/com/epmet/dto/org/GridInfoDTO.java | 10 ++ .../com/epmet/dto/point/UserPointDTO.java | 26 ++++ .../evaluationindex/indexcal/CpcScoreDao.java | 10 ++ .../screen/ScreenPartyUserRankDataDao.java | 18 +++ .../java/com/epmet/dao/point/PointDao.java | 27 ++++ .../FactParticipationUserGridDailyDao.java | 9 -- .../stats/user/FactRegUserGridDailyDao.java | 9 ++ .../main/java/com/epmet/dao/user/UserDao.java | 10 ++ .../screen/ScreenPartyUserRankDataEntity.java | 6 + .../dataToIndex/CalCpcIndexService.java | 2 + .../impl/CalCpcIndexServiceImpl.java | 4 +- ...GrassrootsGovernDataAbsorptionService.java | 29 +++++ ...srootsGovernDataAbsorptionServiceImpl.java | 119 ++++++++++++++++++ .../indexcal/CpcIndexCalculateService.java | 13 ++ .../impl/CpcIndexCalculateServiceImpl.java | 19 +++ .../ScreenPartyUserRankDataService.java | 13 ++ .../ScreenPartyUserRankDataServiceImpl.java | 22 ++++ .../impl/ScreenUserTotalDataServiceImpl.java | 7 +- .../epmet/service/point/UserPointService.java | 18 +++ .../point/impl/UserPointServiceImpl.java | 46 +++++++ ...reenCentralZoneDataExtractServiceImpl.java | 34 +++-- .../com/epmet/service/user/UserService.java | 10 ++ .../service/user/impl/UserServiceImpl.java | 50 ++++---- .../evaluationindex/indexcal/CpcScoreDao.xml | 14 +++ .../screen/ScreenPartyUserRankDataDao.xml | 59 +++++++++ .../resources/mapper/org/CustomerGridDao.xml | 6 +- .../resources/mapper/point/UserPointDao.xml | 19 +++ .../mapper/stats/FactGroupGridDailyDao.xml | 5 +- .../FactParticipationUserGridDailyDao.xml | 37 ------ .../stats/user/FactRegUserGridDailyDao.xml | 43 +++++++ .../main/resources/mapper/user/UserDao.xml | 24 ++++ 32 files changed, 651 insertions(+), 94 deletions(-) create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcal/CpcScoreResultDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/point/UserPointDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/point/PointDao.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/ScreenGrassrootsGovernDataAbsorptionService.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/UserPointService.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/impl/UserPointServiceImpl.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/point/UserPointDao.xml diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcal/CpcScoreResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcal/CpcScoreResultDTO.java new file mode 100644 index 0000000000..31b115caab --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcal/CpcScoreResultDTO.java @@ -0,0 +1,27 @@ +package com.epmet.dto.indexcal; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @Description 党员指标得分查询DTO + * @ClassName CpcScoreResultDTO + * @Auth wangc + * @Date 2020-09-25 16:52 + */ +@Data +public class CpcScoreResultDTO implements Serializable { + private static final long serialVersionUID = -7129757727997430029L; + + /** + * 用户Id + * */ + private String userId; + + /** + * 党员指标得分 + * */ + private BigDecimal score; +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/org/GridInfoDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/org/GridInfoDTO.java index 06bc4d9cca..993c4ef354 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/org/GridInfoDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/org/GridInfoDTO.java @@ -38,4 +38,14 @@ public class GridInfoDTO implements Serializable { * agencyId的pids */ private String pids; + + /** + * 网格名称 + * */ + private String gridName; + + /** + * 机关名称 + * */ + private String orgName; } diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/point/UserPointDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/point/UserPointDTO.java new file mode 100644 index 0000000000..067ebbf254 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/point/UserPointDTO.java @@ -0,0 +1,26 @@ +package com.epmet.dto.point; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 用户积分DTO + * @ClassName UserPointDTO + * @Auth wangc + * @Date 2020-09-25 15:42 + */ +@Data +public class UserPointDTO implements Serializable { + private static final long serialVersionUID = 6976982699085437418L; + + /** + * 用户Id + * */ + private String userId; + + /** + * 用户累计积分 + * */ + private Integer pointTotal; +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcal/CpcScoreDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcal/CpcScoreDao.java index c03786ecfe..c1b8e5b479 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcal/CpcScoreDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcal/CpcScoreDao.java @@ -19,6 +19,7 @@ package com.epmet.dao.evaluationindex.indexcal; import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.dto.indexcal.CalculateCommonFormDTO; +import com.epmet.dto.indexcal.CpcScoreResultDTO; import com.epmet.entity.evaluationindex.indexcal.CpcScoreEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -83,4 +84,13 @@ public interface CpcScoreDao extends BaseDao { List getPartScore(@Param("customerId") String customerId, @Param("monthId") String monthId, @Param("allParentCode") String allParentCode, @Param("offset") int offset, @Param("pageSize") int pageSize); int insertBatch(@Param("list") Collection values); + + /** + * @Description 查询客户下的党员指标得分 + * @param customerId + * @return + * @author wangc + * @date 2020.09.25 17:13 + **/ + List selectCpcScore(@Param("customerId") String customerId,@Param("monthId") String monthId); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyUserRankDataDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyUserRankDataDao.java index 518c3fa795..35132261cc 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyUserRankDataDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPartyUserRankDataDao.java @@ -45,6 +45,15 @@ public interface ScreenPartyUserRankDataDao extends BaseDao list,@Param("customerId")String customerId); + + /** + * @Description 批量插入 + * @param list + * @return void + * @author wangc + * @date 2020.09.27 10:06 + */ + void insertBatch(List list); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/point/PointDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/point/PointDao.java new file mode 100644 index 0000000000..fe777344aa --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/point/PointDao.java @@ -0,0 +1,27 @@ +package com.epmet.dao.point; + +import com.epmet.dto.point.UserPointDTO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 积分查询DAO + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2020-03-16 + */ +@Mapper +public interface PointDao { + + /** + * @Description 查询客户下的用户积分 + * @param customerId + * @return + * @author wangc + * @date 2020.09.25 15:51 + **/ + List selectUserPointByCustomerId(@Param("customerId") String customerId); + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactParticipationUserGridDailyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactParticipationUserGridDailyDao.java index cd84b6d3b0..fd0b7d2a86 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactParticipationUserGridDailyDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactParticipationUserGridDailyDao.java @@ -48,13 +48,4 @@ public interface FactParticipationUserGridDailyDao extends BaseDao selectUserCount(String customerId, String dateId); - - /** - * @Description 根据机构级别查询用户数与党员数 - * @param orgLevel - * @return - * @author wangc - * @date 2020.09.24 14:59 - **/ - List selectUserAndPartymemberByOrgLevel(@Param("orgLevel") String orgLevel,@Param("customerId") String customerId, @Param("dateId")String dateId); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactRegUserGridDailyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactRegUserGridDailyDao.java index f06c4c1179..ba2c53eb2c 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactRegUserGridDailyDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/user/FactRegUserGridDailyDao.java @@ -19,6 +19,7 @@ package com.epmet.dao.stats.user; import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.dto.stats.user.FactRegUserGridDailyDTO; +import com.epmet.entity.evaluationindex.screen.ScreenUserTotalDataEntity; import com.epmet.entity.stats.user.FactRegUserGridDailyEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -38,4 +39,12 @@ public interface FactRegUserGridDailyDao extends BaseDao selectUserAndPartymemberByOrgLevel(@Param("orgLevel") String orgLevel, @Param("customerId") String customerId, @Param("dateId")String dateId); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java index 28c0a2c389..b9162c30a2 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java @@ -3,6 +3,7 @@ package com.epmet.dao.user; import com.epmet.dto.extract.form.GridHeartedFormDTO; import com.epmet.dto.extract.result.UserPartyResultDTO; import com.epmet.dto.user.result.CommonTotalAndIncCountResultDTO; +import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -121,4 +122,13 @@ public interface UserDao { * @Date 2020/9/21 13:46 **/ List selectGridRegUserIds(@Param("customerId") String customerId, @Param("gridId") String gridId); + + /** + * @Description 获取客户下的网格注册居民 + * @param customerId + * @return + * @author wangc + * @date 2020.09.25 13:54 + **/ + List selectRegisteredUserByCustomerId(@Param("customerId") String customerId); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPartyUserRankDataEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPartyUserRankDataEntity.java index 4d70bf29ff..93b3a98577 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPartyUserRankDataEntity.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPartyUserRankDataEntity.java @@ -22,6 +22,8 @@ import com.epmet.commons.mybatis.entity.BaseEpmetEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + /** * 党建引领|基层治理-市民(党员)积分排行榜 * @@ -90,6 +92,10 @@ public class ScreenPartyUserRankDataEntity extends BaseEpmetEntity { */ private Integer pointTotal; + /** + * 党员指标得分 + * */ + private BigDecimal indexScore; /** * 数据更新至: yyyy|yyyyMM|yyyyMMdd(08-21新增) */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/CalCpcIndexService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/CalCpcIndexService.java index af4b583eec..cb9552dd4d 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/CalCpcIndexService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/CalCpcIndexService.java @@ -1,5 +1,7 @@ package com.epmet.service.evaluationindex.extract.dataToIndex; +import java.util.Map; + /** * 党员相关 * diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java index a837550337..41c21e6b68 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java @@ -2,6 +2,7 @@ package com.epmet.service.evaluationindex.extract.dataToIndex.impl; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.utils.DateUtils; +import com.epmet.dto.indexcal.CpcScoreResultDTO; import com.epmet.entity.evaluationindex.indexcoll.FactIndexPartyAblityCpcMonthlyEntity; import com.epmet.service.evaluationindex.extract.dataToIndex.CalCpcIndexService; import com.epmet.service.evaluationindex.extract.todata.*; @@ -126,7 +127,6 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService { factIndexPartyAblityCpcMonthlyService.delAndSavePartyAblityCpcMonthly(customerId,monthId,indexPartyAblityCpcList); } - /** * @param customerId * @param partyMemberList @@ -400,4 +400,6 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService { + + } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/ScreenGrassrootsGovernDataAbsorptionService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/ScreenGrassrootsGovernDataAbsorptionService.java new file mode 100644 index 0000000000..56c73b2de5 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/ScreenGrassrootsGovernDataAbsorptionService.java @@ -0,0 +1,29 @@ +package com.epmet.service.evaluationindex.extract.toscreen; + +import com.epmet.dto.screen.form.ScreenCentralZoneDataFormDTO; + +/** + * 基层治理 + * 热心市民积分 党员能力值 + * 难点赌点 + * */ +public interface ScreenGrassrootsGovernDataAbsorptionService { + + /** + * @Description 用户积分、党员分值数据中转站 + * @param param + * @return + * @author wangc + * @date 2020.09.25 09:53 + **/ + void userScoreDataHub(ScreenCentralZoneDataFormDTO param); + + /** + * @Description 难点赌点数据中转站 + * @param param + * @return + * @author wangc + * @date 2020.09.25 10:00 + **/ + void difficultyDataHub(ScreenCentralZoneDataFormDTO param); +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java new file mode 100644 index 0000000000..563a8c65cc --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java @@ -0,0 +1,119 @@ +package com.epmet.service.evaluationindex.extract.toscreen.impl; + +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.utils.DateUtils; +import com.epmet.dto.org.GridInfoDTO; +import com.epmet.dto.screen.form.ScreenCentralZoneDataFormDTO; +import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity; +import com.epmet.service.evaluationindex.extract.toscreen.ScreenGrassrootsGovernDataAbsorptionService; +import com.epmet.service.evaluationindex.indexcal.CpcIndexCalculateService; +import com.epmet.service.evaluationindex.screen.ScreenPartyUserRankDataService; +import com.epmet.service.org.CustomerGridService; +import com.epmet.service.point.UserPointService; +import com.epmet.service.user.UserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @Description 基层治理数据 + * @ClassName ScreenGrassrootsGovernDataAbsorptionServiceImpl + * @Auth wangc + * @Date 2020-09-25 09:48 + */ + +@Service +@Slf4j +public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGrassrootsGovernDataAbsorptionService { + + @Autowired + private UserService userService; + @Autowired + private CustomerGridService customerGridService; + @Autowired + private UserPointService userPointService; + @Autowired + private CpcIndexCalculateService cpcIndexCalculateService; + @Autowired + private ScreenPartyUserRankDataService screenPartyUserRankDataService; + /** + * @Description 用户积分、党员分值数据中转站 + * @param param + * @return + * @author wangc + * @date 2020.09.25 09:53 + **/ + @Override + public void userScoreDataHub(ScreenCentralZoneDataFormDTO param) { + //1.查询出客户下的网格注册用户 + List registeredUsers = userService.getRegisteredUserList(param.getCustomerId()); + + //2.查询出客户下网格的相关信息 + List gridList = customerGridService.queryGridInfoList(param.getCustomerId()); + Map gridMap = new HashMap<>(); + gridList.forEach(grid -> {gridMap.put(grid.getGridId(),grid);}); + + //3.查询出客户下用户的累计积分(累计值,没有时间概念,否则需要查询积分明细计算出评价周期末的得分) + Map pointMap = userPointService.getUserPointMap(param.getCustomerId()); + //4.查询出客户下党员的分值 + String dateId = param.getDateId(); + if(StringUtils.isEmpty(dateId)){ + //如果没有传月份,则使用当前时间的上一个月 + dateId = DateUtils.getBeforeNMonth(NumConstant.ONE); + }else{ + String dateType = DateUtils.identifyTimeDimension(dateId); + if(StringUtils.isEmpty(dateType) || !org.apache.commons.lang3.StringUtils.equalsAny(dateType,"date","month")){ + dateId = DateUtils.getBeforeNMonth(NumConstant.ONE); + }else if(org.apache.commons.lang3.StringUtils.equals(dateType,"date")){ + dateId = dateId.substring(NumConstant.ZERO,dateId.length() - NumConstant.TWO); + } + } + final String finalDateId = dateId; + + Map scoreMap = cpcIndexCalculateService.getCpcScore(param.getCustomerId(),dateId); + + //5.整合数据 + if(!CollectionUtils.isEmpty(registeredUsers)){ + registeredUsers.forEach(user -> { + GridInfoDTO gridInfo = gridMap.get(user.getGridId()); + if(null != gridInfo){ + user.setGridName(gridInfo.getGridName()); + user.setOrgId(gridInfo.getAgencyId()); + user.setOrgName(gridInfo.getOrgName()); + user.setAllParentIds(gridInfo.getPids()); + } + Integer point = pointMap.get(user.getUserId()); + BigDecimal score = scoreMap.get(user.getUserId()); + + user.setPointTotal(null == point ? NumConstant.ZERO : point); + user.setIndexScore(null == score ? new BigDecimal(NumConstant.ZERO) : score); + + user.setDataEndTime(finalDateId); + }); + + } + + //6.存入数据库 + screenPartyUserRankDataService.dataClean(registeredUsers,param.getCustomerId(),dateId); + } + + /** + * @Description 难点赌点数据中转站 + * @param param + * @return + * @author wangc + * @date 2020.09.25 10:00 + **/ + @Override + public void difficultyDataHub(ScreenCentralZoneDataFormDTO param) { + + } +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/CpcIndexCalculateService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/CpcIndexCalculateService.java index 3cd66eccf5..29acca93a9 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/CpcIndexCalculateService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/CpcIndexCalculateService.java @@ -2,6 +2,9 @@ package com.epmet.service.evaluationindex.indexcal; import com.epmet.dto.indexcal.CalculateCommonFormDTO; +import java.math.BigDecimal; +import java.util.Map; + /** * 党员指标计算service * @@ -15,4 +18,14 @@ public interface CpcIndexCalculateService { * @return */ Boolean cpcIndexCalculate(CalculateCommonFormDTO formDTO); + + /** + * @Description 获取党员指标得分 + * @param customerId + * @param monthId + * @return + * @author wangc + * @date 2020.09.25 16:48 + **/ + Map getCpcScore(String customerId, String monthId); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/CpcIndexCalculateServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/CpcIndexCalculateServiceImpl.java index a4aaf10692..278c4a2236 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/CpcIndexCalculateServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/CpcIndexCalculateServiceImpl.java @@ -12,6 +12,7 @@ import com.epmet.dao.evaluationindex.indexcal.CpcScoreDao; import com.epmet.dao.evaluationindex.indexcal.CpcSubScoreDao; import com.epmet.dao.evaluationindex.indexcoll.FactIndexPartyAblityCpcMonthlyDao; import com.epmet.dto.indexcal.CalculateCommonFormDTO; +import com.epmet.dto.indexcal.CpcScoreResultDTO; import com.epmet.entity.evaluationindex.indexcal.CpcScoreEntity; import com.epmet.entity.evaluationindex.indexcal.CpcSubScoreEntity; import com.epmet.entity.evaluationindex.indexcoll.FactIndexPartyAblityCpcMonthlyEntity; @@ -66,6 +67,24 @@ public class CpcIndexCalculateServiceImpl implements CpcIndexCalculateService { return true; } + /** + * @Description 获取党员指标得分 + * @param customerId + * @param monthId + * @return + * @author wangc + * @date 2020.09.25 16:48 + **/ + @Override + public Map getCpcScore(String customerId, String monthId) { + List scores = cpcScoreDao.selectCpcScore(customerId,monthId); + Map map = new HashMap<>(); + if(!CollectionUtils.isEmpty(scores)){ + scores.forEach(score -> {map.put(score.getUserId(),score.getScore());}); + } + return map; + } + /** * desc: 计算总分 * diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyUserRankDataService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyUserRankDataService.java index 41cda44da2..a454c51734 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyUserRankDataService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPartyUserRankDataService.java @@ -20,6 +20,8 @@ package com.epmet.service.evaluationindex.screen; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity; +import java.util.List; + /** * 党建引领|基层治理-市民(党员)积分排行榜 * @@ -28,4 +30,15 @@ import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity; */ public interface ScreenPartyUserRankDataService extends BaseService { + + /** + * @Description 用户参与排行数据清洗 + * @param dataList + * @param customerId + * @return + * @author wangc + * @date 2020.09.27 09:44 + **/ + void dataClean(List dataList,String customerId,String dateId); + } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyUserRankDataServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyUserRankDataServiceImpl.java index 6e171bbe80..a543e07fff 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyUserRankDataServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPartyUserRankDataServiceImpl.java @@ -19,11 +19,15 @@ package com.epmet.service.evaluationindex.screen.impl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.NumConstant; import com.epmet.dao.evaluationindex.screen.ScreenPartyUserRankDataDao; import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity; import com.epmet.service.evaluationindex.screen.ScreenPartyUserRankDataService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * 党建引领|基层治理-市民(党员)积分排行榜 * @@ -33,5 +37,23 @@ import org.springframework.stereotype.Service; @Service public class ScreenPartyUserRankDataServiceImpl extends BaseServiceImpl implements ScreenPartyUserRankDataService { + @Autowired + ScreenPartyUserRankDataDao screenPartyUserRankDataDao; + /** + * @Description 用户参与排行数据清洗 + * @param dataList + * @param customerId + * @return + * @author wangc + * @date 2020.09.27 09:44 + **/ + @Override + public void dataClean(List dataList, String customerId, String dateId) { + int affectedRows; + do{ + affectedRows = baseDao.deleteBatchByCustomerIdAndDateId(customerId,dateId); + }while (affectedRows > NumConstant.ZERO); + baseDao.insertBatch(dataList); + } } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenUserTotalDataServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenUserTotalDataServiceImpl.java index a1b21beced..2ab95df738 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenUserTotalDataServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenUserTotalDataServiceImpl.java @@ -18,13 +18,16 @@ package com.epmet.service.evaluationindex.screen.impl; +import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.constant.DataSourceConstant; import com.epmet.dao.evaluationindex.screen.ScreenUserTotalDataDao; import com.epmet.entity.evaluationindex.screen.ScreenUserTotalDataEntity; import com.epmet.service.evaluationindex.screen.ScreenUserTotalDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.List; @@ -36,6 +39,7 @@ import java.util.List; * @since v1.0.0 2020-09-22 */ @Service +@DataSource(DataSourceConstant.EVALUATION_INDEX) public class ScreenUserTotalDataServiceImpl extends BaseServiceImpl implements ScreenUserTotalDataService { /** @@ -46,11 +50,12 @@ public class ScreenUserTotalDataServiceImpl extends BaseServiceImpl list,String customerId) { int deleteNum; do { deleteNum = baseDao.deleteUserTotalData(customerId); - } while (deleteNum <= NumConstant.ZERO); + } while (deleteNum > NumConstant.ZERO); if(!CollectionUtils.isEmpty(list)){ baseDao.insertBatch(list); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/UserPointService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/UserPointService.java new file mode 100644 index 0000000000..ce185cad6a --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/UserPointService.java @@ -0,0 +1,18 @@ +package com.epmet.service.point; + +import java.util.Map; + +/** + * 用户积分库 + * */ +public interface UserPointService { + + /** + * @Description 根据客户Id查询用户积分Map + * @param customerId + * @return + * @author wangc + * @date 2020.09.25 16:00 + **/ + Map getUserPointMap(String customerId); +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/impl/UserPointServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/impl/UserPointServiceImpl.java new file mode 100644 index 0000000000..0402afe418 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/point/impl/UserPointServiceImpl.java @@ -0,0 +1,46 @@ +package com.epmet.service.point.impl; + +import com.epmet.commons.dynamic.datasource.annotation.DataSource; +import com.epmet.constant.DataSourceConstant; +import com.epmet.dao.point.PointDao; +import com.epmet.dto.point.UserPointDTO; +import com.epmet.service.point.UserPointService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description + * @ClassName UserPointServiceImpl + * @Auth wangc + * @Date 2020-09-25 15:54 + */ +@Service +@Slf4j +@DataSource(DataSourceConstant.EPMET_POINT) +public class UserPointServiceImpl implements UserPointService { + + @Autowired + private PointDao pointDao; + /** + * @Description 根据客户Id查询用户积分Map + * @param customerId + * @return + * @author wangc + * @date 2020.09.25 16:00 + **/ + @Override + public Map getUserPointMap(String customerId) { + List points = pointDao.selectUserPointByCustomerId(customerId); + Map map = new HashMap<>(); + if(!CollectionUtils.isEmpty(points)){ + points.forEach(point -> {map.put(point.getUserId(),point.getPointTotal());}); + } + return map; + } +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/ScreenCentralZoneDataExtractServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/ScreenCentralZoneDataExtractServiceImpl.java index a36695b6b0..24811db736 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/ScreenCentralZoneDataExtractServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/ScreenCentralZoneDataExtractServiceImpl.java @@ -5,12 +5,11 @@ import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.constant.DataSourceConstant; import com.epmet.dao.stats.*; -import com.epmet.dao.stats.topic.FactTopicTotalAgencyDailyDao; import com.epmet.dao.stats.topic.FactTopicTotalGridDailyDao; -import com.epmet.dao.stats.user.FactParticipationUserGridDailyDao; +import com.epmet.dao.stats.user.FactRegUserGridDailyDao; import com.epmet.entity.evaluationindex.screen.ScreenUserTotalDataEntity; import com.epmet.service.stats.ScreenCentralZoneDataExtractService; import lombok.extern.slf4j.Slf4j; @@ -35,7 +34,7 @@ import java.util.stream.Collectors; public class ScreenCentralZoneDataExtractServiceImpl implements ScreenCentralZoneDataExtractService { @Autowired - private FactParticipationUserGridDailyDao factParticipationUserGridDailyDao; + private FactRegUserGridDailyDao factRegUserGridDailyDao; @Autowired private FactGroupGridDailyDao factGroupGridDailyDao; @Autowired @@ -63,20 +62,22 @@ public class ScreenCentralZoneDataExtractServiceImpl implements ScreenCentralZon //1.查询用户与党员数据,判断dimId是否为昨天,如果根据这个dimId没有查询出结果,则取前天的数据 //如果还是查不出数据,继续向下执行,这部分数据设置默认值 + + //注册用户数 List result = - factParticipationUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_AGENCY,customerId,dimId); + factRegUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_AGENCY,customerId,dimId); if(CollectionUtils.isEmpty(result)){ if(DateUtils.getBeforeNDay(NumConstant.ONE).equals(dimId)){ - result = factParticipationUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_AGENCY,customerId,DateUtils.getBeforeNDay(NumConstant.TWO)); + result = factRegUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_AGENCY,customerId,DateUtils.getBeforeNDay(NumConstant.TWO)); } if(null == result) result = new LinkedList<>(); } List gridUserResult = - factParticipationUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_GRID,customerId,dimId); + factRegUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_GRID,customerId,dimId); if(CollectionUtils.isEmpty(gridUserResult)){ if(DateUtils.getBeforeNDay(NumConstant.ONE).equals(dimId)){ - gridUserResult = factParticipationUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_GRID,customerId,DateUtils.getBeforeNDay(NumConstant.TWO)); + gridUserResult = factRegUserGridDailyDao.selectUserAndPartymemberByOrgLevel(ORG_LEVEL_GRID,customerId,DateUtils.getBeforeNDay(NumConstant.TWO)); } } if(!CollectionUtils.isEmpty(gridUserResult)){ @@ -145,15 +146,22 @@ public class ScreenCentralZoneDataExtractServiceImpl implements ScreenCentralZon gridProject = factAgencyProjectDailyDao.selectProjectCountByOrgLevel(ORG_LEVEL_GRID,customerId,DateUtils.getBeforeNDay(NumConstant.TWO)); } } - Map projectMap = agencyProject.stream().collect(Collectors.toMap(ScreenUserTotalDataEntity::getOrgId,ScreenUserTotalDataEntity::getIssueTotal)); - projectMap.putAll(gridProject.stream().collect(Collectors.toMap(ScreenUserTotalDataEntity::getOrgId,ScreenUserTotalDataEntity::getIssueTotal))); + Map projectMap = agencyProject.stream().collect(Collectors.toMap(ScreenUserTotalDataEntity::getOrgId,ScreenUserTotalDataEntity::getProjectTotal)); + projectMap.putAll(gridProject.stream().collect(Collectors.toMap(ScreenUserTotalDataEntity::getOrgId,ScreenUserTotalDataEntity::getProjectTotal))); result.forEach(o -> { String orgId = o.getOrgId(); - o.setGroupTotal(groupMap.get(orgId)); - o.setTopicTotal(topicMap.get(orgId)); - o.setIssueTotal(issueMap.get(orgId)); - o.setProjectTotal(projectMap.get(orgId)); + Integer count = groupMap.get(orgId); + o.setGroupTotal(null == count ? NumConstant.ZERO : count); + + count = topicMap.get(orgId); + o.setTopicTotal(null == count ? NumConstant.ZERO : count); + + count = issueMap.get(orgId); + o.setIssueTotal(null == count ? NumConstant.ZERO : count); + + count = projectMap.get(orgId); + o.setProjectTotal(null == count ? NumConstant.ZERO : count); o.setDataEndTime(dimId); }); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java index 29521f2f2c..767af842b0 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java @@ -3,6 +3,7 @@ package com.epmet.service.user; import com.epmet.dto.AgencySubTreeDto; import com.epmet.dto.extract.form.GridHeartedFormDTO; import com.epmet.dto.stats.user.result.UserStatisticalData; +import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity; import com.epmet.util.DimIdGenerator; import org.apache.ibatis.annotations.Param; @@ -65,4 +66,13 @@ public interface UserService { * @Date 2020/9/21 16:44 **/ List getGridRegUserIds(String customerId, String gridId); + + /** + * @Description 获取客户下的网格注册居民 + * @param customerId + * @return + * @author wangc + * @date 2020.09.25 13:54 + **/ + List getRegisteredUserList(String customerId); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java index 12616b584c..faf43458cd 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java @@ -11,6 +11,7 @@ import com.epmet.dto.extract.result.UserPartyResultDTO; import com.epmet.dto.stats.user.*; import com.epmet.dto.stats.user.result.UserStatisticalData; import com.epmet.dto.user.result.CommonTotalAndIncCountResultDTO; +import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity; import com.epmet.service.user.UserService; import com.epmet.util.DimIdGenerator; import com.epmet.util.ModuleConstant; @@ -23,7 +24,6 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.text.NumberFormat; -import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -357,10 +357,6 @@ public class UserServiceImpl implements UserService { dataPacket.setPartiAgencyDailyList(list); } - - - - FactRegUserAgencyMonthlyDTO regAgencyM = new FactRegUserAgencyMonthlyDTO(); regAgencyM.setCustomerId(customerId); regAgencyM.setAgencyId(agencyId); @@ -695,32 +691,9 @@ public class UserServiceImpl implements UserService { } - } - public static void main(String[] args) { - - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - //calendar.set(Calendar.DAY_OF_MONTH, 1); - calendar.set(Calendar.HOUR_OF_DAY, 0); - calendar.set(Calendar.MINUTE, 0); - calendar.set(Calendar.SECOND, 0); - System.out.println(format.format(calendar.getTime())); - - - - calendar.setTime(calendar.getTime()); - calendar.add(Calendar.DATE, -1); - System.out.println(calendar.getTime()); - System.out.println(format.format(calendar.getTime())); - System.out.println(format2.format(calendar.getTime())); - } - - /** * @return java.util.List * @param customerId @@ -735,4 +708,25 @@ public class UserServiceImpl implements UserService { return userDao.selectGridRegUserIds(customerId,gridId); } + /** + * @Description 获取客户下的网格注册居民 + * @param customerId + * @return + * @author wangc + * @date 2020.09.25 13:54 + **/ + @Override + public List getRegisteredUserList(String customerId) { + List userList = userDao.selectRegisteredUserByCustomerId(customerId); + List partyList = userDao.selectPartymembersByCustomerId(customerId); + if(!CollectionUtils.isEmpty(userList)){ + userList.forEach(user -> { + if(partyList.contains(user.getUserId())){ + user.setPartyFlag(NumConstant.ONE); + } + }); + } + return userList; + } + } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcal/CpcScoreDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcal/CpcScoreDao.xml index 8fbb50a81d..bf0cfd3d51 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcal/CpcScoreDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcal/CpcScoreDao.xml @@ -148,4 +148,18 @@ )
+ + + \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyUserRankDataDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyUserRankDataDao.xml index d4089fcc30..6ca1f5da66 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyUserRankDataDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyUserRankDataDao.xml @@ -9,6 +9,13 @@ limit 1000;
+ + delete from screen_party_user_rank_data + where CUSTOMER_ID = #{customerId} + AND DATA_END_TIME = #{dateId} + limit 1000; + + insert into screen_party_user_rank_data ( @@ -59,4 +66,56 @@ + + insert into screen_party_user_rank_data + ( + ID, + CUSTOMER_ID, + GRID_ID, + GRID_NAME, + ORG_ID, + ORG_NAME, + PARTY_FLAG, + USER_ID, + SURNAME, + `NAME`, + USER_NAME, + POINT_TOTAL, + INDEX_SCORE, + DEL_FLAG, + REVISION, + CREATED_BY, + CREATED_TIME, + UPDATED_BY, + UPDATED_TIME, + DATA_END_TIME, + ALL_PARENT_IDS + ) values + + ( + (SELECT REPLACE(UUID(), '-', '') AS id), + #{customerId}, + #{item.gridId}, + #{item.gridName}, + #{item.orgId}, + #{item.orgName}, + #{item.partyFlag}, + #{item.userId}, + #{item.surname}, + #{item.name}, + #{item.userName}, + #{item.pointTotal}, + #{item.indexScore}, + '0', + 0, + 'CRAWLER_ROBOT', + now(), + 'CRAWLER_ROBOT', + now(), + #{item.dataEndTime}, + #{item.allParentIds} + ) + + + diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml index 41ce69835f..ea0d0fc48b 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml @@ -74,8 +74,10 @@ cg.ID as GRID_ID, cg.PID as AGENCY_ID, ca.PID AS PID, - CG.CUSTOMER_ID, - cg.PIDS as PIDS + cg.CUSTOMER_ID, + cg.PIDS as PIDS, + cg.GRID_NAME, + ca.ORGANIZATION_NAME as ORG_NAME FROM customer_grid cg LEFT JOIN customer_agency ca ON ( cg.PID = CA.ID ) diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/point/UserPointDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/point/UserPointDao.xml new file mode 100644 index 0000000000..418d4dd49f --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/point/UserPointDao.xml @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactGroupGridDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactGroupGridDailyDao.xml index c8e631ed88..7b4c669324 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactGroupGridDailyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactGroupGridDailyDao.xml @@ -80,11 +80,10 @@ - - \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/user/FactRegUserGridDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/user/FactRegUserGridDailyDao.xml index f8d85b7ab9..855007785a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/user/FactRegUserGridDailyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/user/FactRegUserGridDailyDao.xml @@ -106,4 +106,47 @@ + + + + + + + + \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml index 03f525d12d..55bc599470 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml @@ -459,6 +459,8 @@ + + + + + From c89fe0d9289abeb333cc741806f1e6d216790f8e Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Sun, 27 Sep 2020 14:08:05 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=85=9A=E5=BB=BA=E5=BC=95=E9=A2=86?= =?UTF-8?q?=E3=80=90=E7=BB=84=E7=BB=87=E6=AC=A1=E6=95=B0=EF=BC=8C=E5=8F=82?= =?UTF-8?q?=E4=B8=8E=E4=BA=BA=E6=95=B0=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/ScreenPartyBranchDataFormDTO.java | 3 ++ .../epmet/dao/heart/ActUserRelationDao.java | 2 +- .../toscreen/impl/PartyGuideServiceImpl.java | 51 +++++++++++++++---- .../service/heart/ActUserRelationService.java | 2 +- .../impl/ActUserRelationServiceImpl.java | 4 +- .../screen/ScreenPartyBranchDataDao.xml | 8 +-- .../mapper/heart/ActUserRelation.xml | 2 +- 7 files changed, 53 insertions(+), 19 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/ScreenPartyBranchDataFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/ScreenPartyBranchDataFormDTO.java index 06b95d02d2..72f9456cf8 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/ScreenPartyBranchDataFormDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/ScreenPartyBranchDataFormDTO.java @@ -88,6 +88,9 @@ public class ScreenPartyBranchDataFormDTO implements Serializable { private String updatedBy; public ScreenPartyBranchDataFormDTO() { + this.organizeCount = NumConstant.ZERO; + this.joinUserCount = NumConstant.ZERO; + this.averageJoinUserCount = NumConstant.ZERO; this.delFlag = NumConstant.ZERO_STR; this.revision = NumConstant.ZERO; this.createdBy = "APP_USER"; diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/ActUserRelationDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/ActUserRelationDao.java index 32cbbaf408..a88a330439 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/ActUserRelationDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/ActUserRelationDao.java @@ -20,6 +20,6 @@ public interface ActUserRelationDao { * @author zxc * @date 2020/9/25 5:19 下午 */ - List selectJoinUserCount(@Param("customerId") String customerId,@Param("monthId") String monthId); + List selectJoinUserCount(@Param("customerId") String customerId,@Param("monthId") String monthId,@Param("orgType") String orgType); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java index aac1f632bf..12a37d90a9 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PartyGuideServiceImpl.java @@ -76,7 +76,7 @@ public class PartyGuideServiceImpl implements PartyGuideService { } String monthId = screenExtractFormDTO.getMonthId(); if (StringUtils.isEmpty(monthId)){ - monthId = LocalDate.now().toString().replace("-","").substring(NumConstant.ZERO,NumConstant.SIX); + monthId = LocalDate.now().minusMonths(NumConstant.ONE).toString().replace("-","").substring(NumConstant.ZERO,NumConstant.SIX); } if (!CollectionUtils.isEmpty(customerIds)){ String finalMonthId = monthId; @@ -273,8 +273,10 @@ public class PartyGuideServiceImpl implements PartyGuideService { if (!CollectionUtils.isEmpty(agencyIdList)){ List result = new ArrayList<>(); List orgIds = agencyIdList.stream().map(m -> m.getAgencyId()).collect(Collectors.toList()); + List joinUserCountByAgencyList = actUserRelationService.selectJoinUserCount(customerId, monthId, ScreenConstant.AGENCY); + List screenPartyBranchDataByAgencyList = actInfoService.selectActInfo(customerId, monthId, ScreenConstant.AGENCY, orgIds); if (isGrid == true){ - List joinUserCountList = actUserRelationService.selectJoinUserCount(customerId, monthId); + List joinUserCountList = actUserRelationService.selectJoinUserCount(customerId, monthId, ScreenConstant.GRID); agencyIdList.forEach(agency -> { String agencyId = agency.getAgencyId(); Map agencyMap = agencyService.selectAllSubAgencyId(agencyId, customerId); @@ -286,7 +288,7 @@ public class PartyGuideServiceImpl implements PartyGuideService { joinUserCountList.forEach(join -> { if (party.getOrgId().equals(join.getOrgId())){ party.setAverageJoinUserCount(join.getJoinUserCount()); - party.setAverageJoinUserCount(party.getJoinUserCount() / party.getOrganizeCount()); + party.setAverageJoinUserCount(party.getOrganizeCount()==NumConstant.ZERO ? NumConstant.ZERO : party.getJoinUserCount() / party.getOrganizeCount()); party.setYearId(DateUtils.getYearId(monthId)); } }); @@ -314,7 +316,17 @@ public class PartyGuideServiceImpl implements PartyGuideService { form.setYearId(DateUtils.getYearId(monthId)); form.setOrganizeCount(actList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getOrganizeCount))); form.setJoinUserCount(actList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getJoinUserCount))); - form.setAverageJoinUserCount(form.getJoinUserCount() / form.getOrganizeCount()); + screenPartyBranchDataByAgencyList.forEach(organize -> { + if (organize.getOrgId().equals(agencyId)){ + form.setOrganizeCount(calAdd(organize.getOrganizeCount(),actList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getOrganizeCount)))); + } + }); + joinUserCountByAgencyList.forEach(join -> { + if (join.getOrgId().equals(agencyId)){ + form.setJoinUserCount(calAdd(join.getJoinUserCount(),actList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getJoinUserCount)))); + } + }); + form.setAverageJoinUserCount(form.getOrganizeCount()==NumConstant.ZERO?NumConstant.ZERO : (form.getJoinUserCount() / form.getOrganizeCount())); result.add(form); }); delAndInsertOrganize(result,customerId,monthId,orgIds); @@ -330,15 +342,17 @@ public class PartyGuideServiceImpl implements PartyGuideService { }); // 存在直属网格 if (!CollectionUtils.isEmpty(disGridIds)){ + orgIds.addAll(disGridIds); List gridResult = new ArrayList<>(); - List joinUserCountList = actUserRelationService.selectJoinUserCount(customerId, monthId); - List orgNameList = agencyService.selectOrgNameGrid(disGridIds); + List joinUserCountList = actUserRelationService.selectJoinUserCount(customerId, monthId, ScreenConstant.GRID); List screenPartyBranchDataList = actInfoService.selectActInfo(customerId, monthId, ScreenConstant.GRID, disGridIds); if (!CollectionUtils.isEmpty(screenPartyBranchDataList)){ screenPartyBranchDataList.forEach(party -> { - orgNameList.forEach(org -> { - if (party.getOrgId().equals(org.getGridId())){ - party.setOrgName(org.getGridName()); + joinUserCountList.forEach(join -> { + if (party.getOrgId().equals(join.getOrgId())){ + party.setAverageJoinUserCount(join.getJoinUserCount()); + party.setAverageJoinUserCount(party.getOrganizeCount()==NumConstant.ZERO ? NumConstant.ZERO : party.getJoinUserCount() / party.getOrganizeCount()); + party.setYearId(DateUtils.getYearId(monthId)); } }); ScreenPartyBranchDataFormDTO copyParty = ConvertUtils.sourceToTarget(party, ScreenPartyBranchDataFormDTO.class); @@ -360,7 +374,17 @@ public class PartyGuideServiceImpl implements PartyGuideService { form.setParentId(screenPartyBranchDataList.get(NumConstant.ZERO).getParentId()); form.setJoinUserCount(screenPartyBranchDataList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getJoinUserCount))); form.setOrganizeCount(screenPartyBranchDataList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getOrganizeCount))); - form.setAverageJoinUserCount(form.getJoinUserCount() / form.getOrganizeCount()); + screenPartyBranchDataByAgencyList.forEach(organize -> { + if (organize.getOrgId().equals(agencyId)){ + form.setOrganizeCount(calAdd(organize.getOrganizeCount(),screenPartyBranchDataList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getOrganizeCount)))); + } + }); + joinUserCountByAgencyList.forEach(join -> { + if (join.getOrgId().equals(agencyId)){ + form.setJoinUserCount(calAdd(join.getJoinUserCount(),screenPartyBranchDataList.stream().collect(Collectors.summingInt(ScreenPartyBranchDataFormDTO::getJoinUserCount)))); + } + }); + form.setAverageJoinUserCount(form.getOrganizeCount()==NumConstant.ZERO?NumConstant.ZERO : (form.getJoinUserCount() / form.getOrganizeCount())); result.add(form); } }); @@ -369,6 +393,13 @@ public class PartyGuideServiceImpl implements PartyGuideService { } } + public Integer calAdd(Integer a, Integer b){ + if (null != a && null != b){ + return a + b; + } + return NumConstant.ZERO; + } + /** * @Description 社区级别的处理 * @Param customerId diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/ActUserRelationService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/ActUserRelationService.java index 7875323b3c..c7cb47c47a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/ActUserRelationService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/ActUserRelationService.java @@ -17,6 +17,6 @@ public interface ActUserRelationService { * @author zxc * @date 2020/9/25 5:19 下午 */ - List selectJoinUserCount(String customerId,String monthId); + List selectJoinUserCount(String customerId,String monthId, String orgType); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/ActUserRelationServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/ActUserRelationServiceImpl.java index 570967a3c0..b9b5165260 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/ActUserRelationServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/ActUserRelationServiceImpl.java @@ -29,7 +29,7 @@ public class ActUserRelationServiceImpl implements ActUserRelationService { * @date 2020/9/25 5:19 下午 */ @Override - public List selectJoinUserCount(String customerId, String monthId) { - return actUserRelationDao.selectJoinUserCount(customerId, monthId); + public List selectJoinUserCount(String customerId, String monthId, String orgType) { + return actUserRelationDao.selectJoinUserCount(customerId, monthId, orgType); } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml index ae9430e214..5c5741a289 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPartyBranchDataDao.xml @@ -128,8 +128,8 @@ From 39788c9bc2d2e08a167e6bd81f8fdcc09c09e714 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Sun, 27 Sep 2020 14:33:20 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=94=B9=E7=89=88?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=8F=82=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/dto/result/IndexDictResultDTO.java | 30 ++++++ .../datareport/constant/FactConstant.java | 16 ++++ .../datareport/dao/fact/IndexDictDao.java | 49 ++++++++++ .../fact/impl/FactIndexServiceImpl.java | 96 +++++++++++++++---- .../fact/FactIndexAgencySubScoreDao.xml | 4 +- .../fact/FactIndexCommunitySubScoreDao.xml | 4 +- .../mapper/fact/FactIndexGridSubScoreDao.xml | 4 +- .../resources/mapper/fact/IndexDictDao.xml | 31 ++++++ 8 files changed, 212 insertions(+), 22 deletions(-) create mode 100644 epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/IndexDictResultDTO.java create mode 100644 epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/fact/IndexDictDao.java create mode 100644 epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/IndexDictDao.xml diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/IndexDictResultDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/IndexDictResultDTO.java new file mode 100644 index 0000000000..196837f220 --- /dev/null +++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/IndexDictResultDTO.java @@ -0,0 +1,30 @@ +package com.epmet.evaluationindex.screen.dto.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 评价指标字典表数据--接口返参 + * @Author sun + */ +@Data +public class IndexDictResultDTO implements Serializable { + + private static final long serialVersionUID = 3860268744336541373L; + + /** + * 指标名 + */ + private String indexName; + /** + * 指标code + */ + private String indexCode; + /** + * 指标值类型 百分比:percent + */ + private String valueType; + +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/constant/FactConstant.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/constant/FactConstant.java index 70c5614f65..4e2449c81c 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/constant/FactConstant.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/constant/FactConstant.java @@ -45,4 +45,20 @@ public interface FactConstant { * 网格相关 */ String WANG_GE_XIANG_GUAN = "wanggexiangguan"; + /** + * 评价指标类型-无 + */ + String NONE = "none"; + /** + * 评价指标类型-整数 + */ + String INTEGER = "integer"; + /** + * 评价指标类型-小数 + */ + String DECIMAL = "decimal"; + /** + * 评价指标类型-百分比 + */ + String PERCENT = "percent"; } diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/fact/IndexDictDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/fact/IndexDictDao.java new file mode 100644 index 0000000000..893820cf1c --- /dev/null +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/fact/IndexDictDao.java @@ -0,0 +1,49 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * 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. + *

+ * 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. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.datareport.dao.fact; + +import com.epmet.evaluationindex.screen.dto.result.IndexDictResultDTO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 评价指标字典 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2020-09-02 + */ +@Mapper +public interface IndexDictDao { + + /** + * @param + * @Description 查询指标字典表是百分比类型的数据 + * @author sun + */ + List selectList(); + + /** + * @param + * @Description 根据indexCode查询指标字典表具体数据 + * @author sun + */ + IndexDictResultDTO selectIndexDict(@Param("indexCode") String indexCode); +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/fact/impl/FactIndexServiceImpl.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/fact/impl/FactIndexServiceImpl.java index 523bf3a7e5..68b3fd1f60 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/fact/impl/FactIndexServiceImpl.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/fact/impl/FactIndexServiceImpl.java @@ -15,12 +15,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.text.NumberFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.LinkedList; -import java.util.List; +import java.util.*; /** * 数据改版api @@ -47,6 +45,8 @@ public class FactIndexServiceImpl implements FactIndexService { private FactIndexGridScoreDao factIndexGridScoreDao; @Autowired private FactIndexGridSubScoreDao factIndexGridSubScoreDao; + @Autowired + private IndexDictDao indexDictDao; /** * @param formDTO @@ -125,19 +125,27 @@ public class FactIndexServiceImpl implements FactIndexService { AblityIndexResultDTO nl = new AblityIndexResultDTO(); nl.setIndexCode(FactConstant.NLZB); nl.setScoreList(nlList); - if(null != nlList){resultList.add(nl);} + if (null != nlList) { + resultList.add(nl); + } AblityIndexResultDTO dj = new AblityIndexResultDTO(); dj.setIndexCode(FactConstant.DJNL); dj.setScoreList(djList); - if(null != djList){resultList.add(dj);} + if (null != djList) { + resultList.add(dj); + } AblityIndexResultDTO zl = new AblityIndexResultDTO(); zl.setIndexCode(FactConstant.ZLNL); zl.setScoreList(zlList); - if(null != zlList){resultList.add(zl);} + if (null != zlList) { + resultList.add(zl); + } AblityIndexResultDTO fw = new AblityIndexResultDTO(); fw.setIndexCode(FactConstant.FWNL); fw.setScoreList(fwList); - if(null != fwList){resultList.add(fw);} + if (null != fwList) { + resultList.add(fw); + } return resultList; } @@ -203,9 +211,15 @@ public class FactIndexServiceImpl implements FactIndexService { throw new RenException(String.format("按月份查询各项能力分数,orgType类型错误,组织Id:%s,类型Type:%s", formDTO.getOrgId(), formDTO.getOrgType())); } //5.封装数据并返回 - if(null != dj){resultList.add(dj);} - if(null != zl){resultList.add(zl);} - if(null != fw){resultList.add(fw);} + if (null != dj) { + resultList.add(dj); + } + if (null != zl) { + resultList.add(zl); + } + if (null != fw) { + resultList.add(fw); + } return resultList; } @@ -278,15 +292,21 @@ public class FactIndexServiceImpl implements FactIndexService { MonthScoreListResultDTO dj = new MonthScoreListResultDTO(); dj.setIndexCode(FactConstant.DJNL); dj.setScoreList(djList); - if(null != djList){resultList.add(dj);} + if (null != djList) { + resultList.add(dj); + } MonthScoreListResultDTO zl = new MonthScoreListResultDTO(); zl.setIndexCode(FactConstant.ZLNL); zl.setScoreList(zlList); - if(null != zlList){resultList.add(zl);} + if (null != zlList) { + resultList.add(zl); + } MonthScoreListResultDTO fw = new MonthScoreListResultDTO(); fw.setIndexCode(FactConstant.FWNL); fw.setScoreList(fwList); - if(null != fwList){resultList.add(fw);} + if (null != fwList) { + resultList.add(fw); + } return resultList; } @@ -333,7 +353,28 @@ public class FactIndexServiceImpl implements FactIndexService { throw new RenException(String.format("按月查询各项指标数据,orgType类型错误,组织Id:%s,类型Type:%s", formDTO.getOrgId(), formDTO.getOrgType())); } - //4.调用方法判断各项指标是数字指标还是百分比指标 //TODO 记得value值保留一位小数 是数的保留零位小数 是百分比的保留一位小数 + //4.查询指标字典表数据 + List list = indexDictDao.selectList(); + //5.遍历数据,判断数据类型并处理 + /*NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMaximumFractionDigits(1);*/ + resultList.forEach(result -> { + list.forEach(l -> { + if (result.getKey().equals(l.getIndexCode())) { + //小数类型,四舍五入保留小数点后一位 + if (FactConstant.DECIMAL.equals(l.getValueType())) { + BigDecimal num = new BigDecimal(result.getValue()).setScale(1, BigDecimal.ROUND_HALF_UP); + result.setValue(num.toString()); + } + //百分数类型,四舍五入保留小数点后一位并转成百分比 + if (FactConstant.PERCENT.equals(l.getValueType())) { + BigDecimal num = new BigDecimal(result.getValue()).setScale(1, BigDecimal.ROUND_HALF_UP); + result.setValue(num+"%"); + } + } + }); + }); + return resultList; } @@ -373,7 +414,30 @@ public class FactIndexServiceImpl implements FactIndexService { throw new RenException(String.format("按月查询各项指标最近12个月数据,orgType类型错误,组织Id:%s,类型Type:%s", formDTO.getOrgId(), formDTO.getOrgType())); } - //6.调用方法判断各项指标是数字指标还是百分比指标//TODO 记得value值保留一位小数 是数的保留零位小数 是百分比的保留一位小数 + //6.查询指标字典表具体数据 + IndexDictResultDTO dictDTO = indexDictDao.selectIndexDict(formDTO.getKey()); + if (null == dictDTO) { + throw new RenException(String.format("根据评价指标indexCode未查询到字典表数据,indexCode值:%s", formDTO.getKey())); + } + + //7.遍历数据,判断数据类型并处理 + /*NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMaximumFractionDigits(1);*/ + //小数类型,四舍五入保留小数点后一位 + if (FactConstant.DECIMAL.equals(dictDTO.getValueType())) { + resultList.forEach(result -> { + BigDecimal num = new BigDecimal(result.getAblity()).setScale(1, BigDecimal.ROUND_HALF_UP); + result.setAblity(num.toString()); + }); + } + //百分数类型,四舍五入保留小数点后一位并转成百分比 + if (FactConstant.PERCENT.equals(dictDTO.getValueType())) { + resultList.forEach(result -> { + BigDecimal num = new BigDecimal(result.getAblity()).setScale(1, BigDecimal.ROUND_HALF_UP); + result.setAblity(num+"%"); + }); + } + return resultList; } diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencySubScoreDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencySubScoreDao.xml index 879d8b521e..9744157016 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencySubScoreDao.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencySubScoreDao.xml @@ -6,7 +6,7 @@ SELECT fact.month_id AS "monthId", - IF(fact.origin_value='',0,IFNULL(ROUND(fact.origin_value,1),0)) AS "ablity" + IF(fact.origin_value='',0,IFNULL(fact.origin_value,0)) AS "ablity" FROM fact_index_agency_sub_score fact LEFT JOIN index_dict dict ON fact.index_code = dict.index_code diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunitySubScoreDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunitySubScoreDao.xml index 8c8e780259..197b6f9bf9 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunitySubScoreDao.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunitySubScoreDao.xml @@ -6,7 +6,7 @@ SELECT fact.month_id AS "monthId", - IF(fact.origin_value='',0,IFNULL(ROUND(fact.origin_value,1),0)) AS "ablity" + IF(fact.origin_value='',0,IFNULL(fact.origin_value,0)) AS "ablity" FROM fact_index_community_sub_score fact LEFT JOIN index_dict dict ON fact.index_code = dict.index_code diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridSubScoreDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridSubScoreDao.xml index d48f24966e..1b317e2791 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridSubScoreDao.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridSubScoreDao.xml @@ -6,7 +6,7 @@ SELECT fact.month_id AS "monthId", - IF(fact.origin_value='',0,IFNULL(ROUND(fact.origin_value,1),0)) AS "ablity" + IF(fact.origin_value='',0,IFNULL(fact.origin_value,0)) AS "ablity" FROM fact_index_grid_sub_score fact LEFT JOIN index_dict dict ON fact.index_code = dict.index_code diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/IndexDictDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/IndexDictDao.xml new file mode 100644 index 0000000000..0784877dda --- /dev/null +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/IndexDictDao.xml @@ -0,0 +1,31 @@ + + + + + + + + + +