ComputeSunRiseSet.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.persagy.functions.weather.business.v2021;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.springframework.stereotype.Service;
  8. import com.persagy.core.enumeration.SpecialOperator;
  9. import com.persagy.framework.construct.RequestProcessor;
  10. import com.persagy.framework.dto.DataQueryParam;
  11. import com.persagy.framework.util.ConfigUtil;
  12. import com.persagy.framework.util.DateUtils;
  13. import com.persagy.framework.util.SunComputeUtil;
  14. import com.persagy.functions.weather.constant.Const;
  15. import com.persagy.functions.weather.dto.CityDTO;
  16. /**
  17. * 日出日落数据
  18. */
  19. @Service("sunRiseSet")
  20. public class ComputeSunRiseSet implements RequestProcessor {
  21. @Override
  22. public Object handle(DataQueryParam param) throws Exception {
  23. List<Map<String, Object>> resultList = new ArrayList<>();
  24. Map<String, Object> paramMap = analysisParam(param);
  25. Date dayStart = (Date) paramMap.get("dayStart");
  26. Date dayEnd = (Date) paramMap.get("dayEnd");
  27. Double longitude = (Double) paramMap.get("longitude");
  28. Double latitude = (Double) paramMap.get("latitude");
  29. Date dayIndex = dayStart;
  30. do {
  31. Map<String, Object> item = new HashMap<>();
  32. item.put("sunRise", SunComputeUtil.getSunrise(longitude, latitude, dayIndex));
  33. item.put("sunSet", SunComputeUtil.getSunset(longitude, latitude, dayIndex));
  34. resultList.add(item);
  35. dayIndex = DateUtils.getDayOff(dayIndex, 1);
  36. }while(dayIndex.before(dayEnd));
  37. return resultList;
  38. }
  39. private Map<String, Object> analysisParam(DataQueryParam param) throws Exception {
  40. Map<String, Object> result = new HashMap<>();
  41. String cityName = param.cityName;
  42. String cityCode = param.cityCode;
  43. String projectId = param.projectId;
  44. Double longitude = param.longitude;
  45. Double latitude = param.longitude;
  46. Date dayStart = param.timeSpan.timeLeft;
  47. Date dayEnd = param.timeSpan.timeRight;
  48. if(param.timeSpan.optLeft == SpecialOperator.$gt) {
  49. dayStart = DateUtils.getDayOff(dayStart, 1);
  50. }
  51. if(param.timeSpan.optRight == SpecialOperator.$lte) {
  52. dayEnd = DateUtils.getDayOff(dayEnd, 1);
  53. }
  54. if(null != cityCode && cityCode.length() != 6) {
  55. throw new Exception(Const.ErrorTag.paramUnrecognized + " : cityCode="+cityCode);
  56. }
  57. if(null != projectId && projectId.length() != 12) {
  58. throw new Exception(Const.ErrorTag.paramUnrecognized + " : projectId="+projectId);
  59. }
  60. if((longitude != null) ^ (latitude != null)) {
  61. throw new Exception(Const.ErrorTag.paramMis + " longitude or latitude");
  62. }
  63. if(!param.timeSpanCheck(366)) {
  64. throw new Exception(Const.ErrorTag.timeToLong);
  65. }
  66. result.put("dayStart", dayStart);
  67. result.put("dayEnd", dayEnd);
  68. if(longitude != null) {
  69. result.put("longitude", longitude);
  70. result.put("latitude", latitude);
  71. }else {
  72. CityDTO cityInfo = ConfigUtil.dicCityObjMap().get(cityCode);
  73. if(null == cityInfo && projectId != null) {
  74. cityInfo = ConfigUtil.dicCityObjMap().get(projectId.substring(2, 8));
  75. }
  76. if(null == cityInfo && cityName != null) {
  77. cityInfo = ConfigUtil.dicCityObjMap().get(ConfigUtil.dicName2DicCodeMap().get(cityName));
  78. if(null == cityInfo) {
  79. for(String name : ConfigUtil.dicName2DicCodeMap().keySet()) {
  80. if(name.startsWith(cityName) || cityName.startsWith(name)) {
  81. cityInfo = ConfigUtil.dicCityObjMap().get(ConfigUtil.dicName2DicCodeMap().get(name));
  82. break;
  83. }
  84. }
  85. }
  86. }
  87. if(null == cityInfo || cityInfo.getLongitude() == null || cityInfo.getLatitude() == null) {
  88. throw new Exception(Const.ErrorTag.cityUnsupport);
  89. }
  90. result.put("longitude", Double.parseDouble(cityInfo.getLongitude()));
  91. result.put("latitude", Double.parseDouble(cityInfo.getLatitude()));
  92. }
  93. return result;
  94. }
  95. }