This commit is contained in:
fengjignqi
2026-05-16 16:19:39 +08:00
commit 1b1575eb8a
1632 changed files with 242221 additions and 0 deletions

View File

@@ -0,0 +1,143 @@
package com.ckkj.water.mine;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
import com.gyf.immersionbar.ImmersionBar;
import com.ckkj.water.AppConfig;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.databinding.ChangePhoneActivityBinding;
import com.ckkj.water.login.LoginActivity;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ActivityManager;
import com.ckkj.water.utils.manager.MingDengUserInfoManager;
import com.ckkj.water.utils.number.PhoneNumberUtils;
import com.ckkj.water.utils.show.ToastUtil;
import java.util.List;
/**
* @Description TODO
* @systemUser 86133
* @Author FengJingQi
* @Date 04-08-2025 周二 14:03
*/
public class ChangePhoneActivity extends BaseActivity<ChangePhoneActivityBinding, MinePresenter> implements MineContract.MineView {
@Override
public MinePresenter createPresenter() {
return new MinePresenter(new MineImpl());
}
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includeTitle.tvTitle.setText("更换手机号");
viewBinding.tvUserPhone.setText(MingDengUserInfoManager.getInstance().getUserInfo().getMobile());
initListener();
}
private void initListener() {
setClick(viewBinding.includeTitle.imgBack);
setClick(viewBinding.tvGetCode);
setClick(viewBinding.tvCommit);
}
private void setClick(View view) {
view.setOnClickListener(this::onClick);
}
public void onClick(View v) {
switch (v.getId()){
case R.id.img_back:
finish();
break;
case R.id.tv_get_code:
if(TextUtils.isEmpty(viewBinding.edPhoneNum.getText().toString().trim())){
ToastUtil.showShort(mContext,"请填写手机号码");
return;
}
if(!PhoneNumberUtils.checkPhoneNum(viewBinding.edPhoneNum.getText().toString().trim())){
ToastUtil.showShort(mContext,"请填写正确的手机号码");
return;
}
showLoadingDialog();
break;
case R.id.tv_commit:
if(TextUtils.isEmpty(viewBinding.edPhoneNum.getText().toString().trim())){
ToastUtil.showShort(mContext,"请填写手机号码");
return;
}
if(!PhoneNumberUtils.checkPhoneNum(viewBinding.edPhoneNum.getText().toString().trim())){
ToastUtil.showShort(mContext,"请填写正确的手机号码");
return;
}
if(TextUtils.isEmpty(viewBinding.edVerCode.getText().toString().trim())){
ToastUtil.showShort(mContext,"请填写验证码");
return;
}
if(viewBinding.edVerCode.getText().toString().trim().length() < 6){
ToastUtil.showShort(mContext,"请填写6位验证码");
return;
}
break;
}
}
private CountDownTimer cdTimer = new CountDownTimer(60000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
viewBinding.tvGetCode.setText("(" + millisUntilFinished / 1000 + ")秒后重发");
viewBinding.tvGetCode.setSelected(true);
viewBinding.tvGetCode.setClickable(false);
viewBinding.tvGetCode.setTextColor(mContext.getColor(R.color.color_c8c8c8));
}
@Override
public void onFinish() {
viewBinding.tvGetCode.setText("重新发送");
viewBinding.tvGetCode.setSelected(false);
viewBinding.tvGetCode.setClickable(true);
viewBinding.tvGetCode.setTextColor(mContext.getColor(R.color.color_zhu));
}
};
@Override
public void showError(String message) {
hideDialogLoading();
ToastUtil.showShort(mContext,message);
}
@Override
public void logOut(BaseBean bean) {
}
}

View File

@@ -0,0 +1,83 @@
package com.ckkj.water.mine;
import static android.view.View.INVISIBLE;
import android.os.Bundle;
import android.view.View;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.databinding.MineFragmentBinding;
import com.ckkj.water.databinding.MineFragmentLayoutBinding;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.gyf.immersionbar.ImmersionBar;
import java.util.List;
/**
* @author fengxiaoyang
* @date 2026/5/16
* @description TODO: 个人中心
*/
public class MineCenterFragment extends BaseFragment<MineFragmentLayoutBinding, MinePresenter>
implements MineContract.MineView {
@Override
public void initData(Bundle state) {
ImmersionBar.with(mContext)
.statusBarColor(R.color.white)
.statusBarDarkFont(true)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.imgBack.setVisibility(INVISIBLE);
viewBinding.includedTitle.tvTitle.setText(getString(R.string.mine_center_title));
initListener();
}
private void initListener() {
setClick(viewBinding.imgAvatar);
setClick(viewBinding.linearPsdManage);
}
private void setClick(View view) {
view.setOnClickListener(this::onClick);
}
public void onClick(View v){
switch (v.getId()){
case R.id.img_avatar:
goTo(mContext, MineInfomationActivity.class,null);
break;
case R.id.linear_psd_manage:
goTo(mContext, PsdManageActivity.class,null);
break;
}
}
@Override
public MinePresenter createPresenter() {
return new MinePresenter(new MineImpl());
}
@Override
public void onNetChange(int netModel) {
}
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
}

View File

