自己之前的笨方法:
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());
}
}