|
@@ -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);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|