@@ -0,0 +1,269 @@
package com.ckkj.water.mine;
import static android.app.Activity.RESULT_OK;
import android.Manifest;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.ServiceException;
import com.bumptech.glide.Glide;
import com.esafirm.imagepicker.features.ImagePicker;
import com.esafirm.imagepicker.model.Image;
import com.ckkj.water.AppConfig;
import com.ckkj.water.EventMessage;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.base.inter.UploadCallback;
import com.ckkj.water.databinding.MineFragmentBinding;
import com.ckkj.water.login.LoginActivity;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.LubanCompressUtil;
import com.ckkj.water.utils.PreviewFileUtil;
import com.ckkj.water.utils.click.ClickUtil;
import com.ckkj.water.utils.dataUtil.FileUtil;
import com.ckkj.water.utils.manager.MingDengUserInfoManager;
import com.ckkj.water.utils.oss.OssUploadHelper;
import com.ckkj.water.utils.show.ToastUtil;
import com.ckkj.water.utils.time.ZYTimeUtils;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.interfaces.OnSelectListener;
import com.yalantis.ucrop.UCrop;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import de.greenrobot.event.EventBus;
import pub.devrel.easypermissions.EasyPermissions;
/**
* @author fengxiaoyang 新分支
* @date 2025/7/7
* @description TODO: 描述该类的作用
*/
public class MineFragment extends BaseFragment<MineFragmentBinding, MinePresenter>
implements MineContract.MineView {
@Override
public void initData(Bundle state) {
viewBinding.includedTitle.imgBack.setVisibility(View.GONE);
viewBinding.includedTitle.imgSetting.setVisibility(View.VISIBLE);
ClickUtil.addClickPart(viewBinding.includedTitle.imgSetting, 50);
ClickUtil.addClickPart(viewBinding.imgEdit, 50);
viewBinding.includedTitle.tvTitle.setText("个人中心");
}
@Override
protected void onResumeInitData() {
super.onResumeInitData();
if (AppConfig.USER_LOGIN) {
// mPresenter.getUserinfo();
} else {
viewBinding.tvDefaulBirthtime.setVisibility(View.VISIBLE);
viewBinding.tvDefaulStar.setVisibility(View.VISIBLE);
viewBinding.tvUserBirthTime.setVisibility(View.GONE);
viewBinding.tvUserStar.setVisibility(View.GONE);
}
}
@Override
public MinePresenter createPresenter() {
return new MinePresenter(new MineImpl());
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.img_user_head:
if (!AppConfig.USER_LOGIN) {
goTo(mContext, LoginActivity.class, null);
return;
}
new XPopup.Builder(mContext).asBottomList("头像", new String[]{"上传头像", "查看大图"}, new OnSelectListener() {
@Override
public void onSelect(int position, String text) {
switch (position) {
case 0:
String readPermission = Manifest.permission.READ_EXTERNAL_STORAGE;
if (!hasRecordPermission(readPermission)) {
// 没有权限只在ACTION_DOWN时去申请
getPermissionRequst(readPermission, "相机、文件访问权限申请",
"星语明灯需要您的授权,获取文件访问权限来修改头像", REQUEST_CODE_100);
return;
} else {
imagePicker(1, REQUEST_CODE_100, MineFragment.this);
}
break;
case 1:
String suffix = FileUtil.getFileSuffixWithQuestion(MingDengUserInfoManager.getInstance().getUserInfo().getAvatar());
PreviewFileUtil.previewFiles(mContext, suffix, MingDengUserInfoManager.getInstance().getUserInfo().getAvatar());
break;
}
}
}).show();
break;
case R.id.img_setting:
goTo(mContext, SettingsActivity.class, null);
break;
case R.id.img_edit://编辑出生日期
if (!AppConfig.USER_LOGIN) {
goTo(mContext, LoginActivity.class, null);
return;
}
// 发送EventBus消息让MainActivity切换到FateFragment
EventBus.getDefault().post(new EventMessage(EventMessage.SWITCH_TO_FATE_FRAGMENT));
break;
case R.id.linear_tobe_vip:
case R.id.lienar_share_be_vip:
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 100://头像
List<Image> images = ImagePicker.getImages(data);
Uri sourceUri = Uri.fromFile(new File(images.get(0).getPath()));
Uri destinationUri = Uri.fromFile(new File(mContext.getCacheDir(), "cropped_image.jpg"));
UCrop.of(sourceUri, destinationUri)
.withAspectRatio(1, 1) // 设置裁剪框比例1:1 为正方形
.withMaxResultSize(1000, 1000) // 设置裁剪后的最大图片尺寸
.start(requireContext(), this);
break;
case UCrop.REQUEST_CROP:
showLoadingDialog();
Uri resultUri = UCrop.getOutput(data);
String filePath = resultUri.getPath();
if (!TextUtils.isEmpty(filePath)) {
getCompressFile(new File(filePath));
}
break;
}
}
}
private void getCompressFile(File file) {
LubanCompressUtil.getInstance().getCompressFile(mContext, file, new LubanCompressUtil.CompressCallback() {
@Override
public void success(File file) {
if (file != null) {
if (file.exists()) {
long fileSizeInBytes = file.length(); // 获取文件大小(字节)
long fileSizeInMB = fileSizeInBytes / (1024 * 1024); // 转换为MB
String fileName = file.getName();
if (fileSizeInMB > 5) {
hideDialogLoading();
ToastUtil.showShort(mContext, "文件大小超出5M");
return;
}
if (!fileName.toLowerCase().endsWith(".png") &&
!fileName.toLowerCase().endsWith(".jpg") &&
!fileName.toLowerCase().endsWith(".jpeg")) {
ToastUtil.showShort(mContext, "文件格式不正确");
hideDialogLoading();
return;
}
List<String> filePath = new ArrayList<>();
filePath.add(file.getPath());
OssUploadHelper helper = new OssUploadHelper(mContext);
helper.upload(AppConfig.UPLOAD_TYPE_200, fileName, filePath, new UploadCallback() {
@Override
public void onSuccess(List<String> urls) {
mContext.runOnUiThread(new Runnable() {
@Override
public void run() {
if (!TextUtils.isEmpty(urls.get(0))) {
// mPresenter.updateUserAvatar(urls.get(0));
}
}
});
}
@Override
public void onFailure(ClientException clientException, ServiceException serviceException) {
}
});
} else {
ToastUtil.showShort(mContext, "文件不存在");
}
}
}
@Override
public void fail(String failMsg) {
}
});
}
@Override
public void onNetChange(int netModel) {
}
@Override
public void showError(String message) {
hideDialogLoading();
ToastUtil.showShort(mContext, message);
}
@Override
public void logOut(BaseBean bean) {
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
hidePermissionDialog();
if (requestCode == REQUEST_CODE_100) {
imagePicker(1, REQUEST_CODE_100, this);
}
}
}

