Commit 7706db63a35b77700de04f2887b5574d3cb53b28

Authored by gaiyaguang
0 parents

2018-10-10

Showing 49 changed files with 4853 additions and 0 deletions

Too many changes to show.

To preserve performance only 49 of 49+ files are displayed.

*.iml
.gradle
/local.properties
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
.DS_Store
/build
/captures
.externalNativeBuild
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WizardSettings">
<option name="children">
<map>
<entry key="imageWizard">
<value>
<PersistentState />
</value>
</entry>
</map>
</option>
</component>
</project>
\ No newline at end of file
... ...
No preview for this file type
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
</code_scheme>
</component>
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/app/src/main/assets/xiaotao.jks" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/mvvmhabit" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
<item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
... ...
/build
... ...
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.naji.xiaotao"
minSdkVersion 15
targetSdkVersion 27
versionCode 4
versionName "1.0.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
//选择要添加的对应cpu类型的.so库。
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
}
manifestPlaceholders = [
JPUSH_PKGNAME : "com.naji.xiaotao",
JPUSH_APPKEY : "7d1e57b0d37d8d4cdf945912", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
]
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support:design:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation('com.jcodecraeer:xrecyclerview:1.5.9', {
exclude group: 'com.android.support', module: 'design'
})
//动态修改状态栏颜色
implementation 'com.githang:status-bar-compat:0.7'
//圆角图片
implementation 'com.github.Othershe:NiceImageView:1.0.1'
implementation 'cn.jiguang.sdk:jpush:3.1.5' // 此处以JPush 3.1.5 版本为例。
implementation 'cn.jiguang.sdk:jcore:1.2.3' // 此处以JCore 1.2.3 版本为例。
//MVVMHabit
implementation project(':mvvmhabit')
annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:4.2.4"
// gradle 3.0.0 可以使用 implementation,否则用 compile
implementation "com.github.Raizlabs.DBFlow:dbflow-core:4.2.4"
implementation "com.github.Raizlabs.DBFlow:dbflow:4.2.4"
//进度条
implementation 'com.daimajia.numberprogressbar:library:1.4@aar'
//bugly自动升级
implementation 'com.tencent.bugly:crashreport_upgrade:latest.release'
implementation 'com.tencent.bugly:nativecrashreport:latest.release'
}
... ...
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
... ...
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":4,"versionName":"1.0.4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
... ...
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
package com.naji.xiaotao;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.naji.xiaotao", appContext.getPackageName());
}
}
... ...
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.naji.xiaotao">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<!-- Required -->
<permission
android:name="com.naji.xiaotao.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- Required -->
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- Optional. Required for location feature -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme"
>
<activity android:name=".login.ui.LoginActivity"
android:screenOrientation="portrait"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".tangshi.ui.TangShiActivity"
android:label="控制台主页"
android:screenOrientation="portrait"
android:launchMode="singleTask"
/>
<activity android:name=".cookbook.ui.CookBookMainActivity"
android:label="菜谱主页"
android:screenOrientation="portrait"
android:launchMode="singleTask"
/>
<activity android:name=".cart.ui.CartActivity"
android:label="购物车"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan"
/>
<activity android:name=".cart.ui.RemarkActivity"
android:label="整单备注"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"
/>
<activity android:name=".order.ui.OrderActivity"
android:label="订单详情"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"
/>
<activity android:name=".pay.ui.PayActivity"
android:label="结账"
android:screenOrientation="portrait"
/>
<activity android:name=".order.ui.OrderAffirmActivity"
android:label="订单确认"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"
/>
<activity android:name=".order.ui.OrderRetireActivity"
android:label="退菜"
android:screenOrientation="portrait"
/>
<activity android:name=".receipt.ui.ReceiptActivity"
android:label="发票详情"
android:screenOrientation="portrait"
/>
<activity android:name=".pay.ui.ZddzActivity"
android:label="整单打折"
android:screenOrientation="portrait"
/>
<activity android:name=".pay.ui.ZdyyhActivity"
android:label="自定义优惠"
android:screenOrientation="portrait"
/>
<activity android:name=".tangshi.ui.TableListActivity"
android:label="可选桌位列表"
android:screenOrientation="portrait"
/>
<activity android:name=".history.ui.HistoryActivity"
android:label="历史订单"
android:screenOrientation="portrait"
android:launchMode="singleTask"
/>
<!--版本更新-->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
<!-- Required SDK 核心功能-->
<!-- 可配置android:process参数将PushService放在其他进程中 -->
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
</intent-filter>
</service>
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
android:authorities="com.naji.xiaotao.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:exported="true"
tools:replace="android:exported" />
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service
android:name="cn.jpush.android.service.DaemonService"
android:enabled="true"
android:exported="true">
<intent-filter >
<action android:name="cn.jpush.android.intent.DaemonService" />
<category android:name="com.naji.xiaotao"/>
</intent-filter>
</service>
<!-- since 3.1.0 Required SDK 核心功能-->
<provider
android:authorities="com.naji.xiaotao.DownloadProvider"
android:name="cn.jpush.android.service.DownloadProvider"
android:exported="true"
/>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true" >
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<category android:name="com.naji.xiaotao"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<!-- Optional -->
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<!-- Required SDK核心功能-->
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.naji.xiaotao" />
</intent-filter>
</activity>
<!-- SDK核心功能-->
<activity
android:name="cn.jpush.android.ui.PopWinActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="false"
android:theme="@style/MyDialogStyle">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.naji.xiaotao" />
</intent-filter>
</activity>
<!-- Required SDK核心功能-->
<service
android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false" >
</service>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.AlarmReceiver" />
<!-- Required since 3.0.7 -->
<!-- 新的tag/alias接口结果返回需要开发者配置一个自定的广播 -->
<!-- 该广播需要继承JPush提供的JPushMessageReceiver类, 并如下新增一个 Intent-Filter -->
<receiver
android:name=".message.receiver.TagReceiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="com.naji.xiaotao" />
</intent-filter>
</receiver>
<!-- User defined. 用户自定义的广播接收器-->
<receiver
android:name=".message.receiver.MessageReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<!--Required 用户注册SDK的intent-->
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<!--Required 用户接收SDK消息的intent-->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<!--Required 用户接收SDK通知栏信息的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<!--Required 用户打开自定义通知栏的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<!-- 接收网络变化 连接/断开 since 1.6.3 -->
<action android:name="cn.jpush.android.intent.CONNECTION" />
<category android:name="com.naji.xiaotao" />
</intent-filter>
</receiver>
<!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->
<!-- 例如: -->
<!-- 发到 Google Play 的APK可以设置为 google-play; -->
<!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
<!-- Required. AppKey copied from Portal -->
<meta-data android:name="JPUSH_APPKEY" android:value="7d1e57b0d37d8d4cdf945912"/>
</application>
</manifest>
\ No newline at end of file
... ...
No preview for this file type
package com.naji.xiaotao;
import android.app.Activity;
import android.content.Context;
import com.githang.statusbar.StatusBarCompat;
import com.naji.xiaotao.login.ui.LoginActivity;
import com.naji.xiaotao.tangshi.ui.TangShiActivity;
import com.raizlabs.android.dbflow.config.FlowManager;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import cn.jpush.android.api.JPushInterface;
import me.goldze.mvvmhabit.base.BaseApplication;
import me.goldze.mvvmhabit.crash.CaocConfig;
import me.goldze.mvvmhabit.utils.KLog;
public class App extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
Bugly.init(getApplicationContext(), "493c3c1046", false);
Beta.canShowUpgradeActs.add(TangShiActivity.class);
//初始化DbFlow
FlowManager.init(this);
//初始化极光推送
JPushInterface.init(this);
JPushInterface.setDebugMode(false);
//开启打印日志
KLog.init(false);
//初始化全局异常崩溃
initCrash();
}
private void initCrash() {
CaocConfig.Builder.create()
.backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT) //背景模式,开启沉浸式
.enabled(true) //是否启动全局异常捕获
.showErrorDetails(true) //是否显示错误详细信息
.showRestartButton(true) //是否显示重启按钮
.trackActivities(true) //是否跟踪Activity
.minTimeBetweenCrashesMs(2000) //崩溃的间隔时间(毫秒)
.errorDrawable(R.mipmap.ic_launcher) //错误图标
.restartActivity(LoginActivity.class) //重新启动后的activity
// .errorActivity(YourCustomErrorActivity.class) //崩溃后的错误activity
// .eventListener(new YourCustomEventListener()) //崩溃后的错误监听
.apply();
}
}
... ...
package com.naji.xiaotao.cart.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cart.entity.ClearDetail;
import com.naji.xiaotao.cookbook.adapter.RvAdapter;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import java.util.List;
public class ClearAdapter extends RvAdapter<ClearDetail>{
public ClearAdapter(Context context, List<ClearDetail> list){
super(context,list,null);
}
@Override
protected int getLayoutId(int viewType) {
return R.layout.layout_clear_item;
}
@Override
protected RvHolder getHolder(View view, int viewType) {
return new ClearHolder(view,viewType,null);
}
public class ClearHolder extends RvHolder<ClearDetail>{
private TextView cookName;
private TextView cookPractice;
private TextView cookNum;
private TextView cookMinNum;
public ClearHolder(View itemView, int type, RvListener rvListener){
super(itemView,type,rvListener);
cookName=itemView.findViewById(R.id.cook_name);
cookPractice=itemView.findViewById(R.id.cook_practice);
cookNum=itemView.findViewById(R.id.cook_num);
cookMinNum=itemView.findViewById(R.id.cook_min_num);
}
@Override
public void bindHolder(ClearDetail clearDetail, int position) {
cookName.setText(clearDetail.getName());
if(TextUtils.isEmpty(clearDetail.getPractice_name())){
cookPractice.setVisibility(View.INVISIBLE);
}else{
cookPractice.setText(clearDetail.getPractice_name());
cookPractice.setVisibility(View.VISIBLE);
}
cookNum.setText(clearDetail.getCount()+"份");
if(Integer.parseInt(clearDetail.getMin_num())==0){
cookMinNum.setText("卖光了");
cookMinNum.setTextColor(mContext.getResources().getColor(R.color.text4));
}else{
cookMinNum.setText("本次下单"+clearDetail.getMin_num()+"份");
cookMinNum.setTextColor(mContext.getResources().getColor(R.color.text5));
}
}
}
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.List;
public class CartCookbook implements Parcelable {
private String class_name;
private List<CartCookbookDetail> list;
private int total;
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public List<CartCookbookDetail> getList() {
return list;
}
public void setList(List<CartCookbookDetail> list) {
this.list = list;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.class_name);
dest.writeTypedList(this.list);
dest.writeInt(this.total);
}
public CartCookbook() {
}
protected CartCookbook(Parcel in) {
this.class_name = in.readString();
this.list = in.createTypedArrayList(CartCookbookDetail.CREATOR);
this.total = in.readInt();
}
public static final Creator<CartCookbook> CREATOR = new Creator<CartCookbook>() {
@Override
public CartCookbook createFromParcel(Parcel source) {
return new CartCookbook(source);
}
@Override
public CartCookbook[] newArray(int size) {
return new CartCookbook[size];
}
};
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
public class CartCookbookDetail implements Parcelable {
private String count;//数量
private String cookbookid;
private String price;
private String member_price;
private String specid;
private String fromSource;
private String openid;
private String id;
private String practiceid;
private String identity;
private String image;
private String unit;
private String name;
private String class_name;
private String classid;
private String spec_price;
private String spec_member_price;
private String practice_name;
private String headerimg;
private String sellerid;
private String pnum;
private String cdate;
private String meal_fee;
private String specs;
private String titleName;
private boolean isTitle;//title标志位
private String tag;
private int size;//标题栏下面的item数量
private String retire_reason;//退菜原因
private String open_name;//操作员
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public String getCookbookid() {
return cookbookid;
}
public void setCookbookid(String cookbookid) {
this.cookbookid = cookbookid;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getMember_price() {
return member_price;
}
public void setMember_price(String member_price) {
this.member_price = member_price;
}
public String getSpecid() {
return specid;
}
public void setSpecid(String specid) {
this.specid = specid;
}
public String getFromSource() {
return fromSource;
}
public void setFromSource(String fromSource) {
this.fromSource = fromSource;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPracticeid() {
return practiceid;
}
public void setPracticeid(String practiceid) {
this.practiceid = practiceid;
}
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public String getClassid() {
return classid;
}
public void setClassid(String classid) {
this.classid = classid;
}
public String getSpec_price() {
return spec_price;
}
public void setSpec_price(String spec_price) {
this.spec_price = spec_price;
}
public String getSpec_member_price() {
return spec_member_price;
}
public void setSpec_member_price(String spec_member_price) {
this.spec_member_price = spec_member_price;
}
public String getPractice_name() {
return practice_name;
}
public void setPractice_name(String practice_name) {
this.practice_name = practice_name;
}
public String getHeaderimg() {
return headerimg;
}
public void setHeaderimg(String headerimg) {
this.headerimg = headerimg;
}
public String getSellerid() {
return sellerid;
}
public void setSellerid(String sellerid) {
this.sellerid = sellerid;
}
public String getPnum() {
return pnum;
}
public void setPnum(String pnum) {
this.pnum = pnum;
}
public String getCdate() {
return cdate;
}
public void setCdate(String cdate) {
this.cdate = cdate;
}
public String getMeal_fee() {
return meal_fee;
}
public void setMeal_fee(String meal_fee) {
this.meal_fee = meal_fee;
}
public String getSpecs() {
return specs;
}
public void setSpecs(String specs) {
this.specs = specs;
}
public String getTitleName() {
return titleName;
}
public void setTitleName(String titleName) {
this.titleName = titleName;
}
public boolean isTitle() {
return isTitle;
}
public void setTitle(boolean title) {
isTitle = title;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getRetire_reason() {
return retire_reason;
}
public void setRetire_reason(String retire_reason) {
this.retire_reason = retire_reason;
}
public String getOpen_name() {
return open_name;
}
public void setOpen_name(String open_name) {
this.open_name = open_name;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.count);
dest.writeString(this.cookbookid);
dest.writeString(this.price);
dest.writeString(this.member_price);
dest.writeString(this.specid);
dest.writeString(this.fromSource);
dest.writeString(this.openid);
dest.writeString(this.id);
dest.writeString(this.practiceid);
dest.writeString(this.identity);
dest.writeString(this.image);
dest.writeString(this.unit);
dest.writeString(this.name);
dest.writeString(this.class_name);
dest.writeString(this.classid);
dest.writeString(this.spec_price);
dest.writeString(this.spec_member_price);
dest.writeString(this.practice_name);
dest.writeString(this.headerimg);
dest.writeString(this.sellerid);
dest.writeString(this.pnum);
dest.writeString(this.cdate);
dest.writeString(this.meal_fee);
dest.writeString(this.specs);
dest.writeString(this.titleName);
dest.writeByte(this.isTitle ? (byte) 1 : (byte) 0);
dest.writeString(this.tag);
dest.writeInt(this.size);
dest.writeString(this.retire_reason);
dest.writeString(this.open_name);
}
public CartCookbookDetail() {
}
protected CartCookbookDetail(Parcel in) {
this.count = in.readString();
this.cookbookid = in.readString();
this.price = in.readString();
this.member_price = in.readString();
this.specid = in.readString();
this.fromSource = in.readString();
this.openid = in.readString();
this.id = in.readString();
this.practiceid = in.readString();
this.identity = in.readString();
this.image = in.readString();
this.unit = in.readString();
this.name = in.readString();
this.class_name = in.readString();
this.classid = in.readString();
this.spec_price = in.readString();
this.spec_member_price = in.readString();
this.practice_name = in.readString();
this.headerimg = in.readString();
this.sellerid = in.readString();
this.pnum = in.readString();
this.cdate = in.readString();
this.meal_fee = in.readString();
this.specs = in.readString();
this.titleName = in.readString();
this.isTitle = in.readByte() != 0;
this.tag = in.readString();
this.size = in.readInt();
this.retire_reason = in.readString();
this.open_name = in.readString();
}
public static final Creator<CartCookbookDetail> CREATOR = new Creator<CartCookbookDetail>() {
@Override
public CartCookbookDetail createFromParcel(Parcel source) {
return new CartCookbookDetail(source);
}
@Override
public CartCookbookDetail[] newArray(int size) {
return new CartCookbookDetail[size];
}
};
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;
public class CartEntity implements Parcelable {
private List<OrderEntity> order;
private List<CartCookbook> cookbooklist;
private int countTotal;
private float countPirce;
private float countMemberPirce;
public List<OrderEntity> getOrder() {
return order;
}
public void setOrder(List<OrderEntity> order) {
this.order = order;
}
public List<CartCookbook> getCookbooklist() {
return cookbooklist;
}
public void setCookbooklist(List<CartCookbook> cookbooklist) {
this.cookbooklist = cookbooklist;
}
public int getCountTotal() {
return countTotal;
}
public void setCountTotal(int countTotal) {
this.countTotal = countTotal;
}
public float getCountPirce() {
return countPirce;
}
public void setCountPirce(float countPirce) {
this.countPirce = countPirce;
}
public float getCountMemberPirce() {
return countMemberPirce;
}
public void setCountMemberPirce(float countMemberPirce) {
this.countMemberPirce = countMemberPirce;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedList(this.order);
dest.writeTypedList(this.cookbooklist);
dest.writeInt(this.countTotal);
dest.writeFloat(this.countPirce);
dest.writeFloat(this.countMemberPirce);
}
public CartEntity() {
}
protected CartEntity(Parcel in) {
this.order = in.createTypedArrayList(OrderEntity.CREATOR);
this.cookbooklist = in.createTypedArrayList(CartCookbook.CREATOR);
this.countTotal = in.readInt();
this.countPirce = in.readFloat();
this.countMemberPirce = in.readFloat();
}
public static final Parcelable.Creator<CartEntity> CREATOR = new Parcelable.Creator<CartEntity>() {
@Override
public CartEntity createFromParcel(Parcel source) {
return new CartEntity(source);
}
@Override
public CartEntity[] newArray(int size) {
return new CartEntity[size];
}
};
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
public class ClearDetail implements Parcelable {
private String count;
private String cookbookid;
private String status;
private String price;
private String member_price;
private String specid;
private String fromSource;
private String openid;
private String id;
private String practiceid;
private String identity;
private String image;
private String unit;
private String name;
private String class_name;
private String classid;
private String spec_price;
private String spec_member_price;
private String practice_name;
private String headerimg;
private String sellerid;
private String pnum;
private String cdate;
private String meal_fee;
private String min_num;
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public String getCookbookid() {
return cookbookid;
}
public void setCookbookid(String cookbookid) {
this.cookbookid = cookbookid;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getMember_price() {
return member_price;
}
public void setMember_price(String member_price) {
this.member_price = member_price;
}
public String getSpecid() {
return specid;
}
public void setSpecid(String specid) {
this.specid = specid;
}
public String getFromSource() {
return fromSource;
}
public void setFromSource(String fromSource) {
this.fromSource = fromSource;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPracticeid() {
return practiceid;
}
public void setPracticeid(String practiceid) {
this.practiceid = practiceid;
}
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public String getClassid() {
return classid;
}
public void setClassid(String classid) {
this.classid = classid;
}
public String getSpec_price() {
return spec_price;
}
public void setSpec_price(String spec_price) {
this.spec_price = spec_price;
}
public String getSpec_member_price() {
return spec_member_price;
}
public void setSpec_member_price(String spec_member_price) {
this.spec_member_price = spec_member_price;
}
public String getPractice_name() {
return practice_name;
}
public void setPractice_name(String practice_name) {
this.practice_name = practice_name;
}
public String getHeaderimg() {
return headerimg;
}
public void setHeaderimg(String headerimg) {
this.headerimg = headerimg;
}
public String getSellerid() {
return sellerid;
}
public void setSellerid(String sellerid) {
this.sellerid = sellerid;
}
public String getPnum() {
return pnum;
}
public void setPnum(String pnum) {
this.pnum = pnum;
}
public String getCdate() {
return cdate;
}
public void setCdate(String cdate) {
this.cdate = cdate;
}
public String getMeal_fee() {
return meal_fee;
}
public void setMeal_fee(String meal_fee) {
this.meal_fee = meal_fee;
}
public String getMin_num() {
return min_num;
}
public void setMin_num(String min_num) {
this.min_num = min_num;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.count);
dest.writeString(this.cookbookid);
dest.writeString(this.status);
dest.writeString(this.price);
dest.writeString(this.member_price);
dest.writeString(this.specid);
dest.writeString(this.fromSource);
dest.writeString(this.openid);
dest.writeString(this.id);
dest.writeString(this.practiceid);
dest.writeString(this.identity);
dest.writeString(this.image);
dest.writeString(this.unit);
dest.writeString(this.name);
dest.writeString(this.class_name);
dest.writeString(this.classid);
dest.writeString(this.spec_price);
dest.writeString(this.spec_member_price);
dest.writeString(this.practice_name);
dest.writeString(this.headerimg);
dest.writeString(this.sellerid);
dest.writeString(this.pnum);
dest.writeString(this.cdate);
dest.writeString(this.meal_fee);
dest.writeString(this.min_num);
}
public ClearDetail() {
}
protected ClearDetail(Parcel in) {
this.count = in.readString();
this.cookbookid = in.readString();
this.status = in.readString();
this.price = in.readString();
this.member_price = in.readString();
this.specid = in.readString();
this.fromSource = in.readString();
this.openid = in.readString();
this.id = in.readString();
this.practiceid = in.readString();
this.identity = in.readString();
this.image = in.readString();
this.unit = in.readString();
this.name = in.readString();
this.class_name = in.readString();
this.classid = in.readString();
this.spec_price = in.readString();
this.spec_member_price = in.readString();
this.practice_name = in.readString();
this.headerimg = in.readString();
this.sellerid = in.readString();
this.pnum = in.readString();
this.cdate = in.readString();
this.meal_fee = in.readString();
this.min_num = in.readString();
}
public static final Parcelable.Creator<ClearDetail> CREATOR = new Parcelable.Creator<ClearDetail>() {
@Override
public ClearDetail createFromParcel(Parcel source) {
return new ClearDetail(source);
}
@Override
public ClearDetail[] newArray(int size) {
return new ClearDetail[size];
}
};
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;
public class ClearOutter implements Parcelable {
private List<ClearDetail> min_num;
private List<ClearDetail> clear_error;
public List<ClearDetail> getMin_num() {
return min_num;
}
public void setMin_num(List<ClearDetail> min_num) {
this.min_num = min_num;
}
public List<ClearDetail> getClear_error() {
return clear_error;
}
public void setClear_error(List<ClearDetail> clear_error) {
this.clear_error = clear_error;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(this.min_num);
dest.writeList(this.clear_error);
}
public ClearOutter() {
}
protected ClearOutter(Parcel in) {
this.min_num = new ArrayList<ClearDetail>();
in.readList(this.min_num, ClearDetail.class.getClassLoader());
this.clear_error = new ArrayList<ClearDetail>();
in.readList(this.clear_error, ClearDetail.class.getClassLoader());
}
public static final Parcelable.Creator<ClearOutter> CREATOR = new Parcelable.Creator<ClearOutter>() {
@Override
public ClearOutter createFromParcel(Parcel source) {
return new ClearOutter(source);
}
@Override
public ClearOutter[] newArray(int size) {
return new ClearOutter[size];
}
};
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class OrderEntity implements Parcelable {
private String id;
private String no;
private String row_num;
private String pnum;
private String sellerid;
private String tableid;
private String openid;
private String price;
private String status;
private String remark;
private String remarkid;
private String type;
private String phone;
private String behavior;
private String cdate;
private String meal_fee;
private String is_clear_table;
private String tablename;
private String table_pnum;
private String qrcode;
private String sellername;
private List<RemarkItemEntity> remarkList;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getRow_num() {
return row_num;
}
public void setRow_num(String row_num) {
this.row_num = row_num;
}
public String getPnum() {
return pnum;
}
public void setPnum(String pnum) {
this.pnum = pnum;
}
public String getSellerid() {
return sellerid;
}
public void setSellerid(String sellerid) {
this.sellerid = sellerid;
}
public String getTableid() {
return tableid;
}
public void setTableid(String tableid) {
this.tableid = tableid;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getRemarkid() {
return remarkid;
}
public void setRemarkid(String remarkid) {
this.remarkid = remarkid;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getBehavior() {
return behavior;
}
public void setBehavior(String behavior) {
this.behavior = behavior;
}
public String getCdate() {
return cdate;
}
public void setCdate(String cdate) {
this.cdate = cdate;
}
public String getMeal_fee() {
return meal_fee;
}
public void setMeal_fee(String meal_fee) {
this.meal_fee = meal_fee;
}
public String getIs_clear_table() {
return is_clear_table;
}
public void setIs_clear_table(String is_clear_table) {
this.is_clear_table = is_clear_table;
}
public String getTablename() {
return tablename;
}
public void setTablename(String tablename) {
this.tablename = tablename;
}
public String getTable_pnum() {
return table_pnum;
}
public void setTable_pnum(String table_pnum) {
this.table_pnum = table_pnum;
}
public String getQrcode() {
return qrcode;
}
public void setQrcode(String qrcode) {
this.qrcode = qrcode;
}
public String getSellername() {
return sellername;
}
public void setSellername(String sellername) {
this.sellername = sellername;
}
public List<RemarkItemEntity> getRemarkList() {
return remarkList;
}
public void setRemarkList(List<RemarkItemEntity> remarkList) {
this.remarkList = remarkList;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.id);
dest.writeString(this.no);
dest.writeString(this.row_num);
dest.writeString(this.pnum);
dest.writeString(this.sellerid);
dest.writeString(this.tableid);
dest.writeString(this.openid);
dest.writeString(this.price);
dest.writeString(this.status);
dest.writeString(this.remark);
dest.writeString(this.remarkid);
dest.writeString(this.type);
dest.writeString(this.phone);
dest.writeString(this.behavior);
dest.writeString(this.cdate);
dest.writeString(this.meal_fee);
dest.writeString(this.is_clear_table);
dest.writeString(this.tablename);
dest.writeString(this.table_pnum);
dest.writeString(this.qrcode);
dest.writeString(this.sellername);
dest.writeTypedList(this.remarkList);
}
public OrderEntity() {
}
protected OrderEntity(Parcel in) {
this.id = in.readString();
this.no = in.readString();
this.row_num = in.readString();
this.pnum = in.readString();
this.sellerid = in.readString();
this.tableid = in.readString();
this.openid = in.readString();
this.price = in.readString();
this.status = in.readString();
this.remark = in.readString();
this.remarkid = in.readString();
this.type = in.readString();
this.phone = in.readString();
this.behavior = in.readString();
this.cdate = in.readString();
this.meal_fee = in.readString();
this.is_clear_table = in.readString();
this.tablename = in.readString();
this.table_pnum = in.readString();
this.qrcode = in.readString();
this.sellername = in.readString();
this.remarkList = in.createTypedArrayList(RemarkItemEntity.CREATOR);
}
public static final Creator<OrderEntity> CREATOR = new Creator<OrderEntity>() {
@Override
public OrderEntity createFromParcel(Parcel source) {
return new OrderEntity(source);
}
@Override
public OrderEntity[] newArray(int size) {
return new OrderEntity[size];
}
};
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.List;
public class RemarkEntity implements Parcelable {
private List<RemarkItemEntity> list;
public List<RemarkItemEntity> getList() {
return list;
}
public void setList(List<RemarkItemEntity> list) {
this.list = list;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedList(this.list);
}
public RemarkEntity() {
}
protected RemarkEntity(Parcel in) {
this.list = in.createTypedArrayList(RemarkItemEntity.CREATOR);
}
public static final Parcelable.Creator<RemarkEntity> CREATOR = new Parcelable.Creator<RemarkEntity>() {
@Override
public RemarkEntity createFromParcel(Parcel source) {
return new RemarkEntity(source);
}
@Override
public RemarkEntity[] newArray(int size) {
return new RemarkEntity[size];
}
};
}
... ...
package com.naji.xiaotao.cart.entity;
import android.os.Parcel;
import android.os.Parcelable;
public class RemarkItemEntity implements Parcelable {
private String id;
private String sellerid;
private String remark;
private String cdate;
private String desc;
private String line;
private boolean selected;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSellerid() {
return sellerid;
}
public void setSellerid(String sellerid) {
this.sellerid = sellerid;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getCdate() {
return cdate;
}
public void setCdate(String cdate) {
this.cdate = cdate;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getLine() {
return line;
}
public void setLine(String line) {
this.line = line;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.id);
dest.writeString(this.sellerid);
dest.writeString(this.remark);
dest.writeString(this.cdate);
dest.writeString(this.desc);
dest.writeString(this.line);
dest.writeByte(this.selected ? (byte) 1 : (byte) 0);
}
public RemarkItemEntity() {
}
protected RemarkItemEntity(Parcel in) {
this.id = in.readString();
this.sellerid = in.readString();
this.remark = in.readString();
this.cdate = in.readString();
this.desc = in.readString();
this.line = in.readString();
this.selected = in.readByte() != 0;
}
public static final Creator<RemarkItemEntity> CREATOR = new Creator<RemarkItemEntity>() {
@Override
public RemarkItemEntity createFromParcel(Parcel source) {
return new RemarkItemEntity(source);
}
@Override
public RemarkItemEntity[] newArray(int size) {
return new RemarkItemEntity[size];
}
};
}
... ...
package com.naji.xiaotao.cart.service;
import com.naji.xiaotao.cart.entity.CartEntity;
import com.naji.xiaotao.cart.entity.ClearOutter;
import com.naji.xiaotao.cart.entity.RemarkEntity;
import com.naji.xiaotao.cookbook.bean.OuterEntity;
import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
import me.goldze.mvvmhabit.http.BaseResponse;
import retrofit2.http.GET;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
public interface CartApiService {
//获取订单详情
@GET("?service=Android.Orders.GetOrderById")
Observable<BaseResponse<List<CartEntity>>> getOrderById(@QueryMap Map<String,String> params);
//获取备注列表
@GET("?service=Android.Orders.GetRemarkBySellerid")
Observable<BaseResponse<List<List<RemarkEntity>>>> getRemarkBySellerid(@QueryMap Map<String,String> params);
//修改订单人数备注
@GET("?service=Android.Orders.SetOrderById")
Observable<BaseResponse<List<String>>> setOrderById(@QueryMap Map<String,String> params);
//下单时检测菜品是否充足
@GET("?service=Android.Orders.SetClearNum")
Observable<BaseResponse<List<ClearOutter>>> setClearNum(@QueryMap Map<String,String> params);
//去除购物车中数量不足或卖光菜品
@GET("?service=Android.Orders.ClearCookbook")
Observable<BaseResponse<List<String>>> clearCookbook(@QueryMap Map<String,String> params);
//下单接口
@GET("?service=Android.Orders.PlaceOrder")
Observable<BaseResponse<List<String>>> placeOrder(@QueryMap Map<String,String> params);
}
... ...
package com.naji.xiaotao.cart.ui;
import android.content.Context;
import android.databinding.ObservableList;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.naji.xiaotao.BR;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cart.vm.CartItemViewModel;
import com.naji.xiaotao.cart.vm.CartViewModel;
import com.naji.xiaotao.databinding.ActivityCartBinding;
import me.goldze.mvvmhabit.base.BaseActivity;
import me.goldze.mvvmhabit.utils.KLog;
public class CartActivity extends BaseActivity<ActivityCartBinding,CartViewModel>implements CartViewModel.OnRequestFocusListener{
private InputMethodManager mInputMethorManager;
@Override
public int initContentView(Bundle savedInstanceState) {
mInputMethorManager=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
return R.layout.activity_cart;
}
@Override
public int initVariableId() {
return BR.viewModel;
}
@Override
public CartViewModel initViewModel() {
return new CartViewModel(this,getIntent().getStringExtra("orderid"),this,getIntent().getStringExtra("fromSource"),getIntent().getBooleanExtra("isFast",false),getIntent().getBooleanExtra("isWaitingSure",false),getIntent().getStringExtra("messageid"));
}
@Override
public void initViewObservable() {
super.initViewObservable();
binding.remarkEdt.setCursorVisible(false);
binding.remarkEdt.setFocusableInTouchMode(false);
binding.remarkEdt.setFocusable(false);
viewModel.observableList.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<CartItemViewModel>>() {
@Override
public void onChanged(ObservableList<CartItemViewModel> sender) {
KLog.d("AAAAAAAAA");
}
@Override
public void onItemRangeChanged(ObservableList<CartItemViewModel> sender, int positionStart, int itemCount) {
KLog.d("BBBBBBBBB");
}
@Override
public void onItemRangeInserted(ObservableList<CartItemViewModel> sender, int positionStart, int itemCount) {
KLog.d("CCCCCCCC");
if(viewModel.isSetMealFee.equals("1")){
if(viewModel.observableList.size()>2){
binding.empty.setVisibility(View.GONE);
binding.content.setVisibility(View.VISIBLE);
}
}else{
binding.empty.setVisibility(View.GONE);
binding.content.setVisibility(View.VISIBLE);
}
}
@Override
public void onItemRangeMoved(ObservableList<CartItemViewModel> sender, int fromPosition, int toPosition, int itemCount) {
KLog.d("DDDDDDDDDDD");
}
@Override
public void onItemRangeRemoved(ObservableList<CartItemViewModel> sender, int positionStart, int itemCount) {
KLog.d("EEEEEEEEEEE");
if(!TextUtils.isEmpty(viewModel.orderEntity.getMeal_fee())){
if(viewModel.observableList.size()<=2){
binding.content.setVisibility(View.GONE);
binding.empty.setVisibility(View.VISIBLE);
}
}else{
if(viewModel.observableList.size()<=0){
binding.content.setVisibility(View.GONE);
binding.empty.setVisibility(View.VISIBLE);
}
}
}
});
}
@Override
public void onPnumRequestFocus() {
binding.pnumEdt.setFocusable(true);
binding.pnumEdt.setFocusableInTouchMode(true);
binding.pnumEdt.requestFocus();
binding.pnumEdt.findFocus();
binding.pnumEdt.setSelection(binding.pnumEdt.getText().toString().length());
mInputMethorManager.showSoftInput(binding.pnumEdt,InputMethodManager.SHOW_FORCED);
}
@Override
public void onRemardRequestFocus() {
binding.remarkEdt.setFocusable(true);
binding.remarkEdt.setFocusableInTouchMode(true);
binding.remarkEdt.requestFocus();
binding.remarkEdt.findFocus();
binding.remarkEdt.setSelection(binding.remarkEdt.getText().toString().length());
mInputMethorManager.showSoftInput(binding.remarkEdt,InputMethodManager.SHOW_FORCED);
}
}
... ...
package com.naji.xiaotao.cart.ui;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cart.adapter.ClearAdapter;
import com.naji.xiaotao.cart.entity.ClearDetail;
import com.naji.xiaotao.cart.entity.ClearOutter;
import com.naji.xiaotao.cart.service.CartApiService;
import com.naji.xiaotao.common.dialog.RightDialog;
import com.naji.xiaotao.cookbook.bean.OuterEntity;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.order.ui.OrderActivity;
import com.naji.xiaotao.tangshi.service.TangshiApiService;
import com.naji.xiaotao.tangshi.ui.TangShiActivity;
import com.naji.xiaotao.util.DialogUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.MaterialDialogUtils;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class ClearDialogFragment extends DialogFragment{
private RecyclerView mRecyclerview;
private ClearAdapter mAdapter;
private ClearOutter clearOutter;
private String orderid;
private String messageid;
private String sellerid;
private boolean isFast;//是否快餐
private List<ClearDetail> mDatas=new ArrayList<>();
private Context context;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=getContext();
clearOutter=getArguments().getParcelable("clearOuter");
orderid=getArguments().getString("orderid");
messageid=getArguments().getString("messageid");
sellerid= SPUtils.getInstance("user_info").getString("sellerid");
isFast=getArguments().getBoolean("isFast");
mDatas.addAll(clearOutter.getMin_num());
for(ClearDetail detail:clearOutter.getClear_error()){
detail.setMin_num("0");
mDatas.add(detail);
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.dialog_clear,container);
mRecyclerview=view.findViewById(R.id.recyclerview);
mRecyclerview.setLayoutManager(new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false));
mAdapter=new ClearAdapter(getContext(),mDatas);
mRecyclerview.setAdapter(mAdapter);
view.findViewById(R.id.think_again).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
view.findViewById(R.id.place_order).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
DialogUtil.showDialog(context);
for(int i=0;i<mDatas.size();i++){
ClearDetail detail=mDatas.get(i);
String id=detail.getId();
int num=Integer.parseInt(detail.getCount())-Integer.parseInt(detail.getMin_num());
String type="";
if(detail.getMin_num().equals("0")){
type="clear_error";
}else{
type="min_num";
}
clearCookbookRequest(detail.getCookbookid(),detail.getSpecid(),id,num+"",i,type);
}
}
});
return view;
}
//去除数量不足菜品或卖光菜品
private void clearCookbookRequest(String cookbookid,String specid,String id, String num, final int i,String type){
Map<String,String> params=new HashMap<>();
params.put("orderid",orderid);
params.put("cookbookid",cookbookid);
params.put("type",type);//min_num 菜品不足 clear_error卖光了
params.put("id",id);//清楚主键idmin_
params.put("num",num);//清楚数量
if(!TextUtils.isEmpty(specid)){
params.put("specid",specid);
}
RetrofitClient.getInstance().create(CartApiService.class)
.clearCookbook(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<String>>>() {
@Override
public void accept(BaseResponse<List<String>> listBaseResponse) throws Exception {
if(listBaseResponse.getRet()==200){
if(i==mDatas.size()-1){//去除掉最后一件商品后下单
placeOrderRequest();
}
}else{
DialogUtil.dismissDialog();
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
DialogUtil.dismissDialog();
responseThrowable.printStackTrace();
ToastUtils.showShort(responseThrowable.msg);
}
});
}
//下单接口
private void placeOrderRequest(){
Map<String,String> params=new HashMap<>();
params.put("sellerid",sellerid);
params.put("orderid",orderid);
if(TextUtils.isEmpty(getArguments().getString("fromSource"))){
params.put("type","1");//下单1、加菜2
}else{
params.put("type","2");//下单1、加菜2
}
params.put("identity","2");//1 顾客 2 服务员
RetrofitClient.getInstance().create(CartApiService.class)
.placeOrder(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<String>>>() {
@Override
public void accept(BaseResponse<List<String>> listBaseResponse) throws Exception {
DialogUtil.dismissDialog();
if(listBaseResponse.getRet()==200){
if (!TextUtils.isEmpty(messageid)){
getAppHandle(messageid);
}
final RightDialog dialog=new RightDialog();
Bundle bundle=new Bundle();
bundle.putString("msg","下单成功");
dialog.setArguments(bundle);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
dialog.dismiss();
if(isFast){//快速点餐直接跳到订单详情
Intent intent=new Intent(context, OrderActivity.class);
intent.putExtra("orderid",orderid);
context.startActivity(intent);
}else{
context.startActivity(new Intent(context, TangShiActivity.class));
}
}
}, 1000);
dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"rightDialog");
}else{
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
DialogUtil.dismissDialog();
responseThrowable.printStackTrace();
ToastUtils.showShort(responseThrowable.msg);
}
});
}
//告诉后台前端消息已处理
private void getAppHandle(String messageid){
Map<String,String> params=new HashMap<>();
params.put("message_id",messageid);
RetrofitClient.getInstance().create(TangshiApiService.class)
.getAppHandle(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<String>>() {
@Override
public void accept(BaseResponse<String> stringBaseResponse) throws Exception {
if(stringBaseResponse.getRet()==200){}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
}
@Override
public void onStart() {
super.onStart();
getDialog().setCanceledOnTouchOutside(false);
Window window=getDialog().getWindow();
WindowManager.LayoutParams lp=window.getAttributes();
DisplayMetrics dm=new DisplayMetrics();
window.getWindowManager().getDefaultDisplay().getMetrics(dm);
window.setLayout((int) (dm.widthPixels*0.9),ViewGroup.LayoutParams.WRAP_CONTENT);
}
}
... ...
package com.naji.xiaotao.cart.ui;
import android.os.Bundle;
import com.naji.xiaotao.R;
import com.naji.xiaotao.BR;
import com.naji.xiaotao.cart.vm.RemarkViewModel;
import com.naji.xiaotao.databinding.ActivityRemarkBinding;
import me.goldze.mvvmhabit.base.BaseActivity;
public class RemarkActivity extends BaseActivity<ActivityRemarkBinding,RemarkViewModel>{
@Override
public int initContentView(Bundle savedInstanceState) {
return R.layout.activity_remark;
}
@Override
public int initVariableId() {
return BR.viewModel;
}
@Override
public RemarkViewModel initViewModel() {
return new RemarkViewModel(this,getIntent().getExtras().getString("orderid"),getIntent().getExtras().getString("remarkid"),getIntent().getExtras().getString("remark"));
}
}
... ...
package com.naji.xiaotao.cart.vm;
import android.content.Context;
import android.databinding.ObservableField;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.naji.xiaotao.cart.entity.CartCookbookDetail;
import com.naji.xiaotao.cookbook.bean.ResultEntity;
import com.naji.xiaotao.cookbook.service.CookbookApiService;
import com.naji.xiaotao.http.RetrofitClient;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.bus.Messenger;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.bus.RxSubscriptions;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class CartItemViewModel extends BaseViewModel{
private String orderid;
private String fromSource;
private boolean isWaitingSure;//待确认订单
public CartCookbookDetail entity;
public ObservableField<String> title=new ObservableField<>();//标题栏显示
public ObservableField<String> count=new ObservableField<>();
private Disposable mSubscription;
public CartItemViewModel(Context context,CartCookbookDetail entity,String orderid,String fromSource,boolean isWaitingSure){
super(context);
this.entity=entity;
this.orderid=orderid;
this.fromSource=fromSource;
this.isWaitingSure=isWaitingSure;
count.set(entity.getCount());
if(entity.getTitleName().equals("其它")){
title.set(entity.getClass_name());
if(entity.getName()!=null&&entity.getName().equals("餐位费")){
mSubscription=RxBus.getDefault().toObservable(Integer.class).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
count.set(integer+"");
KLog.d("count:"+count.get().toString());
}
});
RxSubscriptions.add(mSubscription);
}
}else{
title.set(entity.getClass_name()+"("+entity.getSize()+")");
}
}
@Override
public void onDestroy() {
super.onDestroy();
if(entity.getName().equals("餐位费")){
RxSubscriptions.remove(mSubscription);
}
}
//减菜按钮
public BindingCommand onReduceClickCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
KLog.d("------------------");
reduceCookFromCart();
}
});
//加菜按钮
public BindingCommand onAddClickCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
KLog.d("+++++++++++++++++");
addCookToCart();
}
});
//添加菜品到购物车
private void addCookToCart(){
Map<String,String> params=new HashMap<>();
params.put("orderid",orderid);
params.put("openid",entity.getOpenid());
params.put("cookbookid",entity.getCookbookid());
params.put("identity","2");
if(TextUtils.isEmpty(entity.getSpecs())){
params.put("price",entity.getPrice());
}else{
params.put("price",entity.getSpec_price());
}
if(!TextUtils.isEmpty(entity.getSpecid())){
params.put("specid",entity.getSpecid());
}
if(!TextUtils.isEmpty(entity.getPracticeid())){
params.put("practiceid",entity.getPracticeid());
}
if(!TextUtils.isEmpty(fromSource)){
params.put("fromSoucre",fromSource);
}
RetrofitClient.getInstance().create(CookbookApiService.class)
.addCookToCart(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
@Override
public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
if(baseResponse.getRet()==200){
count.set((Integer.parseInt(count.get())+1)+"");
int countTotal=baseResponse.getData().get(0).getCountTotal();
float countPrice=baseResponse.getData().get(0).getCountPirce();
String title="已点"+countTotal+"个菜,共计¥"+countPrice;
RxBus.getDefault().post(title);
}else{
ToastUtils.showShort(baseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
ToastUtils.showShort(throwable.msg);
throwable.printStackTrace();
}
});
}
//删减菜品从购物车
private void reduceCookFromCart(){
Map<String,String> params=new HashMap<>();
params.put("orderid",orderid);
params.put("openid",entity.getOpenid());
params.put("cookbookid",entity.getCookbookid());
params.put("identity","2");
if(!TextUtils.isEmpty(entity.getSpecid())){
params.put("specid",entity.getSpecid());
}
if(!TextUtils.isEmpty(entity.getPracticeid())){
params.put("practiceid",entity.getPracticeid());
}
if(!TextUtils.isEmpty(fromSource)){
params.put("fromSoucre",fromSource);
}
if(isWaitingSure){
params.put("request_uri","1");
}
RetrofitClient.getInstance().create(CookbookApiService.class)
.reduceCookFromCart(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
@Override
public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
if(baseResponse.getRet()==200){
count.set((Integer.parseInt(count.get())-1)+"");
int countTotal=baseResponse.getData().get(0).getCountTotal();
float countPrice=baseResponse.getData().get(0).getCountPirce();
String title="已点"+countTotal+"个菜,共计¥"+countPrice;
RxBus.getDefault().post(title);
if(Integer.parseInt(count.get())==0){
Messenger.getDefault().send(CartItemViewModel.this,CartViewModel.TOKEN_DELETE_ITEM);
}
}else{
ToastUtils.showShort(baseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
ToastUtils.showShort(throwable.msg);
throwable.printStackTrace();
}
});
}
}
... ...
package com.naji.xiaotao.cart.vm;
import android.content.Context;
import android.content.Intent;
import android.databinding.ObservableArrayList;
import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;
import android.databinding.ObservableInt;
import android.databinding.ObservableList;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.naji.xiaotao.BR;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cart.entity.CartCookbook;
import com.naji.xiaotao.cart.entity.CartCookbookDetail;
import com.naji.xiaotao.cart.entity.CartEntity;
import com.naji.xiaotao.cart.entity.ClearOutter;
import com.naji.xiaotao.cart.entity.OrderEntity;
import com.naji.xiaotao.cart.entity.RemarkEntity;
import com.naji.xiaotao.cart.entity.RemarkItemEntity;
import com.naji.xiaotao.cart.service.CartApiService;
import com.naji.xiaotao.cart.ui.CartActivity;
import com.naji.xiaotao.cart.ui.ClearDialogFragment;
import com.naji.xiaotao.cart.ui.RemarkActivity;
import com.naji.xiaotao.common.dialog.RightDialog;
import com.naji.xiaotao.cookbook.bean.OuterEntity;
import com.naji.xiaotao.cookbook.ui.CookBookMainActivity;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.login.entity.SellerConfig;
import com.naji.xiaotao.login.service.LoginApiService;
import com.naji.xiaotao.order.ui.OrderActivity;
import com.naji.xiaotao.order.vm.OrderItemViewModel;
import com.naji.xiaotao.tangshi.service.TangshiApiService;
import com.naji.xiaotao.tangshi.ui.TangShiActivity;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.base.TitleViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.binding.command.BindingConsumer;
import me.goldze.mvvmhabit.bus.Messenger;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.bus.RxSubscriptions;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.MaterialDialogUtils;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
import me.tatarka.bindingcollectionadapter2.ItemBinding;
import me.tatarka.bindingcollectionadapter2.OnItemBind;
public class CartViewModel extends BaseViewModel{
public static final String TOKEN_DELETE_ITEM="token_delete_item";//删减一个菜品item
public ObservableField<String> no=new ObservableField<>();//单号
public ObservableField<String> pnum=new ObservableField<>();//当前用餐人数
public ObservableField<String> tableid=new ObservableField<>();//台号
public ObservableInt tableVisibility=new ObservableInt(View.GONE);//是否显示台号
public ObservableField<String> remark=new ObservableField<>();//备注
public ObservableField<String> title=new ObservableField<>();//list标题
private String orderid;//订单id
public OrderEntity orderEntity;
private ArrayList<CartCookbook> cLists=new ArrayList<>();
private OnRequestFocusListener onRequestFocusListener;
private Disposable mSubscription;//订阅者
public TitleViewModel titleViewModel;
private float countPrice;//订单金额
private int countTotal;//订单人数
public String isSetMealFee;//是否设置餐位费
private String meelFee;//餐位费
private float ortherMoney=0.00f;//餐位费
private String fromSource;//加菜
private boolean isFast;//是否快餐
private boolean isWaitingSure;//待确认
private String messageid;//消息id
public CartViewModel(Context context,String orderid,OnRequestFocusListener onRequestFocusListener,String fromSource,boolean isFast,boolean isWaitingSure,String messageid){
super(context);
this.orderid=orderid;
this.onRequestFocusListener=onRequestFocusListener;
this.titleViewModel=new TitleViewModel(context,"购物车");
this.fromSource=fromSource;
this.isFast=isFast;
this.isWaitingSure=isWaitingSure;
this.messageid=messageid;
}
public interface OnRequestFocusListener{
//人数输入框获取焦点
void onPnumRequestFocus();
//备注获取焦点
void onRemardRequestFocus();
}
@Override
public void onStart() {
super.onStart();
getOrderDetail();
}
@Override
public void registerRxBus() {
super.registerRxBus();
//监听总的菜品数量和价格变化
mSubscription=RxBus.getDefault().toObservable(String.class).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
if(s.contains("¥")){
countPrice=Float.parseFloat(s.substring(s.indexOf("¥")+1));
String all= new DecimalFormat("##0.00").format(countPrice+ortherMoney);
title.set(s.substring(0,s.indexOf("¥")+1)+all);
}
}
});
RxSubscriptions.add(mSubscription);
//监听删除掉一个菜品Item
Messenger.getDefault().register(context, TOKEN_DELETE_ITEM, CartItemViewModel.class, new BindingConsumer<CartItemViewModel>() {
@Override
public void call(CartItemViewModel cartItemViewModel) {
int titleIndex=Integer.parseInt(cartItemViewModel.entity.getTag());
KLog.d("titleIndex",titleIndex);
KLog.d("size",observableList.size());
int size=observableList.get(titleIndex).entity.getSize();
observableList.get(titleIndex).title.set(cartItemViewModel.entity.getClass_name()+"("+(size-1)+")");
observableList.get(titleIndex).entity.setSize(--size);
KLog.d("titleIndex:"+titleIndex+"size:"+size);
if(size==0){//只剩标题,删除标题
observableList.remove(titleIndex);
}
observableList.remove(cartItemViewModel);
}
});
}
@Override
public void removeRxBus() {
super.removeRxBus();
RxSubscriptions.remove(mSubscription);
Messenger.getDefault().unregister(context,TOKEN_DELETE_ITEM);
}
public ObservableList<CartItemViewModel> observableList=new ObservableArrayList<>();
public OnItemBind<CartItemViewModel> onItemBind=new OnItemBind<CartItemViewModel>() {
@Override
public void onItemBind(ItemBinding itemBinding, int position, CartItemViewModel item) {
itemBinding.set(BR.viewModel,item.entity.isTitle()? R.layout.cart_item_title:R.layout.cart_item_content);
}
};
//修改就餐人数
public BindingCommand onPnumClick=new BindingCommand(new BindingAction() {
@Override
public void call() {
if(onRequestFocusListener!=null){
onRequestFocusListener.onPnumRequestFocus();
}
}
});
//修改备注
public BindingCommand onRemarkClick=new BindingCommand(new BindingAction() {
@Override
public void call() {
Bundle bundle=new Bundle();
bundle.putString("orderid",orderid);
bundle.putString("remarkid",orderEntity.getRemarkid());
bundle.putString("remark",orderEntity.getRemark());
startActivity(RemarkActivity.class,bundle);
}
});
//获取订单详情
private void getOrderDetail(){
HashMap<String,String> params=new HashMap<>();
params.put("orderid",orderid);
if(isWaitingSure){
params.put("status","2");//2 待确认菜品
}else{
params.put("status","0");//0 购物车中菜品 1 已下单菜品
}
RetrofitClient.getInstance().create(CartApiService.class)
.getOrderById(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
showDialog();
}
})
.subscribe(new Consumer<BaseResponse<List<CartEntity>>>() {
@Override
public void accept(BaseResponse<List<CartEntity>> listBaseResponse) throws Exception {
dismissDialog();
if(listBaseResponse.getRet()==200){
orderEntity=listBaseResponse.getData().get(0).getOrder().get(0);
no.set("单号:"+orderEntity.getRow_num());
pnum.set(orderEntity.getPnum());
tableid.set("台号:"+orderEntity.getTablename());
if(orderEntity.getTablename().equals("快餐")){
tableVisibility.set(View.GONE);
}else{
tableVisibility.set(View.VISIBLE);
}
StringBuilder builder=new StringBuilder();
if(orderEntity.getRemarkList()!=null&&orderEntity.getRemarkList().size()>0){
for(RemarkItemEntity itemEntity:orderEntity.getRemarkList()){
builder.append(itemEntity.getRemark()+",");
}
}
if(!TextUtils.isEmpty(orderEntity.getRemark())){
builder.append(orderEntity.getRemark()+",");
}
if(builder.length()>0){
remark.set(builder.toString().substring(0,builder.toString().length()-1));
}else{
remark.set("");
}
countTotal=listBaseResponse.getData().get(0).getCountTotal();
countPrice=listBaseResponse.getData().get(0).getCountPirce();
cLists.clear();
cLists.addAll(listBaseResponse.getData().get(0).getCookbooklist());
getSellerConfig();
}else{
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
dismissDialog();
ToastUtils.showShort(throwable.msg);
throwable.printStackTrace();
}
});
}
//获取商家配置
private void getSellerConfig(){
Map<String,String> params=new HashMap<>();
params.put("sellerid",SPUtils.getInstance("user_info").getString("sellerid"));
params.put("type","1");//1堂食配置 2外卖配置
RetrofitClient.getInstance().create(LoginApiService.class)
.getSellerConfig(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<SellerConfig>>>() {
@Override
public void accept(BaseResponse<List<SellerConfig>> listBaseResponse) throws Exception {
if(listBaseResponse.getRet()==200){
KLog.d("sssssssssssss");
isSetMealFee=listBaseResponse.getData().get(0).getIs_set_meal_fee();
meelFee=listBaseResponse.getData().get(0).getMeal_fee();
if(isSetMealFee.equals("1")){
ortherMoney=Float.parseFloat(meelFee)*Integer.parseInt(orderEntity.getPnum());
}
String all= new DecimalFormat("##0.00").format(countPrice+ortherMoney);
title.set("已点"+countTotal+"个菜,共计¥"+all);
initCookbookList();
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
}
});
}
private void initCookbookList(){
observableList.clear();
int tag=0;
for(int i=0;i<cLists.size();i++){
CartCookbookDetail head=new CartCookbookDetail();
head.setTitle(true);
head.setClass_name(cLists.get(i).getClass_name());
head.setTitleName(cLists.get(i).getClass_name()+"("+cLists.get(i).getList().size()+")");
head.setTag(String.valueOf(tag));
head.setSize(cLists.get(i).getList().size());
observableList.add(new CartItemViewModel(context,head,orderid,fromSource,isWaitingSure));
int titleIndex=tag;
for(int j=0;j<cLists.get(i).getList().size();j++){
tag++;
CartCookbookDetail content=cLists.get(i).getList().get(j);
content.setTitleName(cLists.get(i).getClass_name()+"("+cLists.get(i).getList().size()+")");
content.setTag(String.valueOf(titleIndex));
observableList.add(new CartItemViewModel(context,content,orderid,fromSource,isWaitingSure));
}
tag++;
}
if(isSetMealFee.equals("1")){
CartCookbookDetail head=new CartCookbookDetail();
head.setTitle(true);
head.setClass_name("其它");
head.setTitleName("其它");
observableList.add(new CartItemViewModel(context,head,orderid,fromSource,isWaitingSure));
CartCookbookDetail content=new CartCookbookDetail();
content.setTitleName("其它");
content.setName("餐位费");
content.setPrice(meelFee);
content.setUnit("位");
content.setCount(orderEntity.getPnum());
observableList.add(new CartItemViewModel(context,content,orderid,fromSource,isWaitingSure));
}
}
//修改人数
public BindingCommand textChangeCommand=new BindingCommand(new BindingConsumer<String>() {
@Override
public void call(String s) {
if(!TextUtils.isEmpty(s)){
int pnum=Integer.parseInt(s);
if(isSetMealFee!=null&&isSetMealFee.equals("1")){
ortherMoney=Float.parseFloat(meelFee)* pnum;
String titleText=title.get().toString();
KLog.d("titleText:"+titleText);
String all= new DecimalFormat("##0.00").format(countPrice+ortherMoney);
title.set(titleText.substring(0,titleText.indexOf("¥")+1)+all);
KLog.d(countPrice);
KLog.d(ortherMoney);
KLog.d("title:"+(titleText.substring(0,titleText.indexOf("¥")+1)));
RxBus.getDefault().post(pnum);
}
setOrderById(pnum);
}
}
});
//继续点菜
public BindingCommand onContinueClickCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
Intent intent=new Intent(context,CookBookMainActivity.class);
intent.putExtra("orderid",orderid);
intent.putExtra("isFast",isFast);
intent.putExtra("fromSource",fromSource);
intent.putExtra("messageid",messageid);
intent.putExtra("isWaitingSure",isWaitingSure);
context.startActivity(intent);
}
});
//点击确认下单按钮
public BindingCommand onSureClickCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
setClearNum();
}
});
//修改订单人数备注
private void setOrderById(int pnum){
Map<String,String> params=new HashMap<>();
params.put("orderid",orderid);
params.put("pnum",pnum+"");
RetrofitClient.getInstance().create(CartApiService.class)
.setOrderById(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<String>>>() {
@Override
public void accept(BaseResponse<List<String>> listBaseResponse) throws Exception {
if(listBaseResponse.getRet()==200){
}else{
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
responseThrowable.printStackTrace();
ToastUtils.showShort(responseThrowable.msg);
}
});
}
//下单时检测菜品是否充足
private void setClearNum(){
if(TextUtils.isEmpty(pnum.get())){
ToastUtils.showShort("请输入用餐人数");
return;
}
Map<String,String> params=new HashMap<>();
params.put("orderid",orderEntity.getId());
if(TextUtils.isEmpty(fromSource)){
params.put("type","1");//下单1、加菜2
}else{
params.put("type","2");//下单1、加菜2
}
params.put("identity","2");//1 顾客 2 服务员
RetrofitClient.getInstance().create(CartApiService.class)
.setClearNum(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
showDialog();
}
})
.subscribe(new Consumer<BaseResponse<List<ClearOutter>>>() {
@Override
public void accept(BaseResponse<List<ClearOutter>> listBaseResponse) throws Exception {
if(listBaseResponse.getRet()==200){
if(listBaseResponse.getData().size()==0){//没有仓储不足菜品直接下单
placeOrder();
}else{
dismissDialog();
ClearDialogFragment dialog=new ClearDialogFragment();
Bundle bundle=new Bundle();
bundle.putParcelable("clearOuter",listBaseResponse.getData().get(0));
bundle.putString("orderid",orderid);
bundle.putString("fromSource",fromSource);
bundle.putBoolean("isFast",isFast);
bundle.putString("messageid",messageid);
dialog.setArguments(bundle);
dialog.show(((CartActivity)context).getSupportFragmentManager(),"clearFragment");
}
}else{
dismissDialog();
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
dismissDialog();
responseThrowable.printStackTrace();
ToastUtils.showShort(responseThrowable.msg);
}
});
}
//下单接口
private void placeOrder(){
Map<String,String> params=new HashMap<>();
params.put("sellerid",orderEntity.getSellerid());
params.put("orderid",orderEntity.getId());
if(TextUtils.isEmpty(fromSource)){
params.put("type","1");//下单1、加菜2
}else{
params.put("type","2");//下单1、加菜2
}
params.put("identity","2");//1 顾客 2 服务员
RetrofitClient.getInstance().create(CartApiService.class)
.placeOrder(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<String>>>() {
@Override
public void accept(BaseResponse<List<String>> listBaseResponse) throws Exception {
dismissDialog();
if(listBaseResponse.getRet()==200){
if(!TextUtils.isEmpty(messageid)){
getAppHandle(messageid);
}
final RightDialog dialog=new RightDialog();
Bundle bundle=new Bundle();
bundle.putString("msg","下单成功");
dialog.setArguments(bundle);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
dialog.dismiss();
if(isFast){//快速点餐直接跳到订单详情
Intent intent=new Intent(context, OrderActivity.class);
intent.putExtra("orderid",orderid);
context.startActivity(intent);
}else{
startActivity(TangShiActivity.class);
}
}
},1000);
dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"rightDialog");
}else{
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
dismissDialog();
responseThrowable.printStackTrace();
ToastUtils.showShort(responseThrowable.msg);
}
});
}
//告诉后台前端消息已处理
private void getAppHandle(String messageid){
Map<String,String> params=new HashMap<>();
params.put("message_id",messageid);
RetrofitClient.getInstance().create(TangshiApiService.class)
.getAppHandle(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<String>>() {
@Override
public void accept(BaseResponse<String> stringBaseResponse) throws Exception {
if(stringBaseResponse.getRet()==200){}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
}
}
... ...
package com.naji.xiaotao.cart.vm;
import android.content.Context;
import android.databinding.ObservableBoolean;
import com.naji.xiaotao.cart.entity.RemarkEntity;
import com.naji.xiaotao.cart.entity.RemarkItemEntity;
import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
public class RemarkItemViewModel extends BaseViewModel{
public RemarkEntity entity;
public RemarkItemEntity one,two,three;
public ObservableBoolean oneSelected=new ObservableBoolean(false);
public ObservableBoolean twoSelected=new ObservableBoolean(false);
public ObservableBoolean threeSelected=new ObservableBoolean(false);
public RemarkItemViewModel(Context context, RemarkEntity entity){
super(context);
this.entity=entity;
one=entity.getList().get(0);
two=entity.getList().get(1);
if(entity.getList().size()>=3){
three=entity.getList().get(2);
}
if(entity.getList().get(0).isSelected()){
oneSelected.set(true);
}
if(entity.getList().get(1).isSelected()){
twoSelected.set(true);
}
if(entity.getList().size()>=3&&entity.getList().get(2).isSelected()){
threeSelected.set(true);
}
}
public BindingCommand OnOneClickCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
oneSelected.set(!oneSelected.get());
entity.getList().get(0).setSelected(!entity.getList().get(0).isSelected());
}
});
public BindingCommand OnTwoClickCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
twoSelected.set(!twoSelected.get());
entity.getList().get(1).setSelected(!entity.getList().get(1).isSelected());
}
});
public BindingCommand OnThreeClickCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
threeSelected.set(!threeSelected.get());
entity.getList().get(2).setSelected(!entity.getList().get(2).isSelected());
}
});
}
... ...
package com.naji.xiaotao.cart.vm;
import android.content.Context;
import android.databinding.ObservableArrayList;
import android.databinding.ObservableField;
import android.databinding.ObservableList;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import com.naji.xiaotao.R;
import com.naji.xiaotao.BR;
import com.naji.xiaotao.cart.entity.RemarkEntity;
import com.naji.xiaotao.cart.entity.RemarkItemEntity;
import com.naji.xiaotao.cart.service.CartApiService;
import com.naji.xiaotao.cart.ui.RemarkActivity;
import com.naji.xiaotao.common.dialog.RightDialog;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.tangshi.ui.TangShiActivity;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.base.TitleViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
import me.tatarka.bindingcollectionadapter2.ItemBinding;
import me.tatarka.bindingcollectionadapter2.OnItemBind;
public class RemarkViewModel extends BaseViewModel{
public TitleViewModel titleViewModel;
private String orderid;
private String remarkid;
public ObservableField<String> remark=new ObservableField<>();
@Override
public void onCreate() {
super.onCreate();
getRemarkBySellerid();
}
public RemarkViewModel(Context context,String orderid,String remarkid,String remark){
super(context);
titleViewModel=new TitleViewModel(context,"整单备注");
this.orderid=orderid;
this.remarkid=remarkid;
if(!TextUtils.isEmpty(remark)){
this.remark.set(remark);
}
}
public ObservableList<RemarkItemViewModel> observableList=new ObservableArrayList<>();
public OnItemBind<RemarkItemViewModel> itemBinding=new OnItemBind<RemarkItemViewModel>() {
@Override
public void onItemBind(ItemBinding itemBinding, int position, RemarkItemViewModel item) {
if(item.entity.getList().size()>2){
itemBinding.set(BR.viewModel,R.layout.layout_remark_three_item);
}else{
itemBinding.set(BR.viewModel,R.layout.layout_remark_two_item);
}
}
};
private void getRemarkBySellerid(){
Map<String,String> params=new HashMap<>();
params.put("sellerid", SPUtils.getInstance("user_info").getString("sellerid"));
params.put("orderid",orderid);
RetrofitClient.getInstance().create(CartApiService.class)
.getRemarkBySellerid(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<List<RemarkEntity>>>>() {
@Override
public void accept(BaseResponse<List<List<RemarkEntity>>> listBaseResponse) throws Exception {
if(listBaseResponse.getRet()==200){
observableList.clear();
for(RemarkEntity entity:listBaseResponse.getData().get(0)){
if(!TextUtils.isEmpty(remarkid)){
String[] remarkids=remarkid.split(",");
KLog.d("remarkids",remarkids);
for(RemarkItemEntity itemEntity:entity.getList()){
for(int i=0;i<remarkids.length;i++){
if(remarkids[i].equals(itemEntity.getId())){
itemEntity.setSelected(true);
}
}
}
}
observableList.add(new RemarkItemViewModel(context,entity));
}
}else{
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
responseThrowable.printStackTrace();
ToastUtils.showShort(responseThrowable.msg);
}
});
}
//保存备注
public BindingCommand onRemarkSaveCommand=new BindingCommand(new BindingAction() {
@Override
public void call() {
StringBuilder builder=new StringBuilder();
for(RemarkItemViewModel itemViewModel:observableList){
for(RemarkItemEntity item:itemViewModel.entity.getList()){
if(item.isSelected()){
builder.append(item.getId()+",");
}
}
}
String remrkid="";
if(builder.length()>0){
remrkid=builder.toString().substring(0,builder.length()-1);
}
KLog.d("remarkid",remrkid);
setOrderById(remrkid);
}
});
//修改订单人数备注
private void setOrderById(String remarkid){
Map<String,String> params=new HashMap<>();
params.put("orderid",orderid);
params.put("remark",TextUtils.isEmpty(remark.get())?"":remark.get());
params.put("remarkid",remarkid);
RetrofitClient.getInstance().create(CartApiService.class)
.setOrderById(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
showDialog();
}
})
.subscribe(new Consumer<BaseResponse<List<String>>>() {
@Override
public void accept(BaseResponse<List<String>> listBaseResponse) throws Exception {
dismissDialog();
if(listBaseResponse.getRet()==200){
final RightDialog dialog=new RightDialog();
Bundle bundle=new Bundle();
bundle.putString("msg","备注成功");
dialog.setArguments(bundle);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
dialog.dismiss();
((RemarkActivity)context).finish();
}
}, 1000);
dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"rightDialog");
}else{
dismissDialog();
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable responseThrowable) throws Exception {
dismissDialog();
responseThrowable.printStackTrace();
ToastUtils.showShort(responseThrowable.msg);
}
});
}
}
... ...
package com.naji.xiaotao.common.binding.xrecyclerview;
import android.databinding.BindingAdapter;
import android.support.design.widget.TabLayout;
import android.support.v7.widget.RecyclerView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.naji.xiaotao.widget.LayoutManagers;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
public class ViewAdapter {
@BindingAdapter(value = {"onRefreshCommand","onLoadMoreCommand"},requireAll = false)
public static void onRefreshCommand(XRecyclerView xRecyclerView, final BindingCommand onRefreshCommand, final BindingCommand onLoadMoreCommand){
xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
if(onRefreshCommand!=null){
onRefreshCommand.execute();
}
}
@Override
public void onLoadMore() {
if(onLoadMoreCommand!=null){
onLoadMoreCommand.execute();
}
}
});
}
@BindingAdapter("layoutManager")
public static void setLayoutManager(RecyclerView recyclerView, LayoutManagers.LayoutManagerFactory layoutManagerFactory) {
recyclerView.setLayoutManager(layoutManagerFactory.create(recyclerView));
}
@BindingAdapter(value = {"OnTabSelectCommand"},requireAll = false)
public static void onTabSelectCommand(TabLayout tabLayout,final BindingCommand<Integer> onTabSelectCommand){
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
onTabSelectCommand.execute(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
... ...
package com.naji.xiaotao.common.db;
import com.raizlabs.android.dbflow.annotation.Database;
@Database(version = AppDataBase.version)
public class AppDataBase {
public static final int version=1;
}
... ...
package com.naji.xiaotao.common.dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import com.naji.xiaotao.R;
public class RightDialog extends DialogFragment {
private boolean showIcon=true;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
showIcon=getArguments().getBoolean("showIcon",true);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().setCanceledOnTouchOutside(false);
View view=inflater.inflate(R.layout.dialog_right,container);
((TextView)view.findViewById(R.id.message)).setText(getArguments().getString("msg"));
if(showIcon){
view.findViewById(R.id.icon).setVisibility(View.VISIBLE);
}else{
view.findViewById(R.id.icon).setVisibility(View.GONE);
}
return view;
}
}
... ...
package com.naji.xiaotao.cookbook.adapter;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.bean.CookbookDetailEntity;
import com.naji.xiaotao.cookbook.bean.ReduceBean;
import com.naji.xiaotao.cookbook.bean.ResultEntity;
import com.naji.xiaotao.cookbook.dialog.ReduceFragmentDialog;
import com.naji.xiaotao.cookbook.dialog.SelectFragmentDialog;
import com.naji.xiaotao.cookbook.service.CookbookApiService;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.tangshi.entity.OrderEntity;
import com.othershe.library.NiceImageView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class ClassifyDetailAdapter extends RvAdapter<CookbookDetailEntity> {
private Context context;
private String orderid;
private String fromSource;
private boolean isWaitingSure;
public ClassifyDetailAdapter(Context context, List<CookbookDetailEntity> list, String orderid,String fromSource,boolean isWaitingSure,RvListener listener) {
super(context, list, listener);
this.context=context;
this.orderid=orderid;
this.fromSource=fromSource;
this.isWaitingSure=isWaitingSure;
}
@Override
protected int getLayoutId(int viewType) {
return viewType == 0 ? R.layout.cookbook_item_title : R.layout.cookbook_item__detail;
}
@Override
public int getItemViewType(int position) {
return list.get(position).isTitle() ? 0 : 1;
}
@Override
protected RvHolder getHolder(View view, int viewType) {
return new ClassifyHolder(view, viewType, listener);
}
public class ClassifyHolder extends RvHolder<CookbookDetailEntity> {
TextView tvTitle;//标题栏标题
TextView tvCook;//菜品名称
ImageView noMoreImg;//卖光了
TextView tvYidian;//点过标志
LinearLayout tagLayout;//标签容器
TextView tvPrice;//价格
TextView lastNum;//剩余菜品数量
ImageView jianImg;//减图标
TextView havingNum;//已点数量
ImageView addImg;//加图标
NiceImageView cookImg;//菜品图标
public ClassifyHolder(View itemView, int type, RvListener listener) {
super(itemView, type, listener);
switch (type) {
case 0:
tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
break;
case 1:
tvCook= (TextView) itemView.findViewById(R.id.tv_cook);
noMoreImg=itemView.findViewById(R.id.nomore);
tvYidian=itemView.findViewById(R.id.yidian);
tagLayout=itemView.findViewById(R.id.tag_layout);
tvPrice=itemView.findViewById(R.id.price);
lastNum=itemView.findViewById(R.id.lastnum);
jianImg=itemView.findViewById(R.id.jianImg);
havingNum=itemView.findViewById(R.id.havingnum);
addImg=itemView.findViewById(R.id.addImg);
cookImg=itemView.findViewById(R.id.cook_img);
break;
}
}
@Override
public void bindHolder(final CookbookDetailEntity sortBean, final int position) {
int itemViewType = ClassifyDetailAdapter.this.getItemViewType(position);
switch (itemViewType) {
case 0:
tvTitle.setText(sortBean.getTitleName());
break;
case 1:
tvCook.setText(sortBean.getName());
tvPrice.setText(sortBean.getPrice()+"元/"+sortBean.getUnit());
havingNum.setText(sortBean.getNum()+"");
if(!TextUtils.isEmpty(sortBean.getClear_num())&&Integer.parseInt(sortBean.getClear_num())<=0){
lastNum.setVisibility(View.GONE);
noMoreImg.setVisibility(View.VISIBLE);
addImg.setVisibility(View.GONE);
}else{
if(!TextUtils.isEmpty(sortBean.getClear_num())&&Integer.parseInt(sortBean.getClear_num())<=10){
lastNum.setVisibility(View.VISIBLE);
lastNum.setText("剩余"+sortBean.getClear_num()+"份");
}else{
lastNum.setVisibility(View.GONE);
lastNum.setText("剩余"+sortBean.getClear_num()+"份");
}
noMoreImg.setVisibility(View.INVISIBLE);
addImg.setVisibility(View.VISIBLE);
}
if(sortBean.getNum()>0){
jianImg.setVisibility(View.VISIBLE);
havingNum.setVisibility(View.VISIBLE);
}else{
jianImg.setVisibility(View.INVISIBLE);
havingNum.setVisibility(View.INVISIBLE);
}
if(!TextUtils.isEmpty(sortBean.getImage())){
//使用Glide框架加载图片
Glide.with(cookImg.getContext())
.load(sortBean.getImage())
.apply(new RequestOptions().placeholder(null))
.into(cookImg);
cookImg.setVisibility(View.VISIBLE);
}else{
cookImg.setVisibility(View.GONE);
}
tagLayout.removeAllViews();
if(sortBean.getLabelList()!=null&&sortBean.getLabelList().size()>0){
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);
params.rightMargin= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,10,mContext.getResources().getDisplayMetrics());
for(int i=0;i<sortBean.getLabelList().size();i++){
ImageView imageView=new ImageView(mContext);
Glide.with(imageView.getContext())
.load(sortBean.getLabelList().get(i))
.apply(new RequestOptions().placeholder(null))
.into(imageView);
tagLayout.addView(imageView,params);
}
}
addImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!TextUtils.isEmpty(list.get(position).getClear_num())&&list.get(position).getNum()==Integer.parseInt(list.get(position).getClear_num())){
ToastUtils.showShort("菜品沽清不足");
return;
}
if(sortBean.getPractice().size()>0||sortBean.getSpec().size()>0){//有菜品规格或者做法
SelectFragmentDialog dialog=new SelectFragmentDialog();
dialog.setOnSureClickListener(new SelectFragmentDialog.onSureClickListener() {
@Override
public void onSureClick(String specid, String practiceid,String spec,String practice,String price) {
addCookToCart(position,specid,practiceid,spec,practice,price,jianImg,havingNum);
}
});
Bundle bundle=new Bundle();
bundle.putSerializable("cook",list.get(position));
dialog.setArguments(bundle);
dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"selectFragmentDialog");
return;
}
addCookToCart(position,"","","","",list.get(position).getPrice(),jianImg,havingNum);
}
});
jianImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(sortBean.getPractice().size()>0||sortBean.getSpec().size()>0){//有菜品规格或做法
//获取一点菜品规则做法列表
Map<String,String> params=new HashMap<>();
params.put("sellerid",SPUtils.getInstance("user_info").getString("sellerid"));
params.put("orderid",orderid);
params.put("cookbookid",sortBean.getId());
RetrofitClient.getInstance().create(CookbookApiService.class)
.getCookbookSelBySpecsId(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<List<ReduceBean>>>>() {
@Override
public void accept(BaseResponse<List<List<ReduceBean>>> listBaseResponse) throws Exception {
if(listBaseResponse.getRet()==200){
final ReduceFragmentDialog dialog=new ReduceFragmentDialog();
dialog.setListener(new ReduceFragmentDialog.ReduceListener() {
@Override
public void onAddSuccess(int position,ReduceBean bean) {
list.get(position).setNum(list.get(position).getNum()+1);
havingNum.setText(list.get(position).getNum()+"");
}
@Override
public void onReduceSuccess(int position,ReduceBean bean) {
list.get(position).setNum(list.get(position).getNum()-1);
havingNum.setText(list.get(position).getNum()+"");
if(list.get(position).getNum()==0){
jianImg.setVisibility(View.INVISIBLE);
havingNum.setVisibility(View.INVISIBLE);
dialog.dismiss();
}
}
});
Bundle bundle=new Bundle();
bundle.putInt("position",position);
bundle.putString("cookname",sortBean.getName());
bundle.putString("fromSource",fromSource);
bundle.putString("clear_num",sortBean.getClear_num());
bundle.putParcelableArrayList("list", (ArrayList<? extends Parcelable>) listBaseResponse.getData().get(0));
dialog.setArguments(bundle);
dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"selectFragmentDialog");
}else{
ToastUtils.showShort(listBaseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
throwable.printStackTrace();
ToastUtils.showShort(throwable.msg);
}
});
return;
}
reduceCookFromCart(position,"","",jianImg,havingNum);
}
});
break;
}
}
}
//添加菜品到购物车
private void addCookToCart(final int position, final String specid, final String practiceid, final String spec, final String practice, final String price,final ImageView reduceImg, final TextView havingNum){
Map<String,String> params=new HashMap<>();
params.put("orderid",orderid);
params.put("openid", SPUtils.getInstance("user_info").getString("openid"));
params.put("cookbookid",list.get(position).getId());
params.put("identity","2");
params.put("price",price);
if(!TextUtils.isEmpty(specid)){
params.put("specid",specid);
}
if(!TextUtils.isEmpty(practiceid)){
params.put("practiceid",practiceid);
}
if(!TextUtils.isEmpty(fromSource)||isWaitingSure){
params.put("fromSoucre","1");
}
RetrofitClient.getInstance().create(CookbookApiService.class)
.addCookToCart(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
@Override
public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
if(baseResponse.getRet()==200){
list.get(position).setNum(list.get(position).getNum()+1);
havingNum.setText(list.get(position).getNum()+"");
reduceImg.setVisibility(View.VISIBLE);
havingNum.setVisibility(View.VISIBLE);
//通知CookbookMainActivity改变购物车数量
RxBus.getDefault().post(1);
}else{
ToastUtils.showShort(baseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
ToastUtils.showShort(throwable.msg);
throwable.printStackTrace();
}
});
}
//删减菜品从购物车
private void reduceCookFromCart(final int position,final String specid,final String practiceid,final ImageView reduceImg, final TextView havingNum){
Map<String,String> params=new HashMap<>();
params.put("orderid",orderid);
params.put("cookbookid",list.get(position).getId());
params.put("identity","2");
if(!TextUtils.isEmpty(specid)){
params.put("specid",specid);
}
if(!TextUtils.isEmpty(practiceid)){
params.put("practiceid",practiceid);
}
if(!TextUtils.isEmpty(fromSource)||isWaitingSure){
params.put("fromSoucre","1");
}
RetrofitClient.getInstance().create(CookbookApiService.class)
.reduceCookFromCart(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
@Override
public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
if(baseResponse.getRet()==200){
list.get(position).setNum(list.get(position).getNum()-1);
havingNum.setText(list.get(position).getNum()+"");
if(list.get(position).getNum()<=0){
reduceImg.setVisibility(View.INVISIBLE);
havingNum.setVisibility(View.INVISIBLE);
}
//通知CookbookMainActivity改变购物车数量
RxBus.getDefault().post(-1);
}else{
ToastUtils.showShort(baseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
ToastUtils.showShort(throwable.msg);
throwable.printStackTrace();
}
});
}
}
... ...
package com.naji.xiaotao.cookbook.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.bean.ReduceBean;
import com.naji.xiaotao.cookbook.bean.ResultEntity;
import com.naji.xiaotao.cookbook.dialog.ReduceFragmentDialog;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.cookbook.service.CookbookApiService;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import com.naji.xiaotao.http.RetrofitClient;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class ReduceAdapter extends RvAdapter<ReduceBean>{
private ReduceFragmentDialog.ReduceListener reduceListener;
private int position;
private String fromSource;
private String clear_num;//菜品沽清数量
public ReduceAdapter(Context context, List<ReduceBean> list, ReduceFragmentDialog.ReduceListener reduceListener,int position,String fromSource,String clear_num){
super(context,list,null);
this.reduceListener=reduceListener;
this.position=position;
this.fromSource=fromSource;
this.clear_num=clear_num;
}
@Override
protected int getLayoutId(int viewType) {
return R.layout.dialog_reduce_item;
}
@Override
protected RvHolder getHolder(View view, int viewType) {
return new ReduceHolder(view,viewType,null);
}
public class ReduceHolder extends RvHolder<ReduceBean>{
private TextView cookbookTv;
private ImageView addBn;
private TextView countTv;
private ImageView reduceBn;
public ReduceHolder(View itemView, int type, RvListener rvListener){
super(itemView,type,rvListener);
cookbookTv=itemView.findViewById(R.id.cookbook);
addBn=itemView.findViewById(R.id.add);
countTv=itemView.findViewById(R.id.count);
reduceBn=itemView.findViewById(R.id.reduce);
}
@Override
public void bindHolder(final ReduceBean reduceBean, final int position) {
if(!TextUtils.isEmpty(reduceBean.getPtitle())&&!TextUtils.isEmpty(reduceBean.getTitle())){
cookbookTv.setText(reduceBean.getTitle()+","+reduceBean.getPtitle());
}else if(!TextUtils.isEmpty(reduceBean.getTitle())){
cookbookTv.setText(reduceBean.getTitle());
}else if(!TextUtils.isEmpty(reduceBean.getPtitle())){
cookbookTv.setText(reduceBean.getPtitle());
}
countTv.setText(reduceBean.getPractNum());
addBn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!TextUtils.isEmpty(clear_num)&&Integer.parseInt(list.get(position).getPractNum())==Integer.parseInt(clear_num)){
ToastUtils.showShort("菜品沽清不足");
return;
}
addCookToCart(countTv,position,reduceBean);
}
});
reduceBn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
reduceCookFromCart(position,reduceBean);
}
});
}
}
//添加菜品到购物车
private void addCookToCart(final TextView countTv, final int pos, final ReduceBean bean){
Map<String,String> params=new HashMap<>();
params.put("orderid",bean.getOrderid());
params.put("openid", SPUtils.getInstance("user_info").getString("openid"));
params.put("cookbookid",bean.getCookbookid());
params.put("identity","2");
if(!TextUtils.isEmpty(bean.getSpecid())){
params.put("specid",bean.getSpecid());
}
if(!TextUtils.isEmpty(bean.getPracticeid())){
params.put("practiceid",bean.getPracticeid());
}
if(!TextUtils.isEmpty(fromSource)){
params.put("fromSoucre",fromSource);
}
RetrofitClient.getInstance().create(CookbookApiService.class)
.addCookToCart(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
@Override
public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
if(baseResponse.getRet()==200){
list.get(pos).setPractNum((Integer.parseInt(list.get(pos).getPractNum())+1)+"");
countTv.setText(list.get(pos).getPractNum());
if(reduceListener!=null){
reduceListener.onAddSuccess(position,bean);
}
//通知CookbookMainActivity改变购物车数量
RxBus.getDefault().post(1);
}else{
ToastUtils.showShort(baseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
ToastUtils.showShort(throwable.msg);
throwable.printStackTrace();
}
});
}
//删减菜品从购物车esult")
private void reduceCookFromCart(final int pos, final ReduceBean bean){
Map<String,String> params=new HashMap<>();
params.put("orderid",bean.getOrderid());
params.put("cookbookid",bean.getCookbookid());
params.put("identity","2");
if(!TextUtils.isEmpty(bean.getSpecid())){
params.put("specid",bean.getSpecid());
}
if(!TextUtils.isEmpty(bean.getPracticeid())){
params.put("practiceid",bean.getPracticeid());
}
if(!TextUtils.isEmpty(fromSource)){
params.put("fromSoucre",fromSource);
}
RetrofitClient.getInstance().create(CookbookApiService.class)
.reduceCookFromCart(params)
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.subscribe(new Consumer<BaseResponse<List<ResultEntity>>>() {
@Override
public void accept(BaseResponse<List<ResultEntity>> baseResponse) throws Exception {
if(baseResponse.getRet()==200){
list.get(pos).setPractNum((Integer.parseInt(list.get(pos).getPractNum())-1)+"");
if(Integer.parseInt(list.get(pos).getPractNum())==0){
list.remove(pos);
if(list.size()<=0){
}
}
notifyDataSetChanged();
if(reduceListener!=null){
reduceListener.onReduceSuccess(position,bean);
}
//通知CookbookMainActivity改变购物车数量
RxBus.getDefault().post(-1);
}else{
ToastUtils.showShort(baseResponse.getMsg());
}
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) throws Exception {
ToastUtils.showShort(throwable.msg);
throwable.printStackTrace();
}
});
}
}
... ...
package com.naji.xiaotao.cookbook.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import com.naji.xiaotao.cookbook.listener.RvListener;
import java.util.List;
@SuppressWarnings("unchecked")
public abstract class RvAdapter<T> extends RecyclerView.Adapter<RvHolder> {
protected List<T> list;
protected Context mContext;
protected RvListener listener;
protected LayoutInflater mInflater;
private RecyclerView mRecyclerView;
public RvAdapter(Context context, List<T> list, RvListener listener) {
mContext = context;
mInflater = LayoutInflater.from(context);
this.list = list;
this.listener = listener;
}
@Override
public RvHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(getLayoutId(viewType), parent, false);
return getHolder(view, viewType);
}
protected abstract int getLayoutId(int viewType);
@Override
public void onBindViewHolder(RvHolder holder, int position) {
holder.bindHolder(list.get(position), position);
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
return 0;
}
protected abstract RvHolder getHolder(View view, int viewType);
}
... ...
package com.naji.xiaotao.cookbook.adapter;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.bean.CookbookPractice;
import com.naji.xiaotao.cookbook.bean.ReduceBean;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import java.util.List;
public class SelectPracticeAdapter extends RvAdapter<CookbookPractice>{
public SelectPracticeAdapter(Context context, List<CookbookPractice> list, RvListener listener) {
super(context, list, listener);
}
@Override
protected int getLayoutId(int viewType) {
return R.layout.textview;
}
@Override
protected RvHolder getHolder(View view, int viewType) {
return new SelectPractiveViewHolder(view,viewType,listener);
}
public class SelectPractiveViewHolder extends RvHolder<CookbookPractice>{
private TextView textView;
public SelectPractiveViewHolder(View itemView, int type, RvListener listener) {
super(itemView, type, listener);
textView=itemView.findViewById(R.id.textview);
}
@Override
public void bindHolder(final CookbookPractice cookbookPractice, int position) {
textView.setText(cookbookPractice.getName());
if(cookbookPractice.isSelected()){
textView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.bg_yidian));
textView.setTextColor(mContext.getResources().getColor(R.color.text3));
}else{
textView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.bg_unselected));
textView.setTextColor(mContext.getResources().getColor(R.color.text1));
}
}
}
}
... ...
package com.naji.xiaotao.cookbook.adapter;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.bean.CookbookPractice;
import com.naji.xiaotao.cookbook.bean.CookbookSize;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import java.util.List;
public class SelectSizeAdapter extends RvAdapter<CookbookSize>{
public SelectSizeAdapter(Context context, List<CookbookSize> list, RvListener listener) {
super(context, list, listener);
}
@Override
protected int getLayoutId(int viewType) {
return R.layout.textview;
}
@Override
protected RvHolder getHolder(View view, int viewType) {
return new SelectSizeViewHolder(view,viewType,listener);
}
public class SelectSizeViewHolder extends RvHolder<CookbookSize>{
private TextView textView;
public SelectSizeViewHolder(View itemView, int type, RvListener listener) {
super(itemView, type, listener);
textView=itemView.findViewById(R.id.textview);
}
@Override
public void bindHolder(CookbookSize cookbookSize, int position) {
textView.setText(cookbookSize.getSpecs());
if(cookbookSize.isSelected()){
textView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.bg_yidian));
textView.setTextColor(mContext.getResources().getColor(R.color.text3));
}else{
textView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.bg_unselected));
textView.setTextColor(mContext.getResources().getColor(R.color.text1));
}
}
}
}
... ...
package com.naji.xiaotao.cookbook.adapter;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.widget.TextView;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.viewholder.RvHolder;
import com.naji.xiaotao.cookbook.listener.RvListener;
import java.util.List;
public class SortAdapter extends RvAdapter<String> {
private int checkedPosition;
public void setCheckedPosition(int checkedPosition) {
this.checkedPosition = checkedPosition;
notifyDataSetChanged();
}
public SortAdapter(Context context, List<String> list, RvListener listener) {
super(context, list, listener);
}
@Override
protected int getLayoutId(int viewType) {
return R.layout.cookbook_item_sort_list;
}
@Override
protected RvHolder getHolder(View view, int viewType) {
return new SortHolder(view, viewType, listener);
}
private class SortHolder extends RvHolder<String> {
private View line;
private TextView tvName;
private View mView;
SortHolder(View itemView, int type, RvListener listener) {
super(itemView, type, listener);
this.mView = itemView;
line=itemView.findViewById(R.id.line);
tvName = (TextView) itemView.findViewById(R.id.tv_sort);
}
@Override
public void bindHolder(String string, int position) {
tvName.setText(string);
if (position == checkedPosition) {
mView.setBackgroundColor(Color.parseColor("#ffffff"));
tvName.setTextColor(Color.parseColor("#61a5d1"));
line.setVisibility(View.VISIBLE);
} else {
mView.setBackgroundColor(Color.parseColor("#F5f5f5"));
tvName.setTextColor(Color.parseColor("#999999"));
line.setVisibility(View.INVISIBLE);
}
}
}
}
... ...
package com.naji.xiaotao.cookbook.bean;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class CookbookDetailEntity implements Serializable, Parcelable {
private String id;
private String cid;
private String lid;
private String unit;
private String name;
private String price;
private String member_price;
private String first_name;
private String search_code;
private String give;
private String status;
private String order_o;
private String image;
private String clear_num;//0卖光了
private String cdate;
private int isSpec;//1 为有规格的菜品 为无规格菜品
private List<CookbookSize> spec;//菜品规格列表
private List<CookbookPractice> practice;//菜品做法列表
private List<String> labelList;//标签列表
private int num;//已点数量
private String titleName;
private boolean isTitle;//title标志位
private String tag;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getLid() {
return lid;
}
public void setLid(String lid) {
this.lid = lid;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getMember_price() {
return member_price;
}
public void setMember_price(String member_price) {
this.member_price = member_price;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getSearch_code() {
return search_code;
}
public void setSearch_code(String search_code) {
this.search_code = search_code;
}
public String getGive() {
return give;
}
public void setGive(String give) {
this.give = give;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getOrder_o() {
return order_o;
}
public void setOrder_o(String order_o) {
this.order_o = order_o;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getClear_num() {
return clear_num;
}
public void setClear_num(String clear_num) {
this.clear_num = clear_num;
}
public String getCdate() {
return cdate;
}
public void setCdate(String cdate) {
this.cdate = cdate;
}
public int getIsSpec() {
return isSpec;
}
public void setIsSpec(int isSpec) {
this.isSpec = isSpec;
}
public List<CookbookSize> getSpec() {
return spec;
}
public void setSpec(List<CookbookSize> spec) {
this.spec = spec;
}
public List<CookbookPractice> getPractice() {
return practice;
}
public void setPractice(List<CookbookPractice> practice) {
this.practice = practice;
}
public List<String> getLabelList() {
return labelList;
}
public void setLabelList(List<String> labelList) {
this.labelList = labelList;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getTitleName() {
return titleName;
}
public void setTitleName(String titleName) {
this.titleName = titleName;
}
public boolean isTitle() {
return isTitle;
}
public void setTitle(boolean title) {
isTitle = title;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.id);
dest.writeString(this.cid);
dest.writeString(this.lid);
dest.writeString(this.unit);
dest.writeString(this.name);
dest.writeString(this.price);
dest.writeString(this.member_price);
dest.writeString(this.first_name);
dest.writeString(this.search_code);
dest.writeString(this.give);
dest.writeString(this.status);
dest.writeString(this.order_o);
dest.writeString(this.image);
dest.writeString(this.clear_num);
dest.writeString(this.cdate);
dest.writeInt(this.isSpec);
dest.writeList(this.spec);
dest.writeList(this.practice);
dest.writeStringList(this.labelList);
dest.writeInt(this.num);
dest.writeString(this.titleName);
dest.writeByte(this.isTitle ? (byte) 1 : (byte) 0);
dest.writeString(this.tag);
}
public CookbookDetailEntity() {
}
protected CookbookDetailEntity(Parcel in) {
this.id = in.readString();
this.cid = in.readString();
this.lid = in.readString();
this.unit = in.readString();
this.name = in.readString();
this.price = in.readString();
this.member_price = in.readString();
this.first_name = in.readString();
this.search_code = in.readString();
this.give = in.readString();
this.status = in.readString();
this.order_o = in.readString();
this.image = in.readString();
this.clear_num = in.readString();
this.cdate = in.readString();
this.isSpec = in.readInt();
this.spec = new ArrayList<CookbookSize>();
in.readList(this.spec, CookbookSize.class.getClassLoader());
this.practice = new ArrayList<CookbookPractice>();
in.readList(this.practice, CookbookPractice.class.getClassLoader());
this.labelList = in.createStringArrayList();
this.num = in.readInt();
this.titleName = in.readString();
this.isTitle = in.readByte() != 0;
this.tag = in.readString();
}
public static final Creator<CookbookDetailEntity> CREATOR = new Creator<CookbookDetailEntity>() {
@Override
public CookbookDetailEntity createFromParcel(Parcel source) {
return new CookbookDetailEntity(source);
}
@Override
public CookbookDetailEntity[] newArray(int size) {
return new CookbookDetailEntity[size];
}
};
}
... ...
package com.naji.xiaotao.cookbook.bean;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class CookbookEntity implements Serializable{
private String id;
private String sellerid;
private String class_label;
private String class_name;
private String order;
private String status;
private String class_type;
private List<List<CookbookDetailEntity>> cookbooklist;
public CookbookEntity(CookbookEntity entity){
this.id=entity.getId();
this.sellerid=entity.getSellerid();
this.class_label=entity.getClass_label();
this.class_name=entity.getClass_name();
this.order=entity.getOrder();
this.status=entity.getStatus();
this.class_type=entity.getClass_type();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSellerid() {
return sellerid;
}
public void setSellerid(String sellerid) {
this.sellerid = sellerid;
}
public String getClass_label() {
return class_label;
}
public void setClass_label(String class_label) {
this.class_label = class_label;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getClass_type() {
return class_type;
}
public void setClass_type(String class_type) {
this.class_type = class_type;
}
public List<List<CookbookDetailEntity>> getCookbooklist() {
return cookbooklist;
}
public void setCookbooklist(List<List<CookbookDetailEntity>> cookbooklist) {
this.cookbooklist = cookbooklist;
}
}
... ...
package com.naji.xiaotao.cookbook.bean;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
public class CookbookPractice implements Serializable, Parcelable {
private String id;
private String cid;
private String practice;
private String name;
private String price;
private String member_price;
private boolean selected;//是否选中
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getPractice() {
return practice;
}
public void setPractice(String practice) {
this.practice = practice;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getMember_price() {
return member_price;
}
public void setMember_price(String member_price) {
this.member_price = member_price;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.id);
dest.writeString(this.cid);
dest.writeString(this.practice);
dest.writeString(this.name);
dest.writeString(this.price);
dest.writeString(this.member_price);
dest.writeByte(this.selected ? (byte) 1 : (byte) 0);
}
public CookbookPractice() {
}
protected CookbookPractice(Parcel in) {
this.id = in.readString();
this.cid = in.readString();
this.practice = in.readString();
this.name = in.readString();
this.price = in.readString();
this.member_price = in.readString();
this.selected = in.readByte() != 0;
}
public static final Parcelable.Creator<CookbookPractice> CREATOR = new Parcelable.Creator<CookbookPractice>() {
@Override
public CookbookPractice createFromParcel(Parcel source) {
return new CookbookPractice(source);
}
@Override
public CookbookPractice[] newArray(int size) {
return new CookbookPractice[size];
}
};
}
... ...