first
This commit is contained in:
114
app/src/main/java/com/ckkj/water/plate/PlateFragment.java
Normal file
114
app/src/main/java/com/ckkj/water/plate/PlateFragment.java
Normal file
@@ -0,0 +1,114 @@
|
||||
package com.ckkj.water.plate;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ckkj.water.AppConfig;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.base.BaseFragment;
|
||||
import com.ckkj.water.databinding.PlateFragmentBinding;
|
||||
import com.ckkj.water.login.LoginActivity;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.plate.adapter.ViewPagerAdapter;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.plate.entity.BaziSaveSuccessEntity;
|
||||
import com.ckkj.water.plate.entity.PaipanHistoryEntity;
|
||||
import com.ckkj.water.plate.mvp.PlateContract;
|
||||
import com.ckkj.water.plate.mvp.PlateImpl;
|
||||
import com.ckkj.water.plate.mvp.PlatePresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/7/30
|
||||
* @description TODO: 排盘页面
|
||||
*/
|
||||
|
||||
public class PlateFragment extends BaseFragment<PlateFragmentBinding, PlatePresenter>
|
||||
implements PlateContract.PlateView {
|
||||
private List<Fragment> mFragmentList = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public PlatePresenter createPresenter() {
|
||||
return new PlatePresenter(new PlateImpl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initData(Bundle state) {
|
||||
viewBinding.includedTitle.imgBack.setVisibility(View.GONE);
|
||||
viewBinding.includedTitle.tvTitle.setText("信息录入");
|
||||
ViewPagerAdapter adapter = new ViewPagerAdapter(this, mFragmentList);
|
||||
viewBinding.viewpage.setAdapter(adapter);
|
||||
viewBinding.tvPaipan.setSelected(true);
|
||||
viewBinding.viewpage.setCurrentItem(0);
|
||||
//viewpage2 特有的 api,禁止滑动
|
||||
viewBinding.viewpage.setUserInputEnabled(false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onNetChange(int netModel) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showError(String message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logOut(BaseBean bean) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getPaipanResult(BaziResultBean bean) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveBaziResultSuccess(BaziSaveSuccessEntity bean) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getHistorySuccess(PaipanHistoryEntity entity) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deletePaipanHistorySuccess(int pos) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamMessageReceived(String messageChunk) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamComplete(String complateMsg) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void commitReportSuccess(BaseBean bean) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.utils.helper.FiveElementsHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/6
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class CangGanAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
private List<String> mDzGodList;
|
||||
public CangGanAdapter(Context context, int layoutResId, @Nullable List<String> data,List<String> dzGodList) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
this.mDzGodList = dzGodList;
|
||||
}
|
||||
|
||||
public void setmDzGodList(List<String> mDzGodList) {
|
||||
this.mDzGodList = mDzGodList;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, String item) {
|
||||
holder.setText(R.id.tv_cg_gan,item);
|
||||
holder.setTextColor(R.id.tv_cg_gan, Color.parseColor(FiveElementsHelper.getElementInfo(item).get("color")));
|
||||
holder.setText(R.id.tv_cg_shishen,mDzGodList.get(holder.getLayoutPosition()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.utils.helper.ShiShenCalculator;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/5
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class DayunAdapter extends BaseQuickAdapter<BaziResultBean.DetailInfoDTO.DayunInfoDTO, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
private int mSelPos = -1;
|
||||
public DayunAdapter(Context context,int layoutResId, @Nullable List<BaziResultBean.DetailInfoDTO.DayunInfoDTO> data,
|
||||
BaziResultBean.DetailInfoDTO.SizhuInfoDTO sizhuInfoDTO) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
public int getmSelPos() {
|
||||
return mSelPos;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, BaziResultBean.DetailInfoDTO.DayunInfoDTO item) {
|
||||
holder.setText(R.id.tv_year,item.getDayunStartYear() + "");
|
||||
if(holder.getLayoutPosition() != 0){
|
||||
holder.setText(R.id.tv_age,item.getDayunStartAge() + "岁");
|
||||
holder.setText(R.id.tv_gan_value,ShiShenCalculator.getAbbreviation(item.getDayunShishen()));
|
||||
holder.setText(R.id.tv_zhi_value,ShiShenCalculator.getAbbreviation(item.getDayunYearDzGod().get(0)));
|
||||
holder.setGone(R.id.tv_gan_value,true);
|
||||
holder.setGone(R.id.tv_zhi_value,true);
|
||||
holder.setGone(R.id.tv_zhi_key,true);
|
||||
holder.setText(R.id.tv_gan_key,item.getDayunYearTg());
|
||||
holder.setText(R.id.tv_zhi_key,item.getDayunYearDz());
|
||||
}else{
|
||||
int dyStart = item.getDayunStartYear();
|
||||
int dyEnd = item.getDayunEndYear();
|
||||
if(dyStart > dyEnd){
|
||||
holder.setText(R.id.tv_age,"0岁");
|
||||
}else if(dyStart == dyEnd){
|
||||
holder.setText(R.id.tv_age,"1岁");
|
||||
}else{
|
||||
holder.setText(R.id.tv_age,item.getDayunStartAge() + "-" + item.getDayunEndAge() + "岁");
|
||||
}
|
||||
holder.setGone(R.id.tv_gan_value,false);
|
||||
holder.setGone(R.id.tv_zhi_value,false);
|
||||
holder.setText(R.id.tv_gan_key,item.getDayunTongxian());
|
||||
holder.setGone(R.id.tv_zhi_key,false);
|
||||
holder.setGone(R.id.tv_zhi_value,false);
|
||||
}
|
||||
|
||||
if(holder.getLayoutPosition() == mSelPos){
|
||||
holder.setBackgroundColor(R.id.ll_item, ContextCompat.getColor(mContext,R.color.divider));
|
||||
}else{
|
||||
holder.setBackgroundColor(R.id.ll_item, ContextCompat.getColor(mContext,R.color.white));
|
||||
}
|
||||
}
|
||||
|
||||
public void setSelPostion(int pos){
|
||||
this.mSelPos = pos;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.utils.helper.FiveElementsHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/6
|
||||
* @description 大运、流年、流月柱状图适配器
|
||||
*/
|
||||
|
||||
public class DayunColumnAdapter extends BaseQuickAdapter<BaziResultBean.DetailInfoDTO.DayunInfoDTO, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
private int mDayunTypeCode = 100;
|
||||
private CangGanAdapter mCangganAdapter;
|
||||
private ShenshaAdapter mShenshaAdapter;
|
||||
private int mSelectXiaoyunPos = -1;
|
||||
|
||||
public DayunColumnAdapter(Context context, int layoutResId,
|
||||
@Nullable List<BaziResultBean.DetailInfoDTO.DayunInfoDTO> data,
|
||||
int typeCode) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
this.mDayunTypeCode = typeCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, BaziResultBean.DetailInfoDTO.DayunInfoDTO item) {
|
||||
RecyclerView rvDatas = holder.getView(R.id.rv_canggan);
|
||||
RecyclerView rvShenShaData = holder.getView(R.id.rv_shensha_data);
|
||||
holder.setGone(R.id.viewline,true);
|
||||
|
||||
switch (mDayunTypeCode) {
|
||||
case 100: // 大运
|
||||
// 第一个item(bornBean)童限 的特殊处理
|
||||
holder.setText(R.id.tv_shishen, item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunShishen() : item.getDayunShishen());
|
||||
holder.setText(R.id.tv_tg, item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunYearTg() : item.getDayunYearTg());
|
||||
holder.setText(R.id.tv_dz, item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunYearDz() : item.getDayunYearDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo
|
||||
(item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunYearTg() : item.getDayunYearTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo
|
||||
(item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunYearTg() : item.getDayunYearTg()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun, item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunDzStarCs() : item.getDayunDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo, item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunDzSelfCs() : item.getDayunDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang, item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunKongwang() : item.getDayunKongwang());
|
||||
holder.setText(R.id.tv_nayin, item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunNayin() : item.getDayunNayin());
|
||||
// bornBean可能没有藏干和神煞数据,需要特殊处理
|
||||
if (mCangganAdapter == null) {
|
||||
mCangganAdapter = new CangGanAdapter(mContext,
|
||||
R.layout.paipan_canggan_item,
|
||||
item.isTongXian() ? item.getXiaoyunInfo().get(0).getXiaoyunYearCg() : item.getDayunYearCg(),
|
||||
item.isTongXian() ? item.getXiaoyunInfo().get(0).getXiaoyunDzGod() : item.getDayunYearDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
} else {
|
||||
mCangganAdapter.setNewData(item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunYearCg() : item.getDayunYearCg());
|
||||
mCangganAdapter.setmDzGodList(item.isTongXian() ?
|
||||
item.getXiaoyunInfo().get(0).getXiaoyunDzGod() : item.getDayunYearDzGod());
|
||||
}
|
||||
List<String> shenshaList = new ArrayList<>();
|
||||
if (item.isTongXian()) {
|
||||
String shensha = item.getXiaoyunInfo().get(0).getXiaoyunShensha();
|
||||
if (!TextUtils.isEmpty(shensha)) {
|
||||
shenshaList = Arrays.asList(shensha.split(" "));
|
||||
}
|
||||
} else {
|
||||
String shensha = item.getDayunShensha();
|
||||
if (!TextUtils.isEmpty(shensha)) {
|
||||
shenshaList = Arrays.asList(shensha.split(" "));
|
||||
}
|
||||
}
|
||||
if (mShenshaAdapter == null) {
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext, R.layout.paipan_shensha_item, shenshaList);
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
} else {
|
||||
mShenshaAdapter.setNewData(shenshaList);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 200: // 流年
|
||||
BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO xiaoyunEntity = item.getXiaoyunInfo().get(mSelectXiaoyunPos);
|
||||
// 第一个item(bornBean)的特殊处理
|
||||
holder.setText(R.id.tv_shishen, xiaoyunEntity.getXiaoyunShishen());
|
||||
holder.setText(R.id.tv_tg, xiaoyunEntity.getXiaoyunYearTg());
|
||||
holder.setText(R.id.tv_dz, xiaoyunEntity.getXiaoyunYearDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(xiaoyunEntity.getXiaoyunYearTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(xiaoyunEntity.getXiaoyunYearDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun, xiaoyunEntity.getXiaoyunDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo, xiaoyunEntity.getXiaoyunDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang, xiaoyunEntity.getXiaoyunKongwang());
|
||||
holder.setText(R.id.tv_nayin, xiaoyunEntity.getXiaoyunNayin());
|
||||
|
||||
// bornBean的流年数据可能为空,需要特殊处理
|
||||
if (mCangganAdapter == null) {
|
||||
mCangganAdapter = new CangGanAdapter(mContext, R.layout.paipan_canggan_item,
|
||||
xiaoyunEntity.getXiaoyunYearCg(), xiaoyunEntity.getXiaoyunDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}else{
|
||||
mCangganAdapter.setNewData(xiaoyunEntity.getXiaoyunYearCg());
|
||||
mCangganAdapter.setmDzGodList(xiaoyunEntity.getXiaoyunDzGod());
|
||||
}
|
||||
if (mShenshaAdapter == null) {
|
||||
String shensha = xiaoyunEntity.getXiaoyunShensha();
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext, R.layout.paipan_shensha_item, Arrays.asList(shensha.split(" ")));
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}else{
|
||||
String shensha = xiaoyunEntity.getXiaoyunShensha();
|
||||
mShenshaAdapter.setNewData(Arrays.asList(shensha.split(" ")));
|
||||
}
|
||||
break;
|
||||
|
||||
case 300: // 流月
|
||||
// 第一个item(bornBean)的特殊处理
|
||||
holder.setText(R.id.tv_shishen, "小运");
|
||||
holder.setText(R.id.tv_tg, item.getDayunYearTg());
|
||||
holder.setText(R.id.tv_dz, item.getDayunYearDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(item.getDayunYearTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(item.getDayunYearDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun, "");
|
||||
holder.setText(R.id.tv_zizuo, "");
|
||||
holder.setText(R.id.tv_kongwang, "");
|
||||
holder.setText(R.id.tv_nayin, "");
|
||||
|
||||
// bornBean的流月数据可能为空,需要特殊处理
|
||||
if (mCangganAdapter == null) {
|
||||
mCangganAdapter = new CangGanAdapter(mContext, R.layout.paipan_canggan_item,
|
||||
Arrays.asList(), Arrays.asList());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}
|
||||
if (mShenshaAdapter == null) {
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext, R.layout.paipan_shensha_item, Arrays.asList());
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void setColumnCode(int code,int xiaoyunPos) {
|
||||
mDayunTypeCode = code;
|
||||
mSelectXiaoyunPos = xiaoyunPos;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.utils.helper.FiveElementsHelper;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/7
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class LiuNianColumnAdapter extends BaseQuickAdapter
|
||||
<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO, BaseViewHolder> {
|
||||
private CangGanAdapter mCangganAdapter;
|
||||
private ShenshaAdapter mShenshaAdapter;
|
||||
|
||||
|
||||
private Context mContext;
|
||||
private List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO> xiaoyunInfo;
|
||||
|
||||
public LiuNianColumnAdapter(Context context, int layoutResId,
|
||||
@Nullable List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO> data,
|
||||
List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO> xiaoyunInfo) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
this.xiaoyunInfo = xiaoyunInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO item) {
|
||||
RecyclerView rvDatas = holder.getView(R.id.rv_canggan);
|
||||
RecyclerView rvShenShaData = holder.getView(R.id.rv_shensha_data);
|
||||
// 第一个item(bornBean)的特殊处理
|
||||
holder.setText(R.id.tv_shishen, item.getLiunianShishen());
|
||||
holder.setText(R.id.tv_tg, item.getLiunianYearTg());
|
||||
holder.setText(R.id.tv_dz, item.getLiunianYearDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(item.getLiunianYearTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(item.getLiunianYearDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun, item.getLiunianDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo, item.getLiunianDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang, item.getLiunianKongwang());
|
||||
holder.setText(R.id.tv_nayin, item.getLiunianNayin());
|
||||
|
||||
// bornBean的流年数据可能为空,需要特殊处理
|
||||
if (mCangganAdapter == null) {
|
||||
mCangganAdapter = new CangGanAdapter(mContext, R.layout.paipan_canggan_item,
|
||||
item.getLiunianYearCg(), item.getLiunianDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}else{
|
||||
mCangganAdapter.setNewData(item.getLiunianYearCg());
|
||||
mCangganAdapter.setmDzGodList(item.getLiunianDzGod());
|
||||
}
|
||||
if (mShenshaAdapter == null) {
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext, R.layout.paipan_shensha_item, Arrays.asList(item.getLiunianShensha().split(" ")));
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}else{
|
||||
String shensha = item.getLiunianShensha();
|
||||
mShenshaAdapter.setNewData(Arrays.asList(shensha.split(" ")));
|
||||
}
|
||||
}
|
||||
|
||||
public void setXiaoyunDatas(List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO> xiaoyunInfoDTOList) {
|
||||
this.xiaoyunInfo = xiaoyunInfoDTOList;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.utils.helper.FiveElementsHelper;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/7
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class LiuYueColumnAdapter extends BaseQuickAdapter
|
||||
<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO.LiuyueInfoDTO, BaseViewHolder> {
|
||||
private CangGanAdapter mCangganAdapter;
|
||||
private ShenshaAdapter mShenshaAdapter;
|
||||
|
||||
|
||||
private Context mContext;
|
||||
private List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO> xiaoyunInfo;
|
||||
|
||||
public LiuYueColumnAdapter(Context context, int layoutResId,
|
||||
@Nullable List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO.LiuyueInfoDTO> data) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO.LiuyueInfoDTO item) {
|
||||
RecyclerView rvDatas = holder.getView(R.id.rv_canggan);
|
||||
RecyclerView rvShenShaData = holder.getView(R.id.rv_shensha_data);
|
||||
// 第一个item(bornBean)的特殊处理
|
||||
holder.setText(R.id.tv_shishen, item.getLiuyueShishen());
|
||||
holder.setText(R.id.tv_tg, item.getLiuyueMonthTg());
|
||||
holder.setText(R.id.tv_dz, item.getLiuyueMonthDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(item.getLiuyueMonthTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(item.getLiuyueMonthDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun, item.getLiuyueDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo, item.getLiuyueDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang, item.getLiuyueKongwang());
|
||||
holder.setText(R.id.tv_nayin, item.getLiuyueNayin());
|
||||
|
||||
// bornBean的流年数据可能为空,需要特殊处理
|
||||
if (mCangganAdapter == null) {
|
||||
mCangganAdapter = new CangGanAdapter(mContext, R.layout.paipan_canggan_item,
|
||||
item.getLiuyueMonthCg(), item.getLiuyueMonthDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}else{
|
||||
mCangganAdapter.setNewData(item.getLiuyueMonthCg());
|
||||
mCangganAdapter.setmDzGodList(item.getLiuyueMonthDzGod());
|
||||
}
|
||||
if (mShenshaAdapter == null) {
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext, R.layout.paipan_shensha_item, Arrays.asList(item.getLiuyueShensha().split(" ")));
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}else{
|
||||
String shensha = item.getLiuyueShensha();
|
||||
mShenshaAdapter.setNewData(Arrays.asList(shensha.split(" ")));
|
||||
}
|
||||
}
|
||||
|
||||
// public void setXiaoyunDatas(List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO> xiaoyunInfoDTOList) {
|
||||
// this.xiaoyunInfo = xiaoyunInfoDTOList;
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.utils.helper.ShiShenCalculator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/6
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class LiunianAdapter extends BaseQuickAdapter<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
private int mSelPos = -1;
|
||||
private List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO> xiaoyunList =
|
||||
new ArrayList<>();
|
||||
|
||||
|
||||
public LiunianAdapter(Context context, int layoutResId,
|
||||
@Nullable List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO> data,
|
||||
List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.XiaoyunInfoDTO> xiaoyunInfo) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
this.xiaoyunList = xiaoyunInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO item) {
|
||||
holder.setText(R.id.tv_year,item.getLiunianYear() + "");
|
||||
holder.setGone(R.id.tv_age,false);
|
||||
holder.setText(R.id.tv_gan_value, ShiShenCalculator.getAbbreviation(item.getLiunianTgGod()));
|
||||
holder.setText(R.id.tv_zhi_value,ShiShenCalculator.getAbbreviation(item.getLiunianDzGod().get(0)));
|
||||
holder.setText(R.id.tv_gan_key,item.getLiunianYearTg());
|
||||
holder.setText(R.id.tv_zhi_key,item.getLiunianYearDz());
|
||||
holder.setGone(R.id.tv_xiaoyun,true);
|
||||
holder.setText(R.id.tv_xiaoyun,xiaoyunList.get(holder.getLayoutPosition()).getXiaoyunGanzhi());
|
||||
if(holder.getLayoutPosition() == mSelPos){
|
||||
holder.setBackgroundColor(R.id.ll_item, ContextCompat.getColor(mContext,R.color.divider));
|
||||
}else{
|
||||
holder.setBackgroundColor(R.id.ll_item, ContextCompat.getColor(mContext,R.color.white));
|
||||
}
|
||||
}
|
||||
|
||||
public void setSelPostion(int pos){
|
||||
this.mSelPos = pos;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public int getmSelPos() {
|
||||
return mSelPos;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.utils.helper.ShiShenCalculator;
|
||||
import com.ckkj.water.utils.time.ZYTimeUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/6
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class LiuyueAdapter extends BaseQuickAdapter<BaziResultBean.DetailInfoDTO.DayunInfoDTO.
|
||||
LiunianInfoDTO.LiuyueInfoDTO, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
private int mSelPos = -1;
|
||||
private List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO.LiunianJieqiDTO> jieqiList =
|
||||
new ArrayList<>();
|
||||
public LiuyueAdapter(Context context,int layoutResId, @Nullable List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO.LiuyueInfoDTO> data,
|
||||
List<BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO.LiunianJieqiDTO> jieqiList) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
this.jieqiList = jieqiList;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, BaziResultBean.DetailInfoDTO.DayunInfoDTO.LiunianInfoDTO.LiuyueInfoDTO item) {
|
||||
holder.setText(R.id.tv_year,jieqiList.get(holder.getLayoutPosition()).getJieqiName());
|
||||
holder.setGone(R.id.tv_age,true);
|
||||
//节气日期转换
|
||||
String jieqiDate = ZYTimeUtils.formatToMonthDay(jieqiList.get(holder.getLayoutPosition()).getJieqiSolarYmdhms());
|
||||
holder.setText(R.id.tv_age, jieqiDate);
|
||||
holder.setText(R.id.tv_gan_value, ShiShenCalculator.getAbbreviation(item.getLiuyueMonthTgGod()));
|
||||
holder.setText(R.id.tv_zhi_value,ShiShenCalculator.getAbbreviation(item.getLiuyueMonthDzGod().get(0)));
|
||||
holder.setText(R.id.tv_gan_key,item.getLiuyueMonthTg());
|
||||
holder.setText(R.id.tv_zhi_key,item.getLiuyueMonthDz());
|
||||
holder.setGone(R.id.tv_xiaoyun,false);
|
||||
if(holder.getLayoutPosition() == mSelPos){
|
||||
holder.setBackgroundColor(R.id.ll_item, ContextCompat.getColor(mContext,R.color.divider));
|
||||
}else{
|
||||
holder.setBackgroundColor(R.id.ll_item, ContextCompat.getColor(mContext,R.color.white));
|
||||
}
|
||||
}
|
||||
|
||||
public void setSelPostion(int pos){
|
||||
this.mSelPos = pos;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public int getmSelPos() {
|
||||
return mSelPos;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.PaipanHistoryEntity;
|
||||
import com.ckkj.water.utils.click.ClickUtil;
|
||||
import com.ckkj.water.utils.helper.FiveElementsHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/9
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class PaipanHistoryAdapter extends BaseQuickAdapter<PaipanHistoryEntity.RecordsDTO, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
public PaipanHistoryAdapter(Context context,int layoutResId, @Nullable List<PaipanHistoryEntity.RecordsDTO> data) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, PaipanHistoryEntity.RecordsDTO item) {
|
||||
String []nianArr = item.getNianZhu().split(",");
|
||||
String []yueArr = item.getYueZhu().split(",");
|
||||
String []riArr = item.getRiZhu().split(",");
|
||||
String []shiArr = item.getShiZhu().split(",");
|
||||
holder.setText(R.id.tv_nian_tg,nianArr[0]);
|
||||
holder.setText(R.id.tv_nian_dz,nianArr[1]);
|
||||
holder.setText(R.id.tv_yue_tg,yueArr[0]);
|
||||
holder.setText(R.id.tv_yue_dz,yueArr[1]);
|
||||
holder.setText(R.id.tv_ri_tg,riArr[0]);
|
||||
holder.setText(R.id.tv_ri_dz,riArr[1]);
|
||||
holder.setText(R.id.tv_shi_tg,shiArr[0]);
|
||||
holder.setText(R.id.tv_shi_dz,shiArr[1]);
|
||||
holder.setTextColor(R.id.tv_nian_tg, Color.parseColor(FiveElementsHelper.getElementInfo(nianArr[0]).get("color")));
|
||||
holder.setTextColor(R.id.tv_nian_dz, Color.parseColor(FiveElementsHelper.getElementInfo(nianArr[1]).get("color")));
|
||||
holder.setTextColor(R.id.tv_yue_tg, Color.parseColor(FiveElementsHelper.getElementInfo(yueArr[0]).get("color")));
|
||||
holder.setTextColor(R.id.tv_yue_dz, Color.parseColor(FiveElementsHelper.getElementInfo(yueArr[1]).get("color")));
|
||||
holder.setTextColor(R.id.tv_ri_tg, Color.parseColor(FiveElementsHelper.getElementInfo(riArr[0]).get("color")));
|
||||
holder.setTextColor(R.id.tv_ri_dz, Color.parseColor(FiveElementsHelper.getElementInfo(riArr[1]).get("color")));
|
||||
holder.setTextColor(R.id.tv_shi_tg, Color.parseColor(FiveElementsHelper.getElementInfo(shiArr[0]).get("color")));
|
||||
holder.setTextColor(R.id.tv_shi_dz, Color.parseColor(FiveElementsHelper.getElementInfo(shiArr[1]).get("color")));
|
||||
holder.setText(R.id.tv_user_name,item.getName());
|
||||
holder.setText(R.id.tv_user_sex,Integer.parseInt(item.getGender()) == 0 ? "男":"女");
|
||||
holder.setText(R.id.tv_user_birthtime,Integer.parseInt(item.getBirthType()) == 1 ?
|
||||
"公历:" + item.getYangLiBirthTime():
|
||||
"农历:" + item.getYinLiBirthTime());
|
||||
ClickUtil.addClickPart(holder.getView(R.id.img_delete),80);
|
||||
holder.addOnClickListener(R.id.img_delete);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/6
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class ShenshaAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
public ShenshaAdapter(Context context,int layoutResId, @Nullable List<String> data) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder helper, String item) {
|
||||
helper.setText(R.id.tv_shensha_value,item);
|
||||
}
|
||||
}
|
||||
128
app/src/main/java/com/ckkj/water/plate/adapter/SizhuAdapter.java
Normal file
128
app/src/main/java/com/ckkj/water/plate/adapter/SizhuAdapter.java
Normal file
@@ -0,0 +1,128 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.utils.helper.FiveElementsHelper;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/6
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class SizhuAdapter extends BaseQuickAdapter<BaziResultBean.DetailInfoDTO.SizhuInfoDTO, BaseViewHolder> {
|
||||
private Context mContext;
|
||||
private int mSizhuTypeCode = 100;
|
||||
private CangGanAdapter mCangganAdapter;
|
||||
private ShenshaAdapter mShenshaAdapter;
|
||||
public SizhuAdapter(Context context,int layoutResId,
|
||||
@Nullable List<BaziResultBean.DetailInfoDTO.SizhuInfoDTO> data,
|
||||
int typeCode) {
|
||||
super(layoutResId, data);
|
||||
this.mContext = context;
|
||||
this.mSizhuTypeCode = typeCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder holder, BaziResultBean.DetailInfoDTO.SizhuInfoDTO item) {
|
||||
RecyclerView rvDatas = holder.getView(R.id.rv_canggan);
|
||||
RecyclerView rvShenShaData = holder.getView(R.id.rv_shensha_data);
|
||||
switch (mSizhuTypeCode){
|
||||
case 100: // 年柱
|
||||
holder.setText(R.id.tv_shishen,item.getYear().getTgGod());
|
||||
holder.setText(R.id.tv_tg,item.getYear().getTg());
|
||||
holder.setText(R.id.tv_dz,item.getYear().getDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(item.getYear().getTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(item.getYear().getDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun,item.getYear().getDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo,item.getYear().getDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang,item.getYear().getKw());
|
||||
holder.setText(R.id.tv_nayin,item.getYear().getNy());
|
||||
if(mCangganAdapter == null){
|
||||
mCangganAdapter = new CangGanAdapter(mContext,R.layout.paipan_canggan_item,
|
||||
item.getYear().getCg(), item.getYear().getDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}
|
||||
if(mShenshaAdapter == null){
|
||||
List<String> shenshaList = Arrays.asList(item.getYear().getShensha().split(" "));
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext,R.layout.paipan_shensha_item,shenshaList);
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}
|
||||
break;
|
||||
case 200: // 月柱
|
||||
holder.setText(R.id.tv_shishen,item.getMonth().getTgGod());
|
||||
holder.setText(R.id.tv_tg,item.getMonth().getTg());
|
||||
holder.setText(R.id.tv_dz,item.getMonth().getDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(item.getMonth().getTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(item.getMonth().getDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun,item.getMonth().getDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo,item.getMonth().getDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang,item.getMonth().getKw());
|
||||
holder.setText(R.id.tv_nayin,item.getMonth().getNy());
|
||||
if(mCangganAdapter == null){
|
||||
mCangganAdapter = new CangGanAdapter(mContext,R.layout.paipan_canggan_item,
|
||||
item.getMonth().getCg(), item.getMonth().getDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}
|
||||
if(mShenshaAdapter == null){
|
||||
List<String> shenshaList = Arrays.asList(item.getMonth().getShensha().split(" "));
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext,R.layout.paipan_shensha_item,shenshaList);
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}
|
||||
break;
|
||||
case 300: // 日柱
|
||||
holder.setText(R.id.tv_shishen,item.getDay().getTgGod());
|
||||
holder.setText(R.id.tv_tg,item.getDay().getTg());
|
||||
holder.setText(R.id.tv_dz,item.getDay().getDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(item.getDay().getTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(item.getDay().getDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun,item.getDay().getDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo,item.getDay().getDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang,item.getDay().getKw());
|
||||
holder.setText(R.id.tv_nayin,item.getDay().getNy());
|
||||
if(mCangganAdapter == null){
|
||||
mCangganAdapter = new CangGanAdapter(mContext,R.layout.paipan_canggan_item,
|
||||
item.getDay().getCg(), item.getDay().getDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}
|
||||
if(mShenshaAdapter == null){
|
||||
List<String> shenshaList = Arrays.asList(item.getDay().getShensha().split(" "));
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext,R.layout.paipan_shensha_item,shenshaList);
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}
|
||||
break;
|
||||
case 400: // 时柱
|
||||
holder.setText(R.id.tv_shishen,item.getHour().getTgGod());
|
||||
holder.setText(R.id.tv_tg,item.getHour().getTg());
|
||||
holder.setText(R.id.tv_dz,item.getHour().getDz());
|
||||
holder.setTextColor(R.id.tv_tg, Color.parseColor(FiveElementsHelper.getElementInfo(item.getHour().getTg()).get("color")));
|
||||
holder.setTextColor(R.id.tv_dz, Color.parseColor(FiveElementsHelper.getElementInfo(item.getHour().getDz()).get("color")));
|
||||
holder.setText(R.id.tv_xingyun,item.getHour().getDzStarCs());
|
||||
holder.setText(R.id.tv_zizuo,item.getHour().getDzSelfCs());
|
||||
holder.setText(R.id.tv_kongwang,item.getHour().getKw());
|
||||
holder.setText(R.id.tv_nayin,item.getHour().getNy());
|
||||
if(mCangganAdapter == null){
|
||||
mCangganAdapter = new CangGanAdapter(mContext,R.layout.paipan_canggan_item,
|
||||
item.getHour().getCg(), item.getHour().getDzGod());
|
||||
rvDatas.setAdapter(mCangganAdapter);
|
||||
}
|
||||
if(mShenshaAdapter == null){
|
||||
List<String> shenshaList = Arrays.asList(item.getHour().getShensha().split(" "));
|
||||
mShenshaAdapter = new ShenshaAdapter(mContext,R.layout.paipan_shensha_item,shenshaList);
|
||||
rvShenShaData.setAdapter(mShenshaAdapter);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.ckkj.water.plate.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ViewPagerAdapter extends FragmentStateAdapter {
|
||||
private final List<Fragment> fragmentList;
|
||||
|
||||
public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity, List<Fragment> fragments) {
|
||||
super(fragmentActivity);
|
||||
this.fragmentList = fragments;
|
||||
}
|
||||
|
||||
public ViewPagerAdapter(@NonNull Fragment fragment, List<Fragment> fragments) {
|
||||
super(fragment);
|
||||
this.fragmentList = fragments;
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
return fragmentList.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return fragmentList.size();
|
||||
}
|
||||
}
|
||||
1780
app/src/main/java/com/ckkj/water/plate/entity/BaziPaiPanEntity.java
Normal file
1780
app/src/main/java/com/ckkj/water/plate/entity/BaziPaiPanEntity.java
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,661 @@
|
||||
package com.ckkj.water.plate.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/5
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class BaziResultBean implements Serializable {
|
||||
|
||||
@SerializedName("base_info")
|
||||
private BaseInfoDTO baseInfo;
|
||||
@SerializedName("detail_info")
|
||||
private DetailInfoDTO detailInfo;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class BaseInfoDTO implements Serializable {
|
||||
@SerializedName("sex")
|
||||
private String sex;
|
||||
@SerializedName("name")
|
||||
private String name;
|
||||
@SerializedName("gongli")
|
||||
private String gongli;
|
||||
@SerializedName("nongli")
|
||||
private String nongli;
|
||||
@SerializedName("qiyun")
|
||||
private String qiyun;
|
||||
@SerializedName("jiaoyun")
|
||||
private String jiaoyun;
|
||||
@SerializedName("taiyuan")
|
||||
private String taiyuan;
|
||||
@SerializedName("taiyuan_nayin")
|
||||
private String taiyuanNayin;
|
||||
@SerializedName("taixi")
|
||||
private String taixi;
|
||||
@SerializedName("taixi_nayin")
|
||||
private String taixiNayin;
|
||||
@SerializedName("minggong")
|
||||
private String minggong;
|
||||
@SerializedName("minggong_nayin")
|
||||
private String minggongNayin;
|
||||
@SerializedName("shengong")
|
||||
private String shengong;
|
||||
@SerializedName("shengong_nayin")
|
||||
private String shengongNayin;
|
||||
@SerializedName("shengxiao")
|
||||
private String shengxiao;
|
||||
@SerializedName("xingzuo")
|
||||
private String xingzuo;
|
||||
@SerializedName("siling")
|
||||
private String siling;
|
||||
@SerializedName("jiaoyun_mang")
|
||||
private String jiaoyunMang;
|
||||
@SerializedName("xingxiu")
|
||||
private String xingxiu;
|
||||
@SerializedName("minggua")
|
||||
private MingguaDTO minggua;
|
||||
@SerializedName("wuxing_wangdu")
|
||||
private String wuxingWangdu;
|
||||
@SerializedName("tiangan_liuyi")
|
||||
private String tianganLiuyi;
|
||||
@SerializedName("dizhi_liuyi")
|
||||
private String dizhiLiuyi;
|
||||
@SerializedName("zhengge")
|
||||
private String zhengge;
|
||||
@SerializedName("xiyongshen")
|
||||
private XiyongshenDTO xiyongshen;
|
||||
@SerializedName("wuxing_xiji")
|
||||
private String wuxingXiji;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class MingguaDTO implements Serializable {
|
||||
@SerializedName("minggua_name")
|
||||
private String mingguaName;
|
||||
@SerializedName("minggua_fangwei")
|
||||
private String mingguaFangwei;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class XiyongshenDTO implements Serializable {
|
||||
@SerializedName("qiangruo")
|
||||
private String qiangruo;
|
||||
@SerializedName("xiyongshen")
|
||||
private String xiyongshen;
|
||||
@SerializedName("jishen")
|
||||
private String jishen;
|
||||
@SerializedName("xiyongshen_desc")
|
||||
private String xiyongshenDesc;
|
||||
@SerializedName("jin_number")
|
||||
private Integer jinNumber;
|
||||
@SerializedName("mu_number")
|
||||
private Integer muNumber;
|
||||
@SerializedName("shui_number")
|
||||
private Integer shuiNumber;
|
||||
@SerializedName("huo_number")
|
||||
private Integer huoNumber;
|
||||
@SerializedName("tu_number")
|
||||
private Integer tuNumber;
|
||||
@SerializedName("zidang")
|
||||
private Integer zidang;
|
||||
@SerializedName("yidang")
|
||||
private Integer yidang;
|
||||
@SerializedName("zidang_percent")
|
||||
private String zidangPercent;
|
||||
@SerializedName("yidang_percent")
|
||||
private String yidangPercent;
|
||||
@SerializedName("tonglei")
|
||||
private String tonglei;
|
||||
@SerializedName("yilei")
|
||||
private String yilei;
|
||||
@SerializedName("rizhu_tiangan")
|
||||
private String rizhuTiangan;
|
||||
@SerializedName("jin_score")
|
||||
private Integer jinScore;
|
||||
@SerializedName("mu_score")
|
||||
private Integer muScore;
|
||||
@SerializedName("shui_score")
|
||||
private Integer shuiScore;
|
||||
@SerializedName("huo_score")
|
||||
private Integer huoScore;
|
||||
@SerializedName("tu_score")
|
||||
private Integer tuScore;
|
||||
@SerializedName("jin_score_percent")
|
||||
private String jinScorePercent;
|
||||
@SerializedName("mu_score_percent")
|
||||
private String muScorePercent;
|
||||
@SerializedName("shui_score_percent")
|
||||
private String shuiScorePercent;
|
||||
@SerializedName("huo_score_percent")
|
||||
private String huoScorePercent;
|
||||
@SerializedName("tu_score_percent")
|
||||
private String tuScorePercent;
|
||||
@SerializedName("yinyang")
|
||||
private String yinyang;
|
||||
}
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class DetailInfoDTO implements Serializable {
|
||||
@SerializedName("dayun_info")
|
||||
private List<DayunInfoDTO> dayunInfo;
|
||||
@SerializedName("dayun_born_info")
|
||||
private DayunInfoDTO dayunBornInfo;
|
||||
@SerializedName("sizhu_info")
|
||||
private SizhuInfoDTO sizhuInfo;
|
||||
@SerializedName("taishen_info")
|
||||
private TaishenInfoDTO taishenInfo;
|
||||
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class SizhuInfoDTO implements Serializable {
|
||||
@SerializedName("year")
|
||||
private YearDTO year;
|
||||
@SerializedName("month")
|
||||
private MonthDTO month;
|
||||
@SerializedName("day")
|
||||
private DayDTO day;
|
||||
@SerializedName("hour")
|
||||
private HourDTO hour;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class YearDTO implements Serializable {
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("tg")
|
||||
private String tg;
|
||||
@SerializedName("dz")
|
||||
private String dz;
|
||||
@SerializedName("cg")
|
||||
private List<String> cg;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("kw")
|
||||
private String kw;
|
||||
@SerializedName("ny")
|
||||
private String ny;
|
||||
@SerializedName("wx")
|
||||
private String wx;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class MonthDTO implements Serializable {
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("tg")
|
||||
private String tg;
|
||||
@SerializedName("dz")
|
||||
private String dz;
|
||||
@SerializedName("cg")
|
||||
private List<String> cg;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("kw")
|
||||
private String kw;
|
||||
@SerializedName("ny")
|
||||
private String ny;
|
||||
@SerializedName("wx")
|
||||
private String wx;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class DayDTO implements Serializable {
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("tg")
|
||||
private String tg;
|
||||
@SerializedName("dz")
|
||||
private String dz;
|
||||
@SerializedName("cg")
|
||||
private List<String> cg;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("kw")
|
||||
private String kw;
|
||||
@SerializedName("ny")
|
||||
private String ny;
|
||||
@SerializedName("wx")
|
||||
private String wx;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class HourDTO implements Serializable {
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("tg")
|
||||
private String tg;
|
||||
@SerializedName("dz")
|
||||
private String dz;
|
||||
@SerializedName("cg")
|
||||
private List<String> cg;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("kw")
|
||||
private String kw;
|
||||
@SerializedName("ny")
|
||||
private String ny;
|
||||
@SerializedName("wx")
|
||||
private String wx;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class TaishenInfoDTO implements Serializable {
|
||||
@SerializedName("taiyuan")
|
||||
private TaiyuanDTO taiyuan;
|
||||
@SerializedName("taixi")
|
||||
private TaixiDTO taixi;
|
||||
@SerializedName("minggong")
|
||||
private MinggongDTO minggong;
|
||||
@SerializedName("shengong")
|
||||
private ShengongDTO shengong;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class TaiyuanDTO implements Serializable {
|
||||
@SerializedName("ganzhi")
|
||||
private String ganzhi;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("kongwang")
|
||||
private String kongwang;
|
||||
@SerializedName("changsheng")
|
||||
private String changsheng;
|
||||
@SerializedName("gan")
|
||||
private String gan;
|
||||
@SerializedName("zhi")
|
||||
private String zhi;
|
||||
@SerializedName("dz_cg")
|
||||
private List<String> dzCg;
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("nayin")
|
||||
private String nayin;
|
||||
@SerializedName("wuxing")
|
||||
private String wuxing;
|
||||
@SerializedName("tg_liuyi")
|
||||
private String tgLiuyi;
|
||||
@SerializedName("dz_liuyi")
|
||||
private String dzLiuyi;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class TaixiDTO implements Serializable {
|
||||
@SerializedName("ganzhi")
|
||||
private String ganzhi;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("kongwang")
|
||||
private String kongwang;
|
||||
@SerializedName("changsheng")
|
||||
private String changsheng;
|
||||
@SerializedName("gan")
|
||||
private String gan;
|
||||
@SerializedName("zhi")
|
||||
private String zhi;
|
||||
@SerializedName("dz_cg")
|
||||
private List<String> dzCg;
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("nayin")
|
||||
private String nayin;
|
||||
@SerializedName("wuxing")
|
||||
private String wuxing;
|
||||
@SerializedName("tg_liuyi")
|
||||
private String tgLiuyi;
|
||||
@SerializedName("dz_liuyi")
|
||||
private String dzLiuyi;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class MinggongDTO implements Serializable {
|
||||
@SerializedName("ganzhi")
|
||||
private String ganzhi;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("kongwang")
|
||||
private String kongwang;
|
||||
@SerializedName("changsheng")
|
||||
private String changsheng;
|
||||
@SerializedName("gan")
|
||||
private String gan;
|
||||
@SerializedName("zhi")
|
||||
private String zhi;
|
||||
@SerializedName("dz_cg")
|
||||
private List<String> dzCg;
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("nayin")
|
||||
private String nayin;
|
||||
@SerializedName("wuxing")
|
||||
private String wuxing;
|
||||
@SerializedName("tg_liuyi")
|
||||
private String tgLiuyi;
|
||||
@SerializedName("dz_liuyi")
|
||||
private String dzLiuyi;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class ShengongDTO implements Serializable {
|
||||
@SerializedName("ganzhi")
|
||||
private String ganzhi;
|
||||
@SerializedName("xun")
|
||||
private String xun;
|
||||
@SerializedName("kongwang")
|
||||
private String kongwang;
|
||||
@SerializedName("changsheng")
|
||||
private String changsheng;
|
||||
@SerializedName("gan")
|
||||
private String gan;
|
||||
@SerializedName("zhi")
|
||||
private String zhi;
|
||||
@SerializedName("dz_cg")
|
||||
private List<String> dzCg;
|
||||
@SerializedName("tg_god")
|
||||
private String tgGod;
|
||||
@SerializedName("dz_god")
|
||||
private List<String> dzGod;
|
||||
@SerializedName("dz_star_cs")
|
||||
private String dzStarCs;
|
||||
@SerializedName("dz_self_cs")
|
||||
private String dzSelfCs;
|
||||
@SerializedName("nayin")
|
||||
private String nayin;
|
||||
@SerializedName("wuxing")
|
||||
private String wuxing;
|
||||
@SerializedName("tg_liuyi")
|
||||
private String tgLiuyi;
|
||||
@SerializedName("dz_liuyi")
|
||||
private String dzLiuyi;
|
||||
@SerializedName("shensha")
|
||||
private String shensha;
|
||||
}
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class DayunInfoDTO implements Serializable {
|
||||
@SerializedName("dayun_is_tongxian")
|
||||
private boolean isTongXian = false;
|
||||
@SerializedName("dayun_tongxian")
|
||||
private String dayunTongxian;
|
||||
@SerializedName("dayun_index")
|
||||
private Integer dayunIndex;
|
||||
@SerializedName("dayun_start_year")
|
||||
private Integer dayunStartYear;
|
||||
@SerializedName("dayun_start_age")
|
||||
private Integer dayunStartAge;
|
||||
@SerializedName("dayun_end_year")
|
||||
private Integer dayunEndYear;
|
||||
@SerializedName("dayun_end_age")
|
||||
private Integer dayunEndAge;
|
||||
@SerializedName("dayun_start_ganzhi")
|
||||
private String dayunStartGanzhi;
|
||||
@SerializedName("dayun_xun")
|
||||
private String dayunXun;
|
||||
@SerializedName("dayun_kongwang")
|
||||
private String dayunKongwang;
|
||||
@SerializedName("dayun_shishen")
|
||||
private String dayunShishen;
|
||||
@SerializedName("dayun_changsheng")
|
||||
private String dayunChangsheng;
|
||||
@SerializedName("dayun_year_tg")
|
||||
private String dayunYearTg;
|
||||
@SerializedName("dayun_year_dz")
|
||||
private String dayunYearDz;
|
||||
@SerializedName("dayun_year_cg")
|
||||
private List<String> dayunYearCg;
|
||||
@SerializedName("dayun_year_tg_god")
|
||||
private String dayunYearTgGod;
|
||||
@SerializedName("dayun_year_dz_god")
|
||||
private List<String> dayunYearDzGod;
|
||||
@SerializedName("dayun_dz_star_cs")
|
||||
private String dayunDzStarCs;
|
||||
@SerializedName("dayun_dz_self_cs")
|
||||
private String dayunDzSelfCs;
|
||||
@SerializedName("dayun_nayin")
|
||||
private String dayunNayin;
|
||||
@SerializedName("dayun_wuxing")
|
||||
private String dayunWuxing;
|
||||
@SerializedName("dayun_tg_liuyi")
|
||||
private String dayunTgLiuyi;
|
||||
@SerializedName("dayun_dz_liuyi")
|
||||
private String dayunDzLiuyi;
|
||||
@SerializedName("liunian_info")
|
||||
private List<LiunianInfoDTO> liunianInfo;
|
||||
@SerializedName("xiaoyun_info")
|
||||
private List<XiaoyunInfoDTO> xiaoyunInfo;
|
||||
@SerializedName("dayun_shensha")
|
||||
private String dayunShensha;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class LiunianInfoDTO implements Serializable {
|
||||
@SerializedName("liunian_index")
|
||||
private Integer liunianIndex;
|
||||
@SerializedName("liunian_year")
|
||||
private Integer liunianYear;
|
||||
@SerializedName("liunian_age")
|
||||
private Integer liunianAge;
|
||||
@SerializedName("liunian_ganzhi")
|
||||
private String liunianGanzhi;
|
||||
@SerializedName("liunian_xun")
|
||||
private String liunianXun;
|
||||
@SerializedName("liunian_kongwang")
|
||||
private String liunianKongwang;
|
||||
@SerializedName("liunian_shishen")
|
||||
private String liunianShishen;
|
||||
@SerializedName("liunian_changsheng")
|
||||
private String liunianChangsheng;
|
||||
@SerializedName("liunian_jieqi")
|
||||
private List<LiunianJieqiDTO> liunianJieqi;
|
||||
@SerializedName("liunian_year_tg")
|
||||
private String liunianYearTg;
|
||||
@SerializedName("liunian_year_dz")
|
||||
private String liunianYearDz;
|
||||
@SerializedName("liunian_year_cg")
|
||||
private List<String> liunianYearCg;
|
||||
@SerializedName("liunian_tg_god")
|
||||
private String liunianTgGod;
|
||||
@SerializedName("liunian_dz_god")
|
||||
private List<String> liunianDzGod;
|
||||
@SerializedName("liunian_dz_star_cs")
|
||||
private String liunianDzStarCs;
|
||||
@SerializedName("liunian_dz_self_cs")
|
||||
private String liunianDzSelfCs;
|
||||
@SerializedName("liunian_nayin")
|
||||
private String liunianNayin;
|
||||
@SerializedName("liunian_wuxing")
|
||||
private String liunianWuxing;
|
||||
@SerializedName("liunian_tg_liuyi")
|
||||
private String liunianTgLiuyi;
|
||||
@SerializedName("liunian_dz_liuyi")
|
||||
private String liunianDzLiuyi;
|
||||
@SerializedName("liunian_shensha")
|
||||
private String liunianShensha;
|
||||
@SerializedName("liuyue_info")
|
||||
private List<LiuyueInfoDTO> liuyueInfo;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class LiunianJieqiDTO implements Serializable {
|
||||
@SerializedName("jieqi_name")
|
||||
private String jieqiName;
|
||||
@SerializedName("jieqi_solar_ymdhms")
|
||||
private String jieqiSolarYmdhms;
|
||||
@SerializedName("jieqi_lunar_ymdhms_isleap")
|
||||
private String jieqiLunarYmdhmsIsleap;
|
||||
@SerializedName("jieqi_lunar_ymdhms")
|
||||
private String jieqiLunarYmdhms;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class LiuyueInfoDTO implements Serializable {
|
||||
@SerializedName("liuyue_index")
|
||||
private Integer liuyueIndex;
|
||||
@SerializedName("liuyue_month")
|
||||
private String liuyueMonth;
|
||||
@SerializedName("liuyue_ganzhi")
|
||||
private String liuyueGanzhi;
|
||||
@SerializedName("liuyue_xun")
|
||||
private String liuyueXun;
|
||||
@SerializedName("liuyue_kongwang")
|
||||
private String liuyueKongwang;
|
||||
@SerializedName("liuyue_shishen")
|
||||
private String liuyueShishen;
|
||||
@SerializedName("liuyue_changsheng")
|
||||
private String liuyueChangsheng;
|
||||
@SerializedName("liuyue_month_tg")
|
||||
private String liuyueMonthTg;
|
||||
@SerializedName("liuyue_month_dz")
|
||||
private String liuyueMonthDz;
|
||||
@SerializedName("liuyue_month_cg")
|
||||
private List<String> liuyueMonthCg;
|
||||
@SerializedName("liuyue_month_tg_god")
|
||||
private String liuyueMonthTgGod;
|
||||
@SerializedName("liuyue_month_dz_god")
|
||||
private List<String> liuyueMonthDzGod;
|
||||
@SerializedName("liuyue_dz_star_cs")
|
||||
private String liuyueDzStarCs;
|
||||
@SerializedName("liuyue_dz_self_cs")
|
||||
private String liuyueDzSelfCs;
|
||||
@SerializedName("liuyue_nayin")
|
||||
private String liuyueNayin;
|
||||
@SerializedName("liuyue_wuxing")
|
||||
private String liuyueWuxing;
|
||||
@SerializedName("liuyue_tg_liuyi")
|
||||
private String liuyueTgLiuyi;
|
||||
@SerializedName("liuyue_dz_liuyi")
|
||||
private String liuyueDzLiuyi;
|
||||
@SerializedName("liuyue_shensha")
|
||||
private String liuyueShensha;
|
||||
}
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class XiaoyunInfoDTO implements Serializable {
|
||||
@SerializedName("xiaoyun_index")
|
||||
private Integer xiaoyunIndex;
|
||||
@SerializedName("xiaoyun_year")
|
||||
private Integer xiaoyunYear;
|
||||
@SerializedName("xiaoyun_age")
|
||||
private Integer xiaoyunAge;
|
||||
@SerializedName("xiaoyun_ganzhi")
|
||||
private String xiaoyunGanzhi;
|
||||
@SerializedName("xiaoyun_xun")
|
||||
private String xiaoyunXun;
|
||||
@SerializedName("xiaoyun_kongwang")
|
||||
private String xiaoyunKongwang;
|
||||
@SerializedName("xiaoyun_shishen")
|
||||
private String xiaoyunShishen;
|
||||
@SerializedName("xiaoyun_changsheng")
|
||||
private String xiaoyunChangsheng;
|
||||
@SerializedName("xiaoyun_year_tg")
|
||||
private String xiaoyunYearTg;
|
||||
@SerializedName("xiaoyun_year_dz")
|
||||
private String xiaoyunYearDz;
|
||||
@SerializedName("xiaoyun_year_cg")
|
||||
private List<String> xiaoyunYearCg;
|
||||
@SerializedName("xiaoyun_tg_god")
|
||||
private String xiaoyunTgGod;
|
||||
@SerializedName("xiaoyun_dz_god")
|
||||
private List<String> xiaoyunDzGod;
|
||||
@SerializedName("xiaoyun_dz_star_cs")
|
||||
private String xiaoyunDzStarCs;
|
||||
@SerializedName("xiaoyun_dz_self_cs")
|
||||
private String xiaoyunDzSelfCs;
|
||||
@SerializedName("xiaoyun_nayin")
|
||||
private String xiaoyunNayin;
|
||||
@SerializedName("xiaoyun_wuxing")
|
||||
private String xiaoyunWuxing;
|
||||
@SerializedName("xiaoyun_tg_liuyi")
|
||||
private String xiaoyunTgLiuyi;
|
||||
@SerializedName("xiaoyun_dz_liuyi")
|
||||
private String xiaoyunDzLiuyi;
|
||||
@SerializedName("xiaoyun_shensha")
|
||||
private String xiaoyunShensha;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.ckkj.water.plate.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/11
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class BaziSaveSuccessEntity implements Serializable {
|
||||
|
||||
@SerializedName("recordId")
|
||||
private String recordId;
|
||||
@SerializedName("savedData")
|
||||
private SavedDataDTO savedData;
|
||||
@SerializedName("message")
|
||||
private String message;
|
||||
@SerializedName("saveTime")
|
||||
private String saveTime;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class SavedDataDTO {
|
||||
@SerializedName("recordId")
|
||||
private String recordId;
|
||||
@SerializedName("birthPlace")
|
||||
private String birthPlace;
|
||||
@SerializedName("gender")
|
||||
private String gender;
|
||||
@SerializedName("yinLiBirthTime")
|
||||
private String yinLiBirthTime;
|
||||
@SerializedName("siZhu")
|
||||
private SiZhuDTO siZhu;
|
||||
@SerializedName("name")
|
||||
private String name;
|
||||
@SerializedName("yangLiBirthTime")
|
||||
private String yangLiBirthTime;
|
||||
@SerializedName("openSolarTime")
|
||||
private String openSolarTime;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class SiZhuDTO {
|
||||
@SerializedName("yueZhu")
|
||||
private String yueZhu;
|
||||
@SerializedName("shiZhu")
|
||||
private String shiZhu;
|
||||
@SerializedName("riZhu")
|
||||
private String riZhu;
|
||||
@SerializedName("nianZhu")
|
||||
private String nianZhu;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.ckkj.water.plate.entity;
|
||||
|
||||
public class PaipanCache {
|
||||
private static BaziResultBean cachedResult;
|
||||
|
||||
public static void set(BaziResultBean result) {
|
||||
cachedResult = result;
|
||||
}
|
||||
|
||||
public static BaziResultBean get() {
|
||||
return cachedResult;
|
||||
}
|
||||
|
||||
public static void clear() {
|
||||
cachedResult = null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package com.ckkj.water.plate.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/8/9
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class PaipanHistoryEntity implements Serializable {
|
||||
|
||||
@SerializedName("total")
|
||||
private Integer total;
|
||||
@SerializedName("pages")
|
||||
private Integer pages;
|
||||
@SerializedName("records")
|
||||
private List<RecordsDTO> records;
|
||||
@SerializedName("hasNextPage")
|
||||
private Boolean hasNextPage;
|
||||
@SerializedName("pageSize")
|
||||
private Integer pageSize;
|
||||
@SerializedName("hasPreviousPage")
|
||||
private Boolean hasPreviousPage;
|
||||
@SerializedName("userId")
|
||||
private Long userId;
|
||||
@SerializedName("pageNum")
|
||||
private Integer pageNum;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class RecordsDTO implements Serializable{
|
||||
@SerializedName("id")
|
||||
private String id;
|
||||
@SerializedName("userId")
|
||||
private Long userId;
|
||||
@SerializedName("name")
|
||||
private String name;
|
||||
@SerializedName("gender")
|
||||
private String gender;
|
||||
@SerializedName("birthType")
|
||||
private String birthType;
|
||||
@SerializedName("yangLiBirthTime")
|
||||
private String yangLiBirthTime;
|
||||
@SerializedName("yinLiBirthTime")
|
||||
private String yinLiBirthTime;
|
||||
@SerializedName("birthPlace")
|
||||
private String birthPlace;
|
||||
@SerializedName("openSolarTime")
|
||||
private String openSolarTime;
|
||||
@SerializedName("nianZhu")
|
||||
private String nianZhu;
|
||||
@SerializedName("yueZhu")
|
||||
private String yueZhu;
|
||||
@SerializedName("riZhu")
|
||||
private String riZhu;
|
||||
@SerializedName("shiZhu")
|
||||
private String shiZhu;
|
||||
@SerializedName("apiStatus")
|
||||
private Integer apiStatus;
|
||||
@SerializedName("apiMessage")
|
||||
private String apiMessage;
|
||||
@SerializedName("requestIp")
|
||||
private String requestIp;
|
||||
@SerializedName("remark")
|
||||
private Object remark;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.ckkj.water.plate.mvp;
|
||||
|
||||
import com.ckkj.water.base.IView;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.plate.entity.BaziSaveSuccessEntity;
|
||||
import com.ckkj.water.plate.entity.PaipanHistoryEntity;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/7/30
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class PlateContract {
|
||||
public interface CallBack<T> {
|
||||
void success(T msg);
|
||||
void fail(String msg);
|
||||
}
|
||||
public interface DataModel{
|
||||
//保存八字排盘结果
|
||||
void saveUserBirthInfo(JSONObject json, CallBack callBack);
|
||||
//开始排盘
|
||||
void startPaiPanByYfjApi(Map<String,Object> map , CallBack callBack);
|
||||
//获取排盘结果
|
||||
void getPaipanHistoryList(Map<String,Object> map, CallBack callBack);
|
||||
//删除记录
|
||||
void deleteRecordByID(Map<String,Object> map, CallBack callBack);
|
||||
//根据八字排盘结果,ai 解析
|
||||
void aiParseBaziResult(JSONObject json, CallBack callBack);
|
||||
//发送消息给 AI
|
||||
void sendMsgToAi(JSONObject json, AiStreamCallback callBack);
|
||||
}
|
||||
|
||||
public interface AiStreamCallback {
|
||||
void onMessage(String messageChunk); // 每次返回一段内容
|
||||
void onError(String error);
|
||||
void onComplete(String complateContent); // 结束
|
||||
void onSessionReceived(String sessionId); // 新增:接收sessionId
|
||||
void loginLost();
|
||||
}
|
||||
|
||||
public interface PlateView extends IView {
|
||||
//排盘成功
|
||||
void getPaipanResult(BaziResultBean bean);
|
||||
//保存八字成功
|
||||
void saveBaziResultSuccess(BaziSaveSuccessEntity bean);
|
||||
//历史记录
|
||||
void getHistorySuccess(PaipanHistoryEntity entity);
|
||||
//删除成功
|
||||
void deletePaipanHistorySuccess(int pos);
|
||||
// 新增流式回调方法
|
||||
void onStreamMessageReceived(String messageChunk);
|
||||
//完成
|
||||
void onStreamComplete(String complateMsg);
|
||||
//提交举报完成
|
||||
void commitReportSuccess(BaseBean bean);
|
||||
}
|
||||
}
|
||||
424
app/src/main/java/com/ckkj/water/plate/mvp/PlateImpl.java
Normal file
424
app/src/main/java/com/ckkj/water/plate/mvp/PlateImpl.java
Normal file
@@ -0,0 +1,424 @@
|
||||
package com.ckkj.water.plate.mvp;
|
||||
|
||||
import static android.content.ContentValues.TAG;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
|
||||
import com.ckkj.water.AppConfig;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.network.BaseYfjApiBean;
|
||||
import com.ckkj.water.network.NetWorkManager;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.plate.entity.BaziSaveSuccessEntity;
|
||||
import com.ckkj.water.plate.entity.PaipanHistoryEntity;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Map;
|
||||
|
||||
import io.reactivex.Observer;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.annotations.NonNull;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Callback;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.json.JSONException;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/7/30
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class PlateImpl implements PlateContract.DataModel{
|
||||
|
||||
/**
|
||||
* 保存八字排盘记录
|
||||
* @param json
|
||||
* @param callBack
|
||||
*/
|
||||
@Override
|
||||
public void saveUserBirthInfo(JSONObject json, PlateContract.CallBack callBack) {
|
||||
try {
|
||||
NetWorkManager.getRequest().startPaipan(NetWorkManager.getToken(), NetWorkManager.toRequestBody(json))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.unsubscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<BaseBean<BaziSaveSuccessEntity>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseBean<BaziSaveSuccessEntity> bean) {
|
||||
if (bean.getCode() == 200) {
|
||||
callBack.success(bean.getData());
|
||||
} else {
|
||||
callBack.fail(bean.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
callBack.fail(e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 排盘数据,调用三方 api
|
||||
* @param map
|
||||
* @param callBack
|
||||
*/
|
||||
@Override
|
||||
public void startPaiPanByYfjApi(Map<String, Object> map, PlateContract.CallBack callBack) {
|
||||
try {
|
||||
// 使用getNoBaseUrlRequest()调用第三方API,因为API URL是完整的
|
||||
NetWorkManager.getNoBaseUrlRequest().startPaipanByYfj(NetWorkManager.getToken(), map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.unsubscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<BaseYfjApiBean<BaziResultBean>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseYfjApiBean<BaziResultBean> bean) {
|
||||
if (bean.getErrcode() == 0) {
|
||||
// 成功返回数据
|
||||
callBack.success(bean.getData());
|
||||
} else {
|
||||
// API返回错误
|
||||
callBack.fail(bean.getErrmsg());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
callBack.fail(e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
callBack.fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 排盘历史记录
|
||||
* @param map
|
||||
* @param callBack
|
||||
*/
|
||||
@Override
|
||||
public void getPaipanHistoryList(Map<String, Object> map, PlateContract.CallBack callBack) {
|
||||
try {
|
||||
NetWorkManager.getRequest().getPaipanHistoryList(NetWorkManager.getToken())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.unsubscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<BaseBean<PaipanHistoryEntity>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseBean<PaipanHistoryEntity> bean) {
|
||||
if(bean.getCode() == 200){
|
||||
callBack.success(bean.getData());
|
||||
}else{
|
||||
callBack.fail(bean.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
callBack.fail(e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
* @param map
|
||||
* @param callBack
|
||||
*/
|
||||
@Override
|
||||
public void deleteRecordByID(Map<String, Object> map, PlateContract.CallBack callBack) {
|
||||
try {
|
||||
NetWorkManager.getRequest().deletePaipanRecordById(NetWorkManager.getToken(),map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.unsubscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<BaseBean>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseBean bean) {
|
||||
if(bean.getCode() == 200){
|
||||
callBack.success(bean);
|
||||
}else{
|
||||
callBack.fail(bean.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
callBack.fail(e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 八字排盘结果,AI 解析
|
||||
* @param json
|
||||
* @param callBack
|
||||
*/
|
||||
@Override
|
||||
public void aiParseBaziResult(JSONObject json, PlateContract.CallBack callBack) {
|
||||
try {
|
||||
NetWorkManager.getRequest().aiParesBaziResult(NetWorkManager.getToken(), NetWorkManager.toRequestBody(json))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.unsubscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<BaseBean>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseBean bean) {
|
||||
if (bean.getCode() == 200) {
|
||||
callBack.success(bean.getData());
|
||||
} else {
|
||||
callBack.fail(bean.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
callBack.fail(e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* AI解盘
|
||||
* @param json
|
||||
* @param callBack
|
||||
*/
|
||||
private final OkHttpClient client = new OkHttpClient();
|
||||
private Call currentCall = null; // 新增:保存当前请求的Call对象
|
||||
private volatile boolean isRequestStopped = false; // 新增:标记是否已停止请求
|
||||
@Override
|
||||
public void sendMsgToAi(JSONObject json, PlateContract.AiStreamCallback callBack) {
|
||||
try {
|
||||
String finalUrl = AppConfig.BASE_URL + "mobile/paiPan/ai";
|
||||
Log.d(TAG, "Request URL: " + finalUrl);
|
||||
|
||||
Request request = new Request.Builder()
|
||||
.addHeader("Authorization", "Bearer " + AppConfig.USER_TOKEN)
|
||||
.post(NetWorkManager.toRequestBody(json))
|
||||
.url(finalUrl)
|
||||
.build();
|
||||
|
||||
currentCall = client.newCall(request);
|
||||
isRequestStopped = false;
|
||||
|
||||
currentCall.enqueue(new Callback() {
|
||||
@Override
|
||||
public void onFailure(Call call, IOException e) {
|
||||
if (isRequestStopped) return; // 如果已停止,不处理失败回调
|
||||
new Handler(Looper.getMainLooper()).post(() -> {
|
||||
if (callBack != null) callBack.onError(e.getMessage());
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(Call call, Response response) {
|
||||
if (isRequestStopped) return;
|
||||
|
||||
if (!response.isSuccessful()) {
|
||||
new Handler(Looper.getMainLooper()).post(() -> {
|
||||
if (callBack != null) callBack.onError("请求失败: " + response.code());
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
InputStream inputStream = response.body().byteStream();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
|
||||
|
||||
try {
|
||||
// 处理SSE流式数据
|
||||
handleSSEStream(reader, callBack);
|
||||
} catch (Exception e) {
|
||||
new Handler(Looper.getMainLooper()).post(() -> {
|
||||
if (callBack != null) callBack.onError("解析异常: " + e.getMessage());
|
||||
});
|
||||
} finally {
|
||||
try {
|
||||
reader.close();
|
||||
response.close();
|
||||
} catch (IOException ignored) {}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
} catch (Exception e) {
|
||||
new Handler(Looper.getMainLooper()).post(() -> {
|
||||
if (callBack != null) callBack.onError("请求异常: " + e.getMessage());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理SSE流式数据
|
||||
*/
|
||||
private void handleSSEStream(BufferedReader reader, PlateContract.AiStreamCallback callBack) throws IOException {
|
||||
String line;
|
||||
StringBuilder currentEvent = new StringBuilder();
|
||||
String currentEventType = null;
|
||||
|
||||
while ((line = reader.readLine()) != null && !isRequestStopped) {
|
||||
if (line.trim().isEmpty()) {
|
||||
// 空行表示一个事件结束,处理当前事件
|
||||
if (currentEventType != null && currentEvent.length() > 0) {
|
||||
processEvent(currentEventType, currentEvent.toString(), callBack);
|
||||
currentEvent.setLength(0);
|
||||
currentEventType = null;
|
||||
}
|
||||
} else if (line.startsWith("event:")) {
|
||||
// 事件类型
|
||||
currentEventType = line.substring(6).trim();
|
||||
} else if (line.startsWith("data:")) {
|
||||
// 事件数据
|
||||
String data = line.substring(5).trim();
|
||||
currentEvent.append(data);
|
||||
}
|
||||
}
|
||||
|
||||
// 处理最后一个事件
|
||||
if (currentEventType != null && currentEvent.length() > 0) {
|
||||
processEvent(currentEventType, currentEvent.toString(), callBack);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理单个事件
|
||||
*/
|
||||
private void processEvent(String eventType, String data, PlateContract.AiStreamCallback callBack) {
|
||||
new Handler(Looper.getMainLooper()).post(() -> {
|
||||
try {
|
||||
switch (eventType) {
|
||||
case "start":
|
||||
// 开始事件,可以在这里做一些初始化
|
||||
Log.d(TAG, "AI解盘开始: " + data);
|
||||
break;
|
||||
|
||||
case "paiPanInfo":
|
||||
// 排盘信息事件
|
||||
Log.d(TAG, "排盘信息: " + data);
|
||||
break;
|
||||
|
||||
case "api-info":
|
||||
// API信息事件
|
||||
Log.d(TAG, "API信息: " + data);
|
||||
break;
|
||||
|
||||
case "chunk":
|
||||
// 内容块事件,这是主要的文本内容
|
||||
try {
|
||||
JSONObject chunkData = new JSONObject(data);
|
||||
String content = chunkData.optString("content", "");
|
||||
boolean hasNewline = chunkData.optBoolean("hasNewline", false);
|
||||
boolean isMarkdown = chunkData.optBoolean("isMarkdown", false);
|
||||
|
||||
// 发送内容块到回调
|
||||
if (callBack != null && !content.isEmpty()) {
|
||||
callBack.onMessage(content);
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
Log.e(TAG, "解析chunk数据失败: " + e.getMessage());
|
||||
}
|
||||
break;
|
||||
|
||||
case "request-id":
|
||||
// 请求ID事件
|
||||
Log.d(TAG, "请求ID: " + data);
|
||||
break;
|
||||
|
||||
case "complete":
|
||||
// 完成事件
|
||||
Log.d(TAG, "AI解盘完成: " + data);
|
||||
if (callBack != null) {
|
||||
callBack.onComplete(data);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
Log.d(TAG, "未知事件类型: " + eventType + ", 数据: " + data);
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "处理事件失败: " + e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止当前请求
|
||||
*/
|
||||
public void stopCurrentRequest() {
|
||||
isRequestStopped = true;
|
||||
if (currentCall != null && !currentCall.isCanceled()) {
|
||||
currentCall.cancel();
|
||||
currentCall = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
228
app/src/main/java/com/ckkj/water/plate/mvp/PlatePresenter.java
Normal file
228
app/src/main/java/com/ckkj/water/plate/mvp/PlatePresenter.java
Normal file
@@ -0,0 +1,228 @@
|
||||
package com.ckkj.water.plate.mvp;
|
||||
|
||||
import com.ckkj.water.base.BasePresenter;
|
||||
import com.ckkj.water.chat.mvp.IndexContract;
|
||||
import com.ckkj.water.chat.mvp.IndexImpl;
|
||||
import com.ckkj.water.fate.entity.CityDataEntity;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.plate.entity.BaziResultBean;
|
||||
import com.ckkj.water.plate.entity.BaziSaveSuccessEntity;
|
||||
import com.ckkj.water.plate.entity.PaipanHistoryEntity;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2025/7/30
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
public class PlatePresenter extends BasePresenter<PlateContract.PlateView> {
|
||||
private PlateImpl impl;
|
||||
|
||||
public PlatePresenter(PlateImpl impl) {
|
||||
this.impl = impl;
|
||||
}
|
||||
|
||||
/**
|
||||
* 排盘,直接调用缘份居 Api
|
||||
* @param map
|
||||
*/
|
||||
public void startPaiPan(Map<String, Object> map) {
|
||||
impl.startPaiPanByYfjApi(map, new PlateContract.CallBack<BaziResultBean>() {
|
||||
@Override
|
||||
public void success(BaziResultBean entity) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().getPaipanResult(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fail(String msg) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().showError(msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传八字结果
|
||||
*
|
||||
* @param result
|
||||
* @param cityData
|
||||
* @param timeType
|
||||
*/
|
||||
public void uploadBaziResult(BaziResultBean result, CityDataEntity cityData, int timeType) {
|
||||
try {
|
||||
BaziResultBean.BaseInfoDTO baseInfoDTO = result.getBaseInfo();
|
||||
BaziResultBean.DetailInfoDTO.SizhuInfoDTO sizhuInfoDTO = result.getDetailInfo().getSizhuInfo();
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("name",baseInfoDTO.getName());
|
||||
json.put("gender",baseInfoDTO.getSex().equals("乾造")? "0" : "1");
|
||||
json.put("birthType",timeType == 2001 ? "1":"0");
|
||||
json.put("yangLiBirthTime",baseInfoDTO.getGongli());
|
||||
json.put("yinLiBirthTime",baseInfoDTO.getNongli());
|
||||
json.put("birthPlace",cityData == null ? "北京市": cityData.getCityName());
|
||||
json.put("province",cityData == null ? "北京市": cityData.getProvinceName());
|
||||
json.put("city",cityData == null ? "北京": cityData.getCityName());
|
||||
json.put("openSolarTime","2");
|
||||
json.put("nianZhu",sizhuInfoDTO.getYear().getTg() + "," + sizhuInfoDTO.getYear().getDz());
|
||||
json.put("yueZhu",sizhuInfoDTO.getMonth().getTg() + "," + sizhuInfoDTO.getMonth().getDz());
|
||||
json.put("riZhu",sizhuInfoDTO.getDay().getTg() + "," + sizhuInfoDTO.getDay().getDz());
|
||||
json.put("shiZhu",sizhuInfoDTO.getHour().getTg() + "," + sizhuInfoDTO.getHour().getDz());
|
||||
impl.saveUserBirthInfo(json, new PlateContract.CallBack<BaziSaveSuccessEntity>() {
|
||||
@Override
|
||||
public void success(BaziSaveSuccessEntity bean) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().saveBaziResultSuccess(bean);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fail(String msg) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().showError(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (JSONException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取历史运势
|
||||
* @param page
|
||||
*/
|
||||
public void getHistoryDatas(int page) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("pageNum", page);
|
||||
map.put("pageSize", 10);
|
||||
impl.getPaipanHistoryList(map, new PlateContract.CallBack<PaipanHistoryEntity>() {
|
||||
|
||||
@Override
|
||||
public void success(PaipanHistoryEntity entity) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().getHistorySuccess(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fail(String msg) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().showError(msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
* @param id
|
||||
*/
|
||||
public void deleteRecordByID(String id,int pos) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("recordId", id);
|
||||
impl.deleteRecordByID(map, new PlateContract.CallBack<BaseBean>() {
|
||||
@Override
|
||||
public void success(BaseBean bean) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().deletePaipanHistorySuccess(pos);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fail(String msg) {
|
||||
if(PlatePresenter.this.getView() != null){
|
||||
PlatePresenter.this.getView().showError(msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* ai 分析八字
|
||||
* @param mSaveEntity
|
||||
*/
|
||||
public void AiParseBaziResult(BaziSaveSuccessEntity mSaveEntity) {
|
||||
try {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("resultId", mSaveEntity.getRecordId());
|
||||
impl.sendMsgToAi(json, new PlateContract.AiStreamCallback() {
|
||||
@Override
|
||||
public void onMessage(String messageChunk) {
|
||||
if (PlatePresenter.this.getView() != null) {
|
||||
PlatePresenter.this.getView().onStreamMessageReceived(messageChunk);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String error) {
|
||||
if (PlatePresenter.this.getView() != null) {
|
||||
PlatePresenter.this.getView().showError(error);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete(String complateContent) {
|
||||
if (PlatePresenter.this.getView() != null) {
|
||||
PlatePresenter.this.getView().onStreamComplete(complateContent);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSessionReceived(String sessionId) {
|
||||
// 这个回调在当前场景下可能不需要,但保留接口一致性
|
||||
// Log.d("PlatePresenter", "Session received: " + sessionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loginLost() {
|
||||
if (PlatePresenter.this.getView() != null) {
|
||||
// 处理登录失效的情况
|
||||
// 这里可以根据需要跳转到登录页面
|
||||
// Log.w("PlatePresenter", "Login lost");
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (JSONException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 举报
|
||||
* @param reason
|
||||
*/
|
||||
public void commitReport(String reason) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("content", reason);
|
||||
new IndexImpl().commitReport(map, new IndexContract.CallBack<BaseBean>() {
|
||||
@Override
|
||||
public void success(BaseBean bean) {
|
||||
if (PlatePresenter.this.getView() != null) {
|
||||
PlatePresenter.this.getView().commitReportSuccess(bean);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fail(String msg) {
|
||||
if (PlatePresenter.this.getView() != null) {
|
||||
PlatePresenter.this.getView().showError(msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user