View File

@@ -0,0 +1,214 @@
package com.ckkj.water.mine;
import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.ServiceException;
import com.bumptech.glide.Glide;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.databinding.MineInformationLayoutBinding;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.LubanCompressUtil;
import com.ckkj.water.utils.PreviewFileUtil;
import com.ckkj.water.utils.dataUtil.FileUtil;
import com.ckkj.water.utils.manager.MingDengUserInfoManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.esafirm.imagepicker.features.ImagePicker;
import com.esafirm.imagepicker.model.Image;
import com.gyf.immersionbar.ImmersionBar;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.interfaces.OnSelectListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import pub.devrel.easypermissions.EasyPermissions;
/**
* @author fengxiaoyang
* @date 2026/5/16
* @description TODO: 个人信息详情页面
*/
public class MineInfomationActivity extends BaseActivity<MineInformationLayoutBinding, MinePresenter>
implements MineContract.MineView, EasyPermissions.PermissionCallbacks{
@Override
public MinePresenter createPresenter() {
return new MinePresenter(new MineImpl());
}
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.mine_infomation_title);
initListener();
}
private void initListener() {
setClick(viewBinding.includedTitle.imgBack);
setClick(viewBinding.imgAvatar);
setClick(viewBinding.imgCamera);
}
private void setClick(View view) {
view.setOnClickListener(this::onClick);
}
public void onClick(View v){
switch (v.getId()){
case R.id.img_back:
finish();
break;
case R.id.img_avatar:
case R.id.img_camera:
new XPopup.Builder(mContext).asBottomList("选择头像", new String[]{"上传头像", "查看大图"}, new OnSelectListener() {
@Override
public void onSelect(int position, String text) {
switch (position) {
case 0:
String readPermission = Manifest.permission.READ_EXTERNAL_STORAGE;
if (!hasRecordPermission(readPermission)) {
// 没有权限只在ACTION_DOWN时去申请
getPermissionRequst(readPermission,"相册权限申请",
"智能浇水需要您的授权,获取相册修改头像",REQUEST_EVENT_CODE_10001);
return;
}else{
imagePicker(1,PICK_IMAGE_REQUEST_100);
}
break;
case 1:
String suffix = FileUtil.getFileSuffixWithQuestion(MingDengUserInfoManager.getInstance().getUserInfo().getAvatar());
PreviewFileUtil.previewFiles(mContext, suffix, MingDengUserInfoManager.getInstance().getUserInfo().getAvatar());
break;
}
}
}).show();
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null){
Bundle bundle = data.getExtras();
if(resultCode == RESULT_OK){
switch (requestCode){
case PICK_IMAGE_REQUEST_100:
showLoadingDialog();
List<Image> images = ImagePicker.getImages(data);
if (images != null && !images.isEmpty()) {
Image image = images.get(0);
File file = new File(image.getPath());
getCompressFile(file);
}
break;
}
}
}
}
private void getCompressFile(File file) {
LubanCompressUtil.getInstance().getCompressFile(mContext, file, new LubanCompressUtil.CompressCallback() {
@Override
public void success(File file) {
if (file != null) {
if (file.exists()) {
long fileSizeInBytes = file.length(); // 获取文件大小(字节)
long fileSizeInMB = fileSizeInBytes / (1024 * 1024); // 转换为MB
String fileName = file.getName();
if (fileSizeInMB > 5) {
hideDialogLoading();
ToastUtil.showShort(mContext, "文件大小超出5M");
return;
}
if (!fileName.toLowerCase().endsWith(".png") &&
!fileName.toLowerCase().endsWith(".jpg") &&
!fileName.toLowerCase().endsWith(".jpeg")) {
ToastUtil.showShort(mContext, "文件格式不正确");
hideDialogLoading();
return;
}
hideDialogLoading();
ToastUtil.showShort(mContext,"头像修改成功");
Glide.with(mContext)
.load(file)
.error(mContext.getDrawable(R.mipmap.icon_mine_user_head_defaul))
.into(viewBinding.imgAvatar);
} else {
ToastUtil.showShort(mContext, "文件不存在");
}
}
}
@Override
public void fail(String failMsg) {
}
});
}
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
hidePermissionDialog();
if(requestCode == REQUEST_EVENT_CODE_10001){
if(grantResults[0] == 0){
imagePicker(1,PICK_IMAGE_REQUEST_100);
}
}
}
}

