Commit ce6f0b20 by huluobin

闲时折扣

parent 78d8b38c
package com.gogirl.application.market.discount;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gogirl.domain.market.discount.LeisureDiscountConfigLimit;
/**
* <p>
* 服务类
* </p>
*
* @author robbendev
* @since 2020-07-06
*/
public interface ILeisureDiscountConfigLimitService extends IService<LeisureDiscountConfigLimit> {
}
package com.gogirl.application.market.discount.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gogirl.application.market.discount.ILeisureDiscountConfigLimitService;
import com.gogirl.domain.market.discount.LeisureDiscountConfigLimit;
import com.gogirl.infrastructure.mapper.market.discount.LeisureDiscountConfigLimitMapper;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author robbendev
* @since 2020-07-06
*/
@Service
public class LeisureDiscountConfigLimitServiceImpl extends ServiceImpl<LeisureDiscountConfigLimitMapper, LeisureDiscountConfigLimit> implements ILeisureDiscountConfigLimitService {
}
......@@ -4,7 +4,6 @@ package com.gogirl.application.order.serve;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gogirl.domain.order.serve.ScheduleManage;
import com.gogirl.domain.order.serve.ScheduleServe;
import com.gogirl.domain.store.store.StoreTechnician;
import com.gogirl.shared.order.*;
import com.gogirl.shared.product.LeisureScheduleServeQuery;
......@@ -33,15 +32,6 @@ public interface ScheduleManageService extends IService<ScheduleManage> {
*/
List<IdleTimeDTO> queryIdleTime(IdleTimeQuery query) throws ParseException, ExecutionException, InterruptedException;
/**
* 闲时入口查询预约时间
*
* @param departmentId 店铺id
* @param scheduleDate 预约时间
* @return list
* @throws ParseException exception
*/
List<IdleTimeDTO> queryLeisureTime(Integer departmentId, String scheduleDate) throws ParseException;
/**
* 取消预约
......@@ -50,16 +40,6 @@ public interface ScheduleManageService extends IService<ScheduleManage> {
*/
void cancelSchedule(CancelScheduleCommand cmd);
/**
* 不知道
*
* @param startDateTime 开始时间
* @param endDateTime 结束时间
* @param departmentId 店铺id
* @param orderId 订单id
* @return list
*/
List<ScheduleServe> listScheduleServeNotContainOrderId(String startDateTime, String endDateTime, Integer departmentId, Integer orderId);
/**
* 更新预约状态
......
......@@ -22,7 +22,6 @@ import com.gogirl.domain.store.store.StoreTechnician;
import com.gogirl.domain.user.customer.Customer;
import com.gogirl.infrastructure.common.exception.RRException;
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.StringUtils;
import com.gogirl.infrastructure.config.property.GogirlProperties;
......@@ -470,72 +469,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
}
@Override
public List<IdleTimeDTO> queryLeisureTime(Integer departmentId, String scheduleDate) throws ParseException {
//当前周几
int weekday = DateUtils.getWeek(new SimpleDateFormat("yyyy-MM-dd").parse(scheduleDate);
//根据店铺id和周几查询闲时间折扣配置
List<LeisureDiscountConfig> leisureDiscountConfigList = leisureDiscountConfigMapper.selectByDepartmentIdAndWeekIgnoreLimit(departmentId, weekday);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//闲时预约时间节点
Set<Long> dateTimeListSet = new HashSet<>();
for (LeisureDiscountConfig leisureDiscountConfig : leisureDiscountConfigList) {
long startTime = simpleDateFormat.parse(scheduleDate + " " + leisureDiscountConfig.getStartTime().toString()).getTime();
long endTime = simpleDateFormat.parse(scheduleDate + " " + leisureDiscountConfig.getEndTime().toString()).getTime();
while (startTime <= endTime) {
dateTimeListSet.add(startTime);
startTime = startTime + 15 * 60000;
}
}
List<Long> dateTimeList = new ArrayList<>(dateTimeListSet);
dateTimeList.sort(Comparator.comparing(Long::longValue));
//查询显示折扣对应的时间最短的服务shortestServe
List<BaseServe> baseServeList = leisureDiscountConfigMapper.selectByDepartmentId(departmentId, weekday);
if (ListUtil.isEmpty(baseServeList)) {
return Lists.newArrayList();
}
//查询店铺美甲师和美甲师不可用时间列表
List<StoreTechnicianPeriod> storeTechnicianPeriodList = this.queryStoreTechnicianPeriod(null, departmentId, scheduleDate, null);
return dateTimeList.stream()
.map(dateTime -> {
IdleTimeDTO idleTimeDTO = new IdleTimeDTO();
idleTimeDTO.setDateTime(dateTime);
idleTimeDTO.setTime(new SimpleDateFormat("HH:mm").format(new Date(dateTime)));
List<LeisureTechServe> leisureTechServeList = new ArrayList<>();
List<BaseServe> list = leisureDiscountConfigMapper.selectByDepartmentIdAndWeekAndDateTime(departmentId, weekday, idleTimeDTO.getTime());
storeTechnicianPeriodList.forEach(storeTechnicianPeriod -> {
List<BaseServe> canScheduledServeList = list.stream()
.filter(baseServe -> {
Period servePeriod = new Period(dateTime, dateTime + baseServe.getServiceDuration() * 60L * 1000);
//如果和美甲师空闲列表冲突 返回false过滤
boolean b = storeTechnicianPeriod.getPeriodList().stream().map(period -> period.conflict(servePeriod)).collect(Collectors.toList()).contains(true);
return !b;
})
.collect(Collectors.toList());
canScheduledServeList.forEach(canScheduledServe -> {
this.addLeisureTechServe(leisureTechServeList, storeTechnicianPeriod.getTechnicianId(), canScheduledServe.getId());
});
});
idleTimeDTO.setIsLeisureDiscount(1);
idleTimeDTO.setLeisureTechServeList(leisureTechServeList);
idleTimeDTO.setStatus(ListUtil.isNotEmpty(leisureTechServeList));
return idleTimeDTO;
})
.collect(Collectors.toList());
}
@Override
public void cancelSchedule(CancelScheduleCommand cmd) {
ScheduleManage scheduleManage = scheduleManageMapper.selectById(cmd.getScheduleId());
......@@ -563,11 +496,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
}
@Override
public List<ScheduleServe> listScheduleServeNotContainOrderId(String startDateTime, String endDateTime, Integer departmentId, Integer orderId) {
return scheduleManageMapper.listScheduleServeNotContainOrderId(startDateTime, endDateTime, departmentId, orderId);
}
@Override
public void updateScheduledServeStatus(Integer scheduleServeId, Integer status, Integer forceLeisureConfig) {
/*1、校验*/
ScheduleServe scheduleServe = scheduleServeMapper.selectById(scheduleServeId);
......@@ -810,7 +738,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
List<StoreClassesTechnician> listClassesTechnician = storeClassesTechnicianService.getReservableTime(startDate, startTime, departmentId);
//获取已经被预约的数量,不包括当前订单
List<ScheduleServe> listScheduleServe;
listScheduleServe = this.listScheduleServeNotContainOrderId(startDateTime, endDateTime, departmentId, orderId);
listScheduleServe = scheduleManageMapper.listScheduleServeNotContainOrderId(startDateTime, endDateTime, departmentId, orderId);
if (listClassesTechnician.size() > listScheduleServe.size()) {
statusMap.put("status", true);
statusMap.put("time", startTime);
......
package com.gogirl.domain.market.discount;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020-07-06
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="LeisureDiscountConfigLimit对象", description="")
public class LeisureDiscountConfigLimit implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "日期")
private LocalDateTime date;
@ApiModelProperty(value = "闲时折扣id")
private Integer leisureDiscountConfigId;
@ApiModelProperty(value = "限制数量")
private Integer limit;
@ApiModelProperty(value = "剩余次数")
private Integer leftTimes;
}
package com.gogirl.infrastructure.mapper.market.discount;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gogirl.domain.market.discount.LeisureDiscountConfigLimit;
/**
* <p>
* Mapper 接口
* </p>
*
* @author robbendev
* @since 2020-07-06
*/
public interface LeisureDiscountConfigLimitMapper extends BaseMapper<LeisureDiscountConfigLimit> {
void syncWeekConfigLimit()
}
package com.gogirl.interfaces.market.discount;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author robbendev
* @since 2020-07-06
*/
@RestController
@RequestMapping("/leisure-discount-config-limit")
public class LeisureDiscountConfigLimitController {
}
......@@ -67,14 +67,7 @@ public class ScheduleManageController {
return JsonResult.success(idleTimeDTOList);
}
@ApiOperation(value = "查询显示预约时间列表")
@GetMapping("/customer/schedule/queryLeisureTime")
public JsonResult<List<IdleTimeDTO>> queryLeisureTime(@RequestParam Integer departmentId,
@RequestParam String scheduleDate) throws ParseException {
List<IdleTimeDTO> idleTimeDTOList = scheduleManageService.queryLeisureTime(departmentId, scheduleDate);
return JsonResult.success(idleTimeDTOList);
}
@ApiOperation("提交预约")
@PostMapping("/customer/schedule/submitSchedule")
......
......@@ -50,7 +50,7 @@ public class StoreTechnicianPeriod implements Serializable {
this.name = storeTechnician.getName();
this.picturePath = storeTechnician.getPicturePath();
this.grade = storeTechnician.getGrade();
this.storeTechnician = storeTechnician
this.storeTechnician = storeTechnician;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gogirl.infrastructure.mapper.market.discount.LeisureDiscountConfigLimitMapper">
<insert id="syncWeekConfigLimit">
INSERT into leisure_discount_config_limit (date, leisure_discount_config_id, `limit`, left_times)
SELECT week_date date, t3.id leisure_discount_config_id, t3.`limit`, t3.`limit` left_times
from (SELECT * from week_config ORDER BY week_date desc LIMIT 1) t1
LEFT JOIN leisure_discount_config_week t2 on t1.`week` = t2.`week`
LEFT JOIN leisure_discount_config t3 on t2.leisure_discount_config_id = t3.id
where t3.id is not null
</insert>
</mapper>
......@@ -12,7 +12,7 @@
select t1.*
from mall_order_technician t1
left join mall_order t2 on t1.mall_order_id = t2.id
where t1.technician_id = #{param}
where t1.technician_id = #{param.technician}
and t2.status = 4
and FROM_UNIXTIME(t2.create_time / 1000, '%Y-%m') = #{param.date}
</select>
......
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