class HuangJiPlanner: """ 皇极经世时辰规划模块 基于邵雍《皇极经世》元会运世体系,计算年、月、日、时卦象,并整合决策策略 """ # 皇极经世 60 卦序列 (剔除乾坤坎离四正卦) SEQUENCE = [ "复", "颐", "屯", "益", "震", "噬嗑", "随", "无妄", "明夷", "贲", "既济", "家人", "丰", "革", "同人", "临", "损", "节", "中孚", "归妹", "睽", "兑", "履", "泰", "大畜", "需", "小畜", "大壮", "大有", "夬", "姤", "大过", "鼎", "恒", "巽", "井", "蛊", "升", "讼", "困", "未济", "解", "涣", "蒙", "师", "遁", "咸", "旅", "小过", "渐", "蹇", "艮", "谦", "否", "萃", "晋", "豫", "观", "比", "剥" ] # 卦象属性映射:(类型, 建议方向, 吉凶程度) # 类型: 1:进取, 2:守成, 3:变动, 4:阻碍 HEX_PROPS = { "复": (1, "万物复苏,宜制定新计划", "吉"), "颐": (2, "关注养生与口实,宜守静", "中"), "屯": (4, "创业维艰,宜寻求导师指引", "凶"), "益": (1, "利涉大川,宜积极开拓", "大吉"), "震": (3, "声震百里,宜迅速行动,防惊恐", "中"), "噬嗑": (1, "排除障碍,宜强力执行", "中"), "随": (3, "顺应自然,宜跟随智者", "吉"), "无妄": (2, "不期而获,宜守正不阿", "吉"), "明夷": (4, "黑暗降临,宜韬光养晦", "凶"), "贲": (2, "装饰文饰,宜小事,不宜大作", "吉"), "既济": (2, "功成名就,宜守成防衰", "吉"), "家人": (2, "齐家有道,宜处理内部事务", "吉"), "丰": (1, "盛大之时,宜果断决策", "大吉"), "革": (3, "改革创新,宜去旧布新", "吉"), "同人": (1, "志同道合,宜社交与合伙", "吉"), "临": (1, "上亲下顺,宜视察与统筹", "吉"), "损": (2, "减损求益,宜诚信节俭", "中"), "节": (2, "适当节制,宜量力而行", "中"), "中孚": (2, "诚信感应,宜签约与谈判", "吉"), "归妹": (4, "不得其位,宜谨慎防错", "凶"), "睽": (4, "背离异见,宜求大同存小异", "凶"), "兑": (3, "喜悦交流,宜公关与表达", "吉"), "履": (2, "步履维艰,宜如履薄冰", "中"), "泰": (1, "阴阳交泰,万事亨通", "大吉"), "大畜": (2, "积蓄德行,宜学习研究", "吉"), "需": (2, "需待时机,宜饮食宴乐", "吉"), "小畜": (2, "力量尚微,宜积蓄实力", "中"), "大壮": (1, "声势壮大,宜积极进取", "吉"), "大有": (1, "阳光普照,宜收获与扩张", "大吉"), "夬": (1, "决断刚行,宜清除隐患", "中"), "姤": (3, "不期而遇,防小人暗长", "中"), "大过": (4, "负担过重,宜寻求出路", "凶"), "鼎": (1, "革故鼎新,宜稳重创业", "吉"), "恒": (2, "持之以恒,宜保持现状", "吉"), "巽": (3, "柔顺随风,宜小步快走", "吉"), "井": (2, "安分守己,宜共享资源", "中"), "蛊": (4, "整顿内部,宜大刀阔斧", "凶"), "升": (1, "顺势攀升,宜步步高升", "大吉"), "讼": (4, "口舌争讼,宜讲和避争", "凶"), "困": (4, "处境艰难,宜坚定信念", "凶"), "未济": (3, "事业未成,宜重新出发", "中"), "解": (3, "解危脱困,宜宽赦与行动", "吉"), "涣": (3, "涣散疏通,宜化解矛盾", "中"), "蒙": (2, "启蒙教育,宜寻师访友", "吉"), "师": (1, "兴师动众,宜严格管理", "中"), "遁": (2, "退避守静,宜隐退避害", "中"), "咸": (1, "相互感应,宜情感交流", "吉"), "旅": (3, "羁旅在外,宜守正防失", "中"), "小过": (2, "过犹不及,宜小事不宜大", "中"), "漸": (1, "循序渐进,宜长线投资", "吉"), "蹇": (4, "前有高山,宜回身避难", "凶"), "艮": (2, "静止止步,宜安分守己", "中"), "谦": (2, "谦谦君子,万事大吉", "大吉"), "否": (4, "天地不通,宜退守不出", "大凶"), "萃": (1, "精英荟萃,宜团队建设", "吉"), "晋": (1, "加官进爵,宜展示才华", "大吉"), "豫": (1, "悦豫顺动,宜旅游庆贺", "吉"), "观": (2, "观摩考察,宜深思熟虑", "中"), "比": (2, "亲近依附,宜寻找靠山", "吉"), "剥": (4, "剥落衰颓,宜谨慎防守", "大凶") } BASE_YEAR = 2024 BASE_YEAR_HEX_IDX = 30 def __init__(self, lunar_data): self.lunar = lunar_data self.year = int(lunar_data['date'].split('-')[0]) self.month = lunar_data['lunar_month_num'] self.day = lunar_data['lunar_day_num'] def get_year_hex(self): offset = self.year - self.BASE_YEAR idx = (self.BASE_YEAR_HEX_IDX + offset) % 60 return self.SEQUENCE[idx] def get_month_hex(self): year_hex = self.get_year_hex() # 12个月,每个月5个卦 start_idx = (self.SEQUENCE.index(year_hex) + (self.month - 1) * 5) % 60 return self.SEQUENCE[start_idx] def get_day_hex(self): month_hex = self.get_month_hex() # 月卦之后顺序排列 start_idx = self.SEQUENCE.index(month_hex) day_offset = (self.day - 1) // 5 idx = (start_idx + day_offset) % 60 return self.SEQUENCE[idx] def get_shichen_hex_advice(self, day_hex, shichen_idx): """ 根据日卦和时辰序号(0-11)计算当前时段的卦象和建议 皇极经世中,日卦管 12 时辰,每爻管 2 个时辰 """ day_idx = self.SEQUENCE.index(day_hex) line_idx = shichen_idx // 2 # 实际上可以通过复杂的爻变逻辑,这里采用映射 SEQUENCE 以获得更丰富的动态感 # 模拟变卦:每两个时辰卦象顺延一位 shichen_hex_idx = (day_idx + shichen_idx) % 60 shichen_hex = self.SEQUENCE[shichen_hex_idx] prop_type, prop_advice, prop_luck = self.HEX_PROPS.get(shichen_hex, (2, "宜稳重", "中")) # 结合爻位的微调建议 line_advices = ["初爻:萌芽阶段,宜谨慎及早准备", "二爻:渐入佳境,宜守正获益", "三爻:过激倾向,宜适可而止", "四爻:寻找契合,宜向上突破", "五爻:极盛之位,宜中庸决策", "上爻:物极必反,宜居安思危"] return { "hex": shichen_hex, "luck": prop_luck, "type": prop_type, "advice": prop_advice, "line_note": line_advices[line_idx] } def generate_schedule(self): day_hex = self.get_day_hex() shichens = [ ("子", "23:00 - 01:00"), ("丑", "01:00 - 03:00"), ("寅", "03:00 - 05:00"), ("卯", "05:00 - 07:00"), ("辰", "07:00 - 09:00"), ("巳", "09:00 - 11:00"), ("午", "11:00 - 13:00"), ("未", "13:00 - 15:00"), ("申", "15:00 - 17:00"), ("酉", "17:00 - 19:00"), ("戌", "19:00 - 21:00"), ("亥", "21:00 - 23:00") ] schedule = [] for i, (name, time_range) in enumerate(shichens): advice_data = self.get_shichen_hex_advice(day_hex, i) schedule.append({ "shichen": name, "time": time_range, "hex": advice_data["hex"], "luck": advice_data["luck"], "type": advice_data["type"], "advice": advice_data["advice"], "line_note": advice_data["line_note"] }) return { "year_hex": self.get_year_hex(), "month_hex": self.get_month_hex(), "day_hex": day_hex, "schedule": schedule }