View File

@@ -0,0 +1,82 @@
package com.ckkj.water.mine;
import android.os.Bundle;
import android.view.View;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.databinding.PasswordManLayoutBinding;
import com.ckkj.water.login.ForgetPasswordActivity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.gyf.immersionbar.ImmersionBar;
/**
* @author fengxiaoyang
* @date 2026/5/16
* @description TODO: 描述该类的作用
*/
public class PsdManageActivity extends BaseActivity<PasswordManLayoutBinding, MinePresenter>
implements MineContract.MineView {
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.register_title);
initListener();
}
private void initListener() {
setClick(viewBinding.includedTitle.imgBack);
setClick(viewBinding.rlResetPsd);
setClick(viewBinding.rlFindPsd);
}
private void setClick(View view) {
view.setOnClickListener(this::onClick);
}
public void onClick(View v){
switch (v.getId()){
case R.id.img_back:
finish();
break;
case R.id.rl_reset_psd:
break;
case R.id.rl_find_psd:
goTo(mContext, ForgetPasswordActivity.class,null);
break;
}
}
@Override
public MinePresenter createPresenter() {
return new MinePresenter(new MineImpl());
}
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
}

View File

@@ -0,0 +1,65 @@
package com.ckkj.water.mine;
import android.os.Bundle;
import com.gyf.immersionbar.ImmersionBar;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.databinding.ActivityRewardRecordLayoutBinding;
import com.ckkj.water.mine.entity.InviteeRecordEntity;
import com.ckkj.water.mine.entity.RecommendDataEntity;
import com.ckkj.water.mine.entity.RewardRecordEntity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.RecommendImpl;
import com.ckkj.water.mine.mvp.RecommendPresenter;
import com.ckkj.water.network.BaseBean;
/**
* @author fengxiaoyang
* @date 2025/10/17
* @description 奖励记录
*/
public class RewardRecordsActivity extends BaseActivity<ActivityRewardRecordLayoutBinding, RecommendPresenter>
implements MineContract.RecommendView {
private int mCurrentPage = 1;
private static final int PAGE_SIZE = 10;
@Override
public RecommendPresenter createPresenter() {
return new RecommendPresenter(new RecommendImpl());
}
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white)
.statusBarDarkFont(true)
.titleBar(viewBinding.rlTitle) // 替换为你的标题栏View
.keyboardEnable(true)
.navigationBarDarkIcon(true)
.init();
viewBinding.includedTitle.tvTitle.setText("奖励记录");
viewBinding.includedTitle.imgBack.setOnClickListener(c -> finish());
// 查询奖励记录
}
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
}

View File

