bySolar function

FunctionalAstrolabe bySolar(
  1. String solarDate,
  2. int timeIndex,
  3. GenderName gender, [
  4. bool fixLeap = true,
])

通过阳历获取星盘信息

@param solarDateStr 阳历日期【YYYY-M-D】 @param timeIndex 出生时辰序号【0~12】 @param gender 性别【男|女】 @param fixLeap 是否调整闰月情况【默认 true】,假入调整闰月,则闰月的前半个月算上个月,后半个月算下个月 @param language 输出语言 @returns 星盘信息

Implementation

FunctionalAstrolabe bySolar(
  String solarDate,
  int timeIndex,
  GenderName gender, [
  bool fixLeap = true,
]) {
  List<IFunctionalPalace> palaces = [];
  var heavenlyEarthlyBranch = getHeavenlyStemAndEarthlyBranchSolarDate(
    solarDate,
    timeIndex,
    getConfig().yearDivide,
  );
  var earthlyBranchOfYear = getMyEarthlyBranchNameFrom(
    heavenlyEarthlyBranch.yearly[1],
  );
  var heavenlyStemOfYear = getMyHeavenlyStemNameFrom(
    heavenlyEarthlyBranch.yearly[0],
  );
  final params = AstrolabeParams(
    solarDate: solarDate,
    timeIndex: timeIndex,
    fixLeap: fixLeap,
    gender: gender,
  );
  var soulAndBody = getSoulAndBody(params);
  final palaceNames = getPalaceNames(soulAndBody.soulIndex);
  final majorStars = getMajorStar(params);
  final minorStars = getMinorStar(solarDate, timeIndex, fixLeap);
  final adjectiveStars = getAdjectiveStar(params);
  final changSheng12 = getChangSheng12(params);
  final boshi12 = getBoShi12(solarDate, gender);
  final yearly12Maps = getYearly12(
    solarDate,
  ); // {"jiangqian12": jiangqian12, "suiqian12": suiqian12};
  final jiangqian12 = yearly12Maps["jiangqian12"] ?? [];
  final suiqian12 = yearly12Maps["suiqian12"] ?? [];
  final horoscope = getHoroscope(params);
  final decadals = horoscope?["decades"];
  final ages = horoscope?["ages"];
  List<YearlyStemsBranches> yearlyStemsBranches = horoscope?["yearlies"];
  for (int i = 0; i < 12; i++) {
    final heavenlyStemOfPalace =
        heavenlyStems[fixIndex(
          heavenlyStems.indexOf(soulAndBody.heavenlyStenName.key) -
              soulAndBody.soulIndex +
              i,
          max: 10,
        )];
    final earthlyBranchOfPalace = earthlyBranches[fixIndex(2 + i)];
    bool isOriginalPalace =
        !["ziEarthly", "chouEarthly"].contains(earthlyBranchOfPalace) &&
        heavenlyStemOfPalace == heavenlyStemOfYear.key;
    // final filerMajorStars =
    //     majorStars[i] +
    //     minorStars[i]
    //         .where((e) => ['luCun', 'tianMa'].contains(e.type.key))
    //         .toList();
    final yealyAges =
        yearlyStemsBranches
            .firstWhere((e) => e.earthlyBranchName.key == earthlyBranchOfPalace)
            .ages;
    palaces.add(
      FunctionalPalace(
        Palace(
          index: i,
          name: palaceNames[i],
          isBodyPalace: soulAndBody.bodyIndex == i,
          isOriginalPalace: isOriginalPalace,
          heavenlySten: getMyHeavenlyStemNameFrom(heavenlyStemOfPalace),
          earthlyBranch: getMyEarthlyBranchNameFrom(earthlyBranchOfPalace),
          majorStars: majorStars[i],
          minorStars: minorStars[i],
          adjectiveStars: adjectiveStars[i],
          changShen12: changSheng12[i],
          boShi12: boshi12[i],
          jiangQian12: jiangqian12[i],
          suiQian12: suiqian12[i],
          decadal: decadals[i],
          ages: ages[i],
          yearlies: yealyAges,
        ),
      ),
    );
  }

  // 宫位从寅宫开始,而寅宫的索引位2,所以需要加2
  final earthlyBranchOfSoulPalace =
      earthlyBranches[fixIndex(soulAndBody.soulIndex + 2)];
  final earthlyBranchOfBoudyPalace =
      earthlyBranches[fixIndex(soulAndBody.bodyIndex + 2)];
  var soulStar = getStarNameFrom(
    earthlyBranchesMap[earthlyBranchOfSoulPalace]?["soul"],
  );
  final chineseDate = getHeavenlyStemAndEarthlyBranchSolarDate(
    solarDate,
    timeIndex,
    getConfig().yearDivide,
  );
  final lunarDate = solar2Lunar(solarDate);
  final result = FunctionalAstrolabe(
    Astrolabe(
      gender: gender.title,
      solarDate: solarDate,
      lunarDate: lunarDate.toChString(true),
      chineseDate: chineseDate.toString(),
      rawDates: LunarDateObj(lunarDate: lunarDate, chineseDate: chineseDate),
      time: chineseTimes[timeIndex].tr,
      timeRage: timeRanges[timeIndex],
      sign: getSignBySolarDate(solarDate),
      zodiac: getZodiacBySolarDate(solarDate).tr,
      earthlyBranchOfSoulPalace: getMyEarthlyBranchNameFrom(
        earthlyBranchOfSoulPalace,
      ),
      earthlyBranchOfBodyPalace: getMyEarthlyBranchNameFrom(
        earthlyBranchOfBoudyPalace,
      ),
      soul: getStarNameFrom(
        earthlyBranchesMap[earthlyBranchOfSoulPalace]?["soul"],
      ),
      body: getStarNameFrom(
        earthlyBranchesMap[earthlyBranchOfYear.key]?["body"],
      ),
      fiveElementClass: getFiveElementClass(
        soulAndBody.heavenlyStenName,
        soulAndBody.earthlyBranchName,
      ),
      palaces: palaces,
      copyright: "copyright @2024",
    ),
  );

  return result;
}