package com.javaweb.hydrology.service.impl;
|
|
import java.io.File;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.naming.directory.DirContext;
|
import javax.xml.ws.Holder;
|
|
import com.javaweb.common.utils.DateUtils;
|
import com.javaweb.common.utils.StringUtils;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import com.javaweb.hydrology.mapper.HydrologyDataMapper;
|
import com.javaweb.hydrology.mapper.HydrologyHoleInfoMapper;
|
import com.javaweb.hydrology.domain.HydrologyData;
|
import com.javaweb.hydrology.domain.HydrologyHoleInfo;
|
import com.javaweb.hydrology.domain.HydrologyOriginData;
|
import com.javaweb.hydrology.service.IHydrologyHoleInfoService;
|
import com.javaweb.hydrology.vo.HydrologyDataVo;
|
import com.sun.mail.handlers.image_gif;
|
|
import cn.hutool.poi.excel.ExcelReader;
|
import cn.hutool.poi.excel.ExcelUtil;
|
|
import com.javaweb.common.config.Global;
|
import com.javaweb.common.core.domain.AjaxResult;
|
import com.javaweb.common.core.text.Convert;
|
|
/**
|
* 水文钻孔Service业务层处理
|
*
|
* @author zmk
|
* @date 2022-09-01
|
*/
|
@Service
|
public class HydrologyHoleInfoServiceImpl implements IHydrologyHoleInfoService
|
{
|
@Autowired
|
private HydrologyHoleInfoMapper hydrologyHoleInfoMapper;
|
|
@Autowired
|
private HydrologyDataMapper dataMapper;
|
|
|
private String fileSaveDir = Global.getProfile() + "\\hydrology\\";
|
|
|
protected final Logger logger = LoggerFactory.getLogger(HydrologyHoleInfoServiceImpl.class);
|
/**
|
* 查询水文钻孔
|
*
|
* @param id 水文钻孔ID
|
* @return 水文钻孔
|
*/
|
@Override
|
public HydrologyHoleInfo selectHydrologyHoleInfoById(Long id)
|
{
|
return hydrologyHoleInfoMapper.selectHydrologyHoleInfoById(id);
|
}
|
|
/**
|
* 查询水文钻孔列表
|
*
|
* @param hydrologyHoleInfo 水文钻孔
|
* @return 水文钻孔
|
*/
|
@Override
|
public List<HydrologyHoleInfo> selectHydrologyHoleInfoList(HydrologyHoleInfo hydrologyHoleInfo)
|
{
|
return hydrologyHoleInfoMapper.selectHydrologyHoleInfoList(hydrologyHoleInfo);
|
}
|
|
/**
|
* 新增水文钻孔
|
*
|
* @param hydrologyHoleInfo 水文钻孔
|
* @return 结果
|
*/
|
@Override
|
public int insertHydrologyHoleInfo(HydrologyHoleInfo hydrologyHoleInfo)
|
{
|
hydrologyHoleInfo.setCreateTime(DateUtils.getNowDate());
|
return hydrologyHoleInfoMapper.insertHydrologyHoleInfo(hydrologyHoleInfo);
|
}
|
|
/**
|
* 修改水文钻孔
|
*
|
* @param hydrologyHoleInfo 水文钻孔
|
* @return 结果
|
*/
|
@Override
|
public int updateHydrologyHoleInfo(HydrologyHoleInfo hydrologyHoleInfo)
|
{
|
return hydrologyHoleInfoMapper.updateHydrologyHoleInfo(hydrologyHoleInfo);
|
}
|
|
/**
|
* 删除水文钻孔对象
|
*
|
* @param ids 需要删除的数据ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteHydrologyHoleInfoByIds(String ids)
|
{
|
return hydrologyHoleInfoMapper.deleteHydrologyHoleInfoByIds(Convert.toStrArray(ids));
|
}
|
|
/**
|
* 删除水文钻孔信息
|
*
|
* @param id 水文钻孔ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteHydrologyHoleInfoById(Long id)
|
{
|
return hydrologyHoleInfoMapper.deleteHydrologyHoleInfoById(id);
|
}
|
|
/**
|
* 导入钻孔
|
*/
|
@Override
|
public String importHydrologyInfo(MultipartFile file) {
|
|
StringBuffer sBuffer =new StringBuffer();
|
|
String dest = saveExcel(file);
|
//读取钻孔列表
|
List<HydrologyHoleInfo> holeList = readHoleInfo(dest);
|
|
if(holeList!=null){
|
sBuffer.append("本次导入钻孔:"+holeList.size() +"个");
|
}
|
|
|
for(HydrologyHoleInfo entity : holeList){
|
//删除重复数据
|
hydrologyHoleInfoMapper.deleteHydrologyHoleInfoByNum(entity.getHoleNum());
|
insertHydrologyHoleInfo(entity);
|
}
|
|
List<HydrologyOriginData> dataList = readOriginData(dest);
|
|
if(dataList!=null){
|
sBuffer.append("</br>");
|
sBuffer.append("本次导入水位信息:"+dataList.size() +"条");
|
}
|
|
//原始表格转化为数据库存储的结构
|
List<HydrologyData> datas = transferOriginData(dataList);
|
for(HydrologyData data : datas){
|
|
dataMapper.deleteHydrologyDataByEntity(data);
|
|
data.setCreateTime(DateUtils.getNowDate());
|
dataMapper.insertHydrologyData(data);
|
}
|
|
return sBuffer.toString();
|
}
|
|
/**
|
* 转化数据类型
|
* @param dataList
|
* @return
|
*/
|
private List<HydrologyData> transferOriginData(List<HydrologyOriginData> dataList){
|
|
List<HydrologyData> list =new ArrayList<HydrologyData>();
|
|
for(HydrologyOriginData originData : dataList){
|
String holeNum = originData.getHoleNum();
|
String year= originData.getYear();
|
String layer ="1";
|
if(!StringUtils.isEmpty(originData.getLayer())){
|
layer= originData.getLayer();
|
}
|
|
list.add(new HydrologyData(holeNum, year, year + "-01", layer, originData.getMonth1()));
|
list.add(new HydrologyData(holeNum, year, year + "-02", layer, originData.getMonth2()));
|
|
list.add(new HydrologyData(holeNum, year, year + "-03", layer, originData.getMonth3()));
|
list.add(new HydrologyData(holeNum, year, year + "-04", layer, originData.getMonth4()));
|
|
list.add(new HydrologyData(holeNum, year, year + "-05", layer, originData.getMonth5()));
|
list.add(new HydrologyData(holeNum, year, year + "-06", layer, originData.getMonth6()));
|
|
list.add(new HydrologyData(holeNum, year, year + "-07", layer, originData.getMonth7()));
|
list.add(new HydrologyData(holeNum, year, year + "-08", layer, originData.getMonth8()));
|
|
list.add(new HydrologyData(holeNum, year, year + "-09", layer, originData.getMonth9()));
|
list.add(new HydrologyData(holeNum, year, year + "-10", layer, originData.getMonth10()));
|
|
list.add(new HydrologyData(holeNum, year, year + "-11", layer, originData.getMonth11()));
|
list.add(new HydrologyData(holeNum, year, year + "-12", layer, originData.getMonth12()));
|
|
}
|
|
return list;
|
|
}
|
|
/**
|
* 保存表格返回路徑
|
* @return
|
*/
|
private String saveExcel(MultipartFile file){
|
String filename = file.getOriginalFilename();
|
|
File dir = new File(fileSaveDir);
|
|
if(!dir.exists()){
|
dir.mkdir();
|
}
|
String addr= fileSaveDir + filename;
|
try{
|
File dest = new File(addr);
|
file.transferTo(dest);
|
}catch(Exception e){
|
logger.debug(e.toString());
|
return null;
|
}
|
return addr;
|
}
|
|
/**
|
* 读取钻孔数据
|
* @param file
|
* @return
|
*/
|
private List<HydrologyHoleInfo> readHoleInfo(String filepath){
|
|
ExcelReader reader = ExcelUtil.getReader(filepath, 0);
|
reader.addHeaderAlias("经度", "lng");
|
reader.addHeaderAlias("纬度", "lat");
|
reader.addHeaderAlias("井号", "holeNum");
|
reader.addHeaderAlias("区县", "district");
|
|
reader.addHeaderAlias("孔位", "address");
|
reader.addHeaderAlias("孔深(m)", "holeDepth");
|
reader.addHeaderAlias("孔口标高", "elevation");
|
reader.addHeaderAlias("成井时间", "wellDate");
|
reader.addHeaderAlias("滤水管埋深", "pipeDepth");
|
reader.addHeaderAlias("仪器类型", "machineType");
|
reader.addHeaderAlias("备注", "remark");
|
|
List<HydrologyHoleInfo> list = reader.readAll(HydrologyHoleInfo.class);
|
|
return list;
|
|
}
|
|
|
/**
|
* 读取实际数据
|
* @param filepath
|
* @return
|
*/
|
private List<HydrologyOriginData> readOriginData(String filepath){
|
|
ExcelReader reader = ExcelUtil.getReader(filepath, 1);
|
reader.addHeaderAlias("孔号", "holeNum");
|
reader.addHeaderAlias("年", "year");
|
reader.addHeaderAlias("层", "layer");
|
|
reader.addHeaderAlias("一月", "month1");
|
reader.addHeaderAlias("二月", "month2");
|
reader.addHeaderAlias("三月", "month3");
|
reader.addHeaderAlias("四月", "month4");
|
reader.addHeaderAlias("五月", "month5");
|
reader.addHeaderAlias("六月", "month6");
|
reader.addHeaderAlias("七月", "month7");
|
reader.addHeaderAlias("八月", "month8");
|
|
reader.addHeaderAlias("九月", "month9");
|
reader.addHeaderAlias("十月", "month10");
|
reader.addHeaderAlias("十一月", "month11");
|
reader.addHeaderAlias("十二月", "month12");
|
|
List<HydrologyOriginData> list = reader.readAll(HydrologyOriginData.class);
|
|
return list;
|
}
|
|
|
private Integer defaultYears = 3;//默认查询 N 年份
|
|
|
/**
|
* 图表数据
|
* @param holeNum
|
* @return
|
*/
|
public AjaxResult hydrologyChart(String holeNum){
|
AjaxResult result = AjaxResult.success();
|
try{
|
//地下水基础数据
|
HydrologyHoleInfo holeInfo = new HydrologyHoleInfo();
|
holeInfo.setHoleNum(holeNum);
|
List<HydrologyHoleInfo> holes = hydrologyHoleInfoMapper.selectHydrologyHoleInfoList(holeInfo);
|
|
//地下水数据
|
HydrologyData hydrologyData =new HydrologyData();
|
hydrologyData.setHoleNum(holeNum);
|
|
String startYear = startYears();//起始年份
|
|
List<HydrologyDataVo> datas = dataMapper.selectHydrologyDataListByNum(holeNum,startYear);
|
|
HydrologyDataVo maxdata = dataMapper.selectMaxData(holeNum);
|
|
HydrologyDataVo mindata = dataMapper.selectMinData(holeNum);
|
|
Map<String, Object> map =new HashMap<>();
|
|
map.put("hole_info", holes.get(0));
|
map.put("hole_data", datas);
|
map.put("years", years(startYear));
|
map.put("maxdata", maxdata);
|
map.put("mindata", mindata);
|
|
result.put("result", map);
|
|
}catch(Exception exception){
|
return AjaxResult.error("查询错误");
|
}
|
return result;
|
}
|
|
private List<String> years(String startYear){
|
int yInteger = Integer.valueOf(startYear)+1;
|
List<String> list =new ArrayList<>();
|
for(int i = yInteger ;i< yInteger+ defaultYears ;i++){
|
list.add(String.valueOf(i));
|
}
|
return list;
|
}
|
|
|
private String startYears(){
|
if(defaultYears==0){
|
return "1900";
|
}
|
Calendar calendar =Calendar.getInstance();
|
int year = calendar.get(Calendar.YEAR);
|
int start = year - defaultYears - 1 ;
|
return String.valueOf(start);
|
}
|
|
}
|