@@ -0,0 +1,208 @@
package com.ckkj.water.mine;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import com.gyf.immersionbar.ImmersionBar;
import com.ckkj.water.AppConfig;
import com.ckkj.water.EventMessage;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.databinding.ActivitySettingsLayoutBinding;
import com.ckkj.water.dialog.DialogAppUpdate;
import com.ckkj.water.login.LoginActivity;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.AppInfoUtil;
import com.ckkj.water.utils.manager.ActivityManager;
import com.ckkj.water.utils.manager.MingDengUserInfoManager;
import com.ckkj.water.utils.show.ToastUtil;
import java.io.File;
import java.util.List;
import de.greenrobot.event.EventBus;
/**
* @author fengxiaoyang
* @date 2025/8/18
* @description TODO: 设置页面
*/
public class SettingsActivity extends BaseActivity<ActivitySettingsLayoutBinding, MinePresenter>
implements MineContract.MineView {
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white)
.statusBarDarkFont(true)
.titleBar(viewBinding.rlTitle) // 替换为你的标题栏View
.keyboardEnable(true)
.navigationBarDarkIcon(true)
.init();
viewBinding.includeTitle.tvTitle.setText("设置");
viewBinding.includeTitle.imgBack.setOnClickListener(c -> finish());
if(AppConfig.USER_LOGIN){
viewBinding.tvUserPhone.setText(MingDengUserInfoManager.getInstance().getUserInfo().getMobile());
viewBinding.tvLogOut.setVisibility(View.VISIBLE);
}
//获取本应用所占用的缓存
displayCacheSize();
try {
// 获取 PackageManager 实例
PackageManager packageManager = mContext.getPackageManager();
// 获取应用信息
PackageInfo packageInfo = packageManager.getPackageInfo(mContext.getPackageName(), 0);
// 获取版本名称
String versionName = packageInfo.versionName;
viewBinding.tvVersionName.setText("version " + versionName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
@Override
public MinePresenter createPresenter() {
return new MinePresenter(new MineImpl());
}
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
public void onClick(View v) {
switch (v.getId()){
case R.id.rl_change_phone:
goTo(mContext, ChangePhoneActivity.class,null);
break;
case R.id.rl_check_version://版本检测
//版本检测更新
break;
case R.id.rl_commit_service:
break;
case R.id.rl_set_cache:
showLoadingDialog();
clearCache();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
hideDialogLoading();
ToastUtil.showShort(mContext,"缓存清除成功");
displayCacheSize();
}
},800);
break;
case R.id.tv_log_out:
showDialogtext(mContext.getResources().getDrawable(R.mipmap.img_location), false, false,true,
"提示", "确定要退出当前账号?",
"取消", "确定", new BaseFragment.OnDialogClick() {
@Override
public void onCancelClick() {
}
@Override
public void onConfirmClick() {
MingDengUserInfoManager.getInstance().clearUser(mContext);
ActivityManager.removeAllActivity();
goTo(mContext, LoginActivity.class,null);
EventBus.getDefault().post(new EventMessage(EventMessage.USER_LOGIN_LOST));
}
});
break;
case R.id.rl_user_agreement://用户协议
Bundle bundle = new Bundle();
bundle.putInt("from_requse_code",WebviewUserAgreement.AGREEMENT_CODE);
goToWihoutNoPresent(mContext, WebviewUserAgreement.class,bundle);
break;
case R.id.rl_user_privacy://隐私政策
Bundle bundleYS = new Bundle();
bundleYS.putInt("from_requse_code",WebviewUserAgreement.PRIVACY_CODE);
goToWihoutNoPresent(mContext, WebviewUserAgreement.class,bundleYS);
break;
case R.id.rl_log_off://注销账号
goTo(mContext, UserLogOffAccountActivity.class,null);
break;
}
}
private boolean isForceUpdate;
private DialogAppUpdate mUpdateDialog;
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
private void displayCacheSize() {
long cacheSize = getCacheSize();
String sizeString;
if (cacheSize >= 1024 * 1024) {
sizeString = String.format("%.2f MB", cacheSize / (1024.0 * 1024.0));
} else {
sizeString = String.format("%d KB", cacheSize / 1024);
}
viewBinding.tvCacheSize.setText(sizeString);
}
private long getCacheSize() {
File cacheDir = mContext.getCacheDir();
return getFolderSize(cacheDir);
}
private long getFolderSize(File dir) {
long size = 0;
if (dir != null && dir.isDirectory()) {
for (File file : dir.listFiles()) {
if (file.isFile()) {
size += file.length();
} else {
size += getFolderSize(file);
}
}
}
return size;
}
private void clearCache() {
File cacheDir = getCacheDir();
deleteDir(cacheDir);
}
private boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
if (children != null) {
for (String child : children) {
deleteDir(new File(dir, child));
}
}
}
return dir.delete();
}
}

View File

@@ -0,0 +1,121 @@
package com.ckkj.water.mine;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
import com.gyf.immersionbar.ImmersionBar;
import com.ckkj.water.AppConfig;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.databinding.UserLogOffActivityBinding;
import com.ckkj.water.login.LoginActivity;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ActivityManager;
import com.ckkj.water.utils.manager.MingDengUserInfoManager;
import com.ckkj.water.utils.number.PhoneNumberUtils;
import com.ckkj.water.utils.show.ToastUtil;
import java.util.List;
/**
* @Description 用户注销账号
* @systemUser 86133
* @Author FengJingQi
* @Date 04-28-2025 周一 12:22
*/
public class UserLogOffAccountActivity extends BaseActivity<UserLogOffActivityBinding, MinePresenter> implements MineContract.MineView {
@Override
public MinePresenter createPresenter() {
return new MinePresenter(new MineImpl());
}
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includeTitle.tvTitle.setText("注销账号");
if(AppConfig.USER_LOGIN){
String phoneNum = MingDengUserInfoManager.getInstance().getUserInfo().getMobile();
if(!TextUtils.isEmpty(phoneNum)){
viewBinding.tvUserPhone.setText(PhoneNumberUtils.hidePhoneNumber(phoneNum));
}
}
}
public void onClick(View v) {
switch (v.getId()){
case R.id.img_back:
finish();
break;
case R.id.tv_get_code:
showLoadingDialog();
break;
case R.id.tv_commit:
if(TextUtils.isEmpty(viewBinding.edVerCode.getText().toString().trim())){
ToastUtil.showShort(mContext,"请填写验证码");
return;
}
if(viewBinding.edVerCode.getText().toString().trim().length() < 6){
ToastUtil.showShort(mContext,"请填写6位验证码");
return;
}
break;
}
}
private CountDownTimer cdTimer = new CountDownTimer(60000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
viewBinding.tvGetCode.setText("(" + millisUntilFinished / 1000 + ")秒后重发");
viewBinding.tvGetCode.setSelected(true);
viewBinding.tvGetCode.setClickable(false);
viewBinding.tvGetCode.setTextColor(mContext.getColor(R.color.color_c8c8c8));
}
@Override
public void onFinish() {
viewBinding.tvGetCode.setText("重新发送");
viewBinding.tvGetCode.setSelected(false);
viewBinding.tvGetCode.setClickable(true);
viewBinding.tvGetCode.setTextColor(mContext.getColor(R.color.color_zhu));
}
};
@Override
public void showError(String message) {
hideDialogLoading();
ToastUtil.showShort(mContext,message);
}
@Override
public void logOut(BaseBean bean) {
}
}

View File

