From 071c0879c8ec29b686282224c7ee374427e45350 Mon Sep 17 00:00:00 2001 From: LiuSiXiang-007 <2535147127@qq.com> Date: Tue, 9 Jan 2024 18:21:09 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E7=AC=AC=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E6=97=B6=EF=BC=8C=E9=9C=80=E8=A6=81=E5=A1=AB?= =?UTF-8?q?=E5=86=99=E4=B8=80=E6=AC=A1=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kanglai/push/app/AppApplication.java | 5 + .../push/di/component/ServiceComponent.java | 3 + .../java/com/kanglai/push/entity/SsoUser.java | 119 ++++++++++++++++++ .../com/kanglai/push/mapper/LoginMapper.java | 6 + .../push/service/Impl/LoginServiceImpl.java | 6 + .../kanglai/push/service/LoginService.java | 4 + .../push/ui/activity/LoginSurveyActivity.java | 10 -- .../ui/adapter/SearchRecyclerAdapter.java | 5 +- .../push/ui/fragment/UserFragment.java | 3 +- .../kanglai/push/ui/vm/AuroraViewModel.java | 25 ---- .../push/ui/vm/LoginSurveyViewModel.java | 102 ++++++++++++++- .../kanglai/push/ui/vm/LoginViewModel.java | 8 +- .../com/kanglai/push/util/RandomUtil.java | 51 ++++++++ app/src/main/res/drawable-nodpi/icon_dice.xml | 66 ++++++++++ app/src/main/res/drawable/icon_btn_border.xml | 7 -- .../res/drawable/icon_btn_swipeable_bg1.xml | 2 + .../main/res/layout/activity_login_survey.xml | 91 +++++++++++++- app/src/main/res/values/array.xml | 17 +++ 18 files changed, 476 insertions(+), 54 deletions(-) create mode 100644 app/src/main/java/com/kanglai/push/entity/SsoUser.java delete mode 100644 app/src/main/java/com/kanglai/push/ui/vm/AuroraViewModel.java create mode 100644 app/src/main/java/com/kanglai/push/util/RandomUtil.java create mode 100644 app/src/main/res/drawable-nodpi/icon_dice.xml delete mode 100644 app/src/main/res/drawable/icon_btn_border.xml create mode 100644 app/src/main/res/values/array.xml diff --git a/app/src/main/java/com/kanglai/push/app/AppApplication.java b/app/src/main/java/com/kanglai/push/app/AppApplication.java index 4c85d9d..0541f95 100644 --- a/app/src/main/java/com/kanglai/push/app/AppApplication.java +++ b/app/src/main/java/com/kanglai/push/app/AppApplication.java @@ -1,5 +1,7 @@ package com.kanglai.push.app; +import android.content.Context; + import androidx.core.content.ContextCompat; import com.bumptech.glide.Glide; @@ -40,9 +42,12 @@ public class AppApplication extends BaseApplication { public AppComponent appComponent; + public static Context mContext; + @Override public void onCreate() { super.onCreate(); + mContext = this; // 注入应用程序上下文 appComponent = DaggerAppComponent.builder() .application(this) diff --git a/app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java b/app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java index 3d67606..e5ca0df 100644 --- a/app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java +++ b/app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java @@ -13,6 +13,7 @@ import com.kanglai.push.ui.vm.InstantDetailViewModel; import com.kanglai.push.ui.vm.InstantViewModel; import com.kanglai.push.ui.vm.LinkDetailViewModel; import com.kanglai.push.ui.vm.LinkViewModel; +import com.kanglai.push.ui.vm.LoginSurveyViewModel; import com.kanglai.push.ui.vm.LoginViewModel; import com.kanglai.push.ui.vm.MessageViewModel; import com.kanglai.push.ui.vm.PushTypeViewModel; @@ -61,4 +62,6 @@ public interface ServiceComponent { void inject(InstantDetailViewModel viewModel); void inject(FocusDetailViewModel viewModel); + + void inject(LoginSurveyViewModel viewModel); } diff --git a/app/src/main/java/com/kanglai/push/entity/SsoUser.java b/app/src/main/java/com/kanglai/push/entity/SsoUser.java new file mode 100644 index 0000000..c0f80cb --- /dev/null +++ b/app/src/main/java/com/kanglai/push/entity/SsoUser.java @@ -0,0 +1,119 @@ +package com.kanglai.push.entity; + +import android.os.Parcel; +import android.os.Parcelable; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * SSO用户表 + * @Author: liusixiang007 + * @since: 2024/1/9 + */ + +@Data +@Accessors +public class SsoUser implements Parcelable { + + private String id; + + /** 邮箱 */ + private String email; + + /** 头像 */ + private String avatar; + + /** 用户类型 */ + private String identityProvider; + + /** 登录ip */ + private String loginIp; + + /** 登录时间 */ + private String loginTime; + + /** 新密码 */ + private String newPassword; + + /** 昵称 */ + private String nickName; + + /** 密码 */ + private String password; + + /** 手机号 */ + private String phone; + + /** 性别 */ + private String sex; // 0 男 1 女 + + /** 状态 */ + private String status; + + /** 多租户id */ + private String tenantId; + + /** 用户名 */ + private String userName; + + public SsoUser(){} + + public SsoUser(String id, String sex, String nickName){ + this.id = id; + this.sex = sex; + this.nickName = nickName; + } + + protected SsoUser(Parcel in) { + id = in.readString(); + email = in.readString(); + avatar = in.readString(); + identityProvider = in.readString(); + loginIp = in.readString(); + loginTime = in.readString(); + newPassword = in.readString(); + nickName = in.readString(); + password = in.readString(); + phone = in.readString(); + sex = in.readString(); + status = in.readString(); + tenantId = in.readString(); + userName = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public SsoUser createFromParcel(Parcel in) { + return new SsoUser(in); + } + + @Override + public SsoUser[] newArray(int size) { + return new SsoUser[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int i) { + parcel.writeString(id); + parcel.writeString(email); + parcel.writeString(avatar); + parcel.writeString(identityProvider); + parcel.writeString(loginIp); + parcel.writeString(loginTime); + parcel.writeString(newPassword); + parcel.writeString(nickName); + parcel.writeString(password); + parcel.writeString(phone); + parcel.writeString(sex); + parcel.writeString(status); + parcel.writeString(tenantId); + parcel.writeString(userName); + } +} diff --git a/app/src/main/java/com/kanglai/push/mapper/LoginMapper.java b/app/src/main/java/com/kanglai/push/mapper/LoginMapper.java index 4328256..2ff00a7 100644 --- a/app/src/main/java/com/kanglai/push/mapper/LoginMapper.java +++ b/app/src/main/java/com/kanglai/push/mapper/LoginMapper.java @@ -2,18 +2,21 @@ package com.kanglai.push.mapper; import com.dolphin.core.entity.KiccUser; import com.dolphin.core.http.api.ResultResponse; +import com.kanglai.push.entity.SsoUser; import com.kanglai.push.entity.TokenEnhancer; import com.kanglai.push.entity.User; import java.util.Map; import io.reactivex.Observable; +import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Headers; import retrofit2.http.POST; +import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.QueryMap; @@ -46,4 +49,7 @@ public interface LoginMapper { @GET("system_proxy/system/app/phoneRegister") Observable> getPhoneRegister(@QueryMap Map fields); + + @PUT("system_proxy/system/ssoUser/update") + Observable updateSsoUser(@Body SsoUser ssoUser); } diff --git a/app/src/main/java/com/kanglai/push/service/Impl/LoginServiceImpl.java b/app/src/main/java/com/kanglai/push/service/Impl/LoginServiceImpl.java index d2837bf..bd2898c 100644 --- a/app/src/main/java/com/kanglai/push/service/Impl/LoginServiceImpl.java +++ b/app/src/main/java/com/kanglai/push/service/Impl/LoginServiceImpl.java @@ -6,6 +6,7 @@ import com.blankj.utilcode.util.Utils; import com.dolphin.core.entity.KiccUser; import com.kanglai.push.app.AppApplication; import com.kanglai.push.di.component.DaggerMapperComponent; +import com.kanglai.push.entity.SsoUser; import com.kanglai.push.entity.TokenEnhancer; import com.kanglai.push.entity.User; import com.kanglai.push.mapper.LoginMapper; @@ -84,4 +85,9 @@ public class LoginServiceImpl implements LoginService { return loginMapper.getPhoneRegister(fields); } + @Override + public Observable updateSsoUser(SsoUser ssoUser) { + return loginMapper.updateSsoUser(ssoUser); + } + } diff --git a/app/src/main/java/com/kanglai/push/service/LoginService.java b/app/src/main/java/com/kanglai/push/service/LoginService.java index 51d3952..c633d2d 100644 --- a/app/src/main/java/com/kanglai/push/service/LoginService.java +++ b/app/src/main/java/com/kanglai/push/service/LoginService.java @@ -2,6 +2,7 @@ package com.kanglai.push.service; import com.dolphin.core.entity.KiccUser; import com.dolphin.core.http.api.ResultResponse; +import com.kanglai.push.entity.SsoUser; import com.kanglai.push.entity.TokenEnhancer; import com.kanglai.push.entity.User; @@ -33,4 +34,7 @@ public interface LoginService { /** 通过 手机号、验证码、用户类型、租户id 获取用户登录信息(用户看到的登录) */ Observable> getPhoneRegister(Map fields); + + /** 更新用户信息 */ + Observable updateSsoUser(SsoUser ssoUser); } diff --git a/app/src/main/java/com/kanglai/push/ui/activity/LoginSurveyActivity.java b/app/src/main/java/com/kanglai/push/ui/activity/LoginSurveyActivity.java index 8ba89e4..76ac235 100644 --- a/app/src/main/java/com/kanglai/push/ui/activity/LoginSurveyActivity.java +++ b/app/src/main/java/com/kanglai/push/ui/activity/LoginSurveyActivity.java @@ -1,6 +1,5 @@ package com.kanglai.push.ui.activity; -import android.graphics.Color; import android.os.Bundle; import android.widget.LinearLayout; @@ -41,13 +40,4 @@ public class LoginSurveyActivity extends BaseActivity onItemViewClick(item)); - viewHolder.titleLabel.setText(item.getName()); + viewHolder.titleLabel.setText(item.getNikeName()); viewHolder.disclosureImage.setVisibility(View.GONE); // 隐藏返回箭头 viewHolder.leftBadge.setVisibility(View.GONE); // 隐藏徽章 // 加载图片 - String avater = item.getAvatar(); + String avater = ""; if (!TextUtils.isEmpty(avater)) { + avater = item.getAvatar(); if (!Patterns.WEB_URL.matcher(avater).matches()) avater = BuildConfig.HOST_URL + item.getAvatar().substring(1); // 加载图片 Glide.with(viewHolder.itemView.getContext()) diff --git a/app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java b/app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java index 8389d6c..f5fd478 100644 --- a/app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java @@ -81,7 +81,7 @@ public class UserFragment extends BaseFragment { + @Inject + LoginService loginService; + + /** 女生单选框 */ public ObservableField womanCheckedStatus = new ObservableField<>(false); + /** 男生单选框 默认值 */ public ObservableField manCheckedStatus = new ObservableField<>(true); + /** 名字输入框值 */ + public ObservableField inputName = new ObservableField<>(""); + + /** 女生单选框点击事件 */ public BindingCommand womanClickCommand = new BindingCommand(() ->{ // 选中女 womanCheckedStatus.set(true); manCheckedStatus.set(false); - mActivity.selectWoman(); }); + /** 男生单选框点击事件 */ public BindingCommand manClickCommand = new BindingCommand(() ->{ // 选中男 manCheckedStatus.set(true); womanCheckedStatus.set(false); - mActivity.selectMan(); + }); + + /** 昵称输入框修改 */ + public BindingCommand inputNameValueChangeCommand = new BindingCommand(newName -> { + if (!StringUtils.isTrimEmpty(newName)) { + inputName.set(newName); + } + }); + + /** 获取随机姓名 */ + public BindingCommand randomNameClickCommand = new BindingCommand(() -> { + inputName.set(RandomUtil.getRandomName(true, 3)); + }); + + /** 跳过按钮 */ + public BindingCommand skipBtnClickCommand = new BindingCommand(() ->{ + if (StringUtils.isTrimEmpty(inputName.get())) inputName.set(RandomUtil.getRandomName(true, 3)); // 如果没输入名字 则随机一个 + submitFormMsg(inputName.get(), womanCheckedStatus.get()); + }); + public BindingCommand submitBtnClickCommand = new BindingCommand(() ->{ + if (StringUtils.isTrimEmpty(inputName.get())) { // 如果没输入名字 则随机一个 + ToastUtil.show("请输入姓名"); + return; + } + submitFormMsg(inputName.get(), womanCheckedStatus.get()); }); public LoginSurveyViewModel(@NonNull Application application) { super(application); + DaggerServiceComponent + .builder() + .appComponent(((AppApplication) Utils.getApp().getApplicationContext()).appComponent) + .build().inject(this); } @Override public void onCreate(@NonNull LifecycleOwner owner) { super.onCreate(owner); + inputName.set(RandomUtil.getRandomName(true, 3)); } + + /** + * 表单提交 + * @param name + * @param isMan + */ + private void submitFormMsg(String name, Boolean isMan) { + String sex = isMan ? "0" : "1"; + LogUtils.d(name, sex); + User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User()); + SsoUser ssoUser = new SsoUser(user.getId(), sex, name); + + loginService.updateSsoUser(ssoUser) + .compose(RxUtil.schedulersTransformer()) + .compose(RxUtil.exceptionTransformer()) + .doOnSubscribe(this) + .subscribe(new DisposableObserver() { + @Override + public void onNext(ResultResponse R) { + if (R.getCode() == R.SUCCESS) { + user.setSex(sex); + user.setNickName(name); + CacheDiskUtils.getInstance().put(CacheConstant.USER_INFO, user); + } + } + + @Override + public void onError(Throwable e) { + ExceptionHandle.baseExceptionMsg(e); + } + + @Override + public void onComplete() { + startActivity(TabBarActivity.class); + } + }); + } + } diff --git a/app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java b/app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java index 5c21632..70adf29 100644 --- a/app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java +++ b/app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java @@ -32,6 +32,7 @@ import com.kanglai.push.entity.TokenEnhancer; import com.kanglai.push.entity.User; import com.kanglai.push.service.LoginService; import com.kanglai.push.ui.activity.LoginActivity; +import com.kanglai.push.ui.activity.LoginSurveyActivity; import com.kanglai.push.ui.activity.TabBarActivity; import com.kanglai.push.util.CountDownTimerUtils; import com.kongzue.dialogx.dialogs.WaitDialog; @@ -268,12 +269,15 @@ public class LoginViewModel extends BaseViewModel { if (!StringUtils.isTrimEmpty(user.getId())) { addAlias(user.getId(),1, 5); // 新增失败之后 利用递归重复新增 直到新增成功为止(最多6次) } else throw new RuntimeException("用户对象为空请重新登录!"); - // todo 判断是否第一次登录 isRegister MMKV.defaultMMKV().putString(CacheConstant.LOGIN_USERNAME, R.getData().getNickName()); MMKV.defaultMMKV().putString(CacheConstant.LOGIN_PASSWORD, password.get()); CacheDiskUtils.getInstance().put(CacheConstant.USER_INFO, user); + if (isRegister) { // 判断是否第一次登录 isRegister + startActivity(LoginSurveyActivity.class); + return; + } startActivity(TabBarActivity.class); - finish(); +// finish(); } } else ToastUtil.showBottomWarn(R.getMsg()); } diff --git a/app/src/main/java/com/kanglai/push/util/RandomUtil.java b/app/src/main/java/com/kanglai/push/util/RandomUtil.java new file mode 100644 index 0000000..0633b49 --- /dev/null +++ b/app/src/main/java/com/kanglai/push/util/RandomUtil.java @@ -0,0 +1,51 @@ +package com.kanglai.push.util; + +import com.kanglai.push.app.AppApplication; + +import com.kanglai.push.R; + +import java.util.Random; + +/** + * 获取随机取名 + * @Author: liusixiang007 + * @since: 2024/1/9 + */ +public class RandomUtil { + + /** + * 随机获取一个名字 + * @param simple 是否单姓 + * @param len 名字长度 + * @return + */ + public static String getRandomName(boolean simple, int len) { + String[] surName = AppApplication.mContext.getResources().getStringArray(R.array.random_sur_name_items); + String[] doubleSurName = AppApplication.mContext.getResources().getStringArray(R.array.random_double_sur_name_items); + String[] word = AppApplication.mContext.getResources().getStringArray(R.array.random_word_name_items); + int surNameLen = surName.length; + int doubleSurNameLen = doubleSurName.length; + int wordLen = word.length; + + StringBuffer sb = new StringBuffer(); + Random random = new Random(); + if(simple){ + sb.append(surName[random.nextInt(surNameLen)]); + int surLen = sb.toString().length(); + for (int i = 0; i < len - surLen; i++) { + if(sb.toString().length() <= len){ + sb.append(word[random.nextInt(wordLen)]); + } + } + }else{ + sb.append(doubleSurName[random.nextInt(doubleSurNameLen)]); + int doubleSurLen = sb.toString().length(); + for (int i = 0; i < len - doubleSurLen; i++) { + if(sb.toString().length() <= len){ + sb.append(word[random.nextInt(wordLen)]); + } + } + } + return sb.toString(); + } +} diff --git a/app/src/main/res/drawable-nodpi/icon_dice.xml b/app/src/main/res/drawable-nodpi/icon_dice.xml new file mode 100644 index 0000000..351dc76 --- /dev/null +++ b/app/src/main/res/drawable-nodpi/icon_dice.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/icon_btn_border.xml b/app/src/main/res/drawable/icon_btn_border.xml deleted file mode 100644 index e42a114..0000000 --- a/app/src/main/res/drawable/icon_btn_border.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_btn_swipeable_bg1.xml b/app/src/main/res/drawable/icon_btn_swipeable_bg1.xml index f994808..f0f187a 100644 --- a/app/src/main/res/drawable/icon_btn_swipeable_bg1.xml +++ b/app/src/main/res/drawable/icon_btn_swipeable_bg1.xml @@ -1,4 +1,6 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login_survey.xml b/app/src/main/res/layout/activity_login_survey.xml index dc62ea0..c1ef065 100644 --- a/app/src/main/res/layout/activity_login_survey.xml +++ b/app/src/main/res/layout/activity_login_survey.xml @@ -8,6 +8,16 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> + + + +