package com.ltkj.web.controller.mall; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ltkj.common.utils.DateUtils; import com.ltkj.system.service.ISysConfigService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.ltkj.common.annotation.Log; import com.ltkj.common.core.controller.BaseController; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.enums.BusinessType; import com.ltkj.mall.domain.MallTimeConfig; import com.ltkj.mall.service.IMallTimeConfigService; import com.ltkj.common.utils.poi.ExcelUtil; import com.ltkj.common.core.page.TableDataInfo; /** * 预约时间Controller * * @author ltkj_赵佳豪&李格 * @date 2023-07-18 */ @RestController @RequestMapping("/mall/timeConfig") public class MallTimeConfigController extends BaseController { @Autowired private IMallTimeConfigService mallTimeConfigService; @Autowired private ISysConfigService configService; // /** // * 小程序查询预约时间近几天 // */ // @GetMapping("/listByDay") // public AjaxResult listByDay() { // String wx_yy_days = configService.selectConfigByKey("wx_yy_days"); // int day = Integer.parseInt(wx_yy_days); // // LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); // wq.orderByDesc(MallTimeConfig::getTime); // wq.gt(MallTimeConfig::getTime, new Date()); // List list = mallTimeConfigService.list(wq); // if (list == null) { // return AjaxResult.success(list); // } // if (list.size() < day) { // return AjaxResult.success(list); // } // final List mallTimeConfigs = list.subList(0, day); // //final List collect = list.stream().sorted().limit(day).collect(Collectors.toList()); // return AjaxResult.success(mallTimeConfigs); // } /** * 查询预约时间是否存在 */ @GetMapping("/isExist") public AjaxResult isExist(@RequestParam String time) { if (time != null) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(MallTimeConfig::getTime, time); List list = mallTimeConfigService.list(wq); if (list != null && list.size() > 0) { return AjaxResult.success(1); } else { return AjaxResult.success(0); } } return AjaxResult.error("出错了,请联系工作人员!"); } /** * 查询预约时间列表 */ @PreAuthorize("@ss.hasPermi('mall:timeConfig:list')") @GetMapping("/list") public TableDataInfo list(MallTimeConfig mallTimeConfig) { startPage(); List list = mallTimeConfigService.selectMallTimeConfigList(mallTimeConfig); return getDataTable(list); } /** * 导出预约时间列表 */ @PreAuthorize("@ss.hasPermi('mall:timeConfig:export')") @Log(title = "预约时间", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, MallTimeConfig mallTimeConfig) { List list = mallTimeConfigService.selectMallTimeConfigList(mallTimeConfig); ExcelUtil util = new ExcelUtil(MallTimeConfig.class); util.exportExcel(response, list, "预约时间数据"); } /** * 获取预约时间详细信息 */ @PreAuthorize("@ss.hasPermi('mall:timeConfig:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { return success(mallTimeConfigService.selectMallTimeConfigById(id)); } /** * 返回当前表中最大时间 */ @GetMapping("/returnLastTime") public AjaxResult returnLastTime() { final MallTimeConfig one = mallTimeConfigService.getOne(new LambdaQueryWrapper().orderByDesc(MallTimeConfig::getTime).last("limit 1")); //A.after(B) A>B返回True if (one != null && one.getTime().after(new Date())) { Calendar calendar = Calendar.getInstance(); calendar.setTime(one.getTime()); calendar.add(Calendar.DATE, 1); Date nextDate = calendar.getTime(); return AjaxResult.success(nextDate); //A.before(B) A dates = findEveryDay(mallTimeConfig.getStartTime(), mallTimeConfig.getEndTime()); for (String date : dates) { mallTimeConfig.setTime(DateUtils.parseDate(date)); mallTimeConfigService.insertMallTimeConfig(mallTimeConfig); } return AjaxResult.success("添加成功"); } catch (ParseException e) { e.printStackTrace(); } return AjaxResult.error("添加失败!"); } /** * 传入两个时间范围,返回这两个时间范围内的所有日期,并保存在一个集合中 * * @param beginTime * @param endTime */ public static List findEveryDay(String beginTime, String endTime) throws ParseException { //1.创建一个放所有日期的集合 List dates = new ArrayList(); //2.创建时间解析对象规定解析格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //3.将传入的时间解析成Date类型,相当于格式化 Date dBegin = sdf.parse(beginTime); Date dEnd = sdf.parse(endTime); //4.将格式化后的第一天添加进集合 dates.add(sdf.format(dBegin)); //5.使用本地的时区和区域获取日历 Calendar calBegin = Calendar.getInstance(); //6.传入起始时间将此日历设置为起始日历 calBegin.setTime(dBegin); //8.判断结束日期是否在起始日历的日期之后 while (dEnd.after(calBegin.getTime())) { // 9.根据日历的规则:月份中的每一天,为起始日历加一天 calBegin.add(Calendar.DAY_OF_MONTH, 1); //10.得到的每一天就添加进集合 dates.add(sdf.format(calBegin.getTime())); //11.如果当前的起始日历超过结束日期后,就结束循环 } return dates; } /** * 修改预约时间 */ @PreAuthorize("@ss.hasPermi('mall:timeConfig:edit')") @Log(title = "预约时间", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody MallTimeConfig mallTimeConfig) { return toAjax(mallTimeConfigService.updateMallTimeConfig(mallTimeConfig)); } /** * 删除预约时间 */ @PreAuthorize("@ss.hasPermi('mall:timeConfig:remove')") @Log(title = "预约时间", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(mallTimeConfigService.deleteMallTimeConfigByIds(ids)); } }