package com.citygis.web.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.util.MapUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.citygis.common.annotation.DataSource;
import com.citygis.common.enums.DataSourceType;
import com.citygis.framework.datasource.DynamicDataSourceContextHolder;
import com.citygis.web.domain.*;
import com.citygis.web.mapper.TabSystemMsgMapper;
import com.citygis.web.service.ITabFileInfoService;
import com.citygis.web.service.ITabSystemMsgService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
*
* 服务实现类
*
*
* @author citygis
* @since 2025-01-09
*/
@Service
@DataSource(DataSourceType.SLAVE)
public class TabSystemMsgServiceImpl extends ServiceImpl implements ITabSystemMsgService {
@Value("${weekReport.filepath}")
private String weekReportFilePath;
@Value("${weekReport.templateFilePath}")
private String templateFilePath;
@Resource
TabSystemMsgMapper tabSystemMsgMapper;
@Resource
ITabFileInfoService tabFileInfoService;
@Override
public List getStatistics(TabSystemMsg tabSystemMsg) {
List list = tabSystemMsgMapper.getTabSystemMsgList(tabSystemMsg);
List tabAccessTableMsg = new ArrayList<>();
tabAccessTableMsg.addAll(getJkcloudCount());
tabAccessTableMsg.addAll(tabSystemMsgMapper.getTabAccessTableMsgList(null, null));
list.forEach(tabSystemMsg1 -> {
tabAccessTableMsg.forEach(tabAccessTableMsg1 -> {
if (tabAccessTableMsg1.getTableName().equals(tabSystemMsg1.getTableName())) {
tabSystemMsg1.setCount(tabAccessTableMsg1.getCount());
}
});
});
return list;
}
@Override
public List getTabSystemMsgList(TabSystemMsg tabSystemMsg) {
List list = tabSystemMsgMapper.getTabSystemMsgList(tabSystemMsg);
List tabAccessTableMsg = new ArrayList<>();
tabAccessTableMsg.addAll(getJkcloudCount());
tabAccessTableMsg.addAll(tabSystemMsgMapper.getTabAccessTableMsgList(null, null));
list.forEach(tabSystemMsg1 -> {
tabAccessTableMsg.forEach(tabAccessTableMsg1 -> {
if (tabAccessTableMsg1.getTableName().equals(tabSystemMsg1.getTableName())) {
tabSystemMsg1.setCount(tabAccessTableMsg1.getCount());
}
});
});
return list;
}
public List getJkcloudCount() {
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.SLAVE_TWO.name());
List jkcloudCount = tabSystemMsgMapper.getJkcloudCount(null, null);
DynamicDataSourceContextHolder.clearDataSourceType();
return jkcloudCount;
}
@Override
public List getExchangeCount(String dateTime) {
return tabSystemMsgMapper.getExchangeCount(dateTime);
}
@Override
public List getJkcloudNewCount() {
return tabSystemMsgMapper.getJkcloudNewCount();
}
@Override
public List getUrlDayCount() {
return tabSystemMsgMapper.getUrlDayCount();
}
@Override
public List getTopicCountYesterday() {
return tabSystemMsgMapper.getTopicCountYesterday();
}
@Override
public List getNew() {
return tabSystemMsgMapper.getNew();
}
@DataSource(DataSourceType.SLAVE)
public Boolean insertTabSystemMsg(TabSystemMsg tabSystemMsg) {
return this.save(tabSystemMsg);
}
@Override
public void weekReport() {
List list = tabSystemMsgMapper.getTabSystemMsgList(new TabSystemMsg());
List tabAccessTableMsg = tabSystemMsgMapper.getTabAccessTableMsgList(null, null);
Map map = MapUtils.newHashMap();
list.forEach(tabSystemMsgReport -> {
tabAccessTableMsg.forEach(tabAccessTableMsg1 -> {
if (tabAccessTableMsg1.getTableName().equals(tabSystemMsgReport.getTableEnglishName())) {
map.put(tabAccessTableMsg1.getTableName(), tabAccessTableMsg1.getCount());
}
});
});
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取本周周一的日期
LocalDate monday = today.with(DayOfWeek.MONDAY);
// 获取本周周日的日期
LocalDate sunday = today.with(DayOfWeek.SUNDAY);
// 设置文件保存路径
String filePath = weekReportFilePath + "疾控周报" + monday + "-" + sunday + ".xlsx";
EasyExcel.write(filePath).withTemplate(templateFilePath).sheet().doFill(map);
saveTabFileInfo(filePath);
}
private void saveTabFileInfo(String filePath) {
//保存到主库,手动切换数据源
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.MASTER.name());
TabFileInfo tabFileInfo = new TabFileInfo();
tabFileInfo.setFileName(filePath.substring(filePath.lastIndexOf("\\") + 1));
tabFileInfo.setFilePath(filePath);
tabFileInfo.setCreateTime(new Date());
tabFileInfo.setCreateBy("system");
tabFileInfo.setSystemType("疾控周报");
tabFileInfoService.save(tabFileInfo);
DynamicDataSourceContextHolder.clearDataSourceType();
}
}