yixue.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import math
  2. import time
  3. from datetime import datetime
  4. from time import mktime
  5. import FangAnLogic
  6. import GaoNengLogic
  7. import GeJuLogic
  8. import JianKangLogic
  9. import JieGouLogic
  10. import PowerLogic
  11. import ShenShaLogic
  12. import SiZhuLogic
  13. import SimpleLuckyDay
  14. import XingGeLogic
  15. import logic
  16. from DataCenter import DataCenter
  17. from LocalModel import BaZi, SiZhuInfoRequest
  18. from model import Wannianli, Taiyangpianyi
  19. # TODO 入口函数
  20. def fill_sizhu_in_bazi(bazi: BaZi, dc: DataCenter):
  21. # 四柱
  22. SiZhuLogic.fill_sizhu(bazi, dc)
  23. # 初步罗列高能关系(不计算力量对比,用来更新后续的墓库状态)
  24. dc.list_gaoneng()
  25. # 然后根据高能关系更新墓库状态
  26. dc.update_muku_state()
  27. # 然后可以开始更新五行十神力量分布了(涉及power计算,所以要先确定墓库状态)
  28. dc.update_counter()
  29. # 能量
  30. PowerLogic.calc_powers(bazi, dc)
  31. # 高能
  32. GaoNengLogic.check_gaoneng(bazi, dc)
  33. # 神煞
  34. ShenShaLogic.check_shenshas(bazi)
  35. # 墓库
  36. SiZhuLogic.check_muku(bazi, dc)
  37. # 确定墓库状态之后,更新藏干能量
  38. SiZhuLogic.update_powers(bazi, dc)
  39. # 计算高能关系带来的能量变动
  40. GaoNengLogic.update_gaoneng_power(bazi, dc)
  41. # 性格
  42. XingGeLogic.fill_xingge(bazi)
  43. # 格局
  44. GeJuLogic.fill_geju(bazi, dc)
  45. # 八字结构
  46. JieGouLogic.calc_jiegou(bazi, dc)
  47. # 健康
  48. JianKangLogic.check_jiankang(bazi)
  49. # 方案
  50. FangAnLogic.calc_fangan(bazi, dc)
  51. # 近日运势
  52. SimpleLuckyDay.calc_simple_lucky_day(bazi, dc)
  53. # 生成内容
  54. # ContentLogic.createContent(bazi)
  55. def __get_date_time(dt: str):
  56. v = time.strptime(dt, "%Y-%m-%d %H:%M")
  57. return datetime.fromtimestamp(mktime(v))
  58. def __get_date_time2(dt: str):
  59. v = time.strptime(dt, "%Y-%m-%d %H:%M:%S")
  60. return datetime.fromtimestamp(mktime(v))
  61. def calc_date_of_sizhu(request: SiZhuInfoRequest):
  62. dtm = __get_date_time(request.datetime)
  63. startDtm = __get_date_time2(request.startDate)
  64. # print("地区起始时间:", startDtm)
  65. # print(dtm.year, dtm.month, dtm.day, dtm.hour, dtm.minute, request.weidu, request.jingdu, request.location)
  66. dts = Wannianli.select().where(Wannianli.nian == dtm.year, Wannianli.yue == dtm.month, Wannianli.ri == dtm.day)
  67. # aifs = AreaInfo.select().where(AreaInfo.sheng == request.sheng, AreaInfo.shi == request.shi,
  68. # AreaInfo.qu == request.qu)
  69. tys = Taiyangpianyi.select().where(Taiyangpianyi.month == dtm.month, Taiyangpianyi.day == dtm.day)
  70. if len(dts) > 0 and len(tys) > 0:
  71. # 获得该地区在1月1日0点0分的时间,这个作为基准时间
  72. # startHour = aifs[0].hour
  73. # startMin = aifs[0].minute
  74. # startSec = aifs[0].second
  75. # print("00:00 基准时间", request.sheng, request.shi, request.qu, startHour, startMin, startSec)
  76. # 计算日期在这个时间上的偏差值,这个和地区无关,只看365天中太阳的位置计算出的总偏差秒数
  77. # 这个时间仍然是以0点0分为基准的
  78. diffMin = math.trunc(tys[0].diff / 60)
  79. diffSec = tys[0].diff - diffMin * 60
  80. # print(dtm.month, dtm.day, "太阳偏移秒差异", tys[0].diff, diffMin, diffSec)
  81. import datetime
  82. # 计算上面2个结果调整后的这一天0点0分的时间
  83. dtmArg1 = datetime.timedelta(hours=0, minutes=diffMin, seconds=diffSec)
  84. startDtm -= dtmArg1
  85. # print(dtm.month, dtm.day, "00:00", startDtm)
  86. # print(dtm.hour, dtm.minute, dtm.second)
  87. # 再追加上当前的时分
  88. dtmArg2 = datetime.timedelta(hours=dtm.hour, minutes=dtm.minute, seconds=dtm.second)
  89. startDtm += dtmArg2
  90. dtm += dtmArg1
  91. hfd = logic.get_hour_of_day(dts[0].ri_gan, startDtm.hour)
  92. request.texts = [
  93. dts[0].nian_gan, dts[0].yue_gan,
  94. dts[0].ri_gan, hfd[0],
  95. dts[0].nian_zhi, dts[0].yue_zhi,
  96. dts[0].ri_zhi, hfd[1],
  97. ]
  98. return startDtm
  99. def next_tiangan(tiangan: str):
  100. return SiZhuLogic.next_tiangan(tiangan)
  101. def next_dizhi(dizhi: str):
  102. return SiZhuLogic.next_dizhi(dizhi)
  103. def get_dizhi_by_hour(hour: int):
  104. return SiZhuLogic.get_dizhi_by_hour(hour)
  105. def get_tiangan_start_of_hour(day_tiangan: str):
  106. return SiZhuLogic.get_tiangan_start_of_hour(day_tiangan)
  107. def get_tiangan_by_hour(start_tiangan: str, hour: int):
  108. return SiZhuLogic.get_tiangan_by_hour(start_tiangan, hour)