@@ -0,0 +1,136 @@
package com.ckkj.water.mine;
import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.gyf.immersionbar.ImmersionBar;
import com.ckkj.water.AppConfig;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivityNoP;
import com.ckkj.water.databinding.ActivitySerivceWebLayoutBinding;
import com.ckkj.water.network.BaseBean;
/**
* @author fengxiaoyang
* @date 2025/5/13
* @description TODO: 描述该类的作用
*/
public class WebviewUserAgreement extends BaseActivityNoP<ActivitySerivceWebLayoutBinding> {
public static final int AGREEMENT_CODE = 10001;
public static final int PRIVACY_CODE = 10002;
private int mFromRequest = -1;
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.titleBar(viewBinding.rlTitle)
.init();
Bundle bundle = getIntent().getExtras();
mFromRequest = bundle.getInt("from_requse_code");
viewBinding.mWvJieyou.setVisibility(View.VISIBLE);
String fileUrl = "";
//登录状态下拼接token/userid/头像等参数进入聊天
if(mFromRequest == AGREEMENT_CODE){
viewBinding.includeTitle.tvTitle.setText("用户协议");
fileUrl = AppConfig.USER_AGREEMENT;
}else if(mFromRequest == PRIVACY_CODE){
viewBinding.includeTitle.tvTitle.setText("隐私政策");
fileUrl = AppConfig.USER_PRIVACY;
}
viewBinding.mWvJieyou.addJavascriptInterface(new JsInterface(), "Android");
viewBinding.mWvJieyou.getSettings().setJavaScriptEnabled(true);
viewBinding.mWvJieyou.getSettings().setUseWideViewPort(true);
viewBinding.mWvJieyou.getSettings().setLoadWithOverviewMode(true);
viewBinding.mWvJieyou.setHapticFeedbackEnabled(false);
viewBinding.mWvJieyou.getSettings().setSupportZoom(true);
viewBinding.mWvJieyou.getSettings().setAllowUniversalAccessFromFileURLs(true);
viewBinding.mWvJieyou.getSettings().setDomStorageEnabled(true);
viewBinding.mWvJieyou.setLayerType(View.LAYER_TYPE_HARDWARE, null);
// 设置允许JS弹窗
viewBinding.mWvJieyou.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
showLoadingDialog();
viewBinding.mWvJieyou.setWebViewClient(new AppWebViewClients());
// viewBinding.mWvJieyou.setWebChromeClient(new MyWebChromeClient());
viewBinding.mWvJieyou.loadUrl(fileUrl);//确保跳转到另一个网页时仍然在当前WebView显示
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewBinding.mWvJieyou.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
viewBinding.mWvJieyou.setLayerType(WebView.LAYER_TYPE_HARDWARE, null);
viewBinding.includeTitle.imgBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用H5中的closeWs函数结束当前会话
}
});
viewBinding.includeTitle.imgBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
public class JsInterface {
/**
* 关闭页面
*/
@JavascriptInterface
public void finishActivity() {
finish();
}
/**
* 关闭页面
*/
@JavascriptInterface
public void send(String msg) {
}
}
public class AppWebViewClients extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// // html加载完成之后隐藏进度条
hideDialogLoading();
super.onPageFinished(view, url);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
}
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
}

View File

