Commit 85c7cde7 by Wyh

9.09 1、添加二維碼功能 2、餘額查詢接口修改 3、lalamove餘額刷新修改 4、lalamove交通工具名稱讀取後台數據

Signed-off-by: Wyh <1239658231>
parent b830b7e4
...@@ -17,6 +17,7 @@ package com.jess.arms.base; ...@@ -17,6 +17,7 @@ package com.jess.arms.base;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
...@@ -41,6 +42,7 @@ import butterknife.Unbinder; ...@@ -41,6 +42,7 @@ import butterknife.Unbinder;
import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.BehaviorSubject;
import io.reactivex.subjects.Subject; import io.reactivex.subjects.Subject;
import static com.jess.arms.utils.Preconditions.checkNotNull;
import static com.jess.arms.utils.ThirdViewUtil.convertAutoView; import static com.jess.arms.utils.ThirdViewUtil.convertAutoView;
/** /**
...@@ -145,4 +147,17 @@ public abstract class BaseActivity<P extends IPresenter> extends AppCompatActivi ...@@ -145,4 +147,17 @@ public abstract class BaseActivity<P extends IPresenter> extends AppCompatActivi
public boolean useFragment() { public boolean useFragment() {
return true; return true;
} }
public void showMessage(@NonNull String message) {
ArmsUtils.makeText(this, message);
}
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
public void killMyself() {
finish();
}
} }
...@@ -19,17 +19,18 @@ package com.jess.arms.base.delegate; ...@@ -19,17 +19,18 @@ package com.jess.arms.base.delegate;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.BaseFragment; import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.jess.arms.integration.ActivityLifecycle; import com.jess.arms.integration.ActivityLifecycle;
import com.jess.arms.integration.cache.Cache; import com.jess.arms.integration.cache.Cache;
import com.jess.arms.integration.cache.LruCache; import com.jess.arms.integration.cache.LruCache;
import org.simple.eventbus.EventBus;
import androidx.annotation.NonNull; import org.simple.eventbus.EventBus;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
/** /**
* ================================================ * ================================================
...@@ -101,4 +102,6 @@ public interface IActivity { ...@@ -101,4 +102,6 @@ public interface IActivity {
void initLayoutParams(); void initLayoutParams();
void initLayoutVisible(); void initLayoutVisible();
} }
package com.gingersoft.gsa.cloud.base.adapter;
import android.view.View;
import android.view.ViewGroup;
import androidx.viewpager.widget.PagerAdapter;
public abstract class BaseViewPageAdapter extends PagerAdapter {
public abstract int getGallerySize();
public abstract View getItemView(int position);
@Override
public int getCount() {
return getGallerySize();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = getItemView(position);
container.addView(view);
return view;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
}
...@@ -60,11 +60,15 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -60,11 +60,15 @@ public class GsaCloudApplication extends BaseApplication {
private static GsaCloudApplication mAppContext; private static GsaCloudApplication mAppContext;
private Activity mCurrentActivity; private Activity mCurrentActivity;
/**餐廳擴展信息*/ /**
* 餐廳擴展信息
*/
public static RestaurantExpandInfo restaurantExpandInfo; public static RestaurantExpandInfo restaurantExpandInfo;
public static FunctionStyleUtils androidSetting; public static FunctionStyleUtils androidSetting;
/**是否開啟皮膚切換*/ /**
* 是否開啟皮膚切換
*/
public static boolean openSkinMake = false; public static boolean openSkinMake = false;
/** /**
* 设置请求超时默认15秒钟 * 设置请求超时默认15秒钟
...@@ -183,14 +187,14 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -183,14 +187,14 @@ public class GsaCloudApplication extends BaseApplication {
//沽清控制請求地址 //沽清控制請求地址
RetrofitUrlManager.getInstance().putDomain("soldoutctrl", HttpsConstans._SERVER_ADDRESS); RetrofitUrlManager.getInstance().putDomain("soldoutctrl", HttpsConstans._SERVER_ADDRESS);
//版本更新請求地址 //版本更新請求地址
RetrofitUrlManager.getInstance().putDomain("update_version", HttpsConstans.ROOT_URL+"/member-web/api/"); RetrofitUrlManager.getInstance().putDomain("update_version", HttpsConstans.ROOT_URL + "/member-web/api/");
//友常本地請求地址 //友常本地請求地址
RetrofitUrlManager.getInstance().putDomain("yc_location", HttpsConstans.ROOT_SERVER_YOU_CHANG_HK); RetrofitUrlManager.getInstance().putDomain("yc_location", HttpsConstans.ROOT_SERVER_YOU_CHANG_HK);
//System請求地址 //System請求地址
RetrofitUrlManager.getInstance().putDomain("system_url", HttpsConstans.SYSTEM_URL); RetrofitUrlManager.getInstance().putDomain("system_url", HttpsConstans.SYSTEM_URL);
//後台遷移新地址 //後台遷移新地址
RetrofitUrlManager.getInstance().putDomain("new_base_url", HttpsConstans.ROOT_URL+"/ricepon-member/api/"); RetrofitUrlManager.getInstance().putDomain("new_base_url", HttpsConstans.ROOT_URL + "/ricepon-member/api/");
//ricepon_wechat請求地址 //ricepon_wechat請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_wechat", HttpsConstans.ROOT_URL + HttpsConstans.URL_RICEPON_WECHAT); RetrofitUrlManager.getInstance().putDomain("ricepon_wechat", HttpsConstans.ROOT_URL + HttpsConstans.URL_RICEPON_WECHAT);
//ricepon_order請求地址 //ricepon_order請求地址
...@@ -203,6 +207,9 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -203,6 +207,9 @@ public class GsaCloudApplication extends BaseApplication {
RetrofitUrlManager.getInstance().putDomain("ricepon_gsa", HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_GSA); RetrofitUrlManager.getInstance().putDomain("ricepon_gsa", HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_GSA);
//ricepon_activities請求地址 //ricepon_activities請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_activities", HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_ACTIVITIES); RetrofitUrlManager.getInstance().putDomain("ricepon_activities", HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_ACTIVITIES);
///ricepon-cloud-gsa/api/請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_cloud_gsa", HttpsConstans.ROOT_URL + HttpsConstans.CLOUD_GSA_API_PATH);
} }
private void initPrint() { private void initPrint() {
...@@ -410,7 +417,7 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -410,7 +417,7 @@ public class GsaCloudApplication extends BaseApplication {
return (String) SPUtils.get(context, UserConstans.gsPosShopId, "-1"); return (String) SPUtils.get(context, UserConstans.gsPosShopId, "-1");
} }
public static void logOut(){ public static void logOut() {
SPUtils.remove(getAppContext(), UserConstans.token); SPUtils.remove(getAppContext(), UserConstans.token);
SPUtils.remove(getAppContext(), UserConstans.memberId); SPUtils.remove(getAppContext(), UserConstans.memberId);
SPUtils.remove(getAppContext(), UserConstans.brandId); SPUtils.remove(getAppContext(), UserConstans.brandId);
......
package com.gingersoft.gsa.cloud.base.utils;
import android.content.Context;
import android.view.animation.Interpolator;
import android.widget.Scroller;
public class FixedSpeedScroller extends Scroller {
private int mDuration = 1000;
public FixedSpeedScroller(Context context) {
super(context);
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public FixedSpeedScroller(Context context, Interpolator interpolator, int period){
this(context,interpolator);
mDuration = period;
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
}
...@@ -71,7 +71,51 @@ public class QRCodeUtil { ...@@ -71,7 +71,51 @@ public class QRCodeUtil {
return false; return false;
} }
} }
/**
* 生成二维码Bitmap
*
* @param content 内容
* @param widthPix 图片宽度
* @param heightPix 图片高度
*/
public static Bitmap createQRImage(String content, int widthPix, int heightPix) {
try {
if (content == null || content.length() <= 0) {
return null;
}
//配置参数
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//容错级别
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//设置空白边距的宽度
// hints.put(EncodeHintType.MARGIN, 2); //default is 4
// 图像数据转换,使用了矩阵转换
BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints);
int[] pixels = new int[widthPix * heightPix];
// 下面这里按照二维码的算法,逐个生成二维码的图片,
// 两个for循环是图片横列扫描的结果
for (int y = 0; y < heightPix; y++) {
for (int x = 0; x < widthPix; x++) {
if (bitMatrix.get(x, y)) {
pixels[y * widthPix + x] = 0xff000000;
} else {
pixels[y * widthPix + x] = 0xffffffff;
}
}
}
// 生成二维码图片的格式,使用ARGB_8888
Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix);
//必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大!
return ImageUtils.compressPic(bitmap, widthPix, heightPix);
} catch (Exception e) {
return null;
}
}
/** /**
* 根据指定内容生成自定义宽高的二维码图片 * 根据指定内容生成自定义宽高的二维码图片
* *
......
package com.gingersoft.gsa.cloud.base.widget;
import android.content.Context;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.Interpolator;
import android.widget.LinearLayout;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.gingersoft.gsa.cloud.base.utils.FixedSpeedScroller;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import java.lang.reflect.Field;
import java.util.Timer;
import java.util.TimerTask;
public class GalleryViewPager extends LinearLayout {
private Context context;
private ViewPager viewPager;
public GalleryViewPager(Context context) {
super(context);
this.context = context;
init();
}
public GalleryViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
private void init() {
viewPager = new ViewPager(getContext());
viewPager.setPageMargin(QMUIDisplayHelper.dp2px(context, 15));
viewPager.setOffscreenPageLimit(3);
viewPager.setOnTouchListener((v, event) -> {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_UP:
recoverCycle();
break;
}
return false;
});
this.addView(viewPager);
}
public void setPageMargin(int px) {
viewPager.setPageMargin(px);
}
public void setOffscreenPageLimit(int count) {
viewPager.setOffscreenPageLimit(count);
}
public void setPageTransformer(boolean reverseDrawingOrder, ViewPager.PageTransformer transformer) {
viewPager.setPageTransformer(reverseDrawingOrder, transformer);
}
public void setViewPagerMargin(int px) {
MarginLayoutParams layoutParams = (MarginLayoutParams) viewPager.getLayoutParams();
layoutParams.setMargins(px, 0, px, 0);
viewPager.setLayoutParams(layoutParams);
}
public void setCurrentItem(int position) {
viewPager.setCurrentItem(position);
}
public void setAdapter(PagerAdapter adapter) {
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(Integer.MAX_VALUE / 2);
}
public ViewPager getViewPager() {
return viewPager;
}
private Timer mCycleTimer;
private TimerTask mCycleTask;
/**
*
*/
private Timer mResumingTimer;
private TimerTask mResumingTask;
/**
*
*/
private boolean mCycling;
private long mSliderDuration = 4000;
private boolean mAutoCycle;
private boolean mAutoRecover = true;
private android.os.Handler mh = new android.os.Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
moveNextPosition(true);
}
};
public void startAutoCycle() {
startAutoCycle(mSliderDuration, mSliderDuration, mAutoRecover);
}
/**
* start auto cycle.
*
* @param delay delay time
* @param duration animation duration time.
* @param autoRecover if recover after user touches the slider.
*/
public void startAutoCycle(long delay, long duration, boolean autoRecover) {
if (mCycleTimer != null) mCycleTimer.cancel();
if (mCycleTask != null) mCycleTask.cancel();
if (mResumingTask != null) mResumingTask.cancel();
if (mResumingTimer != null) mResumingTimer.cancel();
mSliderDuration = duration;
mCycleTimer = new Timer();
mAutoRecover = autoRecover;
mCycleTask = new TimerTask() {
@Override
public void run() {
mh.sendEmptyMessage(0);
}
};
mCycleTimer.schedule(mCycleTask, delay, mSliderDuration);
mCycling = true;
mAutoCycle = true;
}
/**
* pause auto cycle.
*/
public void pauseAutoCycle() {
if (mCycling) {
mCycleTimer.cancel();
mCycleTask.cancel();
mCycling = false;
} else {
if (mResumingTimer != null && mResumingTask != null) {
recoverCycle();
}
}
}
/**
* set the duration between two slider changes. the duration value must >= 500
*
* @param duration
*/
public void setDuration(long duration) {
if (duration >= 500) {
mSliderDuration = duration;
if (mAutoCycle && mCycling) {
startAutoCycle();
}
}
}
/**
* stop the auto circle
*/
public void stopAutoCycle() {
if (mCycleTask != null) {
mCycleTask.cancel();
}
if (mCycleTimer != null) {
mCycleTimer.cancel();
}
if (mResumingTimer != null) {
mResumingTimer.cancel();
}
if (mResumingTask != null) {
mResumingTask.cancel();
}
mAutoCycle = false;
mCycling = false;
}
/**
* when paused cycle, this method can weak it up.
*/
public void recoverCycle() {
if (!mAutoRecover || !mAutoCycle) {
return;
}
if (!mCycling) {
if (mResumingTask != null && mResumingTimer != null) {
mResumingTimer.cancel();
mResumingTask.cancel();
}
mResumingTimer = new Timer();
mResumingTask = new TimerTask() {
@Override
public void run() {
startAutoCycle();
}
};
mResumingTimer.schedule(mResumingTask, 6000);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
pauseAutoCycle();
break;
}
return false;
}
/**
* set the duration between two slider changes.
*
* @param period
* @param interpolator
*/
public void setSliderTransformDuration(int period, Interpolator interpolator) {
try {
Field mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
FixedSpeedScroller scroller = new FixedSpeedScroller(viewPager.getContext(), interpolator, period);
mScroller.set(viewPager, scroller);
} catch (Exception e) {
}
}
/**
* set current slider
*
* @param position
*/
public void setCurrentPosition(int position, boolean smooth) {
if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
if (position >= getRealAdapter().getCount()) {
throw new IllegalStateException("Item position is not exist");
}
int p = viewPager.getCurrentItem() % getRealAdapter().getCount();
int n = (position - p) + viewPager.getCurrentItem();
viewPager.setCurrentItem(n, smooth);
}
public void setCurrentPosition(int position) {
setCurrentPosition(position, true);
}
/**
* move to prev slide.
*/
public void movePrevPosition(boolean smooth) {
if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1, smooth);
}
public void movePrevPosition() {
movePrevPosition(true);
}
/**
* move to next slide.
*/
public void moveNextPosition(boolean smooth) {
if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, smooth);
}
public void moveNextPosition() {
moveNextPosition(true);
}
private PagerAdapter getRealAdapter() {
PagerAdapter adapter = viewPager.getAdapter();
return adapter;
}
}
...@@ -38,7 +38,7 @@ public class HttpsConstans { ...@@ -38,7 +38,7 @@ public class HttpsConstans {
private static String HTTP_ADDRESS_URL_SZ = "http://gingersoft.tpddns.cn:58201";//深圳測試 private static String HTTP_ADDRESS_URL_SZ = "http://gingersoft.tpddns.cn:58201";//深圳測試
private static String HTTP_ADDRESS_URL_HK = "http://a.ricepon.com:58201";//香港測試 private static String HTTP_ADDRESS_URL_HK = "http://a.ricepon.com:58201";//香港測試
private static String PATH = "/ricepon-cloud-gsa/api/";//路徑 public static String CLOUD_GSA_API_PATH = "/ricepon-cloud-gsa/api/";//路徑
public static String ROOT_SERVER_YOU_CHANG_HK = "http://192.168.1.142:9012/api/"; //友常本地 public static String ROOT_SERVER_YOU_CHANG_HK = "http://192.168.1.142:9012/api/"; //友常本地
public static String ROOT_SERVER_ZHI_WANG_HK = "http://192.168.1.169:9012/api/"; //世維本地 public static String ROOT_SERVER_ZHI_WANG_HK = "http://192.168.1.169:9012/api/"; //世維本地
...@@ -94,7 +94,7 @@ public class HttpsConstans { ...@@ -94,7 +94,7 @@ public class HttpsConstans {
public static String ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL;// = isFormal ? HTTP_ADDRESS_URL_FORMAL : REPORT_TEST_ADDRESS; public static String ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL;// = isFormal ? HTTP_ADDRESS_URL_FORMAL : REPORT_TEST_ADDRESS;
//默認url,配置這個值修改環境 //默認url,配置這個值修改環境
public static String ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL + PATH; public static String ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL + CLOUD_GSA_API_PATH;
public static String ROOT_SERVER = HTTP_ADDRESS_URL_FORMAL; public static String ROOT_SERVER = HTTP_ADDRESS_URL_FORMAL;
...@@ -121,7 +121,7 @@ public class HttpsConstans { ...@@ -121,7 +121,7 @@ public class HttpsConstans {
default: default:
_SERVER_ADDRESS = HTTP_ADDRESS_URL_FORMAL + "/member-web/api/"; _SERVER_ADDRESS = HTTP_ADDRESS_URL_FORMAL + "/member-web/api/";
ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL; ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL;
ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL + PATH; ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL + CLOUD_GSA_API_PATH;
ROOT_URL = ROOT_FORMAL_URL; ROOT_URL = ROOT_FORMAL_URL;
REPORT_SERVER_ADDRESS = REPORT_FORMAL_ADDRESS + REPORT_PATH; REPORT_SERVER_ADDRESS = REPORT_FORMAL_ADDRESS + REPORT_PATH;
WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS
...@@ -131,7 +131,7 @@ public class HttpsConstans { ...@@ -131,7 +131,7 @@ public class HttpsConstans {
case 1: case 1:
_SERVER_ADDRESS = "http://a.ricepon.com:61177" + "/member-web/api/"; _SERVER_ADDRESS = "http://a.ricepon.com:61177" + "/member-web/api/";
ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS; ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS;
ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_HK + PATH; ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_HK + CLOUD_GSA_API_PATH;
ROOT_URL = ROOT_HK_TEST_URL; ROOT_URL = ROOT_HK_TEST_URL;
REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH; REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH;
WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS
......
...@@ -97,6 +97,7 @@ class OrderDetails { ...@@ -97,6 +97,7 @@ class OrderDetails {
var addPoints: Double = 0.toDouble()//本次加多少積分 var addPoints: Double = 0.toDouble()//本次加多少積分
var oldPoints: Double = 0.toDouble()//之前有多少積分 var oldPoints: Double = 0.toDouble()//之前有多少積分
var nowPoints: Double = 0.toDouble()//現在有多少積分 var nowPoints: Double = 0.toDouble()//現在有多少積分
var deliveryAmount: Double = 0.toDouble()//當前運輸工具金額
var curStat: Int = 0//訂單已創建 1 var curStat: Int = 0//訂單已創建 1
// * * Order Assigned To Delivery Man - 配送員已接單 2 // * * Order Assigned To Delivery Man - 配送員已接單 2
// * * Delivery Man Reached Pickup Point Nearby - 配送員已到達店鋪附近 3 // * * Delivery Man Reached Pickup Point Nearby - 配送員已到達店鋪附近 3
......
package com.gingersoft.gsa.cloud.ui.view;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import androidx.viewpager.widget.ViewPager;
import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.adapter.BaseViewPageAdapter;
import com.gingersoft.gsa.cloud.ui.view.transformer.ScaleGallerTransformer;
import java.util.List;
/**
* Created by Administrator on 2018/11/28.
* banner的控件处理
*/
public class BannerViewPager extends RelativeLayout implements ViewPager.OnPageChangeListener {
private View mLayout;//布局
private Activity mContext;//上下文
private ViewPager mViewPager;//viewpager
private BaseViewPageAdapter mPagerAdapter;//adapter
private LinearLayout mLineIndicator;//指示器集合容器
private ImageView[] mImageView;//小圆点imageview对象
private List<String> mList;//url数组
private int mMaxNumber;//最大banner数
private int currentIndex = 0;//当前实际page
private int startCurrentIndex = 2000;//当前page
private long secondTime = 0, firstTime = 0;
private boolean isSlide = false;
//private Timer mTimer=null;//定时器
//private MyTimerTask mTimerTask=null;
private Handler mHandler = null;
private AutoRollRunnable mAutoRollRunnable = null;
private int mRollTime = 5000;
// private int resId_piont_press = R.mipmap.ic_banner_point_press;
// private int resId_piont = R.mipmap.ic_banner_point;
// private boolean isPoint = false;//开启指示器
public interface OnClickBannerListener {
void onBannerClick(int position);
}
private OnClickBannerListener mBannerListener;
public BannerViewPager addBannerListener(OnClickBannerListener listener) {
mBannerListener = listener;
return this;
}
//ui更新
// Handler mHandler=mHandler= new Handler(){
// public void handleMessage(Message msg) {
// int index = mViewPager.getCurrentItem()+1;//下一个页
// mViewPager.setCurrentItem(index);//设置此次要显示的pager
// currentIndex=index%mList.size();
// setImageBackground(currentIndex);
// }
// };
public BannerViewPager(Context context) {
super(context);
}
public BannerViewPager(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public BannerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = (Activity) context;
}
/**
* 初始化viewpager
*
* @param list url集合
* @param isGallery 是否使用3D画廊效果
*/
public BannerViewPager initBanner(List<String> list, boolean isGallery, List<View> views) {
checkException(list);
if (mList == null) {
mList = list;
if (list.size() > 9) {
mMaxNumber = 9;
} else {
mMaxNumber = list.size();
}
}
Log.i("test", "----------------------size=" + mList.size());
//引入布局
mLayout = LayoutInflater.from(mContext).inflate(R.layout.banner_view_layout, null);
mViewPager = mLayout.findViewById(R.id.viewPager);//关闭
mLineIndicator = mLayout.findViewById(R.id.lineIndicator);
//初始化位置
currentIndex = startCurrentIndex % mMaxNumber;
mPagerAdapter = new BaseViewPageAdapter() {
@Override
public int getGallerySize() {
return views.size();
}
@Override
public View getItemView(int position) {
return views.get(position);
}
};
// mPagerAdapter.setOnClickImagesListener(position -> {
// if (mBannerListener != null) {
// mBannerListener.onBannerClick(position);
// }
// });
mViewPager.setAdapter(mPagerAdapter);
if (isGallery) {
mViewPager.setPageTransformer(true, new ScaleGallerTransformer());
}
mViewPager.setCurrentItem(startCurrentIndex);
mViewPager.setOffscreenPageLimit(2);//设置预加载的数量,这里设置了2,会预加载中心item左边两个Item和右边两个Item
mViewPager.addOnPageChangeListener(this);
return this;
}
public ViewPager getmViewPager() {
return mViewPager;
}
/**
* 初始化viewpager
*
* @param list url集合
* @param isGallery 是否使用3D画廊效果
* @param alpha 滑动透明度变化
*/
// public BannerViewPager initBanner(List<String> list, boolean isGallery, float alpha) {
// checkException(list);
// if (mList == null) {
// mList = list;
// if (list.size() > 9) {
// this.mMaxNumber = 9;
// } else {
// this.mMaxNumber = list.size();
// }
// }
// Log.i("test", "----------------------size=" + mList.size());
// //引入布局
// mLayout = LayoutInflater.from(mContext).inflate(R.layout.banner_view_layout, null);
// mViewPager = mLayout.findViewById(R.id.viewPager);//关闭
// mLineIndicator = mLayout.findViewById(R.id.lineIndicator);
// //初始化位置
// currentIndex = startCurrentIndex % mMaxNumber;
//
// mPagerAdapter = new BannerPagerAdapter(mList, mContext);
// mPagerAdapter.setOnClickImagesListener(position -> {
// if (mBannerListener != null) {
// mBannerListener.onBannerClick(position);
// }
// });
//
// mViewPager.setAdapter(mPagerAdapter);
// if (isGallery) {
// mViewPager.setPageTransformer(true, new ZoomPageTransformer(alpha));
// }
//
// mViewPager.setCurrentItem(startCurrentIndex);
// mViewPager.setOffscreenPageLimit(2);//设置预加载的数量,这里设置了2,会预加载中心item左边两个Item和右边两个Item
// mViewPager.addOnPageChangeListener(this);
// return this;
// }
/**
* 添加默认图片,当加载失败后显示
*
* @param resId_img
* @return
*/
// public BannerViewPager addDefaultImg(int resId_img) {
// mPagerAdapter.setDefaultImg(resId_img);
// return this;
// }
/**
* 添加圆角
*
* @param corners
* @return
*/
// public BannerViewPager addRoundCorners(int corners) {
// mPagerAdapter.setmRoundCorners(corners);
// return this;
// }
/**
* @param columnMargin 两个Page之间的距离
* @param rowMargin page的外边距
* 注意当添加了3D画廊效果时,columnMargin尽量设小。应该本是已经进行了x、y的缩放
*/
public BannerViewPager addPageMargin(int columnMargin, int rowMargin) {
mViewPager.setPageMargin(dip2px(columnMargin));
RelativeLayout.LayoutParams layout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
layout.setMargins(dip2px(rowMargin), 0, dip2px(rowMargin), 0);
mViewPager.setLayoutParams(layout);
return this;
}
/**
* 添加小圆点
*
* @param distance 间距
*/
// public BannerViewPager addPointMargin(int distance) {
// isPoint = true;
// mImageView = new ImageView[mMaxNumber];
// for (int i = 0; i < mMaxNumber; i++) {
// ImageView imageView = new ImageView(mContext);
//
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
// params.setMargins(dip2px(distance) / 2, 0, dip2px(distance) / 2, 0);
// imageView.setLayoutParams(params);
// if (i == currentIndex) {
// imageView.setImageResource(resId_piont_press);
// } else {
// imageView.setImageResource(resId_piont);
// }
// mImageView[i] = imageView;
// mLineIndicator.addView(imageView);
// }
//
// return this;
// }
/**
* 添加小圆点
*
* @param distance 间距
* @param piont_press 替换选中图标
* @param piont 替换未选中图片
*/
// public BannerViewPager addPoint(int distance, int piont_press, int piont) {
// isPoint = true;
// resId_piont_press = piont_press;
// resId_piont = piont;
// mImageView = new ImageView[mMaxNumber];
// for (int i = 0; i < mMaxNumber; i++) {
// ImageView imageView = new ImageView(mContext);
//
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
// params.setMargins(dip2px(distance) / 2, 0, dip2px(distance) / 2, 0);
// imageView.setLayoutParams(params);
// if (i == currentIndex) {
// imageView.setImageResource(resId_piont_press);
// } else {
// imageView.setImageResource(resId_piont);
// }
// mImageView[i] = imageView;
// mLineIndicator.addView(imageView);
// }
//
// return this;
// }
/**
* 添加小圆点底部间距
*
* @param paddBottom
*/
public BannerViewPager addPointBottom(int paddBottom) {
mLineIndicator.setPadding(0, 0, 0, dip2px(paddBottom));
return this;
}
/**
* 配置完成,将布局添加到父容器
*/
public BannerViewPager finishConfig() {
this.addView(mLayout);
return this;
}
//开始轮播
public BannerViewPager addStartTimer(int time) {
mRollTime = time;
if (mHandler == null) {
mHandler = new Handler();
}
if (mAutoRollRunnable == null) {
mAutoRollRunnable = new AutoRollRunnable();
}
mAutoRollRunnable.start();
return this;
}
// 停止轮播
public void stopTimer() {
if (mAutoRollRunnable != null) {
mAutoRollRunnable.stop();
}
}
private class AutoRollRunnable implements Runnable {
//是否在轮播的标志
boolean isRunning = false;
@SuppressLint("ClickableViewAccessibility")
@Override
public void run() {
if (isRunning && !isSlide) {
int index = mViewPager.getCurrentItem() + 1;//下一个页
mViewPager.setCurrentItem(index);//设置此次要显示的pager
currentIndex = index % mMaxNumber;
// setImageBackground(currentIndex);
mHandler.postDelayed(this, 1000 * mRollTime);
}
if (isSlide) {
mHandler.postDelayed(this, 1000 * mRollTime);
isSlide = false;
}
//轮播图触摸监听,解决滑动计时无法停止的问题
/*
* viewPager监听触摸事件,因为我们要保证用户在手动滑动viewPager后,系统重新计时,viewPage按一定时间间隔循环展示,
* 当手指按上屏幕或者是手指出现滑动动作,子线程都必须撤销(计时也就是消失)
* 当手机松开之后系统重新计时,子线程与UI线程绑定,进行计时操作
*/
mViewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
mHandler.removeCallbacks(mAutoRollRunnable);
break;
case MotionEvent.ACTION_UP:
isSlide = true;
mHandler.post(mAutoRollRunnable);
break;
}
return false;
}
});
}
public void start() {
if (!isRunning) {
isRunning = true;
mHandler.removeCallbacks(this);
mHandler.postDelayed(this, 1000 * mRollTime);
}
}
public void stop() {
if (isRunning) {
mHandler.removeCallbacks(this);
isRunning = false;
}
}
}
// /**
// * 开启定时器
// * @param time
// */
// public BannerViewPager addStartTimer(int time) {
// if (mTimer == null) {
// mTimer = new Timer();
// }
// if(mTimerTask==null){
// mTimerTask=new MyTimerTask();
// }
// mTimer.schedule(mTimerTask, 3000, 1000*time);
// return this;
// }
// /**
// * 停止定时器
// */
// public void stopTimer(){
// if(mTimer!=null){
// mTimer.cancel();
// mTimer = null;
// }
// if(mTimerTask!=null){
// mTimerTask.cancel();
// mTimerTask = null;
// }
// }
// class MyTimerTask extends TimerTask {
// @Override
// public void run() {
// mHandler.sendEmptyMessage(1001);//在此线程中,不能操作ui主线程
// }
// }
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public int dip2px(float dpValue) {
final float scale = mContext.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
//---------------viewpager滑动事件-----------------
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
/**
* 滑动时同步改变底部小圆点
*
* @param position
*/
@Override
public void onPageSelected(int position) {
// currentIndex = position % mMaxNumber;
// setImageBackground(currentIndex);
}
/**
* 改变指示器
*
* @param selectItemsIndex
*/
// private void setImageBackground(int selectItemsIndex) {
// if (isPoint) {
// for (int i = 0; i < mImageView.length; i++) {
// if (i == selectItemsIndex) {
// mImageView[i].setImageResource(resId_piont_press);
//
// } else {
// mImageView[i].setImageResource(resId_piont);
// }
// }
// }
// }
/**
* 检查异常
*
* @param list
*/
private void checkException(List<String> list) {
if (list == null) {
throw new NullPointerException("The array is null at initBanner function");
}
if (list.size() == 0) {
throw new ArithmeticException("Your array size is 0");
}
}
}
package com.gingersoft.gsa.cloud.ui.view.transformer;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import java.security.MessageDigest;
/**
* Created by Administrator on 2018/11/28.
* 自定义圆角
*/
public class CornerTransform extends BitmapTransformation {
private static float radius = 0f;
public CornerTransform(Context context) {
this(context, 4);
}
public CornerTransform(Context context, int dp) {
// super(context);
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCrop(pool, toTransform);
}
private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
return result;
}
public String getId() {
return getClass().getName() + Math.round(radius);
}
@Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
}
}
package com.gingersoft.gsa.cloud.ui.view.transformer;
import android.view.View;
import androidx.viewpager.widget.ViewPager;
/**
* Created by hucanhui on 2017/3/31.
*/
public class ScaleGallerTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@Override
public void transformPage(View view, float position) {
if (position >= -1 || position <= 1) {
final float height = view.getHeight();
final float width = view.getWidth();
final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
final float vertMargin = height * (1 - scaleFactor) / 2;
final float horzMargin = width * (1 - scaleFactor) / 2;
view.setPivotY(0.5f * height);
view.setPivotX(0.5f * width);
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin / 2);
} else {
view.setTranslationX(-horzMargin + vertMargin / 2);
}
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
}
}
}
package com.gingersoft.gsa.cloud.ui.view.transformer;
import android.view.View;
import androidx.viewpager.widget.ViewPager;
/**
* Created by Administrator on 2018/11/28.
* 3D画廊效果其实就是ViewPager的item切换时,进行缩放的动画效果
*
*/
public class ZoomPageTransformer implements ViewPager.PageTransformer {
private static final float MAX_SCALE = 1.0f;//0缩放
private static final float MIN_SCALE = 0.85f;//0.85缩放
private float MIN_ALPHA = 1.0f;//最小透明度
public ZoomPageTransformer() {
}
public ZoomPageTransformer(float MIN_ALPHA) {
this.MIN_ALPHA = MIN_ALPHA;
}
@Override
public void transformPage(View view, float position) {
//setScaleY只支持api11以上
/**
* (-oo,-1) 相对于左边第一页,其左边的所有页面 **
* x、y拉伸为MIN_SCALE、透明度MIN_ALPHA
*/
if (position < -1) {
view.setScaleX(MIN_SCALE);
view.setScaleY(MIN_SCALE);
view.setAlpha(MIN_ALPHA);
}
/**
* [-1, 1 )当前页的左右第一页
*/
else if (position < 1) {
float scaleFactor = MIN_SCALE + (1 - Math.abs(position)) * (MAX_SCALE - MIN_SCALE);
//[0, 1 ) 相对于当前选中页,其右边第一页 **
if (position > 0) {
view.setTranslationX(-scaleFactor);
}
// [-1, 0 ) 相对于当前选中页,其左边的第一页**
else if (position < 0) {
view.setTranslationX(scaleFactor);
}
view.setScaleY(scaleFactor);
view.setScaleX(scaleFactor);
// float alpha = 1f - Math.abs(position) * (1 - );
float alpha = MIN_ALPHA + (1 - MIN_ALPHA) * (1 - Math.abs(position));
view.setAlpha(alpha);
}
/**
* [1,+oo) 相对于右边第一页,其右边的所有页面
* x、y拉伸为MIN_SCALE、透明度MIN_ALPHA
*/
else { // (1,+Infinity]
view.setScaleX(MIN_SCALE);
view.setScaleY(MIN_SCALE);
view.setAlpha(MIN_ALPHA);
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="@dimen/dp_0"
android:bottomRightRadius="@dimen/dp_0"
android:topLeftRadius="@dimen/dp_8"
android:topRightRadius="@dimen/dp_8" />
<solid android:color="@color/theme_color" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false">
<!--viewpager-->
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:layout_marginLeft="@dimen/dp_60"
android:layout_marginRight="@dimen/dp_60"/>
<!--指示器-->
<LinearLayout
android:id="@+id/lineIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
android:paddingBottom="7dp"
android:gravity="center">
<!--<ImageView-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:src="@mipmap/ic_banner_point_press"-->
<!--android:layout_marginLeft="8dp"-->
<!--android:layout_marginRight="8dp"/>-->
</LinearLayout>
</RelativeLayout>
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<dimen name="head_size">16sp</dimen> <dimen name="head_size">16sp</dimen>
<!-- 全局Button --> <!-- 全局Button -->
<dimen name="button_height">45dp</dimen> <dimen name="button_height">35dp</dimen>
<dimen name="button_margin">20dp</dimen> <dimen name="button_margin">20dp</dimen>
<dimen name="button_margin_half">20dp</dimen> <dimen name="button_margin_half">20dp</dimen>
<dimen name="button_padding">14dp</dimen> <dimen name="button_padding">14dp</dimen>
......
...@@ -39,7 +39,7 @@ public interface ColdChainService { ...@@ -39,7 +39,7 @@ public interface ColdChainService {
Observable<String> getHistoryOrderList(@Body RequestBody requestBody); Observable<String> getHistoryOrderList(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_activities"}) @Headers({"Domain-Name: ricepon_activities"})
@GET("feign/balance/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("balance/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BalanceBean> getBalance(@Query("brandId") String brandId); Observable<BalanceBean> getBalance(@Query("brandId") String brandId);
} }
...@@ -8,7 +8,7 @@ ext { ...@@ -8,7 +8,7 @@ ext {
//正式版: 1.0.3 3 //正式版: 1.0.3 3
//內部測試版:1.2.0 20 //內部測試版:1.2.0 20
versionCode : 7, versionCode : 7,
versionName : "1.0.7" versionName : "1.0.71"
] ]
version = [ version = [
......
package com.gingersoft.gsa.delivery_pick_mode.data.model.bean package com.gingersoft.gsa.delivery_pick_mode.data.model.bean
data class BalanceBean( data class BalanceBean(
val balance: Double, var balance: Double,
val bond: Double, val bond: Double,
val brandId: Int, val brandId: Int,
val createTime: Long, val createTime: Long,
......
...@@ -18,6 +18,7 @@ data class TransportAmountBean( ...@@ -18,6 +18,7 @@ data class TransportAmountBean(
val type: Int, val type: Int,
val updateName: String, val updateName: String,
val updateTime: Long, val updateTime: Long,
val typeName:String,
val updateUid: Int val updateUid: Int
) )
} }
\ No newline at end of file
...@@ -74,7 +74,7 @@ interface WeatherService { ...@@ -74,7 +74,7 @@ interface WeatherService {
@POST("logisticsExpensesAdditional/payment") @POST("logisticsExpensesAdditional/payment")
fun additionalServiceCharge(@Body requestBody: RequestBody): Call<AddServiceChargeBean> fun additionalServiceCharge(@Body requestBody: RequestBody): Call<AddServiceChargeBean>
@GET("feign/balance/get") @GET("balance/get")
fun getBanlance(@Query("brandId") brandId: String): Call<BalanceBean> fun getBanlance(@Query("brandId") brandId: String): Call<BalanceBean>
@GET("shipanyTransportAmount/get") @GET("shipanyTransportAmount/get")
......
...@@ -9,7 +9,6 @@ import android.graphics.drawable.GradientDrawable ...@@ -9,7 +9,6 @@ import android.graphics.drawable.GradientDrawable
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.IBinder import android.os.IBinder
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.TextView import android.widget.TextView
...@@ -20,8 +19,6 @@ import androidx.lifecycle.Observer ...@@ -20,8 +19,6 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
import com.gingersoft.gsa.cloud.base.utils.encryption.Base64
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
import com.gingersoft.gsa.cloud.base.widget.DialogUtils import com.gingersoft.gsa.cloud.base.widget.DialogUtils
import com.gingersoft.gsa.cloud.constans.AppConstans import com.gingersoft.gsa.cloud.constans.AppConstans
...@@ -43,8 +40,6 @@ import com.qmuiteam.qmui.util.QMUIDisplayHelper ...@@ -43,8 +40,6 @@ import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.popup.QMUIPopup import com.qmuiteam.qmui.widget.popup.QMUIPopup
import com.qmuiteam.qmui.widget.popup.QMUIPopups import com.qmuiteam.qmui.widget.popup.QMUIPopups
import kotlinx.android.synthetic.main.activity_other_order.* import kotlinx.android.synthetic.main.activity_other_order.*
import org.json.JSONObject
import java.net.URLEncoder
class DeliveryOrderMainActivity : BaseActivity() { class DeliveryOrderMainActivity : BaseActivity() {
...@@ -122,7 +117,6 @@ class DeliveryOrderMainActivity : BaseActivity() { ...@@ -122,7 +117,6 @@ class DeliveryOrderMainActivity : BaseActivity() {
getBanlance(GsaCloudApplication.getBrandId(this@DeliveryOrderMainActivity)) getBanlance(GsaCloudApplication.getBrandId(this@DeliveryOrderMainActivity))
balanceBean.observe(this@DeliveryOrderMainActivity, Observer { balanceBean.observe(this@DeliveryOrderMainActivity, Observer {
Log.e("eee", "刷新餘額")
it?.let { it?.let {
tv_balance.text = "餘額:${it.balance}" + "(保證金: ${it.bond} )" tv_balance.text = "餘額:${it.balance}" + "(保證金: ${it.bond} )"
if (it.balance <= it.threshold) { if (it.balance <= it.threshold) {
...@@ -502,4 +496,17 @@ class DeliveryOrderMainActivity : BaseActivity() { ...@@ -502,4 +496,17 @@ class DeliveryOrderMainActivity : BaseActivity() {
finish() finish()
} }
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == 1001) {
val doubleExtra = data?.getDoubleExtra("deliveryAmount", 0.0)
pageViewModel.balanceBean.value?.let {
if (doubleExtra != null) {
it.balance -= doubleExtra
pageViewModel.balanceBean.postValue(it)
}
}
}
}
} }
\ No newline at end of file
...@@ -336,7 +336,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -336,7 +336,7 @@ class OrderDetailsActivity : BaseActivity() {
showIsUpdateTransportation(it, orderDetails, true) showIsUpdateTransportation(it, orderDetails, true)
} }
} }
else ->ToastUtils.show(this@OrderDetailsActivity, "未知的物流類型") else -> ToastUtils.show(this@OrderDetailsActivity, "未知的物流類型")
} }
} }
BtnBuilder.PrintBtn -> { BtnBuilder.PrintBtn -> {
...@@ -493,22 +493,17 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -493,22 +493,17 @@ class OrderDetailsActivity : BaseActivity() {
val data = ArrayList<String>() val data = ArrayList<String>()
for (value in transportData) { for (value in transportData) {
if (value.deliveryAmount <= 0) { if (value.deliveryAmount <= 0) {
data.add(when (value.type) { data.add(value.typeName)
1 -> "摩托車"
2 -> "麵包車"
3 -> "卡車"
else -> ""
})
} else { } else {
data.add(when (value.type) { data.add(value.typeName + "($" + value.deliveryAmount + ")")
1 -> "摩托車($" + value.deliveryAmount + ")"
2 -> "麵包車($" + value.deliveryAmount + ")"
3 -> "卡車($" + value.deliveryAmount + ")"
else -> "($" + value.deliveryAmount + ")"
})
} }
} }
val adapter = DeliveryAdapter(data) val adapter = DeliveryAdapter(data)
adapter.setOnItemClickListener { _, _, position ->
if(data[position] == "Van仔"){
ToastUtils.show(this@OrderDetailsActivity, "Van仔不支持上門服務,需客戶自行落樓取餐")
}
}
showSelectDialog("選擇運輸工具", 2, adapter as RecyclerView.Adapter<RecyclerView.ViewHolder>, { showSelectDialog("選擇運輸工具", 2, adapter as RecyclerView.Adapter<RecyclerView.ViewHolder>, {
if (adapter.selectIndex == -1) { if (adapter.selectIndex == -1) {
ToastUtils.show(this@OrderDetailsActivity, "請選擇交通工具") ToastUtils.show(this@OrderDetailsActivity, "請選擇交通工具")
...@@ -530,12 +525,17 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -530,12 +525,17 @@ class OrderDetailsActivity : BaseActivity() {
cancelDialogForLoading() cancelDialogForLoading()
when (msg.code) { when (msg.code) {
Transportation.toString() -> {//修改運輸工具 Transportation.toString() -> {//修改運輸工具
val intent = Intent()
intent.putExtra("deliveryAmount", orderDetails.deliveryAmount)
setResult(1001, intent)
finish() finish()
ToastUtils.show(this@OrderDetailsActivity, if (TextUtil.isNotEmptyOrNullOrUndefined(msg.errorMsg)) { ToastUtils.show(this@OrderDetailsActivity, if (TextUtil.isNotEmptyOrNullOrUndefined(msg.errorMsg)) {
msg.errorMsg msg.errorMsg
} else { } else {
"修改成功" "修改成功"
}) })
} }
DeliveryPrint.toString() -> {//訂單已確認,是否打印成功 DeliveryPrint.toString() -> {//訂單已確認,是否打印成功
finish() finish()
......
...@@ -55,14 +55,14 @@ class OtherOrdersAdapter(var context: Context, var outTime: Int) : Adapter<Other ...@@ -55,14 +55,14 @@ class OtherOrdersAdapter(var context: Context, var outTime: Int) : Adapter<Other
10 -> "已指派另一位配送員" 10 -> "已指派另一位配送員"
else -> "" else -> ""
} }
// if (data.curStat < 2) { if (data.curStat < 2) {
// //是否超時 //是否超時
// if (outTime == 0) { if (outTime == 0) {
// holder.binding.isTimeOut = false holder.binding.isTimeOut = false
// } else { } else {
// holder.binding.isTimeOut = data.timeSecond < outTime holder.binding.isTimeOut = data.timeSecond < outTime
// } }
// } }
} else { } else {
holder.binding.deliveryState = "" holder.binding.deliveryState = ""
holder.binding.isTimeOut = false holder.binding.isTimeOut = false
......
...@@ -54,15 +54,15 @@ class PlaceholderFragment : BaseFragment(R.layout.fragment_other_order) { ...@@ -54,15 +54,15 @@ class PlaceholderFragment : BaseFragment(R.layout.fragment_other_order) {
intent.putExtra("orderPayType", data.orderPayType) intent.putExtra("orderPayType", data.orderPayType)
intent.putExtra("isRead", data.isRead) intent.putExtra("isRead", data.isRead)
//已指派物流 並且 狀態為未接單 才判斷是否超時 //已指派物流 並且 狀態為未接單 才判斷是否超時
// if (data.isDelete == 0 && data.curStat < 2) { if (data.isDelete == 0 && data.curStat < 2) {
// if (pageViewModel.timeOut == 0) { if (pageViewModel.timeOut == 0) {
// //為0時沒配置,不顯示追加服務費按鈕 //為0時沒配置,不顯示追加服務費按鈕
// intent.putExtra("isTimeOut", false) intent.putExtra("isTimeOut", false)
// } else { } else {
// intent.putExtra("isTimeOut", data.timeSecond < pageViewModel.timeOut * 60 * 1000) intent.putExtra("isTimeOut", data.timeSecond < pageViewModel.timeOut * 60 * 1000)
// } }
// } }
startActivity(intent) startActivityForResult(intent, 1001)
} }
rv_other_order.adapter = adapter rv_other_order.adapter = adapter
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<activity android:name=".mvp.ui.activity.SettlementReportActivity" /> <activity android:name=".mvp.ui.activity.SettlementReportActivity" />
<activity android:name=".mvp.ui.activity.LookLogActivity" /> <activity android:name=".mvp.ui.activity.LookLogActivity" />
<activity android:name=".mvp.ui.activity.LanguageActivity" /> <activity android:name=".mvp.ui.activity.LanguageActivity" />
<activity android:name=".mvp.ui.activity.RestaurantQrCodeActivity"/>
<!-- arms配置 --> <!-- arms配置 -->
<meta-data <meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration" android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
......
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.main"> package="com.gingersoft.gsa.cloud.main">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application <application
android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication" android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true" android:allowBackup="true"
...@@ -10,7 +17,8 @@ ...@@ -10,7 +17,8 @@
android:networkSecurityConfig="@xml/network_android" android:networkSecurityConfig="@xml/network_android"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.LanguageActivity"/> <activity android:name=".mvp.ui.activity.RestaurantQrCodeActivity"/>
<activity android:name=".mvp.ui.activity.LanguageActivity" />
<activity android:name=".mvp.ui.activity.ReportActivity" /> <activity android:name=".mvp.ui.activity.ReportActivity" />
<activity android:name=".mvp.ui.activity.MainActivity" /> <activity android:name=".mvp.ui.activity.MainActivity" />
<activity android:name=".mvp.ui.activity.SettlementActivity" /> <activity android:name=".mvp.ui.activity.SettlementActivity" />
...@@ -38,12 +46,5 @@ ...@@ -38,12 +46,5 @@
android:name="design_height_in_dp" android:name="design_height_in_dp"
android:value="640" /> android:value="640" />
</application> </application>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest> </manifest>
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.di.component;
import com.gingersoft.gsa.cloud.main.di.module.ErCodeModule;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.RestaurantQrCodeActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Component;
@ActivityScope
@Component(modules = ErCodeModule.class, dependencies = AppComponent.class)
public interface ErCodeComponent {
void inject(RestaurantQrCodeActivity activity);
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.di.module;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.main.mvp.contract.QrCodeContract;
import com.gingersoft.gsa.cloud.main.mvp.model.QrCodeModel;
@Module
public class ErCodeModule {
private QrCodeContract.View view;
/**
* 构建ErCodeModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public ErCodeModule(QrCodeContract.View view) {
this.view = view;
}
@ActivityScope
@Provides
QrCodeContract.View provideErCodeView() {
return this.view;
}
@ActivityScope
@Provides
QrCodeContract.Model provideErCodeModel(QrCodeModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.RestaurantQrBean;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import io.reactivex.Observable;
public interface QrCodeContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadQrCode(RestaurantQrBean.DataBean dataBean);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<RestaurantQrBean> getRestaurantQrCode(String restaurantId);
}
}
package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.contract.QrCodeContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.RestaurantQrBean;
import com.gingersoft.gsa.cloud.main.mvp.model.service.MainService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
@ActivityScope
public class QrCodeModel extends BaseModel implements QrCodeContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public QrCodeModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<RestaurantQrBean> getRestaurantQrCode(String restaurantId) {
return mRepositoryManager.obtainRetrofitService(MainService.class).getRestaurantQrCode(restaurantId);
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
public class RestaurantQrBean {
/**
* success : true
* sysTime : 1599553668427
* data : {"ziquService":1,"ziquServiceUrl":"http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_","canpaiService":1,"canpaiServiceUrl":"http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_","menuService":1,"menuServiceUrl":"http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_","freezingService":1,"freezingServiceUrl":"http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_"}
*/
private boolean success;
private long sysTime;
private DataBean data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* ziquService : 1
* ziquServiceUrl : http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_
* canpaiService : 1
* canpaiServiceUrl : http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_
* menuService : 1
* menuServiceUrl : http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_
* freezingService : 1
* freezingServiceUrl : http://192.168.1.74:9012/ricepon-web/app/index.html?arg=eyJtZW51dHlwZSI6Mywic2hvcGlkIjoyMzMsInR5cGUiOjd9_ricepon_
*/
private int ziquService;
private String ziquServiceUrl;
private int canpaiService;
private String canpaiServiceUrl;
private int menuService;
private String menuServiceUrl;
private int freezingService;
private String freezingServiceUrl;
public int getZiquService() {
return ziquService;
}
public void setZiquService(int ziquService) {
this.ziquService = ziquService;
}
public String getZiquServiceUrl() {
return ziquServiceUrl;
}
public void setZiquServiceUrl(String ziquServiceUrl) {
this.ziquServiceUrl = ziquServiceUrl;
}
public int getCanpaiService() {
return canpaiService;
}
public void setCanpaiService(int canpaiService) {
this.canpaiService = canpaiService;
}
public String getCanpaiServiceUrl() {
return canpaiServiceUrl;
}
public void setCanpaiServiceUrl(String canpaiServiceUrl) {
this.canpaiServiceUrl = canpaiServiceUrl;
}
public int getMenuService() {
return menuService;
}
public void setMenuService(int menuService) {
this.menuService = menuService;
}
public String getMenuServiceUrl() {
return menuServiceUrl;
}
public void setMenuServiceUrl(String menuServiceUrl) {
this.menuServiceUrl = menuServiceUrl;
}
public int getFreezingService() {
return freezingService;
}
public void setFreezingService(int freezingService) {
this.freezingService = freezingService;
}
public String getFreezingServiceUrl() {
return freezingServiceUrl;
}
public void setFreezingServiceUrl(String freezingServiceUrl) {
this.freezingServiceUrl = freezingServiceUrl;
}
}
}
...@@ -32,7 +32,7 @@ public interface MainReportService { ...@@ -32,7 +32,7 @@ public interface MainReportService {
//支付分析報表 //支付分析報表
@Headers({"Domain-Name: gsa_report"}) @Headers({"Domain-Name: gsa_report"})
@POST("wx/findPayMode" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("report/findPayMode" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<PaymentMethodBean> getPaymentInfo(@Body RequestBody requestBody); Observable<PaymentMethodBean> getPaymentInfo(@Body RequestBody requestBody);
//銷售分析報表 //銷售分析報表
...@@ -42,7 +42,7 @@ public interface MainReportService { ...@@ -42,7 +42,7 @@ public interface MainReportService {
//銷售分析報表 //銷售分析報表
@Headers({"Domain-Name: wechat_report"}) @Headers({"Domain-Name: wechat_report"})
@POST("wx/findFoodTop" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("report/findFoodTop" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SalesFoodsBean> getSalesReportInfo(@Body RequestBody requestBody); Observable<SalesFoodsBean> getSalesReportInfo(@Body RequestBody requestBody);
//外送訂單折線圖 //外送訂單折線圖
...@@ -55,7 +55,6 @@ public interface MainReportService { ...@@ -55,7 +55,6 @@ public interface MainReportService {
@GET("report/delivered/getTakeawayReport" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("report/delivered/getTakeawayReport" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<DeliveryPersonnelReportBean> getDeliveryPersonnelReport(@QueryMap Map<String, Object> map); Observable<DeliveryPersonnelReportBean> getDeliveryPersonnelReport(@QueryMap Map<String, Object> map);
//營業信息 //營業信息
@Headers({"Domain-Name: gsa_report"}) @Headers({"Domain-Name: gsa_report"})
@GET("restaurantOperation/business" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("restaurantOperation/business" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
......
package com.gingersoft.gsa.cloud.main.mvp.model.service; package com.gingersoft.gsa.cloud.main.mvp.model.service;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.CheckVersionRequest; import com.gingersoft.gsa.cloud.main.mvp.model.bean.CheckVersionRequest;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.RestaurantQrBean;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
...@@ -16,7 +17,6 @@ import retrofit2.http.Query; ...@@ -16,7 +17,6 @@ import retrofit2.http.Query;
*/ */
public interface MainService { public interface MainService {
// @Headers({"Domain-Name: system_url"})/**/ // @Headers({"Domain-Name: system_url"})/**/
@POST("user/logout" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("user/logout" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<Object> loginOut(@Body RequestBody requestBody); Observable<Object> loginOut(@Body RequestBody requestBody);
...@@ -29,4 +29,7 @@ public interface MainService { ...@@ -29,4 +29,7 @@ public interface MainService {
@POST("restaurant/clearHeartbeat" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("restaurant/clearHeartbeat" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<Object> clearHeartbeat(@Body RequestBody requestBody); Observable<Object> clearHeartbeat(@Body RequestBody requestBody);
@GET("restaurant/getUrlInfo" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<RestaurantQrBean> getRestaurantQrCode(@Query("restaurantId") String restaurantId);
} }
package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.main.mvp.contract.QrCodeContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.RestaurantQrBean;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
@ActivityScope
public class QrCodePresenter extends BasePresenter<QrCodeContract.Model, QrCodeContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public QrCodePresenter(QrCodeContract.Model model, QrCodeContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void getRestaurantQrCode() {
mModel.getRestaurantQrCode(GsaCloudApplication.getRestaurantId(GsaCloudApplication.getAppContext()) + "")
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<RestaurantQrBean>(mErrorHandler) {
@Override
public void onNext(@NonNull RestaurantQrBean info) {
if(info != null && info.isSuccess()){
mRootView.loadQrCode(info.getData());
}
}
});
}
}
...@@ -291,7 +291,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl ...@@ -291,7 +291,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
// functions.add(new Function((long) 149, 152, 5, "操作記錄", R.drawable.ic_operation_record_close, 1)); // functions.add(new Function((long) 149, 152, 5, "操作記錄", R.drawable.ic_operation_record_close, 1));
// } else { // } else {
List<Function> orderFuncations = FunctionManager.getDefault().getFunctionByResModule(GsaCloudApplication.getAppContext(), ComponentMain.main.class, ComponentMain.main.order, "order"); List<Function> orderFuncations = FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.order, "order");
if (orderFuncations.size() > 0) { if (orderFuncations.size() > 0) {
functions.addAll(orderFuncations); functions.addAll(orderFuncations);
sl_order.setVisibility(View.VISIBLE); sl_order.setVisibility(View.VISIBLE);
...@@ -308,7 +308,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl ...@@ -308,7 +308,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
ll_management.setVisibility(View.GONE); ll_management.setVisibility(View.GONE);
} }
List<Function> employeeFuncations = FunctionManager.getDefault().getFunctionByResModule(GsaCloudApplication.getAppContext(), ComponentMain.main.class, ComponentMain.main.employee, "employee"); List<Function> employeeFuncations = FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.employee, "employee");
if (employeeFuncations.size() > 0) { if (employeeFuncations.size() > 0) {
functions.addAll(employeeFuncations); functions.addAll(employeeFuncations);
ll_staff_management.setVisibility(View.VISIBLE); ll_staff_management.setVisibility(View.VISIBLE);
...@@ -400,16 +400,13 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl ...@@ -400,16 +400,13 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
.setActionName("showTableManageActivity") .setActionName("showTableManageActivity")
.build() .build()
.call(); .call();
} else if (name.equals("冷鏈接單")) { } else if(name.equals("冷鏈接單")){
CC.obtainBuilder("Component.ColdChain")
.setActionName("Component.ColdChain")
.build()
.call();
} else if (name.equals("二維碼")) {
CC.obtainBuilder("Component.ColdChain") CC.obtainBuilder("Component.ColdChain")
.setActionName("Component.ColdChain") .setActionName("Component.ColdChain")
.build() .build()
.call(); .call();
} else if(name.equals("二維碼")){
launchActivity(new Intent(mContext, RestaurantQrCodeActivity.class));
} }
} }
...@@ -597,7 +594,8 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl ...@@ -597,7 +594,8 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
showMessage("再按一次退出應用"); showMessage("再按一次退出應用");
mExitTime = System.currentTimeMillis(); mExitTime = System.currentTimeMillis();
} else { } else {
ArmsUtils.exitApp(); finish();
// System.exit(0);
} }
} }
return true; return true;
......
package com.gingersoft.gsa.cloud.main.mvp.ui.activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.base.utils.view.QRCodeUtil;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerErCodeComponent;
import com.gingersoft.gsa.cloud.main.di.module.ErCodeModule;
import com.gingersoft.gsa.cloud.main.mvp.contract.QrCodeContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.RestaurantQrBean;
import com.gingersoft.gsa.cloud.main.mvp.presenter.QrCodePresenter;
import com.gingersoft.gsa.cloud.ui.view.BannerViewPager;
import com.google.android.material.tabs.TabLayout;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.widget.QMUITopBar;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
public class RestaurantQrCodeActivity extends BaseActivity<QrCodePresenter> implements QrCodeContract.View {
@BindView(R2.id.topbar_qr_code)
QMUITopBar topBar;
@BindView(R2.id.table_layout_qr_code)
TabLayout tabLayout;
@BindView(R2.id.vp_qr_code)
BannerViewPager viewPager;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerErCodeComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.erCodeModule(new ErCodeModule(this))
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.activity_er_code; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.getRestaurantQrCode();
}
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
topBar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color));
topBar.addLeftBackImageButton().setOnClickListener(v -> killMyself());
topBar.setTitle("二維碼");
}
@Override
public void initLanguage() {
}
@Override
public void initLayoutParams() {
}
@Override
public void initLayoutVisible() {
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
private void initTab() {
viewPager.initBanner(tabs, true, views)//开启3D画廊效果
.addPageMargin(0, 0)//参数1page之间的间距,参数2中间item距离边界的间距
.finishConfig();//这句必须加
tabLayout.setupWithViewPager(viewPager.getmViewPager());//TabLayout的标签从Adapter中获取
//用来循环适配器中的视图总数
for (int i = 0; i < tabs.size(); i++) {
//获取每一个tab对象
TabLayout.Tab tabAt = tabLayout.getTabAt(i);
if (tabAt != null) {
//将每一个条目设置我们自定义的视图
tabAt.setCustomView(R.layout.layout_table_item);
//默认选中第一个
if (i == 0) {
// 设置第一个tab的TextView是被选择的样式
setSelectTab(tabAt, true);
}
//通过tab对象找到自定义视图的ID
TextView textView = tabAt.getCustomView().findViewById(R.id.tv_tab);
textView.setText(tabs.get(i));//设置tab上的文字
}
}
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
setSelectTab(tab, true);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
setSelectTab(tab, false);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void setSelectTab(TabLayout.Tab tabAt, boolean isSelected) {
if (tabAt.getCustomView() != null) {
TextView tab = tabAt.getCustomView().findViewById(R.id.tv_tab);//第一个tab被选中
tab.setSelected(isSelected);
//设置选中标签的文字大小
tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, isSelected ? getResources().getDimensionPixelSize(R.dimen.sp_16) : getResources().getDimensionPixelSize(R.dimen.sp_14));
tab.getPaint().setFakeBoldText(isSelected);
}
}
private List<String> tabs;
private List<View> views;
@Override
public void loadQrCode(RestaurantQrBean.DataBean dataBean) {
tabs = new ArrayList<>();
views = new ArrayList<>();
if (dataBean.getZiquService() == 1) {
tabs.add("自取");
views.add(getQrCodeView("自取", dataBean.getZiquServiceUrl()));
}
if (dataBean.getCanpaiService() == 1) {
tabs.add("餐牌");
views.add(getQrCodeView("餐牌", dataBean.getCanpaiServiceUrl()));
}
if (dataBean.getMenuService() == 1) {
tabs.add("外賣");
views.add(getQrCodeView("外賣", dataBean.getMenuServiceUrl()));
}
if (dataBean.getFreezingService() == 1) {
tabs.add("冷鏈");
views.add(getQrCodeView("冷鏈", dataBean.getFreezingServiceUrl()));
}
initTab();
}
private View getQrCodeView(String title, String url) {
View view = View.inflate(mContext, R.layout.layout_qrcode_item, null);
TextView tvTitle = view.findViewById(R.id.tv_qrcode_item_title);
ImageView qrCode = view.findViewById(R.id.iv_qr_code);
TextView tvUrl = view.findViewById(R.id.tv_qrcode_item_url);
Button copyBtn = view.findViewById(R.id.btn_copy_url);
tvTitle.setText(title + "二維碼");
int width = ArmsUtils.getScreenWidth(mContext) / 2;
qrCode.setImageBitmap(QRCodeUtil.createQRImage(url, width, width));
tvUrl.setText(url);
copyBtn.setOnClickListener(v -> {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData label = ClipData.newPlainText("Label", url);
cm.setPrimaryClip(label);
ToastUtils.show(mContext, "已複製");
});
return view;
}
}
...@@ -5,30 +5,28 @@ import android.os.Bundle; ...@@ -5,30 +5,28 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils; import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2; import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerSettlementComponent; import com.gingersoft.gsa.cloud.main.di.component.DaggerSettlementComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.main.mvp.presenter.SettlementPresenter;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.SettlementPresenter;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton; import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.layout.QMUIButton;
import com.qmuiteam.qmui.widget.QMUITopBar; import com.qmuiteam.qmui.widget.QMUITopBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/** /**
* ================================================ * ================================================
...@@ -133,22 +131,6 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem ...@@ -133,22 +131,6 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem
} }
@Override @Override
public void showMessage(@NonNull String message) {
ArmsUtils.makeText(this, message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
@Override
public void setLastTime(String date) { public void setLastTime(String date) {
tv_settlement_time.setText(date); tv_settlement_time.setText(date);
} }
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/topbar_qr_code"
android:layout_width="match_parent"
app:qmui_topbar_title_color="@color/theme_white_color"
android:layout_height="@dimen/head_height" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/table_layout_qr_code"
android:layout_width="match_parent"
android:layout_height="@dimen/head_height"
android:background="@color/white"
app:tabPaddingEnd="-1dp"
app:tabPaddingStart="-1dp"
app:tabSelectedTextColor="@color/theme_color"
app:tabTextColor="@color/color_ccc"/>
<com.gingersoft.gsa.cloud.ui.view.BannerViewPager
android:id="@+id/vp_qr_code"
android:background="@color/color_ccc"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:orientation="vertical">
<com.lihang.ShadowLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
app:hl_cornerRadius="@dimen/dp_8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="@dimen/head_height"
android:background="@drawable/shape_top_theme_color">
<TextView
android:id="@+id/tv_qrcode_item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/dp_10"
android:text="餐廳二維碼"
android:textColor="@color/white"
android:textSize="@dimen/dp_16" />
</FrameLayout>
<ImageView
android:id="@+id/iv_qr_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_20" />
<TextView
android:id="@+id/tv_qrcode_item_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginRight="@dimen/dp_20"
android:textColor="@color/theme_color"
android:textSize="@dimen/dp_16"
tools:text="鏈接" />
<Button
android:id="@+id/btn_copy_url"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_20"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginRight="@dimen/dp_20"
android:background="@drawable/shape_app_btn"
android:text="複製鏈接"
android:textColor="@color/white"
android:textSize="@dimen/dp_16" />
</LinearLayout>
</com.lihang.ShadowLayout>
</LinearLayout>
\ No newline at end of file
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