Commit d5c08a01 by huluobin

update

parent eec6714e
......@@ -20,6 +20,7 @@ import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
/**
* 预约service
......@@ -34,7 +35,7 @@ public interface ScheduleManageService extends IService<ScheduleManage> {
* @return list
* @throws ParseException exception
*/
List<IdleTimeDTO> queryIdleTime(IdleTimeProgramQuery param) throws ParseException;
List<IdleTimeDTO> queryIdleTime(IdleTimeProgramQuery param) throws ParseException, ExecutionException, InterruptedException;
/**
* 闲时入口查询预约时间
......
......@@ -63,6 +63,9 @@ import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
......@@ -228,7 +231,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
@Override
public List<IdleTimeDTO> queryIdleTime(IdleTimeProgramQuery qry) throws ParseException {
public List<IdleTimeDTO> queryIdleTime(IdleTimeProgramQuery qry) throws ParseException, ExecutionException, InterruptedException {
IdleTimeQuery idleTimeQuery = new IdleTimeQuery();
......@@ -297,55 +300,55 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
});
});
//
List<IdleTimeDTO> idleTimeDTOList = idleTimeQuery.getDateTimeList()
.stream()
//并行处理
.parallel()
.map(dateTime -> {
ForkJoinPool myPool = new ForkJoinPool(dateTimeList.size());
List<IdleTimeDTO> idleTimeDTOList = new CopyOnWriteArrayList();
AtomicLong time = new AtomicLong(System.currentTimeMillis());
myPool.submit(() -> {
idleTimeQuery.getDateTimeList()
.forEach(dateTime -> {
//每个主服务由不同的美甲师做,setter主服务的时间period
mainServeDTOList.forEach(mainServeDTO -> {
Period period = new Period();
period.setStartTime(dateTime);
period.setLength(mainServeDTO.getLengthTimeForEndTime().longValue() * 60000);
period.setEndTime(dateTime + period.getLength());
mainServeDTO.setPeriod(period);
});
AtomicLong time = new AtomicLong(System.currentTimeMillis());
//主服务深度克隆
List<ScheduleServeQuery> cloneMainServeDTOList = mainServeDTOList.stream().map(CloneUtil::deepClone).collect(Collectors.toList());
//每个主服务由不同的美甲师做,setter主服务的时间period
mainServeDTOList.forEach(mainServeDTO -> {
Period period = new Period();
period.setStartTime(dateTime);
period.setLength(mainServeDTO.getLengthTimeForEndTime().longValue() * 60000);
period.setEndTime(dateTime + period.getLength());
mainServeDTO.setPeriod(period);
});
//美甲师深度克隆
List<StoreTechnicianPeriod> cloneStoreTechnicianDTOList = idleTimeQuery.getStoreTechnicianDTOList().stream().map(CloneUtil::deepClone).collect(Collectors.toList());
//主服务深度克隆
List<ScheduleServeQuery> cloneMainServeDTOList = mainServeDTOList.stream().map(CloneUtil::deepClone).collect(Collectors.toList());
//构造预约方案树🌲
TreeProgram treeProgram = this.rec(new LinkedList<>(cloneMainServeDTOList), cloneStoreTechnicianDTOList, TreeProgram.root());
//美甲师深度克隆
List<StoreTechnicianPeriod> cloneStoreTechnicianDTOList = idleTimeQuery.getStoreTechnicianDTOList().stream().map(CloneUtil::deepClone).collect(Collectors.toList());
log.debug("spendTime:{}", System.currentTimeMillis() - time.get());
time.set(System.currentTimeMillis());
//构造预约方案树🌲
TreeProgram treeProgram = this.rec(new LinkedList<>(cloneMainServeDTOList), cloneStoreTechnicianDTOList, TreeProgram.root());
List<TreeProgram> defaultNodes = new ArrayList<>();
log.debug("spendTime:{}", System.currentTimeMillis() - time.get());
time.set(System.currentTimeMillis());
//构造默认美甲师
this.recDefault(defaultNodes, treeProgram);
log.debug("构造默认美甲师Time:{}", System.currentTimeMillis() - time.get());
time.set(System.currentTimeMillis());
List<TreeProgram> defaultNodes = new ArrayList<>();
IdleTimeDTO idleTimeDTO = new IdleTimeDTO();
idleTimeDTO.setDateTime(dateTime);
idleTimeDTO.setTime(new SimpleDateFormat("HH:mm").format(new Date(dateTime)));
idleTimeDTO.setStatus(!treeProgram.childNull());
idleTimeDTO.setTreeProgram(treeProgram);
idleTimeDTO.setDefaultNodeList(defaultNodes);
return idleTimeDTO;
//构造默认美甲师
this.recDefault(defaultNodes, treeProgram);
time.set(System.currentTimeMillis());
IdleTimeDTO idleTimeDTO = new IdleTimeDTO();
idleTimeDTO.setDateTime(dateTime);
idleTimeDTO.setTime(new SimpleDateFormat("HH:mm").format(new Date(dateTime)));
idleTimeDTO.setStatus(!treeProgram.childNull());
idleTimeDTO.setTreeProgram(treeProgram);
idleTimeDTO.setDefaultNodeList(defaultNodes);
idleTimeDTOList.add(idleTimeDTO);
});
});
})
.collect(Collectors.toList());
return idleTimeDTOList;
return idleTimeDTOList.stream().sorted(Comparator.comparing(IdleTimeDTO::getTime)).collect(Collectors.toList());
}
private void recDefault(List<TreeProgram> list,
......@@ -408,7 +411,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
List<Integer> technicianIds = treeProgramList.stream().map(StoreTechnicianPeriod::getTechnicianId).collect(Collectors.toList());
Integer technicianId = storeTechnician.getTechnicianId();
log.debug("technicianIds:{},technicianId:{}", technicianIds, technicianId);
boolean b = technicianIds.contains(technicianId);
//如果已经设置该美甲师的节点不为空 需要把当前节点的服务时间加上
......@@ -451,7 +453,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
});
parent.setChildList(childList);
log.info("构造子树时间:{} ,父亲节点:{}", System.currentTimeMillis() - time, parent.getStoreTechnicianDTO());
return parent;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment