@Service
public class BzBasicService {
@Autowired
private BmBzShiShenMapper bmBzShiShenMapper;
@Autowired
private BmBzHideBranchMapper bmBzHideBranchMapper;
@Autowired
private BmBzBasicMapper basicMapper;
@Autowired
private BmBzBasicExtendMapper extendMapper;
@Autowired
private BmBzBasicDaYunMapper daYunMapper;
public void saveBasic(BasicParam basicParam) {
//String result = DateStemBranchUtils.calLunBranch("1996-12-26 18:11:10");
String birthday = basicParam.getDate();
String result = DateStemBranchUtils.calLunBranch(birthday);
BmBzBasic bmBzBasic = new BmBzBasic();
bmBzBasic.setUserName(basicParam.getName());
bmBzBasic.setGender(basicParam.getGender());
String calendarType = basicParam.getCalendarType();
if (CalendarType.SOLAR.name().equalsIgnoreCase(calendarType)) {
//convert to lunar
String dateStr = birthday.split(" ")[0];
String timeStr = birthday.split(" ")[1];
String lunarDate = LunarCalendarFestivalUtils.toLunarCalendar(dateStr);
bmBzBasic.setBirthdaySolar(basicParam.getDate());
bmBzBasic.setBirthdayLunar(lunarDate + " " + timeStr);
} else {
//convert to solar
String solarDate = DateStemBranchUtils.convertToGregorianDate(basicParam.getDate());
bmBzBasic.setBirthdaySolar(solarDate);
bmBzBasic.setBirthdayLunar(basicParam.getDate());
}
//bz basic
String yearTrunk = result.substring(0, 1);
String yearBranch = result.substring(1, 2);
String monthTrunk = result.substring(2, 3);
String monthBranch = result.substring(3, 4);
String dayTrunk = result.substring(4, 5);
String dayBranch = result.substring(5, 6);
String timeTrunk = result.substring(6, 7);
String timeBranch = result.substring(7, 8);
//set trunk and branch
bmBzBasic.setYearTrunk(yearTrunk);
bmBzBasic.setYearBranch(yearBranch);
bmBzBasic.setMonthTrunk(monthTrunk);
bmBzBasic.setMonthBranch(monthBranch);
bmBzBasic.setDayTrunk(dayTrunk);
bmBzBasic.setDayBranch(dayBranch);
bmBzBasic.setTimeTrunk(timeTrunk);
bmBzBasic.setTimeBranch(timeBranch);
//shishen map
Map<String, String> shishenMap = getShiShenMapTrunk(dayTrunk);
//year trunk map
setTrunkShiSHen(bmBzBasic, shishenMap);
//hide trunk map
Map<String, String> hideMap = getHideBranch();
//year hide
setHideBranch(bmBzBasic, BzProperty.YEAR, yearBranch, shishenMap, hideMap);
//month hide
setHideBranch(bmBzBasic, BzProperty.MONTH, monthBranch, shishenMap, hideMap);
//day hide
setHideBranch(bmBzBasic, BzProperty.DAY, dayBranch, shishenMap, hideMap);
//time hide
setHideBranch(bmBzBasic, BzProperty.TIME, timeBranch, shishenMap, hideMap);
bmBzBasic.setCreateDate(Instant.now());
bmBzBasic.setUpdateDate(Instant.now());
//dayun
Luozhuangpaipandayun dayun = new Luozhuangpaipandayun();
String dateStr = birthday.substring(0, 12);
List<String> dayunList = null;
if (Gender.乾造.name().equals(basicParam.getGender())) {
dayunList = dayun.paipan(dateStr, sex.man);
} else {
dayunList = dayun.paipan(dateStr, sex.woman);
}
bmBzBasic.setBigFortune(JSONUtil.toJsonStr(dayunList));
String uuid = UUID.randomUUID().toString();
bmBzBasic.setId(uuid);
basicMapper.insert(bmBzBasic);
//save to basic_extend
saveToBasicExtend(bmBzBasic);
//save to dayun
saveToDayun(bmBzBasic, dayunList);
}
private void setTrunkShiSHen(BmBzBasic bmBzBasic, Map<String, String> shiShenMap) {
String yearTrunk = bmBzBasic.getYearTrunk();
String monthTrunk = bmBzBasic.getMonthTrunk();
String dayTrunk = bmBzBasic.getDayTrunk();
String timeTrunk = bmBzBasic.getTimeTrunk();
String yearTrunkGod = shiShenMap.get(yearTrunk);
String monthTrunkGod = shiShenMap.get(monthTrunk);
String dayTrunkGod = shiShenMap.get(dayTrunk);
String timeTrunkGOd = shiShenMap.get(timeTrunk);
bmBzBasic.setYearTrunkGod(yearTrunkGod);
bmBzBasic.setMonthTrunkGod(monthTrunkGod);
bmBzBasic.setDayTrunkGod(dayTrunkGod);
bmBzBasic.setTimeTrunkGod(timeTrunkGOd);
}
private void saveToDayun(BmBzBasic bmBzBasic, List<String> dayunList) {
AtomicInteger i = new AtomicInteger(1);
//trunkMap
Map<String, Integer> trunkMap = CommonUtil.getTrunkMap();
//branchMap
Map<String, Integer> branchMap = CommonUtil.getBranchMap();
dayunList.stream().forEach(
data -> {
String trunk = data.substring(0, 1);
String branch = data.substring(1, 2);
BmBzBasicDaYun daYun = new BmBzBasicDaYun();
daYun.setId(UUID.randomUUID().toString());
daYun.setBasicId(bmBzBasic.getId());
daYun.setTrunk(trunkMap.get(trunk));
daYun.setBranch(branchMap.get(branch));
daYun.setYunIndex(i.get());
daYunMapper.insert(daYun);
i.incrementAndGet();
}
);
}
/**
* saveToBasicExtend.
*/
private void saveToBasicExtend(BmBzBasic bmBzBasic) {
String id = bmBzBasic.getId();
String yearTrunk = bmBzBasic.getYearTrunk();
String yearBranch = bmBzBasic.getYearBranch();
//trunkMap
Map<String, Integer> trunkMap = CommonUtil.getTrunkMap();
//branchMap
Map<String, Integer> branchMap = CommonUtil.getBranchMap();
//year
BmBzBasicExtend bmBzBasicExtend = new BmBzBasicExtend();
bmBzBasicExtend.setId(UUID.randomUUID().toString());
bmBzBasicExtend.setBasicId(id);
bmBzBasicExtend.setTrunk(trunkMap.get(yearTrunk));
bmBzBasicExtend.setBranch(branchMap.get(yearBranch));
bmBzBasicExtend.setType(1);
extendMapper.insert(bmBzBasicExtend);
//month
String monthTrunk = bmBzBasic.getMonthTrunk();
String monthBranch = bmBzBasic.getMonthBranch();
BmBzBasicExtend monthExtend = new BmBzBasicExtend();
monthExtend.setId(UUID.randomUUID().toString());
monthExtend.setBasicId(id);
monthExtend.setTrunk(trunkMap.get(monthTrunk));
monthExtend.setBranch(branchMap.get(monthBranch));
monthExtend.setType(2);
extendMapper.insert(monthExtend);
//day
String dayTrunk = bmBzBasic.getDayTrunk();
String dayBranch = bmBzBasic.getDayBranch();
BmBzBasicExtend dayExtend = new BmBzBasicExtend();
dayExtend.setId(UUID.randomUUID().toString());
dayExtend.setBasicId(id);
dayExtend.setTrunk(trunkMap.get(dayTrunk));
dayExtend.setBranch(branchMap.get(dayBranch));
dayExtend.setType(3);
extendMapper.insert(dayExtend);
//time
String timeTrunk = bmBzBasic.getTimeTrunk();
String timeBranch = bmBzBasic.getTimeBranch();
BmBzBasicExtend timeExtend = new BmBzBasicExtend();
timeExtend.setId(UUID.randomUUID().toString());
timeExtend.setBasicId(id);
timeExtend.setTrunk(trunkMap.get(timeTrunk));
timeExtend.setBranch(branchMap.get(timeBranch));
timeExtend.setType(4);
extendMapper.insert(timeExtend);
}
/**
* setHideBranch.
*/
private void setHideBranch(BmBzBasic bmBzBasic, BzProperty property, String branch,
Map<String, String> shishenMap, Map<String, String> hideMap) {
String value = hideMap.get(branch);
List<String> hideTrunk = new ArrayList<>(Arrays.asList(value.split(",")));
switch (property) {
case YEAR:
for (int i = 0; i < hideTrunk.size(); i++) {
String trunk = hideTrunk.get(i);
String shishen = shishenMap.get(trunk);
if (i == 0) {
bmBzBasic.setYearTrunkHide1(trunk);
bmBzBasic.setYearBranchGod1(shishen);
}
if (i == 1) {
bmBzBasic.setYearTrunkHide2(trunk);
bmBzBasic.setYearBranchGod2(shishen);
}
if (i == 2) {
bmBzBasic.setYearTrunkHide3(trunk);
bmBzBasic.setYearBranchGod3(shishen);
}
}
break;
case MONTH:
for (int i = 0; i < hideTrunk.size(); i++) {
String trunk = hideTrunk.get(i);
String shishen = shishenMap.get(trunk);
if (i == 0) {
bmBzBasic.setMonthTrunkHide1(trunk);
bmBzBasic.setMonthBranchGod1(shishen);
}
if (i == 1) {
bmBzBasic.setMonthTrunkHide2(trunk);
bmBzBasic.setMonthBranchGod2(shishen);
}
if (i == 2) {
bmBzBasic.setMonthTrunkHide3(trunk);
bmBzBasic.setMonthBranchGod3(shishen);
}
}
break;
case DAY:
for (int i = 0; i < hideTrunk.size(); i++) {
String trunk = hideTrunk.get(i);
String shishen = shishenMap.get(trunk);
if (i == 0) {
bmBzBasic.setDayTrunkHide1(trunk);
bmBzBasic.setDayBranchGod1(shishen);
}
if (i == 1) {
bmBzBasic.setDayTrunkHide2(trunk);
bmBzBasic.setDayBranchGod2(shishen);
}
if (i == 2) {
bmBzBasic.setDayTrunkHide3(trunk);
bmBzBasic.setDayBranchGod3(shishen);
}
}
break;
case TIME:
for (int i = 0; i < hideTrunk.size(); i++) {
String trunk = hideTrunk.get(i);
String shishen = shishenMap.get(trunk);
if (i == 0) {
bmBzBasic.setTimeTrunkHide1(trunk);
bmBzBasic.setTimeBranchGod1(shishen);
}
if (i == 1) {
bmBzBasic.setTimeTrunkHide2(trunk);
bmBzBasic.setTimeBranchGod2(shishen);
}
if (i == 2) {
bmBzBasic.setTimeTrunkHide3(trunk);
bmBzBasic.setTimeBranchGod3(shishen);
}
}
break;
}
}
private Map<String, String> getHideBranch() {
Wrapper<BzHideBranch> wrappers = Wrappers.<BzHideBranch>lambdaQuery();
//List<BzHideBranch> branches = bmBzHideBranchMapper.selectList(wrappers);
Map<String, String> shishenMap = CommonUtil.getHideTrunkName();
return shishenMap;
}
/**
* get shi shen trunk.
*/
private Map<String, String> getShiShenMapTrunk(String dayTrunk) {
FileReader fileReader = new FileReader("bazi/shishen.json");
List<ShiShen> shiShenList = JSONUtil.toList(fileReader.readString(), ShiShen.class);
shiShenList =
shiShenList.stream().filter(data -> data.getDaySource().equals(dayTrunk))
.collect(Collectors.toList());
Map<String, String> shishenMap = CommonUtil.convertToShishenMap(shiShenList);
return shishenMap;
}
}
[
{
"id": 1,
"day_source": "甲",
"day_trunk": "甲",
"shishen": "比肩"
},
{
"id": 2,
"day_source": "甲",
"day_trunk": "乙",
"shishen": "劫财"
},
{
"id": 3,
"day_source": "甲",
"day_trunk": "丙",
"shishen": "食神"
},
{
"id": 4,
"day_source": "甲",
"day_trunk": "丁",
"shishen": "伤官"
},
{
"id": 5,
"day_source": "甲",
"day_trunk": "戊",
"shishen": "偏财"
},
{
"id": 6,
"day_source": "甲",
"day_trunk": "己",
"shishen": "正财"
},
{
"id": 7,
"day_source": "甲",
"day_trunk": "庚",
"shishen": "七杀"
},
{
"id": 8,
"day_source": "甲",
"day_trunk": "辛",
"shishen": "正官"
},
{
"id": 9,
"day_source": "甲",
"day_trunk": "壬",
"shishen": "偏印"
},
{
"id": 10,
"day_source": "甲",
"day_trunk": "癸",
"shishen": "正印"
},
{
"id": 11,
"day_source": "乙",
"day_trunk": "甲",
"shishen": "劫财"
},
{
"id": 12,
"day_source": "乙",
"day_trunk": "乙",
"shishen": "比肩"
},
{
"id": 13,
"day_source": "乙",
"day_trunk": "丙",
"shishen": "伤官"
},
{
"id": 14,
"day_source": "乙",
"day_trunk": "丁",
"shishen": "食神"
},
{
"id": 15,
"day_source": "乙",
"day_trunk": "戊",
"shishen": "正财"
},
{
"id": 16,
"day_source": "乙",
"day_trunk": "己",
"shishen": "偏财"
},
{
"id": 17,
"day_source": "乙",
"day_trunk": "庚",
"shishen": "正官"
},
{
"id": 18,
"day_source": "乙",
"day_trunk": "辛",
"shishen": "七杀"
},
{
"id": 19,
"day_source": "乙",
"day_trunk": "壬",
"shishen": "正印"
},
{
"id": 20,
"day_source": "乙",
"day_trunk": "癸",
"shishen": "偏印"
},
{
"id": 21,
"day_source": "丙",
"day_trunk": "甲",
"shishen": "偏印"
},
{
"id": 22,
"day_source": "丙",
"day_trunk": "乙",
"shishen": "正印"
},
{
"id": 23,
"day_source": "丙",
"day_trunk": "丙",
"shishen": "比肩"
},
{
"id": 24,
"day_source": "丙",
"day_trunk": "丁",
"shishen": "劫财"
},
{
"id": 25,
"day_source": "丙",
"day_trunk": "戊",
"shishen": "食神"
},
{
"id": 26,
"day_source": "丙",
"day_trunk": "己",
"shishen": "伤官"
},
{
"id": 27,
"day_source": "丙",
"day_trunk": "庚",
"shishen": "偏财"
},
{
"id": 28,
"day_source": "丙",
"day_trunk": "辛",
"shishen": "正财"
},
{
"id": 29,
"day_source": "丙",
"day_trunk": "壬",
"shishen": "七杀"
},
{
"id": 30,
"day_source": "丙",
"day_trunk": "癸",
"shishen": "正官"
},
{
"id": 31,
"day_source": "丁",
"day_trunk": "甲",
"shishen": "正印"
},
{
"id": 32,
"day_source": "丁",
"day_trunk": "乙",
"shishen": "偏印"
},
{
"id": 33,
"day_source": "丁",
"day_trunk": "丙",
"shishen": "劫财"
},
{
"id": 34,
"day_source": "丁",
"day_trunk": "丁",
"shishen": "比肩"
},
{
"id": 35,
"day_source": "丁",
"day_trunk": "戊",
"shishen": "伤官"
},
{
"id": 36,
"day_source": "丁",
"day_trunk": "己",
"shishen": "食神"
},
{
"id": 37,
"day_source": "丁",
"day_trunk": "庚",
"shishen": "正财"
},
{
"id": 38,
"day_source": "丁",
"day_trunk": "辛",
"shishen": "偏财"
},
{
"id": 39,
"day_source": "丁",
"day_trunk": "壬",
"shishen": "正官"
},
{
"id": 40,
"day_source": "丁",
"day_trunk": "癸",
"shishen": "七杀"
},
{
"id": 41,
"day_source": "戊",
"day_trunk": "甲",
"shishen": "七杀"
},
{
"id": 42,
"day_source": "戊",
"day_trunk": "乙",
"shishen": "正官"
},
{
"id": 43,
"day_source": "戊",
"day_trunk": "丙",
"shishen": "偏印"
},
{
"id": 44,
"day_source": "戊",
"day_trunk": "丁",
"shishen": "正印"
},
{
"id": 45,
"day_source": "戊",
"day_trunk": "戊",
"shishen": "比肩"
},
{
"id": 46,
"day_source": "戊",
"day_trunk": "己",
"shishen": "劫财"
},
{
"id": 47,
"day_source": "戊",
"day_trunk": "庚",
"shishen": "食神"
},
{
"id": 48,
"day_source": "戊",
"day_trunk": "辛",
"shishen": "伤官"
},
{
"id": 49,
"day_source": "戊",
"day_trunk": "壬",
"shishen": "偏财"
},
{
"id": 50,
"day_source": "戊",
"day_trunk": "癸",
"shishen": "正财"
},
{
"id": 51,
"day_source": "己",
"day_trunk": "甲",
"shishen": "正官"
},
{
"id": 52,
"day_source": "己",
"day_trunk": "乙",
"shishen": "七杀"
},
{
"id": 53,
"day_source": "己",
"day_trunk": "丙",
"shishen": "正印"
},
{
"id": 54,
"day_source": "己",
"day_trunk": "丁",
"shishen": "偏印"
},
{
"id": 55,
"day_source": "己",
"day_trunk": "戊",
"shishen": "劫财"
},
{
"id": 56,
"day_source": "己",
"day_trunk": "己",
"shishen": "比肩"
},
{
"id": 57,
"day_source": "己",
"day_trunk": "庚",
"shishen": "伤官"
},
{
"id": 58,
"day_source": "己",
"day_trunk": "辛",
"shishen": "食神"
},
{
"id": 59,
"day_source": "己",
"day_trunk": "壬",
"shishen": "正财"
},
{
"id": 60,
"day_source": "己",
"day_trunk": "癸",
"shishen": "偏财"
},
{
"id": 61,
"day_source": "庚",
"day_trunk": "甲",
"shishen": "偏财"
},
{
"id": 62,
"day_source": "庚",
"day_trunk": "乙",
"shishen": "正财"
},
{
"id": 63,
"day_source": "庚",
"day_trunk": "丙",
"shishen": "七杀"
},
{
"id": 64,
"day_source": "庚",
"day_trunk": "丁",
"shishen": "正官"
},
{
"id": 65,
"day_source": "庚",
"day_trunk": "戊",
"shishen": "偏印"
},
{
"id": 66,
"day_source": "庚",
"day_trunk": "己",
"shishen": "正印"
},
{
"id": 67,
"day_source": "庚",
"day_trunk": "庚",
"shishen": "比肩"
},
{
"id": 68,
"day_source": "庚",
"day_trunk": "辛",
"shishen": "劫财"
},
{
"id": 69,
"day_source": "庚",
"day_trunk": "壬",
"shishen": "食神"
},
{
"id": 70,
"day_source": "庚",
"day_trunk": "癸",
"shishen": "伤官"
},
{
"id": 71,
"day_source": "辛",
"day_trunk": "甲",
"shishen": "正财"
},
{
"id": 72,
"day_source": "辛",
"day_trunk": "乙",
"shishen": "偏财"
},
{
"id": 73,
"day_source": "辛",
"day_trunk": "丙",
"shishen": "正官"
},
{
"id": 74,
"day_source": "辛",
"day_trunk": "丁",
"shishen": "七杀"
},
{
"id": 75,
"day_source": "辛",
"day_trunk": "戊",
"shishen": "正印"
},
{
"id": 76,
"day_source": "辛",
"day_trunk": "己",
"shishen": "偏印"
},
{
"id": 77,
"day_source": "辛",
"day_trunk": "庚",
"shishen": "劫财"
},
{
"id": 78,
"day_source": "辛",
"day_trunk": "辛",
"shishen": "比肩"
},
{
"id": 79,
"day_source": "辛",
"day_trunk": "壬",
"shishen": "伤官"
},
{
"id": 80,
"day_source": "辛",
"day_trunk": "癸",
"shishen": "食神"
},
{
"id": 81,
"day_source": "壬",
"day_trunk": "甲",
"shishen": "食神"
},
{
"id": 82,
"day_source": "壬",
"day_trunk": "乙",
"shishen": "伤官"
},
{
"id": 83,
"day_source": "壬",
"day_trunk": "丙",
"shishen": "偏财"
},
{
"id": 84,
"day_source": "壬",
"day_trunk": "丁",
"shishen": "正财"
},
{
"id": 85,
"day_source": "壬",
"day_trunk": "戊",
"shishen": "七杀"
},
{
"id": 86,
"day_source": "壬",
"day_trunk": "己",
"shishen": "正官"
},
{
"id": 87,
"day_source": "壬",
"day_trunk": "庚",
"shishen": "偏印"
},
{
"id": 88,
"day_source": "壬",
"day_trunk": "辛",
"shishen": "正印"
},
{
"id": 89,
"day_source": "壬",
"day_trunk": "壬",
"shishen": "比肩"
},
{
"id": 90,
"day_source": "壬",
"day_trunk": "癸",
"shishen": "劫财"
},
{
"id": 91,
"day_source": "癸",
"day_trunk": "甲",
"shishen": "伤官"
},
{
"id": 92,
"day_source": "癸",
"day_trunk": "乙",
"shishen": "食神"
},
{
"id": 93,
"day_source": "癸",
"day_trunk": "丙",
"shishen": "正财"
},
{
"id": 94,
"day_source": "癸",
"day_trunk": "丁",
"shishen": "偏财"
},
{
"id": 95,
"day_source": "癸",
"day_trunk": "戊",
"shishen": "正官"
},
{
"id": 96,
"day_source": "癸",
"day_trunk": "己",
"shishen": "七杀"
},
{
"id": 97,
"day_source": "癸",
"day_trunk": "庚",
"shishen": "正印"
},
{
"id": 98,
"day_source": "癸",
"day_trunk": "辛",
"shishen": "偏印"
},
{
"id": 99,
"day_source": "癸",
"day_trunk": "壬",
"shishen": "劫财"
},
{
"id": 100,
"day_source": "癸",
"day_trunk": "癸",
"shishen": "比肩"
}
]
create table `finance-async`.bm_bz_basic
(
id varchar(50) not null,
user_name varchar(255) null,
year_trunk varchar(10) null,
year_branch varchar(10) null,
month_trunk varchar(10) null,
month_branch varchar(10) null,
day_trunk varchar(10) null,
day_branch varchar(10) null,
time_trunk varchar(10) null,
time_branch varchar(10) null,
big_fortune varchar(255) null,
small_fortune varchar(255) null,
year_trunk_god varchar(10) null,
year_branch_god1 varchar(10) null,
year_branch_god2 varchar(10) null,
year_branch_god3 varchar(10) null,
month_trunk_god varchar(10) null,
month_branch_god1 varchar(10) null,
month_branch_god2 varchar(10) null,
month_branch_god3 varchar(10) null,
day_trunk_god varchar(10) null,
day_branch_god1 varchar(10) null,
day_branch_god2 varchar(10) null,
day_branch_god3 varchar(10) null,
time_trunk_god varchar(10) null,
time_branch_god1 varchar(10) null,
time_branch_god2 varchar(10) null,
time_branch_god3 varchar(10) null,
year_trunk_hide1 varchar(10) null,
year_trunk_hide2 varchar(10) null,
year_trunk_hide3 varchar(10) null,
month_trunk_hide1 varchar(10) null,
month_trunk_hide2 varchar(10) null,
month_trunk_hide3 varchar(10) null,
day_trunk_hide1 varchar(10) null,
day_trunk_hide2 varchar(10) null,
day_trunk_hide3 varchar(10) null,
time_trunk_hide1 varchar(10) null,
time_trunk_hide2 varchar(10) null,
time_trunk_hide3 varchar(10) null,
gender varchar(10) null,
birthday_solar varchar(50) null,
birthday_lunar varchar(50) null,
create_date datetime null,
update_date datetime null,
constraint bm_bz_basic_id_uindex
unique (id)
);
alter table `finance-async`.bm_bz_basic
add primary key (id);
create table `finance-async`.bm_bz_basic_extend
(
id varchar(50) not null
primary key,
basic_id varchar(50) null,
trunk int null,
branch int null,
hide_trunk varchar(50) null,
type int null comment '1 year 2 month 3 day 4 time'
);
create table `finance-async`.bm_bz_basic_dayun
(
id varchar(50) not null
primary key,
basic_id varchar(50) null,
trunk int null,
branch int null,
start_date varchar(10) null,
end_date varchar(10) null,
yun_start int null,
yun_index int null
);