@@ -0,0 +1,81 @@
package com.ckkj.water.mine.adapter;
import android.content.Context;
import android.graphics.Paint;
import android.text.TextUtils;
import android.widget.LinearLayout;
import android.widget.TextView;
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.mine.entity.MemberComboEntity;
import java.util.List;
/**
* @author fengxiaoyang
* @date 2025/8/27
* @description TODO: 描述该类的作用
*/
public class ComboAdapter extends BaseQuickAdapter<MemberComboEntity, BaseViewHolder> {
private Context mContext;
private int mSelectPos = -1;
public int getmSelectPos() {
return mSelectPos;
}
public void setmSelectPos(int mSelectPos) {
this.mSelectPos = mSelectPos;
notifyDataSetChanged();
}
public ComboAdapter(Context context, int layoutResId, @Nullable List<MemberComboEntity> data) {
super(layoutResId, data);
this.mContext = context;
}
@Override
public void setNewData(@Nullable List<MemberComboEntity> data) {
super.setNewData(data);
for(int i=0;i<data.size();i++){
if(data.get(i).getId().equals("2")){
mSelectPos = i;
}
}
}
@Override
protected void convert(BaseViewHolder holder, MemberComboEntity item) {
LinearLayout linearItem = holder.getView(R.id.linear_item);
TextView tvOldPrice = holder.getView(R.id.tv_price_old);
holder.setText(R.id.tv_combo_name,item.getName());
if(!TextUtils.isEmpty(item.getOffers())){
holder.setText(R.id.tv_jiesheng,item.getOffers());
holder.setGone(R.id.tv_jiesheng,true);
}else{
holder.setGone(R.id.tv_jiesheng,false);
}
if(!TextUtils.isEmpty(item.getOriginal())){
holder.setText(R.id.tv_price_old,item.getOriginal());
holder.setGone(R.id.tv_price_old,true);
tvOldPrice.setPaintFlags(tvOldPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}else{
holder.setGone(R.id.tv_price_old,false);
}
holder.setText(R.id.tv_price_type,"¥" + item.getMoney() + "/" + item.getType());
holder.setText(R.id.tv_price_day,"¥"+ item.getMoneyC());
if(holder.getLayoutPosition() == mSelectPos){
linearItem.setBackground(ContextCompat.getDrawable(mContext,R.drawable.shape_combo_selected));
holder.setChecked(R.id.checkbox,true);
}else{
linearItem.setBackground(ContextCompat.getDrawable(mContext,R.drawable.shape_trans_touming));
holder.setChecked(R.id.checkbox,false);
}
}
}

View File

@@ -0,0 +1,43 @@
package com.ckkj.water.mine.adapter;
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.mine.entity.InviteeRecordEntity;
import java.util.List;
/**
* @author fengxiaoyang
* @date 2025/10/10
* @description TODO: 描述该类的作用
*/
public class MyInvteeAdapter extends BaseQuickAdapter<InviteeRecordEntity.RowsDTO, BaseViewHolder> {
public MyInvteeAdapter(int layoutResId, @Nullable List<InviteeRecordEntity.RowsDTO> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, InviteeRecordEntity.RowsDTO item) {
// 处理手机号将中间4位替换为****
String phone = item.getInviteeMobile();
String maskedPhone = maskPhone(phone);
helper.setText(R.id.tv_phone, maskedPhone);
helper.setText(R.id.tv_bind_time, item.getBindTime());
}
/**
* 手机号脱敏处理将中间4位替换为****
* 例如13812345678 -> 138****5678
*/
private String maskPhone(String phone) {
if (phone == null || phone.length() != 11) {
return phone; // 如果不是11位手机号直接返回原值
}
return phone.substring(0, 3) + "****" + phone.substring(7);
}
}

View File

@@ -0,0 +1,71 @@
package com.ckkj.water.mine.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import java.util.List;
public class PublishCarImgAdapter extends BaseQuickAdapter<String,BaseViewHolder>{
private Context mContext;
private List<String> dataList;
public PublishCarImgAdapter(Context context, int layoutResId, @Nullable List<String> data) {
super(layoutResId, data);
this.mContext = context;
this.dataList = data;
}
@Override
public void setNewData(@Nullable List<String> data) {
super.setNewData(data);
this.dataList = data;
}
@Override
protected void convert(BaseViewHolder helper, String item) {
ImageView imgDelte = helper.getView(R.id.img_delete);
ImageView imgPic = helper.getView(R.id.img_pic);
if(dataList.size() == 1){
if(TextUtils.isEmpty(item)){
Glide.with(mContext).load(mContext.getDrawable(R.mipmap.icon_add_pic)).into(imgPic);
imgDelte.setVisibility(View.GONE);
}
}else{
if(helper.getLayoutPosition() == dataList.size() -1){
if(helper.getLayoutPosition() == 3){
if(!TextUtils.isEmpty(item)){
Glide.with(mContext).load(item).into(imgPic);
imgDelte.setVisibility(View.VISIBLE);
}else{
Glide.with(mContext).load(mContext.getDrawable(R.mipmap.icon_add_pic)).into(imgPic);
imgDelte.setVisibility(View.GONE);
}
}else{
Glide.with(mContext).load(mContext.getDrawable(R.mipmap.icon_add_pic)).into(imgPic);
imgDelte.setVisibility(View.GONE);
}
}else{
if(!TextUtils.isEmpty(item)){
Glide.with(mContext).load(item).into(imgPic);
imgDelte.setVisibility(View.VISIBLE);
}
}
}
helper.addOnClickListener(R.id.img_delete);
helper.addOnClickListener(R.id.img_pic);
}
public void removeItem(int position) {
notifyItemRemoved(position);
// 这里可以执行实际的删除操作如items.remove(position)
dataList.remove(position);
}
}

View File

@@ -0,0 +1,46 @@
package com.ckkj.water.mine.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/10/10
* @description TODO: 邀请记录
*/
@NoArgsConstructor
@Data
public class InviteeRecordEntity implements Serializable {
@SerializedName("rows")
private List<RowsDTO> rows;
@SerializedName("total")
private Integer total;
@SerializedName("pageNum")
private Integer pageNum;
@SerializedName("pageSize")
private Integer pageSize;
@SerializedName("pages")
private Integer pages;
@NoArgsConstructor
@Data
public static class RowsDTO {
@SerializedName("relationId")
private Integer relationId;
@SerializedName("inviteeMobile")
private String inviteeMobile;
@SerializedName("bindTime")
private String bindTime;
@SerializedName("bindStatus")
private Integer bindStatus;
@SerializedName("rewardStatus")
private Integer rewardStatus;
}
}

View File

@@ -0,0 +1,35 @@
package com.ckkj.water.mine.entity;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author fengxiaoyang
* @date 2025/8/27
* @description TODO: 描述该类的作用
*/
@NoArgsConstructor
@Data
public class MemberComboEntity implements Serializable {
@SerializedName("id")
private String id;
@SerializedName("name")
private String name;
@SerializedName("type")
private String type;
@SerializedName("money")
private String money;
@SerializedName("money_c")
private String moneyC;
@SerializedName("offers")
private String offers;
@SerializedName("day")
private String day;
@SerializedName("original")
private String original;
}

View File

@@ -0,0 +1 @@
package com.ckkj.water.mine.entity;

View File

@@ -0,0 +1,28 @@
package com.ckkj.water.mine.entity;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author fengxiaoyang
* @date 2025/9/29
* @description 邀请数据
*/
@NoArgsConstructor
@Data
public class RecommendDataEntity implements Serializable {
@SerializedName("totalInviteCount")
private Integer totalInviteCount;
@SerializedName("memberActiveCount")
private Integer memberActiveCount;
@SerializedName("rewardCount")
private Integer rewardCount;
@SerializedName("isBoundToOthers")
private Boolean isBoundToOthers;
}

View File

@@ -0,0 +1,35 @@
package com.ckkj.water.mine.entity;
import java.io.Serializable;
/**
* @author fengxiaoyang
* @date 2025/5/26
* @description TODO: 描述该类的作用
*/
public class ReportEntity implements Serializable {
private String reportReason;
private boolean isCheck;
public ReportEntity(String reportReason, boolean isCheck) {
this.reportReason = reportReason;
this.isCheck = isCheck;
}
public String getReportReason() {
return reportReason;
}
public void setReportReason(String reportReason) {
this.reportReason = reportReason;
}
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}
}

