package com.nanometer.smartlab.controller; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.nanometer.smartlab.entity.*; import com.nanometer.smartlab.entity.dto.ContainerStatusMngDto; import com.nanometer.smartlab.model.SelectItemModel; import com.nanometer.smartlab.service.SysContainerSensorsService; import com.nanometer.smartlab.service.SysLaboratoryContainerService; import com.nanometer.smartlab.service.SysLaboratoryService; import com.nanometer.smartlab.service.SysWarehouseContainerService; import com.nanometer.smartlab.util.FacesUtils; import com.nanometer.smartlab.util.Utils; import org.apache.commons.collections4.map.SingletonMap; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.log4j.Logger; import org.primefaces.context.RequestContext; import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder; import org.primefaces.model.chart.*; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.faces.model.SelectItem; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Controller @Scope("session") public class ContainerStatusMngController extends BaseController { private static Logger logger = Logger.getLogger(ContainerStatusMngController.class); private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); private static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); @Resource private SysContainerSensorsService sysContainerSensorsService; private String laboratoryName; private String laboratoryContainerName; private LazyDataModel dataModel; private LineChartModel lineModel; private SysContainerSensors viewSensors; private List> containerSelectorList = new ArrayList>(); private String selectedContainerId; private Integer periodType =1; //1:day; 2:week; 3:month private Integer lineType =1; //1:温度; 2:湿度; 3:浓度 private Integer model = 0; //1是查询 private List selectContainerList; private SysContainerSensors selectedSysContainerSensors; private List chartSensorsList; private Map temperatureMap = new HashMap<>(); private Map humidityMap = new HashMap<>(); private Map vocMap = new HashMap<>(); private List dateRangeList = new ArrayList(){{ Calendar instance = Calendar.getInstance(); int year = instance.get(Calendar.YEAR); add(new SelectItemModel(){{setName("本日");setValue("1");}}); add(new SelectItemModel(){{setName("本周");setValue("2");}}); add(new SelectItemModel(){{setName("本月");setValue("3");}}); for (int i = 1; i <= 12; i++) { SelectItemModel item = new SelectItemModel(); item.setName(year +"年"+ i + "月"); item.setValue(year + String.format("%02d",i)); add(item); } }}; public LazyDataModel getDataModel() { if (this.dataModel == null) { this.dataModel = new LazyDataModel() { public List load(int first, int pageSize, String sortField, SortOrder sortOrder, Map filters) { List list = null; try { Map params = new HashMap<>(); //查询把index置为0 if(model == 1){ first = 0; } params.put("offset", first); params.put("limit",pageSize); params.put("laboratoryName",laboratoryName); params.put("laboratoryContainerName",laboratoryContainerName); int pageCount = sysContainerSensorsService.countAll(params); //设置页码 this.setRowCount(pageCount); if(pageCount>0) list = sysContainerSensorsService.selectInfo(params); } catch (Exception e) { logger.error("error occured.", e); } selectContainerList = null; return list; } @Override public ContainerStatusMngDto getRowData(String rowKey) { // Iterator iterator = this.iterator(); // if (iterator != null) { // ContainerStatusMngDto su = null; // while (iterator.hasNext()) { // su = iterator.next(); // if (rowKey.equals(su.getId())) { // return su; // } // } // } return sysContainerSensorsService.getRowData(rowKey); } }; } return dataModel; } public void onViewBtnClick() throws ParseException { if (this.selectContainerList == null || this.selectContainerList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } if (this.selectContainerList.size() > 1) { FacesUtils.warn("只能选择一个数据进行查看。"); return; } containerSelectorList.clear(); selectedContainerId = selectContainerList.get(0).getId(); fetchChartSensorsList(); renderLineChart(); RequestContext.getCurrentInstance().execute("PF('dialog').show()"); } public void search(){ dataModel = null; model = 1; } public String getLaboratoryName() { return laboratoryName; } public void setLaboratoryName(String laboratoryName) { this.laboratoryName = laboratoryName; } public String getLaboratoryContainerName() { return laboratoryContainerName; } public void setLaboratoryContainerName(String laboratoryContainerName) { this.laboratoryContainerName = laboratoryContainerName; } public List getSelectContainerList() { return selectContainerList; } public void setSelectContainerList(List selectContainerList) { this.selectContainerList = selectContainerList; } public SysContainerSensors getViewSensors() { return viewSensors; } public void setViewSensors(SysContainerSensors viewSensors) { this.viewSensors = viewSensors; } public LineChartModel getLineModel() { return lineModel; } public void setLineModel(LineChartModel lineModel) { this.lineModel = lineModel; } public String getSelectedContainerId() { return selectedContainerId; } public void setSelectedContainerId(String selectedContainerId) { this.selectedContainerId = selectedContainerId; } public Integer getLineType() { return lineType; } public void setLineType(Integer lineType) { this.lineType = lineType; } public Integer getPeriodType() { return periodType; } public void setPeriodType(Integer periodType) { this.periodType = periodType; } public SysContainerSensors getSelectedSysContainerSensors() { return selectedSysContainerSensors; } public void setSelectedSysContainerSensors(SysContainerSensors selectedSysContainerSensors) { this.selectedSysContainerSensors = selectedSysContainerSensors; } public void onSelectLineType(){ renderLineChart(); } public void onSelectPeriodType() throws ParseException { fetchChartSensorsList(); renderLineChart(); } public void onSelectContainer() throws ParseException { fetchChartSensorsList(); renderLineChart(); } public List> getContainerSelectorList() { return containerSelectorList; } public void setContainerSelectorList(List> containerSelectorList) { this.containerSelectorList = containerSelectorList; } public void fetchChartSensorsList() throws ParseException { String beginDate = null; String endDate = null; switch (periodType) { case 1: beginDate = DateFormatUtils.ISO_DATE_FORMAT.format(new Date());break; case 2: beginDate = Utils.getWeekMonday("yyyy-MM-dd");break; case 3: beginDate = DateFormatUtils.ISO_DATE_FORMAT.format(DateUtils.truncate(new Date(),Calendar.MONTH));break; default: Date parse = sdf.parse(periodType + ""); Calendar instance = Calendar.getInstance(); instance.setTime(parse); instance.set(Calendar.DAY_OF_MONTH, 1); beginDate = sdf2.format(instance.getTime()) +" 00:00:00"; instance.set(Calendar.DAY_OF_MONTH,instance.getActualMaximum(Calendar.DAY_OF_MONTH));; endDate = sdf2.format(instance.getTime()) +" 23:59:59"; //1月 } if (endDate != null) { Map params = ImmutableMap.of("containerId",selectedContainerId,"beginUpdateTime", beginDate,"endUpdateTime", endDate,"orderby","update_time asc"); chartSensorsList = sysContainerSensorsService.getListBySelective(params); }else{ Map params = ImmutableMap.of("containerId",selectedContainerId,"beginUpdateTime", beginDate,"orderby","update_time asc"); chartSensorsList = sysContainerSensorsService.getListBySelective(params); } temperatureMap = sysContainerSensorsService.selectMaxTemperature(selectedContainerId, beginDate, endDate); humidityMap = sysContainerSensorsService.selectMaxHumidity(selectedContainerId,beginDate,endDate); vocMap = sysContainerSensorsService.selectMaxVoc(selectedContainerId, beginDate, endDate); // this.maxHumidity = sysContainerSensorsService.selectMaxHumidity(selectedContainerId,beginDate,endDate); // this.maxVoc = sysContainerSensorsService.selectMaxVoc(selectedContainerId,beginDate,endDate); } public void renderLineChart() { String minY = null; String maxY = null; lineModel = new LineChartModel(); LineChartSeries series1 = new LineChartSeries(); series1.setFill(true); for (SysContainerSensors sensors : chartSensorsList) { if(lineType == 1) { series1.setLabel("温度"); series1.set(DateFormatUtils.format(sensors.getUpdateTime(),"yyyy-MM-dd HH:mm"),sensors.getTemp()); } else if(lineType == 2){ series1.setLabel("湿度"); series1.set(DateFormatUtils.format(sensors.getUpdateTime(),"yyyy-MM-dd HH:mm"),sensors.getHumidity()); } else { series1.setLabel("浓度"); series1.set(DateFormatUtils.format(sensors.getUpdateTime(),"yyyy-MM-dd HH:mm"),sensors.getVoc1()); } } // DateAxis axis = new DateAxis("Dates"); // Axis xAxis = lineModel.getAxis(AxisType.X); Axis xAxis = new DateAxis(); lineModel.getAxes().put(AxisType.X, xAxis); lineModel.setShowDatatip(true); if (periodType == 1) { xAxis.setTickFormat("%m-%d:%H"); } if (periodType == 2) { xAxis.setTickFormat("%m-%d"); } if (periodType >= 3) { xAxis.setTickFormat("%m-%d"); } xAxis.setTickAngle(-50); // axis.setMax(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm")); // axis.setMin(minDate); // axis.setTickFormat("%Y-%m-%d %H:%M"); lineModel.addSeries(series1); lineModel.setSeriesColors("5e9cd9"); lineModel.setLegendPosition("e"); Axis yAxis = lineModel.getAxis(AxisType.Y); // yAxis.setMin(0); // yAxis.setMax(10); } public List getChartSensorsList() { return chartSensorsList; } public void setChartSensorsList(List chartSensorsList) { this.chartSensorsList = chartSensorsList; } public List getDateRangeList() { return dateRangeList; } public void setDateRangeList(List dateRangeList) { this.dateRangeList = dateRangeList; } public Map getTemperatureMap() { return temperatureMap; } public void setTemperatureMap(Map temperatureMap) { this.temperatureMap = temperatureMap; } public Map getHumidityMap() { return humidityMap; } public void setHumidityMap(Map humidityMap) { this.humidityMap = humidityMap; } public Map getVocMap() { return vocMap; } public void setVocMap(Map vocMap) { this.vocMap = vocMap; } }