Commit 4aa6fd0a authored by 王海's avatar 王海

all

parents
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
<?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" />
</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="4">
<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="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="3" 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_8" 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="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/TangKuPos.iml" filepath="$PROJECT_DIR$/TangKuPos.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules>
</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
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/TangKuPos" vcs="Git" />
</component>
</project>
\ No newline at end of file
apply plugin: 'com.android.application'
apply plugin: 'realm-android'
android {
compileSdkVersion 27
buildToolsVersion '27.0.0'
defaultConfig {
applicationId "zzdpos.xingdata.com.tangkupos"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//解决问题的代码
dexOptions {
jumboMode true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//开启DataBinding
dataBinding {
enabled = true
}
//使用Realm数据库
realm {
syncEnabled = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:27.0.2'
compile 'com.android.support:support-v4:27.0.2'
compile 'com.android.support:design:27.0.2'
compile 'com.android.support:cardview-v7:27.0.2'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'
compile 'io.reactivex.rxjava2:rxjava:2.1.5'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.alibaba:fastjson:1.1.67.android'
compile 'com.blankj:utilcode:1.9.3'
compile 'com.facebook.fresco:fresco:1.5.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile group: 'com.facebook.fresco', name: 'animated-gif', version: '1.5.0'
compile 'com.hwangjr.rxbus:rxbus:2.0.0'
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
compile 'com.yanzhenjie:permission:1.1.2'
compile 'com.wanjian:cockroach:0.0.5'
compile 'me.yokeyword:fragmentation:1.1.6'
compile 'com.github.arcadefire:nice-spinner:1.3.1'
compile 'com.contrarywind:Android-PickerView:3.2.5'
compile 'com.github.ybq:Android-SpinKit:1.1.0'
compile 'com.youth.banner:banner:1.4.10'
compile 'cn.jzvd:jiaozivideoplayer:6.0.0'
compile 'com.liulishuo.filedownloader:library:1.6.8'
compile(name: 'zx_print_library-debug', ext: 'aar')
}
# 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
package zzdpos.xingdata.com.tangkupos;
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() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("zzdpos.xingdata.com.tangkupos", appContext.getPackageName());
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="zzdpos.xingdata.com.tangkupos">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:label="@string/main_title"
android:launchMode="singleTask"
android:screenOrientation="landscape"
android:windowSoftInputMode="adjustUnspecified|stateHidden"/>
<activity
android:name=".ui.splash.SplashActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:screenOrientation="landscape"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".ui.login.LoginActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:screenOrientation="landscape"
android:windowSoftInputMode="adjustUnspecified|stateHidden"/>
<activity
android:name=".ui.exception.ErrorDialogActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:theme="@style/Theme.AppCompat.Light.Dialog"/>
<activity
</application>
</manifest>
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos;
import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.Application;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.StrictMode;
import com.android.dualscreenmanager.aidl.IDualScreenManagerService;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.CrashUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.Utils;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.wanjian.cockroach.Cockroach;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.Permission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import me.yokeyword.fragmentation.Fragmentation;
import zzdpos.xingdata.com.tangkupos.util.INI;
/**
* Application,初始化一些操作
*
* @author Zhangzhen
*/
public class App extends Application {
public static App instance;
public RealmConfiguration mRealmConfig;
public static IDualScreenManagerService mDualScreen = null;
public Handler handler = new Handler();
@Override
public void onCreate() {
super.onCreate();
instance = this;
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
//初始化工具类
Utils.init(this);
//记录错误信息
CrashUtils.init(C.PATH.CRASH);
//初始化图片加载类
Fresco.initialize(this);
// 权限申请
AndPermission.with(App.instance)
.requestCode(100)
.permission(Permission.STORAGE)
.callback(this)
.start();
// 初始化异常处理
initEx();
//初始化Fragment框架
initFragment();
//初始化数据库
initRealm();
}
/**
* 初始化Realm
*/
private void initRealm() {
//初始化Realm
Realm.init(this);
//配置文件
mRealmConfig = new RealmConfiguration.Builder()
.name("TangKu") //文件名
.schemaVersion(1) //版本号
.build();
}
/**
* 异常处理初始化
*/
private void initEx() {
Cockroach.install((thread, throwable) -> new Handler(Looper.getMainLooper()).post(() -> {
try {
Intent intent = new Intent();
intent.putExtra(C.EXTRA_KEY.EXCEPTION, throwable).setClass(ActivityUtils
.getTopActivity(), ErrorDialogActivity.class);
startActivity(intent);
LogUtils.e("AndroidRuntime", "--->CockroachException:" + thread + "<---",
throwable);
} catch (Throwable e) {
ToastUtils.showLong(e.getMessage());
}
}));
}
/**
* fragment框架初始化
*/
private void initFragment() {
Fragmentation.builder().stackViewMode(Fragmentation.BUBBLE).debug(BuildConfig.DEBUG)
.handleException(e -> {
}).install();
}
/**
* 权限申请成功回调
*
* @param grantedPermissions
*/
@PermissionYes(100)
private void getPermissionYes(List<String> grantedPermissions) {
// 初始化日志保存文件夹
if (!INI.init("TangKu")) {
ToastUtils.showLong("日志文件夹初始化失败");
}
}
/**
* 权限申请失败回调
*
* @param grantedPermissions
*/
@PermissionNo(100)
private void getPermissioNo(List<String> grantedPermissions) {
ToastUtils.showLong("权限申请失败");
}
public static void reStartApp() {
// 重启
Intent intent = new Intent(instance.getApplicationContext(), SplashActivity
.class);
@SuppressLint("WrongConstant") PendingIntent restartIntent = PendingIntent.getActivity
(instance
.getApplicationContext(), 0, intent,
Intent.FLAG_ACTIVITY_NEW_TASK);
AlarmManager mgr = (AlarmManager) instance.getSystemService(Context
.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1, restartIntent); //
// 1毫秒后重启应用
// 结束所有activity
ActivityUtils.finishAllActivities();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
}
This diff is collapsed.
package zzdpos.xingdata.com.tangkupos;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
package zzdpos.xingdata.com.tangkupos.api;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import zzdpos.xingdata.com.tangkupos.C;
/**
* 网络交互类
*
* @author Zhangzhen
*/
class Api {
ApiService service;
private static class ApiHolder {
private static final Api INSTANCE = new Api();
}
static Api getInstance() {
return ApiHolder.INSTANCE;
}
private Api() {
//LOG
HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor();
logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//HEAD
Interceptor headInterceptor = (chain) -> chain.proceed(
chain.request().newBuilder()
.addHeader("User-Agent", C.HEAD.USER_AGENT)
.addHeader("Connection", C.HEAD.CONNECTION)
.addHeader("Content-Type", C.HEAD.CONTENT_TYPE)
.addHeader("Content-Language", C.HEAD.CONTENT_LANGUAGE)
.addHeader("Cache-Control", C.HEAD.CACHE_CONTROL)
.build());
//COOKIE
CookieJar cookieJar = new CookieJar() {
private HashMap<String, Cookie> cookieMap = new HashMap<>();
@Override
public void saveFromResponse(@NonNull HttpUrl url, @NonNull List<Cookie> cookies) {
for (int i = 0; i < cookies.size(); i++) {
cookieMap.put(cookies.get(i).name(), cookies.get(i));
}
}
@Override
public List<Cookie> loadForRequest(@NonNull HttpUrl url) {
return new ArrayList<>(cookieMap.values());
}
};
//Client
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(C.API_BUILDER.READ_TIMEOUT, TimeUnit.MILLISECONDS)
.connectTimeout(C.API_BUILDER.CONNECT_TIMEOUT, TimeUnit.MILLISECONDS)
.addInterceptor(headInterceptor)
.addInterceptor(logInterceptor)
.cookieJar(cookieJar)
.build();
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ConverterFactory.create())
.baseUrl(C.URL.BASE_URL)
.build();
service = retrofit.create(ApiService.class);
}
}
package zzdpos.xingdata.com.tangkupos.api;
import java.io.IOException;
/**
* 网络错误信息类
*
* @author Zhangzhen
*/
public class ApiException {
public static class API extends RuntimeException {
private String returnCode;
private String returnInfo;
API(String returnCode, String returnInfo, String returnUrl) {
//TODO 应该是returnCode, returnInfo, returnUrl组成的Json
super(getErrorDesc(returnCode, returnInfo, returnUrl));
this.returnInfo = returnInfo;
this.returnCode = returnCode;
}
@Override
public String getLocalizedMessage() {
//TODO 应当是getErrorDesc(getMessage())
return returnCode;
}
public String getReturnCode() {
return returnCode;
}
public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
}
public String getReturnInfo() {
return returnInfo;
}
public void setReturnInfo(String returnInfo) {
this.returnInfo = returnInfo;
}
}
static class IO extends IOException {
IO(String returnCode, String returnInfo, String returnUrl) {
super(getErrorDesc(returnCode, returnInfo, returnUrl));
}
}
static class SYNC extends RuntimeException {
public long time;
public long id;
public SYNC() {
}
SYNC(long time, long id) {
this.time = time;
this.id = id;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
/**
* 获取问题描述
*
* @param returnCode 返回的状态吗
* @param returnInfo 返回的信息
* @param returnUrl 返回的网址
* @return 问题描述
*/
private static String getErrorDesc(String returnCode, String returnInfo, String returnUrl) {
switch (returnCode) {
//如需根据Code自定义返回信息,则在这里添加
//默认直接返回原本的returnInfo
default:
return returnInfo;
}
}
/**
* TODO 获取问题描述
*
* @param strJson 问题Json(message)
* @return 问题描述
*/
private static String getErrorDesc(String strJson) {
//Json转换成的问题描述
return strJson;
}
}
package zzdpos.xingdata.com.tangkupos.api;
import android.support.annotation.NonNull;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.xingdata.zzdhd.C;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import okio.BufferedSource;
import okio.Okio;
import retrofit2.Converter;
import retrofit2.Retrofit;
public class ConverterFactory extends Converter.Factory {
static ConverterFactory create() {
return new ConverterFactory();
}
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
Retrofit retrofit) {
return new FastJsonResponseBodyConverter<>(type);
}
@Override
public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[]
parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
return new FastJsonRequestBodyConverter<>();
}
class FastJsonRequestBodyConverter<T> implements Converter<T, RequestBody> {
private final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
@Override
public RequestBody convert(@NonNull T value) throws IOException {
return RequestBody.create(MEDIA_TYPE, JSON.toJSONBytes(value, SerializerFeature
.WriteMapNullValue));
}
}
class FastJsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
private final Type type;
FastJsonResponseBodyConverter(Type type) {
this.type = type;
}
@Override
public T convert(@NonNull ResponseBody value) throws IOException {
BufferedSource bufferedSource = Okio.buffer(value.source());
String tempStr = bufferedSource.readUtf8();
bufferedSource.close();
JSONObject jsonObject = JSON.parseObject(tempStr);
if (type instanceof HttpMessage && jsonObject.containsKey("return_code") &&
!jsonObject.get("return_code").equals(C.RETURN_CODE.SERVER_OK)) {
throw new ApiException.API(jsonObject.getString("return_code"), jsonObject
.getString("return_info"), jsonObject.getString("return_url"));
} else {
return JSON.parseObject(tempStr, type);
}
}
}
}
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos.api;
import com.blankj.utilcode.util.LogUtils;
import com.xingdata.zzdhd.C;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
/**
* 网络异常处理类
*
* @param <T>
*/
class ErrorFilter<T> implements Function<Throwable, HttpMessage<T>> {
@Override
public HttpMessage<T> apply(@NonNull Throwable throwable) throws Exception {
LogUtils.e(throwable.getMessage());
//可根据Throwable具体区分,现在先统一变成服务器异常
return new HttpMessage<>(C.RETURN_CODE.SERVER_ERR,C.RETURN_INFO.SERVER_ERR_INFO);
}
}
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos.api;
import com.alibaba.fastjson.annotation.JSONField;
import com.google.gson.annotations.SerializedName;
import java.util.HashMap;
/**
* 交互数据包
*
* @param <T> returnData的数据类型
* @author Zhangzhen
*/
public class HttpMessage<T> {
public HttpMessage() {
}
@SerializedName("return_code")
private String returnCode;
@SerializedName("return_info")
private String returnInfo;
@SerializedName("return_data")
private T returnData;
@SerializedName("return_url")
private String returnUrl;
@SerializedName("return_map")
private HashMap<String, String> returnMap;
private boolean success;
private String token;
HttpMessage(String returnCode, String returnInfo) {
this.returnCode = returnCode;
this.returnInfo = returnInfo;
}
@JSONField(name = "return_code")
public String getReturnCode() {
return returnCode;
}
@JSONField(name = "return_code")
public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
}
@JSONField(name = "return_info")
public String getReturnInfo() {
return returnInfo;
}
@JSONField(name = "return_info")
public void setReturnInfo(String returnInfo) {
this.returnInfo = returnInfo;
}
@JSONField(name = "return_data")
public T getReturnData() {
return returnData;
}
@JSONField(name = "return_data")
public void setReturnData(T returnData) {
this.returnData = returnData;
}
@JSONField(name = "return_url")
public String getReturnUrl() {
return returnUrl;
}
@JSONField(name = "return_url")
public void setReturnUrl(String returnUrl) {
this.returnUrl = returnUrl;
}
@JSONField(name = "return_map")
public HashMap<String, String> getReturnMap() {
return returnMap;
}
@JSONField(name = "return_map")
public void setReturnMap(HashMap<String, String> returnMap) {
this.returnMap = returnMap;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
}
package zzdpos.xingdata.com.tangkupos.api;
import android.content.Intent;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdhd.App;
import com.xingdata.zzdhd.C;
import com.xingdata.zzdhd.ui.dialog.PromptDialog;
import com.xingdata.zzdhd.ui.exception.ServerErrActivity;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
/**
* 用于将HttpMessage脱壳
*
* @param <T> 最后需要的数据类型
* @author Zhangzhen
*/
class ResultFilter<T> implements Function<HttpMessage<T>, T> {
PromptDialog promptDialog;
public String TAG = "ResultFilter--->";
@Override
public T apply(@NonNull HttpMessage<T> tHttpMessage) throws Exception {
switch (tHttpMessage.getReturnCode()) {
case C.RETURN_CODE.SERVER_OK:
return tHttpMessage.getReturnData();
case C.RETURN_CODE.NO_LOGIN: {
App.instance.handler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent();
intent.putExtra("serverErr", "错误码:" + tHttpMessage.getReturnCode() +
"\n\n\n" + tHttpMessage.getReturnInfo());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(ActivityUtils.getTopActivity(), ServerErrActivity.class);
App.instance.startActivity(intent);
}
});
LogUtils.e(TAG + C.RETURN_INFO.NO_LOGIN_INFO);
ToastUtils.showLong(C.RETURN_INFO.NO_LOGIN_INFO);
// ActivityUtils.finishAllActivities();
// ActivityUtils.startActivity(SplashActivity.class);
return null;
}
// case C.RETURN_CODE.NO_PERMISSIONS: {
// LogUtils.e(TAG + C.RETURN_INFO.NO_PERMISSIONS);
// ToastUtils.showLong(C.RETURN_INFO.NO_PERMISSIONS);
// App.instance.handler.post(new Runnable() {
// @Override
// public void run() {
// Intent intent = new Intent();
// intent.putExtra("serverErr", "错误码:" + tHttpMessage.getReturnCode() +
// "\n\n\n" + tHttpMessage.getReturnInfo());
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.setClass(ActivityUtils.getTopActivity(), ServerErrActivity.class);
// App.instance.startActivity(intent);
// }
// });
// return null;
// }
case C.RETURN_CODE.LOGIN_CAN_NOT_ERR: {
LogUtils.e(TAG + C.RETURN_INFO.LOGIN_CAN_NOT_ERR_INFO);
ToastUtils.showLong(C.RETURN_INFO.LOGIN_CAN_NOT_ERR_INFO);
App.instance.handler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent();
intent.putExtra("serverErr", "错误码:" + tHttpMessage.getReturnCode() +
"\n\n\n" + tHttpMessage.getReturnInfo());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(ActivityUtils.getTopActivity(), ServerErrActivity.class);
App.instance.startActivity(intent);
}
});
return null;
}
case C.RETURN_CODE.SERVER_ERR:
throw new ApiException.IO(tHttpMessage.getReturnCode(), tHttpMessage.getReturnInfo(), tHttpMessage.getReturnUrl());
default:
throw new ApiException.API(tHttpMessage.getReturnCode(), tHttpMessage.getReturnInfo(), tHttpMessage.getReturnUrl());
}
}
}
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos.api;
import com.blankj.utilcode.util.LogUtils;
import com.xingdata.zzdhd.C;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.functions.Function;
class RetryHelper implements Function<Observable<Throwable>, ObservableSource<?>> {
private int retryCount;
private int retryTime;
private int nowCount = 0;
RetryHelper(int retryCount) {
this.retryCount = retryCount;
this.retryTime = C.API_BUILDER.RETRY_DELAY_TIME;
}
RetryHelper(int retryCount, int retryTime) {
this.retryCount = retryCount;
this.retryTime = retryTime;
}
@Override
public ObservableSource<?> apply(Observable<Throwable> throwableObservable) throws Exception {
return throwableObservable.flatMap(new Function<Throwable, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(Throwable throwable) throws Exception {
if (throwable instanceof ApiException.IO) {
if (++nowCount <= retryCount) {
LogUtils.e("重试时间:" + retryTime
+ "重试:" + nowCount);
return Observable.timer(retryTime, TimeUnit.MILLISECONDS);
}
return Observable.error(throwable);
} else {
return Observable.error(throwable);
}
}
});
}
}
package zzdpos.xingdata.com.tangkupos.base;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatDelegate;
import android.view.KeyEvent;
import android.view.View;
import com.hwangjr.rxbus.RxBus;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import me.yokeyword.fragmentation.ISupportFragment;
import me.yokeyword.fragmentation.SupportActivity;
import zzdpos.xingdata.com.tangkupos.util.InstanceUtil;
/**
* BaseActivity,供新创建的Activity继承
*
* @param <P> Presenter,新创建的继承BasePresenter的类
* @param <B> Activity对应的ViewDataBinding
* @author Zhangzhen
*/
public abstract class BaseActivity<P extends BasePresenter, B extends ViewDataBinding> extends SupportActivity {
public Context mContext;
public P mPresenter;
public B mViewBinding;
public List<BaseDialog> mDialogs;
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
public abstract int getLayoutId();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
mDialogs = new ArrayList<>();
View rootView = getLayoutInflater().inflate(this.getLayoutId(), null, false);
mViewBinding = DataBindingUtil.bind(rootView);
super.setContentView(rootView);
RxBus.get().register(mContext);
initPresenter();
initView();
}
protected void initPresenter() {
if (this instanceof BaseView &&
this.getClass().getGenericSuperclass() instanceof ParameterizedType &&
((ParameterizedType) (this.getClass().getGenericSuperclass())).getActualTypeArguments().length > 0) {
Class mPresenterClass = (Class) ((ParameterizedType) (this.getClass()
.getGenericSuperclass())).getActualTypeArguments()[0];
mPresenter = InstanceUtil.getInstance(mPresenterClass);
mPresenter.setIntent(getIntent()).setView(this).build();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
RxBus.get().unregister(mContext);
if (mPresenter != null) mPresenter.onDetached();
}
public abstract void initView();
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
mPresenter.dispatchKeyEvent(event);
return super.dispatchKeyEvent(event);
}
/**
* 关闭所有Dialog
*/
public void dismissAllDialog() {
for (int i = 0; i < mDialogs.size(); i++) {
mDialogs.get(i).dismiss();
}
}
/**
* 关闭指定Dialog
*
* @param clazz dialog的类型
*/
public void dismissDialog(Class clazz) {
for (int i = 0; i < mDialogs.size(); i++) {
if (mDialogs.get(i).getClass().getSimpleName().equals(clazz.getSimpleName())) {
mDialogs.get(i).dismiss();
}
}
}
/**
* 获取顶部Dialog
*
* @return 顶部Dialog
*/
public BaseDialog getTopDialog() {
if (mDialogs.size() > 0 && mDialogs.get(0).isShowing) {
return mDialogs.get(0);
} else {
return null;
}
}
private long mTime = 0;
@Override
public void start(ISupportFragment toFragment) {
if ((System.currentTimeMillis() - mTime) > 500) {
mTime = System.currentTimeMillis();
super.start(toFragment);
}
}
}
package zzdpos.xingdata.com.tangkupos.base;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.xingdata.zzdhd.R;
import java.util.List;
/**
* BaseAdapter,供新创建的Adapter继承
*
* @param <T> 要展示数据的数据类型
* @param <B> Item对应的ViewDataBinding
* @author Zhangzhen
*/
public abstract class BaseAdapter<T, B extends ViewDataBinding> extends BaseQuickAdapter<T, BaseViewHolder> {
public BaseAdapter(@LayoutRes int layoutResId, @Nullable List<T> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, T item) {
convert((B) helper.mViewBinding, item);
}
protected abstract void convert(B mViewBinding, T item);
@Override
protected View getItemView(int layoutResId, ViewGroup parent) {
ViewDataBinding binding = DataBindingUtil.inflate(mLayoutInflater, layoutResId, parent, false);
if (binding == null) return super.getItemView(layoutResId, parent);
View view = binding.getRoot();
view.setTag(R.id.BaseQuickAdapter_databinding_support, binding);
return view;
}
}
package zzdpos.xingdata.com.tangkupos.base;
import java.io.Serializable;
/**
* BaseBean
*/
public interface BaseBean extends Serializable {
}
package zzdpos.xingdata.com.tangkupos.base;
import android.content.Context;
import android.content.DialogInterface;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatDelegate;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ScreenUtils;
import com.blankj.utilcode.util.StringUtils;
import com.xingdata.zzdhd.R;
import com.xingdata.zzdhd.databinding.DialogBaseBinding;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
public abstract class BaseDialog<P extends BasePresenter, B extends ViewDataBinding> extends DialogFragment {
private DialogBaseBinding mBaseBinding;
private Disposable mDisp;
public Context mContext;
public P mPresenter;
public B mViewBinding;
public boolean isShowing;
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
public abstract int getLayoutId();
public void onCancelClick(View view) {
KeyboardUtils.hideSoftInput(mViewBinding.getRoot());
this.dismiss();
}
public void onConfirmClick(View view) {
KeyboardUtils.hideSoftInput(mViewBinding.getRoot());
}
protected boolean isShowTitle() {
return true;
}
protected boolean isEasy() {
return false;
}
protected void seConfirmEnable( boolean isEnable){
mBaseBinding.btnConfirm.setEnabled(isEnable);
}
public int getTitle() {
return R.string.all_dialog;
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
mContext = ActivityUtils.getTopActivity();
mPresenter = (P) getBaseActivity().mPresenter;
getBaseActivity().mDialogs.add(0, this);
if (!isEasy()) return getFragmentDialog(inflater, container);
else return getEasyFragmentDialog(inflater, container);
}
private View getFragmentDialog(@NonNull LayoutInflater inflater, ViewGroup container) {
mBaseBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_base, container, false);
mBaseBinding.vsCenter.getViewStub().setLayoutResource(getLayoutId());
mBaseBinding.vsCenter.getViewStub().setOnInflateListener((viewStub, view) -> mViewBinding
= DataBindingUtil.bind(view));
mBaseBinding.vsCenter.getViewStub().inflate();
if (!isShowTitle() || getTitle() < 0) mBaseBinding.tvTitle.setVisibility(View.GONE);
else if (StringUtils.isEmpty(getTitleValue())) mBaseBinding.tvTitle.setText(getTitle());
else mBaseBinding.tvTitle.setText(getString(getTitle(), getTitleValue()));
mBaseBinding.btnCancel.setOnClickListener(this::onCancelClick);
mBaseBinding.btnConfirm.setOnClickListener(this::onConfirmClick);
this.initView();
return mBaseBinding.getRoot();
}
private View getEasyFragmentDialog(@NonNull LayoutInflater inflater, ViewGroup container) {
mViewBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false);
this.initView();
return mViewBinding.getRoot();
}
private BaseActivity getBaseActivity() {
return (BaseActivity) getActivity();
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
isShowing = false;
if (getBaseActivity() != null && getBaseActivity().mDialogs != null) {
getBaseActivity().mDialogs.remove(this);
}
}
public abstract void initView();
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (!isEasy()) {
WindowManager.LayoutParams attributes = getDialog().getWindow().getAttributes();
attributes.width = ScreenUtils.getScreenWidth() * 45 / 100;
attributes.height = -2;
getDialog().getWindow().setAttributes(attributes);
}
}
public void show(BaseActivity activity) {
if (!isShowing) {
super.show(activity.getSupportFragmentManager(), this.getTag());
isShowing = true;
}
}
public void show(BaseActivity activity, int recLen) {
if (!isShowing) {
super.show(activity.getSupportFragmentManager(), this.getTag());
isShowing = true;
Observable.interval(0, 1, TimeUnit.SECONDS).take(recLen + 1).map(new Function<Long, Long>() {
@Override
public Long apply(@io.reactivex.annotations.NonNull Long aLong) throws Exception {
return recLen - aLong;
}
}).observeOn(AndroidSchedulers.mainThread()).doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
mDisp = disposable;
}
}).subscribe(new Observer<Long>() {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
mDisp = d;
}
@Override
public void onNext(@io.reactivex.annotations.NonNull Long aLong) {
LogUtils.e("对话框将在" + aLong + "S后关闭");
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
}
@Override
public void onComplete() {
dismiss();
if (null != mDisp) {
mDisp.dispose();
}
}
});
}
}
public void dismiss() {
if (isShowing) {
super.dismiss();
}
}
protected void setTitle(String title) {
mBaseBinding.tvTitle.setText(title);
}
protected void setTitle(int res) {
mBaseBinding.tvTitle.setText(res);
}
protected void setOnCancelClick(View.OnClickListener onCancelClick) {
mBaseBinding.btnCancel.setOnClickListener(onCancelClick);
}
protected void setOnConfirmClick(View.OnClickListener onConfirmClick) {
mBaseBinding.btnConfirm.setOnClickListener(onConfirmClick);
}
public String getTitleValue() {
return null;
}
public void setBtnName(String cancel, String OK) {
mBaseBinding.btnCancel.setText(cancel);
mBaseBinding.btnConfirm.setText(OK);
}
}
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos.base;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatDelegate;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupWindow;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.KeyboardUtils;
import com.xingdata.zzdhd.R;
import com.xingdata.zzdhd.databinding.FragmentBaseBinding;
import me.yokeyword.fragmentation.SupportFragment;
/**
* BaseFragment,供新创建的Fragment继承
*
* @param <P> 其依附的Activity的Presenter的类
* @param <B> Fragment对应的ViewDataBinding
* @author Zhangzhen
*/
public abstract class BaseFragment<P extends BasePresenter, B extends ViewDataBinding> extends SupportFragment {
private FragmentBaseBinding mBaseBinding;
public Context mContext;
public P mPresenter;
public B mViewBinding;
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
public abstract int getLayoutId();
protected boolean isLazy() {
return false;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mContext = ActivityUtils.getTopActivity();
mPresenter = (P) ((BaseActivity) getActivity()).mPresenter;
if (isLazy()) {
return getLazyFragmentView(inflater, container);
} else {
return getFragmentView(inflater, container);
}
}
private View getFragmentView(LayoutInflater inflater, ViewGroup container) {
mViewBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false);
initView();
return mViewBinding.getRoot();
}
private View getLazyFragmentView(LayoutInflater inflater, ViewGroup container) {
mBaseBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_base, container, false);
return mBaseBinding.getRoot();
}
@Override
public void onEnterAnimationEnd(Bundle savedInstanceState) {
super.onEnterAnimationEnd(savedInstanceState);
if (isLazy()) {
mBaseBinding.vsFragment.getViewStub().setLayoutResource(getLayoutId());
mBaseBinding.vsFragment.getViewStub().setOnInflateListener((viewStub, view) -> {
mViewBinding = DataBindingUtil.bind(view);
mBaseBinding.skvLoading.setVisibility(View.GONE);
});
mBaseBinding.vsFragment.getViewStub().inflate();
initView();
}
}
public abstract void initView();
public void showMainPopup(PopupWindow popupWindow, View view) {
popupWindow.getContentView().measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec
.UNSPECIFIED);
int x = (int) ((popupWindow.getContentView().getMeasuredWidth() - view.getMeasuredWidth()) * 0.5);
popupWindow.showAsDropDown(view, -x, 0);
}
@Override
public void onDetach() {
super.onDetach();
KeyboardUtils.hideSoftInput(getActivity());
}
}
package zzdpos.xingdata.com.tangkupos.base;
public interface BaseModel {
Long getSyncId();
void setSyncId(Long id);
Long getUpdateTime();
void setUpdateTime(Long updateTime);
Long getCreateTime();
void setCreateTime(Long createTime);
String getPrimaryKey();
}
package zzdpos.xingdata.com.tangkupos.base;
import android.content.Intent;
import android.view.KeyEvent;
import com.xingdata.zzdhd.App;
import com.xingdata.zzdhd.db.DB;
import io.reactivex.disposables.CompositeDisposable;
import io.realm.Realm;
/**
* BasePresenter,写在Contract中,在继承他的类中写数据交互的方法
* 网络操作需要加入mCompositeDisposable中
*
* @param <V> 界面执行操作的接口
* @author Zhangzhen
*/
public abstract class BasePresenter<V> {
protected V mView;
protected CompositeDisposable mCompositeDisposable = new CompositeDisposable();
private Realm mRealm;
BasePresenter setView(V v) {
this.mView = v;
return this;
}
void build() {
this.onAttached();
}
protected Realm getRealm() {
if (mRealm == null) {
mRealm = Realm.getInstance(App.instance.mRealmConfig);
// mRealm.setAutoRefresh(false);
}
return mRealm;
}
protected void initRealm() {
DB.getInstance().put(getClass(), getRealm());
}
public abstract void onAttached();
void onDetached() {
if (mRealm != null) {
mRealm.close();
DB.getInstance().remove(getClass());
}
mCompositeDisposable.dispose();
}
private Intent intent;
BasePresenter setIntent(Intent intent) {
this.intent = intent;
return this;
}
public Intent getIntent() {
return intent;
}
public void dispatchKeyEvent(KeyEvent event) {
}
}
package zzdpos.xingdata.com.tangkupos.base;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.xingdata.zzdhd.R;
import java.util.List;
public abstract class BaseSelectedAdapter<T, B extends ViewDataBinding> extends BaseQuickAdapter<T, BaseViewHolder> {
private int mSelectedPosition = 0;
private OnItemClickListener mOnItemClickListener;
private boolean isEnabled = true;
public BaseSelectedAdapter(int layoutResId, @Nullable List<T> data) {
super(layoutResId, data);
super.setOnItemClickListener((adapter, view, position) -> {
if (!isEnabled) return;
notifyItemChanged(mSelectedPosition);
notifyItemChanged(position);
mSelectedPosition = position;
});
}
@Override
protected void convert(BaseViewHolder helper, T item) {
if (mOnItemClickListener != null && mSelectedPosition == helper.getAdapterPosition())
mOnItemClickListener.onItemClick(this, helper.itemView, mSelectedPosition);
this.convert(helper, (B) helper.mViewBinding, item);
}
protected abstract void convert(BaseViewHolder helper, B mViewBinding, T item);
@Override
public void setOnItemClickListener(@Nullable OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public void setOnItemClickListener(@Nullable OnItemClickListener listener, int selectedPosition) {
this.mSelectedPosition = selectedPosition;
this.mOnItemClickListener = listener;
}
public int getSelectedPosition() {
return mSelectedPosition;
}
public void setSelectedPosition(int position) {
this.mSelectedPosition = position;
}
public void setEnabled(boolean isEnabled) {
this.isEnabled = isEnabled;
}
@Override
protected View getItemView(int layoutResId, ViewGroup parent) {
ViewDataBinding binding = DataBindingUtil.inflate(mLayoutInflater, layoutResId, parent, false);
if (binding == null) return super.getItemView(layoutResId, parent);
View view = binding.getRoot();
view.setTag(R.id.BaseQuickAdapter_databinding_support, binding);
return view;
}
}
package zzdpos.xingdata.com.tangkupos.base;
public interface BaseSku {
boolean isSelected();
void setSelected(boolean isSelected);
Long getSkuRetailPrice1();
String getSpuName();
String getSpuUnitName();
String getSpuImg();
Long getSkuId();
int getStatus();
Long getId();
Long getSkuRetailPrice2();
Long getSkuTradePrice();
Byte getSkuOffFlag();
Long getSkuStock();
Long getSpuCateId();
Long getSpuBrandId();
}
package zzdpos.xingdata.com.tangkupos.base;
/**
* BaseView,写在Contract中,在继承他的接口中写界面中执行的方法
*
* @author Zhangzhen
*/
public interface BaseView {
}
package zzdpos.xingdata.com.tangkupos.base;
import android.databinding.ViewDataBinding;
import android.view.View;
import zzdpos.xingdata.com.tangkupos.R;
/**
* BaseViewHolder,集成了ViewDataBinding
*/
public class BaseViewHolder extends com.chad.library.adapter.base.BaseViewHolder {
public ViewDataBinding mViewBinding;
public BaseViewHolder(View view) {
super(view);
mViewBinding = (ViewDataBinding) itemView.getTag(R.id.BaseQuickAdapter_databinding_support);
}
}
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos.db;
import java.util.HashMap;
import io.realm.Realm;
import zzdpos.xingdata.com.tangkupos.base.BasePresenter;
public class DB {
private static HashMap<String, Realm> mRealmMap = new HashMap<>();
private static class DBHolder {
private static final DB INSTANCE = new DB();
}
public static DB getInstance() {
return DB.DBHolder.INSTANCE;
}
public <T extends BasePresenter> void put(Class<T> clazz, Realm realm) {
mRealmMap.put(clazz.getSimpleName(), realm);
}
public <T extends BasePresenter> Realm get(Class<T> clazz) {
return mRealmMap.get(clazz.getSimpleName());
}
public <T extends BasePresenter> void remove(Class<T> clazz) {
mRealmMap.remove(clazz.getSimpleName());
}
}
package zzdpos.xingdata.com.tangkupos.db;
import java.util.ArrayList;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmModel;
import io.realm.RealmObject;
import io.realm.RealmResults;
import zzdpos.xingdata.com.tangkupos.App;
import zzdpos.xingdata.com.tangkupos.base.BaseModel;
public class DBFactory {
public static <E extends RealmModel> List<E> getLimitList(RealmResults<E> data, int offset, int limit) {
List<E> obtainList = new ArrayList<>();
Realm realm = Realm.getDefaultInstance();
if (data.size() == 0) {
return obtainList;
}
for (int i = offset * limit; i < offset * limit + limit; i++) {
if (i >= data.size()) {
break;
}
E temp = realm.copyFromRealm(data.get(i));
obtainList.add(temp);
}
realm.close();
return obtainList;
}
public static <E extends RealmModel> List<E> getList(RealmResults<E> data) {
List<E> obtainList = new ArrayList<>();
Realm realm = Realm.getDefaultInstance();
if (data.size() == 0) {
return obtainList;
}
for (int i = 0; i < data.size(); i++) {
E temp = realm.copyFromRealm(data.get(i));
obtainList.add(temp);
}
realm.close();
return obtainList;
}
/**
* 删除数据库内所数据
*
* @param listModel
* @param <E>
*/
public static <E extends RealmObject & BaseModel> void deleteAllData(List<Class>
listModel) {
Realm realm = Realm.getInstance(App.instance.mRealmConfig);
realm.beginTransaction();
for (int i = 0; i < listModel.size(); i++) {
realm.where(listModel.get(i)).findAll().deleteAllFromRealm();
}
realm.commitTransaction();
}
/**
* 查询updateTime为某值时,最大id
*
* @param clazz
* @param sortId
* @param <T>
* @return
*/
public static <T extends RealmObject & BaseModel> long selectMaxUpdateTimeId(Class<T> clazz,
String sortId) {
Realm realm = getRealm();
Number number = realm.where(clazz).equalTo("updateTime", selectMaxUpdateTime(clazz))
.findAll()
.max(sortId);
if (number != null) {
return number.longValue();
}
return 0;
}
/**
* 查询最大时间
*
* @param clazz
* @param <T>
* @return
*/
public static <T extends RealmObject & BaseModel> long selectMaxUpdateTime(Class<T> clazz) {
Realm realm = getRealm();
Number number = realm.where(clazz).findAll().max("updateTime");
if (number != null) {
return number.longValue();
}
return 0;
}
public static <T extends RealmObject & BaseModel> void insertData(List<T> modelList, Realm
realm) {
realm.beginTransaction();
realm.copyToRealmOrUpdate(modelList);
realm.commitTransaction();
}
public static Realm getRealm() {
Realm realm = Realm.getInstance(App.instance.mRealmConfig);
realm.refresh();
// realm.setAutoRefresh(true);
return realm;
}
}
package zzdpos.xingdata.com.tangkupos.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.bigkoo.pickerview.model.IPickerViewData;
import com.xingdata.zzdhd.base.BaseBean;
import com.xingdata.zzdhd.ui.manager.integral.dialog.IntegralGetDialog;
/**
* Created by Administrator on 2017/11/27.
*/
public class Category implements BaseBean, IPickerViewData {
private Integer id;
private Long spuCateId;
private String spuCateName;
private String spuGrpName;
private String spuClaName;
private String spuDepName;
private String spuUnitSet;
private String spuUnitNameSet;
private String spuFeatkeySet;
private String spuFeatkeyNameSet;
private Long updateTime;
private Long createTime;
@JSONField(serialize = false)
private Integer nowCategory = 1;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Long getSpuCateId() {
return spuCateId;
}
public void setSpuCateId(Long spuCateId) {
this.spuCateId = spuCateId;
}
public String getSpuCateName() {
return spuCateName;
}
public void setSpuCateName(String spuCateName) {
this.spuCateName = spuCateName;
}
public String getSpuGrpName() {
return spuGrpName;
}
public void setSpuGrpName(String spuGrpName) {
this.spuGrpName = spuGrpName;
}
public String getSpuClaName() {
return spuClaName;
}
public void setSpuClaName(String spuClaName) {
this.spuClaName = spuClaName;
}
public String getSpuDepName() {
return spuDepName;
}
public void setSpuDepName(String spuDepName) {
this.spuDepName = spuDepName;
}
public String getSpuUnitSet() {
return spuUnitSet;
}
public void setSpuUnitSet(String spuUnitSet) {
this.spuUnitSet = spuUnitSet;
}
public String getSpuUnitNameSet() {
return spuUnitNameSet;
}
public void setSpuUnitNameSet(String spuUnitNameSet) {
this.spuUnitNameSet = spuUnitNameSet;
}
public String getSpuFeatkeySet() {
return spuFeatkeySet;
}
public void setSpuFeatkeySet(String spuFeatkeySet) {
this.spuFeatkeySet = spuFeatkeySet;
}
public String getSpuFeatkeyNameSet() {
return spuFeatkeyNameSet;
}
public void setSpuFeatkeyNameSet(String spuFeatkeyNameSet) {
this.spuFeatkeyNameSet = spuFeatkeyNameSet;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Integer getNowCategory() {
return nowCategory;
}
public void setNowCategory(Integer nowCategory) {
this.nowCategory = nowCategory;
}
@JSONField(serialize = false)
@Override
public String getPickerViewText() {
switch (nowCategory) {
case IntegralGetDialog.ONE_CATEGORY: {
return getSpuClaName() + "";
}
case IntegralGetDialog.TWO_CATEGORY: {
return getSpuGrpName() + "";
}
case IntegralGetDialog.THREE_CATEGORY: {
return getSpuCateName() + "";
}
}
return "";
}
}
package zzdpos.xingdata.com.tangkupos.model;
import com.xingdata.zzdhd.base.BaseBean;
public class Cor implements BaseBean {
private Integer id;
private Long opMapId;
private Long channelMapId;
private Byte relateType;
private Byte relateStatus;
private Long updateTime;
private Long createTime;
private String channelName;
private String channelNameabcn;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Long getOpMapId() {
return opMapId;
}
public void setOpMapId(Long opMapId) {
this.opMapId = opMapId;
}
public Long getChannelMapId() {
return channelMapId;
}
public void setChannelMapId(Long channelMapId) {
this.channelMapId = channelMapId;
}
public Byte getRelateType() {
return relateType;
}
public void setRelateType(Byte relateType) {
this.relateType = relateType;
}
public Byte getRelateStatus() {
return relateStatus;
}
public void setRelateStatus(Byte relateStatus) {
this.relateStatus = relateStatus;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public String getChannelName() {
return channelName;
}
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public String getChannelNameabcn() {
return channelNameabcn;
}
public void setChannelNameabcn(String channelNameabcn) {
this.channelNameabcn = channelNameabcn;
}
@Override
public String toString() {
return channelNameabcn;
}
}
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos.model;
import com.xingdata.api.print.entity.BaseGoodPrint;
import com.xingdata.api.print.entity.BaseOrderPrint;
import com.xingdata.zzdhd.db.DB;
import com.xingdata.zzdhd.ui.login.LoginPresenter;
import com.xingdata.zzdhd.ui.main.MainPresenter;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/11/30.
* 盘库记录类
*/
public class Cs implements BaseOrderPrint {
/**
* channelMapId : 0
* count : 0
* createOperId : 0
* createTime : 2017-12-01T03:29:33.581Z
* csNo : string
* csResultFlag : string
* csdetailCount : 0
* csdetailList : [{"channelMapId":0,"createTime":"2017-12-01T03:29:33.581Z","csCnt":0,"csNo":"string","csResultFlag":"string","id":0,"merMapId":0,"opMapId":0,"shopMapId":0,"skuCnt":0,"skuDesc":"string","skuId":0,"spuBarcode":0,"spuName":"string","spuUnitName":"string"}]
* id : 0
* merMapId : 0
* opMapId : 0
* operName : string
* reserveData : string
* shopMapId : 0
* updateTime : 2017-12-01T03:29:33.581Z
*/
private Integer channelMapId;
private Integer count;
private Integer createOperId;
private Long createTime;
private String csNo;
private Integer csResultFlag;
private Integer csdetailCount;
private Integer id;
private Integer merMapId;
private Integer opMapId;
private String reserveData;
private Integer shopMapId;
private String updateTime;
private List<CsDetail> csdetailList;
private String operName;
private Long wrongCnt;
public Long getWrongCnt() {
if (csdetailList!=null){
wrongCnt=0L;
for (CsDetail csDetail:csdetailList){
if (csDetail.getCsResultFlag()!=0){
wrongCnt++;
}
}
}
return wrongCnt;
}
public void setWrongCnt(Long wrongCnt) {
this.wrongCnt = wrongCnt;
}
public Integer getChannelMapId() {
return channelMapId;
}
public void setChannelMapId(Integer channelMapId) {
this.channelMapId = channelMapId;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Integer getCreateOperId() {
return createOperId;
}
public void setCreateOperId(Integer createOperId) {
this.createOperId = createOperId;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public String getCsNo() {
return csNo;
}
public void setCsNo(String csNo) {
this.csNo = csNo;
}
public Integer getCsResultFlag() {
return csResultFlag;
}
public void setCsResultFlag(Integer csResultFlag) {
this.csResultFlag = csResultFlag;
}
public Integer getCsdetailCount() {
return csdetailCount;
}
public void setCsdetailCount(Integer csdetailCount) {
this.csdetailCount = csdetailCount;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getMerMapId() {
return merMapId;
}
public void setMerMapId(Integer merMapId) {
this.merMapId = merMapId;
}
public Integer getOpMapId() {
return opMapId;
}
public void setOpMapId(Integer opMapId) {
this.opMapId = opMapId;
}
public String getOperName() {
if (operName == null) {
operName = DB.getInstance().get(MainPresenter.class).where(Oper.class)
.equalTo("operId", getCreateOperId())
.findFirst().getOperName();
}
return operName;
}
public void setOperName(String operName) {
this.operName = operName;
}
public String getReserveData() {
return reserveData;
}
public void setReserveData(String reserveData) {
this.reserveData = reserveData;
}
public Integer getShopMapId() {
return shopMapId;
}
public void setShopMapId(Integer shopMapId) {
this.shopMapId = shopMapId;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public List<CsDetail> getCsdetailList() {
return csdetailList;
}
public void setCsdetailList(List<CsDetail> csdetailList) {
this.csdetailList = csdetailList;
}
@Override
public String getOrderTime() {
return com.blankj.utilcode.util.TimeUtils.millis2String(createTime);
}
@Override
public String getCasherName() {
return operName;
}
@Override
public String getUserName() {
return null;
}
@Override
public String getPayAmt() {
return null;
}
@Override
public String getPayChannel() {
return null;
}
@Override
public String getPayChange() {
return null;
}
@Override
public String getGoodsCnt() {
return String.valueOf(getWrongCnt());
}
@Override
public String getGoodsAmtSum() {
return null;
}
@Override
public String getGoodsReduPer() {
return null;
}
@Override
public String getGoodsReduAmt() {
return null;
}
@Override
public List<BaseGoodPrint> getGoodList() {
List<BaseGoodPrint> baseGoodPrints=new ArrayList<>();
for (CsDetail csDetail:csdetailList){
baseGoodPrints.add(csDetail);
}
return baseGoodPrints;
}
@Override
public String getDRAW_URL() {
return null;
}
@Override
public String getPrint_state() {
return null;
}
@Override
public String getOper_mobile() {
return null;
}
@Override
public String getVip_money() {
return null;
}
@Override
public String getStore_tel() {
return null;
}
@Override
public String getBalanceOld() {
return null;
}
@Override
public String getSupplier() {
return null;
}
@Override
public String getTitle() {
return LoginPresenter.loginReturnBean.getMerNameAbcn();
}
@Override
public String getStore() {
return LoginPresenter.loginReturnBean.getShopNameAbcn();
}
@Override
public String getOrderNo() {
return csNo;
}
}
package zzdpos.xingdata.com.tangkupos.model;
import com.xingdata.api.print.entity.BaseGoodPrint;
/**
* Created by Administrator on 2017/12/1.
*/
public class CsDetail implements BaseGoodPrint {
/**
* channelMapId : 0
* createTime : 2017-12-01T03:29:33.674Z
* csCnt : 0
* csNo : string
* csResultFlag : string
* id : 0
* merMapId : 0
* opMapId : 0
* shopMapId : 0
* skuCnt : 0
* skuDesc : string
* skuId : 0
* spuBarcode : 0
* spuName : string
* spuUnitName : string
*/
private Long channelMapId;
private Long csCnt;
private String csNo;
private Integer csResultFlag;
private Long id;
private Long merMapId;
private Long opMapId;
private Long shopMapId;
private Long skuCnt;
private String skuDesc;
private Long skuId;
private Long spuBarcode;
private String spuName;
private String spuUnitName;
public Long getChannelMapId() {
return channelMapId;
}
public void setChannelMapId(Long channelMapId) {
this.channelMapId = channelMapId;
}
public Long getCsCnt() {
return csCnt;
}
public void setCsCnt(Long csCnt) {
this.csCnt = csCnt;
}
public String getCsNo() {
return csNo;
}
public void setCsNo(String csNo) {
this.csNo = csNo;
}
public Integer getCsResultFlag() {
return csResultFlag;
}
public void setCsResultFlag(Integer csResultFlag) {
this.csResultFlag = csResultFlag;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getMerMapId() {
return merMapId;
}
public void setMerMapId(Long merMapId) {
this.merMapId = merMapId;
}
public Long getOpMapId() {
return opMapId;
}
public void setOpMapId(Long opMapId) {
this.opMapId = opMapId;
}
public Long getShopMapId() {
return shopMapId;
}
public void setShopMapId(Long shopMapId) {
this.shopMapId = shopMapId;
}
public Long getSkuCnt() {
return skuCnt;
}
public void setSkuCnt(Long skuCnt) {
this.skuCnt = skuCnt;
}
public String getSkuDesc() {
return skuDesc;
}
public void setSkuDesc(String skuDesc) {
this.skuDesc = skuDesc;
}
public Long getSkuId() {
return skuId;
}
public void setSkuId(Long skuId) {
this.skuId = skuId;
}
public Long getSpuBarcode() {
return spuBarcode;
}
public void setSpuBarcode(Long spuBarcode) {
this.spuBarcode = spuBarcode;
}
public String getSpuName() {
return spuName;
}
public void setSpuName(String spuName) {
this.spuName = spuName;
}
public String getSpuUnitName() {
return spuUnitName;
}
public void setSpuUnitName(String spuUnitName) {
this.spuUnitName = spuUnitName;
}
@Override
public String getName() {
return spuName;
}
@Override
public String getCnt() {
return String.valueOf(skuCnt);
}
@Override
public String getCheckCnt() {
return String.valueOf(csCnt);
}
@Override
public String getPrice() {
return null;
}
@Override
public String getSubtotal() {
return null;
}
@Override
public String getErrState() {
switch (csResultFlag) {
case 0://相等
return "相等";
case 1://盘多
return "多";
case 2://盘少
return "少";
}
return null;
}
}
package zzdpos.xingdata.com.tangkupos.model;
import com.xingdata.zzdhd.base.BaseBean;
import com.xingdata.zzdhd.base.BaseModel;
import io.realm.RealmObject;
import io.realm.annotations.Index;
import io.realm.annotations.PrimaryKey;
public class Ds extends RealmObject implements BaseModel, BaseBean {
@PrimaryKey
private Long id;
private Long opMapId;
private Long channelMapId;
private Long merMapId;
private Long shopMapId;
private String dsDesc;
private Byte dsStatus;
private Byte dsType;
private Long dsSize;
private Long dsExpBegin;
private Long dsExpEnd;
@Index
private Long updateTime;
private Long createTime;
private String dsUrl;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public Long getOpMapId() {
return opMapId;
}
public void setOpMapId(Long opMapId) {
this.opMapId = opMapId;
}
public Long getChannelMapId() {
return channelMapId;
}
public void setChannelMapId(Long channelMapId) {
this.channelMapId = channelMapId;
}
public Long getMerMapId() {
return merMapId;
}
public void setMerMapId(Long merMapId) {
this.merMapId = merMapId;
}
public Long getShopMapId() {
return shopMapId;
}
public void setShopMapId(Long shopMapId) {
this.shopMapId = shopMapId;
}
public String getDsDesc() {
return dsDesc;
}
public void setDsDesc(String dsDesc) {
this.dsDesc = dsDesc;
}
public Byte getDsStatus() {
return dsStatus;
}
public void setDsStatus(Byte dsStatus) {
this.dsStatus = dsStatus;
}
public Byte getDsType() {
return dsType;
}
public void setDsType(Byte dsType) {
this.dsType = dsType;
}
public Long getDsSize() {
return dsSize;
}
public void setDsSize(Long dsSize) {
this.dsSize = dsSize;
}
public Long getDsExpBegin() {
return dsExpBegin;
}
public void setDsExpBegin(Long dsExpBegin) {
this.dsExpBegin = dsExpBegin;
}
public Long getDsExpEnd() {
return dsExpEnd;
}
public void setDsExpEnd(Long dsExpEnd) {
this.dsExpEnd = dsExpEnd;
}
@Override
public Long getSyncId() {
return id;
}
@Override
public void setSyncId(Long id) {
this.id =id;
}
@Override
public Long getUpdateTime() {
return updateTime;
}
@Override
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
@Override
public Long getCreateTime() {
return createTime;
}
@Override
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
@Override
public String getPrimaryKey() {
return "id";
}
public String getDsUrl() {
return dsUrl;
}
public void setDsUrl(String dsUrl) {
this.dsUrl = dsUrl == null ? null : dsUrl.trim();
}
}
\ No newline at end of file
package zzdpos.xingdata.com.tangkupos.model;
/**
* Created by Administrator on 2017/12/11.
*/
public class Feed {
/**
* createTime : 2017-12-11T07:15:28.119Z
* feedFlag : string
* feedText : string
* id : 0
* opMapId : 0
* opNameabcn : string
* operMobile : 0
* updateTime : 2017-12-11T07:15:28.119Z
*/
private String feedFlag;
private String feedText;
private Long opMapId;
private String opNameabcn;
private Long operMobile;
public String getFeedFlag() {
return feedFlag;
}
public void setFeedFlag(String feedFlag) {
this.feedFlag = feedFlag;
}
public String getFeedText() {
return feedText;
}
public void setFeedText(String feedText) {
this.feedText = feedText;
}
public Long getOpMapId() {
return opMapId;
}
public void setOpMapId(Long opMapId) {
this.opMapId = opMapId;
}
public String getOpNameabcn() {
return opNameabcn;
}
public void setOpNameabcn(String opNameabcn) {
this.opNameabcn = opNameabcn;
}
public Long getOperMobile() {
return operMobile;
}
public void setOperMobile(Long operMobile) {
this.operMobile = operMobile;
}
}
package zzdpos.xingdata.com.tangkupos.model;
import com.xingdata.zzdhd.base.BaseBean;
/**
* Created by Administrator on 2017/11/24.
*/
public class Gbound implements BaseBean, Cloneable {
private Integer id;
private Long issuerMapId;
//积分获取类型 0:通用 1:品类定义积分 2:商品定义积分
private Byte vipGboundType;
//积分有效期 0:年底清除 默认 12
private Byte boundExp;
//商品品类 【索引】0:不分;其他品类就
private Integer spuCateId = -1;
//等级代码 0:不分级别
private Byte vipLevel;
//等级名称
private String vipLevelName;
//积分名称
private String truleName;
//开通启用状态 0:正常 1 暂停 默认 0
private Integer boundGetStatus;
//消费金额达到可送积分 单位:分 满多少金额送一积分;默认 1.00 元
private Long transAmt;
//获得积分个数 默认
private Integer transBoundNum;
private String spuCateName;
private String spuGrpName;
private String spuClaName;
private Long updateTime;
private Long createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Long getIssuerMapId() {
return issuerMapId;
}
public void setIssuerMapId(Long issuerMapId) {
this.issuerMapId = issuerMapId;
}
public Byte getVipGboundType() {
return vipGboundType;
}
public void setVipGboundType(Byte vipGboundType) {
this.vipGboundType = vipGboundType;
}
public Byte getBoundExp() {
return boundExp;
}
public void setBoundExp(Byte boundExp) {
this.boundExp = boundExp;
}
public Integer getSpuCateId() {
return spuCateId;
}
public void setSpuCateId(Integer spuCateId) {
this.spuCateId = spuCateId;
}
public String getSpuCateName() {
return spuCateName;
}
public void setSpuCateName(String spuCateName) {
this.spuCateName = spuCateName;
}
public Byte getVipLevel() {
return vipLevel;
}
public void setVipLevel(Byte vipLevel) {
this.vipLevel = vipLevel;
}
public String getVipLevelName() {
return vipLevelName;
}
public void setVipLevelName(String vipLevelName) {
this.vipLevelName = vipLevelName;
}
public String getTruleName() {
return truleName;
}
public void setTruleName(String truleName) {
this.truleName = truleName;
}
public Integer getBoundGetStatus() {
return boundGetStatus;
}
public String getSpuClaName() {
return spuClaName;
}
public void setSpuClaName(String spuClaName) {
this.spuClaName = spuClaName;
}
public String getSpuGrpName() {
return spuGrpName;
}
public void setSpuGrpName(String spuGrpName) {
this.spuGrpName = spuGrpName;
}
public void setBoundGetStatus(Integer boundGetStatus) {
this.boundGetStatus = boundGetStatus;
}
public Long getTransAmt() {
return transAmt;
}
public void setTransAmt(Long transAmt) {
this.transAmt = transAmt;
}
public Integer getTransBoundNum() {
return transBoundNum;
}
public void setTransBoundNum(Integer transBoundNum) {
this.transBoundNum = transBoundNum;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Gbound clone() {
Gbound gbound = null;
try {
gbound = (Gbound) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return gbound;
}
}
package zzdpos.xingdata.com.tangkupos.model;
public class Gift {
public Gift(Long msId, Sssku sssku, Long addAmt) {
this.sssku = sssku;
this.msId = msId;
this.addAmt = addAmt;
}
private Sssku sssku;
private Long msId;
private Long addAmt;
public Sssku getSssku() {
return sssku;
}
public void setSssku(Sssku sssku) {
sssku.setSkuRetailPrice1(addAmt);
this.sssku = sssku;
}
public Long getMsId() {
return msId;
}
public void setMsId(Long msId) {
this.msId = msId;
}
public Long getAddAmt() {
return addAmt;
}
public void setAddAmt(Long addAmt) {
this.addAmt = addAmt;
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
package zzdpos.xingdata.com.tangkupos.model;
import com.xingdata.zzdhd.base.BaseBean;
/**
* Created by Administrator on 2017/12/4.
*/
public class SsprParam implements BaseBean {
//@NotNull(message = "商品内容不能为空")
private Long skuIdRaw;
//@NotNull(message = "商品数量不能为空")
//@Min(value = 0,message = "商品数量不能为负")
private Integer ssprRate;
public Long getSkuIdRaw() {
return skuIdRaw;
}
public void setSkuIdRaw(Long skuIdRaw) {
this.skuIdRaw = skuIdRaw;
}
public Integer getSsprRate() {
return ssprRate;
}
public void setSsprRate(Integer ssprRate) {
this.ssprRate = ssprRate;
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment