如何拿到一个时间段里面的所有日期

自己之前的笨方法:

package com.sinosoft.springbootplus.demandConfirm.application.service.impl;

import com.sinosoft.springbootplus.common.exception.BusinessException;
import com.sinosoft.springbootplus.demandConfirm.application.service.HqMealSituationService;
import com.sinosoft.springbootplus.demandConfirm.convert.HqDemandConfirmConvert;
import com.sinosoft.springbootplus.demandConfirm.domain.entity.HqMealSituation;
import com.sinosoft.springbootplus.demandConfirm.domain.mapper.HqMealSituationMapper;
import com.sinosoft.springbootplus.demandConfirm.param.HqMealSituationQueryParam;
import com.sinosoft.springbootplus.demandConfirm.vo.HqMealSituationQueryVo;
import com.sinosoft.springbootplus.mybatis.service.impl.BaseServiceImpl;
import com.sinosoft.springbootplus.mybatis.vo.Paging;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

import java.text.SimpleDateFormat;
import java.util.*;

import org.apache.commons.lang3.StringUtils;


/**
 * <pre>
 * 培训确认单用餐情况  服务实现类
 * </pre>
 *
 * @author lijiakai
 * @since 2021-12-03
 */
@Slf4j
@Service
public class HqMealSituationServiceImpl extends BaseServiceImpl<HqMealSituationMapper, HqMealSituation> implements HqMealSituationService {

    private HqMealSituationMapper hqMealSituationMapper;
    HqMealSituationServiceImpl (HqMealSituationMapper hqMealSituationMapper){
        this.hqMealSituationMapper =hqMealSituationMapper;
    }

