diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java new file mode 100644 index 0000000..cf1fe50 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java @@ -0,0 +1,139 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.TableViewConfig; +import com.casic.missiles.modular.system.tools.DataSqlUtil; +import com.casic.missiles.modular.system.tools.DateFormateUtil; +import com.casic.missiles.modular.system.util.PercentUtils; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.*; + +/** + * @ClassName HttpDataHandler + * @Description 各类型违法事故排名 + * @Author lwh + * @Date 2021/1/21 16:31 + * @Version 1.0 + */ +@Component +public class CaseTypeRankDataHandlerAdapter extends AbstractDataHandlerAdapter { + + private static String[] alarmArr = {"不按规定使用灯光", "驾驶时拨打接听手持电话的", "机动车违反禁令标志指示的", "闯红灯", "机动车逆向行驶的", "机动车违反禁止标线指示的"}; + + @Override + public Object processData(TableViewConfig currView) { + + + String[] params = currView.getParams(); + String dataType = ToolUtil.isEmpty(params) ? "" : params[0]; + List> objectLast = new ArrayList<>(); + List> objectNow = new ArrayList<>(); + + switch (dataType) { + case "day": + params[0] = DateFormateUtil.getDayCycle(0); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getDayCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + + case "week": + + params[0] = DateFormateUtil.getWeekCycle(0).split(",")[1]; + String begtime1= DateFormateUtil.getWeekCycle(0).split(",")[0]; + String sql1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE t1.STATISTIC_TIME BETWEEN '"+begtime1 +"' AND {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sql1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getWeekCycle(-1).split(",")[1]; + String begtime2=DateFormateUtil.getWeekCycle(-1).split(",")[0]; + String sql2="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE t1.STATISTIC_TIME BETWEEN '"+begtime2 +"' AND {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sql2); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + case "month": + params[0] = DateFormateUtil.getMonthCycle(0); + String sqlM1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE DATE_FORMAT(t1.STATISTIC_TIME,'%Y-%m') = {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sqlM1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getMonthCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + case "year": + params[0] = DateFormateUtil.getYearCycle(0); + String sqlY1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE DATE_FORMAT(t1.STATISTIC_TIME,'%Y') = {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sqlY1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getYearCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + + default: + params[0] = DateFormateUtil.getDayCycle(0); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getDayCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + } + + if (ToolUtil.isNotEmpty(objectNow)) { + for (Map nowMap : objectNow) { + + for (Map lastMap : objectLast) { + + if ((nowMap.get("name") + "").equals(lastMap.get("name") + "")) { + + String percent = PercentUtils.percentBigDecimal(new BigDecimal(nowMap.get("value") + ""), new BigDecimal(lastMap.get("value") + "")); + + nowMap.put("percent", Double.parseDouble(percent.substring(0, percent.length() - 1))); + + break; + } + } + + if (ToolUtil.isEmpty(nowMap.get("percent"))) { + nowMap.put("percent", 1); + } + } + } else { + if (ToolUtil.isNotEmpty(objectLast)) { + for (Map lastMap : objectLast) { + lastMap.put("value", 0); + lastMap.put("percent", 0); + } + objectNow = objectLast; + } else {//若本次和上次都没有,取几个典型的交通事故 + + for (int i = 0; i <= 5; i++) { + Map dataMap = new HashMap<>(); + dataMap.put("name", alarmArr[i]); + dataMap.put("value", 0); + dataMap.put("percent", 0); + objectNow.add(dataMap); + } + } + } + + + return objectNow; + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java new file mode 100644 index 0000000..cf1fe50 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java @@ -0,0 +1,139 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.TableViewConfig; +import com.casic.missiles.modular.system.tools.DataSqlUtil; +import com.casic.missiles.modular.system.tools.DateFormateUtil; +import com.casic.missiles.modular.system.util.PercentUtils; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.*; + +/** + * @ClassName HttpDataHandler + * @Description 各类型违法事故排名 + * @Author lwh + * @Date 2021/1/21 16:31 + * @Version 1.0 + */ +@Component +public class CaseTypeRankDataHandlerAdapter extends AbstractDataHandlerAdapter { + + private static String[] alarmArr = {"不按规定使用灯光", "驾驶时拨打接听手持电话的", "机动车违反禁令标志指示的", "闯红灯", "机动车逆向行驶的", "机动车违反禁止标线指示的"}; + + @Override + public Object processData(TableViewConfig currView) { + + + String[] params = currView.getParams(); + String dataType = ToolUtil.isEmpty(params) ? "" : params[0]; + List> objectLast = new ArrayList<>(); + List> objectNow = new ArrayList<>(); + + switch (dataType) { + case "day": + params[0] = DateFormateUtil.getDayCycle(0); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getDayCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + + case "week": + + params[0] = DateFormateUtil.getWeekCycle(0).split(",")[1]; + String begtime1= DateFormateUtil.getWeekCycle(0).split(",")[0]; + String sql1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE t1.STATISTIC_TIME BETWEEN '"+begtime1 +"' AND {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sql1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getWeekCycle(-1).split(",")[1]; + String begtime2=DateFormateUtil.getWeekCycle(-1).split(",")[0]; + String sql2="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE t1.STATISTIC_TIME BETWEEN '"+begtime2 +"' AND {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sql2); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + case "month": + params[0] = DateFormateUtil.getMonthCycle(0); + String sqlM1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE DATE_FORMAT(t1.STATISTIC_TIME,'%Y-%m') = {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sqlM1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getMonthCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + case "year": + params[0] = DateFormateUtil.getYearCycle(0); + String sqlY1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE DATE_FORMAT(t1.STATISTIC_TIME,'%Y') = {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sqlY1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getYearCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + + default: + params[0] = DateFormateUtil.getDayCycle(0); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getDayCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + } + + if (ToolUtil.isNotEmpty(objectNow)) { + for (Map nowMap : objectNow) { + + for (Map lastMap : objectLast) { + + if ((nowMap.get("name") + "").equals(lastMap.get("name") + "")) { + + String percent = PercentUtils.percentBigDecimal(new BigDecimal(nowMap.get("value") + ""), new BigDecimal(lastMap.get("value") + "")); + + nowMap.put("percent", Double.parseDouble(percent.substring(0, percent.length() - 1))); + + break; + } + } + + if (ToolUtil.isEmpty(nowMap.get("percent"))) { + nowMap.put("percent", 1); + } + } + } else { + if (ToolUtil.isNotEmpty(objectLast)) { + for (Map lastMap : objectLast) { + lastMap.put("value", 0); + lastMap.put("percent", 0); + } + objectNow = objectLast; + } else {//若本次和上次都没有,取几个典型的交通事故 + + for (int i = 0; i <= 5; i++) { + Map dataMap = new HashMap<>(); + dataMap.put("name", alarmArr[i]); + dataMap.put("value", 0); + dataMap.put("percent", 0); + objectNow.add(dataMap); + } + } + } + + + return objectNow; + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/ConstructionByStateDataHandlerAdapter.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/ConstructionByStateDataHandlerAdapter.java new file mode 100644 index 0000000..b92dc10 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/ConstructionByStateDataHandlerAdapter.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.TableViewConfig; +import com.casic.missiles.modular.system.tools.DataSqlUtil; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * @ClassName HttpDataHandler + * @Description 工地-某年各状态工地数量 + * @Author lwh + * @Date 2021/1/21 16:31 + * @Version 1.0 + */ +@Component +public class ConstructionByStateDataHandlerAdapter extends AbstractDataHandlerAdapter { + + + private static String[] stateArr = {"在建", "未开工", "暂停", "竣工"}; + + @Override + public Object processData(TableViewConfig currView) { + + + Map mapObj = (Map) DataSqlUtil.processData(currView); + List> mapList = new ArrayList<>(); + + if (ToolUtil.isNotEmpty(mapObj)) { + + for (Map.Entry entry : mapObj.entrySet()) { + Map map = new HashMap<>(); + String mapKey = entry.getKey() + ""; + + switch (mapKey) { + case "CONSTRUCTION_NUM": + map.put("type", "在建"); + map.put("value", entry.getValue()); + break; + case "NOT_STARTED_NUM": + map.put("type", "未开工"); + map.put("value", entry.getValue()); + break; + case "COMPLETED_NUM": + map.put("type", "竣工"); + map.put("value", entry.getValue()); + break; + case "PAUSES_NUM": + map.put("type", "暂停"); + map.put("value", entry.getValue()); + break; + default: + break; + } + if (ToolUtil.isNotEmpty(map)) + mapList.add(map); + } + } else { + for (int i = 0; i < stateArr.length; i++) { + Map map = new HashMap<>(); + map.put("type", stateArr[i]); + map.put("value", 0); + mapList.add(map); + } + } + + return mapList; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java new file mode 100644 index 0000000..cf1fe50 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/CaseTypeRankDataHandlerAdapter.java @@ -0,0 +1,139 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.TableViewConfig; +import com.casic.missiles.modular.system.tools.DataSqlUtil; +import com.casic.missiles.modular.system.tools.DateFormateUtil; +import com.casic.missiles.modular.system.util.PercentUtils; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.*; + +/** + * @ClassName HttpDataHandler + * @Description 各类型违法事故排名 + * @Author lwh + * @Date 2021/1/21 16:31 + * @Version 1.0 + */ +@Component +public class CaseTypeRankDataHandlerAdapter extends AbstractDataHandlerAdapter { + + private static String[] alarmArr = {"不按规定使用灯光", "驾驶时拨打接听手持电话的", "机动车违反禁令标志指示的", "闯红灯", "机动车逆向行驶的", "机动车违反禁止标线指示的"}; + + @Override + public Object processData(TableViewConfig currView) { + + + String[] params = currView.getParams(); + String dataType = ToolUtil.isEmpty(params) ? "" : params[0]; + List> objectLast = new ArrayList<>(); + List> objectNow = new ArrayList<>(); + + switch (dataType) { + case "day": + params[0] = DateFormateUtil.getDayCycle(0); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getDayCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + + case "week": + + params[0] = DateFormateUtil.getWeekCycle(0).split(",")[1]; + String begtime1= DateFormateUtil.getWeekCycle(0).split(",")[0]; + String sql1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE t1.STATISTIC_TIME BETWEEN '"+begtime1 +"' AND {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sql1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getWeekCycle(-1).split(",")[1]; + String begtime2=DateFormateUtil.getWeekCycle(-1).split(",")[0]; + String sql2="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE t1.STATISTIC_TIME BETWEEN '"+begtime2 +"' AND {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sql2); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + case "month": + params[0] = DateFormateUtil.getMonthCycle(0); + String sqlM1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE DATE_FORMAT(t1.STATISTIC_TIME,'%Y-%m') = {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sqlM1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getMonthCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + case "year": + params[0] = DateFormateUtil.getYearCycle(0); + String sqlY1="SELECT SUM(t1.alarm_num) AS value,IFNULL(t2.name,'其他') AS name \n" + + "FROM casic_urban_governance.traffic_control_crossing_alarm_type_day t1\n" + + "LEFT JOIN casic_urban_governance.traffic_control_crossing_dict t2\n" + + "ON t1.alarm_type = t2.key\n" + + "WHERE DATE_FORMAT(t1.STATISTIC_TIME,'%Y') = {0} GROUP BY t1.ALARM_TYPE"; + currView.setSqlContent(sqlY1); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getYearCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + + default: + params[0] = DateFormateUtil.getDayCycle(0); + objectNow = (List>) DataSqlUtil.processData(currView); + params[0] = DateFormateUtil.getDayCycle(-1); + objectLast = (List>) DataSqlUtil.processData(currView); + break; + } + + if (ToolUtil.isNotEmpty(objectNow)) { + for (Map nowMap : objectNow) { + + for (Map lastMap : objectLast) { + + if ((nowMap.get("name") + "").equals(lastMap.get("name") + "")) { + + String percent = PercentUtils.percentBigDecimal(new BigDecimal(nowMap.get("value") + ""), new BigDecimal(lastMap.get("value") + "")); + + nowMap.put("percent", Double.parseDouble(percent.substring(0, percent.length() - 1))); + + break; + } + } + + if (ToolUtil.isEmpty(nowMap.get("percent"))) { + nowMap.put("percent", 1); + } + } + } else { + if (ToolUtil.isNotEmpty(objectLast)) { + for (Map lastMap : objectLast) { + lastMap.put("value", 0); + lastMap.put("percent", 0); + } + objectNow = objectLast; + } else {//若本次和上次都没有,取几个典型的交通事故 + + for (int i = 0; i <= 5; i++) { + Map dataMap = new HashMap<>(); + dataMap.put("name", alarmArr[i]); + dataMap.put("value", 0); + dataMap.put("percent", 0); + objectNow.add(dataMap); + } + } + } + + + return objectNow; + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/ConstructionByStateDataHandlerAdapter.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/ConstructionByStateDataHandlerAdapter.java new file mode 100644 index 0000000..b92dc10 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/ConstructionByStateDataHandlerAdapter.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.TableViewConfig; +import com.casic.missiles.modular.system.tools.DataSqlUtil; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * @ClassName HttpDataHandler + * @Description 工地-某年各状态工地数量 + * @Author lwh + * @Date 2021/1/21 16:31 + * @Version 1.0 + */ +@Component +public class ConstructionByStateDataHandlerAdapter extends AbstractDataHandlerAdapter { + + + private static String[] stateArr = {"在建", "未开工", "暂停", "竣工"}; + + @Override + public Object processData(TableViewConfig currView) { + + + Map mapObj = (Map) DataSqlUtil.processData(currView); + List> mapList = new ArrayList<>(); + + if (ToolUtil.isNotEmpty(mapObj)) { + + for (Map.Entry entry : mapObj.entrySet()) { + Map map = new HashMap<>(); + String mapKey = entry.getKey() + ""; + + switch (mapKey) { + case "CONSTRUCTION_NUM": + map.put("type", "在建"); + map.put("value", entry.getValue()); + break; + case "NOT_STARTED_NUM": + map.put("type", "未开工"); + map.put("value", entry.getValue()); + break; + case "COMPLETED_NUM": + map.put("type", "竣工"); + map.put("value", entry.getValue()); + break; + case "PAUSES_NUM": + map.put("type", "暂停"); + map.put("value", entry.getValue()); + break; + default: + break; + } + if (ToolUtil.isNotEmpty(map)) + mapList.add(map); + } + } else { + for (int i = 0; i < stateArr.length; i++) { + Map map = new HashMap<>(); + map.put("type", stateArr[i]); + map.put("value", 0); + mapList.add(map); + } + } + + return mapList; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/tools/DateFormateUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/tools/DateFormateUtil.java new file mode 100644 index 0000000..135e1e5 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/tools/DateFormateUtil.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.system.tools; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +public class DateFormateUtil { + + public static final int TIME_DAY = 1; + + public static final int TIME_WEEK = 2; + + public static final int TIME_MONTH = 3; + + public static final int TIME_QUARTER = 4; + + public static final int TIME_YEAR = 5; + + /** + * 空构造 + */ + public DateFormateUtil() { + } + + /** + * 调度函数 + * @param date + * @param dateDimension + * @return + */ + public static String schedulingFunction(String date, Integer dateDimension) { + Integer flag = Integer.valueOf(date); + switch (dateDimension) { + case TIME_DAY : + return getDayCycle(flag); + case TIME_WEEK : + return getWeekCycle(flag); + case TIME_MONTH : + return getMonthCycle(flag); + case TIME_QUARTER : + return getQuarterCycle(flag); + case TIME_YEAR : + return getYearCycle(flag); + default: + return ""; + } + } + + /** + * 获取上一日、本日、下一日 + * @param flag + * @return + */ + public static String getDayCycle(Integer flag) { + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, flag); + Date time = cal.getTime(); + return new SimpleDateFormat("yyyy-MM-dd").format(time); + } + + /** + * 获取上周、本周、下周 + * @param flag + * @return + */ + public static String getWeekCycle(Integer flag) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + cal.add(Calendar.WEEK_OF_MONTH, flag); + Date time = cal.getTime(); + String format = new SimpleDateFormat("yyyy-MM-dd").format(time); + cal.add(Calendar.WEEK_OF_MONTH, 1); + time = cal.getTime(); + + return format + ","+ new SimpleDateFormat("yyyy-MM-dd").format(time); + } + + /** + * 获取上月,本月,下月 + * @param flag + * @return + */ + public static String getMonthCycle(Integer flag) { + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.MONTH, flag); + Date time = cal.getTime(); + String format = new SimpleDateFormat("yyyy-MM").format(time); + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + return format ; +// return format + "-01," + format + "-" + cal.get(Calendar.DAY_OF_MONTH); + } + + /** + * 获取上季度,本季度,下季度 + * @param flag + * @return + */ + public static String getQuarterCycle(Integer flag) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.MONTH, ((int) cal.get(Calendar.MONTH) / 3) * 3); + cal.set(Calendar.DAY_OF_MONTH, 1); + int month = cal.get(Calendar.MONTH) + 1; + int deviation = flag * 3; + int sum = month + deviation; + int quotient = sum / 12; + if (sum < 0) { + int i = month + Math.abs(quotient) * 12 + deviation; + cal.add(Calendar.YEAR, quotient); + cal.set(Calendar.MONTH, i - 1); + } else { + int i = month - Math.abs(quotient) * 12 + deviation; + cal.add(Calendar.YEAR, quotient); + cal.set(Calendar.MONTH, i - 1); + } + String format = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); + cal.add(Calendar.MONTH, 3); + return format + "," + new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); + } + + /** + * 获取上一年,本年,下一年 + * @param flag + * @return + */ + public static String getYearCycle(Integer flag) { + Calendar cal = Calendar.getInstance(); + return (cal.get(Calendar.YEAR) + flag)+""; +// return (cal.get(Calendar.YEAR) + flag) + "-01-01," + (cal.get(Calendar.YEAR) + flag + 1) + "-01-01"; + } + + + /* + * 计算时间周的开始和结束时间(上周,本周,下周) + * param flag -1 上周 2是下周 + * return date + */ + public static String getWeek(int flag){ + Calendar gc = new GregorianCalendar(); + gc.add(3, flag); + Date week = null; + if (gc.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + gc.add(5, 1); + week = gc.getTime(); + } else if (gc.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + gc.add(5, 2); + week = gc.getTime(); + } else if (gc.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + gc.add(5, 3); + week = gc.getTime(); + } else if (gc.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + gc.add(5, -3); + week = gc.getTime(); + } else if (gc.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + gc.add(5, -2); + week = gc.getTime(); + } else if (gc.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + gc.add(5, -1); + week = gc.getTime(); + } else { + week = gc.getTime(); + } + return new SimpleDateFormat("yyyy-MM-dd").format(week); + } + + +}