|  | @@ -0,0 +1,254 @@
 | 
	
		
			
				|  |  | +package com.aidex.system.service.impl;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import cn.hutool.core.date.DateField;
 | 
	
		
			
				|  |  | +import cn.hutool.core.date.DateTime;
 | 
	
		
			
				|  |  | +import cn.hutool.core.date.DateUnit;
 | 
	
		
			
				|  |  | +import cn.hutool.core.date.DateUtil;
 | 
	
		
			
				|  |  | +import cn.hutool.core.util.IdUtil;
 | 
	
		
			
				|  |  | +import com.aidex.framework.cache.ConfigUtils;
 | 
	
		
			
				|  |  | +import com.aidex.system.domain.SysConfig;
 | 
	
		
			
				|  |  | +import com.aidex.system.domain.SysWharf;
 | 
	
		
			
				|  |  | +import com.aidex.system.mapper.SysReservationDataMapper;
 | 
	
		
			
				|  |  | +import com.aidex.system.req.SysReservationConfigReq;
 | 
	
		
			
				|  |  | +import com.aidex.system.service.SysWharfService;
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson2.JSON;
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson2.JSONArray;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | +import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | +import org.slf4j.Logger;
 | 
	
		
			
				|  |  | +import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | +import com.github.pagehelper.PageInfo;
 | 
	
		
			
				|  |  | +import com.aidex.common.core.domain.BaseEntity;
 | 
	
		
			
				|  |  | +import com.aidex.common.core.service.BaseServiceImpl;
 | 
	
		
			
				|  |  | +import com.aidex.system.mapper.SysReservationConfigMapper;
 | 
	
		
			
				|  |  | +import com.aidex.system.domain.SysReservationConfig;
 | 
	
		
			
				|  |  | +import com.aidex.system.service.SysReservationConfigService;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 预约配置Service业务层处理
 | 
	
		
			
				|  |  | + * @author Chensir
 | 
	
		
			
				|  |  | + * @email 914769835
 | 
	
		
			
				|  |  | + * @date 2024-03-28
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +@Service
 | 
	
		
			
				|  |  | +@Transactional(readOnly = true)
 | 
	
		
			
				|  |  | +public class SysReservationConfigServiceImpl extends BaseServiceImpl<SysReservationConfigMapper, SysReservationConfig> implements SysReservationConfigService {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private static final Logger log = LoggerFactory.getLogger(SysReservationConfigServiceImpl.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysReservationDataMapper sysReservationDataMapper;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysWharfService sysWharfService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 获取单条数据
 | 
	
		
			
				|  |  | +     * @param sysReservationConfig 预约配置
 | 
	
		
			
				|  |  | +     * @return 预约配置
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public SysReservationConfig get(SysReservationConfig sysReservationConfig) {
 | 
	
		
			
				|  |  | +        SysReservationConfig dto = super.get(sysReservationConfig);
 | 
	
		
			
				|  |  | +        return dto;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 获取单条数据
 | 
	
		
			
				|  |  | +     * @param id 预约配置id
 | 
	
		
			
				|  |  | +     * @return 预约配置
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public SysReservationConfig get(String id) {
 | 
	
		
			
				|  |  | +        SysReservationConfig dto = super.get(id);
 | 
	
		
			
				|  |  | +        return dto;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 查询预约配置列表
 | 
	
		
			
				|  |  | +     * @param sysReservationConfig 预约配置
 | 
	
		
			
				|  |  | +     * @return 预约配置
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<SysReservationConfig> findList(SysReservationConfig sysReservationConfig) {
 | 
	
		
			
				|  |  | +		List<SysReservationConfig> sysReservationConfigList = super.findList(sysReservationConfig);
 | 
	
		
			
				|  |  | +        return sysReservationConfigList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 分页查询预约配置列表
 | 
	
		
			
				|  |  | +     * @param sysReservationConfig 预约配置
 | 
	
		
			
				|  |  | +     * @return 预约配置
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public PageInfo<SysReservationConfig> findPage(SysReservationConfig sysReservationConfig) {
 | 
	
		
			
				|  |  | +		PageInfo<SysReservationConfig> page = super.findPage(sysReservationConfig);
 | 
	
		
			
				|  |  | +        return page;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 保存预约配置
 | 
	
		
			
				|  |  | +     * @param sysReservationConfig
 | 
	
		
			
				|  |  | +     * @return 结果
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public boolean save(SysReservationConfig sysReservationConfig) {
 | 
	
		
			
				|  |  | +        return super.save(sysReservationConfig);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 删除预约配置信息
 | 
	
		
			
				|  |  | +     * @param sysReservationConfig
 | 
	
		
			
				|  |  | +     * @return 结果
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public boolean remove(SysReservationConfig sysReservationConfig) {
 | 
	
		
			
				|  |  | +        return super.remove(sysReservationConfig);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 批量删除预约配置
 | 
	
		
			
				|  |  | +     * @param ids 需要删除的预约配置ID
 | 
	
		
			
				|  |  | +     * @return 结果
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public int deleteSysReservationConfigByIds(String[] ids) {
 | 
	
		
			
				|  |  | +        return mapper.deleteSysReservationConfigByIds(ids, BaseEntity.DEL_FLAG_DELETE);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public int batchInsert(List<SysReservationConfig> list) {
 | 
	
		
			
				|  |  | +        return mapper.batchInsert(list);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public int addBySysReservationConfigReq(SysReservationConfigReq sysReservationConfigReq) {
 | 
	
		
			
				|  |  | +        SysConfig routeStartConfig =  ConfigUtils.getConfigByKey("sys.route.start");
 | 
	
		
			
				|  |  | +        SysConfig routeEndConfig = ConfigUtils.getConfigByKey("sys.route.end");
 | 
	
		
			
				|  |  | +        List<SysReservationConfig> list = new ArrayList<>();
 | 
	
		
			
				|  |  | +        if(routeStartConfig != null && routeEndConfig != null){
 | 
	
		
			
				|  |  | +            String routeStart = routeStartConfig.getConfigValue();
 | 
	
		
			
				|  |  | +            String routeEnd = routeEndConfig.getConfigValue();
 | 
	
		
			
				|  |  | +            Date startDate = sysReservationConfigReq.getStartDate();
 | 
	
		
			
				|  |  | +            Date endDate = sysReservationConfigReq.getEndDate();
 | 
	
		
			
				|  |  | +            long days = DateUtil.between(startDate,endDate, DateUnit.DAY);
 | 
	
		
			
				|  |  | +            if(days > 0){
 | 
	
		
			
				|  |  | +                for(int i = 0; i < days; i++){
 | 
	
		
			
				|  |  | +                    DateTime date = DateUtil.offsetDay(startDate, i);
 | 
	
		
			
				|  |  | +                    DateTime dateTime = DateUtil.offsetDay(startDate, i);
 | 
	
		
			
				|  |  | +                    String[] split = routeStart.split(":");
 | 
	
		
			
				|  |  | +                    dateTime.setField(DateField.HOUR, Integer.valueOf(split[0]));
 | 
	
		
			
				|  |  | +                    dateTime.setField(DateField.MINUTE, Integer.valueOf(split[1]));
 | 
	
		
			
				|  |  | +                    dateTime.setField(DateField.SECOND, 0);
 | 
	
		
			
				|  |  | +                    DateTime end = DateUtil.offsetDay(startDate, i);
 | 
	
		
			
				|  |  | +                    String[] endSplit = routeEnd.split(":");
 | 
	
		
			
				|  |  | +                    end.setField(DateField.HOUR, Integer.valueOf(endSplit[0]));
 | 
	
		
			
				|  |  | +                    end.setField(DateField.MINUTE, Integer.valueOf(endSplit[1]));
 | 
	
		
			
				|  |  | +                    end.setField(DateField.SECOND, 0);
 | 
	
		
			
				|  |  | +                    DateTime last = DateUtil.date();
 | 
	
		
			
				|  |  | +                    DateTime endTime = DateUtil.offset(dateTime, DateField.MINUTE, sysReservationConfigReq.getDuration());
 | 
	
		
			
				|  |  | +                    while (endTime.getTime() <= end.getTime()) {
 | 
	
		
			
				|  |  | +                        SysReservationConfig sysReservationConfig = new SysReservationConfig();
 | 
	
		
			
				|  |  | +                        sysReservationConfig.setReservationDate(date);
 | 
	
		
			
				|  |  | +                        sysReservationConfig.setEnableNum(sysReservationConfigReq.getEnableNum());
 | 
	
		
			
				|  |  | +                        sysReservationConfig.setReservationStartTime(dateTime);
 | 
	
		
			
				|  |  | +                        sysReservationConfig.setReservationEndTime(endTime);
 | 
	
		
			
				|  |  | +                        sysReservationConfig.setId(IdUtil.simpleUUID());
 | 
	
		
			
				|  |  | +                        sysReservationConfig.setStatus(sysReservationConfigReq.getStatus());
 | 
	
		
			
				|  |  | +                        last = endTime;
 | 
	
		
			
				|  |  | +                        list.add(sysReservationConfig);
 | 
	
		
			
				|  |  | +                        endTime = DateUtil.offset(endTime, DateField.MINUTE, sysReservationConfigReq.getDuration());
 | 
	
		
			
				|  |  | +                        dateTime  = DateUtil.offset(dateTime, DateField.MINUTE, sysReservationConfigReq.getDuration());
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    if (endTime.getTime() > end.getTime()){
 | 
	
		
			
				|  |  | +                        SysReservationConfig lastConfig = new SysReservationConfig();
 | 
	
		
			
				|  |  | +                        lastConfig.setReservationDate(date);
 | 
	
		
			
				|  |  | +                        lastConfig.setReservationStartTime(last);
 | 
	
		
			
				|  |  | +                        lastConfig.setReservationEndTime(end);
 | 
	
		
			
				|  |  | +                        lastConfig.setEnableNum(sysReservationConfigReq.getEnableNum());
 | 
	
		
			
				|  |  | +                        lastConfig.setId(IdUtil.simpleUUID());
 | 
	
		
			
				|  |  | +                        lastConfig.setStatus(sysReservationConfigReq.getStatus());
 | 
	
		
			
				|  |  | +                        list.add(lastConfig);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                return mapper.batchInsert(list);
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                DateTime date = DateUtil.offsetDay(startDate, 0);
 | 
	
		
			
				|  |  | +                DateTime dateTime = DateUtil.offsetDay(startDate, 0);
 | 
	
		
			
				|  |  | +                String[] split = routeStart.split(":");
 | 
	
		
			
				|  |  | +                dateTime.setField(DateField.HOUR, Integer.valueOf(split[0]));
 | 
	
		
			
				|  |  | +                dateTime.setField(DateField.MINUTE, Integer.valueOf(split[1]));
 | 
	
		
			
				|  |  | +                dateTime.setField(DateField.SECOND, 0);
 | 
	
		
			
				|  |  | +                DateTime end = DateUtil.offsetDay(startDate, 0);
 | 
	
		
			
				|  |  | +                String[] endSplit = routeEnd.split(":");
 | 
	
		
			
				|  |  | +                end.setField(DateField.HOUR, Integer.valueOf(endSplit[0]));
 | 
	
		
			
				|  |  | +                end.setField(DateField.MINUTE, Integer.valueOf(endSplit[1]));
 | 
	
		
			
				|  |  | +                end.setField(DateField.SECOND, 0);
 | 
	
		
			
				|  |  | +                DateTime last = DateUtil.date();
 | 
	
		
			
				|  |  | +                DateTime endTime = DateUtil.offset(dateTime, DateField.MINUTE, sysReservationConfigReq.getDuration());
 | 
	
		
			
				|  |  | +                while (endTime.getTime() <= end.getTime()) {
 | 
	
		
			
				|  |  | +                    SysReservationConfig sysReservationConfig = new SysReservationConfig();
 | 
	
		
			
				|  |  | +                    sysReservationConfig.setReservationDate(date);
 | 
	
		
			
				|  |  | +                    sysReservationConfig.setEnableNum(sysReservationConfigReq.getEnableNum());
 | 
	
		
			
				|  |  | +                    sysReservationConfig.setReservationStartTime(dateTime);
 | 
	
		
			
				|  |  | +                    sysReservationConfig.setReservationEndTime(endTime);
 | 
	
		
			
				|  |  | +                    sysReservationConfig.setId(IdUtil.simpleUUID());
 | 
	
		
			
				|  |  | +                    sysReservationConfig.setStatus(sysReservationConfigReq.getStatus());
 | 
	
		
			
				|  |  | +                    last = endTime;
 | 
	
		
			
				|  |  | +                    list.add(sysReservationConfig);
 | 
	
		
			
				|  |  | +                    endTime = DateUtil.offset(endTime, DateField.MINUTE, sysReservationConfigReq.getDuration());
 | 
	
		
			
				|  |  | +                    dateTime  = DateUtil.offset(dateTime, DateField.MINUTE, sysReservationConfigReq.getDuration());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (endTime.getTime() > end.getTime()){
 | 
	
		
			
				|  |  | +                    SysReservationConfig lastConfig = new SysReservationConfig();
 | 
	
		
			
				|  |  | +                    lastConfig.setReservationDate(date);
 | 
	
		
			
				|  |  | +                    lastConfig.setReservationStartTime(last);
 | 
	
		
			
				|  |  | +                    lastConfig.setReservationEndTime(end);
 | 
	
		
			
				|  |  | +                    lastConfig.setEnableNum(sysReservationConfigReq.getEnableNum());
 | 
	
		
			
				|  |  | +                    lastConfig.setId(IdUtil.simpleUUID());
 | 
	
		
			
				|  |  | +                    lastConfig.setStatus(sysReservationConfigReq.getStatus());
 | 
	
		
			
				|  |  | +                    list.add(lastConfig);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                return mapper.batchInsert(list);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return 0;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<Map<String, String>> getStatiscDataBydate(String date) {
 | 
	
		
			
				|  |  | +        List<String> durationByDate = sysReservationDataMapper.getDurationByDate(date);
 | 
	
		
			
				|  |  | +        List<Map<String, String>> reservationDataByDate = sysReservationDataMapper.getReservationDataByDate(date);
 | 
	
		
			
				|  |  | +        SysWharf sysWharf = new SysWharf();
 | 
	
		
			
				|  |  | +        sysWharf.setStatus(BaseEntity.STATUS_NORMAL);
 | 
	
		
			
				|  |  | +        List<SysWharf> list = sysWharfService.findList(sysWharf);
 | 
	
		
			
				|  |  | +        List<Map<String, String>> data = new ArrayList<>();
 | 
	
		
			
				|  |  | +        if (reservationDataByDate != null){
 | 
	
		
			
				|  |  | +            for (SysWharf item : list) {
 | 
	
		
			
				|  |  | +                Map<String, String> map = new HashMap<>();
 | 
	
		
			
				|  |  | +                map.put("wharfName", item.getWharfNanme());
 | 
	
		
			
				|  |  | +                map.put("date", date);
 | 
	
		
			
				|  |  | +                String wharfName = item.getWharfNanme();
 | 
	
		
			
				|  |  | +                for (int i = 0; i < durationByDate.size(); i++) {
 | 
	
		
			
				|  |  | +                    String duration = durationByDate.get(i);
 | 
	
		
			
				|  |  | +                    long count = reservationDataByDate.stream().filter(reservationData -> reservationData.get("startWharfName").equals(wharfName) && reservationData.get("duration").equals(duration)).count();
 | 
	
		
			
				|  |  | +                    map.put(duration, String.valueOf(count));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                data.add(map);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return data;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<String> getStatiscColumns(String date) {
 | 
	
		
			
				|  |  | +        return sysReservationDataMapper.getDurationByDate(date);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |