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; + + } +}