Commit d5c08a01 by huluobin

update

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