View File

@@ -0,0 +1,60 @@
package com.ckkj.water.mine.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/10/17
* @description TODO: 奖励记录
*/
@NoArgsConstructor
@Data
public class RewardRecordEntity implements Serializable {
@SerializedName("rows")
private List<RowsDTO> rows;
@SerializedName("total")
private Integer total;
@SerializedName("pageNum")
private Integer pageNum;
@SerializedName("pageSize")
private Integer pageSize;
@SerializedName("pages")
private Integer pages;
@NoArgsConstructor
@Data
public static class RowsDTO {
@SerializedName("transactionId")
private Integer transactionId;
@SerializedName("transactionType")
private String transactionType;
@SerializedName("memberType")
private String memberType;
@SerializedName("actualPayment")
private Double actualPayment;
@SerializedName("discountAmount")
private Double discountAmount;
@SerializedName("memberDays")
private Integer memberDays;
@SerializedName("expireTime")
private String expireTime;
@SerializedName("beforeExpireTime")
private String beforeExpireTime;
@SerializedName("transactionStatus")
private Integer transactionStatus;
@SerializedName("remark")
private String remark;
@SerializedName("rewardTime")
private String rewardTime;
@SerializedName("rewardTypeDesc")
private String rewardTypeDesc;
}
}

View File

@@ -0,0 +1,42 @@
package com.ckkj.water.mine.mvp;
import com.ckkj.water.base.IView;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.login.mvp.LoginContract;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.InviteeRecordEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.mine.entity.RecommendDataEntity;
import com.ckkj.water.mine.entity.RewardRecordEntity;
import com.ckkj.water.network.BaseBean;
import org.json.JSONObject;
import java.util.List;
import java.util.Map;
/**
* @author fengxiaoyang
* @date 2025/7/28
* @description TODO: 描述该类的作用
*/
public class MineContract {
public interface CallBack<T> {
void success(T msg);
void fail(String msg);
}
public interface DataModel{
}
public interface MineView extends IView {
}
public interface RecommendModel{
}
public interface RecommendView extends IView {
}
}

View File

@@ -0,0 +1,28 @@
package com.ckkj.water.mine.mvp;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.login.mvp.LoginContract;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.network.NetWorkManager;
import org.json.JSONObject;
import java.util.List;
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;
/**
* @author fengxiaoyang
* @date 2025/7/28
* @description TODO: 描述该类的作用
*/
public class MineImpl implements MineContract.DataModel {
}

View File

@@ -0,0 +1,41 @@
package com.ckkj.water.mine.mvp;
import android.text.TextUtils;
import com.ckkj.water.base.BasePresenter;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.base.entity.UserInfoEntity;
import com.ckkj.water.login.mvp.LoginContract;
import com.ckkj.water.login.mvp.LoginImpl;
import com.ckkj.water.main.MainContract;
import com.ckkj.water.main.MainImpl;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.entity.MemberComboEntity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.MingDengUserInfoManager;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author fengxiaoyang
* @date 2025/7/28
* @description TODO: 描述该类的作用
*/
public class MinePresenter extends BasePresenter<MineContract.MineView> {
private MineImpl impl;
public MinePresenter(MineImpl impl) {
this.impl = impl;
}
/**
* 获取个人信息
*/
}

View File

@@ -0,0 +1,27 @@
package com.ckkj.water.mine.mvp;
import com.ckkj.water.mine.entity.InviteeRecordEntity;
import com.ckkj.water.mine.entity.RecommendDataEntity;
import com.ckkj.water.mine.entity.RewardRecordEntity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.network.NetWorkManager;
import org.json.JSONObject;
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;
/**
* @author fengxiaoyang
* @date 2025/9/29
* @description TODO: 描述该类的作用
*/
public class RecommendImpl implements MineContract.RecommendModel{
}

View File

@@ -0,0 +1,28 @@
package com.ckkj.water.mine.mvp;
import com.ckkj.water.base.BasePresenter;
import com.ckkj.water.mine.entity.InviteeRecordEntity;
import com.ckkj.water.mine.entity.RecommendDataEntity;
import com.ckkj.water.mine.entity.RewardRecordEntity;
import com.ckkj.water.network.BaseBean;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* @author fengxiaoyang
* @date 2025/9/29
* @description TODO: 描述该类的作用
*/
public class RecommendPresenter extends BasePresenter<MineContract.RecommendView> {
private RecommendImpl impl;
public RecommendPresenter(RecommendImpl impl) {
this.impl = impl;
}
}