    //添加
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean saveHqMealSituation(HqMealSituation hqMealSituation)  {
        if (hqMealSituation.getHaveMealsForm().equals("自助餐")){
            hqMealSituation.setHaveMealsForm("1");
        }

        /*if (hqMealSituation.getCbmodel().equals("half")){
            hqMealSituation.setCbmodel("1");
        }else {
            hqMealSituation.setCbmodel("2");
        }*/

        if (hqMealSituation.getHaveMealsTime().equals(0)){
            hqMealSituation.setMealStatus("0");
        } else if (hqMealSituation.getHaveMealsTime().equals(1)){
            hqMealSituation.setMealStatus("1");
        } else {
            hqMealSituation.setMealStatus("2");
        }

        if (hqMealSituation.getHaveMealsStandard().equals(40)){
            hqMealSituation.setHaveMealsStandard(0);
        }else {
            hqMealSituation.setHaveMealsStandard(1);
        }

       /* if (hqMealSituation.getCbmodel().equals("1")) {
            QueryWrapper<HqMealSituation> queryWrapper = Wrappers.<HqMealSituation>query()
                    .ge(hqMealSituation.getStartTime() != null, "start_time", hqMealSituation.getStartTime())
                    .le(hqMealSituation.getEndTime() != null, "end_time", hqMealSituation.getEndTime());
            List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
            int numbers = 0;
            for (HqMealSituation mealSituation : list) {
                Integer number = mealSituation.getNumber();
                numbers += number;
            }
            int countNumbers = 250;
            int remainingNumber = countNumbers - numbers;
            if (hqMealSituation.getNumber() <= remainingNumber) {
                return super.save(hqMealSituation);
            } else {
                return false;
            }
        }else {*/
            QueryWrapper<HqMealSituation> queryWrapper = Wrappers.<HqMealSituation>query()
                    .eq(hqMealSituation.getMealStatus() != null, "meal_status",hqMealSituation.getMealStatus());
                   /* .eq(hqMealSituation.getCbmodel() != null, "cbmodel",hqMealSituation.getCbmodel());*/
                   /* .ge(hqMealSituation.getStartTime() != null, "start_time", hqMealSituation.getStartTime())
                    .le(hqMealSituation.getEndTime() != null, "end_time", hqMealSituation.getEndTime());*/
            //查询出时间段里面的所有预定
            List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
            //将得到的天数和人数存储到集合中
            /*List<MealCount> todayNumber = new ArrayList<>();*/
            Map<String,Integer> todayNumber = new HashMap<>();
            //遍历得到的集合
            for (HqMealSituation mealSituation : list) {
                Date startTime = mealSituation.getStartTime();
                Date endTime = mealSituation.getEndTime();
                //设置日期格式
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                //修改开始时间和结束时间格式为(yyyy-MM-dd)
                String start = sdf.format(startTime);
                String end = sdf.format(endTime);
                //用split分隔(-)拿到dd,用作判断
                //开始时间分隔
                String[] startSplit = start.split("-");
                //结束时间分隔
                String[] endSplit = end.split("-");
                //将一个人时间范围内的所有天的预定人数进行存储
                if (Integer.parseInt(startSplit[1]) == Integer.parseInt(endSplit[1])) {
                    if (Integer.parseInt(startSplit[2]) <= Integer.parseInt(endSplit[2])) {
                        //将时间段里的天数人数进行存储
                        for (int i = 0; i <= Integer.parseInt(endSplit[2]) - Integer.parseInt(startSplit[2]); i++) {
                            //每个预定的时间范围内每天的具体人数
                            //将分钟转换成00,01,02这种格式的
                            String format = String.format("%02d", Integer.parseInt(startSplit[2]) + i);

                            if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                            }else {
                                todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                            }

                        }
                    }
                }else {
                    //31天
                    if (startSplit[1].equals("01") || startSplit[1].equals("03") || startSplit[1].equals("05") || startSplit[1].equals("07") ||startSplit[1].equals("08") || startSplit[1].equals("10") || startSplit[1].equals("12")){
                        //开始日期到结束日期总天数
                        int a =  31 - (Integer.parseInt(startSplit[2]) - 1 ) + Integer.parseInt(endSplit[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int i = 0; i < a; i++) {
                            if (Integer.parseInt(startSplit[2]) + i <= 31){
                                String format = String.format("%02d", Integer.parseInt(startSplit[2]) + i);
                                if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                                }else {
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                                }
                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplit[1]) + 1);
                                if (todayNumber.get(format2 + "-" + format) == null){
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                }else {
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                }
                                w++;
                            }

                        }
                    }else if (startSplit[1].equals("04") || startSplit[1].equals("06") || startSplit[1].equals("09") || startSplit[1].equals("11")){
                        int b =  30 - (Integer.parseInt(startSplit[2]) - 1) + Integer.parseInt(endSplit[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int s = 0; s < b; s++) {
                            if (Integer.parseInt(startSplit[2]) + s <= 30){
                                String format = String.format("%02d", Integer.parseInt(startSplit[2]) + s);
                                if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                                }else {
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                                }
                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplit[1]) + 1);
                                if (todayNumber.get(format2 + "-" + format) == null){
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                }else {
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                }
                                w++;
                            }
                        }
                    }else {
                        //判断是平年还是闰年   平年(不被4整除)  二月28天      闰年(被4整除)    二月29天
                        if (((Integer.parseInt(startSplit[0]) % 4 == 0) && (Integer.parseInt(startSplit[0]) / 100 != 0)) || (Integer.parseInt(startSplit[0]) / 400 == 0)) {
                            int c =  29 - (Integer.parseInt(startSplit[2]) - 1) + Integer.parseInt(endSplit[2]);
                            //将时间段里的天数人数进行存储
                            int w = 1;
                            for (int q = 0; q < c; q++) {
                                if (Integer.parseInt(startSplit[2] ) + q <= 29){
                                    String format = String.format("%02d", Integer.parseInt(startSplit[2]) + q);
                                    if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                        todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                                    }
                                }else{
                                    String format = String.format("%02d",w);
                                    String format2 = String.format("%02d",Integer.parseInt(startSplit[1]) + 1);
                                    if (todayNumber.get(format2 + "-" + format) == null){
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                    }
                                    w++;
                                }
                            }
                        }else {
                            int c = 28 - (Integer.parseInt(startSplit[2]) - 1) + Integer.parseInt(endSplit[2]);
                            //将时间段里的天数人数进行存储
                            int w = 1;
                            for (int q = 0; q < c; q++) {
                                if (Integer.parseInt(startSplit[2]) + q <= 28) {
                                    String format = String.format("%02d", Integer.parseInt(startSplit[2]) + q);
                                    if (todayNumber.get(startSplit[1] + "-" + (format)) == null){
                                        todayNumber.put(startSplit[1] + "-" + (format),mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(startSplit[1] + "-" + (format),mealSituation.getNumber()+todayNumber.get(startSplit[1] + "-" + (format)));
                                    }
                                } else {
                                    String format = String.format("%02d", w);
                                    String format2 = String.format("%02d", Integer.parseInt(startSplit[1]) + 1);
                                    if (todayNumber.get(format2 + "-" + format) == null){
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                    }
                                    w++;
                                }
                            }
                        }
                    }
                }
            }

            //=========================需要添加的时间段和人数================================================
            //获取需要添加的时间范围和每天的人数
            Date startTimetj = hqMealSituation.getStartTime();
            Date endTimetj = hqMealSituation.getEndTime();
            //设置日期格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //修改开始时间和结束时间格式为(yyyy-MM-dd)
            String starttj = sdf.format(startTimetj);
            String endtj = sdf.format(endTimetj);
            //用split分隔(-)拿到dd,用作判断
            //开始时间分隔
            String[] startSplittj = starttj.split("-");
            //结束时间分隔
            String[] endSplittj = endtj.split("-");

            Map<String,Integer> todayNumbertj = new HashMap<>();

            if (Integer.parseInt(startSplittj[1]) == Integer.parseInt(endSplittj[1])) {
                if (Integer.parseInt(startSplittj[2]) <= Integer.parseInt(endSplittj[2])) {
                    //将时间段里的天数人数进行存储
                    for (int i = 0; i <= Integer.parseInt(endSplittj[2]) - Integer.parseInt(startSplittj[2]); i++) {
                        String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + i);
                        if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                            todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                        }else {
                            todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                        }
                    }
                }
            }else {
                //31天
                if (startSplittj[1].equals("01") || startSplittj[1].equals("03") || startSplittj[1].equals("05") || startSplittj[1].equals("07") ||startSplittj[1].equals("08") || startSplittj[1].equals("10") || startSplittj[1].equals("12")){
                    //开始日期到结束日期总天数
                    int a =  31 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                    //将时间段里的天数人数进行存储
                    int w = 1;
                    for (int i = 0; i < a; i++) {
                        if (Integer.parseInt(startSplittj[2])+i <= 31){
                            String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + i);
                            if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                            }
                        }else{
                            String format = String.format("%02d",w);
                            String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);
                            if (todayNumbertj.get(format2 + "-" + format) == null){
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                            }
                            w++;
                        }
                    }
                }else if (startSplittj[1].equals("04") || startSplittj[1].equals("06") || startSplittj[1].equals("09") || startSplittj[1].equals("11")){
                    int b =  30 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                    //将时间段里的天数人数进行存储
                    int w = 1;
                    for (int s = 0; s < b; s++) {
                        if ((Integer.parseInt(startSplittj[2]) + s) <= 30){
                            String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + s);
                            if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                            }
                        }else{
                            String format = String.format("%02d",w);
                            String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);
                            if (todayNumbertj.get(format2 + "-" + format) == null){
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                            }
                            w++;
                        }
                    }
                }else {
                    //判断是平年还是闰年   平年(不被4整除)  二月28天      闰年(被4整除)    二月29天
                    if (((Integer.parseInt(startSplittj[0]) % 4 == 0) && (Integer.parseInt(startSplittj[0]) / 100 != 0)) || (Integer.parseInt(startSplittj[0]) / 400 == 0)) {
                        int c =  29 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int q = 0; q < c; q++) {
                            if ((Integer.parseInt(startSplittj[2]) + q) <= 29){
                                String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + q);
                                if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                                }
                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);
                                if (todayNumbertj.get(format2 + "-" + format) == null){
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                                }
                                w++;
                            }
                        }
                    }else {
                        int c =  28 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int q = 0; q < c; q++) {
                            if ((Integer.parseInt(startSplittj[2]) + q) <= 28){
                                String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + q);
                                if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                                }
                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);
                                if (todayNumbertj.get(format2 + "-" + format) == null){
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                                }
                                w++;
                            }
                        }
                    }
                }
            }
            //同一时段自助餐厅总人数250人
            int countNumbers = 250;
            //符合添加要求+1;
            int good = 0;
            int a = 0;
            for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
                String testKeytj = entrytj.getKey();
                Integer valuetj = entrytj.getValue();
                for (Map.Entry<String,Integer> entry : todayNumber.entrySet()) {
                    String testKey = entry.getKey();
                    Integer value = entry.getValue();
                    //todayNumber.containsKey()
                    if (testKeytj.equals(testKey) ){
                        //判断当天时间段预定人数
                        a++;
                        int todayNumbershengyu = countNumbers - value;
                        if (todayNumbershengyu >= valuetj){
                            good++;
                        }
                    }
                }
            }
            int val = 0;
            for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
                String testKeytj = entrytj.getKey();
                 val = entrytj.getValue();
                break;
            }
            //todayNumbertj.size() - a 算出的是添加有而遍历没有的东西
            //good   是判定出名字相等的且人数符合要求的(可以添加)
            int counts =todayNumbertj.size() - a + good;
            if (counts == todayNumbertj.size() && val <= 250) {
                return super.save(hqMealSituation);
            } else {
                /* return false;*/
                throw new BusinessException("当前时间段总人数超过最大值250人,请重新输入!");
            }
        /*}*/
    }




    //修改
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean updateHqMealSituation(HqMealSituation hqMealSituation) {
        QueryWrapper<HqMealSituation> queryWrapper2 = Wrappers.<HqMealSituation>query()
                .eq(hqMealSituation.getId() != null, "id", hqMealSituation.getId());
        //如若添加失败将编辑前的原信息进行添加
        HqMealSituation hqMealSituationbj = hqMealSituationMapper.selectOne(queryWrapper2);
        //将原信息进行删除,然后执行添加功能实现编辑功能.
        int delete = hqMealSituationMapper.delete(queryWrapper2);
        if (hqMealSituation.getHaveMealsForm().equals("自助餐")){
            hqMealSituation.setHaveMealsForm("1");
        }

       /* if (hqMealSituation.getCbmodel().equals("half")){
            hqMealSituation.setCbmodel("1");
        }else {
            hqMealSituation.setCbmodel("2");
        }*/

        if (hqMealSituation.getHaveMealsTime().equals(0)){
            hqMealSituation.setMealStatus("0");
        } else if (hqMealSituation.getHaveMealsTime().equals(1)){
            hqMealSituation.setMealStatus("1");
        } else {
            hqMealSituation.setMealStatus("2");
        }

        if (hqMealSituation.getHaveMealsStandard().equals(40)){
            hqMealSituation.setHaveMealsStandard(0);
        }else {
            hqMealSituation.setHaveMealsStandard(1);
        }

        /*if (hqMealSituation.getCbmodel().equals("1")) {
            QueryWrapper<HqMealSituation> queryWrapper = Wrappers.<HqMealSituation>query()
                    .ge(hqMealSituation.getStartTime() != null, "start_time", hqMealSituation.getStartTime())
                    .le(hqMealSituation.getEndTime() != null, "end_time", hqMealSituation.getEndTime());
            List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
            int numbers = 0;
            for (HqMealSituation mealSituation : list) {
                Integer number = mealSituation.getNumber();
                numbers += number;
            }
            int countNumbers = 250;
            int remainingNumber = countNumbers - numbers;
            if (hqMealSituation.getNumber() <= remainingNumber) {
                return super.save(hqMealSituation);
            } else {
                return false;
            }
        }else {*/
            QueryWrapper<HqMealSituation> queryWrapper = Wrappers.<HqMealSituation>query()
                    .eq(hqMealSituation.getMealStatus() != null, "meal_status",hqMealSituation.getMealStatus());
                  /*  .eq(hqMealSituation.getCbmodel() != null, "cbmodel",hqMealSituation.getCbmodel());*/
                   /* .ge(hqMealSituation.getStartTime() != null, "start_time", hqMealSituation.getStartTime())
                    .le(hqMealSituation.getEndTime() != null, "end_time", hqMealSituation.getEndTime());*/
            //查询出时间段里面的所有预定
            List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
            //将得到的天数和人数存储到集合中
            /*List<MealCount> todayNumber = new ArrayList<>();*/
            Map<String,Integer> todayNumber = new HashMap<>();
            //遍历得到的集合
            for (HqMealSituation mealSituation : list) {
                Date startTime = mealSituation.getStartTime();
                Date endTime = mealSituation.getEndTime();
                //设置日期格式
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                //修改开始时间和结束时间格式为(yyyy-MM-dd)
                String start = sdf.format(startTime);
                String end = sdf.format(endTime);
                //用split分隔(-)拿到dd,用作判断
                //开始时间分隔
                String[] startSplit = start.split("-");
                //结束时间分隔
                String[] endSplit = end.split("-");
                //将一个人时间范围内的所有天的预定人数进行存储
                if (Integer.parseInt(startSplit[1]) == Integer.parseInt(endSplit[1])) {
                    if (Integer.parseInt(startSplit[2]) <= Integer.parseInt(endSplit[2])) {
                        //将时间段里的天数人数进行存储
                        for (int i = 0; i <= Integer.parseInt(endSplit[2]) - Integer.parseInt(startSplit[2]); i++) {
                            //每个预定的时间范围内每天的具体人数
                            //将分钟转换成00,01,02这种格式的
                            String format = String.format("%02d", Integer.parseInt(startSplit[2]) + i);

                            if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                            }else {
                                todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                            }

                        }
                    }
                }else {
                    //31天
                    if (startSplit[1].equals("01") || startSplit[1].equals("03") || startSplit[1].equals("05") || startSplit[1].equals("07") ||startSplit[1].equals("08") || startSplit[1].equals("10") || startSplit[1].equals("12")){
                        //开始日期到结束日期总天数
                        int a =  31 - (Integer.parseInt(startSplit[2]) - 1 ) + Integer.parseInt(endSplit[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int i = 0; i < a; i++) {

                            if (Integer.parseInt(startSplit[2]) + i <= 31){
                                String format = String.format("%02d", Integer.parseInt(startSplit[2]) + i);

                                if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                                }else {
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                                }

                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplit[1]) + 1);

                                if (todayNumber.get(format2 + "-" + format) == null){
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                }else {
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                }
                                w++;
                            }

                        }
                    }else if (startSplit[1].equals("04") || startSplit[1].equals("06") || startSplit[1].equals("09") || startSplit[1].equals("11")){
                        int b =  30 - (Integer.parseInt(startSplit[2]) - 1) + Integer.parseInt(endSplit[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int s = 0; s < b; s++) {

                            if (Integer.parseInt(startSplit[2]) + s <= 30){
                                String format = String.format("%02d", Integer.parseInt(startSplit[2]) + s);

                                if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                                }else {
                                    todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                                }
                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplit[1]) + 1);

                                if (todayNumber.get(format2 + "-" + format) == null){
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                }else {
                                    todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                }
                                w++;
                            }

                        }
                    }else {
                        //判断是平年还是闰年   平年(不被4整除)  二月28天      闰年(被4整除)    二月29天
                        if (((Integer.parseInt(startSplit[0]) % 4 == 0) && (Integer.parseInt(startSplit[0]) / 100 != 0)) || (Integer.parseInt(startSplit[0]) / 400 == 0)) {
                            int c =  29 - (Integer.parseInt(startSplit[2]) - 1) + Integer.parseInt(endSplit[2]);
                            //将时间段里的天数人数进行存储
                            int w = 1;
                            for (int q = 0; q < c; q++) {
                                if (Integer.parseInt(startSplit[2] ) + q <= 29){
                                    String format = String.format("%02d", Integer.parseInt(startSplit[2]) + q);

                                    if (todayNumber.get(startSplit[1]+"-"+(format)) == null){
                                        todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(startSplit[1]+"-"+(format),mealSituation.getNumber()+todayNumber.get(startSplit[1]+"-"+(format)));
                                    }
                                }else{
                                    String format = String.format("%02d",w);
                                    String format2 = String.format("%02d",Integer.parseInt(startSplit[1]) + 1);

                                    if (todayNumber.get(format2 + "-" + format) == null){
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                    }
                                    w++;
                                }
                            }
                        }else {
                            int c = 28 - (Integer.parseInt(startSplit[2]) - 1) + Integer.parseInt(endSplit[2]);
                            //将时间段里的天数人数进行存储
                            int w = 1;
                            for (int q = 0; q < c; q++) {
                                if (Integer.parseInt(startSplit[2]) + q <= 28) {
                                    String format = String.format("%02d", Integer.parseInt(startSplit[2]) + q);

                                    if (todayNumber.get(startSplit[1] + "-" + (format)) == null){
                                        todayNumber.put(startSplit[1] + "-" + (format),mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(startSplit[1] + "-" + (format),mealSituation.getNumber()+todayNumber.get(startSplit[1] + "-" + (format)));
                                    }
                                } else {
                                    String format = String.format("%02d", w);
                                    String format2 = String.format("%02d", Integer.parseInt(startSplit[1]) + 1);

                                    if (todayNumber.get(format2 + "-" + format) == null){
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber());
                                    }else {
                                        todayNumber.put(format2 + "-" + format,mealSituation.getNumber()+todayNumber.get(format2 + "-" + format));
                                    }
                                    w++;
                                }
                            }
                        }
                    }

                }

            }


            //=========================需要添加的时间段和人数================================================
            //获取需要添加的时间范围和每天的人数
            Date startTimetj = hqMealSituation.getStartTime();
            Date endTimetj = hqMealSituation.getEndTime();
            //设置日期格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //修改开始时间和结束时间格式为(yyyy-MM-dd)
            String starttj = sdf.format(startTimetj);
            String endtj = sdf.format(endTimetj);
            //用split分隔(-)拿到dd,用作判断
            //开始时间分隔
            String[] startSplittj = starttj.split("-");
            //结束时间分隔
            String[] endSplittj = endtj.split("-");

            Map<String,Integer> todayNumbertj = new HashMap<>();

            if (Integer.parseInt(startSplittj[1]) == Integer.parseInt(endSplittj[1])) {
                if (Integer.parseInt(startSplittj[2]) <= Integer.parseInt(endSplittj[2])) {
                    //将时间段里的天数人数进行存储
                    for (int i = 0; i <= Integer.parseInt(endSplittj[2]) - Integer.parseInt(startSplittj[2]); i++) {
                        String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + i);

                        if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                            todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                        }else {
                            todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                        }
                    }
                }
            }else {
                //31天
                if (startSplittj[1].equals("01") || startSplittj[1].equals("03") || startSplittj[1].equals("05") || startSplittj[1].equals("07") ||startSplittj[1].equals("08") || startSplittj[1].equals("10") || startSplittj[1].equals("12")){
                    //开始日期到结束日期总天数
                    int a =  31 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                    //将时间段里的天数人数进行存储
                    int w = 1;
                    for (int i = 0; i < a; i++) {
                        if (Integer.parseInt(startSplittj[2])+i <= 31){
                            String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + i);

                            if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                            }
                        }else{
                            String format = String.format("%02d",w);
                            String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);

                            if (todayNumbertj.get(format2 + "-" + format) == null){
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                            }
                            w++;
                        }

                    }
                }else if (startSplittj[1].equals("04") || startSplittj[1].equals("06") || startSplittj[1].equals("09") || startSplittj[1].equals("11")){
                    int b =  30 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                    //将时间段里的天数人数进行存储
                    int w = 1;
                    for (int s = 0; s < b; s++) {

                        if ((Integer.parseInt(startSplittj[2]) + s) <= 30){
                            String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + s);

                            if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                            }
                        }else{
                            String format = String.format("%02d",w);
                            String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);

                            if (todayNumbertj.get(format2 + "-" + format) == null){
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                            }else {
                                todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                            }
                            w++;
                        }

                    }
                }else {
                    //判断是平年还是闰年   平年(不被4整除)  二月28天      闰年(被4整除)    二月29天
                    if (((Integer.parseInt(startSplittj[0]) % 4 == 0) && (Integer.parseInt(startSplittj[0]) / 100 != 0)) || (Integer.parseInt(startSplittj[0]) / 400 == 0)) {
                        int c =  29 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int q = 0; q < c; q++) {

                            if ((Integer.parseInt(startSplittj[2]) + q) <= 29){
                                String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + q);

                                if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                                }
                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);

                                if (todayNumbertj.get(format2 + "-" + format) == null){
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                                }
                                w++;
                            }
                        }
                    }else {
                        int c =  28 - (Integer.parseInt(startSplittj[2]) - 1) + Integer.parseInt(endSplittj[2]);
                        //将时间段里的天数人数进行存储
                        int w = 1;
                        for (int q = 0; q < c; q++) {
                            if ((Integer.parseInt(startSplittj[2]) + q) <= 28){
                                String format = String.format("%02d", Integer.parseInt(startSplittj[2]) + q);

                                if (todayNumbertj.get(startSplittj[1]+"-"+(format)) == null){
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(startSplittj[1]+"-"+(format),hqMealSituation.getNumber()+todayNumbertj.get(startSplittj[1]+"-"+(format)));
                                }
                            }else{
                                String format = String.format("%02d",w);
                                String format2 = String.format("%02d",Integer.parseInt(startSplittj[1]) + 1);

                                if (todayNumbertj.get(format2 + "-" + format) == null){
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber());
                                }else {
                                    todayNumbertj.put(format2 + "-" + format,hqMealSituation.getNumber()+todayNumbertj.get(format2 + "-" + format));
                                }
                                w++;
                            }
                        }
                    }

                }
            }

            //同一时段自助餐厅总人数250人
            int countNumbers = 250;
            //符合添加要求+1;
            int good = 0;

            int a = 0;
            for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
                String testKeytj = entrytj.getKey();
                Integer valuetj = entrytj.getValue();
                for (Map.Entry<String,Integer> entry : todayNumber.entrySet()) {
                    String testKey = entry.getKey();
                    Integer value = entry.getValue();
                    //todayNumber.containsKey()
                    if (testKeytj.equals(testKey) ){
                        //判断当天时间段预定人数
                        a++;
                        int todayNumbershengyu = countNumbers - value;
                        if (todayNumbershengyu >= valuetj){
                            good++;
                        }
                    }
                }

            }
            int val = 0;
            for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
                String testKeytj = entrytj.getKey();
                val = entrytj.getValue();
                break;
            }
            //todayNumbertj.size() - a 算出的是添加有而遍历没有的东西(说明还未有人在那天进行预定,只要符合<=250人即可添加)
            //good   是判定出名字相等的且人数符合要求的(可以添加)
            int counts =todayNumbertj.size() - a + good;
            if (counts == todayNumbertj.size() && val <=250) {
                return super.save(hqMealSituation);
            } else {
                int insert = hqMealSituationMapper.insert(hqMealSituationbj);
                throw new BusinessException("当前时间段总人数超过最大值250人,请重新输入!");
            }
       /* }*/

        /*  return super.updateById(hqMealSituation);*/
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean deleteHqMealSituation(List<Long> ids)  {
        return super.removeByIds(ids);
    }

    @Override
    public Paging<HqMealSituationQueryVo> getHqMealSituationPageList(HqMealSituationQueryParam hqMealSituationQueryParam) {
        QueryWrapper<HqMealSituationQueryParam> queryWrapper = Wrappers.<HqMealSituationQueryParam>query()
                .eq(hqMealSituationQueryParam.getConfirmId() != null,"confirm_id",hqMealSituationQueryParam.getConfirmId())
                .ge(hqMealSituationQueryParam.getStartTime() != null,"start_time",hqMealSituationQueryParam.getStartTime())
                .le(hqMealSituationQueryParam.getEndTime() != null,"end_time",hqMealSituationQueryParam.getEndTime());
        IPage<HqMealSituation> hqMealSituationPageList = hqMealSituationMapper.getHqMealSituationPageList(hqMealSituationQueryParam.page(), queryWrapper);
//        List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
        List<HqMealSituation> list = hqMealSituationPageList.getRecords();
        List<HqMealSituationQueryVo> list1=new ArrayList<>();
        for (HqMealSituation hqMealSituation : list) {
            HqMealSituationQueryVo hqMealSituationQueryVo = HqDemandConfirmConvert.INSTANCE.hqMealSituationTohqMealSituationQueryVo(hqMealSituation);
            Date startTime = hqMealSituationQueryVo.getStartTime();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
            String s = sdf.format(startTime);
            String[] start = s.split(" ");
            String startData=start[0];
            String startTimes=start[1];

            Date endTime = hqMealSituationQueryVo.getEndTime();
            String s2 = sdf.format(endTime);
            String[] end = s2.split(" ");
            String endData=end[0];
            String endTimes=end[1];

            hqMealSituationQueryVo.setStartData(startData);
            hqMealSituationQueryVo.setEndData(endData);
            hqMealSituationQueryVo.setMealStartEndTime(startTimes+"~"+endTimes);
            list1.add(hqMealSituationQueryVo);
        }

        return new Paging<HqMealSituationQueryVo>().setRecords(list1)
                .setTotal(hqMealSituationPageList.getTotal());
    }


}

