|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package com.stdiet.custom.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.stdiet.common.utils.DateUtils;
|
|
|
|
|
import com.stdiet.common.utils.StringUtils;
|
|
|
|
|
import com.stdiet.common.utils.SynchrolockUtil;
|
|
|
|
|
import com.stdiet.common.utils.sign.Md5Utils;
|
|
|
|
|
import com.stdiet.custom.domain.SysOrder;
|
|
|
|
@ -18,9 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 食谱计划Service业务层处理
|
|
|
|
@ -150,10 +149,8 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
|
|
|
|
|
SysRecipesPlan queryParam = new SysRecipesPlan();
|
|
|
|
|
queryParam.setOrderId(orderId);
|
|
|
|
|
List<SysRecipesPlan> oldRecipesPlanList = sysRecipesPlanMapper.selectSysRecipesPlanList(queryParam);
|
|
|
|
|
SysOrderPause pauseParam = new SysOrderPause();
|
|
|
|
|
pauseParam.setOrderId(sysOrder.getOrderId());
|
|
|
|
|
//暂停记录列表
|
|
|
|
|
List<SysOrderPause> pauseList = sysOrderPauseService.selectSysOrderPauseList(pauseParam);
|
|
|
|
|
//暂停记录列表,按暂停开始时间顺序
|
|
|
|
|
List<SysOrderPause> pauseList = sysOrderPauseService.getPauseListByOrderId(sysOrder.getOrderId());
|
|
|
|
|
List<SysRecipesPlan> planList = generatePlan(sysOrder, oldRecipesPlanList, DateUtils.dateToLocalDate(sysOrder.getStartTime()), DateUtils.dateToLocalDate(sysOrder.getServerEndTime()), pauseList);
|
|
|
|
|
if(oldRecipesPlanList != null && oldRecipesPlanList.size() > 0){
|
|
|
|
|
updateOrAddRecipesPlan(oldRecipesPlanList, planList);
|
|
|
|
@ -184,9 +181,12 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
|
|
|
|
|
List<Long> delList = new ArrayList<>();
|
|
|
|
|
for (SysRecipesPlan plan : oldRecipesPlanList) {
|
|
|
|
|
if(index < newSize){
|
|
|
|
|
plan.setStartDate(newRecipesPlanList.get(index).getStartDate());
|
|
|
|
|
plan.setEndDate(newRecipesPlanList.get(index).getEndDate());
|
|
|
|
|
updateList.add(plan);
|
|
|
|
|
if(plan.getStartDate().compareTo(newRecipesPlanList.get(index).getStartDate()) != 0
|
|
|
|
|
|| plan.getEndDate().compareTo(newRecipesPlanList.get(index).getEndDate()) != 0){
|
|
|
|
|
plan.setStartDate(newRecipesPlanList.get(index).getStartDate());
|
|
|
|
|
plan.setEndDate(newRecipesPlanList.get(index).getEndDate());
|
|
|
|
|
updateList.add(plan);
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
delList.add(plan.getId());
|
|
|
|
|
}
|
|
|
|
@ -197,6 +197,7 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
|
|
|
|
|
}
|
|
|
|
|
//更新
|
|
|
|
|
if(updateList.size() > 0){
|
|
|
|
|
System.out.println("更新数量:"+updateList.size());
|
|
|
|
|
for (SysRecipesPlan plan : updateList) {
|
|
|
|
|
sysRecipesPlanMapper.updateSysRecipesPlan(plan);
|
|
|
|
|
}
|
|
|
|
@ -230,19 +231,26 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
|
|
|
|
|
oldStartNumDay = oldRecipesPlanList.get(0).getStartNumDay() - 1;
|
|
|
|
|
}
|
|
|
|
|
List<SysRecipesPlan> planList = new ArrayList<>();
|
|
|
|
|
boolean breakFlag = false;
|
|
|
|
|
LocalDate planStartDate = serverStartDate;
|
|
|
|
|
LocalDate planEndDate = planStartDate.plusDays(6);
|
|
|
|
|
while (true) {
|
|
|
|
|
LocalDate planStartDate = null;
|
|
|
|
|
LocalDate planEndDate = serverStartDate.plusDays(-1);
|
|
|
|
|
boolean breakFlag = true;
|
|
|
|
|
do {
|
|
|
|
|
SysRecipesPlan sysRecipesPlan = new SysRecipesPlan();
|
|
|
|
|
planStartDate = planEndDate.plusDays(1);
|
|
|
|
|
planEndDate = planStartDate.plusDays(6);
|
|
|
|
|
//判断是否大于服务到期时间
|
|
|
|
|
if (ChronoUnit.DAYS.between(planEndDate, serverEndDate) <= 0) {
|
|
|
|
|
planEndDate = serverEndDate;
|
|
|
|
|
breakFlag = true;
|
|
|
|
|
breakFlag = false;
|
|
|
|
|
}
|
|
|
|
|
String[] pauseResult = dealPlanPause(planStartDate, planEndDate, pauseList);
|
|
|
|
|
//开始时间变更为暂停结束之后的日期,因为暂停开始时间与食谱计划开始时间相同
|
|
|
|
|
if(StringUtils.isNotEmpty(pauseResult[0])){
|
|
|
|
|
planStartDate = DateUtils.stringToLocalDate(pauseResult[0],"yyyyMMdd");
|
|
|
|
|
planEndDate = DateUtils.stringToLocalDate(pauseResult[1],"yyyyMMdd");
|
|
|
|
|
}
|
|
|
|
|
long pauseDay = getPauseDayeCount(planStartDate, planEndDate, pauseList);
|
|
|
|
|
//加上暂停时间
|
|
|
|
|
planEndDate = planEndDate.plusDays(pauseDay);
|
|
|
|
|
planEndDate = planEndDate.plusDays(Integer.parseInt(pauseResult[2]));
|
|
|
|
|
sysRecipesPlan.setStartDate(DateUtils.localDateToDate(planStartDate));
|
|
|
|
|
sysRecipesPlan.setEndDate(DateUtils.localDateToDate(planEndDate));
|
|
|
|
|
sysRecipesPlan.setOrderId(sysOrder.getOrderId());
|
|
|
|
@ -252,30 +260,27 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
|
|
|
|
|
sysRecipesPlan.setStartNumDay(oldStartNumDay);
|
|
|
|
|
oldStartNumDay += 6;
|
|
|
|
|
sysRecipesPlan.setEndNumDay(oldStartNumDay);
|
|
|
|
|
//添加暂停范围内的日期
|
|
|
|
|
planList.add(sysRecipesPlan);
|
|
|
|
|
|
|
|
|
|
planStartDate = planEndDate.plusDays(1);
|
|
|
|
|
planEndDate = planStartDate.plusDays(6);
|
|
|
|
|
|
|
|
|
|
if (breakFlag) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}while (breakFlag);
|
|
|
|
|
return planList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据食谱开始时间、结束时间、暂停列表获取在食谱计划范围内的暂停天数
|
|
|
|
|
*
|
|
|
|
|
* @param planStartDate 计划开始时间
|
|
|
|
|
* @param planEndDate 计划结束时间
|
|
|
|
|
* @param pauseList 暂停列表
|
|
|
|
|
* 根据食谱开始时间、结束时间、暂停列表获取在食谱计划范围内的暂停天数,以及返回调整之后的计划开始、结束时间,以及暂停日期
|
|
|
|
|
* @param planStartDate 原先的计划开始时间
|
|
|
|
|
* @param planEndDate 原先计划结束时间
|
|
|
|
|
* @param pauseList 暂停列表集合
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private long getPauseDayeCount(LocalDate planStartDate, LocalDate planEndDate, List<SysOrderPause> pauseList) {
|
|
|
|
|
private String[] dealPlanPause(LocalDate planStartDate, LocalDate planEndDate, List<SysOrderPause> pauseList) {
|
|
|
|
|
//分别为计划开始时间、计划结束时间,范围内暂停天数,具体暂停日期,使用|隔开
|
|
|
|
|
String[] result = {"","","0",""};
|
|
|
|
|
long pauseDay = 0;
|
|
|
|
|
Set<String> pauseDateString = new TreeSet<>(new MyComparator());
|
|
|
|
|
//判断这个时间内是否存在暂停
|
|
|
|
|
if (pauseList != null && pauseList.size() > 0) {
|
|
|
|
|
//每条暂停时间的范围不会重叠,在添加暂停时做了限制
|
|
|
|
|
for (SysOrderPause sysOrderPause : pauseList) {
|
|
|
|
|
LocalDate pauseStartDate = DateUtils.dateToLocalDate(sysOrderPause.getPauseStartDate());
|
|
|
|
|
LocalDate pauseEndDate = DateUtils.dateToLocalDate(sysOrderPause.getPauseEndDate());
|
|
|
|
@ -288,10 +293,48 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
|
|
|
|
|
if (ChronoUnit.DAYS.between(planEndDate, pauseEndDate) > 0) {
|
|
|
|
|
pauseEndDate = planEndDate;
|
|
|
|
|
}
|
|
|
|
|
pauseDay += ChronoUnit.DAYS.between(pauseStartDate, pauseEndDate);
|
|
|
|
|
//判断暂停记录是否从食谱计划开始时间开始的
|
|
|
|
|
if(ChronoUnit.DAYS.between(pauseStartDate, planStartDate) == 0){
|
|
|
|
|
//记录该条暂停记录结束之后的第一天日期,如果两条记录连着,则取最后暂停结束之后的第一天
|
|
|
|
|
if("".equals(result[0]) || result[0].equals(DateUtils.localDateToString(pauseStartDate,"yyyyMMdd"))){
|
|
|
|
|
planStartDate = pauseEndDate.plusDays(1);
|
|
|
|
|
planEndDate = planStartDate.plusDays(6);
|
|
|
|
|
result[0] = DateUtils.localDateToString(planStartDate,"yyyyMMdd");
|
|
|
|
|
result[1] = DateUtils.localDateToString(planEndDate,"yyyyMMdd");
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
pauseDay += ChronoUnit.DAYS.between(pauseStartDate, pauseEndDate) + 1;
|
|
|
|
|
pauseDateString.addAll(getPauseDateString(pauseStartDate, pauseEndDate));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return pauseDay;
|
|
|
|
|
result[2] = pauseDay+"";
|
|
|
|
|
result[3] = pauseDateString.size() > 0 ? StringUtils.join(pauseDateString,"|") : "";
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据暂停时间范围获取范围内的日期
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private Set<String> getPauseDateString(LocalDate pauseStartDate, LocalDate pauseEndDate){
|
|
|
|
|
Set<String> pauseDateList = new HashSet<>();
|
|
|
|
|
long daysBetween = ChronoUnit.DAYS.between(pauseStartDate, pauseEndDate);
|
|
|
|
|
for(int i = 0; i <= daysBetween; i++){
|
|
|
|
|
pauseDateList.add(DateUtils.localDateToString(pauseStartDate.plusDays(i),"yyyyMMdd"));
|
|
|
|
|
}
|
|
|
|
|
return pauseDateList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 集合排序key值比较器
|
|
|
|
|
* */
|
|
|
|
|
class MyComparator implements Comparator<String>{
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int compare(String o1, String o2) {
|
|
|
|
|
return Integer.parseInt(o1) - Integer.parseInt(o2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|