From 916d05d3c6c03781c538f39920319b2905cb361f Mon Sep 17 00:00:00 2001 From: yangzhenli Date: Fri, 2 Aug 2024 11:16:54 +0800 Subject: [PATCH 1/3] update --- .../impl/IndicatorStatisticsServiceImpl.java | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java new file mode 100644 index 0000000..eee1325 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java @@ -0,0 +1,178 @@ +package jnpf.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import jnpf.entity.Bidding_project_statisticsEntity; +import jnpf.exception.DataException; +import jnpf.model.dto.IndicatorStatisticsDto; +import jnpf.permission.model.authorize.AuthorizeConditionModel; +import jnpf.service.BiddingProjectSubscribeService; +import jnpf.service.CustomAuthService; +import jnpf.service.IndicatorStatisticsService; +import jnpf.util.ServletUtil; +import jnpf.util.UserProvider; +import lombok.AllArgsConstructor; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +@AllArgsConstructor +public class IndicatorStatisticsServiceImpl implements IndicatorStatisticsService { + + private final BiddingProjectSubscribeService biddingProjectSubscribeService; + private final CustomAuthService customAuthService; + private final UserProvider userProvider; + + + @Override + public IndicatorStatisticsDto.ProjectsNumberResponse projectsNumber(IndicatorStatisticsDto.ProjectsNumberParam param) { + //校验参数 + IndicatorStatisticsDto.ProjectsNumberResponse response = checkProjectsNumber(param); + QueryWrapper queryWhere = getAuthWrapper(param.getMenuId()); + if (ObjectUtil.isEmpty(queryWhere)) { + return response; + } + assert queryWhere != null; + List indicatorList = biddingProjectSubscribeService.getProjectsNumberByType(param, queryWhere.getParamNameValuePairs(), queryWhere.getSqlSegment().replace("paramNameValuePairs.", "")); + checkResult(response, indicatorList); + + return response; + } + + private void checkResult(IndicatorStatisticsDto.ProjectsNumberResponse response, List indicatorList) { + List responseIndicatorList = response.getIndicatorList(); + if (CollectionUtil.isEmpty(responseIndicatorList)) { + response.setIndicatorList(indicatorList); + return; + } + for (IndicatorStatisticsDto.Indicator indicator : responseIndicatorList) { + Optional first = indicatorList.stream().filter(item -> item.getXData().equals(indicator.getXData())).findFirst(); + first.ifPresent(value -> BeanUtil.copyProperties(value, indicator)); + } + } + + private QueryWrapper getAuthWrapper(String menuId) { + if (!userProvider.get().getIsAdministrator()) { + QueryWrapper queryWhere = new QueryWrapper<>(); + Object bidding_project_statisticsObj = customAuthService.getCondition(new AuthorizeConditionModel(queryWhere, menuId, "bidding_project_subscribe")); + System.out.println("---------------" + JSON.toJSONString(bidding_project_statisticsObj)); + return (QueryWrapper) bidding_project_statisticsObj; + } + return null; + } + + private IndicatorStatisticsDto.ProjectsNumberResponse checkProjectsNumber(IndicatorStatisticsDto.ProjectsNumberParam param) { + IndicatorStatisticsDto.ProjectsNumberResponse response = new IndicatorStatisticsDto.ProjectsNumberResponse(); + if (StrUtil.isBlank(param.getMenuId())) { + throw new DataException("请传入menuId"); + } + if (StrUtil.isBlank(param.getType())) { + throw new DataException("请选择查询类型"); + } + //查询类型 1-本月:到日。2-当年:按月。3-累计:按年 + //赋予默认值 查询每月天数/查询每年月数 + switch (param.getType()) { + case "1": + if (StrUtil.isBlank(param.getCorresponding())) { + String format = LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM"); + param.setCorresponding(format); + response.setCorresponding(LocalDateTimeUtil.parse(format, "yyyy-MM")); + } else { + //校验时间格式 + try { + response.setCorresponding(LocalDateTimeUtil.parse(param.getCorresponding(), "yyyy-MM")); + } catch (Exception e) { + throw new DataException("dataTime parse error, must be yyyy-MM"); + } + } + LocalDateTime month = LocalDateTimeUtil.parse(param.getCorresponding(), "yyyy-MM"); + YearMonth yearMonth = YearMonth.from(month); + for (int day = 1; day <= yearMonth.lengthOfMonth(); day++) { + IndicatorStatisticsDto.Indicator indicator = new IndicatorStatisticsDto.Indicator(); + indicator.setYData("0"); + // 创建代表该日期的LocalDate对象 + LocalDate date = yearMonth.atDay(day); + // 使用DateTimeFormatter来格式化日期为字符串 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd日"); + indicator.setXData(date.format(formatter)); + response.getIndicatorList().add(indicator); + } + break; + case "2": + if (StrUtil.isBlank(param.getCorresponding())) { + String yyyy = LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy"); + param.setCorresponding(yyyy); + response.setCorresponding(LocalDateTimeUtil.parse(yyyy, "yyyy")); + } else { + //校验时间格式 + try { + response.setCorresponding(LocalDateTimeUtil.parse(param.getCorresponding(), "yyyy")); + } catch (Exception e) { + throw new DataException("dataTime parse error, must be yyyy"); + } + } + for (int monthCount = 1; monthCount <= 12; monthCount++) { + IndicatorStatisticsDto.Indicator indicator = new IndicatorStatisticsDto.Indicator(); + indicator.setYData("0"); + String monthString = String.format("%02d", monthCount); + indicator.setXData(monthString + "月"); + response.getIndicatorList().add(indicator); + } + break; + case "3": + break; + default: + throw new DataException("查询类型错误: " + param.getType()); + } + return response; + } + + @Override + public IndicatorStatisticsDto.MoneyAndProjectsNumberResponse moneyAndProjectsNumber(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param) { + IndicatorStatisticsDto.MoneyAndProjectsNumberResponse response = checkMoneyAndProjectsNumberParam(param); + QueryWrapper queryWhere = getAuthWrapper(param.getMenuId()); + if (ObjectUtil.isEmpty(queryWhere)) { + return response; + } + assert queryWhere != null; + List dataList = biddingProjectSubscribeService.moneyAndProjectsNumber(param, queryWhere.getParamNameValuePairs(), queryWhere.getSqlSegment().replace("paramNameValuePairs.", "")); + response.setDataList(dataList); + return response; + } + + private IndicatorStatisticsDto.MoneyAndProjectsNumberResponse checkMoneyAndProjectsNumberParam(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param) { + IndicatorStatisticsDto.MoneyAndProjectsNumberResponse response = new IndicatorStatisticsDto.MoneyAndProjectsNumberResponse(); + if (StrUtil.isBlank(param.getMenuId())) { + throw new DataException("请传入menuId"); + } + switch (param.getQueryDateType()) { + case "1": + String format = LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM"); + param.setCorresponding(format); + break; + case "2": + String yyyy = LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy"); + param.setCorresponding(yyyy); + case "3": + break; + default: + throw new DataException("查询类型错误: " + param.getQueryDateType()); + } + response.setClassificationType(param.getClassificationType()); + return response; + + } +} From cf82da3d93fec217d22aa59eeb9477ac336ee8a1 Mon Sep 17 00:00:00 2001 From: yangzhenli Date: Fri, 2 Aug 2024 11:17:04 +0800 Subject: [PATCH 2/3] update --- .../mapper/BiddingProjectSubscribeMapper.java | 6 + .../BiddingProjectSubscribeService.java | 6 + .../service/IndicatorStatisticsService.java | 9 ++ .../BiddingProjectSubscribeServiceImpl.java | 11 ++ .../mapper/BiddingProjectSubscribeMapper.xml | 125 +++++++++++++++--- .../IndicatorStatisticsController.java | 45 +++++++ .../model/dto/IndicatorStatisticsDto.java | 97 ++++++++++++++ 7 files changed, 283 insertions(+), 16 deletions(-) create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/IndicatorStatisticsService.java create mode 100644 jnpf-tendering-controller/src/main/java/jnpf/controller/IndicatorStatisticsController.java create mode 100644 jnpf-tendering-entity/src/main/java/jnpf/model/dto/IndicatorStatisticsDto.java diff --git a/jnpf-tendering-biz/src/main/java/jnpf/mapper/BiddingProjectSubscribeMapper.java b/jnpf-tendering-biz/src/main/java/jnpf/mapper/BiddingProjectSubscribeMapper.java index fcaed06..4c6d4a2 100644 --- a/jnpf-tendering-biz/src/main/java/jnpf/mapper/BiddingProjectSubscribeMapper.java +++ b/jnpf-tendering-biz/src/main/java/jnpf/mapper/BiddingProjectSubscribeMapper.java @@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jnpf.entity.BiddingProjectSubscribeEntity; import jnpf.model.bidding_project_subscribe.BiddingProjectSubscribePagination; +import jnpf.model.dto.IndicatorStatisticsDto; import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; /** @@ -22,4 +24,8 @@ public interface BiddingProjectSubscribeMapper extends BaseMapper queryList(@Param("page") Page objectPage, @Param("param") BiddingProjectSubscribePagination biddingProjectSubscribePagination, @Param("ew") Map ew,@Param("sql") String sql); BiddingProjectSubscribeEntity getInfoById(@Param("id") String id); + + List getProjectsNumberByType(@Param("param")IndicatorStatisticsDto.ProjectsNumberParam param,@Param("ew") Map paramNameValuePairs, @Param("sql")String sql); + + List moneyAndProjectsNumber(@Param("param")IndicatorStatisticsDto.MoneyAndProjectsNumberParam param,@Param("ew") Map paramNameValuePairs, @Param("sql")String sql); } diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/BiddingProjectSubscribeService.java b/jnpf-tendering-biz/src/main/java/jnpf/service/BiddingProjectSubscribeService.java index 553c0ff..1f9d75d 100644 --- a/jnpf-tendering-biz/src/main/java/jnpf/service/BiddingProjectSubscribeService.java +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/BiddingProjectSubscribeService.java @@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.extension.service.IService; import jnpf.entity.BiddingProjectSubscribeEntity; import jnpf.model.bidding_project_subscribe.*; import jnpf.model.dto.BiddingProjectDto; +import jnpf.model.dto.IndicatorStatisticsDto; import jnpf.permission.entity.UserEntity; import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Map; /** * bidding_project_subscribe @@ -54,4 +56,8 @@ public interface BiddingProjectSubscribeService extends IService getProjectsNumberByType(IndicatorStatisticsDto.ProjectsNumberParam param, Map paramNameValuePairs, String sql); + + List moneyAndProjectsNumber(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param, Map paramNameValuePairs, String replace); } diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/IndicatorStatisticsService.java b/jnpf-tendering-biz/src/main/java/jnpf/service/IndicatorStatisticsService.java new file mode 100644 index 0000000..d5d3563 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/IndicatorStatisticsService.java @@ -0,0 +1,9 @@ +package jnpf.service; + +import jnpf.model.dto.IndicatorStatisticsDto; + +public interface IndicatorStatisticsService { + IndicatorStatisticsDto.ProjectsNumberResponse projectsNumber(IndicatorStatisticsDto.ProjectsNumberParam param); + + IndicatorStatisticsDto.MoneyAndProjectsNumberResponse moneyAndProjectsNumber(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param); +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java index 0e5e486..7beef47 100644 --- a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java @@ -30,6 +30,7 @@ import jnpf.exception.DataException; import jnpf.mapper.BiddingProjectSubscribeMapper; import jnpf.model.bidding_project_subscribe.*; import jnpf.model.dto.BiddingProjectDto; +import jnpf.model.dto.IndicatorStatisticsDto; import jnpf.permission.OrganizeApi; import jnpf.permission.RoleApi; import jnpf.permission.UserApi; @@ -1975,4 +1976,14 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl getProjectsNumberByType(IndicatorStatisticsDto.ProjectsNumberParam param, Map paramNameValuePairs, String sql) { + return this.baseMapper.getProjectsNumberByType(param, paramNameValuePairs, sql); + } + + @Override + public List moneyAndProjectsNumber(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param, Map paramNameValuePairs, String sql) { + return this.baseMapper.moneyAndProjectsNumber(param, paramNameValuePairs, sql); + } } diff --git a/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml b/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml index 9ca8a6b..2b55986 100644 --- a/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml +++ b/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml @@ -63,15 +63,19 @@ - - + + @@ -111,23 +115,31 @@ - main.id ,main.management_style ,main.project_number ,main.plan_submission_time ,main.reporting_corp ,main.tendering_entity ,main.project_name ,main.Item_classification ,main.organizational_form ,main.bidding_method ,main.reported_file_name ,main.bidding_document_id ,main.decision_procedure ,main.approval_documents_id ,main.final_approval_time ,main.setting_of_winning_bidder_one ,main.setting_of_winning_bidder_two ,main.scoring_indicator_settings_one ,main.scoring_indicator_settings_two ,main.scoring_indicator_settings_three ,main.scoring_indicator_settings_four ,main.agency_one ,main.agency_two ,main.scoring_method_one ,main.scoring_method_two ,main.approval_documents_id_two ,main.result_reporting_time ,main.result_reported_file_name ,main.bid_opening_time ,main.explanation_of_bid ,main.winning_bidder_and_winning_amount ,main.bid_evaluation_committee ,main.tender_agency_fee ,main.attachment_of_bidding_results_one_id ,main.attachment_of_bidding_results_two_id ,main.winning_bidder ,main.winning_bidder_candidate ,main.filing_decision_procedure ,main.filing_results_one_id ,main.filing_results_two_id ,main.approval_time_for_results ,main.f_flowid ,main.f_flowtaskid ,main.annex_programme_document ,main.main_status ,main.main_status_name,bid_winning_amount,is_approval,query_type,approval_documents_id_jt,archive_number,main.create_time,main.update_time,main.winning_bidder_type,main.winning_bidder_info,main.control_price,main.filing_results_three_id,main.project_amount + main + . + id + ,main.management_style ,main.project_number ,main.plan_submission_time ,main.reporting_corp ,main.tendering_entity ,main.project_name ,main.Item_classification ,main.organizational_form ,main.bidding_method ,main.reported_file_name ,main.bidding_document_id ,main.decision_procedure ,main.approval_documents_id ,main.final_approval_time ,main.setting_of_winning_bidder_one ,main.setting_of_winning_bidder_two ,main.scoring_indicator_settings_one ,main.scoring_indicator_settings_two ,main.scoring_indicator_settings_three ,main.scoring_indicator_settings_four ,main.agency_one ,main.agency_two ,main.scoring_method_one ,main.scoring_method_two ,main.approval_documents_id_two ,main.result_reporting_time ,main.result_reported_file_name ,main.bid_opening_time ,main.explanation_of_bid ,main.winning_bidder_and_winning_amount ,main.bid_evaluation_committee ,main.tender_agency_fee ,main.attachment_of_bidding_results_one_id ,main.attachment_of_bidding_results_two_id ,main.winning_bidder ,main.winning_bidder_candidate ,main.filing_decision_procedure ,main.filing_results_one_id ,main.filing_results_two_id ,main.approval_time_for_results ,main.f_flowid ,main.f_flowtaskid ,main.annex_programme_document ,main.main_status ,main.main_status_name,bid_winning_amount,is_approval,query_type,approval_documents_id_jt,archive_number,main.create_time,main.update_time,main.winning_bidder_type,main.winning_bidder_info,main.control_price,main.filing_results_three_id,main.project_amount - id,relation_main_id ,relation_type ,relation_child_id ,deal_type ,deal_type_name ,other_relation_id ,remake ,create_time ,create_user_id ,create_user_name ,create_organization_id ,create_organization_name + id + ,relation_main_id ,relation_type ,relation_child_id ,deal_type ,deal_type_name ,other_relation_id ,remake ,create_time ,create_user_id ,create_user_name ,create_organization_id ,create_organization_name - child_id ,main_id ,child_status ,child_status_name ,user_dept_id ,user_dept_name ,user_id ,user_name ,remake ,create_time ,update_time ,root_child_flag ,root_child_id ,create_user_id ,create_user_name + child_id + ,main_id ,child_status ,child_status_name ,user_dept_id ,user_dept_name ,user_id ,user_name ,remake ,create_time ,update_time ,root_child_flag ,root_child_id ,create_user_id ,create_user_name - + select distinct + from bidding_project_subscribe main - left join bidding_project_subscribe_child child on child.main_id=main.id + left join bidding_project_subscribe_child child on child.main_id=main.id where 1=1 - - and main.id in (select child.main_id from bidding_project_subscribe_child child where root_child_flag='0' and ${sql}) - + + and main.id in (select child.main_id from bidding_project_subscribe_child child where root_child_flag='0' + and ${sql}) + and main.id in @@ -138,9 +150,90 @@ order by main.create_time desc - + select + from bidding_project_subscribe main - where main.id=#{id} + where main.id=#{id} + + + diff --git a/jnpf-tendering-controller/src/main/java/jnpf/controller/IndicatorStatisticsController.java b/jnpf-tendering-controller/src/main/java/jnpf/controller/IndicatorStatisticsController.java new file mode 100644 index 0000000..d25047f --- /dev/null +++ b/jnpf-tendering-controller/src/main/java/jnpf/controller/IndicatorStatisticsController.java @@ -0,0 +1,45 @@ +package jnpf.controller; + + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jnpf.base.ActionResult; +import jnpf.base.Pagination; +import jnpf.base.vo.PageListVO; +import jnpf.base.vo.PaginationVO; +import jnpf.entity.ContractEntity; +import jnpf.model.ContractListVO; +import jnpf.model.dto.IndicatorStatisticsDto; +import jnpf.service.BiddingProjectSubscribeService; +import jnpf.service.IndicatorStatisticsService; +import jnpf.util.JsonUtil; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@Tag(name = "指标统计接口", description = "indicator") +@RequestMapping("/indicator") +@AllArgsConstructor +public class IndicatorStatisticsController { + private final IndicatorStatisticsService indicatorStatisticsService; + + + @Operation(summary = "审批/备案项目数") + @GetMapping("/projectsNumber") + public ActionResult projectsNumber(IndicatorStatisticsDto.ProjectsNumberParam param) { + return ActionResult.success(indicatorStatisticsService.projectsNumber(param)); + } + + + @Operation(summary = "项目数 金额") + @GetMapping("/moneyAndProjectsNumber") + public ActionResult moneyAndProjectsNumber(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param) { + return ActionResult.success(indicatorStatisticsService.moneyAndProjectsNumber(param)); + } + + +} diff --git a/jnpf-tendering-entity/src/main/java/jnpf/model/dto/IndicatorStatisticsDto.java b/jnpf-tendering-entity/src/main/java/jnpf/model/dto/IndicatorStatisticsDto.java new file mode 100644 index 0000000..6b20b4d --- /dev/null +++ b/jnpf-tendering-entity/src/main/java/jnpf/model/dto/IndicatorStatisticsDto.java @@ -0,0 +1,97 @@ +package jnpf.model.dto; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +public class IndicatorStatisticsDto { + @Data + public static class ProjectsNumberParam { + /** + * 查询类型 1-本月(默认本月):到日。2-当年:按月。3-累计:按年 + */ + private String type="1"; + /** + * 权限控制 + */ + private String menuId; + /** + * 根据type 传入对应参数 eg:月份查询传入某年某月 不传入默认为当年当月 返回当月当月日统计 + * 月份传入 yyyy-MM + * 年份传入 yyyy + * 累计无需传入 + */ + private String corresponding; + + } + + @Data + public static class ProjectsNumberResponse { + /** + * 返回时间类型 用于前端展示使用 + */ + private LocalDateTime corresponding; + /** + * 根据type 传入对应参数 eg:月份查询传入某年某月 不传入默认为当年当月 返回当月当月日统计 + */ + private List indicatorList = new ArrayList<>(); + } + + @Data + public static class Indicator { + /** + * x轴数据 + */ + private String xData; + /** + * y轴数据 + */ + private String yData; + } + + + @Data + public static class MoneyAndProjectsNumberParam { + /** + * 查询类型 1-本月 默认本月。2-当年。3-累计 + */ + private String queryDateType = "1"; + /** + * 查询类型 1-所有(默认所有) 2-按组织形式分布 3-按事项分类分布 4-按招标方式分布 + */ + private String classificationType = "1"; + /** + * 权限控制 + */ + private String menuId; + private String corresponding; + } + + @Data + public static class MoneyAndProjectsNumberResponse { + /** + * 1-所有(默认所有) 2-按组织形式分布 3-按事项分类分布 4-按招标方式分布 + */ + private String classificationType; + private List dataList=new ArrayList<>(); + } + + @Data + public static class MoneyAndProjectsNumberChild { + /** + * 类型名称 + */ + private String yName; + /** + * 项目数量 + */ + private String projectsNumber; + /** + * 金额 + */ + private String money; + } +} From 63669ff304f3dcafceb0486d06500deff39e8763 Mon Sep 17 00:00:00 2001 From: V26772074 Date: Fri, 16 Aug 2024 09:49:31 +0800 Subject: [PATCH 3/3] update --- .../impl/IndicatorStatisticsServiceImpl.java | 71 ++++++++++++++++++- .../mapper/BiddingProjectSubscribeMapper.xml | 6 +- 2 files changed, 72 insertions(+), 5 deletions(-) diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java index eee1325..e94a99a 100644 --- a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/IndicatorStatisticsServiceImpl.java @@ -7,6 +7,8 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import jnpf.base.DictionaryDataApi; +import jnpf.base.entity.DictionaryDataEntity; import jnpf.entity.Bidding_project_statisticsEntity; import jnpf.exception.DataException; import jnpf.model.dto.IndicatorStatisticsDto; @@ -27,6 +29,7 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; @Service @AllArgsConstructor @@ -35,6 +38,7 @@ public class IndicatorStatisticsServiceImpl implements IndicatorStatisticsServic private final BiddingProjectSubscribeService biddingProjectSubscribeService; private final CustomAuthService customAuthService; private final UserProvider userProvider; + private final DictionaryDataApi dictionaryDataApi; @Override @@ -100,7 +104,11 @@ public class IndicatorStatisticsServiceImpl implements IndicatorStatisticsServic } LocalDateTime month = LocalDateTimeUtil.parse(param.getCorresponding(), "yyyy-MM"); YearMonth yearMonth = YearMonth.from(month); - for (int day = 1; day <= yearMonth.lengthOfMonth(); day++) { + int i = yearMonth.lengthOfMonth(); + if (LocalDateTimeUtil.parse(LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM"), "yyyy-MM").isEqual(LocalDateTimeUtil.parse(param.getCorresponding(), "yyyy-MM"))){ + i=LocalDateTime.now().getDayOfMonth(); + } + for (int day = 1; day <= i; day++) { IndicatorStatisticsDto.Indicator indicator = new IndicatorStatisticsDto.Indicator(); indicator.setYData("0"); // 创建代表该日期的LocalDate对象 @@ -112,6 +120,7 @@ public class IndicatorStatisticsServiceImpl implements IndicatorStatisticsServic } break; case "2": + int value = LocalDateTime.now().getMonth().getValue(); if (StrUtil.isBlank(param.getCorresponding())) { String yyyy = LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy"); param.setCorresponding(yyyy); @@ -120,11 +129,14 @@ public class IndicatorStatisticsServiceImpl implements IndicatorStatisticsServic //校验时间格式 try { response.setCorresponding(LocalDateTimeUtil.parse(param.getCorresponding(), "yyyy")); + if (LocalDateTime.now().getYear()>LocalDateTimeUtil.parse(param.getCorresponding(), "yyyy").getYear()){ + value = 12; + } } catch (Exception e) { throw new DataException("dataTime parse error, must be yyyy"); } } - for (int monthCount = 1; monthCount <= 12; monthCount++) { + for (int monthCount = 1; monthCount <= value; monthCount++) { IndicatorStatisticsDto.Indicator indicator = new IndicatorStatisticsDto.Indicator(); indicator.setYData("0"); String monthString = String.format("%02d", monthCount); @@ -149,10 +161,65 @@ public class IndicatorStatisticsServiceImpl implements IndicatorStatisticsServic } assert queryWhere != null; List dataList = biddingProjectSubscribeService.moneyAndProjectsNumber(param, queryWhere.getParamNameValuePairs(), queryWhere.getSqlSegment().replace("paramNameValuePairs.", "")); + checkMoneyAndProjectsNumberResult(param,dataList); response.setDataList(dataList); return response; } + private void checkMoneyAndProjectsNumberResult(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param, List dataList) { +// +// count(organizational_form) projectsNumber, +// (select f_full_name from base_dictionary_data where f_dictionary_type_id='539393647729185989' and f_en_code=main.organizational_form limit 1) yName +// +// +// count(Item_classification) projectsNumber, +// (select f_full_name from base_dictionary_data where f_dictionary_type_id='539390743437907141' and f_en_code=main.item_classification limit 1) yName +// +// +// count(bidding_method) projectsNumber, +// (select f_full_name from base_dictionary_data where f_dictionary_type_id='539394095383057605' and f_en_code=main.bidding_method limit 1) yName +// + String classificationType = param.getClassificationType(); + List oldNameList = dataList.stream().map(IndicatorStatisticsDto.MoneyAndProjectsNumberChild::getYName).collect(Collectors.toList()); + List newNameList=new ArrayList<>(); + switch (classificationType){ + case "1": + break; + case "2": + newNameList = dictionaryDataApi.getList("539393647729185989") + .stream() + .map(DictionaryDataEntity::getFullName) + .filter(fullName -> !oldNameList.contains(fullName)) + .collect(Collectors.toList()); + break; + case "3": + newNameList = dictionaryDataApi.getList("539390743437907141") + .stream() + .map(DictionaryDataEntity::getFullName) + .filter(fullName -> !oldNameList.contains(fullName)) + .collect(Collectors.toList()); + break; + case "4": + newNameList = dictionaryDataApi.getList("539394095383057605") + .stream() + .map(DictionaryDataEntity::getFullName) + .filter(fullName -> !oldNameList.contains(fullName)) + .collect(Collectors.toList()); + break; + + } + if (CollectionUtil.isEmpty(newNameList)){ + return; + } + for (String name : newNameList) { + IndicatorStatisticsDto.MoneyAndProjectsNumberChild data = new IndicatorStatisticsDto.MoneyAndProjectsNumberChild(); + data.setYName(name); + data.setProjectsNumber("0"); + data.setMoney("0.0"); + dataList.add(data); + } + } + private IndicatorStatisticsDto.MoneyAndProjectsNumberResponse checkMoneyAndProjectsNumberParam(IndicatorStatisticsDto.MoneyAndProjectsNumberParam param) { IndicatorStatisticsDto.MoneyAndProjectsNumberResponse response = new IndicatorStatisticsDto.MoneyAndProjectsNumberResponse(); if (StrUtil.isBlank(param.getMenuId())) { diff --git a/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml b/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml index 2b55986..8946044 100644 --- a/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml +++ b/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml @@ -227,13 +227,13 @@ and ${sql}) - group by organizational_form + group by organizational_form order by count(organizational_form) desc - group by Item_classification + group by Item_classification order by count(Item_classification) desc - group by bidding_method + group by bidding_method order by count(bidding_method) desc