因为这种方法存在bug,无法跨年拿到时间段的所有日期.所以,我就用其他的方式写了一下,具体如下:

        网上搜索的代码,通过它举一反三实现的自己的代码

        他是用时间段的一个开始时间和一个结束时间,来获取时间段里面的所有日期.然而自己就可以用他的这种来实现就可以了.

package com.sinosoft.springbootplus.demandConfirm.application.service.impl;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class test {
    public static void main(String[] args) throws Exception {
        String beginDate = "2016-12-16";//开始时间
        String endDate = "2017-01-22";//结束时间

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(beginDate));

        for (long d = cal.getTimeInMillis(); d <= sdf.parse(endDate).getTime(); d = get_D_Plaus_1(cal)) {
            System.out.println(sdf.format(d));
        }

    }
    public static long get_D_Plaus_1(Calendar c) {
        c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
        return c.getTimeInMillis();
    }
}

通过他的方式来实现的自己的代码:

详情介绍请看注解

package com.sinosoft.springbootplus.demandConfirm.application.service.impl;

import com.sinosoft.springbootplus.common.exception.BusinessException;
import com.sinosoft.springbootplus.demandConfirm.application.service.HqMealSituationService;
import com.sinosoft.springbootplus.demandConfirm.convert.HqDemandConfirmConvert;
import com.sinosoft.springbootplus.demandConfirm.domain.entity.HqMealSituation;
import com.sinosoft.springbootplus.demandConfirm.domain.mapper.HqMealSituationMapper;
import com.sinosoft.springbootplus.demandConfirm.param.HqMealSituationQueryParam;
import com.sinosoft.springbootplus.demandConfirm.vo.HqMealSituationQueryVo;
import com.sinosoft.springbootplus.mybatis.service.impl.BaseServiceImpl;
import com.sinosoft.springbootplus.mybatis.vo.Paging;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;



