package com.jtzx.crm.module.sys.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; import com.jtzx.crm.module.sys.entity.SysCustomerFollowEntity; import com.jtzx.crm.module.sys.mapper.SysCustomerFollowMapper; import com.jtzx.crm.module.sys.model.request.AdminSysCustomerFollowOrderDTO; import com.jtzx.crm.module.sys.model.response.SysCustomerFollowOrderBO; import com.jtzx.crm.module.sys.model.response.SysCustomerFollowOrderDetailBO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.List; @RequiredArgsConstructor @Service @Slf4j public class SysCustomerDataFollowOrderService { private final SysCustomerFollowMapper sysCustomerFollowMapper; private final SysCustomerDataFollowService sysCustomerDataFollowService; /** * 预约登记列表数据查询 * * @param dto * @return */ public SysCustomerFollowOrderBO queryOrderFollowData(AdminSysCustomerFollowOrderDTO dto) { SysCustomerFollowOrderBO resultData = SysCustomerFollowOrderBO.builder().build(); resultData.setStatus0Count(0); resultData.setStatus1Count(0); resultData.setStatus2Count(0); resultData.setTotalCount(0); resultData.setDateList(Lists.newArrayList()); String dateStr = DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd"); if (StrUtil.isNotEmpty(dto.getDatetime())) { dateStr = dto.getDatetime().trim(); } //当月开始时间 DateTime startMonthDay = DateUtil.beginOfMonth(DateUtil.parse(dateStr)); // //当月结束时间 DateTime endMonthDay = DateUtil.endOfMonth(DateUtil.parse(dateStr)); // 筛选条件数据 resultData.setSelectData(sysCustomerDataFollowService.queryCustomerOrderSelectData(0, true,startMonthDay,endMonthDay)); //如果是 yyyy-MM 格式,则需要重新设置为当月开始时间和结束时间 DateTime startDateTime = DateUtil.beginOfDay(DateUtil.parseDate(dateStr)); DateTime endDateTime = DateUtil.endOfDay(DateUtil.parseDate(dateStr)); //如果是 yyyy-MM-dd 格式,则需要重新设置为当天开始时间和结束时间 // if (dateStr.length() == 10) { // //当天开始时间 // startDateTime = DateUtil.beginOfDay(DateUtil.parseDate(dateStr)); // //当天结束时间 // endDateTime = DateUtil.endOfDay(DateUtil.parseDate(dateStr)); // } //数据列表 resultData.setDataList( sysCustomerDataFollowService.queryCustomerFollowOrderData(DateUtil.toLocalDateTime(startDateTime), DateUtil.toLocalDateTime(endDateTime), dto.getUserId(), dto.getOrderStatus(), dto.getQueryStr(), 0)); //查询数据 List listData = sysCustomerFollowMapper.selectList( new LambdaQueryWrapper<>(SysCustomerFollowEntity.class) .select( SysCustomerFollowEntity::getId, SysCustomerFollowEntity::getOrderDatetime, SysCustomerFollowEntity::getOrderStatus, SysCustomerFollowEntity::getSuccessStatus, SysCustomerFollowEntity::getClaimDatetime ) .ge(SysCustomerFollowEntity::getOrderDatetime, startMonthDay) .le(SysCustomerFollowEntity::getOrderDatetime, endMonthDay) .eq(SysCustomerFollowEntity::getFollowId,33) //只查询方案演示 .eq(SysCustomerFollowEntity::getOrderType, 0) ); if (CollUtil.isNotEmpty(listData)) { //月待开始时间 resultData.setStatus0Count( listData.stream() .filter(x -> x.getOrderStatus() == 0) .toList().size()); //月已结束时间 resultData.setStatus1Count( listData.stream() .filter(x -> x.getOrderStatus() == 1) .toList().size()); //月已取消时间 resultData.setStatus2Count( listData.stream() .filter(x -> x.getOrderStatus() == 2) .toList().size()); //总条数 resultData.setTotalCount(listData.size()); } //日期列表 List dateList = Lists.newArrayList(); List dateTimes = DateUtil.rangeToList(startMonthDay, endMonthDay, DateField.DAY_OF_MONTH); dateTimes.forEach(e -> { SysCustomerFollowOrderDetailBO detailBO = SysCustomerFollowOrderDetailBO.builder() .day(DateUtil.format(e, "yyyy-MM-dd")) .status(0) .dayOfMonth(String.valueOf(DateUtil.dayOfMonth(e))) .build(); if (CollUtil.isNotEmpty(listData)) { //当天开始时间 DateTime startDateTime1 = DateUtil.beginOfDay(e); //当天结束时间 DateTime endDateTime1 = DateUtil.endOfDay(e); int size = listData.stream() .filter(x -> !x.getOrderDatetime().isBefore(DateUtil.toLocalDateTime(startDateTime1)) && !x.getOrderDatetime().isAfter(DateUtil.toLocalDateTime(endDateTime1))) .toList().size(); if (size > 0) { detailBO.setStatus(1); } } dateList.add(detailBO); }); resultData.setDateList(dateList); return resultData; } }