Commit 78d8b38c by huluobin

update

parent e276a7ac
...@@ -10,6 +10,8 @@ import com.gogirl.shared.order.*; ...@@ -10,6 +10,8 @@ import com.gogirl.shared.order.*;
import com.gogirl.shared.product.LeisureScheduleServeQuery; import com.gogirl.shared.product.LeisureScheduleServeQuery;
import com.gogirl.shared.product.LeisureScheduleServeResp; import com.gogirl.shared.product.LeisureScheduleServeResp;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.text.ParseException; import java.text.ParseException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
...@@ -142,19 +144,29 @@ public interface ScheduleManageService extends IService<ScheduleManage> { ...@@ -142,19 +144,29 @@ public interface ScheduleManageService extends IService<ScheduleManage> {
IPage<LeisureScheduleServeResp> queryPageLeisureScheduleServe(LeisureScheduleServeQuery query); IPage<LeisureScheduleServeResp> queryPageLeisureScheduleServe(LeisureScheduleServeQuery query);
/** /**
* 查询美甲师信息和美甲师不可用时间段 * 查询店铺下的美甲师和美甲师不可用时间段
* *
* @param scheduledId 是否必传 * @param scheduledId 是否必传:否。为过滤条件,如果是修改的话传预约id在查询不可用时间段的时候会过滤被修改的预约。
* @param departmentId 店铺id * @param departmentId 店铺id
* @param scheduleDate localData * @param day 日期 形如yyyy-MM-dd
* @param serveIdList 预约的服务id * @param serveIdList 预约的服务id。为过滤条件:过滤不能做服务的美甲师id
* @return * @return departmentId下的美甲师和美甲师不可用时间段
* @throws ParseException * @throws ParseException
*/ */
List<StoreTechnicianPeriod> queryStoreTechnicianPeriod(Integer scheduledId, List<StoreTechnicianPeriod> queryStoreTechnicianPeriod(@Null Integer scheduledId,
Integer departmentId, @NotNull Integer departmentId,
String scheduleDate, @NotNull String day,
List<Integer> serveIdList) throws ParseException; @Null List<Integer> serveIdList) throws ParseException;
List<StoreTechnician> queryLeisureTechnician(Integer departmentId, Integer serveId, LocalDateTime serveStartTime, LocalDateTime serveEndTime) throws ParseException; /**
* 查询店铺下能做服务的美甲师
*
* @param departmentId 店铺id
* @param serveId 服务id
* @param serveStartTime 服务开始时间
* @param serveEndTime 服务结束时间
* @return
* @throws ParseException
*/
List<StoreTechnician> queryAvailableTechnician(Integer departmentId, Integer serveId, LocalDateTime serveStartTime, LocalDateTime serveEndTime) throws ParseException;
} }
...@@ -22,6 +22,7 @@ import com.gogirl.domain.store.store.StoreTechnician; ...@@ -22,6 +22,7 @@ import com.gogirl.domain.store.store.StoreTechnician;
import com.gogirl.domain.user.customer.Customer; import com.gogirl.domain.user.customer.Customer;
import com.gogirl.infrastructure.common.exception.RRException; import com.gogirl.infrastructure.common.exception.RRException;
import com.gogirl.infrastructure.common.util.CloneUtil; import com.gogirl.infrastructure.common.util.CloneUtil;
import com.gogirl.infrastructure.common.util.DateUtils;
import com.gogirl.infrastructure.common.util.ListUtil; import com.gogirl.infrastructure.common.util.ListUtil;
import com.gogirl.infrastructure.common.util.StringUtils; import com.gogirl.infrastructure.common.util.StringUtils;
import com.gogirl.infrastructure.config.property.GogirlProperties; import com.gogirl.infrastructure.config.property.GogirlProperties;
...@@ -33,6 +34,7 @@ import com.gogirl.infrastructure.mapper.order.serve.ScheduleServeMapper; ...@@ -33,6 +34,7 @@ import com.gogirl.infrastructure.mapper.order.serve.ScheduleServeMapper;
import com.gogirl.infrastructure.mapper.product.purchase.PurchaseSkuMapper; import com.gogirl.infrastructure.mapper.product.purchase.PurchaseSkuMapper;
import com.gogirl.infrastructure.mapper.product.serve.*; import com.gogirl.infrastructure.mapper.product.serve.*;
import com.gogirl.infrastructure.mapper.store.oa.TakeLeaveEventMapper; import com.gogirl.infrastructure.mapper.store.oa.TakeLeaveEventMapper;
import com.gogirl.infrastructure.mapper.store.store.StoreClassesTechnicianMapper;
import com.gogirl.infrastructure.mapper.store.store.StoreManageMapper; import com.gogirl.infrastructure.mapper.store.store.StoreManageMapper;
import com.gogirl.infrastructure.mapper.store.store.StoreTechnicianMapper; import com.gogirl.infrastructure.mapper.store.store.StoreTechnicianMapper;
import com.gogirl.infrastructure.service.push.TechnicianPushService; import com.gogirl.infrastructure.service.push.TechnicianPushService;
...@@ -77,6 +79,8 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -77,6 +79,8 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
private final StoreManageMapper storeManageMapper; private final StoreManageMapper storeManageMapper;
private final OwnProduceMapper ownProduceMapper; private final OwnProduceMapper ownProduceMapper;
private final BaseScheduledTypeMapper baseScheduledTypeMapper; private final BaseScheduledTypeMapper baseScheduledTypeMapper;
private final ProducePromotionTimeMapper producePromotionTimeMapper;
private final StoreClassesTechnicianMapper storeClassesTechnicianMapper;
private final StoreClassesTechnicianService storeClassesTechnicianService; private final StoreClassesTechnicianService storeClassesTechnicianService;
...@@ -99,11 +103,11 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -99,11 +103,11 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
@Override @Override
public List<StoreTechnicianPeriod> queryStoreTechnicianPeriod(Integer scheduledId, public List<StoreTechnicianPeriod> queryStoreTechnicianPeriod(Integer scheduledId,
Integer departmentId, Integer departmentId,
String scheduleDate, String day,
List<Integer> serveIdList) throws ParseException { List<Integer> serveIdList) throws ParseException {
/*1.查询美甲师排班*/ /*1.查询美甲师排班*/
List<StoreClassesTechnician> storeClassesTechnicianList = storeClassesTechnicianService.listClassesTechnician(scheduledId, departmentId, scheduleDate); List<StoreClassesTechnician> storeClassesTechnicianList = storeClassesTechnicianMapper.listClassesTechnician(scheduledId, departmentId, day);
//过滤不能做服务的美甲师 //过滤不能做服务的美甲师
if (ListUtil.isNotEmpty(serveIdList)) { if (ListUtil.isNotEmpty(serveIdList)) {
...@@ -118,9 +122,9 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -118,9 +122,9 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//一天开始的时间 //一天开始的时间
long dayStartTime = simpleDateFormat.parse(scheduleDate + " 00:00:00").getTime(); long dayStartTime = simpleDateFormat.parse(day + " 00:00:00").getTime();
//一天结束的时间 //一天结束的时间
long dayEndTime = simpleDateFormat.parse(scheduleDate + " 23:59:59").getTime(); long dayEndTime = simpleDateFormat.parse(day + " 23:59:59").getTime();
//遍历美甲师排班 获取每个美甲师的不可用时间段 //遍历美甲师排班 获取每个美甲师的不可用时间段
...@@ -133,9 +137,9 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -133,9 +137,9 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
//上班结束时间str //上班结束时间str
String endTime = storeClassesTechnician.getClassesManage().getEndTime().toString(); String endTime = storeClassesTechnician.getClassesManage().getEndTime().toString();
//上班开始时间 //上班开始时间
long workStartTime = simpleDateFormat.parse(scheduleDate + " " + startTime).getTime(); long workStartTime = simpleDateFormat.parse(day + " " + startTime).getTime();
//上班结束时间 //上班结束时间
long workEndTime = simpleDateFormat.parse(scheduleDate + " " + endTime).getTime(); long workEndTime = simpleDateFormat.parse(day + " " + endTime).getTime();
//最晚可预约时间 //最晚可预约时间
String latestScheduledTime = storeClassesTechnician.getClassesManage().getLatestScheduledTime().toString(); String latestScheduledTime = storeClassesTechnician.getClassesManage().getLatestScheduledTime().toString();
...@@ -151,7 +155,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -151,7 +155,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
/*5、如果开启了门店最晚预约时间,最晚可预约时间之后的时间不可用*/ /*5、如果开启了门店最晚预约时间,最晚可预约时间之后的时间不可用*/
if (StringUtils.isNotEmpty(latestScheduledTime) && storeClassesTechnician.getClassesManage().getLatestScheduledTimeEnable() == 1) { if (StringUtils.isNotEmpty(latestScheduledTime) && storeClassesTechnician.getClassesManage().getLatestScheduledTimeEnable() == 1) {
long latestScheduledTimeMills = simpleDateFormat.parse(scheduleDate + " " + latestScheduledTime).getTime(); long latestScheduledTimeMills = simpleDateFormat.parse(day + " " + latestScheduledTime).getTime();
Period latestScheduledTimeMillsPeriod = new Period(latestScheduledTimeMills, dayEndTime); Period latestScheduledTimeMillsPeriod = new Period(latestScheduledTimeMills, dayEndTime);
periodList.add(latestScheduledTimeMillsPeriod); periodList.add(latestScheduledTimeMillsPeriod);
} }
...@@ -186,15 +190,21 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -186,15 +190,21 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
} }
@Override @Override
public List<StoreTechnician> queryLeisureTechnician(Integer departmentId, public List<StoreTechnician> queryAvailableTechnician(Integer departmentId,
Integer serveId, Integer serveId,
LocalDateTime serveStartTime, LocalDateTime serveStartTime,
LocalDateTime serveEndTime) throws ParseException { LocalDateTime serveEndTime) throws ParseException {
//查询店铺的美甲师和美甲师的可用时间
List<StoreTechnicianPeriod> storeTechnicianPeriodList = this.queryStoreTechnicianPeriod(null, departmentId, serveStartTime.toLocalDate().toString(), Lists.newArrayList(serveId)); List<StoreTechnicianPeriod> storeTechnicianPeriodList = this.queryStoreTechnicianPeriod(null, departmentId, serveStartTime.toLocalDate().toString(), Lists.newArrayList(serveId));
//服务占用的时间区间
Period servePeriod = new Period(serveStartTime.toInstant(ZoneOffset.of("+8")).toEpochMilli(), serveEndTime.toInstant(ZoneOffset.of("+8")).toEpochMilli()); Period servePeriod = new Period(serveStartTime.toInstant(ZoneOffset.of("+8")).toEpochMilli(), serveEndTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
List<Integer> technicianIds = storeTechnicianPeriodList.stream().filter(storeTechnicianPeriod -> //过滤返回可用美甲师
!storeTechnicianPeriod.getPeriodList().stream().map(period -> period.conflict(servePeriod)) List<Integer> technicianIds = storeTechnicianPeriodList
.stream()
.filter(storeTechnicianPeriod -> !storeTechnicianPeriod.getPeriodList()
.stream()
.map(period -> period.conflict(servePeriod))
.collect(Collectors.toList()).contains(true)) .collect(Collectors.toList()).contains(true))
.map(StoreTechnicianPeriod::getTechnicianId) .map(StoreTechnicianPeriod::getTechnicianId)
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -204,7 +214,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -204,7 +214,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return Lists.newArrayList(); return Lists.newArrayList();
} }
@Override @Override
public List<IdleTimeDTO> queryIdleTime(IdleTimeQuery qry) throws ParseException, ExecutionException, InterruptedException { public List<IdleTimeDTO> queryIdleTime(IdleTimeQuery qry) throws ParseException, ExecutionException, InterruptedException {
...@@ -463,22 +472,15 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -463,22 +472,15 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
@Override @Override
public List<IdleTimeDTO> queryLeisureTime(Integer departmentId, String scheduleDate) throws ParseException { public List<IdleTimeDTO> queryLeisureTime(Integer departmentId, String scheduleDate) throws ParseException {
//当前周几
int weekday = DateUtils.getWeek(new SimpleDateFormat("yyyy-MM-dd").parse(scheduleDate);
Date today = new SimpleDateFormat("yyyy-MM-dd").parse(scheduleDate); //根据店铺id和周几查询闲时间折扣配置
Calendar c = Calendar.getInstance();
c.setTime(today);
int weekday = c.get(Calendar.DAY_OF_WEEK);
if (weekday == 1) {
weekday = 7;
} else {
weekday = weekday - 1;
}
List<LeisureDiscountConfig> leisureDiscountConfigList = leisureDiscountConfigMapper.selectByDepartmentIdAndWeekIgnoreLimit(departmentId, weekday); List<LeisureDiscountConfig> leisureDiscountConfigList = leisureDiscountConfigMapper.selectByDepartmentIdAndWeekIgnoreLimit(departmentId, weekday);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//闲时预约时间节点
Set<Long> dateTimeListSet = new HashSet<>(); Set<Long> dateTimeListSet = new HashSet<>();
for (LeisureDiscountConfig leisureDiscountConfig : leisureDiscountConfigList) { for (LeisureDiscountConfig leisureDiscountConfig : leisureDiscountConfigList) {
...@@ -492,7 +494,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -492,7 +494,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
} }
} }
List<Long> dateTimeList = new ArrayList<>(dateTimeListSet); List<Long> dateTimeList = new ArrayList<>(dateTimeListSet);
dateTimeList.sort(Comparator.comparing(Long::longValue)); dateTimeList.sort(Comparator.comparing(Long::longValue));
...@@ -502,17 +503,17 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -502,17 +503,17 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return Lists.newArrayList(); return Lists.newArrayList();
} }
//查询店铺美甲师和美甲师不可用时间列表
List<StoreTechnicianPeriod> storeTechnicianPeriodList = this.queryStoreTechnicianPeriod(null, departmentId, scheduleDate, null); List<StoreTechnicianPeriod> storeTechnicianPeriodList = this.queryStoreTechnicianPeriod(null, departmentId, scheduleDate, null);
int finalWeekday = weekday; return dateTimeList.stream()
List<IdleTimeDTO> result = dateTimeList.stream()
.map(dateTime -> { .map(dateTime -> {
IdleTimeDTO idleTimeDTO = new IdleTimeDTO(); IdleTimeDTO idleTimeDTO = new IdleTimeDTO();
idleTimeDTO.setDateTime(dateTime); idleTimeDTO.setDateTime(dateTime);
idleTimeDTO.setTime(new SimpleDateFormat("HH:mm").format(new Date(dateTime))); idleTimeDTO.setTime(new SimpleDateFormat("HH:mm").format(new Date(dateTime)));
List<LeisureTechServe> leisureTechServeList = new ArrayList<>(); List<LeisureTechServe> leisureTechServeList = new ArrayList<>();
List<BaseServe> list = leisureDiscountConfigMapper.selectByDepartmentIdAndWeekAndDateTime(departmentId, finalWeekday, idleTimeDTO.getTime()); List<BaseServe> list = leisureDiscountConfigMapper.selectByDepartmentIdAndWeekAndDateTime(departmentId, weekday, idleTimeDTO.getTime());
storeTechnicianPeriodList.forEach(storeTechnicianPeriod -> { storeTechnicianPeriodList.forEach(storeTechnicianPeriod -> {
List<BaseServe> canScheduledServeList = list.stream() List<BaseServe> canScheduledServeList = list.stream()
.filter(baseServe -> { .filter(baseServe -> {
...@@ -532,7 +533,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -532,7 +533,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return idleTimeDTO; return idleTimeDTO;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
return result;
} }
@Override @Override
...@@ -679,180 +679,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -679,180 +679,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
}); });
} }
private void addLeisureTechServe(List<LeisureTechServe> leisureTechServeList, Integer technicianId, Integer serveId) {
leisureTechServeList.stream()
.filter(leisureTechServe -> leisureTechServe.getServeId().equals(serveId))
.findAny()
.map(leisureTechServe -> leisureTechServe.getTechnicianIdList().add(technicianId))
.orElseGet(() -> {
LeisureTechServe leisureTechServe = new LeisureTechServe();
leisureTechServe.setServeId(serveId);
Set<Integer> set = new HashSet<>();
set.add(technicianId);
leisureTechServe.setTechnicianIdList(set);
leisureTechServeList.add(leisureTechServe);
return null;
});
}
/**
* 店铺短码-服务短码(s)-美甲师短码-时间-4位最大单号
*
* @param departmentId
* @param scheduleId
* @return
*/
private String getOrderNo(Integer departmentId, Integer scheduleId) {
StoreManage storeManage = storeManageMapper.selectById(departmentId);
List<ScheduleServe> scheduleServeList = scheduleServeMapper.selectList(new LambdaQueryWrapper<ScheduleServe>().eq(ScheduleServe::getSchId, scheduleId));
BaseServe baseServe = baseServeMapper.selectById(scheduleServeList.get(0).getServeId());
BaseType baseType = baseTypeService.getById(baseServe.getTypeId());
StoreTechnician storeTechnician = storeTechnicianMapper.selectById(scheduleServeList.get(0).getTechnicianId());
OrderManage latestOfDay = orderManageMapper.latestOfDay();
String latestOfDayString;
//
if (latestOfDay == null) {
latestOfDayString = "0001";
}
//
else {
latestOfDayString = String.format("%04d", Integer.parseInt(latestOfDay.getOrderNo().substring(latestOfDay.getOrderNo().length() - 4)) + 1);
}
//
return (storeManage.getShortCode() == null ? "NNN" : storeManage.getShortCode()) + "-" +
(StringUtils.isEmpty(baseType.getShortCode()) ? "NNN" : baseType.getShortCode()) + "-" +
(StringUtils.isEmpty(storeTechnician.getShortCode()) ? "NNN" : storeTechnician.getShortCode()) + "-" +
new SimpleDateFormat("yyMMdd").format(new Date()) + "-" +
latestOfDayString;
}
private void validSubmit(ScheduleManage scheduleManage) {
/*用户提交 更新预约校验*/
if (SessionUtils.isSourceFromCustomer()) {
if (ListUtil.isEmpty(scheduleManage.getListScheduleServer())) {
throw new RRException("校验失败,请重试");
}
/*1、校验同类型服务一天只能预约一次*/
scheduleManage.getListScheduleServer().forEach(scheduleServe -> {
if (scheduleServe.getMainServeId() == null) {
BaseServe baseServe = baseServeMapper.selectById(scheduleServe.getServeId());
List<ScheduleServe> typeConflictScheduleServe = scheduleServeMapper.selectConflictType(
scheduleManage.getScheduledUser(),
scheduleManage.getArriveTime(),
baseServe.getSchTypeId(),
scheduleManage.getId());
if (ListUtil.isNotEmpty(typeConflictScheduleServe)) {
throw new RRException("同类型服务一天只能预约一次");
}
}
});
try {
/*2、校验提交的预约时间是否可约*/
IdleTimeQuery query = new IdleTimeQuery();
//店铺id
query.setDepartmentId(scheduleManage.getDepartmentId());
//预约日期
query.setScheduleDate(new SimpleDateFormat("yyyy-MM-dd").format(scheduleManage.getArriveTime()));
query.setListScheduleServer(scheduleManage.getListScheduleServer()
.stream()
.map(scheduleServeCommand -> {
ScheduleServeQuery scheduleServe = new ScheduleServeQuery();
//时长
scheduleServe.setLengthTimeForEndTime(scheduleServeCommand.getLengthTime());
//款式id
scheduleServe.setProduceId(scheduleServeCommand.getProduceId());
//服务id
scheduleServe.setServeId(scheduleServeCommand.getServeId());
return scheduleServe;
})
.collect(Collectors.toList()));
//是否显示详情
query.setShowNodeDetail(true);
//查询时间节点
query.setDateTimeList(Lists.newArrayList(scheduleManage.getArriveTime().getTime()));
//
query.setId(scheduleManage.getId());
//查询方案树
List<IdleTimeDTO> idleTimeDTOList = this.queryIdleTime(query);
//如果时间节点不可用返回false
IdleTimeDTO idleTimeDTO = idleTimeDTOList.stream().findAny().orElseThrow(NullPointerException::new);
if (!idleTimeDTO.isStatus()) {
throw new RRException("预约时间已过期");
}
} catch (RRException e) {
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
//新增预约 修改预约时 校验自带款式是否设置
if (SessionUtils.isSourceFromTechnician()) {
scheduleManage.getListScheduleServer().forEach(
scheduleServe -> {
if (scheduleServe.getIsOwnProduce() == 1 && scheduleServe.getOwnProduceId() == null) {
throw new RRException("请补全自带款式");
}
}
);
}
}
/**
* ScheduleManageServiceImpl
* 通过ScheduleServe构建TreeProgram
*
* @param scheduleServe
* @return
*/
private final TreeProgram getNode(ScheduleServe scheduleServe) {
TreeProgram node = new TreeProgram();
StoreTechnicianPeriod storeTechnicianPeriod = new StoreTechnicianPeriod();
storeTechnicianPeriod.setTechnicianId(scheduleServe.getTechnicianId());
node.setStoreTechnicianDTO(storeTechnicianPeriod);
ScheduleServeQuery scheduleServeQuery = new ScheduleServeQuery();
scheduleServeQuery.setServeId(scheduleServe.getServeId());
scheduleServeQuery.setProduceId(scheduleServe.getProduceId());
scheduleServeQuery.setLengthTimeForEndTime(scheduleServe.getLengthTimeForEndTime());
Period period = new Period(scheduleServe.getStartTime(), scheduleServe.getEndTime());
scheduleServeQuery.setPeriod(period);
node.setScheduleServeQuery(scheduleServeQuery);
return node;
}
private String getScheduleNo(Integer debarmentId) {
//调用店铺服务根据id查询店铺
StoreManage storeManage = storeManageMapper.selectById(debarmentId);
//生成预约单号
String shortCode = storeManage.getShortCode();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd");
String day = simpleDateFormat.format(new Date());
String lastOfDayString;
ScheduleManage lastOfDay = scheduleManageMapper.lastOfDay();
//第一单
if (lastOfDay == null) {
lastOfDayString = "0001";
}
//累加
else {
lastOfDayString = String.format("%04d", (Integer.parseInt(lastOfDay.getScheduledNo().substring(lastOfDay.getScheduledNo().length() - 4)) + 1));
}
return shortCode + day + lastOfDayString;
}
@Override @Override
public void submitSchedule(SubmitScheduleCommand cmd) { public void submitSchedule(SubmitScheduleCommand cmd) {
...@@ -916,14 +742,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -916,14 +742,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
insertScheduleServeList.forEach(scheduleServeMapper::insert); insertScheduleServeList.forEach(scheduleServeMapper::insert);
updateScheduleServeList.forEach(scheduleServeMapper::updateById); updateScheduleServeList.forEach(scheduleServeMapper::updateById);
// //数据库死锁
// scheduleServeList.forEach(scheduleServe -> {
// if (scheduleServe.getId() != null) {
// scheduleServeMapper.updateById(scheduleServe);
// } else {
// scheduleServeMapper.insert(scheduleServe);
// }
// });
List<Integer> removeIds = oldScheduleServeIds.stream().filter(id -> !scheduleServeList.stream().map(ScheduleServe::getId).collect(Collectors.toList()).contains(id)).collect(Collectors.toList()); List<Integer> removeIds = oldScheduleServeIds.stream().filter(id -> !scheduleServeList.stream().map(ScheduleServe::getId).collect(Collectors.toList()).contains(id)).collect(Collectors.toList());
if (ListUtil.isNotEmpty(removeIds)) { if (ListUtil.isNotEmpty(removeIds)) {
scheduleServeMapper.deleteBatchIds(removeIds); scheduleServeMapper.deleteBatchIds(removeIds);
...@@ -1128,9 +947,12 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -1128,9 +947,12 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
query.setLatitude(23.14084243774414); query.setLatitude(23.14084243774414);
} }
/*1、查询闲时折扣*/
IPage<LeisureScheduleServeResp> page = new Page<>(query.getPageNum(), query.getPageSize()); IPage<LeisureScheduleServeResp> page = new Page<>(query.getPageNum(), query.getPageSize());
page = scheduleManageMapper.queryPageLeisureScheduleServe(page, query.getLatitude(), query.getLongitude()); page = scheduleManageMapper.queryPageLeisureScheduleServe(page, query.getLatitude(), query.getLongitude());
/*算距离*/
page.getRecords().forEach(leisureScheduleServeResp -> { page.getRecords().forEach(leisureScheduleServeResp -> {
leisureScheduleServeResp.setDistance(MapDistanceUtils.getDistance(query.getLatitude().toString(), leisureScheduleServeResp.setDistance(MapDistanceUtils.getDistance(query.getLatitude().toString(),
query.getLongitude().toString(), query.getLongitude().toString(),
...@@ -1153,15 +975,23 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -1153,15 +975,23 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return page; return page;
} }
/**
* 查询闲时可以做服务的美甲师
*
* @param leisureScheduleServeResp
* @return
* @throws ParseException
*/
private List<StoreTechnician> queryLeisureTechnician(LeisureScheduleServeResp leisureScheduleServeResp) throws ParseException { private List<StoreTechnician> queryLeisureTechnician(LeisureScheduleServeResp leisureScheduleServeResp) throws ParseException {
//闲时服务
BaseServe baseServe = baseServeMapper.selectById(leisureScheduleServeResp.getServeId()); BaseServe baseServe = baseServeMapper.selectById(leisureScheduleServeResp.getServeId());
//服务开始时间
LocalDateTime startTime = leisureScheduleServeResp.getDateTime(); LocalDateTime startTime = leisureScheduleServeResp.getDateTime();
//服务结束时间
LocalDateTime endTime = startTime.plusMinutes(baseServe.getServiceDuration()).plusMinutes(60); LocalDateTime endTime = startTime.plusMinutes(baseServe.getServiceDuration()).plusMinutes(60);
return this.queryLeisureTechnician(leisureScheduleServeResp.getDepartmentId(), baseServe.getId(), startTime, endTime); return this.queryAvailableTechnician(leisureScheduleServeResp.getDepartmentId(), baseServe.getId(), startTime, endTime);
} }
private final ProducePromotionTimeMapper producePromotionTimeMapper;
/** /**
* 参数补全 * 参数补全
* *
...@@ -1641,4 +1471,155 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -1641,4 +1471,155 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
} }
return 3; return 3;
} }
private void addLeisureTechServe(List<LeisureTechServe> leisureTechServeList, Integer technicianId, Integer serveId) {
leisureTechServeList.stream()
.filter(leisureTechServe -> leisureTechServe.getServeId().equals(serveId))
.findAny()
.map(leisureTechServe -> leisureTechServe.getTechnicianIdList().add(technicianId))
.orElseGet(() -> {
LeisureTechServe leisureTechServe = new LeisureTechServe();
leisureTechServe.setServeId(serveId);
Set<Integer> set = new HashSet<>();
set.add(technicianId);
leisureTechServe.setTechnicianIdList(set);
leisureTechServeList.add(leisureTechServe);
return null;
});
}
/**
* 店铺短码-服务短码(s)-美甲师短码-时间-4位最大单号
*
* @param departmentId
* @param scheduleId
* @return
*/
private String getOrderNo(Integer departmentId, Integer scheduleId) {
StoreManage storeManage = storeManageMapper.selectById(departmentId);
List<ScheduleServe> scheduleServeList = scheduleServeMapper.selectList(new LambdaQueryWrapper<ScheduleServe>().eq(ScheduleServe::getSchId, scheduleId));
BaseServe baseServe = baseServeMapper.selectById(scheduleServeList.get(0).getServeId());
BaseType baseType = baseTypeService.getById(baseServe.getTypeId());
StoreTechnician storeTechnician = storeTechnicianMapper.selectById(scheduleServeList.get(0).getTechnicianId());
OrderManage latestOfDay = orderManageMapper.latestOfDay();
String latestOfDayString;
//
if (latestOfDay == null) {
latestOfDayString = "0001";
}
//
else {
latestOfDayString = String.format("%04d", Integer.parseInt(latestOfDay.getOrderNo().substring(latestOfDay.getOrderNo().length() - 4)) + 1);
}
//
return (storeManage.getShortCode() == null ? "NNN" : storeManage.getShortCode()) + "-" +
(StringUtils.isEmpty(baseType.getShortCode()) ? "NNN" : baseType.getShortCode()) + "-" +
(StringUtils.isEmpty(storeTechnician.getShortCode()) ? "NNN" : storeTechnician.getShortCode()) + "-" +
new SimpleDateFormat("yyMMdd").format(new Date()) + "-" +
latestOfDayString;
}
private void validSubmit(ScheduleManage scheduleManage) {
/*用户提交 更新预约校验*/
if (SessionUtils.isSourceFromCustomer()) {
if (ListUtil.isEmpty(scheduleManage.getListScheduleServer())) {
throw new RRException("校验失败,请重试");
}
/*1、校验同类型服务一天只能预约一次*/
scheduleManage.getListScheduleServer().forEach(scheduleServe -> {
if (scheduleServe.getMainServeId() == null) {
BaseServe baseServe = baseServeMapper.selectById(scheduleServe.getServeId());
List<ScheduleServe> typeConflictScheduleServe = scheduleServeMapper.selectConflictType(
scheduleManage.getScheduledUser(),
scheduleManage.getArriveTime(),
baseServe.getSchTypeId(),
scheduleManage.getId());
if (ListUtil.isNotEmpty(typeConflictScheduleServe)) {
throw new RRException("同类型服务一天只能预约一次");
}
}
});
try {
/*2、校验提交的预约时间是否可约*/
IdleTimeQuery query = new IdleTimeQuery();
//店铺id
query.setDepartmentId(scheduleManage.getDepartmentId());
//预约日期
query.setScheduleDate(new SimpleDateFormat("yyyy-MM-dd").format(scheduleManage.getArriveTime()));
query.setListScheduleServer(scheduleManage.getListScheduleServer()
.stream()
.map(scheduleServeCommand -> {
ScheduleServeQuery scheduleServe = new ScheduleServeQuery();
//时长
scheduleServe.setLengthTimeForEndTime(scheduleServeCommand.getLengthTime());
//款式id
scheduleServe.setProduceId(scheduleServeCommand.getProduceId());
//服务id
scheduleServe.setServeId(scheduleServeCommand.getServeId());
return scheduleServe;
})
.collect(Collectors.toList()));
//是否显示详情
query.setShowNodeDetail(true);
//查询时间节点
query.setDateTimeList(Lists.newArrayList(scheduleManage.getArriveTime().getTime()));
//
query.setId(scheduleManage.getId());
//查询方案树
List<IdleTimeDTO> idleTimeDTOList = this.queryIdleTime(query);
//如果时间节点不可用返回false
IdleTimeDTO idleTimeDTO = idleTimeDTOList.stream().findAny().orElseThrow(NullPointerException::new);
if (!idleTimeDTO.isStatus()) {
throw new RRException("预约时间已过期");
}
} catch (RRException e) {
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
//新增预约 修改预约时 校验自带款式是否设置
if (SessionUtils.isSourceFromTechnician()) {
scheduleManage.getListScheduleServer().forEach(
scheduleServe -> {
if (scheduleServe.getIsOwnProduce() == 1 && scheduleServe.getOwnProduceId() == null) {
throw new RRException("请补全自带款式");
}
}
);
}
}
private String getScheduleNo(Integer debarmentId) {
//调用店铺服务根据id查询店铺
StoreManage storeManage = storeManageMapper.selectById(debarmentId);
//生成预约单号
String shortCode = storeManage.getShortCode();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd");
String day = simpleDateFormat.format(new Date());
String lastOfDayString;
ScheduleManage lastOfDay = scheduleManageMapper.lastOfDay();
//第一单
if (lastOfDay == null) {
lastOfDayString = "0001";
}
//累加
else {
lastOfDayString = String.format("%04d", (Integer.parseInt(lastOfDay.getScheduledNo().substring(lastOfDay.getScheduledNo().length() - 4)) + 1));
}
return shortCode + day + lastOfDayString;
}
} }
...@@ -13,15 +13,6 @@ import java.util.List; ...@@ -13,15 +13,6 @@ import java.util.List;
public interface StoreClassesTechnicianService extends IService<StoreClassesTechnician> { public interface StoreClassesTechnicianService extends IService<StoreClassesTechnician> {
/**
* 查询美甲师排班表
*
* @param scheduledId 预约id
* @param departmentId 店铺id
* @param days day like '2020-02-02'
* @return
*/
List<StoreClassesTechnician> listClassesTechnician(Integer scheduledId, Integer departmentId, String days);
/** /**
......
...@@ -10,7 +10,6 @@ public interface StoreTechnicianService extends IService<StoreTechnician> { ...@@ -10,7 +10,6 @@ public interface StoreTechnicianService extends IService<StoreTechnician> {
List<StoreTechnician> listTechnicianForPage(StoreTechnician technicianManage); List<StoreTechnician> listTechnicianForPage(StoreTechnician technicianManage);
/** /**
* 美甲师登陆 * 美甲师登陆
* *
......
...@@ -44,10 +44,6 @@ public class StoreClassesTechnicianServiceImpl extends ServiceImpl<StoreClassesT ...@@ -44,10 +44,6 @@ public class StoreClassesTechnicianServiceImpl extends ServiceImpl<StoreClassesT
private final GogirlTokenService gogirlTokenService; private final GogirlTokenService gogirlTokenService;
@Override
public List<StoreClassesTechnician> listClassesTechnician(Integer scheduledId, Integer departmentId, String days) {
return storeClassesTechnicianMapper.listClassesTechnician(scheduledId, departmentId, days);
}
@Override @Override
public List<StoreClassesTechnician> listClassesTechnicianDetail(Integer userId, String days) { public List<StoreClassesTechnician> listClassesTechnicianDetail(Integer userId, String days) {
...@@ -165,9 +161,5 @@ public class StoreClassesTechnicianServiceImpl extends ServiceImpl<StoreClassesT ...@@ -165,9 +161,5 @@ public class StoreClassesTechnicianServiceImpl extends ServiceImpl<StoreClassesT
private final StoreTechnicianMapper storeTechnicianMapper; private final StoreTechnicianMapper storeTechnicianMapper;
// @Override
// public List<StoreTechnician> queryDayTechnicianClassesList(Integer departmentId, Date day) {
// return ;
// }
} }
...@@ -3,7 +3,6 @@ package com.gogirl.application.store.store.impl; ...@@ -3,7 +3,6 @@ package com.gogirl.application.store.store.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gogirl.application.order.serve.OrderManageService;
import com.gogirl.application.store.store.StoreTechnicianService; import com.gogirl.application.store.store.StoreTechnicianService;
import com.gogirl.application.xcx.GogirlTokenService; import com.gogirl.application.xcx.GogirlTokenService;
import com.gogirl.application.xcx.WechatService; import com.gogirl.application.xcx.WechatService;
...@@ -37,7 +36,6 @@ public class StoreTechnicianServiceImpl extends ServiceImpl<StoreTechnicianMappe ...@@ -37,7 +36,6 @@ public class StoreTechnicianServiceImpl extends ServiceImpl<StoreTechnicianMappe
private final GogirlTokenService gogirlTokenService; private final GogirlTokenService gogirlTokenService;
private final StoreManageMapper storeManageMapper; private final StoreManageMapper storeManageMapper;
private final OrderManageService orderManageService;
@Override @Override
public List<StoreTechnician> listTechnicianForPage(StoreTechnician technicianManage) { public List<StoreTechnician> listTechnicianForPage(StoreTechnician technicianManage) {
......
...@@ -14,9 +14,6 @@ import lombok.Data; ...@@ -14,9 +14,6 @@ import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/**
* Created by yinyong on 2018/9/20.
*/
@ApiModel("每天排班记录") @ApiModel("每天排班记录")
@TableName("store_classes_technician") @TableName("store_classes_technician")
@Builder @Builder
...@@ -36,18 +33,22 @@ public class StoreClassesTechnician { ...@@ -36,18 +33,22 @@ public class StoreClassesTechnician {
@ApiModelProperty("班次id") @ApiModelProperty("班次id")
private Integer classes; private Integer classes;
@ApiModelProperty("")
private Integer status; private Integer status;
/** /**
* 非数据库id * 非数据库字段
*/ */
@ApiModelProperty("班次")
@TableField(exist = false) @TableField(exist = false)
private StoreClasses classesManage; private StoreClasses classesManage;
@ApiModelProperty("美甲师")
@TableField(exist = false) @TableField(exist = false)
private StoreTechnician technicianManage; private StoreTechnician technicianManage;
@ApiModelProperty("美甲师正在做的服务")
@TableField(exist = false) @TableField(exist = false)
private List<ScheduleServe> listScheduleServe; private List<ScheduleServe> listScheduleServe;
} }
...@@ -70,8 +70,7 @@ public class ScheduleManageController { ...@@ -70,8 +70,7 @@ public class ScheduleManageController {
@ApiOperation(value = "查询显示预约时间列表") @ApiOperation(value = "查询显示预约时间列表")
@GetMapping("/customer/schedule/queryLeisureTime") @GetMapping("/customer/schedule/queryLeisureTime")
public JsonResult<List<IdleTimeDTO>> queryLeisureTime(@RequestHeader String token, public JsonResult<List<IdleTimeDTO>> queryLeisureTime(@RequestParam Integer departmentId,
@RequestParam Integer departmentId,
@RequestParam String scheduleDate) throws ParseException { @RequestParam String scheduleDate) throws ParseException {
List<IdleTimeDTO> idleTimeDTOList = scheduleManageService.queryLeisureTime(departmentId, scheduleDate); List<IdleTimeDTO> idleTimeDTOList = scheduleManageService.queryLeisureTime(departmentId, scheduleDate);
return JsonResult.success(idleTimeDTOList); return JsonResult.success(idleTimeDTOList);
...@@ -244,8 +243,7 @@ public class ScheduleManageController { ...@@ -244,8 +243,7 @@ public class ScheduleManageController {
@ApiOperation("更新预约服务状态") @ApiOperation("更新预约服务状态")
@GetMapping("/technician/schedule/updateScheduledServeStatus") @GetMapping("/technician/schedule/updateScheduledServeStatus")
public JsonResult<Void> updateScheduledServeStatus(@RequestHeader String token, public JsonResult<Void> updateScheduledServeStatus(@RequestParam Integer scheduleServeId,
@RequestParam Integer scheduleServeId,
@RequestParam Integer status, @RequestParam Integer status,
@RequestParam Integer forceLeisureConfig) { @RequestParam Integer forceLeisureConfig) {
ScheduleServe scheduleServe = scheduleServeService.getById(scheduleServeId); ScheduleServe scheduleServe = scheduleServeService.getById(scheduleServeId);
...@@ -266,8 +264,7 @@ public class ScheduleManageController { ...@@ -266,8 +264,7 @@ public class ScheduleManageController {
@ApiOperation("当前服务是否在闲时间范围内 1-是 2-否") @ApiOperation("当前服务是否在闲时间范围内 1-是 2-否")
@GetMapping("/technician/schedule/getScheduledServeLeisure") @GetMapping("/technician/schedule/getScheduledServeLeisure")
public JsonResult<Integer> getScheduledServeLeisure(@RequestHeader String token, public JsonResult<Integer> getScheduledServeLeisure(@RequestParam Integer scheduleServeId) {
@RequestParam Integer scheduleServeId) {
Integer result = scheduleManageService.getScheduledServeLeisure(scheduleServeId); Integer result = scheduleManageService.getScheduledServeLeisure(scheduleServeId);
return JsonResult.success(result); return JsonResult.success(result);
} }
...@@ -284,7 +281,7 @@ public class ScheduleManageController { ...@@ -284,7 +281,7 @@ public class ScheduleManageController {
@ApiOperation("查询闲时美甲师") @ApiOperation("查询闲时美甲师")
@PostMapping("/customer/queryLeisureTechnician") @PostMapping("/customer/queryLeisureTechnician")
public JsonResult<StoreTechnician> queryLeisureTechnician(@RequestBody QueryLeisureTechnicianReq req) throws ParseException { public JsonResult<StoreTechnician> queryLeisureTechnician(@RequestBody QueryLeisureTechnicianReq req) throws ParseException {
scheduleManageService.queryLeisureTechnician(req.getDepartmentId(), req.getServeId(), req.getStartTime(), req.getEndTime()); scheduleManageService.queryAvailableTechnician(req.getDepartmentId(), req.getServeId(), req.getStartTime(), req.getEndTime());
return JsonResult.success(); return JsonResult.success();
} }
} }
...@@ -36,6 +36,9 @@ public class StoreTechnicianPeriod implements Serializable { ...@@ -36,6 +36,9 @@ public class StoreTechnicianPeriod implements Serializable {
*/ */
private String grade; private String grade;
@JsonIgnore
private StoreTechnician storeTechnician;
public StoreTechnicianPeriod() { public StoreTechnicianPeriod() {
} }
...@@ -47,6 +50,7 @@ public class StoreTechnicianPeriod implements Serializable { ...@@ -47,6 +50,7 @@ public class StoreTechnicianPeriod implements Serializable {
this.name = storeTechnician.getName(); this.name = storeTechnician.getName();
this.picturePath = storeTechnician.getPicturePath(); this.picturePath = storeTechnician.getPicturePath();
this.grade = storeTechnician.getGrade(); this.grade = storeTechnician.getGrade();
this.storeTechnician = storeTechnician
} }
} }
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