/**
 * <pre>
 * 培训确认单用餐情况  服务实现类
 * </pre>
 *
 * @author lijiakai
 * @since 2021-12-03
 */
@Slf4j
@Service
public class HqMealSituationServiceImpl extends BaseServiceImpl<HqMealSituationMapper, HqMealSituation> implements HqMealSituationService {

    private HqMealSituationMapper hqMealSituationMapper;
    HqMealSituationServiceImpl (HqMealSituationMapper hqMealSituationMapper){
        this.hqMealSituationMapper =hqMealSituationMapper;
    }

    public static long get_D_Plaus_1(Calendar c) {
        c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
        return c.getTimeInMillis();
    }
    //添加
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean saveHqMealSituation(HqMealSituation hqMealSituation) throws ParseException, ParseException {
        if (hqMealSituation.getHaveMealsForm().equals("自助餐")){
            hqMealSituation.setHaveMealsForm("1");
        }
        if (hqMealSituation.getHaveMealsTime().equals(0)){
            hqMealSituation.setMealStatus("0");
        } else if (hqMealSituation.getHaveMealsTime().equals(1)){
            hqMealSituation.setMealStatus("1");
        } else {
            hqMealSituation.setMealStatus("2");
        }

        if (hqMealSituation.getHaveMealsStandard().equals(40)){
            hqMealSituation.setHaveMealsStandard(0);
        }else {
            hqMealSituation.setHaveMealsStandard(1);
        }

        QueryWrapper<HqMealSituation> queryWrapper = Wrappers.<HqMealSituation>query()
                .eq(hqMealSituation.getMealStatus() != null, "meal_status",hqMealSituation.getMealStatus());

        //查询出时间段里面的所有预定
        List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
        //将得到的天数和人数存储到集合中
        Map<String,Integer> todayNumber = new HashMap<>();
        //遍历得到的集合
        for (HqMealSituation mealSituation : list) {
            Date startTime = mealSituation.getStartTime();
            Date endTime = mealSituation.getEndTime();
            //设置日期格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //修改开始时间和结束时间格式为(yyyy-MM-dd)
            String start = sdf.format(startTime);  //因为日期是Date类型,所以需要转换.
            String end = sdf.format(endTime);
            //开始
            // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(start));
            for (long d = cal.getTimeInMillis(); d <= sdf.parse(end).getTime(); d = get_D_Plaus_1(cal)) {
                // System.out.println(sdf.format(d));
                String format = sdf.format(d); //每次遍历拿到时间段的一个时间
                if (todayNumber.get(format) == null) { //然后做判断todayNumber集合中是否这个时间段,如果没有就添加
                    todayNumber.put(format, mealSituation.getNumber());
                } else {
                    todayNumber.put(format, mealSituation.getNumber() + todayNumber.get(format));   //如果有这个时间,就拿刚遍历出来的时间的人数和之前这个时间的人数相加,对之前的时间段进行覆盖.
                }
            }

        }
        //=========================需要添加的时间段和人数================================================
        //获取需要添加的时间范围和每天的人数
        Date startTimetj = hqMealSituation.getStartTime();
        Date endTimetj = hqMealSituation.getEndTime();
        //设置日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //修改开始时间和结束时间格式为(yyyy-MM-dd)
        String starttj = sdf.format(startTimetj);
        String endtj = sdf.format(endTimetj);
        //存储添加到的时间段信息
        Map<String,Integer> todayNumbertj = new HashMap<>();

        Calendar caltj = Calendar.getInstance();
        caltj.setTime(sdf.parse(starttj));
        for (long d = caltj.getTimeInMillis(); d <= sdf.parse(endtj).getTime(); d = get_D_Plaus_1(caltj)) {
            //System.out.println(sdf.format(d));
            String format = sdf.format(d);
            todayNumbertj.put(format,hqMealSituation.getNumber());
        }


        //同一时段自助餐厅总人数250人
        int countNumbers = 250;
        //添加的时间和搜索出来的时间有多少相同的里面符合要求+1;
        int good = 0;
        //添加的时间和搜索出来的时间有多少相同的
        int a = 0;
        //遍历
        for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
            String testKeytj = entrytj.getKey();
            Integer valuetj = entrytj.getValue();
            for (Map.Entry<String,Integer> entry : todayNumber.entrySet()) {
                String testKey = entry.getKey();
                Integer value = entry.getValue();

                if (testKeytj.equals(testKey) ){
                    //判断当天时间段预定人数
                    a++;
                    int todayNumbershengyu = countNumbers - value; //剩余人数
                    if (todayNumbershengyu >= valuetj){
                        good++;
                    }
                }
            }
        }
        int val = 0;
        for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
            val = entrytj.getValue();
            break;
        }
        //todayNumbertj.size() - a 算出的是添加有而遍历没有的东西
        //good   是判定出名字相等的且人数符合要求的(可以添加)
        int counts =todayNumbertj.size() - a + good;    //拿到一共符合要求的时间有多少
        if (counts == todayNumbertj.size() && val <= 250) {
            return super.save(hqMealSituation);
        } else {
            throw new BusinessException("当前时间段总人数超过最大值250人,请重新输入!");
        }
    }




    //修改
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean updateHqMealSituation(HqMealSituation hqMealSituation) throws ParseException {
        QueryWrapper<HqMealSituation> queryWrapper2 = Wrappers.<HqMealSituation>query()
                .eq(hqMealSituation.getId() != null, "id", hqMealSituation.getId());
        //如若添加失败将编辑前的原信息进行添加
        HqMealSituation hqMealSituationbj = hqMealSituationMapper.selectOne(queryWrapper2);
        //将原信息进行删除,然后执行添加功能实现编辑功能.
        int delete = hqMealSituationMapper.delete(queryWrapper2);
        if (hqMealSituation.getHaveMealsForm().equals("自助餐")){
            hqMealSituation.setHaveMealsForm("1");
        }

        if (hqMealSituation.getHaveMealsTime().equals(0)){
            hqMealSituation.setMealStatus("0");
        } else if (hqMealSituation.getHaveMealsTime().equals(1)){
            hqMealSituation.setMealStatus("1");
        } else {
            hqMealSituation.setMealStatus("2");
        }

        if (hqMealSituation.getHaveMealsStandard().equals(40)){
            hqMealSituation.setHaveMealsStandard(0);
        }else {
            hqMealSituation.setHaveMealsStandard(1);
        }

        QueryWrapper<HqMealSituation> queryWrapper = Wrappers.<HqMealSituation>query()
                .eq(hqMealSituation.getMealStatus() != null, "meal_status",hqMealSituation.getMealStatus());

        //查询出时间段里面的所有预定
        List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
        //将得到的天数和人数存储到集合中
        Map<String,Integer> todayNumber = new HashMap<>();
        //遍历得到的集合
        for (HqMealSituation mealSituation : list) {
            Date startTime = mealSituation.getStartTime();
            Date endTime = mealSituation.getEndTime();
            //设置日期格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //修改开始时间和结束时间格式为(yyyy-MM-dd)
            String start = sdf.format(startTime);
            String end = sdf.format(endTime);
            //开始
            // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(start));
            for (long d = cal.getTimeInMillis(); d <= sdf.parse(end).getTime(); d = get_D_Plaus_1(cal)) {
                // System.out.println(sdf.format(d));
                String format = sdf.format(d);
                if (todayNumber.get(format) == null) {
                    todayNumber.put(format, mealSituation.getNumber());
                } else {
                    todayNumber.put(format, mealSituation.getNumber() + todayNumber.get(format));
                }
            }

        }

        //=========================需要添加的时间段和人数================================================
        //获取需要添加的时间范围和每天的人数
        Date startTimetj = hqMealSituation.getStartTime();
        Date endTimetj = hqMealSituation.getEndTime();
        //设置日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //修改开始时间和结束时间格式为(yyyy-MM-dd)
        String starttj = sdf.format(startTimetj);
        String endtj = sdf.format(endTimetj);
        //存储添加到的时间段信息
        Map<String,Integer> todayNumbertj = new HashMap<>();

        Calendar caltj = Calendar.getInstance();
        caltj.setTime(sdf.parse(starttj));
        for (long d = caltj.getTimeInMillis(); d <= sdf.parse(endtj).getTime(); d = get_D_Plaus_1(caltj)) {
            //System.out.println(sdf.format(d));
            String format = sdf.format(d);
            todayNumbertj.put(format,hqMealSituation.getNumber());
        }


        //同一时段自助餐厅总人数250人
        int countNumbers = 250;
        //符合添加要求+1;
        int good = 0;
        int a = 0;
        for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
            String testKeytj = entrytj.getKey();
            Integer valuetj = entrytj.getValue();
            for (Map.Entry<String,Integer> entry : todayNumber.entrySet()) {
                String testKey = entry.getKey();
                Integer value = entry.getValue();
                //todayNumber.containsKey()
                if (testKeytj.equals(testKey) ){
                    //判断当天时间段预定人数
                    a++;
                    int todayNumbershengyu = countNumbers - value;
                    if (todayNumbershengyu >= valuetj){
                        good++;
                    }
                }
            }
        }
        int val = 0;
        for (Map.Entry<String,Integer> entrytj : todayNumbertj.entrySet()) {
            val = entrytj.getValue();
            break;
        }
        //todayNumbertj.size() - a 算出的是添加有而遍历没有的东西
        //good   是判定出名字相等的且人数符合要求的(可以添加)
        int counts =todayNumbertj.size() - a + good;
        if (counts == todayNumbertj.size() && val <= 250) {
            return super.save(hqMealSituation);
        } else {
            int insert = hqMealSituationMapper.insert(hqMealSituationbj);
            throw new BusinessException("当前时间段总人数超过最大值250人,请重新输入!");
        }

        /*  return super.updateById(hqMealSituation);*/
        /*int insert = hqMealSituationMapper.insert(hqMealSituationbj);*/
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean deleteHqMealSituation(List<Long> ids)  {
        return super.removeByIds(ids);
    }

    @Override
    public Paging<HqMealSituationQueryVo> getHqMealSituationPageList(HqMealSituationQueryParam hqMealSituationQueryParam) {
        QueryWrapper<HqMealSituationQueryParam> queryWrapper = Wrappers.<HqMealSituationQueryParam>query()
                .eq(hqMealSituationQueryParam.getConfirmId() != null,"confirm_id",hqMealSituationQueryParam.getConfirmId())
                .ge(hqMealSituationQueryParam.getStartTime() != null,"start_time",hqMealSituationQueryParam.getStartTime())
                .le(hqMealSituationQueryParam.getEndTime() != null,"end_time",hqMealSituationQueryParam.getEndTime());
        IPage<HqMealSituation> hqMealSituationPageList = hqMealSituationMapper.getHqMealSituationPageList(hqMealSituationQueryParam.page(), queryWrapper);
//        List<HqMealSituation> list = hqMealSituationMapper.selectList(queryWrapper);
        List<HqMealSituation> list = hqMealSituationPageList.getRecords();
        List<HqMealSituationQueryVo> list1=new ArrayList<>();
        for (HqMealSituation hqMealSituation : list) {
            HqMealSituationQueryVo hqMealSituationQueryVo = HqDemandConfirmConvert.INSTANCE.hqMealSituationTohqMealSituationQueryVo(hqMealSituation);
            Date startTime = hqMealSituationQueryVo.getStartTime();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
            String s = sdf.format(startTime);
            String[] start = s.split(" ");
            String startData=start[0];
            String startTimes=start[1];

            Date endTime = hqMealSituationQueryVo.getEndTime();
            String s2 = sdf.format(endTime);
            String[] end = s2.split(" ");
            String endData=end[0];
            String endTimes=end[1];

            hqMealSituationQueryVo.setStartData(startData);
            hqMealSituationQueryVo.setEndData(endData);
            hqMealSituationQueryVo.setMealStartEndTime(startTimes+"~"+endTimes);
            list1.add(hqMealSituationQueryVo);
        }

        return new Paging<HqMealSituationQueryVo>().setRecords(list1)
                .setTotal(hqMealSituationPageList.getTotal());
    }


}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值