Initial commit: 玄学推演项目
This commit is contained in:
commit
165494d98e
107 files changed
+50801
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,36 @@
|
||||
package xuan.core.bazi.maps;
|
||||
|
||||
/**
|
||||
* 八字 - 大运流年常量
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class BaZiDaYunLiuNianMap {
|
||||
|
||||
/**
|
||||
* 十二节
|
||||
*/
|
||||
public static final String[] SHI_ER_JIE = {"立春", "惊蛰", "清明", "立夏", "芒种", "小暑", "立秋", "白露", "寒露", "立冬", "大雪", "小寒"};
|
||||
|
||||
/**
|
||||
* 十二公历月
|
||||
*/
|
||||
public static final String[] SHI_ER_SOLAR_MONTH = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "1"};
|
||||
|
||||
/**
|
||||
* 十二时
|
||||
*/
|
||||
public static final String[] SHI_ER_SHI = {"23~1时", "1~3时", "3~5时", "5~7时", "7~9时", "9~11时", "11~13时", "13~15时", "15~17时", "17~19时", "19~21时", "21~23时"};
|
||||
|
||||
/**
|
||||
* 十二时
|
||||
*/
|
||||
public static final Integer[] SHI_ER_SHI_2 = {23, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21};
|
||||
|
||||
/**
|
||||
* 十二地支汉代命名
|
||||
*/
|
||||
public static final String[] DI_ZHI_HAN_MING = {"夜半", "鸡鸣", "平旦", "日出", "食时", "隅中", "日中", "日昳", "晡时", "日入", "黄昏", "人定"};
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,230 @@
|
||||
package xuan.core.bazi.maps;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 八字 - 干支留意常量
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class BaZiGanZhiLiuYiMap {
|
||||
|
||||
/**
|
||||
* 天干相生(天干+天干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_GAN_XIANG_SHENG = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("甲丙", "甲丙相生");
|
||||
put("甲丁", "甲丁相生");
|
||||
put("乙丙", "乙丙相生");
|
||||
put("乙丁", "乙丁相生");
|
||||
put("丙戊", "丙戊相生");
|
||||
put("丙己", "丙己相生");
|
||||
put("丁戊", "丁戊相生");
|
||||
put("丁己", "丁己相生");
|
||||
put("戊庚", "戊庚相生");
|
||||
put("戊辛", "戊辛相生");
|
||||
put("己庚", "己庚相生");
|
||||
put("己辛", "己辛相生");
|
||||
put("庚壬", "庚壬相生");
|
||||
put("庚癸", "庚癸相生");
|
||||
put("辛壬", "辛壬相生");
|
||||
put("辛癸", "辛癸相生");
|
||||
put("壬甲", "壬甲相生");
|
||||
put("壬乙", "壬乙相生");
|
||||
put("癸甲", "癸甲相生");
|
||||
put("癸乙", "癸乙相生");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天干相合(天干+天干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_GAN_XIANG_HE = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("甲己", "甲己合化土");
|
||||
put("乙庚", "乙庚合化金");
|
||||
put("丙辛", "丙辛合化水");
|
||||
put("丁壬", "丁壬合化木");
|
||||
put("戊癸", "戊癸合化火");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天干相冲(天干+天干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_GAN_XIANG_CHONG = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("甲庚", "甲庚相冲");
|
||||
put("乙辛", "乙辛相冲");
|
||||
put("丙壬", "丙壬相冲");
|
||||
put("丁癸", "丁癸相冲");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天干相克(天干+天干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_GAN_XIANG_KE = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("甲戊", "甲戊相克");
|
||||
put("乙己", "乙己相克");
|
||||
put("丙庚", "丙庚相克");
|
||||
put("丁辛", "丁辛相克");
|
||||
put("戊壬", "戊壬相克");
|
||||
put("己癸", "己癸相克");
|
||||
put("庚甲", "庚甲相克");
|
||||
put("辛乙", "辛乙相克");
|
||||
put("壬丙", "壬丙相克");
|
||||
put("癸丁", "癸丁相克");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支半合(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_BAN_HE = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("寅午", "寅午半合火局");
|
||||
put("申子", "申子半合水局");
|
||||
put("巳酉", "巳酉半合金局");
|
||||
put("亥卯", "亥卯半合木局");
|
||||
put("子辰", "子辰半合水局");
|
||||
put("午戌", "午戌半合火局");
|
||||
put("卯未", "卯未半合木局");
|
||||
put("酉丑", "酉丑半合金局");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支拱合(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_GONG_HE = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("申辰", "申辰拱合子");
|
||||
put("亥未", "亥未拱合卯");
|
||||
put("寅戌", "寅戌拱合午");
|
||||
put("巳丑", "巳丑拱合酉");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支暗合(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_AN_HE = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("卯申", "卯申暗合");
|
||||
put("午亥", "午亥暗合");
|
||||
put("丑寅", "丑寅暗合");
|
||||
put("寅未", "寅未暗合");
|
||||
put("寅午", "寅午暗合");
|
||||
put("子戌", "子戌暗合");
|
||||
put("子辰", "子辰暗合");
|
||||
put("子巳", "子巳暗合");
|
||||
put("巳酉", "巳酉暗合");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支六合(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_LIU_HE = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("子丑", "子丑合化土");
|
||||
put("寅亥", "寅亥合化木");
|
||||
put("卯戌", "卯戌合化火");
|
||||
put("辰酉", "辰酉合化金");
|
||||
put("巳申", "巳申合化水");
|
||||
put("午未", "午未合化火");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支相刑(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_XIANG_XING = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("寅巳申", "寅巳申三刑");
|
||||
put("丑戌未", "丑戌未三刑");
|
||||
put("寅巳", "寅巳相刑");
|
||||
put("巳申", "巳申相刑");
|
||||
put("申寅", "申寅相刑");
|
||||
put("丑戌", "丑戌相刑");
|
||||
put("戌未", "戌未相刑");
|
||||
put("未丑", "未丑相刑");
|
||||
put("子卯", "子卯相刑");
|
||||
put("酉酉", "酉酉自刑");
|
||||
put("亥亥", "亥亥自刑");
|
||||
put("午午", "午午自刑");
|
||||
put("辰辰", "辰辰自刑");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支相冲(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_XIANG_CHONG = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("子午", "子午相冲");
|
||||
put("丑未", "丑未相冲");
|
||||
put("寅申", "寅申相冲");
|
||||
put("卯酉", "卯酉相冲");
|
||||
put("辰戌", "辰戌相冲");
|
||||
put("巳亥", "巳亥相冲");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支相破(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_XIANG_PO = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("子酉", "子酉相破");
|
||||
put("寅亥", "寅亥相破");
|
||||
put("卯午", "卯午相破");
|
||||
put("辰丑", "辰丑相破");
|
||||
put("巳申", "巳申相破");
|
||||
put("戌未", "戌未相破");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 地支相害(地支+地支为键)
|
||||
*/
|
||||
public static final Map<String, String> DI_ZHI_XIANG_HAI = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("子未", "子未相害");
|
||||
put("丑午", "丑午相害");
|
||||
put("寅巳", "寅巳相害");
|
||||
put("卯辰", "卯辰相害");
|
||||
put("申亥", "申亥相害");
|
||||
put("酉戌", "酉戌相害");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,28 @@
|
||||
package xuan.core.bazi.settings;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 八字 - 大运流年设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class BaZiDaYunLiuNianSetting {
|
||||
|
||||
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public BaZiDaYunLiuNianSetting() {
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,244 @@
|
||||
package xuan.core.bazi.settings;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.utils.DateUtil;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 八字 - 基础设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class BaZiJiChuSetting {
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*/
|
||||
private String occupy;
|
||||
|
||||
/**
|
||||
* 性别(0:女。1:男)
|
||||
*/
|
||||
private int sex;
|
||||
|
||||
/**
|
||||
* 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
private String date;
|
||||
|
||||
/**
|
||||
* 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
private int dateType;
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
private int leapMonthType;
|
||||
|
||||
/**
|
||||
* 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
private int xuShiSuiType;
|
||||
|
||||
/**
|
||||
* 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
private int jieQiType;
|
||||
|
||||
/**
|
||||
* 起运流派类型(0:按天数和时辰数计算:3天1年、1天4个月、1时辰10天。1:按分钟数计算:4320分=1年、360分=1月、12分=1天、1分=2小时)
|
||||
*/
|
||||
private int qiYunLiuPaiType;
|
||||
|
||||
/**
|
||||
* 人元司令分野类型(0:子平真诠法诀。1:渊海子平法诀。2:星平会海法诀。3:三命通会法诀。4:神峰通考法诀。5:万育吾之法诀)
|
||||
*/
|
||||
private int renYuanType;
|
||||
|
||||
/**
|
||||
* 大运轮数(最小10轮,最大16轮)
|
||||
*/
|
||||
private int daYunLunShu;
|
||||
|
||||
/**
|
||||
* 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
private int yearGanZhiType;
|
||||
|
||||
/**
|
||||
* 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
private int monthGanZhiType;
|
||||
|
||||
/**
|
||||
* 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
private int dayGanZhiType;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public BaZiJiChuSetting() {
|
||||
|
||||
this.name = ""; // 姓名(默认→ 空)
|
||||
this.occupy = ""; // 占事(默认→ 空)
|
||||
this.sex = 1; // 性别(默认→ 男)
|
||||
this.date = "2024-01-01 00:00:00"; // 日期(默认→ 2024-01-01 00:00:00)
|
||||
this.dateType = 0; // 日期类型(默认→ 公历)
|
||||
this.leapMonthType = 0; // 闰月类型,日期类型为1时生效(默认→ 不使用闰月)
|
||||
this.xuShiSuiType = 0; // 虚实岁类型(默认→ 虚岁)
|
||||
this.jieQiType = 1; // 节气类型(默认→ 按分钟计算)
|
||||
this.qiYunLiuPaiType = 1; // 起运流派类型(默认→ 按分钟数计算:4320分=1年、360分=1月、12分=1天、1分=2小时)
|
||||
this.renYuanType = 0; // 人元司令分野类型(默认→ 子平真诠法诀)
|
||||
this.daYunLunShu = 10; // 大运轮数(默认→ 10轮)
|
||||
this.yearGanZhiType = 2; // 年干支类型(默认→ 以立春交接时刻作为新年的开始)
|
||||
this.monthGanZhiType = 1; // 月干支类型(默认→ 以节交接时刻起算)
|
||||
this.dayGanZhiType = 0; // 日干支类型(默认→ 晚子时日柱按当天)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*
|
||||
* @param name 姓名
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = StringUtils.isNotBlank(name) ? name : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*
|
||||
* @param occupy 占事
|
||||
*/
|
||||
public void setOccupy(String occupy) {
|
||||
this.occupy = StringUtils.isNotBlank(occupy) ? occupy : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*
|
||||
* @param sex 性别(0:女。1:男)
|
||||
*/
|
||||
public void setSex(int sex) {
|
||||
this.sex = (sex == 0 || sex == 1) ? sex : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*
|
||||
* @param date 日期
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = DateUtil.isValidDate(date) ? date : "2024-01-01 00:00:00";
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期类型
|
||||
*
|
||||
* @param dateType 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
public void setDateType(int dateType) {
|
||||
this.dateType = (dateType == 0 || dateType == 1) ? dateType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效
|
||||
*
|
||||
* @param leapMonthType 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
public void setLeapMonthType(int leapMonthType) {
|
||||
this.leapMonthType = (leapMonthType == 0 || leapMonthType == 1) ? leapMonthType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 虚实岁类型
|
||||
*
|
||||
* @param xuShiSuiType 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
public void setXuShiSuiType(int xuShiSuiType) {
|
||||
this.xuShiSuiType = (xuShiSuiType == 0 || xuShiSuiType == 1) ? xuShiSuiType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 节气类型
|
||||
*
|
||||
* @param jieQiType 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
public void setJieQiType(int jieQiType) {
|
||||
this.jieQiType = (jieQiType == 0 || jieQiType == 1) ? jieQiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 起运流派类型
|
||||
*
|
||||
* @param qiYunLiuPaiType 起运流派类型(0:按天数和时辰数计算:3天1年、1天4个月、1时辰10天。1:按分钟数计算:4320分=1年、360分=1月、12分=1天、1分=2小时)
|
||||
*/
|
||||
public void setQiYunLiuPaiType(int qiYunLiuPaiType) {
|
||||
this.qiYunLiuPaiType = (qiYunLiuPaiType == 0 || qiYunLiuPaiType == 1) ? qiYunLiuPaiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 人元司令分野类型
|
||||
*
|
||||
* @param renYuanType 人元司令分野类型(0:子平真诠法诀。1:渊海子平法诀。2:星平会海法诀。3:三命通会法诀。4:神峰通考法诀。5:万育吾之法诀)
|
||||
*/
|
||||
public void setRenYuanType(int renYuanType) {
|
||||
this.renYuanType = (renYuanType == 0 || renYuanType == 1 || renYuanType == 2 || renYuanType == 3 || renYuanType == 4 || renYuanType == 5) ? renYuanType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 大运轮数
|
||||
*
|
||||
* @param daYunLunShu 大运轮数(最小10轮,最大16轮)
|
||||
*/
|
||||
public void setDaYunLunShu(int daYunLunShu) {
|
||||
if (daYunLunShu < 10 || daYunLunShu > 16) {
|
||||
this.daYunLunShu = 10;
|
||||
} else {
|
||||
this.daYunLunShu = daYunLunShu;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 年干支类型
|
||||
*
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
public void setYearGanZhiType(int yearGanZhiType) {
|
||||
this.yearGanZhiType = (yearGanZhiType == 0 || yearGanZhiType == 1 || yearGanZhiType == 2) ? yearGanZhiType : 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月干支类型
|
||||
*
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
public void setMonthGanZhiType(int monthGanZhiType) {
|
||||
this.monthGanZhiType = (monthGanZhiType == 0 || monthGanZhiType == 1) ? monthGanZhiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日干支类型
|
||||
*
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日干支按当天。1:晚子时日干支按明天)
|
||||
*/
|
||||
public void setDayGanZhiType(int dayGanZhiType) {
|
||||
this.dayGanZhiType = (dayGanZhiType == 0 || dayGanZhiType == 1) ? dayGanZhiType : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,926 @@
|
||||
package xuan.core.bazi.settings;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 八字 - 神煞设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class BaZiShenShaSetting {
|
||||
|
||||
/**
|
||||
* 太极贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int taiJiGuiRen;
|
||||
|
||||
/**
|
||||
* 天乙贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianYiGuiRen;
|
||||
|
||||
/**
|
||||
* 福星贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int fuXingGuiRen;
|
||||
|
||||
/**
|
||||
* 文昌贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int wenChangGuiRen;
|
||||
|
||||
/**
|
||||
* 天厨贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianChuGuiRen;
|
||||
|
||||
/**
|
||||
* 月德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int yueDeGuiRen;
|
||||
|
||||
/**
|
||||
* 德秀贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int deXiuGuiRen;
|
||||
|
||||
/**
|
||||
* 天德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianDeGuiRen;
|
||||
|
||||
/**
|
||||
* 天官贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianGuanGuiRen;
|
||||
|
||||
/**
|
||||
* 三奇贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int sanQiGuiRen;
|
||||
|
||||
/**
|
||||
* 十恶大败(0:显示。1:关闭)
|
||||
*/
|
||||
private int shiEDaBai;
|
||||
|
||||
/**
|
||||
* 阴注阳受(0:显示。1:关闭)
|
||||
*/
|
||||
private int yinZhuYangShou;
|
||||
|
||||
/**
|
||||
* 阴差阳错(0:显示。1:关闭)
|
||||
*/
|
||||
private int yinChaYangCuo;
|
||||
|
||||
/**
|
||||
* 天德合(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianDeHe;
|
||||
|
||||
/**
|
||||
* 月德合(0:显示。1:关闭)
|
||||
*/
|
||||
private int yueDeHe;
|
||||
|
||||
/**
|
||||
* 四废日(0:显示。1:关闭)
|
||||
*/
|
||||
private int siFeiRi;
|
||||
|
||||
/**
|
||||
* 六秀日(0:显示。1:关闭)
|
||||
*/
|
||||
private int liuXiuRi;
|
||||
|
||||
/**
|
||||
* 十灵日(0:显示。1:关闭)
|
||||
*/
|
||||
private int shiLingRi;
|
||||
|
||||
/**
|
||||
* 魁罡日(0:显示。1:关闭)
|
||||
*/
|
||||
private int kuiGangRi;
|
||||
|
||||
/**
|
||||
* 八专日(0:显示。1:关闭)
|
||||
*/
|
||||
private int baZhuanRi;
|
||||
|
||||
/**
|
||||
* 九丑日(0:显示。1:关闭)
|
||||
*/
|
||||
private int jiuChouRi;
|
||||
|
||||
/**
|
||||
* 孤鸾煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int guLuanSha;
|
||||
|
||||
/**
|
||||
* 红艳煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int hongYanSha;
|
||||
|
||||
/**
|
||||
* 勾绞煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int gouJiaoSha;
|
||||
|
||||
/**
|
||||
* 冲天煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int chongTianSha;
|
||||
|
||||
/**
|
||||
* 童子煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int tongZiSha;
|
||||
|
||||
/**
|
||||
* 华盖(0:显示。1:关闭)
|
||||
*/
|
||||
private int huaGai;
|
||||
|
||||
/**
|
||||
* 国印(0:显示。1:关闭)
|
||||
*/
|
||||
private int guoYin;
|
||||
|
||||
/**
|
||||
* 金舆(0:显示。1:关闭)
|
||||
*/
|
||||
private int jinYu;
|
||||
|
||||
/**
|
||||
* 羊刃(0:显示。1:关闭)
|
||||
*/
|
||||
private int yangRen;
|
||||
|
||||
/**
|
||||
* 飞刃(0:显示。1:关闭)
|
||||
*/
|
||||
private int feiRen;
|
||||
|
||||
/**
|
||||
* 流霞(0:显示。1:关闭)
|
||||
*/
|
||||
private int liuXia;
|
||||
|
||||
/**
|
||||
* 禄神(0:显示。1:关闭)
|
||||
*/
|
||||
private int luShen;
|
||||
|
||||
/**
|
||||
* 驿马(0:显示。1:关闭)
|
||||
*/
|
||||
private int yiMa;
|
||||
|
||||
/**
|
||||
* 天罗\地网(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianLuoDiWang;
|
||||
|
||||
/**
|
||||
* 空亡(0:显示。1:关闭)
|
||||
*/
|
||||
private int kongWang;
|
||||
|
||||
/**
|
||||
* 截空(0:显示。1:关闭)
|
||||
*/
|
||||
private int jieKong;
|
||||
|
||||
/**
|
||||
* 劫煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int jieSha;
|
||||
|
||||
/**
|
||||
* 将星(0:显示。1:关闭)
|
||||
*/
|
||||
private int jiangXing;
|
||||
|
||||
/**
|
||||
* 桃花(0:显示。1:关闭)
|
||||
*/
|
||||
private int taoHua;
|
||||
|
||||
/**
|
||||
* 亡神(0:显示。1:关闭)
|
||||
*/
|
||||
private int wangShen;
|
||||
|
||||
/**
|
||||
* 吊客(0:显示。1:关闭)
|
||||
*/
|
||||
private int diaoKe;
|
||||
|
||||
/**
|
||||
* 披麻(0:显示。1:关闭)
|
||||
*/
|
||||
private int piMa;
|
||||
|
||||
/**
|
||||
* 天喜(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianXi;
|
||||
|
||||
/**
|
||||
* 红鸾(0:显示。1:关闭)
|
||||
*/
|
||||
private int hongLuan;
|
||||
|
||||
/**
|
||||
* 丧门(0:显示。1:关闭)
|
||||
*/
|
||||
private int sangMen;
|
||||
|
||||
/**
|
||||
* 灾煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int zaiSha;
|
||||
|
||||
/**
|
||||
* 孤辰(0:显示。1:关闭)
|
||||
*/
|
||||
private int guChen;
|
||||
|
||||
/**
|
||||
* 寡宿(0:显示。1:关闭)
|
||||
*/
|
||||
private int guaXiu;
|
||||
|
||||
/**
|
||||
* 元辰(0:显示。1:关闭)
|
||||
*/
|
||||
private int yuanChen;
|
||||
|
||||
/**
|
||||
* 血刃(0:显示。1:关闭)
|
||||
*/
|
||||
private int xueRen;
|
||||
|
||||
/**
|
||||
* 天医(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianYi;
|
||||
|
||||
/**
|
||||
* 词馆(0:显示。1:关闭)
|
||||
*/
|
||||
private int ciGuan;
|
||||
|
||||
/**
|
||||
* 学堂(0:显示。1:关闭)
|
||||
*/
|
||||
private int xueTang;
|
||||
|
||||
/**
|
||||
* 天赦(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianShe;
|
||||
|
||||
/**
|
||||
* 天转(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianZhuan;
|
||||
|
||||
/**
|
||||
* 地转(0:显示。1:关闭)
|
||||
*/
|
||||
private int diZhuan;
|
||||
|
||||
/**
|
||||
* 拱禄(0:显示。1:关闭)
|
||||
*/
|
||||
private int gongLu;
|
||||
|
||||
/**
|
||||
* 金神(0:显示。1:关闭)
|
||||
*/
|
||||
private int jinShen;
|
||||
|
||||
/**
|
||||
* 六厄(0:显示。1:关闭)
|
||||
*/
|
||||
private int liuE;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public BaZiShenShaSetting() {
|
||||
|
||||
this.taiJiGuiRen = 0; // 太极贵人(默认→ 显示)
|
||||
this.tianYiGuiRen = 0; // 天乙贵人(默认→ 显示)
|
||||
this.fuXingGuiRen = 0; // 福星贵人(默认→ 显示)
|
||||
this.wenChangGuiRen = 0; // 文昌贵人(默认→ 显示)
|
||||
this.tianChuGuiRen = 0; // 天厨贵人(默认→ 显示)
|
||||
this.yueDeGuiRen = 0; // 月德贵人(默认→ 显示)
|
||||
this.deXiuGuiRen = 0; // 德秀贵人(默认→ 显示)
|
||||
this.tianDeGuiRen = 0; // 天德贵人(默认→ 显示)
|
||||
this.tianGuanGuiRen = 0; // 天官贵人(默认→ 显示)
|
||||
this.sanQiGuiRen = 0; // 三奇贵人(默认→ 显示)
|
||||
this.shiEDaBai = 0; // 十恶大败(默认→ 显示)
|
||||
this.yinZhuYangShou = 0; // 阴注阳受(默认→ 显示)
|
||||
this.yinChaYangCuo = 0; // 阴差阳错(默认→ 显示)
|
||||
this.siFeiRi = 0; // 四废日(默认→ 显示)
|
||||
this.tianDeHe = 0; // 天德合(默认→ 显示)
|
||||
this.yueDeHe = 0; // 月德合(默认→ 显示)
|
||||
this.liuXiuRi = 0; // 六秀日(默认→ 显示)
|
||||
this.shiLingRi = 0; // 十灵日(默认→ 显示)
|
||||
this.kuiGangRi = 0; // 魁罡日(默认→ 显示)
|
||||
this.baZhuanRi = 0; // 八专日(默认→ 显示)
|
||||
this.jiuChouRi = 0; // 九丑日(默认→ 显示)
|
||||
this.guLuanSha = 0; // 孤鸾煞(默认→ 显示)
|
||||
this.hongYanSha = 0; // 红艳煞(默认→ 显示)
|
||||
this.gouJiaoSha = 0; // 勾绞煞(默认→ 显示)
|
||||
this.chongTianSha = 0; // 冲天煞(默认→ 显示)
|
||||
this.tongZiSha = 0; // 童子煞(默认→ 显示)
|
||||
this.huaGai = 0; // 华盖(默认→ 显示)
|
||||
this.guoYin = 0; // 国印(默认→ 显示)
|
||||
this.jinYu = 0; // 金舆(默认→ 显示)
|
||||
this.yangRen = 0; // 羊刃(默认→ 显示)
|
||||
this.feiRen = 0; // 飞刃(默认→ 显示)
|
||||
this.liuXia = 0; // 流霞(默认→ 显示)
|
||||
this.luShen = 0; // 禄神(默认→ 显示)
|
||||
this.yiMa = 0; // 驿马(默认→ 显示)
|
||||
this.tianLuoDiWang = 0; // 天罗\地网(默认→ 显示)
|
||||
this.kongWang = 0; // 空亡(默认→ 显示)
|
||||
this.jieKong = 0; // 截空(默认→ 显示)
|
||||
this.jieSha = 0; // 劫煞(默认→ 显示)
|
||||
this.jiangXing = 0; // 将星(默认→ 显示)
|
||||
this.taoHua = 0; // 桃花(默认→ 显示)
|
||||
this.wangShen = 0; // 亡神(默认→ 显示)
|
||||
this.diaoKe = 0; // 吊客(默认→ 显示)
|
||||
this.piMa = 0; // 披麻(默认→ 显示)
|
||||
this.tianXi = 0; // 天喜(默认→ 显示)
|
||||
this.hongLuan = 0; // 红鸾(默认→ 显示)
|
||||
this.sangMen = 0; // 丧门(默认→ 显示)
|
||||
this.zaiSha = 0; // 灾煞(默认→ 显示)
|
||||
this.guChen = 0; // 孤辰(默认→ 显示)
|
||||
this.guaXiu = 0; // 寡宿(默认→ 显示)
|
||||
this.yuanChen = 0; // 元辰(默认→ 显示)
|
||||
this.xueRen = 0; // 血刃(默认→ 显示)
|
||||
this.tianYi = 0; // 天医(默认→ 显示)
|
||||
this.ciGuan = 0; // 词馆(默认→ 显示)
|
||||
this.xueTang = 0; // 学堂(默认→ 显示)
|
||||
this.tianShe = 0; // 天赦(默认→ 显示)
|
||||
this.tianZhuan = 0; // 天转(默认→ 显示)
|
||||
this.diZhuan = 0; // 地转(默认→ 显示)
|
||||
this.gongLu = 0; // 拱禄(默认→ 显示)
|
||||
this.jinShen = 0; // 金神(默认→ 显示)
|
||||
this.liuE = 0; // 六厄(默认→ 显示)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 太极贵人
|
||||
*
|
||||
* @param taiJiGuiRen 太极贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTaiJiGuiRen(int taiJiGuiRen) {
|
||||
this.taiJiGuiRen = (taiJiGuiRen == 0 || taiJiGuiRen == 1) ? taiJiGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天乙贵人
|
||||
*
|
||||
* @param tianYiGuiRen 天乙贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianYiGuiRen(int tianYiGuiRen) {
|
||||
this.tianYiGuiRen = (tianYiGuiRen == 0 || tianYiGuiRen == 1) ? tianYiGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 福星贵人
|
||||
*
|
||||
* @param fuXingGuiRen 福星贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setFuXingGuiRen(int fuXingGuiRen) {
|
||||
this.fuXingGuiRen = (fuXingGuiRen == 0 || fuXingGuiRen == 1) ? fuXingGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 文昌贵人
|
||||
*
|
||||
* @param wenChangGuiRen 文昌贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setWenChangGuiRen(int wenChangGuiRen) {
|
||||
this.wenChangGuiRen = (wenChangGuiRen == 0 || wenChangGuiRen == 1) ? wenChangGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天厨贵人
|
||||
*
|
||||
* @param tianChuGuiRen 天厨贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianChuGuiRen(int tianChuGuiRen) {
|
||||
this.tianChuGuiRen = (tianChuGuiRen == 0 || tianChuGuiRen == 1) ? tianChuGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月德贵人
|
||||
*
|
||||
* @param yueDeGuiRen 月德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYueDeGuiRen(int yueDeGuiRen) {
|
||||
this.yueDeGuiRen = (yueDeGuiRen == 0 || yueDeGuiRen == 1) ? yueDeGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 德秀贵人
|
||||
*
|
||||
* @param deXiuGuiRen 德秀贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setDeXiuGuiRen(int deXiuGuiRen) {
|
||||
this.deXiuGuiRen = (deXiuGuiRen == 0 || deXiuGuiRen == 1) ? deXiuGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天德贵人
|
||||
*
|
||||
* @param tianDeGuiRen 天德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianDeGuiRen(int tianDeGuiRen) {
|
||||
this.tianDeGuiRen = (tianDeGuiRen == 0 || tianDeGuiRen == 1) ? tianDeGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天官贵人
|
||||
*
|
||||
* @param tianGuanGuiRen 天官贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianGuanGuiRen(int tianGuanGuiRen) {
|
||||
this.tianGuanGuiRen = (tianGuanGuiRen == 0 || tianGuanGuiRen == 1) ? tianGuanGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 三奇贵人
|
||||
*
|
||||
* @param sanQiGuiRen 三奇贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setSanQiGuiRen(int sanQiGuiRen) {
|
||||
this.sanQiGuiRen = (sanQiGuiRen == 0 || sanQiGuiRen == 1) ? sanQiGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 十恶大败
|
||||
*
|
||||
* @param shiEDaBai 十恶大败(0:显示。1:关闭)
|
||||
*/
|
||||
public void setShiEDaBai(int shiEDaBai) {
|
||||
this.shiEDaBai = (shiEDaBai == 0 || shiEDaBai == 1) ? shiEDaBai : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 阴注阳受
|
||||
*
|
||||
* @param yinZhuYangShou 阴注阳受(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYinZhuYangShou(int yinZhuYangShou) {
|
||||
this.yinZhuYangShou = (yinZhuYangShou == 0 || yinZhuYangShou == 1) ? yinZhuYangShou : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 阴差阳错
|
||||
*
|
||||
* @param yinChaYangCuo 阴差阳错(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYinChaYangCuo(int yinChaYangCuo) {
|
||||
this.yinChaYangCuo = (yinChaYangCuo == 0 || yinChaYangCuo == 1) ? yinChaYangCuo : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天德合
|
||||
*
|
||||
* @param tianDeHe 天德合(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianDeHe(int tianDeHe) {
|
||||
this.tianDeHe = (tianDeHe == 0 || tianDeHe == 1) ? tianDeHe : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月德合
|
||||
*
|
||||
* @param yueDeHe 月德合(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYueDeHe(int yueDeHe) {
|
||||
this.yueDeHe = (yueDeHe == 0 || yueDeHe == 1) ? yueDeHe : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 四废日
|
||||
*
|
||||
* @param siFeiRi 四废日(0:显示。1:关闭)
|
||||
*/
|
||||
public void setSiFeiRi(int siFeiRi) {
|
||||
this.siFeiRi = (siFeiRi == 0 || siFeiRi == 1) ? siFeiRi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 六秀日
|
||||
*
|
||||
* @param liuXiuRi 六秀日(0:显示。1:关闭)
|
||||
*/
|
||||
public void setLiuXiuRi(int liuXiuRi) {
|
||||
this.liuXiuRi = (liuXiuRi == 0 || liuXiuRi == 1) ? liuXiuRi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 十灵日
|
||||
*
|
||||
* @param shiLingRi 十灵日(0:显示。1:关闭)
|
||||
*/
|
||||
public void setShiLingRi(int shiLingRi) {
|
||||
this.shiLingRi = (shiLingRi == 0 || shiLingRi == 1) ? shiLingRi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 魁罡日
|
||||
*
|
||||
* @param kuiGangRi 魁罡日(0:显示。1:关闭)
|
||||
*/
|
||||
public void setKuiGangRi(int kuiGangRi) {
|
||||
this.kuiGangRi = (kuiGangRi == 0 || kuiGangRi == 1) ? kuiGangRi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 八专日
|
||||
*
|
||||
* @param baZhuanRi 八专日(0:显示。1:关闭)
|
||||
*/
|
||||
public void setBaZhuanRi(int baZhuanRi) {
|
||||
this.baZhuanRi = (baZhuanRi == 0 || baZhuanRi == 1) ? baZhuanRi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 九丑日
|
||||
*
|
||||
* @param jiuChouRi 九丑日(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJiuChouRi(int jiuChouRi) {
|
||||
this.jiuChouRi = (jiuChouRi == 0 || jiuChouRi == 1) ? jiuChouRi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 孤鸾煞
|
||||
*
|
||||
* @param guLuanSha 孤鸾煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setGuLuanSha(int guLuanSha) {
|
||||
this.guLuanSha = (guLuanSha == 0 || guLuanSha == 1) ? guLuanSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 红艳煞
|
||||
*
|
||||
* @param hongYanSha 红艳煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setHongYanSha(int hongYanSha) {
|
||||
this.hongYanSha = (hongYanSha == 0 || hongYanSha == 1) ? hongYanSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 勾绞煞
|
||||
*
|
||||
* @param gouJiaoSha 勾绞煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setGouJiaoSha(int gouJiaoSha) {
|
||||
this.gouJiaoSha = (gouJiaoSha == 0 || gouJiaoSha == 1) ? gouJiaoSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 冲天煞
|
||||
*
|
||||
* @param chongTianSha 冲天煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setChongTianSha(int chongTianSha) {
|
||||
this.chongTianSha = (chongTianSha == 0 || chongTianSha == 1) ? chongTianSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 童子煞
|
||||
*
|
||||
* @param tongZiSha 童子煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTongZiSha(int tongZiSha) {
|
||||
this.tongZiSha = (tongZiSha == 0 || tongZiSha == 1) ? tongZiSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 华盖
|
||||
*
|
||||
* @param huaGai 华盖(0:显示。1:关闭)
|
||||
*/
|
||||
public void setHuaGai(int huaGai) {
|
||||
this.huaGai = (huaGai == 0 || huaGai == 1) ? huaGai : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 国印
|
||||
*
|
||||
* @param guoYin 国印(0:显示。1:关闭)
|
||||
*/
|
||||
public void setGuoYin(int guoYin) {
|
||||
this.guoYin = (guoYin == 0 || guoYin == 1) ? guoYin : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 金舆
|
||||
*
|
||||
* @param jinYu 金舆(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJinYu(int jinYu) {
|
||||
this.jinYu = (jinYu == 0 || jinYu == 1) ? jinYu : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 羊刃
|
||||
*
|
||||
* @param yangRen 羊刃(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYangRen(int yangRen) {
|
||||
this.yangRen = (yangRen == 0 || yangRen == 1) ? yangRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 飞刃
|
||||
*
|
||||
* @param feiRen 飞刃(0:显示。1:关闭)
|
||||
*/
|
||||
public void setFeiRen(int feiRen) {
|
||||
this.feiRen = (feiRen == 0 || feiRen == 1) ? feiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 流霞
|
||||
*
|
||||
* @param liuXia 流霞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setLiuXia(int liuXia) {
|
||||
this.liuXia = (liuXia == 0 || liuXia == 1) ? liuXia : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 禄神
|
||||
*
|
||||
* @param luShen 禄神(0:显示。1:关闭)
|
||||
*/
|
||||
public void setLuShen(int luShen) {
|
||||
this.luShen = (luShen == 0 || luShen == 1) ? luShen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 驿马
|
||||
*
|
||||
* @param yiMa 驿马(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYiMa(int yiMa) {
|
||||
this.yiMa = (yiMa == 0 || yiMa == 1) ? yiMa : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天罗\地网
|
||||
*
|
||||
* @param tianLuoDiWang 天罗\地网(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianLuoDiWang(int tianLuoDiWang) {
|
||||
this.tianLuoDiWang = (tianLuoDiWang == 0 || tianLuoDiWang == 1) ? tianLuoDiWang : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 空亡
|
||||
*
|
||||
* @param kongWang 空亡(0:显示。1:关闭)
|
||||
*/
|
||||
public void setKongWang(int kongWang) {
|
||||
this.kongWang = (kongWang == 0 || kongWang == 1) ? kongWang : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 截空
|
||||
*
|
||||
* @param jieKong 截空(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJieKong(int jieKong) {
|
||||
this.jieKong = (jieKong == 0 || jieKong == 1) ? jieKong : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 劫煞
|
||||
*
|
||||
* @param jieSha 劫煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJieSha(int jieSha) {
|
||||
this.jieSha = (jieSha == 0 || jieSha == 1) ? jieSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将星
|
||||
*
|
||||
* @param jiangXing 将星(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJiangXing(int jiangXing) {
|
||||
this.jiangXing = (jiangXing == 0 || jiangXing == 1) ? jiangXing : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 桃花
|
||||
*
|
||||
* @param taoHua 桃花(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTaoHua(int taoHua) {
|
||||
this.taoHua = (taoHua == 0 || taoHua == 1) ? taoHua : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 亡神
|
||||
*
|
||||
* @param wangShen 亡神(0:显示。1:关闭)
|
||||
*/
|
||||
public void setWangShen(int wangShen) {
|
||||
this.wangShen = (wangShen == 0 || wangShen == 1) ? wangShen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 吊客
|
||||
*
|
||||
* @param diaoKe 吊客(0:显示。1:关闭)
|
||||
*/
|
||||
public void setDiaoKe(int diaoKe) {
|
||||
this.diaoKe = (diaoKe == 0 || diaoKe == 1) ? diaoKe : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 披麻
|
||||
*
|
||||
* @param piMa 披麻(0:显示。1:关闭)
|
||||
*/
|
||||
public void setPiMa(int piMa) {
|
||||
this.piMa = (piMa == 0 || piMa == 1) ? piMa : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天喜
|
||||
*
|
||||
* @param tianXi 天喜(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianXi(int tianXi) {
|
||||
this.tianXi = (tianXi == 0 || tianXi == 1) ? tianXi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 红鸾
|
||||
*
|
||||
* @param hongLuan 红鸾(0:显示。1:关闭)
|
||||
*/
|
||||
public void setHongLuan(int hongLuan) {
|
||||
this.hongLuan = (hongLuan == 0 || hongLuan == 1) ? hongLuan : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 丧门
|
||||
*
|
||||
* @param sangMen 丧门(0:显示。1:关闭)
|
||||
*/
|
||||
public void setSangMen(int sangMen) {
|
||||
this.sangMen = (sangMen == 0 || sangMen == 1) ? sangMen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 灾煞
|
||||
*
|
||||
* @param zaiSha 灾煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setZaiSha(int zaiSha) {
|
||||
this.zaiSha = (zaiSha == 0 || zaiSha == 1) ? zaiSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 孤辰
|
||||
*
|
||||
* @param guChen 孤辰(0:显示。1:关闭)
|
||||
*/
|
||||
public void setGuChen(int guChen) {
|
||||
this.guChen = (guChen == 0 || guChen == 1) ? guChen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 寡宿
|
||||
*
|
||||
* @param guaXiu 寡宿(0:显示。1:关闭)
|
||||
*/
|
||||
public void setGuaXiu(int guaXiu) {
|
||||
this.guaXiu = (guaXiu == 0 || guaXiu == 1) ? guaXiu : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 元辰
|
||||
*
|
||||
* @param yuanChen 元辰(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYuanChen(int yuanChen) {
|
||||
this.yuanChen = (yuanChen == 0 || yuanChen == 1) ? yuanChen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 血刃
|
||||
*
|
||||
* @param xueRen 血刃(0:显示。1:关闭)
|
||||
*/
|
||||
public void setXueRen(int xueRen) {
|
||||
this.xueRen = (xueRen == 0 || xueRen == 1) ? xueRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天医
|
||||
*
|
||||
* @param tianYi 天医(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianYi(int tianYi) {
|
||||
this.tianYi = (tianYi == 0 || tianYi == 1) ? tianYi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 词馆
|
||||
*
|
||||
* @param ciGuan 词馆(0:显示。1:关闭)
|
||||
*/
|
||||
public void setCiGuan(int ciGuan) {
|
||||
this.ciGuan = (ciGuan == 0 || ciGuan == 1) ? ciGuan : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 学堂
|
||||
*
|
||||
* @param xueTang 学堂(0:显示。1:关闭)
|
||||
*/
|
||||
public void setXueTang(int xueTang) {
|
||||
this.xueTang = (xueTang == 0 || xueTang == 1) ? xueTang : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天赦
|
||||
*
|
||||
* @param tianShe 天赦(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianShe(int tianShe) {
|
||||
this.tianShe = (tianShe == 0 || tianShe == 1) ? tianShe : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天转
|
||||
*
|
||||
* @param tianZhuan 天转(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianZhuan(int tianZhuan) {
|
||||
this.tianZhuan = (tianZhuan == 0 || tianZhuan == 1) ? tianZhuan : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 地转
|
||||
*
|
||||
* @param diZhuan 地转(0:显示。1:关闭)
|
||||
*/
|
||||
public void setDiZhuan(int diZhuan) {
|
||||
this.diZhuan = (diZhuan == 0 || diZhuan == 1) ? diZhuan : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 拱禄
|
||||
*
|
||||
* @param gongLu 拱禄(0:显示。1:关闭)
|
||||
*/
|
||||
public void setGongLu(int gongLu) {
|
||||
this.gongLu = (gongLu == 0 || gongLu == 1) ? gongLu : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 金神
|
||||
*
|
||||
* @param jinShen 金神(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJinShen(int jinShen) {
|
||||
this.jinShen = (jinShen == 0 || jinShen == 1) ? jinShen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 六厄
|
||||
*
|
||||
* @param liuE 六厄(0:显示。1:关闭)
|
||||
*/
|
||||
public void setLiuE(int liuE) {
|
||||
this.liuE = (liuE == 0 || liuE == 1) ? liuE : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,873 @@
|
||||
package xuan.core.bazi.utils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import xuan.core.bazi.settings.BaZiShenShaSetting;
|
||||
import xuan.utils.DateUtil;
|
||||
import xuan.utils.CommonUtil;
|
||||
import com.nlf.calendar.JieQi;
|
||||
import com.nlf.calendar.Lunar;
|
||||
import com.nlf.calendar.Solar;
|
||||
import xuan.core.bazi.maps.BaZiJiChuMap;
|
||||
import com.nlf.calendar.eightchar.DaYun;
|
||||
import com.nlf.calendar.eightchar.LiuNian;
|
||||
import com.nlf.calendar.eightchar.LiuYue;
|
||||
import com.nlf.calendar.eightchar.XiaoYun;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.core.bazi.maps.BaZiDaYunLiuNianMap;
|
||||
|
||||
/**
|
||||
* 八字 - 大运流年工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class BaZiDaYunLiuNianUtil {
|
||||
|
||||
/**
|
||||
* 八字 - 神煞设置
|
||||
*/
|
||||
private BaZiShenShaSetting baZiShenShaSetting;
|
||||
|
||||
/**
|
||||
* 公历日期
|
||||
*/
|
||||
private Solar solar;
|
||||
/**
|
||||
* 农历日期
|
||||
*/
|
||||
private Lunar lunar;
|
||||
/**
|
||||
* 性别(0:女。1:男)
|
||||
*/
|
||||
private int sex;
|
||||
/**
|
||||
* 季节
|
||||
*/
|
||||
private String jiJie;
|
||||
/**
|
||||
* 起运流派类型(0:按天数和时辰数计算:3天1年、1天4个月、1时辰10天。1:按分钟数计算:4320分=1年、360分=1月、12分=1天、1分=2小时)
|
||||
*/
|
||||
private int qiYunLiuPaiType;
|
||||
/**
|
||||
* 年干支纳音五行
|
||||
*/
|
||||
private String yearGanZhiNaYinWuXing;
|
||||
|
||||
/**
|
||||
* 日干
|
||||
*/
|
||||
private String dayGan;
|
||||
/**
|
||||
* 年干支
|
||||
*/
|
||||
private String yearGanZhi;
|
||||
/**
|
||||
* 月干支
|
||||
*/
|
||||
private String monthGanZhi;
|
||||
/**
|
||||
* 日干支
|
||||
*/
|
||||
private String dayGanZhi;
|
||||
/**
|
||||
* 时干支
|
||||
*/
|
||||
private String hourGanZhi;
|
||||
|
||||
/**
|
||||
* 大运
|
||||
*/
|
||||
private List<List<String>> daYun;
|
||||
/**
|
||||
* 流年
|
||||
*/
|
||||
private List<List<String>> liuNian;
|
||||
/**
|
||||
* 小运
|
||||
*/
|
||||
private List<List<String>> xiaoYun;
|
||||
/**
|
||||
* 流月
|
||||
*/
|
||||
private List<List<String>> liuYue;
|
||||
/**
|
||||
* 流日
|
||||
*/
|
||||
private List<List<String>> liuRi;
|
||||
/**
|
||||
* 流时
|
||||
*/
|
||||
private List<List<String>> liuShi;
|
||||
|
||||
/**
|
||||
* 大运原数据
|
||||
*/
|
||||
protected DaYun[] daYunSource;
|
||||
/**
|
||||
* 流年原数据
|
||||
*/
|
||||
protected LiuNian[] liuNianSource;
|
||||
/**
|
||||
* 小运持续的年数
|
||||
*/
|
||||
protected int xiaoYunYearSum;
|
||||
|
||||
/**
|
||||
* 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
protected int yearGanZhiType;
|
||||
/**
|
||||
* 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
protected int monthGanZhiType;
|
||||
/**
|
||||
* 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
protected int dayGanZhiType;
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*
|
||||
* @param baZiShenShaSetting 八字 - 神煞设置
|
||||
* @param solarDate 公历出生日期
|
||||
* @param sex 性别(0:女。1:男)
|
||||
* @param qiYunLiuPaiType 起运流派类型(0:按天数和时辰数计算:3天1年、1天4个月、1时辰10天。1:按分钟数计算:4320分=1年、360分=1月、12分=1天、1分=2小时)
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
public BaZiDaYunLiuNianUtil(BaZiShenShaSetting baZiShenShaSetting, Date solarDate, int sex, int qiYunLiuPaiType, int yearGanZhiType, int monthGanZhiType, int dayGanZhiType) {
|
||||
|
||||
this.baZiShenShaSetting = baZiShenShaSetting;
|
||||
|
||||
this.solar = new Solar(solarDate); // 初始化公历日期
|
||||
this.lunar = this.solar.getLunar(); // 初始化农历日期
|
||||
this.sex = sex; // 性别(0:女。1:男)
|
||||
if (yearGanZhiType == 0) {
|
||||
this.yearGanZhi = this.lunar.getYearInGanZhi(); // 以正月初一作为新年的开始
|
||||
this.yearGanZhiNaYinWuXing = BaZiJiChuMap.NA_YIN.get(this.yearGanZhi).substring(2, 3); // 年干支纳音
|
||||
} else if (yearGanZhiType == 1) {
|
||||
this.yearGanZhi = this.lunar.getYearInGanZhiByLiChun(); // 以立春当天作为新年的开始
|
||||
this.yearGanZhiNaYinWuXing = BaZiJiChuMap.NA_YIN.get(this.yearGanZhi).substring(2, 3); // 年干支纳音
|
||||
} else {
|
||||
this.yearGanZhi = this.lunar.getYearInGanZhiExact(); // 以立春交接的时刻作为新年的开始
|
||||
this.yearGanZhiNaYinWuXing = BaZiJiChuMap.NA_YIN.get(this.yearGanZhi).substring(2, 3); // 年干支纳音
|
||||
}
|
||||
this.monthGanZhi = (monthGanZhiType == 0) ? this.lunar.getMonthInGanZhi() : this.lunar.getMonthInGanZhiExact(); // 以节交接当天起算 \ 以节交接时刻起算
|
||||
this.dayGanZhi = (dayGanZhiType == 0) ? this.lunar.getDayInGanZhiExact() : this.lunar.getDayInGanZhiExact2(); // 晚子时日干算明天 \ 晚子时日干算当天
|
||||
this.dayGan = (StringUtils.isNotBlank(this.dayGanZhi) && this.dayGanZhi.length() == 2) ? this.dayGanZhi.substring(0, 1) : CommonUtil.EMPTY1; // 日干
|
||||
this.hourGanZhi = lunar.getTimeInGanZhi(); // 时干支
|
||||
this.qiYunLiuPaiType = qiYunLiuPaiType; // 起运流派类型
|
||||
this.jiJie = (!"".equals(this.lunar.getSeason()) && this.lunar.getSeason().length() >= 2) ? this.lunar.getSeason().substring(1, 2) : "春"; // 季节
|
||||
this.yearGanZhiType = yearGanZhiType; // 年干支类型
|
||||
this.monthGanZhiType = monthGanZhiType; // 月干支类型
|
||||
this.dayGanZhiType = dayGanZhiType; // 日干支类型
|
||||
|
||||
}
|
||||
|
||||
//====================================================================================================================================================
|
||||
|
||||
/**
|
||||
* 获取大运
|
||||
*
|
||||
* @param daYunLunShu 一共需要计算多少轮大运
|
||||
* @return 大运(主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历年、年龄、公历日期)
|
||||
*/
|
||||
public List<List<String>> getDaYun(int daYunLunShu) {
|
||||
|
||||
initializeDaYun(daYunLunShu); // 初始化大运
|
||||
|
||||
return this.daYun;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流年
|
||||
*
|
||||
* @param daYunLunShu 一共需要计算多少轮大运
|
||||
* @param daYunLun 第几轮大运
|
||||
* @return 流年(主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历年、年龄、公历日期)
|
||||
*/
|
||||
public List<List<String>> getLiuNian(int daYunLunShu, int daYunLun) {
|
||||
|
||||
initializeDaYun(daYunLunShu); // 初始化大运
|
||||
initializeLiuNian(daYunLun); // 初始化流年
|
||||
|
||||
return this.liuNian;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取小运
|
||||
*
|
||||
* @param daYunLunShu 一共需要计算多少轮大运
|
||||
* @param daYunLun 第几轮大运
|
||||
* @return 小运(主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历年、年龄、公历日期)
|
||||
*/
|
||||
public List<List<String>> getXiaoYun(int daYunLunShu, int daYunLun) {
|
||||
|
||||
initializeDaYun(daYunLunShu); // 初始化大运
|
||||
initializeXiaoYun(daYunLun); // 初始化小运
|
||||
|
||||
return this.xiaoYun;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流月
|
||||
*
|
||||
* @param daYunLunShu 一共需要计算多少轮大运
|
||||
* @param daYunLun 第几轮大运
|
||||
* @param liuNianLun 流年轮
|
||||
* @param solarYear 公历年
|
||||
* @return 流月(主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历几月几日、十二节农历月、十二节、公历日期)
|
||||
*/
|
||||
public List<List<String>> getLiuYue(int daYunLunShu, int daYunLun, int liuNianLun, int solarYear) {
|
||||
|
||||
initializeDaYun(daYunLunShu); // 初始化大运
|
||||
initializeLiuNian(daYunLun); // 初始化流年
|
||||
initializeLiuYue(daYunLun, liuNianLun, solarYear); // 初始化流月
|
||||
|
||||
return this.liuYue;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流日
|
||||
*
|
||||
* @param solarYear 公历年
|
||||
* @param solarMonth 公历月
|
||||
* @return 流日(主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历日、农历日、公历日期)
|
||||
*/
|
||||
public List<List<String>> getLiuRi(int solarYear, int solarMonth) {
|
||||
|
||||
initializeLiuRi(solarYear, solarMonth); // 初始化流日
|
||||
|
||||
return this.liuRi;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流时
|
||||
*
|
||||
* @param solarYear 公历年
|
||||
* @param solarMonth 公历月
|
||||
* @param solarDay 公历日
|
||||
* @return 流时(主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历时、汉代命名、公历日期)
|
||||
*/
|
||||
public List<List<String>> getLiuShi(int solarYear, int solarMonth, int solarDay) {
|
||||
|
||||
initializeLiuShi(solarYear, solarMonth, solarDay); // 初始化流时
|
||||
|
||||
return this.liuShi;
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* 初始化大运
|
||||
*
|
||||
* @param daYunLunShu 一共需要计算多少轮大运
|
||||
*/
|
||||
private void initializeDaYun(int daYunLunShu) {
|
||||
|
||||
Map<String, String> shiErZhangShengMap = BaZiJiChuMap.SHI_ER_ZHANG_SHENG; // 十二长生(天干+地支为键)
|
||||
Map<String, List<String>> diZhiCangGanMap = BaZiJiChuMap.DI_ZHI_CANG_GAN; // 地支藏干(地支为键)
|
||||
Map<String, String> shiShenMap = BaZiJiChuMap.SHI_SHEN; // 十神(日干+其他天干\地支为键)
|
||||
Map<String, String> kongWangMap = BaZiJiChuMap.KONG_WANG; // 空亡(干支为键)
|
||||
Map<String, String> naYinMap = BaZiJiChuMap.NA_YIN; // 纳音(干支为键)
|
||||
|
||||
List<List<String>> daYun = new ArrayList<>(); // 大运
|
||||
|
||||
// 1、添加全部大运数据
|
||||
DaYun[] daYunSource = this.lunar.getEightChar().getYun(this.sex, this.qiYunLiuPaiType).getDaYun(daYunLunShu); // 获取大运原数据
|
||||
String zhuXing = ""; // 主星
|
||||
String tianGan = ""; // 天干
|
||||
String diZhi = ""; // 地支
|
||||
String ziZuo = ""; // 自坐
|
||||
String xingYun = ""; // 星运
|
||||
String cangGan = ""; // 藏干
|
||||
String fuXing = ""; // 副星
|
||||
String kongWang = ""; // 空亡
|
||||
String naYin = ""; // 纳音
|
||||
String shenSha = ""; // 神煞
|
||||
for (DaYun dy : daYunSource) {
|
||||
String ganZhi = dy.getGanZhi(); // 干支
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
String solarDate = DateUtil.getDateStr(dy.getStartYear(), 1, 1, 0, 0, 0); // 公历日期
|
||||
daYun.add(Arrays.asList(zhuXing, tianGan, diZhi, cangGan, fuXing, ziZuo, xingYun, kongWang, naYin, shenSha, String.valueOf(dy.getStartYear()), String.valueOf(dy.getStartAge()), solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历年、年龄、公历日期
|
||||
}
|
||||
|
||||
// 2、计算并设置小运持续的年数(根据公历年计算)
|
||||
this.xiaoYunYearSum = Integer.parseInt(daYun.get(1).get(10)) - Integer.parseInt(daYun.get(0).get(10));
|
||||
|
||||
// 3、处理第一轮大运的年龄数据
|
||||
if (this.xiaoYunYearSum < 1) {
|
||||
// 3.1、若小运持续年数小于1年,则将大运的第一轮数据的岁数重置为:1~10
|
||||
daYun.set(0, daYun.get(0)).set(11, "1~10");
|
||||
} else if (this.xiaoYunYearSum == 1) {
|
||||
// 3.2、若小运持续年数等于1年,则将大运的第一轮数据的岁数重置为:1
|
||||
daYun.set(0, daYun.get(0)).set(11, String.valueOf(this.xiaoYunYearSum));
|
||||
} else {
|
||||
// 3.3、若小运持续年数大于1年,则将大运的第一轮数据的岁数重置为:1~?
|
||||
daYun.set(0, daYun.get(0)).set(11, "1~" + this.xiaoYunYearSum);
|
||||
}
|
||||
|
||||
// 4、处理全部大运岁数
|
||||
for (int i = 1; i < daYun.size() - 1; i++) {
|
||||
int startAge = Integer.parseInt(daYun.get(i).get(11));
|
||||
int endAge = startAge + 9;
|
||||
daYun.set(i, daYun.get(i)).set(11, startAge + "~" + endAge);
|
||||
}
|
||||
|
||||
// 5、设置数据
|
||||
this.daYun = daYun; // 大运
|
||||
this.daYunSource = daYunSource; // 大运原数据
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化流年
|
||||
*
|
||||
* @param daYunLun 第几轮大运
|
||||
*/
|
||||
private void initializeLiuNian(int daYunLun) {
|
||||
|
||||
Map<String, String> shiErZhangShengMap = BaZiJiChuMap.SHI_ER_ZHANG_SHENG; // 十二长生(天干+地支为键)
|
||||
Map<String, List<String>> diZhiCangGanMap = BaZiJiChuMap.DI_ZHI_CANG_GAN; // 地支藏干(地支为键)
|
||||
Map<String, String> shiShenMap = BaZiJiChuMap.SHI_SHEN; // 十神(日干+其他天干\地支为键)
|
||||
Map<String, String> kongWangMap = BaZiJiChuMap.KONG_WANG; // 空亡(干支为键)
|
||||
Map<String, String> naYinMap = BaZiJiChuMap.NA_YIN; // 纳音(干支为键)
|
||||
|
||||
// 1、添加全部流年原数据
|
||||
LiuNian[] liuNianSource = null;
|
||||
List<List<String>> liuNianSourceTemporary = new ArrayList<>(); // 临时存储流年原数据
|
||||
for (DaYun dy : this.daYunSource) {
|
||||
liuNianSource = dy.getLiuNian(10); // 获取流年
|
||||
for (LiuNian ln : liuNianSource) {
|
||||
liuNianSourceTemporary.add(Arrays.asList(ln.getGanZhi(), String.valueOf(ln.getYear()), String.valueOf(ln.getAge()))); // 干支、公历年、年龄
|
||||
}
|
||||
}
|
||||
|
||||
// 2、计算开始索引与结束索引
|
||||
int start = 0; // 开始索引
|
||||
int end; // 结束索引
|
||||
if (daYunLun == 1) {
|
||||
if (this.xiaoYunYearSum == 0) {
|
||||
end = 10; // 结束索引
|
||||
} else {
|
||||
end = this.xiaoYunYearSum; // 结束索引
|
||||
}
|
||||
} else {
|
||||
start = this.xiaoYunYearSum + 10 * (daYunLun - 2); // 开始索引
|
||||
end = start + 10; // 结束索引
|
||||
}
|
||||
|
||||
// 3、添加流年数据
|
||||
String zhuXing = ""; // 主星
|
||||
String tianGan = ""; // 天干
|
||||
String diZhi = ""; // 地支
|
||||
String ziZuo = ""; // 自坐
|
||||
String xingYun = ""; // 星运
|
||||
String cangGan = ""; // 藏干
|
||||
String fuXing = ""; // 副星
|
||||
String kongWang = ""; // 空亡
|
||||
String naYin = ""; // 纳音
|
||||
String shenSha = ""; // 神煞
|
||||
List<List<String>> liuNian = new ArrayList<>(); // 流年
|
||||
for (int i = start; i < end; i++) {
|
||||
List<String> ln = liuNianSourceTemporary.get(i);
|
||||
String ganZhi = ln.get(0); // 干支
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
String solarDate = DateUtil.getDateStr(Integer.parseInt(ln.get(1)), 1, 1, 0, 0, 0); // 公历日期
|
||||
liuNian.add(Arrays.asList(zhuXing, tianGan, diZhi, cangGan, fuXing, ziZuo, xingYun, kongWang, naYin, shenSha, ln.get(1), ln.get(2), solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历年、年龄、公历日期
|
||||
}
|
||||
|
||||
// 4、设置数据
|
||||
this.liuNian = liuNian; // 流年
|
||||
this.liuNianSource = liuNianSource; // 流年原数据
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化小运
|
||||
*
|
||||
* @param daYunLun 第几轮大运
|
||||
*/
|
||||
private void initializeXiaoYun(int daYunLun) {
|
||||
|
||||
Map<String, String> shiErZhangShengMap = BaZiJiChuMap.SHI_ER_ZHANG_SHENG; // 十二长生(天干+地支为键)
|
||||
Map<String, List<String>> diZhiCangGanMap = BaZiJiChuMap.DI_ZHI_CANG_GAN; // 地支藏干(地支为键)
|
||||
Map<String, String> shiShenMap = BaZiJiChuMap.SHI_SHEN; // 十神(日干+其他天干\地支为键)
|
||||
Map<String, String> kongWangMap = BaZiJiChuMap.KONG_WANG; // 空亡(干支为键)
|
||||
Map<String, String> naYinMap = BaZiJiChuMap.NA_YIN; // 纳音(干支为键)
|
||||
|
||||
// 1、添加全部小运数据
|
||||
List<List<String>> xiaoYunSourceTemporary = new ArrayList<>(); // 临时存储小运原数据
|
||||
for (DaYun dy : this.daYunSource) {
|
||||
XiaoYun[] xiaoYunSource = dy.getXiaoYun(10); // 获取小运
|
||||
for (XiaoYun xy : xiaoYunSource) {
|
||||
xiaoYunSourceTemporary.add(Arrays.asList(xy.getGanZhi(), String.valueOf(xy.getYear()), String.valueOf(xy.getAge()))); // 干支、公历年、年龄
|
||||
}
|
||||
}
|
||||
|
||||
// 2、计算开始索引与结束索引
|
||||
int start = 0; // 开始索引
|
||||
int end; // 结束索引
|
||||
if (daYunLun == 1) {
|
||||
if (this.xiaoYunYearSum == 0) {
|
||||
end = 10; // 结束索引
|
||||
} else {
|
||||
end = this.xiaoYunYearSum; // 结束索引
|
||||
}
|
||||
} else {
|
||||
start = this.xiaoYunYearSum + 10 * (daYunLun - 2); // 开始索引
|
||||
end = start + 10; // 结束索引
|
||||
}
|
||||
|
||||
// 3、添加小运数据
|
||||
String zhuXing = ""; // 主星
|
||||
String tianGan = ""; // 天干
|
||||
String diZhi = ""; // 地支
|
||||
String ziZuo = ""; // 自坐
|
||||
String xingYun = ""; // 星运
|
||||
String cangGan = ""; // 藏干
|
||||
String fuXing = ""; // 副星
|
||||
String kongWang = ""; // 空亡
|
||||
String naYin = ""; // 纳音
|
||||
String shenSha = ""; // 神煞
|
||||
List<List<String>> xiaoYun = new ArrayList<>(); // 小运
|
||||
for (int i = start; i < end; i++) {
|
||||
List<String> xy = xiaoYunSourceTemporary.get(i);
|
||||
String ganZhi = xy.get(0); // 干支
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
String solarDate = DateUtil.getDateStr(Integer.parseInt(xy.get(1)), 1, 1, 0, 0, 0); // 公历日期
|
||||
xiaoYun.add(Arrays.asList(zhuXing, tianGan, diZhi, cangGan, fuXing, ziZuo, xingYun, kongWang, naYin, shenSha, xy.get(1), xy.get(2), solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历年、年龄、公历日期
|
||||
}
|
||||
|
||||
// 4、设置数据
|
||||
this.xiaoYun = xiaoYun; // 小运
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化流月
|
||||
*
|
||||
* @param daYunLun 第几轮大运
|
||||
* @param liuNianXiaoYunLun 流年\小运轮
|
||||
* @param solarYear 公历年
|
||||
*/
|
||||
private void initializeLiuYue(int daYunLun, int liuNianXiaoYunLun, int solarYear) {
|
||||
|
||||
Map<String, String> shiErZhangShengMap = BaZiJiChuMap.SHI_ER_ZHANG_SHENG; // 十二长生(天干+地支为键)
|
||||
Map<String, List<String>> diZhiCangGanMap = BaZiJiChuMap.DI_ZHI_CANG_GAN; // 地支藏干(地支为键)
|
||||
Map<String, String> shiShenMap = BaZiJiChuMap.SHI_SHEN; // 十神(日干+其他天干\地支为键)
|
||||
Map<String, String> kongWangMap = BaZiJiChuMap.KONG_WANG; // 空亡(干支为键)
|
||||
Map<String, String> naYinMap = BaZiJiChuMap.NA_YIN; // 纳音(干支为键)
|
||||
|
||||
// 1、添加全部大运流月数据
|
||||
Map<String, List<String>> liuYueShiErJieSolarMonthDay = computeLiuYueShiErJieSolarMonthDay(solarYear); // 计算流月的十二节公历月日、农历月、十二节
|
||||
List<String> solarMonthDay = liuYueShiErJieSolarMonthDay.get("solarMonthDay"); // 十二节公历月日
|
||||
List<String> lunarMonth = liuYueShiErJieSolarMonthDay.get("lunarMonth"); // 十二节农历月
|
||||
List<String> jie = liuYueShiErJieSolarMonthDay.get("jie"); // 十二节
|
||||
List<List<String>> daYunLiuYueTemporary = new ArrayList<>(); // 临时存储全部大运流月
|
||||
for (LiuNian ln : this.liuNianSource) {
|
||||
LiuYue[] liuYueSource = ln.getLiuYue(); // 获取流月
|
||||
for (int i = 0; i < liuYueSource.length; i++) {
|
||||
daYunLiuYueTemporary.add(Arrays.asList(liuYueSource[i].getGanZhi(), BaZiDaYunLiuNianMap.SHI_ER_SOLAR_MONTH[i], solarMonthDay.get(i), lunarMonth.get(i), jie.get(i))); // 干支、公历月、公历几月几日、十二节农历月、十二节
|
||||
}
|
||||
}
|
||||
|
||||
// 2、遍历大运流月,查找月干支所处的索引
|
||||
Lunar lunar = new Solar(this.solar.getYear(), 2, 10).getLunar();
|
||||
String liChunMonthGanZhi = (this.monthGanZhiType == 0) ? lunar.getMonthInGanZhi() : lunar.getMonthInGanZhiExact(); // 以节交接当天起算 \ 以节交接时刻起算
|
||||
int dayOffset = 0; // 天数偏移量
|
||||
int monthGanZhiIndex = 0; // 月干支所处的索引
|
||||
if (!"立春".equals(lunar.getPrevJie().toString())) {
|
||||
if ("小寒".equals(lunar.getPrevJie().toString())) {
|
||||
// 2.1、上一节为[小寒]时,则向后推算日期,直至当天节为[立春]停止
|
||||
while (true) {
|
||||
dayOffset++;
|
||||
lunar = lunar.next(dayOffset); // 向后n天
|
||||
if (!"小寒".equals(lunar.getPrevJie().toString())) {
|
||||
liChunMonthGanZhi = (this.monthGanZhiType == 0) ? lunar.getMonthInGanZhi() : lunar.getMonthInGanZhiExact(); // 以节交接当天起算 \ 以节交接时刻起算
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if ("惊蛰".equals(lunar.getNextJie().toString())) {
|
||||
// 2.2、下一节为[惊蛰]时,则向前推算日期,直至当天节为[立春]停止
|
||||
while (true) {
|
||||
dayOffset++;
|
||||
lunar = lunar.next(-dayOffset); // 向前n天
|
||||
if (!"惊蛰".equals(lunar.getPrevJie().toString())) {
|
||||
liChunMonthGanZhi = (this.monthGanZhiType == 0) ? lunar.getMonthInGanZhi() : lunar.getMonthInGanZhiExact(); // 以节交接当天起算 \ 以节交接时刻起算
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < daYunLiuYueTemporary.size(); i++) {
|
||||
String ganZhi = daYunLiuYueTemporary.get(i).get(0);
|
||||
if (ganZhi.equals(liChunMonthGanZhi)) {
|
||||
monthGanZhiIndex = i;
|
||||
break;
|
||||
} else {
|
||||
monthGanZhiIndex++;
|
||||
}
|
||||
}
|
||||
if (monthGanZhiIndex == 1 || this.xiaoYunYearSum == 10) monthGanZhiIndex = 0;
|
||||
|
||||
// 3、从月干支索引处向后依次添加流月数据
|
||||
List<List<String>> xiaoYunLiuYueTemporary = new ArrayList<>(); // 临时存储全部小运流月
|
||||
int xiaoYunLiuYueCount = this.xiaoYunYearSum * 12;
|
||||
for (int i = 0; i < xiaoYunLiuYueCount; i++) {
|
||||
int count = i + monthGanZhiIndex;
|
||||
if (count > 119) {
|
||||
i = 0;
|
||||
count = 59;
|
||||
if (xiaoYunLiuYueCount > 59) xiaoYunLiuYueCount -= 59;
|
||||
} else {
|
||||
count = i + monthGanZhiIndex;
|
||||
}
|
||||
List<String> ly = daYunLiuYueTemporary.get(count);
|
||||
xiaoYunLiuYueTemporary.add(Arrays.asList(ly.get(0), ly.get(1), ly.get(2), ly.get(3), ly.get(4))); // 干支、公历月、公历几月几日、十二节农历月、十二节
|
||||
}
|
||||
|
||||
String zhuXing = ""; // 主星
|
||||
String tianGan = ""; // 天干
|
||||
String diZhi = ""; // 地支
|
||||
String ziZuo = ""; // 自坐
|
||||
String xingYun = ""; // 星运
|
||||
String cangGan = ""; // 藏干
|
||||
String fuXing = ""; // 副星
|
||||
String kongWang = ""; // 空亡
|
||||
String naYin = ""; // 纳音
|
||||
String shenSha = ""; // 神煞
|
||||
List<List<String>> liuYue = new ArrayList<>(); // 流月
|
||||
|
||||
// 4、添加流月数据
|
||||
int start; // 开始索引
|
||||
int end; // 结束索引
|
||||
if (daYunLun == 1) {
|
||||
if (this.xiaoYunYearSum == 0) {
|
||||
// 4.1、第一轮大运,若小运持续的年数为0,则获取第一轮大运中第一到十二轮流月数据(说明:当起运时间小于1年时才会出现这种情况)
|
||||
for (int i = 0; i < 12; i++) {
|
||||
List<String> ly = daYunLiuYueTemporary.get(i);
|
||||
String ganZhi = ly.get(0); // 干支
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
if (i == 11) solarYear++;
|
||||
String solarDate = DateUtil.getDateStr(solarYear, Integer.parseInt(ly.get(1)), 1, 0, 0, 0); // 公历日期
|
||||
liuYue.add(Arrays.asList(zhuXing, tianGan, diZhi, cangGan, fuXing, ziZuo, xingYun, kongWang, naYin, shenSha, ly.get(2), ly.get(3), ly.get(4), solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历几月几日、十二节农历月、十二节、公历日期
|
||||
}
|
||||
} else {
|
||||
// 4.2、第一轮大运,小运持续的年数不为0,则获取小运的十二轮流月数据
|
||||
start = 12 * (liuNianXiaoYunLun - 1); // 开始索引
|
||||
end = start + 12; // 结束索引
|
||||
for (int i = start; i < end; i++) {
|
||||
List<String> ly = xiaoYunLiuYueTemporary.get(i);
|
||||
String ganZhi = ly.get(0); // 干支
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
if (i == end - 1) solarYear++;
|
||||
String solarDate = DateUtil.getDateStr(solarYear, Integer.parseInt(ly.get(1)), 1, 0, 0, 0); // 公历日期
|
||||
liuYue.add(Arrays.asList(zhuXing, tianGan, diZhi, cangGan, fuXing, ziZuo, xingYun, kongWang, naYin, shenSha, ly.get(2), ly.get(3), ly.get(4), solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历几月几日、十二节农历月、十二节、公历日期
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 4.3、非第一轮大运
|
||||
start = (12 * (liuNianXiaoYunLun - 1)) == 120 ? 0 : 12 * (liuNianXiaoYunLun - 1); // 开始索引
|
||||
end = start + 12; // 结束索引
|
||||
for (int i = start; i < end; i++) {
|
||||
List<String> ly = daYunLiuYueTemporary.get(i);
|
||||
String ganZhi = ly.get(0); // 干支
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
if (i == end - 1) solarYear++;
|
||||
String solarDate = DateUtil.getDateStr(solarYear, Integer.parseInt(ly.get(1)), 1, 0, 0, 0); // 公历日期
|
||||
liuYue.add(Arrays.asList(zhuXing, tianGan, diZhi, cangGan, fuXing, ziZuo, xingYun, kongWang, naYin, shenSha, ly.get(2), ly.get(3), ly.get(4), solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历几月几日、十二节农历月、十二节、公历日期
|
||||
}
|
||||
}
|
||||
|
||||
// 5、设置数据
|
||||
this.liuYue = liuYue;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化流日
|
||||
*
|
||||
* @param solarYear 公历年
|
||||
* @param solarMonth 公历月
|
||||
*/
|
||||
private void initializeLiuRi(int solarYear, int solarMonth) {
|
||||
|
||||
Map<String, String> shiErZhangShengMap = BaZiJiChuMap.SHI_ER_ZHANG_SHENG; // 十二长生(天干+地支为键)
|
||||
Map<String, List<String>> diZhiCangGanMap = BaZiJiChuMap.DI_ZHI_CANG_GAN; // 地支藏干(地支为键)
|
||||
Map<String, String> shiShenMap = BaZiJiChuMap.SHI_SHEN; // 十神(日干+其他天干\地支为键)
|
||||
Map<String, String> kongWangMap = BaZiJiChuMap.KONG_WANG; // 空亡(干支为键)
|
||||
Map<String, String> naYinMap = BaZiJiChuMap.NA_YIN; // 纳音(干支为键)
|
||||
|
||||
// 1、根据公历年、公历月初始化日期
|
||||
Lunar lunar = new Lunar(new Solar(solarYear, solarMonth, 15));
|
||||
|
||||
// 2、获取上一节、下一节
|
||||
JieQi prevJie = lunar.getPrevJie(true); // 上一节(按天计算)
|
||||
JieQi nextJie = lunar.getNextJie(true); // 下一节(按天计算)
|
||||
|
||||
// 3、获取上一节的农历日期
|
||||
Lunar startLunar = prevJie.getSolar().getLunar();
|
||||
|
||||
String zhuXing = ""; // 主星
|
||||
String tianGan = ""; // 天干
|
||||
String diZhi = ""; // 地支
|
||||
String ziZuo = ""; // 自坐
|
||||
String xingYun = ""; // 星运
|
||||
String cangGan = ""; // 藏干
|
||||
String fuXing = ""; // 副星
|
||||
String kongWang = ""; // 空亡
|
||||
String naYin = ""; // 纳音
|
||||
String shenSha = ""; // 神煞
|
||||
List<List<String>> liuRi = new ArrayList<>(); // 流日
|
||||
|
||||
// 4、添加流日数据
|
||||
for (int i = 0; i < 60; i++) {
|
||||
Solar nextSolar = startLunar.next(i).getSolar(); // 向后推第n天的公历日期
|
||||
Lunar nextLunar = startLunar.next(i); // 向后推第n天的农历日期
|
||||
// 若未到下一节则继续添加
|
||||
if (!nextLunar.getJie().equals(nextJie.toString())) {
|
||||
String ganZhi = (this.dayGanZhiType == 0) ? nextLunar.getDayInGanZhiExact() : nextLunar.getDayInGanZhiExact2(); // 日干支(晚子时日柱算明天\晚子时日柱算当天)
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
String solarDate = DateUtil.getDateStr(nextSolar.getYear(), nextSolar.getMonth(), nextSolar.getDay(), 0, 0, 0); // 公历日期
|
||||
liuRi.add(Arrays.asList(zhuXing, tianGan, diZhi, ziZuo, xingYun, cangGan, fuXing, kongWang, naYin, shenSha, nextSolar.getDay() + "日", nextLunar.getDayInChinese(), solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历日、农历日、公历日期
|
||||
} else break;
|
||||
}
|
||||
|
||||
// 5、设置数据
|
||||
this.liuRi = liuRi;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化流时
|
||||
*
|
||||
* @param solarYear 公历年
|
||||
* @param solarMonth 公历月
|
||||
* @param solarDay 公历日
|
||||
*/
|
||||
private void initializeLiuShi(int solarYear, int solarMonth, int solarDay) {
|
||||
|
||||
Map<String, String> shiErZhangShengMap = BaZiJiChuMap.SHI_ER_ZHANG_SHENG; // 十二长生(天干+地支为键)
|
||||
Map<String, List<String>> diZhiCangGanMap = BaZiJiChuMap.DI_ZHI_CANG_GAN; // 地支藏干(地支为键)
|
||||
Map<String, String> shiShenMap = BaZiJiChuMap.SHI_SHEN; // 十神(日干+其他天干\地支为键)
|
||||
Map<String, String> kongWangMap = BaZiJiChuMap.KONG_WANG; // 空亡(干支为键)
|
||||
Map<String, String> naYinMap = BaZiJiChuMap.NA_YIN; // 纳音(干支为键)
|
||||
|
||||
String zhuXing = ""; // 主星
|
||||
String tianGan = ""; // 天干
|
||||
String diZhi = ""; // 地支
|
||||
String ziZuo = ""; // 自坐
|
||||
String xingYun = ""; // 星运
|
||||
String cangGan = ""; // 藏干
|
||||
String fuXing = ""; // 副星
|
||||
String kongWang = ""; // 空亡
|
||||
String naYin = ""; // 纳音
|
||||
String shenSha = ""; // 神煞
|
||||
List<List<String>> liuShi = new ArrayList<>(); // 流时
|
||||
|
||||
// 1、添加流时数据
|
||||
int hour = 0; // 小时数
|
||||
Solar solar = new Solar(solarYear, solarMonth, solarDay);
|
||||
for (int i = 0; i < 12; i++) {
|
||||
// 通过公历日期初始化
|
||||
Lunar lunar = new Lunar(DateUtil.timeToDate(solar.getYear(), solar.getMonth(), solar.getDay(), hour, 0, 0));
|
||||
String ganZhi = lunar.getTimeInGanZhi(); // 干支
|
||||
if (StringUtils.isNotBlank(ganZhi) && ganZhi.length() >= 2) {
|
||||
tianGan = ganZhi.substring(0, 1); // 天干
|
||||
diZhi = ganZhi.substring(1, 2); // 地支
|
||||
zhuXing = shiShenMap.get(this.dayGan + tianGan); // 主星
|
||||
ziZuo = shiErZhangShengMap.get(ganZhi); // 自坐
|
||||
xingYun = shiErZhangShengMap.get(this.dayGan + diZhi); // 星运
|
||||
List<String> cangGanList = diZhiCangGanMap.get(diZhi); // 藏干集合
|
||||
cangGan = String.join(CommonUtil.EMPTY1, cangGanList); // 藏干
|
||||
List<String> fuXingList = new ArrayList<>(); // 副星集合
|
||||
for (String item : cangGanList) {
|
||||
fuXingList.add(shiShenMap.get(this.dayGan + item));
|
||||
}
|
||||
fuXing = String.join(CommonUtil.EMPTY1, fuXingList); // 副星
|
||||
kongWang = kongWangMap.get(ganZhi); // 空亡
|
||||
naYin = naYinMap.get(ganZhi); // 纳音
|
||||
BaZiShenShaUtil shenShaUtil = new BaZiShenShaUtil(this.baZiShenShaSetting, this.sex, this.jiJie, this.yearGanZhiNaYinWuXing, this.yearGanZhi, this.monthGanZhi, this.dayGanZhi, this.hourGanZhi, ganZhi);
|
||||
shenSha = String.join(CommonUtil.EMPTY1, shenShaUtil.getArbitraryGanZhiShenSha()); // 神煞
|
||||
}
|
||||
String solarDate = DateUtil.getDateStr(solarYear, solarMonth, solarDay, BaZiDaYunLiuNianMap.SHI_ER_SHI_2[i], 0, 0); // 公历日期
|
||||
liuShi.add(Arrays.asList(zhuXing, tianGan, diZhi, cangGan, fuXing, ziZuo, xingYun, kongWang, naYin, shenSha, BaZiDaYunLiuNianMap.SHI_ER_SHI[i], BaZiDaYunLiuNianMap.DI_ZHI_HAN_MING[i], solarDate)); // 主星、天干、地支、藏干、副星、自坐、星运、空亡、纳音、神煞、公历时、汉代命名、公历日期
|
||||
hour += 2;
|
||||
}
|
||||
|
||||
// 2、设置数据
|
||||
this.liuShi = liuShi;
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* 计算流月的计十二节公历月日、农历月、十二节
|
||||
*
|
||||
* @param solarYear 公历年
|
||||
* @return 十二节公历月日、农历月、十二节
|
||||
*/
|
||||
protected Map<String, List<String>> computeLiuYueShiErJieSolarMonthDay(int solarYear) {
|
||||
|
||||
Map<String, List<String>> map = new HashMap<>();
|
||||
List<String> solarMonthDay = new ArrayList<>(); // 保存十二节公历月日
|
||||
List<String> lunarMonth = new ArrayList<>(); // 保存十二节农历月
|
||||
List<String> jie = new ArrayList<>(); // 保存十二节
|
||||
|
||||
Lunar lunar = new Solar(solarYear, 1, 1).getLunar();
|
||||
|
||||
int i = 0; // 十二节索引
|
||||
int day = 0; // 向后查询的天数
|
||||
while (true) {
|
||||
Lunar nextLunar = lunar.next(day); // 向后第n天的农历日期
|
||||
if (nextLunar.getJie().equals(BaZiDaYunLiuNianMap.SHI_ER_JIE[i])) {
|
||||
Solar nextSolar = nextLunar.getSolar(); // 向后第n天的公历日期
|
||||
solarMonthDay.add(nextSolar.getMonth() + "/" + nextSolar.getDay()); // 十二节公历月日
|
||||
lunarMonth.add(nextLunar.getMonthInChinese() + "月"); // 十二节农历月
|
||||
jie.add(BaZiDaYunLiuNianMap.SHI_ER_JIE[i]); // 十二节
|
||||
map.put("solarMonthDay", solarMonthDay);
|
||||
map.put("lunarMonth", lunarMonth);
|
||||
map.put("jie", jie);
|
||||
i++;
|
||||
if (i > 11) break;
|
||||
day += 26;
|
||||
}
|
||||
day++;
|
||||
}
|
||||
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,269 @@
|
||||
package xuan.core.bazi.utils;
|
||||
|
||||
import xuan.utils.CommonUtil;
|
||||
import xuan.core.bazi.maps.BaZiGanZhiLiuYiMap;
|
||||
import xuan.core.bazi.settings.BaZiGanZhiLiuYiSetting;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 八字 - 干支留意工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class BaZiGanZhiLiuYiUtil {
|
||||
|
||||
/**
|
||||
* 计算天干留意
|
||||
*
|
||||
* @param baZiGanZhiLiuYiSetting 八字 - 干支留意设置
|
||||
* @param yearGan 年干
|
||||
* @param monthGan 月干
|
||||
* @param dayGan 日干
|
||||
* @param hourGan 时干
|
||||
* @param daYunGan 大运干
|
||||
* @param liuNianGan 流年干
|
||||
* @param liuYueGan 流月干
|
||||
* @param liuRiGan 流日干
|
||||
* @param liuShiGan 流时干
|
||||
*/
|
||||
public static List<String> tanGanLiuYi(BaZiGanZhiLiuYiSetting baZiGanZhiLiuYiSetting, String yearGan, String monthGan, String dayGan, String hourGan, String daYunGan, String liuNianGan, String liuYueGan, String liuRiGan, String liuShiGan) {
|
||||
|
||||
Set<String> set = new HashSet<>();
|
||||
|
||||
if (baZiGanZhiLiuYiSetting.getTianGanXiangSheng() == 0) addGanZhiLiuYi(yearGan, monthGan, dayGan, hourGan, daYunGan, liuNianGan, liuYueGan, liuRiGan, liuShiGan, baZiGanZhiLiuYiSetting.getTianGanXiangShengType() == 0, set, BaZiGanZhiLiuYiMap.TIAN_GAN_XIANG_SHENG); // 天干相生
|
||||
if (baZiGanZhiLiuYiSetting.getTianGanXiangHe() == 0) addGanZhiLiuYi(yearGan, monthGan, dayGan, hourGan, daYunGan, liuNianGan, liuYueGan, liuRiGan, liuShiGan, baZiGanZhiLiuYiSetting.getTianGanXiangHeType() == 0, set, BaZiGanZhiLiuYiMap.TIAN_GAN_XIANG_HE); // 天干相合
|
||||
if (baZiGanZhiLiuYiSetting.getTianGanXiangChong() == 0) addGanZhiLiuYi(yearGan, monthGan, dayGan, hourGan, daYunGan, liuNianGan, liuYueGan, liuRiGan, liuShiGan, baZiGanZhiLiuYiSetting.getTianGanXiangChongType() == 0, set, BaZiGanZhiLiuYiMap.TIAN_GAN_XIANG_CHONG); // 天干相冲
|
||||
if (baZiGanZhiLiuYiSetting.getTianGanXiangKe() == 0) addGanZhiLiuYi(yearGan, monthGan, dayGan, hourGan, daYunGan, liuNianGan, liuYueGan, liuRiGan, liuShiGan, baZiGanZhiLiuYiSetting.getTianGanXiangKeType() == 0, set, BaZiGanZhiLiuYiMap.TIAN_GAN_XIANG_KE); // 天干相克
|
||||
if (baZiGanZhiLiuYiSetting.getJiaBingXiangSheng() == 1) set.remove("甲丙相生");
|
||||
if (baZiGanZhiLiuYiSetting.getJiaDingXiangSheng() == 1) set.remove("甲丁相生");
|
||||
if (baZiGanZhiLiuYiSetting.getYiBingXiangSheng() == 1) set.remove("乙丙相生");
|
||||
if (baZiGanZhiLiuYiSetting.getYiDingXiangSheng() == 1) set.remove("乙丁相生");
|
||||
if (baZiGanZhiLiuYiSetting.getBingWuXiangSheng() == 1) set.remove("丙戊相生");
|
||||
if (baZiGanZhiLiuYiSetting.getBingWuXiangSheng() == 1) set.remove("丙己相生");
|
||||
if (baZiGanZhiLiuYiSetting.getDingWuXiangSheng() == 1) set.remove("丁戊相生");
|
||||
if (baZiGanZhiLiuYiSetting.getDingJiXiangSheng() == 1) set.remove("丁己相生");
|
||||
if (baZiGanZhiLiuYiSetting.getWuGengXiangSheng() == 1) set.remove("戊庚相生");
|
||||
if (baZiGanZhiLiuYiSetting.getWuXinXiangSheng() == 1) set.remove("戊辛相生");
|
||||
if (baZiGanZhiLiuYiSetting.getJiGengXiangSheng() == 1) set.remove("己庚相生");
|
||||
if (baZiGanZhiLiuYiSetting.getJiXinXiangSheng() == 1) set.remove("己辛相生");
|
||||
if (baZiGanZhiLiuYiSetting.getGengRenXiangSheng() == 1) set.remove("庚壬相生");
|
||||
if (baZiGanZhiLiuYiSetting.getGengGuiXiangSheng() == 1) set.remove("庚癸相生");
|
||||
if (baZiGanZhiLiuYiSetting.getXinRenXiangSheng() == 1) set.remove("辛壬相生");
|
||||
if (baZiGanZhiLiuYiSetting.getXinGuiXiangSheng() == 1) set.remove("辛癸相生");
|
||||
if (baZiGanZhiLiuYiSetting.getRenJiaXiangSheng() == 1) set.remove("壬甲相生");
|
||||
if (baZiGanZhiLiuYiSetting.getRenYiXiangSheng() == 1) set.remove("壬乙相生");
|
||||
if (baZiGanZhiLiuYiSetting.getGuiJiaXiangSheng() == 1) set.remove("癸甲相生");
|
||||
if (baZiGanZhiLiuYiSetting.getGuiYiXiangSheng() == 1) set.remove("癸乙相生");
|
||||
if (baZiGanZhiLiuYiSetting.getJiaJiXiangHe() == 1) set.remove("甲己相合");
|
||||
if (baZiGanZhiLiuYiSetting.getYiGengXiangHe() == 1) set.remove("乙庚相合");
|
||||
if (baZiGanZhiLiuYiSetting.getBingXinXiangHe() == 1) set.remove("丙辛相合");
|
||||
if (baZiGanZhiLiuYiSetting.getDingRenXiangHe() == 1) set.remove("丁壬相合");
|
||||
if (baZiGanZhiLiuYiSetting.getWuGuiXiangHe() == 1) set.remove("戊癸相合");
|
||||
if (baZiGanZhiLiuYiSetting.getJiaGengXiangChong() == 1) set.remove("甲庚相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getYiXinXiangChong() == 1) set.remove("乙辛相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getBingRenXiangChong() == 1) set.remove("丙壬相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getDingGuiXiangChong() == 1) set.remove("丁癸相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getJiaWuXiangKe() == 1) set.remove("甲戊相克");
|
||||
if (baZiGanZhiLiuYiSetting.getYiJiXiangKe() == 1) set.remove("乙己相克");
|
||||
if (baZiGanZhiLiuYiSetting.getBingGengXiangKe() == 1) set.remove("丙庚相克");
|
||||
if (baZiGanZhiLiuYiSetting.getDingXinXiangKe() == 1) set.remove("丁辛相克");
|
||||
if (baZiGanZhiLiuYiSetting.getWuRenXiangKe() == 1) set.remove("戊壬相克");
|
||||
if (baZiGanZhiLiuYiSetting.getJiGuiXiangKe() == 1) set.remove("己癸相克");
|
||||
if (baZiGanZhiLiuYiSetting.getGengJiaXiangKe() == 1) set.remove("庚甲相克");
|
||||
if (baZiGanZhiLiuYiSetting.getXinYiXiangKe() == 1) set.remove("辛乙相克");
|
||||
if (baZiGanZhiLiuYiSetting.getRenBingXiangKe() == 1) set.remove("壬丙相克");
|
||||
if (baZiGanZhiLiuYiSetting.getGuiDingXiangKe() == 1) set.remove("癸丁相克");
|
||||
|
||||
return CommonUtil.removeDuplicatesList(new ArrayList<>(set));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算地支留意
|
||||
*
|
||||
* @param baZiGanZhiLiuYiSetting 八字 - 干支留意设置
|
||||
* @param yearZhi 年支
|
||||
* @param monthZhi 月支
|
||||
* @param dayZhi 日支
|
||||
* @param hourZhi 时支
|
||||
* @param daYunZhi 大运支
|
||||
* @param liuNianZhi 流年支
|
||||
* @param liuYueZhi 流月支
|
||||
* @param liuRiZhi 流日支
|
||||
* @param liuShiZhi 流时支
|
||||
*/
|
||||
public static List<String> diZhiLiuYi(BaZiGanZhiLiuYiSetting baZiGanZhiLiuYiSetting, String yearZhi, String monthZhi, String dayZhi, String hourZhi, String daYunZhi, String liuNianZhi, String liuYueZhi, String liuRiZhi, String liuShiZhi) {
|
||||
|
||||
Set<String> set = new HashSet<>();
|
||||
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiBanHe() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiBanHeType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_BAN_HE); // 地支半合
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiGongHe() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiGongHeType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_GONG_HE); // 地支拱合
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiAnHe() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiAnHeType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_AN_HE); // 地支暗合
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiLiuHe() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiLiuHeType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_LIU_HE); // 地支六合
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiXiangXing() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiXiangXingType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_XIANG_XING); // 地支相刑
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiXiangChong() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiXiangChongType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_XIANG_CHONG); // 地支相冲
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiXiangPo() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiXiangPoType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_XIANG_PO); // 地支相破
|
||||
if (baZiGanZhiLiuYiSetting.getDiZhiXiangHai() == 0) addGanZhiLiuYi(yearZhi, monthZhi, dayZhi, hourZhi, daYunZhi, liuNianZhi, liuYueZhi, liuRiZhi, liuShiZhi, baZiGanZhiLiuYiSetting.getDiZhiXiangHaiType() == 0, set, BaZiGanZhiLiuYiMap.DI_ZHI_XIANG_HAI); // 地支相害
|
||||
if (baZiGanZhiLiuYiSetting.getYinWuBanHe() == 1) set.remove("寅午半合火局");
|
||||
if (baZiGanZhiLiuYiSetting.getShenZiBanHe() == 1) set.remove("申子半合水局");
|
||||
if (baZiGanZhiLiuYiSetting.getSiYouBanHe() == 1) set.remove("巳酉半合金局");
|
||||
if (baZiGanZhiLiuYiSetting.getHaiMaoBanHe() == 1) set.remove("亥卯半合木局");
|
||||
if (baZiGanZhiLiuYiSetting.getZiChenBanHe() == 1) set.remove("子辰半合水局");
|
||||
if (baZiGanZhiLiuYiSetting.getWuXuBanHe() == 1) set.remove("午戌半合火局");
|
||||
if (baZiGanZhiLiuYiSetting.getMaoWeiBanHe() == 1) set.remove("卯未半合木局");
|
||||
if (baZiGanZhiLiuYiSetting.getYouChouBanHe() == 1) set.remove("酉丑半合金局");
|
||||
if (baZiGanZhiLiuYiSetting.getShenChenGongHe() == 1) set.remove("申辰拱合子");
|
||||
if (baZiGanZhiLiuYiSetting.getHaiWeiGongHe() == 1) set.remove("亥未拱合卯");
|
||||
if (baZiGanZhiLiuYiSetting.getYinXuGongHe() == 1) set.remove("寅戌拱合午");
|
||||
if (baZiGanZhiLiuYiSetting.getSiChouGongHe() == 1) set.remove("巳丑拱合酉");
|
||||
if (baZiGanZhiLiuYiSetting.getMaoShenAnHe() == 1) set.remove("卯申暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getWuHaiAnHe() == 1) set.remove("午亥暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getChouYinAnHe() == 1) set.remove("丑寅暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getYinWeiAnHe() == 1) set.remove("寅未暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getYinWuAnHe() == 1) set.remove("寅午暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getZiXuAnHe() == 1) set.remove("子戌暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getZiChenAnHe() == 1) set.remove("子辰暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getZiSiAnHe() == 1) set.remove("子巳暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getSiYouAnHe() == 1) set.remove("巳酉暗合");
|
||||
if (baZiGanZhiLiuYiSetting.getZiChouLiuHe() == 1) set.remove("子丑合化土");
|
||||
if (baZiGanZhiLiuYiSetting.getYinHaiLiuHe() == 1) set.remove("寅亥合化木");
|
||||
if (baZiGanZhiLiuYiSetting.getMaoXuLiuHe() == 1) set.remove("卯戌合化火");
|
||||
if (baZiGanZhiLiuYiSetting.getChenYouLiuHe() == 1) set.remove("辰酉合化金");
|
||||
if (baZiGanZhiLiuYiSetting.getSiShenLiuHe() == 1) set.remove("巳申合化水");
|
||||
if (baZiGanZhiLiuYiSetting.getWuWeiLiuHe() == 1) set.remove("午未合化火");
|
||||
if (baZiGanZhiLiuYiSetting.getYinSiXiangXing() == 1) set.remove("寅巳相刑");
|
||||
if (baZiGanZhiLiuYiSetting.getSiShenXiangXing() == 1) set.remove("巳申相刑");
|
||||
if (baZiGanZhiLiuYiSetting.getShenYinXiangXing() == 1) set.remove("申寅相刑");
|
||||
if (baZiGanZhiLiuYiSetting.getChouXuXiangXing() == 1) set.remove("丑戌相刑");
|
||||
if (baZiGanZhiLiuYiSetting.getXuWeiXiangXing() == 1) set.remove("戌未相刑");
|
||||
if (baZiGanZhiLiuYiSetting.getWeiChouXiangXing() == 1) set.remove("未丑相刑");
|
||||
if (baZiGanZhiLiuYiSetting.getZiMaoXiangXing() == 1) set.remove("子卯相刑");
|
||||
if (baZiGanZhiLiuYiSetting.getYouYouXiangXing() == 1) set.remove("酉酉自刑");
|
||||
if (baZiGanZhiLiuYiSetting.getHaiHaiXiangXing() == 1) set.remove("亥亥自刑");
|
||||
if (baZiGanZhiLiuYiSetting.getWuWuXiangXing() == 1) set.remove("午午自刑");
|
||||
if (baZiGanZhiLiuYiSetting.getChenChenXiangXing() == 1) set.remove("辰辰自刑");
|
||||
if (baZiGanZhiLiuYiSetting.getZiWuXiangChong() == 1) set.remove("子午相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getChouWeiXiangChong() == 1) set.remove("丑未相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getYinShenXiangChong() == 1) set.remove("寅申相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getMaoYouXiangChong() == 1) set.remove("卯酉相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getChenXuXiangChong() == 1) set.remove("辰戌相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getSiHaiXiangChong() == 1) set.remove("巳亥相冲");
|
||||
if (baZiGanZhiLiuYiSetting.getZiYouXiangPo() == 1) set.remove("子酉相破");
|
||||
if (baZiGanZhiLiuYiSetting.getYinHaiXiangPo() == 1) set.remove("寅亥相破");
|
||||
if (baZiGanZhiLiuYiSetting.getMaoWuXiangPo() == 1) set.remove("卯午相破");
|
||||
if (baZiGanZhiLiuYiSetting.getChenChouXiangPo() == 1) set.remove("辰丑相破");
|
||||
if (baZiGanZhiLiuYiSetting.getSiShenXiangPo() == 1) set.remove("巳申相破");
|
||||
if (baZiGanZhiLiuYiSetting.getXuWeiXiangPo() == 1) set.remove("戌未相破");
|
||||
if (baZiGanZhiLiuYiSetting.getZiWeiXiangHai() == 1) set.remove("子未相害");
|
||||
if (baZiGanZhiLiuYiSetting.getChouWuXiangHai() == 1) set.remove("丑午相害");
|
||||
if (baZiGanZhiLiuYiSetting.getYinSiXiangHai() == 1) set.remove("寅巳相害");
|
||||
if (baZiGanZhiLiuYiSetting.getMaoChenXiangHai() == 1) set.remove("卯辰相害");
|
||||
if (baZiGanZhiLiuYiSetting.getShenHaiXiangHai() == 1) set.remove("申亥相害");
|
||||
if (baZiGanZhiLiuYiSetting.getYouXuXiangHai() == 1) set.remove("酉戌相害");
|
||||
|
||||
return CommonUtil.removeDuplicatesList(new ArrayList<>(set));
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 添加天干\地支留意
|
||||
*
|
||||
* @param yearGanOrZhi 年干\年支
|
||||
* @param monthGanOrZhi 月干\月支
|
||||
* @param dayGanOrZhi 日干\日支
|
||||
* @param hourGanOrZhi 时干\时支
|
||||
* @param daYunGanOrZhi 大运干\大运支
|
||||
* @param liuNianGanOrZhi 流年干\流年支
|
||||
* @param liuYueGanOrZhi 流月干\流月支
|
||||
* @param liuRiGanOrZhi 流日干\流日支
|
||||
* @param liuShiGanOrZhi 流时干\流时支
|
||||
* @param type 是否以任意两干计算(true:以任意两干计算。false:以相邻两干计算)
|
||||
* @param set 天干\地支组合
|
||||
* @param map 天干\地支关系
|
||||
*/
|
||||
private static void addGanZhiLiuYi(String yearGanOrZhi, String monthGanOrZhi, String dayGanOrZhi, String hourGanOrZhi, String daYunGanOrZhi, String liuNianGanOrZhi, String liuYueGanOrZhi, String liuRiGanOrZhi, String liuShiGanOrZhi, boolean type, Set<String> set, Map<String, String> map) {
|
||||
|
||||
set.add(map.get(yearGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + liuYueGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + liuRiGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + liuYueGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + liuRiGanOrZhi));
|
||||
|
||||
// 若以相邻两干计算时,则停止
|
||||
if (!type) return;
|
||||
|
||||
set.add(map.get(yearGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(yearGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(yearGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(yearGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(yearGanOrZhi + liuYueGanOrZhi));
|
||||
set.add(map.get(yearGanOrZhi + liuRiGanOrZhi));
|
||||
set.add(map.get(yearGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + liuYueGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + liuRiGanOrZhi));
|
||||
set.add(map.get(monthGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + liuYueGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + liuRiGanOrZhi));
|
||||
set.add(map.get(dayGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + liuYueGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + liuRiGanOrZhi));
|
||||
set.add(map.get(hourGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + liuYueGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + liuRiGanOrZhi));
|
||||
set.add(map.get(daYunGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + liuRiGanOrZhi));
|
||||
set.add(map.get(liuNianGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(liuYueGanOrZhi + liuShiGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(liuRiGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + yearGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + monthGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + dayGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + hourGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + daYunGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + liuNianGanOrZhi));
|
||||
set.add(map.get(liuShiGanOrZhi + liuYueGanOrZhi));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package xuan.core.bazi.utils;
|
||||
|
||||
import xuan.utils.CommonUtil;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 八字 - 基础工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class BaZiJiChuUtil {
|
||||
|
||||
/**
|
||||
* 返回干支加分
|
||||
*
|
||||
* @param shengKe 天干和干支五行的生克关系
|
||||
* @param ganOrZhi1 天干或地支
|
||||
* @param ganOrZhi2 天干或地支
|
||||
* @param jiaFen 加分
|
||||
* @return 干支加分
|
||||
*/
|
||||
public static int ganZhiJiaFen(Map<String, String> shengKe, String ganOrZhi1, String ganOrZhi2, int jiaFen) {
|
||||
|
||||
int ganZhiJiaFen = 0;
|
||||
String qiangOrRuo = shengKe.get(ganOrZhi1 + ganOrZhi2); // '身强'或'身弱'
|
||||
if ("身强".equals(qiangOrRuo)) ganZhiJiaFen += jiaFen;
|
||||
return ganZhiJiaFen;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 骨重转为文字
|
||||
*
|
||||
* @param guZhong 骨重
|
||||
* @return 骨重文字(如:七两)
|
||||
*/
|
||||
public static String guZhongCharacters(Integer guZhong) {
|
||||
|
||||
long liang = Long.parseLong(guZhong.toString().substring(0, 1)); // 两重
|
||||
long qian = Long.parseLong(guZhong.toString().substring(1, 2)); // 钱重
|
||||
String newGuZhong = CommonUtil.shuToHan(liang) + "两";
|
||||
if (0 != qian) newGuZhong += CommonUtil.shuToHan(qian) + "钱";
|
||||
return newGuZhong;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,12 @@
|
||||
package xuan.core.daliuren.maps;
|
||||
|
||||
/**
|
||||
* 大六壬 - 神煞常量
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class DaLiuRenShenShaMap {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
package xuan.core.daliuren.settings;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.utils.DateUtil;
|
||||
|
||||
/**
|
||||
* 大六壬 - 基础设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class DaLiuRenJiChuSetting {
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*/
|
||||
private String occupy;
|
||||
|
||||
/**
|
||||
* 性别(0:女。1:男)
|
||||
*/
|
||||
private int sex;
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*/
|
||||
private String date;
|
||||
|
||||
/**
|
||||
* 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
private int dateType;
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
private int leapMonthType;
|
||||
|
||||
/**
|
||||
* 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
private int xuShiSuiType;
|
||||
|
||||
/**
|
||||
* 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
private int jieQiType;
|
||||
|
||||
/**
|
||||
* 贵人类型(0:自动切换。1:昼贵。2:夜贵)
|
||||
*/
|
||||
private int guiRenType;
|
||||
|
||||
/**
|
||||
* 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
private int yearGanZhiType;
|
||||
|
||||
/**
|
||||
* 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
private int monthGanZhiType;
|
||||
|
||||
/**
|
||||
* 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
private int dayGanZhiType;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public DaLiuRenJiChuSetting() {
|
||||
|
||||
this.name = ""; // 姓名(默认→ 缘主)
|
||||
this.occupy = ""; // 占事(默认→ 空)
|
||||
this.sex = 1; // 性别(默认→ 男)
|
||||
this.date = "2024-01-01 00:00:00"; // 日期(默认→ 2024-01-01 00:00:00)
|
||||
this.dateType = 0; // 日期类型(默认→ 公历)
|
||||
this.leapMonthType = 0; // 闰月类型,日期类型为1时生效(默认→ 不使用闰月)
|
||||
this.xuShiSuiType = 0; // 虚实岁类型(默认→ 虚岁)
|
||||
this.jieQiType = 1; // 节气类型(默认→ 按分钟计算)
|
||||
this.guiRenType = 0; // 贵人类型(默认→ 自动切换)
|
||||
this.yearGanZhiType = 2; // 年干支类型(默认→ 以立春交接时刻作为新年的开始)
|
||||
this.monthGanZhiType = 1; // 月干支类型(默认→ 以节交接时刻起算)
|
||||
this.dayGanZhiType = 0; // 日干支类型(默认→ 晚子时日柱按当天)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*
|
||||
* @param name 姓名
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = StringUtils.isNotBlank(name) ? name : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*
|
||||
* @param occupy 占事
|
||||
*/
|
||||
public void setOccupy(String occupy) {
|
||||
this.occupy = StringUtils.isNotBlank(occupy) ? occupy : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*
|
||||
* @param sex 性别(0:女。1:男)
|
||||
*/
|
||||
public void setSex(int sex) {
|
||||
this.sex = (sex == 0 || sex == 1) ? sex : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*
|
||||
* @param date 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = DateUtil.isValidDate(date) ? date : "2024-01-01 00:00:00";
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期类型
|
||||
*
|
||||
* @param dateType 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
public void setDateType(int dateType) {
|
||||
this.dateType = (dateType == 0 || dateType == 1) ? dateType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效
|
||||
*
|
||||
* @param leapMonthType 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
public void setLeapMonthType(int leapMonthType) {
|
||||
this.leapMonthType = (leapMonthType == 0 || leapMonthType == 1) ? leapMonthType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 虚实岁类型
|
||||
*
|
||||
* @param xuShiSuiType 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
public void setXuShiSuiType(int xuShiSuiType) {
|
||||
this.xuShiSuiType = (xuShiSuiType == 0 || xuShiSuiType == 1) ? xuShiSuiType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 节气类型
|
||||
*
|
||||
* @param jieQiType 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
public void setJieQiType(int jieQiType) {
|
||||
this.jieQiType = (jieQiType == 0 || jieQiType == 1) ? jieQiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 贵人类型
|
||||
*
|
||||
* @param guiRenType 贵人类型(0:自动切换。1:昼贵。2:夜贵)
|
||||
*/
|
||||
public void setGuiRenType(int guiRenType) {
|
||||
this.guiRenType = (guiRenType == 0 || guiRenType == 1 || guiRenType == 2) ? guiRenType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 年干支类型
|
||||
*
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
public void setYearGanZhiType(int yearGanZhiType) {
|
||||
this.yearGanZhiType = (yearGanZhiType == 0 || yearGanZhiType == 1 || yearGanZhiType == 2) ? yearGanZhiType : 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月干支类型
|
||||
*
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
public void setMonthGanZhiType(int monthGanZhiType) {
|
||||
this.monthGanZhiType = (monthGanZhiType == 0 || monthGanZhiType == 1) ? monthGanZhiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日干支类型
|
||||
*
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日干支按当天。1:晚子时日干支按明天)
|
||||
*/
|
||||
public void setDayGanZhiType(int dayGanZhiType) {
|
||||
this.dayGanZhiType = (dayGanZhiType == 0 || dayGanZhiType == 1) ? dayGanZhiType : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package xuan.core.daliuren.settings;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 大六壬 - 神煞设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class DaLiuRenShenShaSetting {
|
||||
|
||||
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public DaLiuRenShenShaSetting() {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package xuan.core.daliuren.utils;
|
||||
|
||||
/**
|
||||
* 大六壬 - 基础工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class DaLiuRenJiChuUtil {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package xuan.core.daliuren.utils;
|
||||
|
||||
/**
|
||||
* 大六壬 - 神煞工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class DaLiuRenShenShaUtil {
|
||||
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,605 @@
|
||||
package xuan.core.liuyao.maps;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 六爻 - 神煞常量
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class LiuYaoShenShaMap {
|
||||
|
||||
/**
|
||||
* 太极贵人(年干\日干+四柱地支为键)
|
||||
*/
|
||||
public static final Map<String, String> TAI_JI_GUI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/*
|
||||
一、略解:
|
||||
【以年干\日干查四柱地支】甲见'子\午'。乙见'子\午'。丙见'卯\酉'。丁见'卯\酉'。戊见'辰\戌\丑\未'。己见'辰\戌\丑\未'。庚见'寅\亥'。辛见'寅\亥'。壬见'巳\申'。癸见'巳\申'
|
||||
|
||||
二、详解:
|
||||
年干\日干是甲,并且四柱地支有子\午
|
||||
年干\日干是乙,并且四柱地支有子\午
|
||||
年干\日干是丙,并且四柱地支有卯\酉
|
||||
年干\日干是丁,并且四柱地支有卯\酉
|
||||
年干\日干是戊,并且四柱地支有辰\戌\丑\未
|
||||
年干\日干是己,并且四柱地支有辰\戌\丑\未
|
||||
年干\日干是庚,并且四柱地支有寅\亥
|
||||
年干\日干是辛,并且四柱地支有寅\亥
|
||||
年干\日干是壬,并且四柱地支有巳\申
|
||||
年干\日干是癸,并且四柱地支有巳\申
|
||||
*/
|
||||
|
||||
{
|
||||
put("甲子", "子");
|
||||
put("甲午", "午");
|
||||
put("乙子", "子");
|
||||
put("乙午", "午");
|
||||
put("丙卯", "卯");
|
||||
put("丙酉", "酉");
|
||||
put("丁卯", "卯");
|
||||
put("丁酉", "酉");
|
||||
put("戊辰", "辰");
|
||||
put("戊戌", "戌");
|
||||
put("戊丑", "丑");
|
||||
put("戊未", "未");
|
||||
put("己辰", "辰");
|
||||
put("己戌", "戌");
|
||||
put("己丑", "丑");
|
||||
put("己未", "未");
|
||||
put("庚寅", "寅");
|
||||
put("庚亥", "亥");
|
||||
put("辛寅", "寅");
|
||||
put("辛亥", "亥");
|
||||
put("壬巳", "巳");
|
||||
put("壬申", "申");
|
||||
put("癸巳", "巳");
|
||||
put("癸申", "申");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天乙贵人(日干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_YI_GUI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日干查→ 甲在'丑未'。乙在'申子'。丙在'酉亥'。丁在'酉亥'。戊在'丑未'。己在'申子'。庚在'寅午'。辛在'寅午'。壬在'卯巳'。癸在'卯巳' */
|
||||
|
||||
{
|
||||
put("甲", "丑未");
|
||||
put("乙", "申子");
|
||||
put("丙", "酉亥");
|
||||
put("丁", "酉亥");
|
||||
put("戊", "丑未");
|
||||
put("己", "申子");
|
||||
put("庚", "寅午");
|
||||
put("辛", "寅午");
|
||||
put("壬", "卯巳");
|
||||
put("癸", "卯巳");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 福星贵人(日干+四柱地支为键)
|
||||
*/
|
||||
public static final Map<String, String> FU_XING_GUI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/*
|
||||
一、略解:
|
||||
【以日干查四柱地支】甲见'寅'。乙见'丑\卯'。丙见'寅'。丁见'亥'。戊见'申'。己见'未'。庚见'午'。辛见'巳'。壬见'辰'。癸见'丑\卯'
|
||||
|
||||
二、详解:
|
||||
日干是甲,并且四柱地支有寅
|
||||
日干是乙,并且四柱地支有丑\卯
|
||||
日干是丙,并且四柱地支有寅
|
||||
日干是丁,并且四柱地支有亥
|
||||
日干是戊,并且四柱地支有申
|
||||
日干是己,并且四柱地支有未
|
||||
日干是庚,并且四柱地支有午
|
||||
日干是辛,并且四柱地支有巳
|
||||
日干是壬,并且四柱地支有辰
|
||||
日干是癸,并且四柱地支有丑\卯
|
||||
*/
|
||||
|
||||
{
|
||||
put("甲寅", "寅");
|
||||
put("乙丑", "丑");
|
||||
put("乙卯", "卯");
|
||||
put("丙寅", "寅");
|
||||
put("丁亥", "亥");
|
||||
put("戊申", "申");
|
||||
put("己未", "未");
|
||||
put("庚午", "午");
|
||||
put("辛巳", "巳");
|
||||
put("壬辰", "辰");
|
||||
put("癸丑", "丑");
|
||||
put("癸卯", "卯");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 文昌贵人(日干为键)
|
||||
*/
|
||||
public static final Map<String, String> WEN_CHANG_GUI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日干查→ 甲在'巳'。乙在'午'。丙在'申'。丁在'酉'。戊在'申'。己在'酉'。庚在'亥'。辛在'子'。壬在'寅'。癸在'卯' */
|
||||
|
||||
{
|
||||
put("甲", "巳");
|
||||
put("乙", "午");
|
||||
put("丙", "申");
|
||||
put("丁", "酉");
|
||||
put("戊", "申");
|
||||
put("己", "酉");
|
||||
put("庚", "亥");
|
||||
put("辛", "子");
|
||||
put("壬", "寅");
|
||||
put("癸", "卯");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天厨贵人(日干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_CHU_GUI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日干查→ 甲在'巳'。乙在'午'。丙在'子'。丁在'巳'。戊在'午'。己在'申'。庚在'寅'。辛在'午'。壬在'酉'。癸在'亥' */
|
||||
|
||||
{
|
||||
put("甲", "巳");
|
||||
put("乙", "午");
|
||||
put("丙", "子");
|
||||
put("丁", "巳");
|
||||
put("戊", "午");
|
||||
put("己", "申");
|
||||
put("庚", "寅");
|
||||
put("辛", "午");
|
||||
put("壬", "酉");
|
||||
put("癸", "亥");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 月德贵人(月支为键)
|
||||
*/
|
||||
public static final Map<String, String> YUE_DE_GUI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以月支查→ 子在'庚'。丑在'庚'。寅在'丙'。卯在'甲'。辰在'庚'。巳在'庚'。午在'丙'。未在'甲'。申在'庚'。酉在'庚'。戌在'丙'。亥在'甲' */
|
||||
|
||||
{
|
||||
put("子", "庚");
|
||||
put("丑", "庚");
|
||||
put("寅", "丙");
|
||||
put("卯", "甲");
|
||||
put("辰", "庚");
|
||||
put("巳", "庚");
|
||||
put("午", "丙");
|
||||
put("未", "甲");
|
||||
put("申", "庚");
|
||||
put("酉", "庚");
|
||||
put("戌", "丙");
|
||||
put("亥", "甲");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天德贵人(月支为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_DE_GUI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以月支查→ 子在'巽巳'。丑在'庚申'。寅在'丁未'。卯在'坤申'。辰在'壬亥'。巳在'辛戌'。午在'乾亥'。未在'甲寅'。申在'癸丑'。酉在'寅'。戌在'丙巳'。亥在'乙辰' */
|
||||
|
||||
{
|
||||
put("子", "巽巳");
|
||||
put("丑", "庚申");
|
||||
put("寅", "丁未");
|
||||
put("卯", "坤申");
|
||||
put("辰", "庚亥");
|
||||
put("巳", "辛戌");
|
||||
put("午", "乾亥");
|
||||
put("未", "甲寅");
|
||||
put("申", "癸丑");
|
||||
put("酉", "寅");
|
||||
put("戌", "丙巳");
|
||||
put("亥", "乙辰");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 唐符国印(年支为键)
|
||||
*/
|
||||
public static final Map<String, String> TANG_FU_GUO_YIN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以年支查→ 子在'卯酉'。丑在'辰戌'。寅在'巳亥'。卯在'子午'。辰在'丑未'。巳在'寅申'。午在'卯酉'。未在'辰戌'。申在'巳亥'。酉在'子午'。戌在'丑未'。亥在'寅申' */
|
||||
|
||||
{
|
||||
put("子", "卯酉");
|
||||
put("丑", "辰戌");
|
||||
put("寅", "巳亥");
|
||||
put("卯", "子午");
|
||||
put("辰", "丑未");
|
||||
put("巳", "寅申");
|
||||
put("午", "卯酉");
|
||||
put("未", "辰戌");
|
||||
put("申", "巳亥");
|
||||
put("酉", "子午");
|
||||
put("戌", "丑未");
|
||||
put("亥", "寅申");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天元禄(日干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_YUAN_LU = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日干查→ 甲在'寅'。乙在'卯'。丙在'巳'。丁在'午'。戊在'巳'。己在'午'。庚在'申'。辛在'酉'。壬在'亥'。癸在'子' */
|
||||
|
||||
{
|
||||
put("甲", "寅");
|
||||
put("乙", "卯");
|
||||
put("丙", "巳");
|
||||
put("丁", "午");
|
||||
put("戊", "巳");
|
||||
put("己", "午");
|
||||
put("庚", "申");
|
||||
put("辛", "酉");
|
||||
put("壬", "亥");
|
||||
put("癸", "子");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 华盖(年支\日支+其余地支为键)
|
||||
*/
|
||||
public static final Map<String, String> HUA_GAI = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/*
|
||||
一、略解:
|
||||
【以年支\日支查其余地支】子见'辰'。丑见'丑'。寅见'戌'。卯见'未'。辰见'辰'。巳见'丑'。午见'戌'。未见'未'。申见'辰'。酉见'丑'。戌见'戌'。亥见'未'
|
||||
|
||||
二、详解:
|
||||
年支\日支是子,并且其余地支有辰
|
||||
年支\日支是丑,并且其余地支有丑
|
||||
年支\日支是寅,并且其余地支有戌
|
||||
年支\日支是卯,并且其余地支有未
|
||||
年支\日支是辰,并且其余地支有辰
|
||||
年支\日支是巳,并且其余地支有丑
|
||||
年支\日支是午,并且其余地支有戌
|
||||
年支\日支是未,并且其余地支有未
|
||||
年支\日支是申,并且其余地支有辰
|
||||
年支\日支是酉,并且其余地支有丑
|
||||
年支\日支是戌,并且其余地支有戌
|
||||
年支\日支是亥,并且其余地支有未
|
||||
*/
|
||||
|
||||
{
|
||||
put("子辰", "辰");
|
||||
put("丑丑", "丑");
|
||||
put("寅戌", "戌");
|
||||
put("卯未", "未");
|
||||
put("辰辰", "辰");
|
||||
put("巳丑", "丑");
|
||||
put("午戌", "戌");
|
||||
put("未未", "未");
|
||||
put("申辰", "辰");
|
||||
put("酉丑", "丑");
|
||||
put("戌戌", "戌");
|
||||
put("亥未", "未");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 驿马(日支为键)
|
||||
*/
|
||||
public static final Map<String, String> YI_MA = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日支查→ 子在'寅'。丑在'亥'。寅在'申'。卯在'巳'。辰在'寅'。巳在'亥'。午在'申'。未在'巳'。申在'寅'。酉在'亥'。戌在'申'。亥在'巳' */
|
||||
|
||||
{
|
||||
put("子", "寅");
|
||||
put("丑", "亥");
|
||||
put("寅", "申");
|
||||
put("卯", "巳");
|
||||
put("辰", "寅");
|
||||
put("巳", "亥");
|
||||
put("午", "申");
|
||||
put("未", "巳");
|
||||
put("申", "寅");
|
||||
put("酉", "亥");
|
||||
put("戌", "申");
|
||||
put("亥", "巳");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天马(月支为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_MA = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日支查→ 子在'寅'。丑在'辰'。寅在'午'。卯在'申'。辰在'戌'。巳在'子'。午在'寅'。未在'辰'。申在'午'。酉在'申'。戌在'戌'。亥在'子' */
|
||||
|
||||
{
|
||||
put("子", "寅");
|
||||
put("丑", "辰");
|
||||
put("寅", "午");
|
||||
put("卯", "申");
|
||||
put("辰", "戌");
|
||||
put("巳", "子");
|
||||
put("午", "寅");
|
||||
put("未", "辰");
|
||||
put("申", "午");
|
||||
put("酉", "申");
|
||||
put("戌", "戌");
|
||||
put("亥", "子");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 禄马(日干为键)
|
||||
*/
|
||||
public static final Map<String, String> LU_MA = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日干查→ 甲在'寅'。乙在'卯'。丙在'巳'。丁在'午'。戊在'巳'。己在'午'。庚在'申'。辛在'酉'。壬在'亥'。癸在'子' */
|
||||
|
||||
{
|
||||
put("甲", "寅");
|
||||
put("乙", "卯");
|
||||
put("丙", "巳");
|
||||
put("丁", "午");
|
||||
put("戊", "巳");
|
||||
put("己", "午");
|
||||
put("庚", "申");
|
||||
put("辛", "酉");
|
||||
put("壬", "亥");
|
||||
put("癸", "子");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 劫煞(日支为键)
|
||||
*/
|
||||
public static final Map<String, String> JIE_SHA = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日支查→ 子在'巳'。丑在'寅'。寅在'亥'。卯在'申'。辰在'巳'。巳在'寅'。午在'亥'。未在'申'。申在'巳'。酉在'寅'。戌在'亥'。亥在'申' */
|
||||
|
||||
{
|
||||
put("子", "巳");
|
||||
put("丑", "寅");
|
||||
put("寅", "亥");
|
||||
put("卯", "申");
|
||||
put("辰", "巳");
|
||||
put("巳", "寅");
|
||||
put("午", "亥");
|
||||
put("未", "申");
|
||||
put("申", "巳");
|
||||
put("酉", "寅");
|
||||
put("戌", "亥");
|
||||
put("亥", "申");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* 将星(年支\日支+其余地支为键)
|
||||
*/
|
||||
public static final Map<String, String> JIANG_XING = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/*
|
||||
一、略解:
|
||||
【以年支\日支查其余地支】子见'子'。丑见'酉'。寅见'午'。卯见'卯'。辰见'子'。巳见'酉'。午见'午'。未见'卯'。申见'子'。酉见'酉'。戌见'午'。亥见'卯'
|
||||
|
||||
二、详解:
|
||||
年支\日支是子,并且其余地支有子
|
||||
年支\日支是丑,并且其余地支有酉
|
||||
年支\日支是寅,并且其余地支有午
|
||||
年支\日支是卯,并且其余地支有卯
|
||||
年支\日支是辰,并且其余地支有子
|
||||
年支\日支是巳,并且其余地支有酉
|
||||
年支\日支是午,并且其余地支有午
|
||||
年支\日支是未,并且其余地支有卯
|
||||
年支\日支是申,并且其余地支有子
|
||||
年支\日支是酉,并且其余地支有酉
|
||||
年支\日支是戌,并且其余地支有午
|
||||
年支\日支是亥,并且其余地支有卯
|
||||
*/
|
||||
|
||||
{
|
||||
put("子子", "子");
|
||||
put("丑酉", "酉");
|
||||
put("寅午", "午");
|
||||
put("卯卯", "卯");
|
||||
put("辰子", "子");
|
||||
put("巳酉", "酉");
|
||||
put("午午", "午");
|
||||
put("未卯", "卯");
|
||||
put("申子", "子");
|
||||
put("酉酉", "酉");
|
||||
put("戌午", "午");
|
||||
put("亥卯", "卯");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 咸池(日支为键)
|
||||
*/
|
||||
public static final Map<String, String> XIAN_CHI = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日支查→ 子在'酉'。丑在'午'。寅在'卯'。卯在'子'。辰在'酉'。巳在'午'。午在'卯'。未在'子'。申在'酉'。酉在'午'。戌在'卯'。亥在'子' */
|
||||
|
||||
{
|
||||
put("子", "酉");
|
||||
put("丑", "午");
|
||||
put("寅", "卯");
|
||||
put("卯", "子");
|
||||
put("辰", "酉");
|
||||
put("巳", "午");
|
||||
put("午", "卯");
|
||||
put("未", "子");
|
||||
put("申", "酉");
|
||||
put("酉", "午");
|
||||
put("戌", "卯");
|
||||
put("亥", "子");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天喜(月支为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_XI = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以月支查→ 子在'未'。丑在'未'。寅在'戌'。卯在'戌'。辰在'戌'。巳在'丑'。午在'丑'。未在'丑'。申在'辰'。酉在'辰'。戌在'辰'。亥在'未' */
|
||||
|
||||
{
|
||||
put("子", "未");
|
||||
put("丑", "未");
|
||||
put("寅", "戌");
|
||||
put("卯", "戌");
|
||||
put("辰", "戌");
|
||||
put("巳", "丑");
|
||||
put("午", "丑");
|
||||
put("未", "丑");
|
||||
put("申", "辰");
|
||||
put("酉", "辰");
|
||||
put("戌", "辰");
|
||||
put("亥", "未");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 灾煞(日支为键)
|
||||
*/
|
||||
public static final Map<String, String> ZAI_SHA = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日支查→ 子在'午'。丑在'卯'。寅在'子'。卯在'酉'。辰在'午'。巳在'卯'。午在'子'。未在'酉'。申在'午'。酉在'卯'。戌在'子'。亥在'酉' */
|
||||
|
||||
{
|
||||
put("子", "午");
|
||||
put("丑", "卯");
|
||||
put("寅", "子");
|
||||
put("卯", "酉");
|
||||
put("辰", "午");
|
||||
put("巳", "卯");
|
||||
put("午", "子");
|
||||
put("未", "酉");
|
||||
put("申", "午");
|
||||
put("酉", "卯");
|
||||
put("戌", "子");
|
||||
put("亥", "酉");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 天医(月支为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_YI = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以月支查→ 子在'亥'。丑在'子'。寅在'丑'。卯在'寅'。辰在'卯'。巳在'辰'。午在'巳'。未在'午'。申在'未'。酉在'申'。戌在'酉'。亥在'戌' */
|
||||
|
||||
{
|
||||
put("子", "亥");
|
||||
put("丑", "子");
|
||||
put("寅", "丑");
|
||||
put("卯", "寅");
|
||||
put("辰", "卯");
|
||||
put("巳", "辰");
|
||||
put("午", "巳");
|
||||
put("未", "午");
|
||||
put("申", "未");
|
||||
put("酉", "申");
|
||||
put("戌", "酉");
|
||||
put("亥", "戌");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 谋星(日支为键)
|
||||
*/
|
||||
public static final Map<String, String> MOU_XING = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日支查→ 子在'戌'。丑在'未'。寅在'辰'。卯在'丑'。辰在'戌'。巳在'未'。午在'辰'。未在'丑'。申在'戌'。酉在'未'。戌在'辰'。亥在'丑' */
|
||||
|
||||
{
|
||||
put("子", "戌");
|
||||
put("丑", "未");
|
||||
put("寅", "辰");
|
||||
put("卯", "丑");
|
||||
put("辰", "戌");
|
||||
put("巳", "未");
|
||||
put("午", "辰");
|
||||
put("未", "丑");
|
||||
put("申", "戌");
|
||||
put("酉", "未");
|
||||
put("戌", "辰");
|
||||
put("亥", "丑");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 皇恩(月支为键)
|
||||
*/
|
||||
public static final Map<String, String> HUANG_EN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以月支查→ 子在'卯'。丑在'巳'。寅在'未'。卯在'酉'。辰在'亥'。巳在'丑'。午在'卯'。未在'巳'。申在'未'。酉在'酉'。戌在'亥'。亥在'丑' */
|
||||
|
||||
{
|
||||
put("子", "卯");
|
||||
put("丑", "巳");
|
||||
put("寅", "未");
|
||||
put("卯", "酉");
|
||||
put("辰", "亥");
|
||||
put("巳", "丑");
|
||||
put("午", "卯");
|
||||
put("未", "巳");
|
||||
put("申", "未");
|
||||
put("酉", "酉");
|
||||
put("戌", "亥");
|
||||
put("亥", "丑");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 阳刃(日干为键)
|
||||
*/
|
||||
public static final Map<String, String> TIAN_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日干查→ 甲在'卯'。乙在'辰'。丙在'午'。丁在'巳'。戊在'午'。己在'巳'。庚在'酉'。辛在'申'。壬在'子'。癸在'亥' */
|
||||
|
||||
{
|
||||
put("甲", "卯");
|
||||
put("乙", "辰");
|
||||
put("丙", "午");
|
||||
put("丁", "巳");
|
||||
put("戊", "午");
|
||||
put("己", "巳");
|
||||
put("庚", "酉");
|
||||
put("辛", "申");
|
||||
put("壬", "子");
|
||||
put("癸", "亥");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 飞刃(日干为键)
|
||||
*/
|
||||
public static final Map<String, String> FEI_REN = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
/* 以日干查→ 甲在'酉'。乙在'戌'。丙在'子'。丁在'亥'。戊在'子'。己在'亥'。庚在'卯'。辛在'寅'。壬在'午'。癸在'巳' */
|
||||
|
||||
{
|
||||
put("甲", "酉");
|
||||
put("乙", "戌");
|
||||
put("丙", "子");
|
||||
put("丁", "亥");
|
||||
put("戊", "子");
|
||||
put("己", "亥");
|
||||
put("庚", "卯");
|
||||
put("辛", "寅");
|
||||
put("壬", "午");
|
||||
put("癸", "巳");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
package xuan.core.liuyao.settings;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.utils.DateUtil;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 六爻 - 基础设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class LiuYaoJiChuSetting {
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*/
|
||||
private String occupy;
|
||||
|
||||
/**
|
||||
* 性别(0:女。1:男)
|
||||
*/
|
||||
private int sex;
|
||||
|
||||
/**
|
||||
* 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
private String date;
|
||||
|
||||
/**
|
||||
* 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
private int dateType;
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
private int leapMonthType;
|
||||
|
||||
/**
|
||||
* 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
private int xuShiSuiType;
|
||||
|
||||
/**
|
||||
* 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
private int jieQiType;
|
||||
|
||||
/**
|
||||
* 排盘类型(0:日期。1:自动。2:手动)
|
||||
*/
|
||||
private int paiPanType;
|
||||
|
||||
/**
|
||||
* 上爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
private int liuYao;
|
||||
|
||||
/**
|
||||
* 五爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
private int wuYao;
|
||||
|
||||
/**
|
||||
* 四爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
private int siYao;
|
||||
|
||||
/**
|
||||
* 三爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
private int sanYao;
|
||||
|
||||
/**
|
||||
* 二爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
private int erYao;
|
||||
|
||||
/**
|
||||
* 初爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
private int yiYao;
|
||||
|
||||
/**
|
||||
* 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
private int yearGanZhiType;
|
||||
|
||||
/**
|
||||
* 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
private int monthGanZhiType;
|
||||
|
||||
/**
|
||||
* 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
private int dayGanZhiType;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public LiuYaoJiChuSetting() {
|
||||
|
||||
this.name = ""; // 姓名(默认→ 空)
|
||||
this.occupy = ""; // 占事(默认→ 空)
|
||||
this.sex = 1; // 性别(默认→ 男)
|
||||
this.date = "2024-01-01 00:00:00"; // 日期(默认→ 2024-01-01 00:00:00)
|
||||
this.dateType = 0; // 日期类型(默认→ 公历)
|
||||
this.leapMonthType = 0; // 闰月类型,日期类型为1时生效(默认→ 不使用闰月)
|
||||
this.jieQiType = 1; // 节气类型(默认→ 按分钟计算)
|
||||
this.paiPanType = 0; // 排盘类型(默认→ 日期)
|
||||
this.liuYao = 0; // 上爻,排盘类型为2时生效(默认→ 2正1背)
|
||||
this.wuYao = 0; // 五爻,排盘类型为2时生效(默认→ 2正1背)
|
||||
this.siYao = 0; // 四爻,排盘类型为2时生效(默认→ 2正1背)
|
||||
this.sanYao = 0; // 三爻,排盘类型为2时生效(默认→ 2正1背)
|
||||
this.erYao = 0; // 二爻,排盘类型为2时生效(默认→ 2正1背)
|
||||
this.yiYao = 0; // 初爻,排盘类型为2时生效(默认→ 2正1背)
|
||||
this.yearGanZhiType = 2; // 年干支类型(默认→ 以立春交接时刻作为新年的开始)
|
||||
this.monthGanZhiType = 1; // 月干支类型(默认→ 以节交接时刻起算)
|
||||
this.dayGanZhiType = 0; // 日干支类型(默认→ 晚子时日柱按当天)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*
|
||||
* @param name 姓名
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = StringUtils.isNotBlank(name) ? name : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*
|
||||
* @param occupy 占事
|
||||
*/
|
||||
public void setOccupy(String occupy) {
|
||||
this.occupy = StringUtils.isNotBlank(occupy) ? occupy : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*
|
||||
* @param sex 性别(0:女。1:男)
|
||||
*/
|
||||
public void setSex(int sex) {
|
||||
this.sex = (sex == 0 || sex == 1) ? sex : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*
|
||||
* @param date 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = DateUtil.isValidDate(date) ? date : "2024-01-01 00:00:00";
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期类型
|
||||
*
|
||||
* @param dateType 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
public void setDateType(int dateType) {
|
||||
this.dateType = (dateType == 0 || dateType == 1) ? dateType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效
|
||||
*
|
||||
* @param leapMonthType 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
public void setLeapMonthType(int leapMonthType) {
|
||||
this.leapMonthType = (leapMonthType == 0 || leapMonthType == 1) ? leapMonthType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 节气类型
|
||||
*
|
||||
* @param jieQiType 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
public void setJieQiType(int jieQiType) {
|
||||
this.jieQiType = (jieQiType == 0 || jieQiType == 1) ? jieQiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 排盘类型
|
||||
*
|
||||
* @param paiPanType 排盘类型(0:日期。1:自动。2:手动)
|
||||
*/
|
||||
public void setPaiPanType(int paiPanType) {
|
||||
this.paiPanType = (paiPanType == 0 || paiPanType == 1 || paiPanType == 2) ? paiPanType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上爻,排盘类型为2时生效
|
||||
*
|
||||
* @param liuYao 上爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
public void setLiuYao(int liuYao) {
|
||||
this.liuYao = (liuYao == 0 || liuYao == 1 || liuYao == 2 || liuYao == 3) ? liuYao : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 五爻,排盘类型为2时生效
|
||||
*
|
||||
* @param wuYao 五爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
public void setWuYao(int wuYao) {
|
||||
this.wuYao = (wuYao == 0 || wuYao == 1 || wuYao == 2 || wuYao == 3) ? wuYao : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 四爻,排盘类型为2时生效
|
||||
*
|
||||
* @param siYao 四爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
public void setSiYao(int siYao) {
|
||||
this.siYao = (siYao == 0 || siYao == 1 || siYao == 2 || siYao == 3) ? siYao : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 三爻,排盘类型为2时生效
|
||||
*
|
||||
* @param sanYao 三爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
public void setSanYao(int sanYao) {
|
||||
this.sanYao = (sanYao == 0 || sanYao == 1 || sanYao == 2 || sanYao == 3) ? sanYao : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 二爻,排盘类型为2时生效
|
||||
*
|
||||
* @param erYao 二爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
public void setErYao(int erYao) {
|
||||
this.erYao = (erYao == 0 || erYao == 1 || erYao == 2 || erYao == 3) ? erYao : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初爻,排盘类型为2时生效
|
||||
*
|
||||
* @param yiYao 初爻,排盘类型为2时生效(0:—(2正1背)。1:- -(1正2背)。2:— ○(0正3背)。3:- - ×(3正0背))
|
||||
*/
|
||||
public void setYiYao(int yiYao) {
|
||||
this.yiYao = (yiYao == 0 || yiYao == 1 || yiYao == 2 || yiYao == 3) ? yiYao : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 年干支类型
|
||||
*
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
public void setYearGanZhiType(int yearGanZhiType) {
|
||||
this.yearGanZhiType = (yearGanZhiType == 0 || yearGanZhiType == 1 || yearGanZhiType == 2) ? yearGanZhiType : 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月干支类型
|
||||
*
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
public void setMonthGanZhiType(int monthGanZhiType) {
|
||||
this.monthGanZhiType = (monthGanZhiType == 0 || monthGanZhiType == 1) ? monthGanZhiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日干支类型
|
||||
*
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日干支按当天。1:晚子时日干支按明天)
|
||||
*/
|
||||
public void setDayGanZhiType(int dayGanZhiType) {
|
||||
this.dayGanZhiType = (dayGanZhiType == 0 || dayGanZhiType == 1) ? dayGanZhiType : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,371 @@
|
||||
package xuan.core.liuyao.settings;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 六爻 - 神煞设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class LiuYaoShenShaSetting {
|
||||
|
||||
/**
|
||||
* 太极贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int taiJiGuiRen;
|
||||
|
||||
/**
|
||||
* 天乙贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianYiGuiRen;
|
||||
|
||||
/**
|
||||
* 福星贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int fuXingGuiRen;
|
||||
|
||||
/**
|
||||
* 文昌贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int wenChangGuiRen;
|
||||
|
||||
/**
|
||||
* 天厨贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianChuGuiRen;
|
||||
|
||||
/**
|
||||
* 月德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int yueDeGuiRen;
|
||||
|
||||
/**
|
||||
* 天德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianDeGuiRen;
|
||||
|
||||
/**
|
||||
* 唐符国印(0:显示。1:关闭)
|
||||
*/
|
||||
private int tangFuGuoYin;
|
||||
|
||||
/**
|
||||
* 天元禄(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianYuanLu;
|
||||
|
||||
/**
|
||||
* 华盖(0:显示。1:关闭)
|
||||
*/
|
||||
private int huaGai;
|
||||
|
||||
/**
|
||||
* 驿马(0:显示。1:关闭)
|
||||
*/
|
||||
private int yiMa;
|
||||
|
||||
/**
|
||||
* 天马(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianMa;
|
||||
|
||||
/**
|
||||
* 禄马(0:显示。1:关闭)
|
||||
*/
|
||||
private int luMa;
|
||||
|
||||
/**
|
||||
* 劫煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int jieSha;
|
||||
|
||||
/**
|
||||
* 将星(0:显示。1:关闭)
|
||||
*/
|
||||
private int jiangXing;
|
||||
|
||||
/**
|
||||
* 咸池(0:显示。1:关闭)
|
||||
*/
|
||||
private int xianChi;
|
||||
|
||||
/**
|
||||
* 天喜(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianXi;
|
||||
|
||||
/**
|
||||
* 灾煞(0:显示。1:关闭)
|
||||
*/
|
||||
private int zaiSha;
|
||||
|
||||
/**
|
||||
* 天医(0:显示。1:关闭)
|
||||
*/
|
||||
private int tianYi;
|
||||
|
||||
/**
|
||||
* 谋星(0:显示。1:关闭)
|
||||
*/
|
||||
private int mouXing;
|
||||
|
||||
/**
|
||||
* 皇恩(0:显示。1:关闭)
|
||||
*/
|
||||
private int huangEn;
|
||||
|
||||
/**
|
||||
* 阳刃(0:显示。1:关闭)
|
||||
*/
|
||||
private int yangRen;
|
||||
|
||||
/**
|
||||
* 飞刃(0:显示。1:关闭)
|
||||
*/
|
||||
private int feiRen;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public LiuYaoShenShaSetting() {
|
||||
|
||||
this.taiJiGuiRen = 0; // 太极贵人(默认→ 显示)
|
||||
this.tianYiGuiRen = 0; // 天乙贵人(默认→ 显示)
|
||||
this.fuXingGuiRen = 0; // 福星贵人(默认→ 显示)
|
||||
this.wenChangGuiRen = 0; // 文昌贵人(默认→ 显示)
|
||||
this.tianChuGuiRen = 0; // 天厨贵人(默认→ 显示)
|
||||
this.yueDeGuiRen = 0; // 月德贵人(默认→ 显示)
|
||||
this.tianDeGuiRen = 0; // 天德贵人(默认→ 显示)
|
||||
this.tangFuGuoYin = 0; // 唐符国印(默认→ 显示)
|
||||
this.tianYuanLu = 0; // 天元禄(默认→ 显示)
|
||||
this.huaGai = 0; // 华盖(默认→ 显示)
|
||||
this.yiMa = 0; // 驿马(默认→ 显示)
|
||||
this.tianMa = 0; // 天马(默认→ 显示)
|
||||
this.luMa = 0; // 禄马(默认→ 显示)
|
||||
this.jieSha = 0; // 劫煞(默认→ 显示)
|
||||
this.jiangXing = 0; // 将星(默认→ 显示)
|
||||
this.xianChi = 0; // 咸池(默认→ 显示)
|
||||
this.tianXi = 0; // 天喜(默认→ 显示)
|
||||
this.zaiSha = 0; // 灾煞(默认→ 显示)
|
||||
this.tianYi = 0; // 天医(默认→ 显示)
|
||||
this.mouXing = 0; // 谋星(默认→ 显示)
|
||||
this.huangEn = 0; // 皇恩(默认→ 显示)
|
||||
this.yangRen = 0; // 阳刃(默认→ 显示)
|
||||
this.feiRen = 0; // 飞刃(默认→ 显示)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 太极贵人
|
||||
*
|
||||
* @param taiJiGuiRen 太极贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTaiJiGuiRen(int taiJiGuiRen) {
|
||||
this.taiJiGuiRen = (taiJiGuiRen == 0 || taiJiGuiRen == 1) ? taiJiGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天乙贵人
|
||||
*
|
||||
* @param tianYiGuiRen 天乙贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianYiGuiRen(int tianYiGuiRen) {
|
||||
this.tianYiGuiRen = (tianYiGuiRen == 0 || tianYiGuiRen == 1) ? tianYiGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 福星贵人
|
||||
*
|
||||
* @param fuXingGuiRen 福星贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setFuXingGuiRen(int fuXingGuiRen) {
|
||||
this.fuXingGuiRen = (fuXingGuiRen == 0 || fuXingGuiRen == 1) ? fuXingGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 文昌贵人
|
||||
*
|
||||
* @param wenChangGuiRen 文昌贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setWenChangGuiRen(int wenChangGuiRen) {
|
||||
this.wenChangGuiRen = (wenChangGuiRen == 0 || wenChangGuiRen == 1) ? wenChangGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天厨贵人
|
||||
*
|
||||
* @param tianChuGuiRen 天厨贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianChuGuiRen(int tianChuGuiRen) {
|
||||
this.tianChuGuiRen = (tianChuGuiRen == 0 || tianChuGuiRen == 1) ? tianChuGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月德贵人
|
||||
*
|
||||
* @param yueDeGuiRen 月德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYueDeGuiRen(int yueDeGuiRen) {
|
||||
this.yueDeGuiRen = (yueDeGuiRen == 0 || yueDeGuiRen == 1) ? yueDeGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天德贵人
|
||||
*
|
||||
* @param tianDeGuiRen 天德贵人(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianDeGuiRen(int tianDeGuiRen) {
|
||||
this.tianDeGuiRen = (tianDeGuiRen == 0 || tianDeGuiRen == 1) ? tianDeGuiRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 唐符国印
|
||||
*
|
||||
* @param tangFuGuoYin 唐符国印(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTangFuGuoYin(int tangFuGuoYin) {
|
||||
this.tangFuGuoYin = (tangFuGuoYin == 0 || tangFuGuoYin == 1) ? tangFuGuoYin : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天元禄
|
||||
*
|
||||
* @param tianYuanLu 天元禄(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianYuanLu(int tianYuanLu) {
|
||||
this.tianYuanLu = (tianYuanLu == 0 || tianYuanLu == 1) ? tianYuanLu : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 华盖
|
||||
*
|
||||
* @param huaGai 华盖(0:显示。1:关闭)
|
||||
*/
|
||||
public void setHuaGai(int huaGai) {
|
||||
this.huaGai = (huaGai == 0 || huaGai == 1) ? huaGai : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 驿马
|
||||
*
|
||||
* @param yiMa 驿马(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYiMa(int yiMa) {
|
||||
this.yiMa = (yiMa == 0 || yiMa == 1) ? yiMa : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天马
|
||||
*
|
||||
* @param tianMa 天马(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianMa(int tianMa) {
|
||||
this.tianMa = (tianMa == 0 || tianMa == 1) ? tianMa : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 禄马
|
||||
*
|
||||
* @param luMa 禄马(0:显示。1:关闭)
|
||||
*/
|
||||
public void setLuMa(int luMa) {
|
||||
this.luMa = (luMa == 0 || luMa == 1) ? luMa : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 劫煞
|
||||
*
|
||||
* @param jieSha 劫煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJieSha(int jieSha) {
|
||||
this.jieSha = (jieSha == 0 || jieSha == 1) ? jieSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将星
|
||||
*
|
||||
* @param jiangXing 将星(0:显示。1:关闭)
|
||||
*/
|
||||
public void setJiangXing(int jiangXing) {
|
||||
this.jiangXing = (jiangXing == 0 || jiangXing == 1) ? jiangXing : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 咸池
|
||||
*
|
||||
* @param xianChi 咸池(0:显示。1:关闭)
|
||||
*/
|
||||
public void setXianChi(int xianChi) {
|
||||
this.xianChi = (xianChi == 0 || xianChi == 1) ? xianChi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天喜
|
||||
*
|
||||
* @param tianXi 天喜(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianXi(int tianXi) {
|
||||
this.tianXi = (tianXi == 0 || tianXi == 1) ? tianXi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 灾煞
|
||||
*
|
||||
* @param zaiSha 灾煞(0:显示。1:关闭)
|
||||
*/
|
||||
public void setZaiSha(int zaiSha) {
|
||||
this.zaiSha = (zaiSha == 0 || zaiSha == 1) ? zaiSha : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天医
|
||||
*
|
||||
* @param tianYi 天医(0:显示。1:关闭)
|
||||
*/
|
||||
public void setTianYi(int tianYi) {
|
||||
this.tianYi = (tianYi == 0 || tianYi == 1) ? tianYi : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 谋星
|
||||
*
|
||||
* @param mouXing 谋星(0:显示。1:关闭)
|
||||
*/
|
||||
public void setMouXing(int mouXing) {
|
||||
this.mouXing = (mouXing == 0 || mouXing == 1) ? mouXing : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 皇恩
|
||||
*
|
||||
* @param huangEn 皇恩(0:显示。1:关闭)
|
||||
*/
|
||||
public void setHuangEn(int huangEn) {
|
||||
this.huangEn = (huangEn == 0 || huangEn == 1) ? huangEn : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 阳刃
|
||||
*
|
||||
* @param yangRen 阳刃(0:显示。1:关闭)
|
||||
*/
|
||||
public void setYangRen(int yangRen) {
|
||||
this.yangRen = (yangRen == 0 || yangRen == 1) ? yangRen : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 飞刃
|
||||
*
|
||||
* @param feiRen 飞刃(0:显示。1:关闭)
|
||||
*/
|
||||
public void setFeiRen(int feiRen) {
|
||||
this.feiRen = (feiRen == 0 || feiRen == 1) ? feiRen : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package xuan.core.liuyao.utils;
|
||||
|
||||
import com.nlf.calendar.Lunar;
|
||||
import xuan.core.liuyao.maps.LiuYaoJiChuMap;
|
||||
import xuan.core.liuyao.settings.LiuYaoJiChuSetting;
|
||||
import xuan.utils.CommonUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 六爻 - 基础工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class LiuYaoJiChuUtil {
|
||||
|
||||
/**
|
||||
* 获取六爻爻象、六爻爻象标识、六爻爻象标识名称(★可用于排盘模式扩展)
|
||||
*
|
||||
* @param liuYaoJiChuSetting 六爻 - 基础设置
|
||||
* @param lunar 农历日期
|
||||
* @param yearZhi 年支
|
||||
* @param hourZhi 时支
|
||||
* @return 六爻爻象、六爻爻象标识、六爻爻象标识名称
|
||||
*/
|
||||
public static Map<String, List<String>> getLiuYaoData(LiuYaoJiChuSetting liuYaoJiChuSetting, Lunar lunar, String yearZhi, String hourZhi) {
|
||||
|
||||
Map<String, List<String>> map = new HashMap<>();
|
||||
|
||||
List<String> liuYaoAs = new ArrayList<>(); // 保存六爻爻象(如:[—, - -, - -, - -, - -, —])
|
||||
List<String> liuYaoAsMark = new ArrayList<>(); // 保存六爻爻象标识(如:[○, ×, , ×, , ])
|
||||
List<String> liuYaoAsMarkName = new ArrayList<>(); // 保存六爻爻象标识名称(如:[老阳, 老阴, 少阴, 老阴, 少阴, 少阳])
|
||||
|
||||
if (liuYaoJiChuSetting.getPaiPanType() == 0) {
|
||||
// ★★★ 1.1、日期排盘模式
|
||||
Map<String, Integer> diZhiShuMap = LiuYaoJiChuMap.DI_ZHI_SHU; // 地支对应的数字(地支为键)
|
||||
int yearNumber = diZhiShuMap.get(yearZhi); // 年数
|
||||
int monthNumber = lunar.getMonth(); // 月数
|
||||
int dayNumber = lunar.getDay(); // 日数
|
||||
int hourNumber = diZhiShuMap.get(hourZhi); // 时数
|
||||
// 1.1.1、计算上卦数:(年数+月数+日数)÷8得出余数,若除尽则统一用8表示
|
||||
int shangGuaNumber = (yearNumber + monthNumber + dayNumber) % 8;
|
||||
shangGuaNumber = shangGuaNumber == 0 ? 8 : shangGuaNumber;
|
||||
// 1.1.2、计算下卦数:(年数+月数+日数+时数)÷8得出余数,若除尽则统一用8表示
|
||||
int xiaGuaNumber = (yearNumber + monthNumber + dayNumber + hourNumber) % 8;
|
||||
xiaGuaNumber = xiaGuaNumber == 0 ? 8 : xiaGuaNumber;
|
||||
// 1.1.3、计算动爻数:(年数+月数+日数+时数)÷6得出余数,若除尽则统一用6表示
|
||||
int dongYaoNumber = (yearNumber + monthNumber + dayNumber + hourNumber) % 6;
|
||||
dongYaoNumber = dongYaoNumber == 0 ? 6 : dongYaoNumber;
|
||||
// 1.1.4、根据上卦数和下卦数获取本卦卦象
|
||||
String benGuaAs = LiuYaoJiChuMap.LIU_SHI_SI_GUA_AS.get(Arrays.asList(shangGuaNumber, xiaGuaNumber));
|
||||
// 1.1.5、根据本卦卦象获取六爻爻象
|
||||
liuYaoAs = LiuYaoJiChuMap.LIU_SHI_SI_GUA_LIU_YAO_AS.get(benGuaAs);
|
||||
// 1.1.6、根据动爻数计算六爻标识
|
||||
liuYaoAsMark = CommonUtil.addCharToList(6, "");
|
||||
if ("—".equals(liuYaoAs.get(dongYaoNumber - 1))) {
|
||||
liuYaoAsMark.set(dongYaoNumber - 1, "○"); // 该爻为阳爻,则在该爻位上添加标识:○
|
||||
} else {
|
||||
liuYaoAsMark.set(dongYaoNumber - 1, "×"); // 该爻为阴爻,则在该爻位上添加标识:×
|
||||
}
|
||||
// 1.1.7、计算六爻爻象标识名称
|
||||
for (int i = 0; i < 6; i++) {
|
||||
if ("—".equals(liuYaoAs.get(i)) && "".equals(liuYaoAsMark.get(i))) liuYaoAsMarkName.add("少阳");
|
||||
if ("--".equals(liuYaoAs.get(i)) && "".equals(liuYaoAsMark.get(i))) liuYaoAsMarkName.add("少阴");
|
||||
if ("—".equals(liuYaoAs.get(i)) && "○".equals(liuYaoAsMark.get(i))) liuYaoAsMarkName.add("老阳");
|
||||
if ("--".equals(liuYaoAs.get(i)) && "×".equals(liuYaoAsMark.get(i))) liuYaoAsMarkName.add("老阴");
|
||||
}
|
||||
} else if (liuYaoJiChuSetting.getPaiPanType() == 1) {
|
||||
// ★★★ 1.2、自动排盘模式
|
||||
Map<List<Integer>, List<String>> autoRandomYaoMap = LiuYaoJiChuMap.AUTO_RANDOM_YAO; // 【少阳、少阴、老阳、老阴】对应信息
|
||||
// 1.2.1、计算六爻(循环6次,分别对应:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻))
|
||||
for (int i = 0; i < 6; i++) {
|
||||
List<Integer> randomList = CommonUtil.randomList(3, 1); // 随机产生0~1中的3个数字
|
||||
liuYaoAs.add(autoRandomYaoMap.get(randomList).get(0)); // 保存六爻爻象(顺序:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻))
|
||||
liuYaoAsMark.add(autoRandomYaoMap.get(randomList).get(1)); // 保存六爻爻象标识(顺序:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻))
|
||||
liuYaoAsMarkName.add(autoRandomYaoMap.get(randomList).get(2)); // 保存六爻爻象标识名称(顺序:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻))
|
||||
}
|
||||
|
||||
} else if (liuYaoJiChuSetting.getPaiPanType() == 2) {
|
||||
// ★★★ 1.3、手动排盘模式
|
||||
Map<Integer, List<String>> manualRandomYaoMap = LiuYaoJiChuMap.MANUAL_RANDOM_YAO; // 【少阳、少阴、老阳、老阴】对应信息
|
||||
// 1.3.1、封装六爻
|
||||
List<Integer> packageList = CommonUtil.packageList(liuYaoJiChuSetting.getYiYao(), liuYaoJiChuSetting.getErYao(), liuYaoJiChuSetting.getSanYao(), liuYaoJiChuSetting.getSiYao(), liuYaoJiChuSetting.getWuYao(), liuYaoJiChuSetting.getLiuYao());
|
||||
// 1.3.2、计算六爻【循环6次,分别对应:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻)】
|
||||
for (int i = 0; i < 6; i++) {
|
||||
liuYaoAs.add(manualRandomYaoMap.get(packageList.get(i)).get(0)); // 保存六爻爻象(顺序:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻))
|
||||
liuYaoAsMark.add(manualRandomYaoMap.get(packageList.get(i)).get(1)); // 保存六爻爻象标识(顺序:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻))
|
||||
liuYaoAsMarkName.add(manualRandomYaoMap.get(packageList.get(i)).get(2)); // 保存六爻爻象标识名称(顺序:初爻(一爻)、二爻、三爻、四爻、五爻、上爻(六爻))
|
||||
}
|
||||
} else if (liuYaoJiChuSetting.getPaiPanType() == 3) {
|
||||
// ★★★ 1.4、在此可扩展更多排盘模式(建议:将每种排盘模式封装为单独方法)
|
||||
System.out.println("======================");
|
||||
System.out.println("在此可扩展更多排盘模式");
|
||||
System.out.println("======================");
|
||||
}
|
||||
|
||||
// 2、设置并返回数据
|
||||
map.put("liuYaoAs", liuYaoAs); // 六爻爻象
|
||||
map.put("liuYaoAsMark", liuYaoAsMark); // 保存六爻爻象标识
|
||||
map.put("liuYaoAsMarkName", liuYaoAsMarkName); // 保存六爻爻象标识名称
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
package xuan.core.liuyao.utils;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.utils.CommonUtil;
|
||||
import xuan.core.liuyao.maps.LiuYaoShenShaMap;
|
||||
import xuan.core.liuyao.settings.LiuYaoShenShaSetting;
|
||||
|
||||
/**
|
||||
* 六爻 - 神煞工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class LiuYaoShenShaUtil {
|
||||
|
||||
/**
|
||||
* 六爻 - 神煞设置
|
||||
*/
|
||||
private LiuYaoShenShaSetting liuYaoShenShaSetting;
|
||||
|
||||
/**
|
||||
* 年干
|
||||
*/
|
||||
private String yearGan;
|
||||
/**
|
||||
* 月干
|
||||
*/
|
||||
private String monthGan;
|
||||
/**
|
||||
* 日干
|
||||
*/
|
||||
private String dayGan;
|
||||
/**
|
||||
* 时干
|
||||
*/
|
||||
private String hourGan;
|
||||
|
||||
/**
|
||||
* 年支
|
||||
*/
|
||||
private String yearZhi;
|
||||
/**
|
||||
* 月支
|
||||
*/
|
||||
private String monthZhi;
|
||||
/**
|
||||
* 日支
|
||||
*/
|
||||
private String dayZhi;
|
||||
/**
|
||||
* 时支
|
||||
*/
|
||||
private String hourZhi;
|
||||
|
||||
/**
|
||||
* 年干支
|
||||
*/
|
||||
private String yearGanZhi;
|
||||
/**
|
||||
* 月干支
|
||||
*/
|
||||
private String monthGanZhi;
|
||||
/**
|
||||
* 日干支
|
||||
*/
|
||||
private String dayGanZhi;
|
||||
/**
|
||||
* 时干支
|
||||
*/
|
||||
private String hourGanZhi;
|
||||
|
||||
/**
|
||||
* 神煞
|
||||
*/
|
||||
private Map<String, String> shenSha = new HashMap<>();
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*
|
||||
* @param liuYaoShenShaSetting 六爻 - 神煞设置
|
||||
* @param yearGanZhi 年干支
|
||||
* @param monthGanZhi 月干支
|
||||
* @param dayGanZhi 日干支
|
||||
* @param hourGanZhi 时干支
|
||||
*/
|
||||
public LiuYaoShenShaUtil(LiuYaoShenShaSetting liuYaoShenShaSetting, String yearGanZhi, String monthGanZhi, String dayGanZhi, String hourGanZhi) {
|
||||
|
||||
// 1、八字设置
|
||||
this.liuYaoShenShaSetting = liuYaoShenShaSetting; // 六爻 - 神煞设置
|
||||
|
||||
// 2、处理数据
|
||||
this.yearGanZhi = (StringUtils.isNotBlank(yearGanZhi) && yearGanZhi.length() == 2) ? yearGanZhi : CommonUtil.EMPTY2; // 年干支
|
||||
this.yearGan = this.yearGanZhi.substring(0, 1); // 年干
|
||||
this.yearZhi = this.yearGanZhi.substring(1, 2); // 年支
|
||||
this.monthGanZhi = (StringUtils.isNotBlank(monthGanZhi) && monthGanZhi.length() == 2) ? monthGanZhi : CommonUtil.EMPTY2; // 月干支
|
||||
this.monthGan = this.monthGanZhi.substring(0, 1); // 月干
|
||||
this.monthZhi = this.monthGanZhi.substring(1, 2); // 月支
|
||||
this.dayGanZhi = (StringUtils.isNotBlank(dayGanZhi) && dayGanZhi.length() == 2) ? dayGanZhi : CommonUtil.EMPTY2; // 日干支
|
||||
this.dayGan = this.dayGanZhi.substring(0, 1); // 日干
|
||||
this.dayZhi = this.dayGanZhi.substring(1, 2); // 日支
|
||||
this.hourGanZhi = (StringUtils.isNotBlank(hourGanZhi) && hourGanZhi.length() == 2) ? hourGanZhi : CommonUtil.EMPTY2; // 时干支
|
||||
this.hourGan = this.hourGanZhi.substring(0, 1); // 时干
|
||||
this.hourZhi = this.hourGanZhi.substring(1, 2); // 时支
|
||||
|
||||
// 3、初始化数据
|
||||
initializeShenSha(); // 初始化神煞
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化神煞
|
||||
*/
|
||||
private void initializeShenSha() {
|
||||
|
||||
Map<String, String> shenSha = new HashMap<>();
|
||||
if (this.liuYaoShenShaSetting.getTaiJiGuiRen() == 0) shenSha.put("taiJiGuiRen", getShenSha2(LiuYaoShenShaMap.TAI_JI_GUI_REN)); // 太极贵人
|
||||
if (this.liuYaoShenShaSetting.getTianYiGuiRen() == 0) shenSha.put("tianYiGuiRen", LiuYaoShenShaMap.TIAN_YI_GUI_REN.get(getDayGan())); // 天乙贵人
|
||||
if (this.liuYaoShenShaSetting.getFuXingGuiRen() == 0) shenSha.put("fuXingGuiRen", getShenSha3(LiuYaoShenShaMap.FU_XING_GUI_REN)); // 福星贵人
|
||||
if (this.liuYaoShenShaSetting.getWenChangGuiRen() == 0) shenSha.put("wenChangGuiRen", LiuYaoShenShaMap.WEN_CHANG_GUI_REN.get(getDayGan())); // 文昌贵人
|
||||
if (this.liuYaoShenShaSetting.getTianChuGuiRen() == 0) shenSha.put("tianChuGuiRen", LiuYaoShenShaMap.TIAN_CHU_GUI_REN.get(getDayGan())); // 天厨贵人
|
||||
if (this.liuYaoShenShaSetting.getYueDeGuiRen() == 0) shenSha.put("yueDeGuiRen", LiuYaoShenShaMap.YUE_DE_GUI_REN.get(getMonthZhi())); // 月德贵人
|
||||
if (this.liuYaoShenShaSetting.getTianDeGuiRen() == 0) shenSha.put("tianDeGuiRen", LiuYaoShenShaMap.TIAN_DE_GUI_REN.get(getMonthZhi())); // 天德贵人
|
||||
if (this.liuYaoShenShaSetting.getTangFuGuoYin() == 0) shenSha.put("tangFuGuoYin", LiuYaoShenShaMap.TANG_FU_GUO_YIN.get(getYearZhi())); // 唐符国印
|
||||
if (this.liuYaoShenShaSetting.getTianYuanLu() == 0) shenSha.put("tianYuanLu", LiuYaoShenShaMap.TIAN_YUAN_LU.get(getDayGan())); // 天元禄
|
||||
if (this.liuYaoShenShaSetting.getHuaGai() == 0) shenSha.put("huaGai", getShenSha1(LiuYaoShenShaMap.HUA_GAI)); // 华盖
|
||||
if (this.liuYaoShenShaSetting.getYiMa() == 0) shenSha.put("yiMa", LiuYaoShenShaMap.YI_MA.get(getDayZhi())); // 驿马
|
||||
if (this.liuYaoShenShaSetting.getTianMa() == 0) shenSha.put("tianMa", LiuYaoShenShaMap.TIAN_MA.get(getDayZhi())); // 天马
|
||||
if (this.liuYaoShenShaSetting.getLuMa() == 0) shenSha.put("luMa", LiuYaoShenShaMap.LU_MA.get(getDayGan())); // 禄马
|
||||
if (this.liuYaoShenShaSetting.getJieSha() == 0) shenSha.put("jieSha", LiuYaoShenShaMap.JIE_SHA.get(getDayZhi())); // 劫煞
|
||||
if (this.liuYaoShenShaSetting.getJiangXing() == 0) shenSha.put("jiangXing", getShenSha1(LiuYaoShenShaMap.JIANG_XING)); // 将星
|
||||
if (this.liuYaoShenShaSetting.getXianChi() == 0) shenSha.put("xianChi", LiuYaoShenShaMap.XIAN_CHI.get(getDayZhi())); // 咸池
|
||||
if (this.liuYaoShenShaSetting.getTianXi() == 0) shenSha.put("tianXi", LiuYaoShenShaMap.TIAN_XI.get(getMonthZhi())); // 天喜
|
||||
if (this.liuYaoShenShaSetting.getZaiSha() == 0) shenSha.put("zaiSha", LiuYaoShenShaMap.ZAI_SHA.get(getDayZhi())); // 灾煞
|
||||
if (this.liuYaoShenShaSetting.getTianYi() == 0) shenSha.put("tianYi", LiuYaoShenShaMap.TIAN_YI.get(getMonthZhi())); // 天医
|
||||
if (this.liuYaoShenShaSetting.getMouXing() == 0) shenSha.put("mouXing", LiuYaoShenShaMap.MOU_XING.get(getDayZhi())); // 谋星
|
||||
if (this.liuYaoShenShaSetting.getHuangEn() == 0) shenSha.put("huangEn", LiuYaoShenShaMap.HUANG_EN.get(getMonthZhi())); // 皇恩
|
||||
if (this.liuYaoShenShaSetting.getYangRen() == 0) shenSha.put("yangRen", LiuYaoShenShaMap.TIAN_REN.get(getDayGan())); // 阳刃
|
||||
if (this.liuYaoShenShaSetting.getFeiRen() == 0) shenSha.put("feiRen", LiuYaoShenShaMap.FEI_REN.get(getDayGan())); // 飞刃
|
||||
this.shenSha = shenSha;
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 获取神煞
|
||||
*
|
||||
* @return 神煞(如:{tianYuanLu=寅})
|
||||
*/
|
||||
public Map<String, String> getShenSha() {
|
||||
return this.shenSha;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* 通用:添加神煞【华盖、将星】
|
||||
*
|
||||
* @param map 神煞常量
|
||||
* @return 神煞
|
||||
*/
|
||||
private String getShenSha1(Map<String, String> map) {
|
||||
|
||||
if (null != map.get(getYearZhi() + getMonthZhi())) return map.get(getYearZhi() + getMonthZhi());
|
||||
if (null != map.get(getYearZhi() + getDayZhi())) return map.get(getYearZhi() + getDayZhi());
|
||||
if (null != map.get(getYearZhi() + getHourZhi())) return map.get(getYearZhi() + getHourZhi());
|
||||
if (null != map.get(getDayZhi() + getYearZhi())) return map.get(getDayZhi() + getYearZhi());
|
||||
if (null != map.get(getDayZhi() + getMonthZhi())) return map.get(getDayZhi() + getMonthZhi());
|
||||
if (null != map.get(getDayZhi() + getHourZhi())) return map.get(getDayZhi() + getHourZhi());
|
||||
|
||||
return CommonUtil.EMPTY1;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用:添加神煞【太极贵人】
|
||||
*
|
||||
* @param map 神煞常量
|
||||
* @return 神煞
|
||||
*/
|
||||
private String getShenSha2(Map<String, String> map) {
|
||||
|
||||
if (null != map.get(getYearGan() + getYearZhi())) return map.get(getYearGan() + getYearZhi());
|
||||
if (null != map.get(getYearGan() + getMonthZhi())) return map.get(getYearGan() + getMonthZhi());
|
||||
if (null != map.get(getYearGan() + getDayZhi())) return map.get(getYearGan() + getDayZhi());
|
||||
if (null != map.get(getYearGan() + getHourZhi())) return map.get(getYearGan() + getHourZhi());
|
||||
if (null != map.get(getDayGan() + getYearZhi())) return map.get(getDayGan() + getYearZhi());
|
||||
if (null != map.get(getDayGan() + getMonthZhi())) return map.get(getDayGan() + getMonthZhi());
|
||||
if (null != map.get(getDayGan() + getDayZhi())) return map.get(getDayGan() + getDayZhi());
|
||||
if (null != map.get(getDayGan() + getHourZhi())) return map.get(getDayGan() + getHourZhi());
|
||||
|
||||
return CommonUtil.EMPTY1;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用:添加神煞【福星贵人】
|
||||
*
|
||||
* @param map 神煞常量
|
||||
* @return 神煞
|
||||
*/
|
||||
private String getShenSha3(Map<String, String> map) {
|
||||
|
||||
if (null != map.get(getDayGan() + getYearZhi())) return map.get(getDayGan() + getYearZhi());
|
||||
if (null != map.get(getDayGan() + getMonthZhi())) return map.get(getDayGan() + getMonthZhi());
|
||||
if (null != map.get(getDayGan() + getDayZhi())) return map.get(getDayGan() + getDayZhi());
|
||||
if (null != map.get(getDayGan() + getHourZhi())) return map.get(getDayGan() + getHourZhi());
|
||||
|
||||
return CommonUtil.EMPTY1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,300 @@
|
||||
package xuan.core.meihua.settings;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.utils.DateUtil;
|
||||
|
||||
/**
|
||||
* 梅花易数 - 基础设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class MeiHuaJiChuSetting {
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*/
|
||||
private String occupy;
|
||||
|
||||
/**
|
||||
* 性别(0:女。1:男)
|
||||
*/
|
||||
private int sex;
|
||||
|
||||
/**
|
||||
* 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
private String date;
|
||||
|
||||
/**
|
||||
* 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
private int dateType;
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
private int leapMonthType;
|
||||
|
||||
/**
|
||||
* 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
private int xuShiSuiType;
|
||||
|
||||
/**
|
||||
* 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
private int jieQiType;
|
||||
|
||||
/**
|
||||
* 排盘类型(0:日期。1:自动。2:数字。3:单数。4:双数)
|
||||
*/
|
||||
private int paiPanType;
|
||||
|
||||
/**
|
||||
* 数字,排盘类型为2时生效
|
||||
*/
|
||||
private int shu;
|
||||
|
||||
/**
|
||||
* 单数,排盘类型为3时生效
|
||||
*/
|
||||
private int danShu;
|
||||
|
||||
/**
|
||||
* 双数1,排盘类型为4时生效
|
||||
*/
|
||||
private int shuangShuOne;
|
||||
|
||||
/**
|
||||
* 双数2,排盘类型为4时生效
|
||||
*/
|
||||
private int shuangShuTwo;
|
||||
|
||||
/**
|
||||
* 上下卦类型,排盘类型为4时生效(0:双数求和计算上下卦。1:双数不求和计算上下卦)
|
||||
*/
|
||||
private int shangXiaGuaType;
|
||||
|
||||
/**
|
||||
* 动爻类型,排盘类型为4时生效(0:双数求和计算动爻。1:双数求和加时辰数计算动爻)
|
||||
*/
|
||||
private int dongYaoType;
|
||||
|
||||
/**
|
||||
* 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
private int yearGanZhiType;
|
||||
|
||||
/**
|
||||
* 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
private int monthGanZhiType;
|
||||
|
||||
/**
|
||||
* 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
private int dayGanZhiType;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public MeiHuaJiChuSetting() {
|
||||
|
||||
this.name = ""; // 姓名(默认→ 空)
|
||||
this.occupy = ""; // 占事(默认→ 空)
|
||||
this.sex = 1; // 性别(默认→ 男)
|
||||
this.date = "2024-01-01 00:00:00"; // 日期(默认→ 2024-01-01 00:00:00)
|
||||
this.dateType = 0; // 日期类型(默认→ 公历)
|
||||
this.leapMonthType = 0; // 闰月类型(默认→ 不使用闰月)
|
||||
this.xuShiSuiType = 0; // 虚实岁类型(默认→ 虚岁)
|
||||
this.jieQiType = 1; // 节气类型(默认→ 按分钟计算)
|
||||
this.paiPanType = 0; // 排盘类型(默认→ 日期)
|
||||
this.shu = 111; // 数字,排盘类型为2时生效(默认→ 111)
|
||||
this.danShu = 111; // 单数,排盘类型为3时生效(默认→ 111)
|
||||
this.shuangShuOne = 111; // 双数1,排盘类型为4时生效(默认→ 111)
|
||||
this.shuangShuTwo = 111; // 双数2,排盘类型为4时生效(默认→ 111)
|
||||
this.shangXiaGuaType = 1; // 上下卦类型,排盘类型为4时生效(默认→ 双数不求和计算上下卦)
|
||||
this.dongYaoType = 0; // 动爻类型,排盘类型为4时生效(默认→ 双数求和计算动爻)
|
||||
this.yearGanZhiType = 2; // 年干支类型(默认→ 以立春交接时刻作为新年的开始)
|
||||
this.monthGanZhiType = 1; // 月干支类型(默认→ 以节交接时刻起算)
|
||||
this.dayGanZhiType = 0; // 日干支类型(默认→ 晚子时日柱按当天)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*
|
||||
* @param name 姓名
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = StringUtils.isNotBlank(name) ? name : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*
|
||||
* @param occupy 占事
|
||||
*/
|
||||
public void setOccupy(String occupy) {
|
||||
this.occupy = StringUtils.isNotBlank(occupy) ? occupy : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*
|
||||
* @param sex 性别(0:女。1:男)
|
||||
*/
|
||||
public void setSex(int sex) {
|
||||
this.sex = (sex == 0 || sex == 1) ? sex : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*
|
||||
* @param date 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = DateUtil.isValidDate(date) ? date : "2024-01-01 00:00:00";
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期类型
|
||||
*
|
||||
* @param dateType 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
public void setDateType(int dateType) {
|
||||
this.dateType = (dateType == 0 || dateType == 1) ? dateType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效
|
||||
*
|
||||
* @param leapMonthType 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
public void setLeapMonthType(int leapMonthType) {
|
||||
this.leapMonthType = (leapMonthType == 0 || leapMonthType == 1) ? leapMonthType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 虚实岁类型
|
||||
*
|
||||
* @param xuShiSuiType 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
public void setXuShiSuiType(int xuShiSuiType) {
|
||||
this.xuShiSuiType = (xuShiSuiType == 0 || xuShiSuiType == 1) ? xuShiSuiType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 节气类型
|
||||
*
|
||||
* @param jieQiType 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
public void setJieQiType(int jieQiType) {
|
||||
this.jieQiType = (jieQiType == 0 || jieQiType == 1) ? jieQiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 排盘类型
|
||||
*
|
||||
* @param paiPanType 排盘类型(0:日期。1:自动。2:数字。3:单数。4:双数)
|
||||
*/
|
||||
public void setPaiPanType(int paiPanType) {
|
||||
this.paiPanType = (paiPanType == 0 || paiPanType == 1 || paiPanType == 2 || paiPanType == 3 || paiPanType == 4) ? paiPanType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 数字,排盘类型为2时生效
|
||||
*
|
||||
* @param shu 数字
|
||||
*/
|
||||
public void setShu(int shu) {
|
||||
this.shu = (shu > 100 && shu < 999) ? shu : 111;
|
||||
}
|
||||
|
||||
/**
|
||||
* 单数,排盘类型为3时生效
|
||||
*
|
||||
* @param danShu 单数
|
||||
*/
|
||||
public void setDanShu(int danShu) {
|
||||
this.danShu = (danShu > 0 && danShu < 2147483647) ? danShu : 111;
|
||||
}
|
||||
|
||||
/**
|
||||
* 双数1,排盘类型为4时生效
|
||||
*
|
||||
* @param shuangShuOne 双数1
|
||||
*/
|
||||
public void setShuangShuOne(int shuangShuOne) {
|
||||
this.shuangShuOne = (shuangShuOne > 0 && shuangShuOne < 2147483647) ? shuangShuOne : 111;
|
||||
}
|
||||
|
||||
/**
|
||||
* 双数2,排盘类型为4时生效
|
||||
*
|
||||
* @param shuangShuTwo 双数2
|
||||
*/
|
||||
public void setShuangShuTwo(int shuangShuTwo) {
|
||||
this.shuangShuTwo = (shuangShuTwo > 0 && shuangShuTwo < 2147483647) ? shuangShuTwo : 111;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上下卦类型,排盘类型为4时生效
|
||||
*
|
||||
* @param shangXiaGuaType 上下卦类型,排盘类型为4时生效(0:双数求和计算上下卦。1:双数不求和计算上下卦)
|
||||
*/
|
||||
public void setShangXiaGuaType(int shangXiaGuaType) {
|
||||
this.shangXiaGuaType = (shangXiaGuaType == 0 || shangXiaGuaType == 1) ? shangXiaGuaType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 动爻类型,排盘类型为4时生效
|
||||
*
|
||||
* @param dongYaoType 动爻类型,排盘类型为4时生效(0:双数求和计算动爻。1:双数求和加时辰数计算动爻)
|
||||
*/
|
||||
public void setDongYaoType(int dongYaoType) {
|
||||
this.dongYaoType = (dongYaoType == 0 || dongYaoType == 1) ? dongYaoType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 年干支类型
|
||||
*
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
public void setYearGanZhiType(int yearGanZhiType) {
|
||||
this.yearGanZhiType = (yearGanZhiType == 0 || yearGanZhiType == 1 || yearGanZhiType == 2) ? yearGanZhiType : 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月干支类型
|
||||
*
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
public void setMonthGanZhiType(int monthGanZhiType) {
|
||||
this.monthGanZhiType = (monthGanZhiType == 0 || monthGanZhiType == 1) ? monthGanZhiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日干支类型
|
||||
*
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日干支按当天。1:晚子时日干支按明天)
|
||||
*/
|
||||
public void setDayGanZhiType(int dayGanZhiType) {
|
||||
this.dayGanZhiType = (dayGanZhiType == 0 || dayGanZhiType == 1) ? dayGanZhiType : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
package xuan.core.meihua.utils;
|
||||
|
||||
import com.nlf.calendar.Lunar;
|
||||
import xuan.core.liuyao.maps.LiuYaoJiChuMap;
|
||||
import xuan.core.meihua.maps.MeiHuaJiChuMap;
|
||||
import xuan.core.meihua.settings.MeiHuaJiChuSetting;
|
||||
import xuan.utils.CommonUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 梅花易数 - 基础工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class MeiHuaJiChuUtil {
|
||||
|
||||
/**
|
||||
* 获取上卦数、下卦数、动爻数(★可用于排盘模式扩展)
|
||||
*
|
||||
* @param meiHuaJiChuSetting 梅花易数 - 基础设置
|
||||
* @param lunar 农历日期
|
||||
* @param yearZhi 年支
|
||||
* @param hourZhi 时支
|
||||
* @return 上卦数、下卦数、动爻数
|
||||
*/
|
||||
public static Map<String, Integer> getNumber(MeiHuaJiChuSetting meiHuaJiChuSetting, Lunar lunar, String yearZhi, String hourZhi) {
|
||||
|
||||
Map<String, Integer> map = new HashMap<>();
|
||||
|
||||
int shangGuaNumber = 0; // 上卦数
|
||||
int xiaGuaNumber = 0; // 下卦数
|
||||
int dongYaoNumber = 0; // 动爻数
|
||||
|
||||
if (meiHuaJiChuSetting.getPaiPanType() == 0) {
|
||||
// ★★★ 1.1、日期排盘模式
|
||||
Map<String, Integer> diZhiShuMap = LiuYaoJiChuMap.DI_ZHI_SHU; // 地支对应的数字(地支为键)
|
||||
int yearNumber = diZhiShuMap.get(yearZhi); // 年数
|
||||
int monthNumber = lunar.getMonth(); // 月数
|
||||
int dayNumber = lunar.getDay(); // 日数
|
||||
int hourNumber = diZhiShuMap.get(hourZhi); // 时数
|
||||
shangGuaNumber = shangGuaNumber(yearNumber + monthNumber + dayNumber); // 上卦数:(年数+月数+日数)÷8得出余数
|
||||
xiaGuaNumber = xiaGuaNumber(yearNumber + monthNumber + dayNumber + hourNumber); // 下卦数:(年数+月数+日数+时数)÷8得出余数
|
||||
dongYaoNumber = dongYaoNumber(yearNumber + monthNumber + dayNumber + hourNumber); // 动爻数:(年数+月数+日数+时数)÷6得出余数
|
||||
} else if (meiHuaJiChuSetting.getPaiPanType() == 1) {
|
||||
// ★★★ 1.2、自动排盘模式
|
||||
shangGuaNumber = CommonUtil.randomList(8); // 随机产生1~8中的1个数字
|
||||
xiaGuaNumber = CommonUtil.randomList(8); // 随机产生1~8中的1个数字
|
||||
dongYaoNumber = CommonUtil.randomList(6); // 随机产生1~6中的1个数字
|
||||
} else if (meiHuaJiChuSetting.getPaiPanType() == 2) {
|
||||
// ★★★ 1.3、数字排盘模式
|
||||
String number = String.valueOf(meiHuaJiChuSetting.getShu());
|
||||
shangGuaNumber = shangGuaNumber(Integer.parseInt(String.valueOf(number.charAt(0)))); // 上卦数
|
||||
xiaGuaNumber = xiaGuaNumber(Integer.parseInt(String.valueOf(number.charAt(1)))); // 下卦数
|
||||
dongYaoNumber = dongYaoNumber(Integer.parseInt(String.valueOf(number.charAt(2)))); // 动爻数
|
||||
} else if (meiHuaJiChuSetting.getPaiPanType() == 3) {
|
||||
// ★★★ 1.4、单数排盘模式
|
||||
String panPanDanShu = String.valueOf(meiHuaJiChuSetting.getDanShu()); // 单数
|
||||
int length = panPanDanShu.length(); // 单数的位数
|
||||
// 计算前半段数字之和、后半段数字之和
|
||||
int number1Count = 0; // 前半段数字之和
|
||||
int number2Count = 0; // 后半段数字之和
|
||||
if (length > 1) {
|
||||
// 前半段数字取0~(总位数÷2)位,后半段数字取(总位数÷2)~最后一位
|
||||
String number1 = panPanDanShu.substring(0, length / 2);
|
||||
String number2 = panPanDanShu.substring(length / 2, length);
|
||||
for (int i = 0; i < number1.length(); i++) {
|
||||
number1Count += Integer.parseInt(number1.split("")[i]);
|
||||
}
|
||||
for (int i = 0; i < number2.length(); i++) {
|
||||
number2Count += Integer.parseInt(number2.split("")[i]);
|
||||
}
|
||||
}
|
||||
shangGuaNumber = shangGuaNumber(number1Count); // 上卦数
|
||||
xiaGuaNumber = xiaGuaNumber(number2Count); // 下卦数
|
||||
dongYaoNumber = dongYaoNumber(number1Count + number2Count); // 动爻数
|
||||
} else if (meiHuaJiChuSetting.getPaiPanType() == 4) {
|
||||
// ★★★ 1.5、双数排盘模式
|
||||
int paiPanShuangShuOne = meiHuaJiChuSetting.getShuangShuOne(); // 双数1
|
||||
int paiPanShuangShuTwo = meiHuaJiChuSetting.getShuangShuTwo(); // 双数2
|
||||
String paiPanShuangShuOneStr = String.valueOf(paiPanShuangShuOne);
|
||||
String paiPanShuangShuTwoStr = String.valueOf(paiPanShuangShuTwo);
|
||||
// 双数求和计算上下卦
|
||||
if (meiHuaJiChuSetting.getShangXiaGuaType() == 0) {
|
||||
paiPanShuangShuOne = 0;
|
||||
paiPanShuangShuTwo = 0;
|
||||
// 计算双数1的数字之和
|
||||
for (int i = 0; i < paiPanShuangShuOneStr.length(); i++) {
|
||||
paiPanShuangShuOne += Integer.parseInt(paiPanShuangShuOneStr.split("")[i]);
|
||||
}
|
||||
// 计算双数2的数字之和
|
||||
for (int i = 0; i < paiPanShuangShuTwoStr.length(); i++) {
|
||||
paiPanShuangShuTwo += Integer.parseInt(paiPanShuangShuTwoStr.split("")[i]);
|
||||
}
|
||||
}
|
||||
int hourNumber = paiPanShuangShuOne + paiPanShuangShuTwo;
|
||||
// 双数求和加时辰数计算动爻
|
||||
if (meiHuaJiChuSetting.getDongYaoType() == 1) {
|
||||
hourNumber += MeiHuaJiChuMap.DI_ZHI_SHU.get(hourZhi);
|
||||
}
|
||||
shangGuaNumber = shangGuaNumber(paiPanShuangShuOne); // 上卦数
|
||||
xiaGuaNumber = xiaGuaNumber(paiPanShuangShuTwo); // 下卦数
|
||||
dongYaoNumber = dongYaoNumber(hourNumber); // 动爻数
|
||||
} else if (meiHuaJiChuSetting.getPaiPanType() == 5) {
|
||||
// ★★★ 1.6、在此可扩展更多排盘模式(建议:将每种排盘模式封装为单独方法)
|
||||
System.out.println("======================");
|
||||
System.out.println("在此可扩展更多排盘模式");
|
||||
System.out.println("======================");
|
||||
}
|
||||
|
||||
// 2、设置并返回数据
|
||||
map.put("shangGuaNumber", shangGuaNumber); // 保存上卦数
|
||||
map.put("xiaGuaNumber", xiaGuaNumber); // 保存下卦数
|
||||
map.put("dongYaoNumber", dongYaoNumber); // 保存动爻数
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回用卦与体卦关系
|
||||
*
|
||||
* @param shangGua 上卦
|
||||
* @param xiaGua 下卦
|
||||
* @param mark 本卦、变卦、互卦、错卦、综卦
|
||||
* @param shangGuaYong 上卦是否为用卦(true:用卦。false:体卦)
|
||||
* @return 用卦与体卦关系
|
||||
*/
|
||||
public static String getLink(String shangGua, String xiaGua, String mark, boolean shangGuaYong) {
|
||||
|
||||
String yongGua; // 用卦
|
||||
String tiGua; // 体卦
|
||||
String yongGuaMark; // 用卦标识
|
||||
String tiGuaMark; // 体卦标识
|
||||
|
||||
// 1、判断上卦,下卦
|
||||
if (shangGuaYong) {
|
||||
yongGua = shangGua; // 用卦为上卦
|
||||
yongGuaMark = "上卦";
|
||||
tiGua = xiaGua; // 体卦为下卦
|
||||
tiGuaMark = "下卦";
|
||||
} else {
|
||||
tiGua = shangGua; // 体卦为上卦
|
||||
tiGuaMark = "上卦";
|
||||
yongGua = xiaGua; // 用卦为下卦
|
||||
yongGuaMark = "下卦";
|
||||
}
|
||||
|
||||
// 2、获取用卦与体卦之间的关系
|
||||
Map<String, String> baGuaWuXing = MeiHuaJiChuMap.BA_GUA_WU_XING; // 八卦五行
|
||||
String info = mark + yongGuaMark + yongGua + "(" + baGuaWuXing.get(yongGua) + ")为用卦、" + tiGuaMark + tiGua + "(" + baGuaWuXing.get(tiGua) + ")为体卦。";
|
||||
Map<String, String> yongTiGuanXi = MeiHuaJiChuMap.YONG_TI_GUAN_XI; // 用卦与体卦的关系(用卦+体卦)
|
||||
|
||||
// 3、返回信息
|
||||
return info + yongTiGuanXi.get(yongGua + tiGua);
|
||||
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* 计算上卦数
|
||||
*
|
||||
* @param number 初始数
|
||||
* @return 上卦数
|
||||
*/
|
||||
private static Integer shangGuaNumber(int number) {
|
||||
|
||||
int shangGuaNumber = number % 8;
|
||||
return shangGuaNumber == 0 ? 8 : shangGuaNumber; // 若除尽则统一用8来表示
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算下卦数
|
||||
*
|
||||
* @param number 初始数
|
||||
* @return 下卦数
|
||||
*/
|
||||
private static Integer xiaGuaNumber(int number) {
|
||||
|
||||
int xiaGuaNumber = number % 8;
|
||||
return xiaGuaNumber == 0 ? 8 : xiaGuaNumber; // 若除尽则统一用8来表示
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算动爻数
|
||||
*
|
||||
* @param number 初始数
|
||||
* @return 动爻数
|
||||
*/
|
||||
private static Integer dongYaoNumber(int number) {
|
||||
|
||||
int dongYaoNumber = number % 6;
|
||||
return dongYaoNumber == 0 ? 6 : dongYaoNumber; // 若除尽则统一用6来表示
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,238 @@
|
||||
package xuan.core.qimen.zhuan.settings;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.utils.DateUtil;
|
||||
|
||||
/**
|
||||
* 转盘奇门 - 基础设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class QiMenZhuanPanJiChuSetting {
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*/
|
||||
private String occupy;
|
||||
|
||||
/**
|
||||
* 性别(0:女。1:男)
|
||||
*/
|
||||
private int sex;
|
||||
|
||||
/**
|
||||
* 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
private String date;
|
||||
|
||||
/**
|
||||
* 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
private int dateType;
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
private int leapMonthType;
|
||||
|
||||
/**
|
||||
* 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
private int xuShiSuiType;
|
||||
|
||||
/**
|
||||
* 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
private int jieQiType;
|
||||
|
||||
/**
|
||||
* 排盘类型(0:年家奇门。1:月家奇门。2:日家奇门。3:时家奇门)
|
||||
*/
|
||||
private int paiPanType;
|
||||
|
||||
/**
|
||||
* 值使类型(0:天禽星为值符时,一律用[死门]为值使。1:天禽星为值符时,根据阴阳遁判断。2:天禽星为值符时,根据节气判断)
|
||||
*/
|
||||
private int zhiShiType;
|
||||
|
||||
/**
|
||||
* 月家奇门起局类型,排盘类型为1时生效(0:使用年支起局。1:使用年干支的符头地支起局)
|
||||
*/
|
||||
private int yueJiaQiJuType;
|
||||
|
||||
/**
|
||||
* 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
private int yearGanZhiType;
|
||||
|
||||
/**
|
||||
* 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
private int monthGanZhiType;
|
||||
|
||||
/**
|
||||
* 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
private int dayGanZhiType;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public QiMenZhuanPanJiChuSetting() {
|
||||
|
||||
this.name = ""; // 姓名(默认→ 空)
|
||||
this.occupy = ""; // 占事(默认→ 空)
|
||||
this.sex = 1; // 性别(默认→ 男)
|
||||
this.date = "2024-01-01 00:00:00"; // 日期(默认→ 2024-01-01 00:00:00)
|
||||
this.dateType = 0; // 日期类型(默认→ 公历)
|
||||
this.leapMonthType = 0; // 闰月类型,日期类型为1时生效(默认→ 不使用闰月)
|
||||
this.xuShiSuiType = 0; // 虚实岁类型(默认→ 虚岁)
|
||||
this.jieQiType = 1; // 节气类型(默认→ 按分钟计算)
|
||||
this.paiPanType = 3; // 排盘类型(默认→ 时家奇门)
|
||||
this.zhiShiType = 0; // 值使类型(默认→ 天禽星为值符时,一律用[死门]为值使)
|
||||
this.yueJiaQiJuType = 1; // 月家奇门起局类型,排盘类型为1时生效(默认→ 使用年干支的符头地支起局)
|
||||
this.yearGanZhiType = 2; // 年干支类型(默认→ 以立春交接时刻作为新年的开始)
|
||||
this.monthGanZhiType = 1; // 月干支类型(默认→ 以节交接时刻起算)
|
||||
this.dayGanZhiType = 0; // 日干支类型(默认→ 晚子时日柱按当天)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*
|
||||
* @param name 姓名
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = StringUtils.isNotBlank(name) ? name : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*
|
||||
* @param occupy 占事
|
||||
*/
|
||||
public void setOccupy(String occupy) {
|
||||
this.occupy = StringUtils.isNotBlank(occupy) ? occupy : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*
|
||||
* @param sex 性别(0:女。1:男)
|
||||
*/
|
||||
public void setSex(int sex) {
|
||||
this.sex = (sex == 0 || sex == 1) ? sex : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*
|
||||
* @param date 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = DateUtil.isValidDate(date) ? date : "2024-01-01 00:00:00";
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期类型
|
||||
*
|
||||
* @param dateType 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
public void setDateType(int dateType) {
|
||||
this.dateType = (dateType == 0 || dateType == 1) ? dateType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效
|
||||
*
|
||||
* @param leapMonthType 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
public void setLeapMonthType(int leapMonthType) {
|
||||
this.leapMonthType = (leapMonthType == 0 || leapMonthType == 1) ? leapMonthType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 虚实岁类型
|
||||
*
|
||||
* @param xuShiSuiType 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
public void setXuShiSuiType(int xuShiSuiType) {
|
||||
this.xuShiSuiType = (xuShiSuiType == 0 || xuShiSuiType == 1) ? xuShiSuiType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 节气类型
|
||||
*
|
||||
* @param jieQiType 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
public void setJieQiType(int jieQiType) {
|
||||
this.jieQiType = (jieQiType == 0 || jieQiType == 1) ? jieQiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 排盘类型
|
||||
*
|
||||
* @param paiPanType 排盘类型(0:年家奇门。1:月家奇门。2:日家奇门。3:时家奇门)
|
||||
*/
|
||||
public void setPaiPanType(int paiPanType) {
|
||||
this.paiPanType = (paiPanType == 0 || paiPanType == 1 || paiPanType == 2 || paiPanType == 3) ? paiPanType : 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 值使类型
|
||||
*
|
||||
* @param zhiShiType 值使类型(0:天禽星为值符时,一律用[死门]为值使。1:天禽星为值符时,根据阴阳遁判断。2:天禽星为值符时,根据节气判断)
|
||||
*/
|
||||
public void setZhiShiType(int zhiShiType) {
|
||||
this.zhiShiType = (zhiShiType == 0 || zhiShiType == 1 || zhiShiType == 2) ? zhiShiType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月家奇门起局类型,排盘类型为1时生效
|
||||
*
|
||||
* @param yueJiaQiJuType 月家奇门起局类型,排盘类型为1时生效(0:使用年支起局。1:使用年干支的符头地支起局)
|
||||
*/
|
||||
public void setYueJiaQiJuType(int yueJiaQiJuType) {
|
||||
this.yueJiaQiJuType = (yueJiaQiJuType == 0 || yueJiaQiJuType == 1) ? yueJiaQiJuType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 年干支类型
|
||||
*
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
public void setYearGanZhiType(int yearGanZhiType) {
|
||||
this.yearGanZhiType = (yearGanZhiType == 0 || yearGanZhiType == 1 || yearGanZhiType == 2) ? yearGanZhiType : 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月干支类型
|
||||
*
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
public void setMonthGanZhiType(int monthGanZhiType) {
|
||||
this.monthGanZhiType = (monthGanZhiType == 0 || monthGanZhiType == 1) ? monthGanZhiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日干支类型
|
||||
*
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日干支按当天。1:晚子时日干支按明天)
|
||||
*/
|
||||
public void setDayGanZhiType(int dayGanZhiType) {
|
||||
this.dayGanZhiType = (dayGanZhiType == 0 || dayGanZhiType == 1) ? dayGanZhiType : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,869 @@
|
||||
package xuan.core.qimen.zhuan.utils;
|
||||
|
||||
import xuan.core.qimen.zhuan.maps.QiMenZhuanPanJiChuMap;
|
||||
import xuan.utils.CommonUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 转盘奇门 - 基础工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class QiMenZhuanPanJiChuUtil {
|
||||
|
||||
/**
|
||||
* 获取值使
|
||||
* <p>
|
||||
* <p> 天禽星为值符时:一律用[死门]为值使</p>
|
||||
*
|
||||
* @return 值使
|
||||
*/
|
||||
public static String getZhiShi1() {
|
||||
return "死门";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取值使
|
||||
* <hr/>
|
||||
* <p> 天禽星为值符时:阳遁用[生门]为值使</p>
|
||||
* <p> 天禽星为值符时:阴遁用[死门]为值使</p>
|
||||
*
|
||||
* @param yinYangDun 阴阳遁
|
||||
* @return 值使
|
||||
*/
|
||||
public static String getZhiShi2(String yinYangDun) {
|
||||
return "阳遁".equals(yinYangDun) ? "生门" : "死门";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取值使
|
||||
* <hr/>
|
||||
* <p>天禽星为值符时:(冬至、小寒、大寒)三个节气,用[休门]为值使</p>
|
||||
* <p>天禽星为值符时:(立春,雨水,惊蛰)三个节气,用[生门]为值使</p>
|
||||
* <p>天禽星为值符时:(春分、清明、谷雨)三个节气,用[伤门]为值使</p>
|
||||
* <p>天禽星为值符时:(立夏、小满、芒种)三个节气,用[杜门]为值使</p>
|
||||
* <p>天禽星为值符时:(夏至、小暑、大暑)三个节气,用[景门]为值使</p>
|
||||
* <p>天禽星为值符时:(立秋、处暑、白露)三个节气,用[死门]为值使</p>
|
||||
* <p>天禽星为值符时:(秋分、寒露、霜降)三个节气,用[惊门]为值使</p>
|
||||
* <p>天禽星为值符时:(立冬、小雪、大雪)三个节气,用[开门]为值使</p>
|
||||
*
|
||||
* @param jieQi 节气
|
||||
* @return 值使
|
||||
*/
|
||||
public static String getZhiShi3(String jieQi) {
|
||||
|
||||
Map<Integer, List<String>> isBaMenMap = QiMenZhuanPanJiChuMap.IS_BA_MEN; // 根据二十四节气获取八门
|
||||
for (int i = 0; i < isBaMenMap.size(); i++) {
|
||||
for (int j = 0; j < isBaMenMap.get(i).size(); j++) {
|
||||
String s = isBaMenMap.get(i).get(j);
|
||||
if (s.equals(jieQi)) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
return "休门";
|
||||
case 1:
|
||||
return "生门";
|
||||
case 2:
|
||||
return "伤门";
|
||||
case 3:
|
||||
return "杜门";
|
||||
case 4:
|
||||
return "景门";
|
||||
case 5:
|
||||
return "死门";
|
||||
case 6:
|
||||
return "惊门";
|
||||
case 7:
|
||||
return "开门";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取伏吟
|
||||
*
|
||||
* @param diPan 地盘
|
||||
* @param tianPan 天盘
|
||||
* @param renPan 人盘
|
||||
* @param shenPan 神盘
|
||||
* @param tianPanQiYiTianQinNo 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 伏吟
|
||||
*/
|
||||
public static List<String> getFuYin(List<String> diPan, List<String> tianPan, List<String> renPan, List<String> shenPan, List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
List<String> list = new ArrayList<>(); // 保存伏吟数据
|
||||
|
||||
// 1、奇仪伏吟(判断宫位数据是否符合:坎一宫中的地盘奇仪和天盘奇仪是否相同)
|
||||
if (diPan.get(0).equals(tianPanQiYiTianQinNo.get(0))) {
|
||||
list.add("奇仪伏吟");
|
||||
}
|
||||
|
||||
// 2、星伏吟(判断宫位数据是否符合:坎一宫有天蓬星,离九宫有天英星)
|
||||
if ("天蓬".equals(tianPan.get(0)) && "天英".equals(tianPan.get(8))) {
|
||||
list.add("九星伏吟");
|
||||
}
|
||||
|
||||
// 3、门伏吟(判断宫位数据是否符合:坎一宫有休门,离九宫有景门)
|
||||
if ("休门".equals(renPan.get(0)) && "景门".equals(renPan.get(8))) {
|
||||
list.add("八门伏吟");
|
||||
}
|
||||
|
||||
// 4、神伏吟(判断宫位数据是否符合:坎一宫有值符,离九宫有白虎)
|
||||
if ("值符".equals(shenPan.get(0)) && "白虎".equals(shenPan.get(8))) {
|
||||
list.add("八神伏吟");
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取反吟
|
||||
*
|
||||
* @param diPan 地盘
|
||||
* @param tianPan 天盘
|
||||
* @param renPan 人盘
|
||||
* @param shenPan 神盘
|
||||
* @param tianPanQiYiTianQinNo 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 反吟
|
||||
*/
|
||||
public static List<String> getFanYin(List<String> diPan, List<String> tianPan, List<String> renPan, List<String> shenPan, List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
List<String> list = new ArrayList<>(); // 保存反吟数据
|
||||
|
||||
// 1、六仪反吟
|
||||
/*
|
||||
天盘甲子戊+地盘甲午辛
|
||||
天盘甲戌己+地盘甲辰壬
|
||||
天盘甲申庚+地盘甲寅癸
|
||||
天盘甲午辛+地盘甲子戊
|
||||
天盘甲辰壬+地盘甲戌己
|
||||
天盘甲寅癸+地盘甲申庚
|
||||
*/
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
// 1.1、天盘甲子戊+地盘甲午辛
|
||||
if ("戊".equals(tianPanQiYiTianQinNo.get(i)) && "辛".equals(diPan.get(i))) {
|
||||
list.add("六仪反吟");
|
||||
break;
|
||||
}
|
||||
// 1.2、天盘甲戌己+地盘甲辰壬
|
||||
if ("己".equals(tianPanQiYiTianQinNo.get(i)) && "壬".equals(diPan.get(i))) {
|
||||
list.add("六仪反吟");
|
||||
break;
|
||||
}
|
||||
// 1.3、天盘甲申庚+地盘甲寅癸
|
||||
if ("庚".equals(tianPanQiYiTianQinNo.get(i)) && "癸".equals(diPan.get(i))) {
|
||||
list.add("六仪反吟");
|
||||
break;
|
||||
}
|
||||
// 1.4、天盘甲午辛+地盘甲子戊
|
||||
if ("辛".equals(tianPanQiYiTianQinNo.get(i)) && "戊".equals(diPan.get(i))) {
|
||||
list.add("六仪反吟");
|
||||
break;
|
||||
}
|
||||
// 1.5、天盘甲辰壬+地盘甲戌己
|
||||
if ("壬".equals(tianPanQiYiTianQinNo.get(i)) && "己".equals(diPan.get(i))) {
|
||||
list.add("六仪反吟");
|
||||
break;
|
||||
}
|
||||
// 1.6、天盘甲寅癸+地盘甲申庚
|
||||
if ("癸".equals(tianPanQiYiTianQinNo.get(i)) && "庚".equals(diPan.get(i))) {
|
||||
list.add("六仪反吟");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 2、星反吟(判断宫位数据是否符合:坎一宫有天英星,离九宫有天蓬星)
|
||||
if ("天英".equals(tianPan.get(0)) && "天蓬".equals(tianPan.get(8))) {
|
||||
list.add("九星反吟");
|
||||
}
|
||||
|
||||
// 3、门反吟(判断宫位数据是否符合:坎一宫有景门,离九宫有休门)
|
||||
if ("景门".equals(renPan.get(0)) && "休门".equals(renPan.get(8))) {
|
||||
list.add("八门反吟");
|
||||
}
|
||||
|
||||
// 4、神反吟(判断宫位数据是否符合:坎一宫有白虎,离九宫有值符)
|
||||
if ("白虎".equals(shenPan.get(0)) && "值符".equals(shenPan.get(8))) {
|
||||
list.add("八神反吟");
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取六仪击刑
|
||||
*
|
||||
* @param tianPanQiYiTianQinYes 天盘奇仪与落宫地支的关系,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @param tianPanQiYiTianQinNo 天盘奇仪与落宫地支的关系,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 六仪击刑
|
||||
*/
|
||||
public static List<String> getLiuYiJiXing(List<String> tianPanQiYiTianQinYes, List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
/*
|
||||
1、甲子戊:'戊'落震三宫,子卯相刑。(东方)
|
||||
2、甲戌己:'己'落坤二宫,戌未相刑。(西南方)
|
||||
3、甲申庚:'庚'落艮八宫,申寅相刑。(东北方)
|
||||
4、甲午辛:'辛'落离九宫,午午自刑。(南方)
|
||||
5、甲辰壬:'壬'落巽四宫,辰辰自刑。(东南方)
|
||||
6、甲寅癸:'癸'落巽四宫,寅巳相刑。(东南方)
|
||||
*/
|
||||
|
||||
Map<String, String> liuYiJiXingMap = QiMenZhuanPanJiChuMap.LIU_YI_JI_XING; // 六仪击刑(天盘干+宫位为键)
|
||||
|
||||
List<String> list = new ArrayList<>(); // 保存六仪击刑
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
String jiXingTianPanQiYiTianQinYes = liuYiJiXingMap.get(tianPanQiYiTianQinYes.get(i) + (i + 1));
|
||||
String jiXingTianPanQiYiTianQinNo = liuYiJiXingMap.get(tianPanQiYiTianQinNo.get(i) + (i + 1));
|
||||
if (null != jiXingTianPanQiYiTianQinYes) list.add(jiXingTianPanQiYiTianQinYes);
|
||||
if (null != jiXingTianPanQiYiTianQinNo) list.add(jiXingTianPanQiYiTianQinNo);
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取奇仪入墓
|
||||
*
|
||||
* @param tianPanQiYiTianQinYes 天盘奇仪与落宫地支的关系,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @param tianPanQiYiTianQinNo 天盘奇仪与落宫地支的关系,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 奇仪入墓
|
||||
*/
|
||||
public static List<String> getQiYiRuMu(List<String> tianPanQiYiTianQinYes, List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
/*
|
||||
1、'甲'落坤二宫。(西南方)
|
||||
2、'乙'落乾六宫。(西北方)
|
||||
3、'丙'落乾六宫。(西北方)
|
||||
4、'丁'落艮八宫。(东北方)
|
||||
5、'戊'落乾六宫。(西北方)
|
||||
6、'己'落艮八宫。(东北方)
|
||||
7、'庚'落艮八宫。(东北方)
|
||||
8、'辛'落巽四宫。(东南方)
|
||||
9、'壬'落巽四宫。(东南方)
|
||||
10、'癸'落坤二宫。(西南方)
|
||||
*/
|
||||
|
||||
Map<String, String> qiYiRuMuMap = QiMenZhuanPanJiChuMap.QI_YI_RU_MU; // 奇仪入墓(天盘干+宫位为键)
|
||||
|
||||
List<String> list = new ArrayList<>(); // 保存奇仪入墓
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
String ruMuTianPanQiYiTianQinYes = qiYiRuMuMap.get(tianPanQiYiTianQinYes.get(i) + (i + 1));
|
||||
String ruMuTianPanQiYiTianQinNo = qiYiRuMuMap.get(tianPanQiYiTianQinNo.get(i) + (i + 1));
|
||||
if (null != ruMuTianPanQiYiTianQinYes) list.add(ruMuTianPanQiYiTianQinYes);
|
||||
if (null != ruMuTianPanQiYiTianQinNo) list.add(ruMuTianPanQiYiTianQinNo);
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取六仪击邢、奇仪入墓状态
|
||||
*
|
||||
* @param tianPanQiYiTianQinYes 天盘旋转后九星所携带的奇仪,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @param tianPanQiYiTianQinNo 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 六仪击邢、奇仪入墓状态
|
||||
*/
|
||||
public static Map<String, List<String>> getJiXingRuMuStatus(List<String> tianPanQiYiTianQinYes, List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
Map<String, String> liuYiJiXingMap = QiMenZhuanPanJiChuMap.LIU_YI_JI_XING; // 六仪击刑(天盘干+宫位为键)
|
||||
Map<String, String> qiYiRuMuMap = QiMenZhuanPanJiChuMap.QI_YI_RU_MU; // 奇仪入墓(天盘干+宫位为键)
|
||||
|
||||
Map<String, List<String>> map = new HashMap<>();
|
||||
List<String> jiXingRuMuLinkTianPanQiYiTianQinYes = new ArrayList<>(); // 保存六仪击刑、奇仪入墓状态,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
List<String> jiXingRuMuLinkTianPanQiYiTianQinNo = new ArrayList<>(); // 保存六仪击刑、奇仪入墓状态,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
|
||||
// 1、计算每一个宫位的击邢、入墓
|
||||
for (int i = 0; i < 9; i++) {
|
||||
// 1.1、判断只包含[天禽星]携带的奇仪是否构成六仪击邢与奇仪入墓
|
||||
if (null != tianPanQiYiTianQinYes) {
|
||||
String jiXingTianPanQiYiTianQinYes = liuYiJiXingMap.get(tianPanQiYiTianQinYes.get(i) + (i + 1)); // 六仪击邢
|
||||
String qiYiRuMuTianPanQiYiTianQinYes = qiYiRuMuMap.get(tianPanQiYiTianQinYes.get(i) + (i + 1)); // 奇仪入墓
|
||||
if (null == jiXingTianPanQiYiTianQinYes && null == qiYiRuMuTianPanQiYiTianQinYes) {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinYes.add("");
|
||||
} else if (null != jiXingTianPanQiYiTianQinYes && null != qiYiRuMuTianPanQiYiTianQinYes) {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinYes.add("击邢入墓");
|
||||
} else {
|
||||
if (null != jiXingTianPanQiYiTianQinYes) {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinYes.add("击邢");
|
||||
} else {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinYes.add("入墓");
|
||||
}
|
||||
}
|
||||
map.put("jiXingRuMuLinkTianPanQiYiTianQinYes", jiXingRuMuLinkTianPanQiYiTianQinYes);
|
||||
}
|
||||
// 1.2、判断不包含[天禽星]携带的奇仪是否构成六仪击邢与奇仪入墓
|
||||
if (null != tianPanQiYiTianQinNo) {
|
||||
String jiXingTianPanQiYiTianQinNo = liuYiJiXingMap.get(tianPanQiYiTianQinNo.get(i) + (i + 1)); // 六仪击邢
|
||||
String qiYiRuMuTianPanQiYiTianQinNo = qiYiRuMuMap.get(tianPanQiYiTianQinNo.get(i) + (i + 1)); // 奇仪入墓
|
||||
if (null == jiXingTianPanQiYiTianQinNo && null == qiYiRuMuTianPanQiYiTianQinNo) {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinNo.add("");
|
||||
} else if (null != jiXingTianPanQiYiTianQinNo && null != qiYiRuMuTianPanQiYiTianQinNo) {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinNo.add("击邢入墓");
|
||||
} else {
|
||||
if (null != jiXingTianPanQiYiTianQinNo) {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinNo.add("击邢");
|
||||
} else {
|
||||
jiXingRuMuLinkTianPanQiYiTianQinNo.add("入墓");
|
||||
}
|
||||
}
|
||||
map.put("jiXingRuMuLinkTianPanQiYiTianQinNo", jiXingRuMuLinkTianPanQiYiTianQinNo);
|
||||
}
|
||||
}
|
||||
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取门迫状态
|
||||
*
|
||||
* @param renPan 人盘
|
||||
* @return 门迫状态
|
||||
*/
|
||||
public static List<String> getMenPoStatus(List<String> renPan) {
|
||||
|
||||
Map<String, String> menPoMap = QiMenZhuanPanJiChuMap.MEN_PO; // 门迫(八门+宫位为键)
|
||||
|
||||
List<String> list = new ArrayList<>(); // 保存门迫状态(1~9宫)
|
||||
|
||||
// 1、计算每一个宫位的门迫
|
||||
for (int i = 0; i < 9; i++) {
|
||||
// 1.1、判断八门是否构成门迫
|
||||
String menPo = menPoMap.get(renPan.get(i) + (i + 1));
|
||||
if (null == menPo) {
|
||||
list.add("");
|
||||
} else {
|
||||
list.add("门迫");
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取十干克应
|
||||
*
|
||||
* @param diPan 地盘
|
||||
* @param tianPanQiYiTianQinYes 天盘旋转后九星所携带的奇仪,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @param tianPanQiYiTianQinNo 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 十干克应
|
||||
*/
|
||||
public static List<List<String>> getShiGanKeYing(List<String> diPan, List<String> tianPanQiYiTianQinYes, List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
Map<List<String>, List<String>> shiGanKeYingMap = QiMenZhuanPanJiChuMap.SHI_GAN_KE_YING; // 十干克应
|
||||
|
||||
// 计算九宫中的[天盘天干+地盘天干]对应的十干克应关系
|
||||
List<List<String>> list = new ArrayList<>();
|
||||
for (int i = 0; i < 9; i++) {
|
||||
List<String> tianQinYes = Arrays.asList(tianPanQiYiTianQinYes.get(i), diPan.get(i)); // 天盘旋转后九星所携带的奇仪,只包含[天禽星]携带的奇仪
|
||||
List<String> tianQinNo = Arrays.asList(tianPanQiYiTianQinNo.get(i), diPan.get(i)); // 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪
|
||||
if (i != 4) {
|
||||
List<String> keYingTianQinNoList = shiGanKeYingMap.get(tianQinNo); // 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪的十干克应关系
|
||||
String keYingTianQinNo = tianQinNo.get(0) + "+" + tianQinNo.get(1) + "(" + keYingTianQinNoList.get(0) + ")→" + keYingTianQinNoList.get(1);
|
||||
List<String> keYingTianQinYesList = shiGanKeYingMap.get(tianQinYes); // 天盘旋转后九星所携带的奇仪,只包含[天禽星]携带的奇仪的十干克应关系
|
||||
if (null != keYingTianQinYesList) {
|
||||
// 该宫位中存在两个天盘天干,追加十干克应数据
|
||||
String keYingTianQinYes = tianQinYes.get(0) + "+" + tianQinYes.get(1) + "(" + keYingTianQinYesList.get(0) + ")→" + keYingTianQinYesList.get(1);
|
||||
list.add(Arrays.asList(keYingTianQinYes, keYingTianQinNo));
|
||||
} else {
|
||||
list.add(Collections.singletonList(keYingTianQinNo));
|
||||
}
|
||||
} else {
|
||||
list.add(Collections.singletonList("")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取八门克应
|
||||
*
|
||||
* @param renPan 人盘
|
||||
* @param diPan 地盘
|
||||
* @param tianPanQiYiTianQinYes 天盘旋转后九星所携带的奇仪,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @param tianPanQiYiTianQinNo 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 八门克应
|
||||
*/
|
||||
public static List<List<String>> getBaMenKeYing(List<String> renPan, List<String> diPan, List<String> tianPanQiYiTianQinYes, List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
String[] baMenInitial = QiMenZhuanPanJiChuMap.BA_MEN_INITIAL;// 八门原始宫位(1~9宫)
|
||||
Map<List<String>, String> baMenKeYingMap = QiMenZhuanPanJiChuMap.BA_MEN_KE_YING; // 八门克应
|
||||
|
||||
List<String> menMen = new ArrayList<>(); // 保存[人盘八门+地盘八门]的生克制化关系
|
||||
List<String> menDiGan = new ArrayList<>(); // 保存[人盘八门+地盘天干]的生克制化关系
|
||||
List<String> menTianGanTianPanQiYiTianQinYes = new ArrayList<>(); // 保存[人盘八门+天盘天干]的生克制化关系(只包含[天禽星]携带的奇仪)
|
||||
List<String> menTianGanTianPanQiYiTianQinNo = new ArrayList<>(); // 保存[人盘八门+天盘天干]的生克制化关系(不包含[天禽星]携带的奇仪)
|
||||
for (int i = 0; i < 9; i++) {
|
||||
String newMen = renPan.get(i); // 人盘八门
|
||||
// 1、计算[人盘八门+地盘八门]的生克制化关系
|
||||
String oldMen = baMenInitial[i]; // 宫位中的原始八门
|
||||
List<String> menAndMen = Arrays.asList(newMen, oldMen); // 例如:开+休
|
||||
if (null != baMenKeYingMap.get(menAndMen)) {
|
||||
menMen.add(newMen + "+" + oldMen + "→" + baMenKeYingMap.get(menAndMen)); // 例如→ 开门+休门:主见贵人财喜及开张铺店,贸易大吉。
|
||||
} else {
|
||||
menMen.add("");
|
||||
}
|
||||
// 2、计算[人盘八门+地盘天干]的生克制化关系
|
||||
String diPanGan = diPan.get(i); // 地盘天干
|
||||
List<String> menAndDiGan = Arrays.asList(newMen, diPanGan); // 例如:开门+乙
|
||||
if (null != baMenKeYingMap.get(menAndDiGan)) {
|
||||
menDiGan.add(newMen + "+" + diPanGan + "→" + baMenKeYingMap.get(menAndDiGan)); // 例如→ 开门+乙:小财可求。
|
||||
} else {
|
||||
menDiGan.add("");
|
||||
}
|
||||
// 3、计算[人盘八门+天盘天干]的生克制化关系
|
||||
String tianGanTianPanQiYiTianQinYes = tianPanQiYiTianQinYes.get(i); // 只包含[天禽星]携带的天干
|
||||
String tianGanTianPanQiYiTianQinNo = tianPanQiYiTianQinNo.get(i); // 不包含[天禽星]携带的天干
|
||||
List<String> menAndTianGanTianPanQiYiTianQinYes = Arrays.asList(newMen, tianGanTianPanQiYiTianQinYes); // 例如:开门+乙
|
||||
List<String> menAndTianGanExTTq = Arrays.asList(newMen, tianGanTianPanQiYiTianQinNo); // 例如:开门+乙
|
||||
if (null != baMenKeYingMap.get(menAndTianGanTianPanQiYiTianQinYes)) {
|
||||
menTianGanTianPanQiYiTianQinYes.add(newMen + "+" + tianGanTianPanQiYiTianQinYes + "→" + baMenKeYingMap.get(menAndTianGanTianPanQiYiTianQinYes)); // 例如→ 开门+乙:小财可求。
|
||||
} else {
|
||||
menTianGanTianPanQiYiTianQinYes.add("");
|
||||
}
|
||||
if (null != baMenKeYingMap.get(menAndTianGanExTTq)) {
|
||||
menTianGanTianPanQiYiTianQinNo.add(newMen + "+" + tianGanTianPanQiYiTianQinNo + "→" + baMenKeYingMap.get(menAndTianGanExTTq)); // 例如→ 开门+乙:小财可求。
|
||||
} else {
|
||||
menTianGanTianPanQiYiTianQinNo.add("");
|
||||
}
|
||||
}
|
||||
|
||||
// 4、整合[人盘八门+地盘八门]、[人盘八门+地盘天干]、[人盘八门+天盘天干]的生克制化关系
|
||||
List<List<String>> list = new ArrayList<>();
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
if (null != menTianGanTianPanQiYiTianQinYes.get(i)) {
|
||||
list.add(Arrays.asList(menMen.get(i), menDiGan.get(i), menTianGanTianPanQiYiTianQinYes.get(i), menTianGanTianPanQiYiTianQinNo.get(i)));
|
||||
} else {
|
||||
list.add(Arrays.asList(menMen.get(i), menDiGan.get(i), menTianGanTianPanQiYiTianQinNo.get(i)));
|
||||
}
|
||||
} else {
|
||||
list.add(Collections.singletonList("")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
// 5、去除空数据、重复数据
|
||||
List<List<String>> newList = new ArrayList<>();
|
||||
for (List<String> value : list) {
|
||||
List<String> newListOne = new ArrayList<>();
|
||||
for (String item : value) {
|
||||
if (!"".equals(item)) newListOne.add(item);
|
||||
}
|
||||
newList.add(CommonUtil.removeDuplicatesList(newListOne));
|
||||
}
|
||||
|
||||
// 6、返回数据
|
||||
return newList;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取八门静应\动应
|
||||
*
|
||||
* @param menDongOrJing 八门静应\八门动应
|
||||
* @param renPan 人盘
|
||||
* @return 八门静应\八门动应
|
||||
*/
|
||||
public static List<List<String>> getMenDongJingYing(Map<List<String>, String> menDongOrJing, List<String> renPan) {
|
||||
|
||||
String[] baMenInitial = QiMenZhuanPanJiChuMap.BA_MEN_INITIAL; // 八门初始位置
|
||||
|
||||
List<List<String>> list = new ArrayList<>(); // 存放[门+门]信息
|
||||
for (int i = 0; i < renPan.size(); i++) {
|
||||
if (i != 4) {
|
||||
String oldMen = renPan.get(i); // 人盘八门
|
||||
String newMen = baMenInitial[i]; // 原宫八门
|
||||
List<String> men = Arrays.asList(oldMen, newMen);
|
||||
if (null != menDongOrJing.get(men)) {
|
||||
list.add(Collections.singletonList(oldMen + "+" + newMen + "→" + menDongOrJing.get(men)));
|
||||
} else {
|
||||
list.add(Collections.singletonList(""));
|
||||
}
|
||||
} else {
|
||||
list.add(Collections.singletonList("")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取星门克应
|
||||
*
|
||||
* @param tianPan 天盘
|
||||
* @param renPan 人盘
|
||||
* @return 星门克应
|
||||
*/
|
||||
public static List<List<String>> getXingMenKeYing(List<String> tianPan, List<String> renPan) {
|
||||
|
||||
Map<List<String>, String> xingMenKeYingMap = QiMenZhuanPanJiChuMap.XING_MEN_KE_YING; // 星门克应
|
||||
|
||||
List<String> listOne = new ArrayList<>(); // 存放单宫的[九星+八门]对应信息
|
||||
List<List<String>> listAll = new ArrayList<>(); // 存放九宫的[九星+八门]对应信息
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
String xing = tianPan.get(i).substring(0, 1); // 天 或 芮
|
||||
if ("天".equals(xing)) {
|
||||
// 1.1、宫位中不包含'天禽星'
|
||||
List<String> xingMen = Arrays.asList(tianPan.get(i), renPan.get(i));
|
||||
listAll.add(Collections.singletonList(tianPan.get(i) + "星+" + renPan.get(i) + "→" + xingMenKeYingMap.get(xingMen)));
|
||||
} else {
|
||||
// 1.2、宫位中包含'天芮星'和'天禽星'
|
||||
List<String> xingMen = Arrays.asList("天芮", renPan.get(i));
|
||||
listOne.add("天芮星+" + renPan.get(i) + "→" + xingMenKeYingMap.get(xingMen));
|
||||
listOne.add("天禽星+" + renPan.get(i) + "→" + xingMenKeYingMap.get(xingMen));
|
||||
listAll.add(listOne);
|
||||
}
|
||||
} else {
|
||||
listAll.add(Collections.singletonList("")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
// 2、返回数据
|
||||
return listAll;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取九星时应
|
||||
*
|
||||
* @param hourZhi 时支
|
||||
* @param tianPan 天盘
|
||||
* @return 九星时应
|
||||
*/
|
||||
public static List<List<String>> getJiuXingShiYing(String hourZhi, List<String> tianPan) {
|
||||
|
||||
Map<List<String>, String> jiuXingShiYingMap = QiMenZhuanPanJiChuMap.JIU_XING_SHI_YING; // 九星时应
|
||||
|
||||
List<String> listOne = new ArrayList<>(); // 存放单宫的[九星+时辰]对应信息
|
||||
List<List<String>> listAll = new ArrayList<>(); // 存放九宫的[九星+时辰]对应信息
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
String xing = tianPan.get(i).substring(0, 1); // 天 或 芮
|
||||
if ("天".equals(xing)) {
|
||||
// 1.1、宫位中不包含'天禽星'
|
||||
List<String> xingMen = Arrays.asList(tianPan.get(i), hourZhi);
|
||||
listAll.add(Collections.singletonList(tianPan.get(i) + "星值" + hourZhi + "时→" + jiuXingShiYingMap.get(xingMen)));
|
||||
} else {
|
||||
// 1.2、宫位中包含'天芮星'和'天禽星'
|
||||
List<String> tianRui = Arrays.asList("天芮", hourZhi);
|
||||
List<String> tianQin = Arrays.asList("天禽", hourZhi);
|
||||
listOne.add("天芮星值" + hourZhi + "时→" + jiuXingShiYingMap.get(tianRui));
|
||||
listOne.add("天禽星值" + hourZhi + "时→" + jiuXingShiYingMap.get(tianQin));
|
||||
listAll.add(listOne);
|
||||
}
|
||||
} else {
|
||||
listAll.add(Collections.singletonList("")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return listAll;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取八卦旺衰(根据季节计算)
|
||||
*
|
||||
* @param jiJie 季节
|
||||
* @return 八卦旺衰
|
||||
*/
|
||||
public static List<List<String>> getBaGuaWangShuai(String jiJie) {
|
||||
|
||||
String[] houTianBaGua = QiMenZhuanPanJiChuMap.HOU_TIAN_BA_GUA; // 八卦(后天八卦1~9宫)
|
||||
Map<String, Integer> siJiIndexMap = QiMenZhuanPanJiChuMap.SI_JI_INDEX; // 四季索引
|
||||
Map<String, List<String>> baGuaWangShuaiMap = QiMenZhuanPanJiChuMap.BA_GUA_WANG_SHUAI_JI_JIE; // 八卦旺衰(根据季节计算)
|
||||
|
||||
List<List<String>> list = new ArrayList<>(); // 保存八卦旺衰
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
List<String> gongWeiList = baGuaWangShuaiMap.get(houTianBaGua[i]); // 每一宫位
|
||||
String wangShuai = gongWeiList.get(siJiIndexMap.get(jiJie)); // 每一宫位的八卦旺衰
|
||||
list.add(Arrays.asList(houTianBaGua[i] + "宫", wangShuai));
|
||||
} else {
|
||||
list.add(Arrays.asList("中宫", "")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取八门旺衰(根据季节计算)
|
||||
*
|
||||
* @param renPan 人盘
|
||||
* @param jiJie 季节
|
||||
* @return 八门旺衰
|
||||
*/
|
||||
public static List<List<String>> getBaMenWangShuai(List<String> renPan, String jiJie) {
|
||||
|
||||
Map<String, Integer> siJiIndexMap = QiMenZhuanPanJiChuMap.SI_JI_INDEX; // 四季索引
|
||||
Map<String, List<String>> baMenWangShuaiMap = QiMenZhuanPanJiChuMap.BA_MEN_WANG_SHUAI_JI_JIE; // 八门旺衰(根据季节计算)
|
||||
|
||||
List<List<String>> list = new ArrayList<>(); // 保存八门旺衰
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
String men = renPan.get(i); // 每一宫位中的门
|
||||
List<String> gongWeiList = baMenWangShuaiMap.get(men); // 每一宫位
|
||||
list.add(Arrays.asList(men, gongWeiList.get(siJiIndexMap.get(jiJie))));
|
||||
} else {
|
||||
list.add(Arrays.asList("中宫", "")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取九星旺衰(根据月支计算)
|
||||
*
|
||||
* @param tianPan 天盘
|
||||
* @param monthZhi 月支
|
||||
* @return 九星旺衰
|
||||
*/
|
||||
public static List<List<String>> getJiuXingWangShuai(List<String> tianPan, String monthZhi) {
|
||||
|
||||
Map<String, Integer> diZhiIndexMap = QiMenZhuanPanJiChuMap.DI_ZHI_INDEX; // 十二地支索引
|
||||
Map<String, List<String>> jiuXingWangShuaiMap = QiMenZhuanPanJiChuMap.JIU_XING_WANG_SHUAI_MONTH_ZHI; // 九星旺衰(根据月支计算)
|
||||
|
||||
List<List<String>> list = new ArrayList<>(); // 保存九星旺衰
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
String xing = tianPan.get(i); // 每一宫位中的星
|
||||
if (xing.equals("芮禽")) {
|
||||
List<String> gongWeiList = jiuXingWangShuaiMap.get("天芮"); // 每一宫位
|
||||
String wangShuai = gongWeiList.get(diZhiIndexMap.get(monthZhi)); // 每一宫位的九星旺衰
|
||||
list.add(Arrays.asList("芮禽", wangShuai + wangShuai));
|
||||
} else {
|
||||
List<String> gongWeiList = jiuXingWangShuaiMap.get(xing); // 每一宫位
|
||||
String wangShuai = gongWeiList.get(diZhiIndexMap.get(monthZhi)); // 每一宫位的九星旺衰
|
||||
list.add(Arrays.asList(xing, wangShuai));
|
||||
}
|
||||
} else {
|
||||
list.add(Arrays.asList("中宫", "")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取八神落宫状态
|
||||
*
|
||||
* @param shenPan 神盘
|
||||
* @return 八神落宫状态
|
||||
*/
|
||||
public static List<List<String>> getBaShenLuoGongStatus(List<String> shenPan) {
|
||||
|
||||
Map<String, String> baShenJiXiongMap = QiMenZhuanPanJiChuMap.BA_SHEN_JI_XIONG; // 八神吉凶
|
||||
|
||||
List<List<String>> list = new ArrayList<>(); // 保存八神落宫状态
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
String shen = shenPan.get(i); // 每一宫位中的神
|
||||
String gongWeiList = baShenJiXiongMap.get(shen); // 每一宫位的八神落宫状态
|
||||
list.add(Arrays.asList(shen, gongWeiList));
|
||||
} else {
|
||||
list.add(Arrays.asList("中宫", "")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
// 2、返回数据
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取八门落宫状态
|
||||
*
|
||||
* @param renPan 人盘
|
||||
* @return 八门落宫状态
|
||||
*/
|
||||
public static List<List<String>> getBaMenLuoGongStatus(List<String> renPan) {
|
||||
|
||||
Map<String, List<String>> baMenLuoGongStatusMap = QiMenZhuanPanJiChuMap.BA_MEN_LUO_GONG_STATUS; // 八门落宫状态
|
||||
|
||||
List<List<String>> list = new ArrayList<>(); // 保存八门落宫状态
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
String men = renPan.get(i); // 每一宫位中的门
|
||||
List<String> gongWeiList = baMenLuoGongStatusMap.get(men); // 每一宫位
|
||||
String wangShuai = gongWeiList.get(i); // 每一宫位的八门落宫状态
|
||||
list.add(Arrays.asList(men, wangShuai));
|
||||
} else {
|
||||
list.add(Arrays.asList("中宫", "")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取九星落宫状态
|
||||
*
|
||||
* @param tianPan 天盘
|
||||
* @return 九星落宫状态
|
||||
*/
|
||||
public static List<List<String>> getJiuXingLuoGongStatus(List<String> tianPan) {
|
||||
|
||||
Map<String, List<String>> jiuXingLuoGongStatusMap = QiMenZhuanPanJiChuMap.JIU_XING_LUO_GONG_STATUS; // 九星落宫状态
|
||||
|
||||
List<List<String>> list = new ArrayList<>(); // 保存九星落宫状态
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
String xing = tianPan.get(i); // 每一宫位中的星
|
||||
if (xing.equals("芮禽")) {
|
||||
List<String> gongWeiList = jiuXingLuoGongStatusMap.get("天芮"); // 每一宫位
|
||||
String wangShuai = gongWeiList.get(i); // 每一宫位的九星落宫状态
|
||||
list.add(Arrays.asList("芮禽", wangShuai + wangShuai));
|
||||
} else {
|
||||
List<String> gongWeiList = jiuXingLuoGongStatusMap.get(xing); // 每一宫位
|
||||
String wangShuai = gongWeiList.get(i); // 每一宫位的九星落宫状态
|
||||
list.add(Arrays.asList(xing, wangShuai));
|
||||
}
|
||||
} else {
|
||||
list.add(Arrays.asList("中宫", "")); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地盘奇仪与落宫地支的关系(1~9宫)
|
||||
*
|
||||
* @param diPan 地盘(1~9宫)
|
||||
* @return 地盘奇仪与落宫地支的关系(1~9宫)
|
||||
*/
|
||||
public static List<List<List<String>>> getDiPanQiYiLuoGongLink(List<String> diPan) {
|
||||
|
||||
Map<List<String>, String> qiYiLuoGongStatusMap = QiMenZhuanPanJiChuMap.QI_YI_LUO_GONG_STATUS; // 奇仪落宫状态
|
||||
Map<Integer, List<String>> jiuGongDiZhiMap = QiMenZhuanPanJiChuMap.JIU_GONG_DI_ZHI; // 九宫中的地支(1~9宫)
|
||||
|
||||
List<List<List<String>>> list = new ArrayList<>(); // 保存地盘奇仪与落宫地支的关系
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
List<String> oneList = new ArrayList<>();
|
||||
List<List<String>> oneList2 = new ArrayList<>();
|
||||
String diPanQiYi = diPan.get(i); // 每一宫位的地盘奇仪
|
||||
List<String> diZhiList = jiuGongDiZhiMap.get(i); // 每一宫位中包含的地支
|
||||
for (String key : diZhiList) {
|
||||
List<String> qiYiDiZhi = Arrays.asList(diPanQiYi, key); // 每一宫位中的地盘奇仪+地支
|
||||
String status = qiYiLuoGongStatusMap.get(qiYiDiZhi);
|
||||
oneList.add(key);
|
||||
oneList.add(status);
|
||||
oneList2.add(oneList);
|
||||
oneList = new ArrayList<>();
|
||||
}
|
||||
list.add(oneList2);
|
||||
} else {
|
||||
list.add(Arrays.asList(Arrays.asList("", ""), Arrays.asList("", ""))); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取天盘奇仪与落宫地支的关系,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
*
|
||||
* @param tianPanQiYiTianQinYes 天盘旋转后九星所携带的奇仪,只包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 天盘奇仪与落宫地支的关系(1~9宫)
|
||||
*/
|
||||
public static List<List<List<String>>> getTianPanQiYiLuoGongTianQinYesLink(List<String> tianPanQiYiTianQinYes) {
|
||||
|
||||
Map<List<String>, String> qiYiLuoGongStatusMap = QiMenZhuanPanJiChuMap.QI_YI_LUO_GONG_STATUS; // 奇仪落宫状态
|
||||
Map<Integer, List<String>> jiuGongDiZhiMap = QiMenZhuanPanJiChuMap.JIU_GONG_DI_ZHI; // 九宫中的地支(后天八卦1~9宫)
|
||||
|
||||
// 1、计算天盘奇仪与落宫地支的关系
|
||||
List<List<List<String>>> tianPanQiYiTianQinYesMap = new ArrayList<>(); // 保存天盘奇仪与落宫地支的关系(只包含[天禽星]携带的奇仪)
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
List<String> oneListTianPanQiYiTianQinYes = new ArrayList<>();
|
||||
List<List<String>> oneList2tianPanQiYiTianQinYes = new ArrayList<>();
|
||||
String tianPanQiYiTianPanQiYiTianQinYes = tianPanQiYiTianQinYes.get(i); // 每一宫位天盘奇仪(只包含[天禽星]携带的奇仪)
|
||||
List<String> diZhiList = jiuGongDiZhiMap.get(i); // 每一宫位中包含的地支
|
||||
String statusTianPanQiYiTianQinYes = null;
|
||||
for (String key : diZhiList) {
|
||||
List<String> qiYiDiZhiTianPanQiYiTianQinYes = Arrays.asList(tianPanQiYiTianPanQiYiTianQinYes, key); // 每一宫位中的天盘奇仪+地支(只包含[天禽星]携带的奇仪)
|
||||
statusTianPanQiYiTianQinYes = qiYiLuoGongStatusMap.get(qiYiDiZhiTianPanQiYiTianQinYes);
|
||||
oneListTianPanQiYiTianQinYes.add(key);
|
||||
oneListTianPanQiYiTianQinYes.add(statusTianPanQiYiTianQinYes);
|
||||
oneList2tianPanQiYiTianQinYes.add(oneListTianPanQiYiTianQinYes);
|
||||
oneListTianPanQiYiTianQinYes = new ArrayList<>();
|
||||
}
|
||||
if (null == statusTianPanQiYiTianQinYes) {
|
||||
tianPanQiYiTianQinYesMap.add( Arrays.asList(Arrays.asList("", ""), Arrays.asList("", "")));
|
||||
} else {
|
||||
tianPanQiYiTianQinYesMap.add(oneList2tianPanQiYiTianQinYes);
|
||||
}
|
||||
} else {
|
||||
tianPanQiYiTianQinYesMap.add(Arrays.asList(Arrays.asList("", ""), Arrays.asList("", ""))); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
// 3、返回数据
|
||||
return tianPanQiYiTianQinYesMap;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取天盘奇仪与落宫地支的关系,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
*
|
||||
* @param tianPanQiYiTianQinNo 天盘旋转后九星所携带的奇仪,不包含[天禽星]携带的奇仪(1~9宫)
|
||||
* @return 天盘奇仪与落宫地支的关系(1~9宫)
|
||||
*/
|
||||
public static List<List<List<String>>> getTianPanQiYiLuoGongTianQinNoLink(List<String> tianPanQiYiTianQinNo) {
|
||||
|
||||
Map<List<String>, String> qiYiLuoGongStatusMap = QiMenZhuanPanJiChuMap.QI_YI_LUO_GONG_STATUS; // 奇仪落宫状态
|
||||
Map<Integer, List<String>> jiuGongDiZhiMap = QiMenZhuanPanJiChuMap.JIU_GONG_DI_ZHI; // 九宫中的地支(后天八卦1~9宫)
|
||||
|
||||
// 1、计算天盘奇仪与落宫地支的关系
|
||||
List<List<List<String>>> tianPanQiYiTianQinNoMap = new ArrayList<>(); // 保存天盘奇仪与落宫地支的关系(不包含[天禽星]携带的奇仪)
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (i != 4) {
|
||||
List<String> oneListTianPanQiYiTianQinNo = new ArrayList<>();
|
||||
List<List<String>> oneList2tianPanQiYiTianQinNo = new ArrayList<>();
|
||||
String tianPanQiYiTianPanQiYiTianQinNo = tianPanQiYiTianQinNo.get(i); // 每一宫位天盘奇仪(不包含[天禽星]携带的奇仪)
|
||||
List<String> diZhiList = jiuGongDiZhiMap.get(i); // 每一宫位中包含的地支
|
||||
for (String key : diZhiList) {
|
||||
List<String> qiYiDiZhiTianPanQiYiTianQinNo = Arrays.asList(tianPanQiYiTianPanQiYiTianQinNo, key); // 每一宫位中的天盘奇仪+地支(不包含[天禽星]携带的奇仪)
|
||||
String statusTianPanQiYiTianQinNo = qiYiLuoGongStatusMap.get(qiYiDiZhiTianPanQiYiTianQinNo);
|
||||
oneListTianPanQiYiTianQinNo.add(key);
|
||||
oneListTianPanQiYiTianQinNo.add(statusTianPanQiYiTianQinNo);
|
||||
oneList2tianPanQiYiTianQinNo.add(oneListTianPanQiYiTianQinNo);
|
||||
oneListTianPanQiYiTianQinNo = new ArrayList<>();
|
||||
}
|
||||
tianPanQiYiTianQinNoMap.add(oneList2tianPanQiYiTianQinNo);
|
||||
} else {
|
||||
tianPanQiYiTianQinNoMap.add(Arrays.asList(Arrays.asList("", ""), Arrays.asList("", ""))); // 中五宫
|
||||
}
|
||||
}
|
||||
|
||||
// 3、返回数据
|
||||
return tianPanQiYiTianQinNoMap;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,210 @@
|
||||
package xuan.core.ziwei.settings;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import xuan.utils.DateUtil;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 紫微斗数 - 基础设置
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
@Data
|
||||
public class ZiWeiJiChuSetting {
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*/
|
||||
private String occupy;
|
||||
|
||||
/**
|
||||
* 性别(0:女。1:男)
|
||||
*/
|
||||
private int sex;
|
||||
|
||||
/**
|
||||
* 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
private String date;
|
||||
|
||||
/**
|
||||
* 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
private int dateType;
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
private int leapMonthType;
|
||||
|
||||
/**
|
||||
* 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
private int xuShiSuiType;
|
||||
|
||||
/**
|
||||
* 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
private int jieQiType;
|
||||
|
||||
/**
|
||||
* 五行局类型(0:按年干+命宫地支计算。1:按命宫天干+命宫地支计算)
|
||||
*/
|
||||
private int wuXingJuType;
|
||||
|
||||
/**
|
||||
* 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
private int yearGanZhiType;
|
||||
|
||||
/**
|
||||
* 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
private int monthGanZhiType;
|
||||
|
||||
/**
|
||||
* 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
*/
|
||||
private int dayGanZhiType;
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 初始化设置
|
||||
*/
|
||||
public ZiWeiJiChuSetting() {
|
||||
|
||||
this.name = ""; // 姓名(默认→ 空)
|
||||
this.occupy = ""; // 占事(默认→ 空)
|
||||
this.sex = 1; // 性别(默认→ 男)
|
||||
this.date = "2024-01-01 00:00:00"; // 日期(默认→ 2024-01-01 00:00:00)
|
||||
this.dateType = 0; // 日期类型(默认→ 公历)
|
||||
this.leapMonthType = 0; // 闰月类型,日期类型为1时生效(默认→ 不使用闰月)
|
||||
this.xuShiSuiType = 0; // 虚实岁类型(默认→ 虚岁)
|
||||
this.jieQiType = 1; // 节气类型(默认→ 按分钟计算)
|
||||
this.wuXingJuType = 0; // 五行局类型(默认→ 按年干+命宫地支计算)
|
||||
this.yearGanZhiType = 2; // 年干支类型(默认→ 以立春交接时刻作为新年的开始)
|
||||
this.monthGanZhiType = 1; // 月干支类型(默认→ 以节交接时刻起算)
|
||||
this.dayGanZhiType = 0; // 日干支类型(默认→ 晚子时日柱按当天)
|
||||
|
||||
}
|
||||
|
||||
//===============================================================================================================================
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*
|
||||
* @param name 姓名
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = StringUtils.isNotBlank(name) ? name : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 占事
|
||||
*
|
||||
* @param occupy 占事
|
||||
*/
|
||||
public void setOccupy(String occupy) {
|
||||
this.occupy = StringUtils.isNotBlank(occupy) ? occupy : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*
|
||||
* @param sex 性别(0:女。1:男)
|
||||
*/
|
||||
public void setSex(int sex) {
|
||||
this.sex = (sex == 0 || sex == 1) ? sex : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*
|
||||
* @param date 日期(类型:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = DateUtil.isValidDate(date) ? date : "2024-01-01 00:00:00";
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期类型
|
||||
*
|
||||
* @param dateType 日期类型(0:公历。1:农历)
|
||||
*/
|
||||
public void setDateType(int dateType) {
|
||||
this.dateType = (dateType == 0 || dateType == 1) ? dateType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 闰月类型,日期类型为1时生效
|
||||
*
|
||||
* @param leapMonthType 闰月类型,日期类型为1时生效(0:不使用闰月。1:使用闰月)
|
||||
*/
|
||||
public void setLeapMonthType(int leapMonthType) {
|
||||
this.leapMonthType = (leapMonthType == 0 || leapMonthType == 1) ? leapMonthType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 虚实岁类型
|
||||
*
|
||||
* @param xuShiSuiType 虚实岁类型(0:虚岁。1:实岁)
|
||||
*/
|
||||
public void setXuShiSuiType(int xuShiSuiType) {
|
||||
this.xuShiSuiType = (xuShiSuiType == 0 || xuShiSuiType == 1) ? xuShiSuiType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 节气类型
|
||||
*
|
||||
* @param jieQiType 节气类型(0:按天计算。1:按分钟计算)
|
||||
*/
|
||||
public void setJieQiType(int jieQiType) {
|
||||
this.jieQiType = (jieQiType == 0 || jieQiType == 1) ? jieQiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 五行局类型
|
||||
*
|
||||
* @param wuXingJuType 五行局类型(0:按年干+命宫地支计算。1:按命宫天干+命宫地支计算)
|
||||
*/
|
||||
public void setWuXingJuType(int wuXingJuType) {
|
||||
this.wuXingJuType = (wuXingJuType == 0 || wuXingJuType == 1) ? wuXingJuType : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 年干支类型
|
||||
*
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
*/
|
||||
public void setYearGanZhiType(int yearGanZhiType) {
|
||||
this.yearGanZhiType = (yearGanZhiType == 0 || yearGanZhiType == 1 || yearGanZhiType == 2) ? yearGanZhiType : 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 月干支类型
|
||||
*
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
*/
|
||||
public void setMonthGanZhiType(int monthGanZhiType) {
|
||||
this.monthGanZhiType = (monthGanZhiType == 0 || monthGanZhiType == 1) ? monthGanZhiType : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日干支类型
|
||||
*
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日干支按当天。1:晚子时日干支按明天)
|
||||
*/
|
||||
public void setDayGanZhiType(int dayGanZhiType) {
|
||||
this.dayGanZhiType = (dayGanZhiType == 0 || dayGanZhiType == 1) ? dayGanZhiType : 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package xuan.core.ziwei.utils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 紫微斗数 - 基础工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class ZiWeiJiChuUtil {
|
||||
|
||||
/**
|
||||
* 获取星位宫位
|
||||
*
|
||||
* @param zhuXing 诸星
|
||||
* @param xingMing 星名
|
||||
* @return 星位宫位
|
||||
*/
|
||||
public static int getXingWeiGongWei(List<String> zhuXing, String xingMing) {
|
||||
|
||||
int xingWeiGongWei = 0;
|
||||
|
||||
A:
|
||||
for (int i = 0; i < zhuXing.size(); i++) {
|
||||
if (!"".equals(zhuXing.get(i))) {
|
||||
String[] oneGongXing = zhuXing.get(i).split("_");
|
||||
if (oneGongXing.length == 1) {
|
||||
if (xingMing.equals(zhuXing.get(i))) {
|
||||
xingWeiGongWei = i + 1;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
for (String item : oneGongXing) {
|
||||
if (xingMing.equals(item)) {
|
||||
xingWeiGongWei = i + 1;
|
||||
break A;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return xingWeiGongWei;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加诸星
|
||||
*
|
||||
* @param zhuXing 诸星
|
||||
* @param oneList 每一个宫位中的诸星
|
||||
* @param index 索引(0 ~ 11)
|
||||
* @param mark 标识
|
||||
*/
|
||||
public static void addZhuXing(List<String> zhuXing, List<String> oneList, int index, String mark) {
|
||||
|
||||
if (!"".equals(zhuXing.get(index))) {
|
||||
String[] oneGongXing = zhuXing.get(index).split("_");
|
||||
if (oneGongXing.length == 1) {
|
||||
oneList.add(mark + zhuXing.get(index));
|
||||
} else {
|
||||
for (String item : oneGongXing) {
|
||||
oneList.add(mark + item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
package xuan.utils;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.validator.routines.InetAddressValidator;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.io.BufferedReader;
|
||||
import java.net.URLConnection;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* 百度地图定位工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class BaiduMapsUtil {
|
||||
|
||||
/* API地址:https://lbsyun.baidu.com/faq/api?title=webapi */
|
||||
|
||||
/**
|
||||
* 开发者密钥
|
||||
*/
|
||||
private static final String ak = ""; // 密钥申请地址:https://lbsyun.baidu.com/apiconsole/key#/home
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 通过地区获取经纬度
|
||||
*
|
||||
* @param address 地区
|
||||
* @return 经纬度
|
||||
*/
|
||||
public static Map<String, Double> getLngAndLat(String address) {
|
||||
|
||||
/* 接口文档地址:https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-geocoding-base */
|
||||
|
||||
// 1、参数校验
|
||||
if (StringUtils.isBlank(ak)) throw new NullPointerException("请填写百度开发者密钥");
|
||||
if (StringUtils.isBlank(address)) throw new NullPointerException("请填写地区");
|
||||
|
||||
// 2、发送URL请求
|
||||
String url = "https://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + ak;
|
||||
JSONObject data = sendUrl(url);
|
||||
|
||||
// 3、获取数据
|
||||
Map<String, Double> map = new HashMap<>();
|
||||
if (data.get("status").toString().equals("0")) {
|
||||
map.put("lng", data.getJSONObject("result").getJSONObject("location").getDouble("lng")); // 经度
|
||||
map.put("lat", data.getJSONObject("result").getJSONObject("location").getDouble("lat")); // 纬度
|
||||
} else {
|
||||
throw new NullPointerException("定位失败");
|
||||
}
|
||||
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过经纬度获取地区
|
||||
*
|
||||
* @param lng 经度
|
||||
* @param lat 纬度
|
||||
* @return 地区
|
||||
*/
|
||||
public static String getAddress(String lng, String lat) {
|
||||
|
||||
/* 接口文档地址:https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-geocoding-abroad-base */
|
||||
|
||||
// 1、参数校验
|
||||
if (StringUtils.isBlank(ak)) throw new NullPointerException("请填写百度开发者密钥");
|
||||
if (StringUtils.isBlank(lng) || StringUtils.isBlank(lat)) throw new NullPointerException("请填完善经纬度");
|
||||
|
||||
// 2、发送URL请求
|
||||
String url = "https://api.map.baidu.com/reverse_geocoding/v3/?location=" + lat + "," + lng + "&output=json&coordtype=wgs84ll&extensions_poi=1&extensions_town=true&ak=" + ak;
|
||||
JSONObject data = sendUrl(url);
|
||||
|
||||
// 3、获取数据
|
||||
String address;
|
||||
if (data.get("status").toString().equals("0")) {
|
||||
address = data.getJSONObject("result").getString("formatted_address"); // 标准的结构化地址
|
||||
} else {
|
||||
throw new NullPointerException("定位失败");
|
||||
}
|
||||
|
||||
return address;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过机器IP定位获取地区,不支持ipv6(若机器IP为空,则根据发送请求的机器IP定位)
|
||||
*
|
||||
* @param ip 机器IP(如:127.0.0.1)
|
||||
* @return 地区
|
||||
*/
|
||||
public static String getAddressToIp(String ip) {
|
||||
|
||||
/* 接口文档地址:https://lbsyun.baidu.com/faq/api?title=webapi/ip-api-base */
|
||||
|
||||
// 1、参数校验
|
||||
if (StringUtils.isBlank(ak)) throw new NullPointerException("请填写百度开发者密钥");
|
||||
if (StringUtils.isNotBlank(ip) && checkIp(ip)) {
|
||||
if ("localhost".equals(ip) || "127.0.0.1".equals(ip)) {
|
||||
ip = "";
|
||||
}
|
||||
} else {
|
||||
ip = "";
|
||||
}
|
||||
|
||||
// 2、发送URL请求
|
||||
String url = "https://api.map.baidu.com/location/ip?ip=" + ip + "&coor=bd09ll&&ak=" + ak;
|
||||
JSONObject data = sendUrl(url);
|
||||
|
||||
// 3、获取数据
|
||||
String address;
|
||||
if (data.get("status").toString().equals("0")) {
|
||||
address = data.getJSONObject("content").getString("address"); // 简要地址信息
|
||||
} else {
|
||||
throw new NullPointerException("定位失败");
|
||||
}
|
||||
|
||||
return address;
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* 机器IP校验
|
||||
*
|
||||
* @param ip 机器IP(ipv4)
|
||||
* @return true:格式正确。false:格式错误
|
||||
*/
|
||||
private static boolean checkIp(String ip) {
|
||||
|
||||
boolean isFlag = true;
|
||||
InetAddressValidator validator = InetAddressValidator.getInstance();
|
||||
if (!validator.isValidInet4Address(ip)) {
|
||||
isFlag = false;
|
||||
}
|
||||
return isFlag;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送URL请求
|
||||
*
|
||||
* @param url URL路径
|
||||
* @return 数据
|
||||
*/
|
||||
private static JSONObject sendUrl(String url) {
|
||||
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
|
||||
try {
|
||||
URL oracle = new URL(url);
|
||||
URLConnection uc = oracle.openConnection();
|
||||
InputStreamReader isr = new InputStreamReader(uc.getInputStream(), StandardCharsets.UTF_8);
|
||||
BufferedReader br = new BufferedReader(isr);
|
||||
String inputLine;
|
||||
while (null != (inputLine = br.readLine())) {
|
||||
stringBuilder.append(inputLine);
|
||||
}
|
||||
br.close();
|
||||
} catch (Exception e) {
|
||||
throw new NullPointerException(e.getMessage());
|
||||
}
|
||||
|
||||
return JSONObject.parseObject(stringBuilder.toString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,306 @@
|
||||
package xuan.utils;
|
||||
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.nlf.calendar.Lunar;
|
||||
import com.nlf.calendar.Solar;
|
||||
import org.apache.commons.validator.routines.InetAddressValidator;
|
||||
import org.omg.CORBA.SystemException;
|
||||
|
||||
/**
|
||||
* 通用工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class CommonUtil {
|
||||
|
||||
/**
|
||||
* 占位符1(-)
|
||||
*/
|
||||
public static final String EMPTY1 = "-";
|
||||
|
||||
/**
|
||||
* 占位符2(--)
|
||||
*/
|
||||
public static final String EMPTY2 = "--";
|
||||
|
||||
/**
|
||||
* 数字转换汉字
|
||||
*
|
||||
* @param number 数字
|
||||
* @return 汉字(例如:一)
|
||||
*/
|
||||
public static String shuToHan(long number) {
|
||||
|
||||
final String[] unit = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};
|
||||
final String[] lowercaseNumber = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
|
||||
|
||||
int count = 0;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
while (number > 0) {
|
||||
sb.insert(0, (lowercaseNumber[Math.toIntExact(number % 10)] + unit[count]));
|
||||
number = (number / 10);
|
||||
count++;
|
||||
}
|
||||
|
||||
return sb.toString().replaceAll("零[千百十]", "零").replaceAll("零+万", "万")
|
||||
.replaceAll("零+亿", "亿").replaceAll("亿万", "亿零")
|
||||
.replaceAll("零+", "零").replaceAll("零$", "");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取一个数的随机数
|
||||
*
|
||||
* @param range 范围(如→ 0:产生0,1:产生1~1中的随机一位数字,2:产生1~2中的随机一位数字,... )
|
||||
* @return List随机数集合
|
||||
*/
|
||||
public static Integer randomList(int range) {
|
||||
|
||||
int nextInt = new Random().nextInt(range);
|
||||
return nextInt == 0 ? 1 : nextInt;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 保留Double型数据的N位小数
|
||||
*
|
||||
* @param number double类型数据
|
||||
* @param count 保留小数的位数
|
||||
* @return double型数据
|
||||
*/
|
||||
public static Double getDouble(double number, int count) {
|
||||
|
||||
BigDecimal bigDec = new BigDecimal(number);
|
||||
return bigDec.setScale(count, BigDecimal.ROUND_FLOOR).doubleValue();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 将N个数据封装为List集合
|
||||
*
|
||||
* @param parameter 数据
|
||||
* @return List集合
|
||||
*/
|
||||
public static List<Integer> packageList(int... parameter) {
|
||||
|
||||
List<Integer> list = new ArrayList<>();
|
||||
for (int i : parameter) {
|
||||
if (i < 0) i = 0;
|
||||
if (i > 3) i = 3;
|
||||
list.add(i);
|
||||
}
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定个数的随机数
|
||||
*
|
||||
* @param count 数量
|
||||
* @param range 范围(如→ 0:产生0,1:产生0~1中的随机一位数字,2:产生0~2中的随机一位数字,... )
|
||||
* @return List随机数集合
|
||||
*/
|
||||
public static List<Integer> randomList(long count, int range) {
|
||||
|
||||
List<Integer> list = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
list.add(new Random().nextInt(range + 1));
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除list集合中的重复数据(包括NULL)
|
||||
*
|
||||
* @param list list集合
|
||||
* @return list数组
|
||||
*/
|
||||
public static List<String> removeDuplicatesList(List<String> list) {
|
||||
|
||||
list.removeIf(Objects::isNull);
|
||||
return new ArrayList<>(new LinkedHashSet<>(list));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 向List集合中添加指定个数的字符串
|
||||
*
|
||||
* @param count 元素数量
|
||||
* @return 空list集合
|
||||
*/
|
||||
public static List<String> addCharToList(int count, String text) {
|
||||
|
||||
List<String> list = new ArrayList<>();
|
||||
for (int i = 0; i <= count - 1; i++) {
|
||||
list.add(text);
|
||||
}
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取两个List数组中的不同元素
|
||||
*
|
||||
* @param list1 数组1
|
||||
* @param list2 数组2
|
||||
* @return 不同元素的数组
|
||||
*/
|
||||
public static List<String> getListUnlike(List<String> list1, List<String> list2) {
|
||||
|
||||
List<String> maxList = list1;
|
||||
List<String> minList = list2;
|
||||
if (list2.size() > list1.size()) {
|
||||
maxList = list2;
|
||||
minList = list1;
|
||||
}
|
||||
|
||||
Map<String, Integer> map = new HashMap<>(list1.size() + list2.size());
|
||||
for (String string : maxList) {
|
||||
map.put(string, 1);
|
||||
}
|
||||
for (String string : minList) {
|
||||
Integer count = map.get(string);
|
||||
if (null != count) {
|
||||
map.put(string, ++count);
|
||||
continue;
|
||||
}
|
||||
map.put(string, 1);
|
||||
}
|
||||
|
||||
List<String> unlike = new ArrayList<>();
|
||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||||
if (entry.getValue() == 1) {
|
||||
unlike.add(entry.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
return unlike;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取日期及四柱干支
|
||||
*
|
||||
* @param date 日期(格式:yyyy-MM-dd HH:mm:ss)
|
||||
* @param dateType 日期类型(0:公历。1:农历)
|
||||
* @param leapMonthType 闰月类型(0:不使用闰月。1:使用闰月)
|
||||
* @param yearGanZhiType 年干支类型(0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接时刻作为新年的开始)
|
||||
* @param monthGanZhiType 月干支类型(0:以节交接当天起算。1:以节交接时刻起算)
|
||||
* @param dayGanZhiType 日干支类型(0:晚子时日柱按明天。1:晚子时日柱按当天)
|
||||
* @return 日期及四柱干支
|
||||
*/
|
||||
public static Map<String, Object> getDateAndGanZhi(String date, int dateType, int leapMonthType, int yearGanZhiType, int monthGanZhiType, int dayGanZhiType) {
|
||||
|
||||
Solar solar; // 公历日期(Solar型)
|
||||
Lunar lunar; // 农历日期(Lunar型)
|
||||
String solarStr; // 公历日期(String型)
|
||||
String lunarStr; // 农历日期(String型)
|
||||
String solarStr2; // 公历日期(String型)
|
||||
String lunarStr2; // 农历日期(String型)
|
||||
Date solarDate; // 公历日期(Date型)
|
||||
Date lunarDate; // 农历日期(Date型)
|
||||
|
||||
// 1、获取年、月、日、时、分、秒
|
||||
Map<String, Integer> dateInfo = DateUtil.getDateInfo(date);
|
||||
int year = dateInfo.get("year"); // 年
|
||||
int month = dateInfo.get("month"); // 月
|
||||
int day = dateInfo.get("day"); // 日
|
||||
int hour = dateInfo.get("hour"); // 时
|
||||
int minute = dateInfo.get("minute"); // 分
|
||||
int second = dateInfo.get("second"); // 秒
|
||||
|
||||
// 2、判断日期类型
|
||||
if (dateType == 0) {
|
||||
// 2.1、按公历日期计算
|
||||
solar = new Solar(year, month, day, hour, minute, second); // 公历日期(Solar型)
|
||||
lunar = solar.getLunar(); // 农历日期(Lunar型)
|
||||
solarStr = DateUtil.getSolarStr(solar); // 公历日期(String型)
|
||||
lunarStr = DateUtil.getLunarStr(lunar); // 农历日期(String型)
|
||||
solarStr2 = DateUtil.getSolarStr2(solar); // 公历日期(String型)
|
||||
lunarStr2 = DateUtil.getLunarStr2(lunar); // 农历日期(String型)
|
||||
solarDate = DateUtil.stringToDate(solarStr); // 公历日期(Date型)
|
||||
lunarDate = DateUtil.stringToDate(lunarStr); // 农历日期(Date型)
|
||||
} else {
|
||||
// 2.2、按农历日期计算
|
||||
try {
|
||||
lunar = new Lunar(year, (leapMonthType == 0 ? month : -month), day, hour, minute, second); // 农历日期(Lunar型)
|
||||
solar = lunar.getSolar(); // 公历日期(Solar型)
|
||||
solarStr = DateUtil.getSolarStr(solar); // 公历日期(String型)
|
||||
lunarStr = DateUtil.getLunarStr(lunar); // 农历日期(String型)
|
||||
solarStr2 = DateUtil.getSolarStr2(solar); // 公历日期(String型)
|
||||
lunarStr2 = DateUtil.getLunarStr2(lunar); // 农历日期(String型)
|
||||
solarDate = DateUtil.stringToDate(solarStr); // 公历日期(Date型)
|
||||
lunarDate = DateUtil.stringToDate(lunarStr); // 农历日期(Date型)
|
||||
} catch (IllegalArgumentException e) {
|
||||
// lunar = new Lunar(); // 农历日期(Lunar型)
|
||||
// solar = lunar.getSolar(); // 公历日期(Solar型)
|
||||
// solarStr = DateUtil.getSolarStr(solar); // 公历日期(String型)
|
||||
// lunarStr = DateUtil.getLunarStr(lunar); // 农历日期(String型)
|
||||
// solarStr2 = DateUtil.getSolarStr2(solar); // 公历日期(String型)
|
||||
// lunarStr2 = DateUtil.getLunarStr2(lunar); // 农历日期(String型)
|
||||
// solarDate = DateUtil.stringToDate(solarStr); // 公历日期(Date型)
|
||||
// lunarDate = DateUtil.stringToDate(lunarStr); // 农历日期(Date型)
|
||||
throw new IllegalArgumentException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 3、判断年干支类型
|
||||
String yearGanZhi; // 年干支
|
||||
if (yearGanZhiType == 0) {
|
||||
yearGanZhi = lunar.getYearInGanZhi(); // 以正月初一作为新年的开始
|
||||
} else if (yearGanZhiType == 1) {
|
||||
yearGanZhi = lunar.getYearInGanZhiByLiChun(); // 以立春当天作为新年的开始
|
||||
} else if (yearGanZhiType == 2) {
|
||||
yearGanZhi = lunar.getYearInGanZhiExact(); // 以立春交接的时刻作为新年的开始
|
||||
} else {
|
||||
yearGanZhi = lunar.getYearInGanZhi(); // 以正月初一作为新年的开始
|
||||
}
|
||||
|
||||
// 4、判断月干支类型
|
||||
String monthGanZhi; // 月干支
|
||||
if (monthGanZhiType == 0) {
|
||||
monthGanZhi = lunar.getMonthInGanZhi(); // 以节交接当天起算
|
||||
} else if (monthGanZhiType == 1) {
|
||||
monthGanZhi = lunar.getMonthInGanZhiExact(); // 以节交接时刻起算
|
||||
} else {
|
||||
monthGanZhi = lunar.getMonthInGanZhi(); // 以节交接当天起算
|
||||
}
|
||||
|
||||
// 5、判断日干支类型
|
||||
String dayGanZhi; // 日干支
|
||||
if (dayGanZhiType == 0) {
|
||||
dayGanZhi = lunar.getDayInGanZhiExact(); // 晚子时日干支算明天
|
||||
} else if (dayGanZhiType == 1) {
|
||||
dayGanZhi = lunar.getDayInGanZhiExact2(); // 晚子时日干支算当天
|
||||
} else {
|
||||
dayGanZhi = lunar.getDayInGanZhiExact(); // 晚子时日干支算明天
|
||||
}
|
||||
|
||||
// 6、早子时和晚子时
|
||||
String hourGanZhi = lunar.getTimeInGanZhi(); // 时干支
|
||||
|
||||
// 7、封装数据并返回
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("solar", solar); // 公历日期(Solar型,如:2024-01-01)
|
||||
map.put("lunar", lunar); // 农历日期(Lunar型,如:二〇二三年冬月二十)
|
||||
map.put("solarStr", solarStr); // 公历日期(String型,如:2024-01-01 00:00:00)
|
||||
map.put("lunarStr", lunarStr); // 农历日期(String型,如:2023-11-20 00:00:00)
|
||||
map.put("solarStr2", solarStr2); // 公历日期(String型,如:2024年01月01日00时00分00秒)
|
||||
map.put("lunarStr2", lunarStr2); // 农历日期(String型,如:二〇二三年冬月二十(早)子时)
|
||||
map.put("solarDate", solarDate); // 公历日期(Date型,如:Mon Jan 01 00:00:00 CST 2024)
|
||||
map.put("lunarDate", lunarDate); // 农历日期(Date型,如:Mon Nov 20 00:00:00 CST 2023)
|
||||
map.put("yearGanZhi", yearGanZhi); // 年干支
|
||||
map.put("monthGanZhi", monthGanZhi); // 月干支
|
||||
map.put("dayGanZhi", dayGanZhi); // 日干支
|
||||
map.put("hourGanZhi", hourGanZhi); // 时干支
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,337 @@
|
||||
package xuan.utils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.nlf.calendar.Lunar;
|
||||
import com.nlf.calendar.Solar;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
/**
|
||||
* 日期工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class DateUtil {
|
||||
|
||||
/**
|
||||
* 日期格式(格式:yyyy年MM月dd日HH时mm分ss秒)
|
||||
*/
|
||||
public static final String DATE_TIME_FORMAT = "yyyy年MM月dd日HH时mm分ss秒";
|
||||
|
||||
/**
|
||||
* 日期格式(格式:yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
public static final String DATE_TIME_FORMAT_2 = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 格式化Solar公历日期
|
||||
*
|
||||
* @param solar 公历日期(格式:Solar)
|
||||
* @return 公历日期(如:2024-01-01 00:00:00)
|
||||
*/
|
||||
public static String getSolarStr(Solar solar) {
|
||||
|
||||
return solar.toYmdHms();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化Solar公历日期
|
||||
*
|
||||
* @param solar 公历日期(格式:Solar)
|
||||
* @return 公历日期(如:2024年01月01日00时00分00秒)
|
||||
*/
|
||||
public static String getSolarStr2(Solar solar) {
|
||||
|
||||
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(DATE_TIME_FORMAT_2);
|
||||
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(DATE_TIME_FORMAT);
|
||||
LocalDateTime dateTime = LocalDateTime.parse(solar.toYmdHms(), inputFormatter);
|
||||
return dateTime.format(outputFormatter);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化Lunar农历日期
|
||||
*
|
||||
* @param lunar 农历日期(格式:Lunar)
|
||||
* @return 农历日期(如:2023-10-18 00:00:00)
|
||||
*/
|
||||
public static String getLunarStr(Lunar lunar) {
|
||||
|
||||
String yearStr = String.valueOf(lunar.getYear()); // 年
|
||||
String monthStr = String.valueOf(lunar.getMonth() > 0 ? lunar.getMonth() : -lunar.getMonth()); // 月(因为闰月为负数,需要转为正数)
|
||||
String dayStr = String.valueOf(lunar.getDay()); // 日
|
||||
String hourStr = String.valueOf(lunar.getHour()); // 时
|
||||
String minuteStr = String.valueOf(lunar.getMinute()); // 分
|
||||
String secondStr = String.valueOf(lunar.getSecond()); // 秒
|
||||
|
||||
String year = yearStr; // 年
|
||||
String month = monthStr.length() < 2 ? ("0" + monthStr) : monthStr; // 月
|
||||
String day = dayStr.length() < 2 ? ("0" + dayStr) : dayStr; // 日
|
||||
String hour = hourStr.length() < 2 ? ("0" + hourStr) : hourStr; // 时
|
||||
String minute = minuteStr.length() < 2 ? ("0" + minuteStr) : minuteStr; // 分
|
||||
String second = secondStr.length() < 2 ? ("0" + secondStr) : secondStr; // 秒
|
||||
|
||||
return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化Lunar农历日期
|
||||
*
|
||||
* @param lunar 农历日期(格式:Lunar)
|
||||
* @return 农历日期(如:二〇二三年十月十八(早)子时)
|
||||
*/
|
||||
public static String getLunarStr2(Lunar lunar) {
|
||||
|
||||
String lunarStr;
|
||||
|
||||
// 判断时辰
|
||||
int hour = lunar.getHour();
|
||||
if (hour >= 23 || hour < 1) {
|
||||
// 判断早晚子时
|
||||
if (hour >= 23) {
|
||||
lunarStr = lunar + "(晚)子时";
|
||||
} else {
|
||||
lunarStr = lunar + "(早)子时";
|
||||
}
|
||||
} else {
|
||||
final String[] HOUR_ZHI = {"子", "丑", "丑", "寅", "寅", "卯", "卯", "辰", "辰", "巳", "巳", "午", "午", "未", "未", "申", "申", "酉", "酉", "戌", "戌", "亥", "亥", "子"};
|
||||
lunarStr = lunar + HOUR_ZHI[hour] + "时";
|
||||
}
|
||||
|
||||
return lunarStr;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取Date型日期
|
||||
*
|
||||
* @param dateStr String型日期
|
||||
* @return Date型日期
|
||||
*/
|
||||
public static Date stringToDate(String dateStr) {
|
||||
|
||||
Date date = new Date();
|
||||
SimpleDateFormat df = new SimpleDateFormat(DateUtil.DATE_TIME_FORMAT_2);
|
||||
// df.setTimeZone(TimeZone.getTimeZone("GMT+8"));
|
||||
try {
|
||||
date = df.parse(dateStr);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return date;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取日期的[年月日时分秒]
|
||||
*
|
||||
* @param date 日期
|
||||
* @return 年月日时分秒
|
||||
*/
|
||||
public static Map<String, Integer> getDateMap(Date date) {
|
||||
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
|
||||
Map<String, Integer> map = new HashMap<>();
|
||||
map.put("year", c.get(Calendar.YEAR)); // 年
|
||||
map.put("month", c.get(Calendar.MONTH) + 1); // 月
|
||||
map.put("day", c.get(Calendar.DATE)); // 日
|
||||
map.put("hour", c.get(Calendar.HOUR_OF_DAY)); // 时
|
||||
map.put("minute", c.get(Calendar.MINUTE)); // 分
|
||||
map.put("second", c.get(Calendar.SECOND)); // 秒
|
||||
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算两个日期的时间间隔
|
||||
*
|
||||
* @param startDate 开始日期
|
||||
* @param endDate 结束日期
|
||||
* @return 时间间隔
|
||||
*/
|
||||
public static Map<String, Long> dateInterval(String startDate, String endDate) {
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_FORMAT_2);
|
||||
LocalDateTime sDate = LocalDateTime.parse(startDate, formatter); // 开始日期
|
||||
LocalDateTime eDate = LocalDateTime.parse(endDate, formatter); // 结束日期
|
||||
|
||||
Long year = ChronoUnit.YEARS.between(sDate, eDate);
|
||||
Long month = ChronoUnit.MONTHS.between(sDate, eDate);
|
||||
Long day = ChronoUnit.DAYS.between(sDate, eDate);
|
||||
Long hour = ChronoUnit.HOURS.between(sDate, eDate) % 24;
|
||||
Long minute = ChronoUnit.MINUTES.between(sDate, eDate) % 60;
|
||||
Long second = ChronoUnit.SECONDS.between(sDate, eDate) % 60;
|
||||
|
||||
Map<String, Long> map = new HashMap<>();
|
||||
map.put("year", year); // 相差年数
|
||||
map.put("month", month); // 相差月数
|
||||
map.put("day", day); // 相差天数
|
||||
map.put("hour", hour); // 相差小时数
|
||||
map.put("minute", minute); // 相差分钟数
|
||||
map.put("second", second); // 相差秒数
|
||||
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定日期字符串
|
||||
*
|
||||
* @param date Date型日期
|
||||
* @param dateFormat 日期格式
|
||||
* @return String型日期
|
||||
*/
|
||||
public static String getDateStr(Date date, String dateFormat) {
|
||||
|
||||
String dateStr;
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
|
||||
// sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
|
||||
dateStr = sdf.format(date);
|
||||
return dateStr;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 年月日时分秒 转 Date
|
||||
*
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @param day 日
|
||||
* @param time 时
|
||||
* @param minute 分
|
||||
* @param second 秒
|
||||
* @return date型日期
|
||||
*/
|
||||
public static Date timeToDate(int year, int month, int day, int time, int minute, int second) {
|
||||
|
||||
Date date = null;
|
||||
String sDate = (year + "-" + month + "-" + day + " " + time + ":" + minute + ":" + second);
|
||||
try {
|
||||
date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sDate);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return date;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取日期字符串(格式:yyyy-MM-dd HH:mm:ss)
|
||||
*
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @param day 日
|
||||
* @param time 时
|
||||
* @param minute 分
|
||||
* @param second 秒
|
||||
* @return 日期字符串
|
||||
*/
|
||||
public static String getDateStr(int year, int month, int day, int time, int minute, int second) {
|
||||
|
||||
Date date = new Date(year - 1900, month - 1, day, time, minute, second);
|
||||
String dateStr;
|
||||
SimpleDateFormat df = new SimpleDateFormat(DateUtil.DATE_TIME_FORMAT_2);
|
||||
dateStr = df.format(date);
|
||||
return dateStr;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断日期格式是否为:yyyy-MM-dd HH:mm:ss
|
||||
*
|
||||
* @param dateStr 日期字符串(格式:yyyy-MM-dd HH:mm:ss)
|
||||
* @return true:符合。false:不符合
|
||||
*/
|
||||
public static boolean isValidDate(String dateStr) {
|
||||
|
||||
if (null == dateStr) return false;
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_TIME_FORMAT_2);
|
||||
// df.setTimeZone(TimeZone.getTimeZone("GMT+8"));
|
||||
simpleDateFormat.setLenient(false); // 严格检查模式
|
||||
|
||||
try {
|
||||
simpleDateFormat.parse(dateStr);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据日期字符串(格式:yyyy-MM-dd HH:mm:ss)获取年、月、日、时、分、秒
|
||||
*
|
||||
* @param dateStr 字符串型日期(格式:yyyy-MM-dd HH:mm:ss)
|
||||
* @return 年、月、日、时、分、秒
|
||||
*/
|
||||
public static Map<String, Integer> getDateInfo(String dateStr) {
|
||||
|
||||
// if (!isValidDate(dateStr)) dateStr = "2024-01-01 00:00:00";
|
||||
|
||||
String[] s1 = dateStr.split(" ");
|
||||
String yearMonthDay = s1[0]; // 年、月、日
|
||||
String hourMinuteSecond = s1[1]; // 时、分、秒
|
||||
|
||||
String[] s2 = yearMonthDay.split("-");
|
||||
int year = Integer.parseInt(s2[0]); // 年
|
||||
int month = Integer.parseInt(s2[1]); // 月
|
||||
int day = Integer.parseInt(s2[2]); // 日
|
||||
String[] s3 = hourMinuteSecond.split(":");
|
||||
int hour = Integer.parseInt(s3[0]); // 时
|
||||
int minute = Integer.parseInt(s3[1]); // 分
|
||||
int second = Integer.parseInt(s3[2]); // 秒
|
||||
|
||||
Map<String, Integer> map = new HashMap<>();
|
||||
map.put("year", year); // 年
|
||||
map.put("month", month); // 月
|
||||
map.put("day", day); // 日
|
||||
map.put("hour", hour); // 时
|
||||
map.put("minute", minute); // 分
|
||||
map.put("second", second); // 秒
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 在日期上增加(+)或减少(-)年数、月数、日数、时数、分数、秒数
|
||||
*
|
||||
* @param date 日期
|
||||
* @param iYear 要增加或减少的年数
|
||||
* @param iMonth 要增加或减少的月数
|
||||
* @param iDay 要增加或减少的日数
|
||||
* @param iHour 要增加或减少的时数
|
||||
* @param iMinute 要增加或减少的分数
|
||||
* @param iSecond 要增加或减少的秒数
|
||||
*/
|
||||
public static Date updateDate(Date date, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond) {
|
||||
|
||||
Calendar c = Calendar.getInstance();
|
||||
// c.setTimeZone(TimeZone.getTimeZone("GMT+8"));
|
||||
c.setTime(date);
|
||||
|
||||
c.add(Calendar.YEAR, iYear); // 年数
|
||||
c.add(Calendar.MONTH, iMonth); // 月数
|
||||
c.add(Calendar.DAY_OF_MONTH, iDay); // 日数
|
||||
c.add(Calendar.HOUR_OF_DAY, iHour); // 小时
|
||||
c.add(Calendar.MINUTE, iMinute); // 分钟
|
||||
c.add(Calendar.SECOND, iSecond); // 秒
|
||||
|
||||
return c.getTime();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
package xuan.utils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 真太阳时工具
|
||||
*
|
||||
* @author 善待
|
||||
*/
|
||||
public class TrueSolarDateUtil {
|
||||
|
||||
/**
|
||||
* 十二个月的太阳运行时间修正(单位:分)【暂未区分年份】
|
||||
*/
|
||||
private static final Map<Integer, List<Integer>> SHI_CHA_MINUTE = new HashMap<Integer, List<Integer>>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
// 例如:公历1月1日需要在平太阳时的基础上减3分钟,1月2日减3分钟,1月3日减4分钟,...
|
||||
put(1, Arrays.asList(0, -3, -3, -4, -4, -5, -5, -5, -6, -6, -7, -7, -7, -8, -8, -9, -9, -9, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -12, -13, -13, -13));
|
||||
put(2, Arrays.asList(0, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -13, -13, -13, -13, -11, -12, -12, -12, -12, -12));
|
||||
put(3, Arrays.asList(0, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -8, -7, -7, -7, -6, -6, -6, -5, -5, -5, -5, -4, -4, -4, -3, -3));
|
||||
put(4, Arrays.asList(0, -3, -2, -2, -2, -2, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3));
|
||||
put(5, Arrays.asList(0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2));
|
||||
put(6, Arrays.asList(0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -3, -3, -3, -3, -3, -4, -4));
|
||||
put(7, Arrays.asList(0, -4, -4, -4, -4, -5, -5, -5, -5, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6));
|
||||
put(8, Arrays.asList(0, -6, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, 0, 0, 0, 0, 0, 0));
|
||||
put(9, Arrays.asList(0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10));
|
||||
put(10, Arrays.asList(0, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16));
|
||||
put(11, Arrays.asList(0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 12, 12, 12, 12, 11, 11));
|
||||
put(12, Arrays.asList(0, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, -1, -1, -2, -2, -3));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* 十二个月的太阳运行时间修正(单位:秒)【暂未区分年份】
|
||||
*/
|
||||
private static final Map<Integer, List<Integer>> SHI_CHA_SECOND = new HashMap<Integer, List<Integer>>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
// 例如:公历1月1日需要在平太阳时的基础上减9秒钟,1月2日减38秒钟,1月3日减6秒钟,...
|
||||
put(1, Arrays.asList(0, -9, -38, -6, -33, -1, -27, -54, -20, -45, -10, -35, -59, -22, -45, -7, -28, -49, -9, -28, -47, -5, -22, -38, -54, -8, -22, -35, -59, -10, -19, -37));
|
||||
put(2, Arrays.asList(0, -44, -50, -56, -1, -5, -9, -11, -13, -14, -15, -14, -13, -11, -8, -5, -1, -56, -51, -44, -38, -30, -22, -13, -4, -54, -43, -32, -21, -8));
|
||||
put(3, Arrays.asList(0, -56, -43, -29, -15, -1, -47, -32, -16, -1, -45, -28, -12, -55, -38, -21, -4, -46, -29, -11, -53, -35, -17, -58, -40, -22, -4, -45, -27, -9, -51, -33));
|
||||
put(4, Arrays.asList(0, -16, -58, -41, -24, -7, -50, -33, -17, -1, 46, 30, 16, 1, 13, 27, 41, 54, 6, 19, 31, 42, 53, 4, 14, 23, 33, 41, 49, 57, 4));
|
||||
put(5, Arrays.asList(0, 10, 16, 21, 26, 30, 37, 36, 39, 40, 42, 42, 42, 42, 41, 39, 37, 34, 31, 27, 23, 18, 13, 7, 1, 54, 47, 39, 31, 22, 13, 4));
|
||||
put(6, Arrays.asList(0, 54, 44, 34, 23, 12, 0, 48, 36, 24, 12, 1, 14, 39, 52, -5, -18, -31, -45, -57, -10, -23, -36, -48, -1, -13, -25, -37, -49, -0, -11));
|
||||
put(7, Arrays.asList(0, -22, -33, -43, -53, -2, -11, -20, -28, -36, -43, -50, -56, -2, -8, -12, -16, -20, -23, -25, -27, -29, -29, -29, -29, -28, -26, -24, -24, -17, -13, -8));
|
||||
put(8, Arrays.asList(0, -3, -57, -51, -44, -36, -28, -19, -10, 0, -50, -39, -27, -15, -2, -49, -36, -21, -7, -51, -36, -20, -3, -47, -29, -12, 54, 35, 17, 2, 21, 41));
|
||||
put(9, Arrays.asList(0, 0, 20, 40, 1, 21, 42, 3, 3, 24, 45, 6, 27, 48, 10, 31, 53, 14, 35, 57, 18, 39, 0, 21, 42, 2, 22, 42, 2, 21, 40));
|
||||
put(10, Arrays.asList(0, 59, 18, 36, 36, 53, 11, 28, 44, 0, 16, 16, 31, 45, 59, 13, 26, 38, 50, 1, 12, 21, 31, 40, 48, 55, 1, 7, 12, 16, 20, 22));
|
||||
put(11, Arrays.asList(0, 24, 25, 25, 24, 23, 21, 17, 13, 9, 3, 56, 49, 41, 32, 22, 11, 0, 47, 34, 20, 6, 50, 34, 17, 59, 40, 21, 1, 40, 18));
|
||||
put(12, Arrays.asList(0, 56, 33, 9, 45, 21, 55, 29, 3, 36, 9, 42, 14, 46, 17, 48, 19, 50, 21, 51, 22, 52, 22, 52, 23, 7, 37, -6, -36, -5, -34, -3));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
//*******************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* 获取真太阳时(根据地区计算)
|
||||
*
|
||||
* @param date 标准时间(东八区120°经度时刻)
|
||||
* @param address 地区
|
||||
* @return 真太阳时
|
||||
*/
|
||||
public static Date getTrueSolarDate(Date date, String address) {
|
||||
|
||||
// 1、通过地区获取经度
|
||||
Map<String, Double> lngAndLat = BaiduMapsUtil.getLngAndLat(address);
|
||||
|
||||
// 2、计算平太阳时
|
||||
Date meanSolarTime = findMeanSolarDate(date, lngAndLat.get("lng"));
|
||||
|
||||
// 3、计算真太阳时
|
||||
return findTrueSolarDate(meanSolarTime);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取真太阳时(根据经度计算)
|
||||
*
|
||||
* @param date 标准时间(东八区120°经度时刻)
|
||||
* @param lng 经度
|
||||
* @return 真太阳时
|
||||
*/
|
||||
public static Date getTrueSolarDate(Date date, double lng) {
|
||||
|
||||
// 1、计算平太阳时
|
||||
Date meanSolarTime = findMeanSolarDate(date, lng);
|
||||
|
||||
// 2、计算真太阳时
|
||||
return findTrueSolarDate(meanSolarTime);
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* 计算平太阳时
|
||||
*
|
||||
* @param date 标准时间(东八区120°经度时刻)
|
||||
* @param lng 经度
|
||||
* @return 平太阳时
|
||||
*/
|
||||
private static Date findMeanSolarDate(Date date, double lng) {
|
||||
|
||||
/*
|
||||
地球经线360度,自转一周,需要23时59分4秒,即1439分4秒,
|
||||
所以每一经度的时差为:1439.4/360≈3.997分钟,约等于4分钟(此处直接按4分钟计算),
|
||||
因此,由经度造成的时差,每向东增加一度,加上4分钟;每向西增加一度,减去4分钟。
|
||||
*/
|
||||
|
||||
// 1、保留经度的两位小数
|
||||
lng = CommonUtil.getDouble(lng, 2);
|
||||
|
||||
// 2、计算经度时差
|
||||
double longitudeDifference = lng - 120; // 经度差(正数:所在地区的经度大于120°,真太阳时比平太阳时快。负数:所在地区的经度小于120°,真太阳时比平太阳时慢。)
|
||||
longitudeDifference = CommonUtil.getDouble(longitudeDifference, 2); // 保留经度差的两位小数
|
||||
double timeDifference = longitudeDifference * 4; // 时差(每一经度的时差约等于4分钟)
|
||||
|
||||
// 3.1、获取小时数、分钟数、秒数
|
||||
String[] split = String.valueOf(timeDifference).split("\\.");
|
||||
int hour = 0; // 小时
|
||||
int minute = Integer.parseInt(split[0]); // 分钟
|
||||
// 3.2、若分钟数为负数,则临时转为正数
|
||||
if (minute < 0) minute = -minute;
|
||||
int second = Integer.parseInt(split[1]); // 秒钟
|
||||
|
||||
// 4.1、若秒钟大于60,则需减去60秒钟,并且分钟+1
|
||||
if (second > 60) {
|
||||
second -= 60; // 秒钟减去60秒钟
|
||||
minute += 1; // 分钟增加1分钟
|
||||
}
|
||||
// 4.2、若分钟大于60,则需减去60分钟,并且小时+1
|
||||
if (minute > 60) {
|
||||
minute -= 60; // 秒钟减去60分钟
|
||||
hour += 1; // 小时增加1小时
|
||||
}
|
||||
|
||||
// 5、若经度差为负数,则时、分、秒也转为负数
|
||||
if (longitudeDifference < 0) {
|
||||
hour = -hour; // 时
|
||||
minute = -minute; // 分
|
||||
second = -second; // 秒
|
||||
}
|
||||
|
||||
// 6、计算平太阳时
|
||||
return DateUtil.updateDate(date, 0, 0, 0, hour, minute, second); // 在日期上增加(+)或减少(-)年数、月数、日数、时数、分数、秒数
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算真太阳时
|
||||
*
|
||||
* @param date 平太阳时
|
||||
* @return 真太阳时
|
||||
*/
|
||||
private static Date findTrueSolarDate(Date date) {
|
||||
|
||||
// 1、获取日期的[年月日时分秒]
|
||||
Map<String, Integer> dateMap = DateUtil.getDateMap(date);
|
||||
|
||||
// 2、获取真太阳时的修正时间
|
||||
Integer minute = SHI_CHA_MINUTE.get(dateMap.get("month")).get(dateMap.get("day")); // 需要增加或减少的分钟数
|
||||
Integer second = SHI_CHA_SECOND.get(dateMap.get("month")).get(dateMap.get("day")); // 需要增加或减少的秒数
|
||||
minute = null != minute ? minute : 0;
|
||||
second = null != second ? minute : 0;
|
||||
|
||||
// 3、计算真太阳时
|
||||
return DateUtil.updateDate(date, 0, 0, 0, 0, minute, second); // 在日期上增加(+)或减少(-)年数、月数、日数、时数、分数、秒数
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user