Commit 6d6f9c24 by 宁斌

1、新增版本更新2、餐檯拖动位置 3、转檯后服务费 折扣 账单小数更新处理

parent 827ae9eb
......@@ -593,6 +593,23 @@ public class DeviceUtils {
}
/**
* 启动到应用商店app详情界面
*
* @param appPkg 目标App的包名
* @param marketPkg 应用商店包名 ,如果为""则由系统弹出应用商店列表供用户选择,否则调转到目标市场的应用详情界面,某些应用商店可能会失败
*/
public static void launchAppDetail(Context mContext, String appPkg, String marketPkg) throws Exception {
if (TextUtils.isEmpty(appPkg)) return;
Uri uri = Uri.parse("market://details?id=" + appPkg);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (!TextUtils.isEmpty(marketPkg)) {
intent.setPackage(marketPkg);
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
/**
* 拨打电话
*
* @param context
......@@ -778,7 +795,7 @@ public class DeviceUtils {
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享:" + title);
intent.putExtra(Intent.EXTRA_TEXT, title + " " + url);
context.startActivity(Intent.createChooser(intent, "选择分享"));
context.startActivity(Intent.createChooser(intent, "選擇分享"));
}
/**
......
......@@ -160,7 +160,7 @@ public class GsaCloudApplication extends BaseApplication {
//沽清控制請求地址
RetrofitUrlManager.getInstance().putDomain("soldoutctrl", HttpsConstans._SERVER_ADDRESS);
//版本更新請求地址
RetrofitUrlManager.getInstance().putDomain("update_version", HttpsConstans.ROOT_URL);
RetrofitUrlManager.getInstance().putDomain("update_version", HttpsConstans.ROOT_URL+"/member-web/api/");
//友常本地請求地址
RetrofitUrlManager.getInstance().putDomain("yc_location", HttpsConstans.ROOT_SERVER_YOU_CHANG_HK);
}
......
......@@ -158,6 +158,7 @@ public class MoneyUtil {
return (b1.multiply(b2)).setScale(1, ROUND_HALF_UP).doubleValue();
}
/**
* 计算总价
* 計算和
......@@ -212,6 +213,19 @@ public class MoneyUtil {
// }
/**
* BigDecimal 相乘
*
* @param v1
* @param v2
* @return double
*/
public static Double multiply(double v1, double v2) {
BigDecimal n1 = new BigDecimal(Double.toString(v1));
BigDecimal n2 = new BigDecimal(Double.toString(v2));
return n1.multiply(n2).doubleValue();
}
/**
* 計算除 保留兩位小數,四捨五入
*
* @param v1
......
......@@ -43,7 +43,7 @@ public class HttpsConstans {
private static String 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_SHI_WEI_HK = "http://192.168.1.154:9012/api/"; //世維本地
public static String ROOT_SERVER_SHI_WEI_HK = "http://192.168.1.169:9012/api/"; //世維本地
public static String ROOT_SERVER_SHI_SHU_HK = "http://192.168.1.154:9012/api/"; //石书本地
//------------------------------------------外賣接單---------------------------------------------------------------------------
......
......@@ -166,7 +166,7 @@ public class Discount {
discountPrice = discount.getAmount();
}else {
//百分比折扣
discountPrice = sourcePrice * discount.getDiscount_value();
discountPrice = MoneyUtil.multiply(sourcePrice, discount.getDiscount_value());
}
if(sourcePrice < discountPrice){
//折扣金額不能超出總額
......@@ -175,7 +175,7 @@ public class Discount {
// else {
// discountPrice = sourcePrice - discountPrice;
// }
return -MoneyUtil.get_ItemDecimals_money(discountPrice);
return - MoneyUtil.get_ItemDecimals_money(discountPrice);
}
}
package com.gingersoft.gsa.cloud.ui.recylcler.event;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import androidx.core.view.GestureDetectorCompat;
import androidx.recyclerview.widget.RecyclerView;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-06-10
* 修订历史:2020-06-10
* 描述:
*/
public abstract class OnRecyclerItemClickListener implements RecyclerView.OnItemTouchListener{
private GestureDetectorCompat mGestureDetectorCompat;
private RecyclerView mRecyclerView;
public OnRecyclerItemClickListener(RecyclerView recyclerView) {
mRecyclerView = recyclerView;
mGestureDetectorCompat = new GestureDetectorCompat(mRecyclerView.getContext(), new ItemTouchHelperGestureListener());
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
mGestureDetectorCompat.onTouchEvent(e);
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
mGestureDetectorCompat.onTouchEvent(e);
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
public abstract void onItemClick(RecyclerView.ViewHolder viewHolder);
public abstract void onLongClick(RecyclerView.ViewHolder viewHolder);
private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onSingleTapUp(MotionEvent e) {
View childViewUnder = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childViewUnder != null) {
RecyclerView.ViewHolder childViewHolder = mRecyclerView.getChildViewHolder(childViewUnder);
onItemClick(childViewHolder);
}
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View childViewUnder = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childViewUnder != null) {
RecyclerView.ViewHolder childViewHolder = mRecyclerView.getChildViewHolder(childViewUnder);
onLongClick(childViewHolder);
}
}
}
}
package com.gingersoft.gsa.cloud.ui.recylcler.event;
import android.graphics.Color;
import com.jess.arms.base.DefaultAdapter;
import com.qmuiteam.qmui.widget.section.QMUIDefaultStickySectionAdapter;
import com.qmuiteam.qmui.widget.section.QMUISection;
import com.qmuiteam.qmui.widget.section.QMUIStickySectionAdapter;
import java.util.Collections;
import java.util.List;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-06-10
* 修订历史:2020-06-10
* 描述:
*/
public class RecyItemTouchHelperCallback<H extends QMUISection.Model<H>, T extends QMUISection.Model<T>> extends ItemTouchHelper.Callback {
RecyclerView.Adapter mAdapter;
boolean isSwipeEnable;
boolean isFirstDragUnable;
public RecyItemTouchHelperCallback(RecyclerView.Adapter adapter) {
mAdapter = adapter;
isSwipeEnable = true;
isFirstDragUnable = false;
}
public RecyItemTouchHelperCallback(RecyclerView.Adapter adapter, boolean isSwipeEnable, boolean isFirstDragUnable) {
mAdapter = adapter;
this.isSwipeEnable = isSwipeEnable;
this.isFirstDragUnable = isFirstDragUnable;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
int swipeFlags = 0;
return makeMovementFlags(dragFlags, swipeFlags);
} else {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
return makeMovementFlags(dragFlags, swipeFlags);
}
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
if (isFirstDragUnable && toPosition == 0) {
return false;
}
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
if (mAdapter instanceof QMUIStickySectionAdapter) {
QMUIStickySectionAdapter.ViewHolder holder = (QMUIStickySectionAdapter.ViewHolder) viewHolder;
int pos = holder.isForStickyHeader ? i : holder.getAdapterPosition();
int ItemIndex = ((QMUIStickySectionAdapter) mAdapter).getItemIndex(pos);
QMUISection<H, T> qmuiSections = ((QMUIStickySectionAdapter) mAdapter).getSection(ItemIndex);
List<?> list = qmuiSections.getItemList();
Collections.swap(list, ItemIndex, ItemIndex + 1);
} else {
Collections.swap(((DefaultAdapter) mAdapter).getInfos(), i, i + 1);
}
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
if (mAdapter instanceof QMUIStickySectionAdapter) {
QMUIStickySectionAdapter.ViewHolder holder = (QMUIStickySectionAdapter.ViewHolder) viewHolder;
int pos = holder.isForStickyHeader ? i : holder.getAdapterPosition();
int ItemIndex = ((QMUIStickySectionAdapter) mAdapter).getItemIndex(pos);
QMUISection<H, T> qmuiSections = ((QMUIStickySectionAdapter) mAdapter).getSection(ItemIndex);
List<?> list = qmuiSections.getItemList();
Collections.swap(list, ItemIndex, ItemIndex - 1);
} else {
Collections.swap(((DefaultAdapter) mAdapter).getInfos(), i, i - 1);
}
}
}
mAdapter.notifyItemMoved(fromPosition, toPosition);
mAdapter.notifyItemChanged(toPosition);
mAdapter.notifyItemChanged(fromPosition);
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int adapterPosition = viewHolder.getAdapterPosition();
mAdapter.notifyItemRemoved(adapterPosition);
if (mAdapter instanceof QMUIDefaultStickySectionAdapter) {
((QMUIDefaultStickySectionAdapter) mAdapter).getCurrentData().remove(adapterPosition);
} else {
((DefaultAdapter) mAdapter).getInfos().remove(adapterPosition);
}
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
viewHolder.itemView.setBackgroundColor(Color.LTGRAY);
}
super.onSelectedChanged(viewHolder, actionState);
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
viewHolder.itemView.setBackgroundColor(Color.WHITE);
}
@Override
public boolean isLongPressDragEnabled() {
return !isFirstDragUnable;
}
@Override
public boolean isItemViewSwipeEnabled() {
return isSwipeEnable;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.ui.utils.webviewUtils;
import android.content.Context;
import android.webkit.JavascriptInterface;
import java.util.ArrayList;
public class WebImageListener {
private Context mContext;
private Class mImageActivity;
private ArrayList<String> mImages = new ArrayList<>();
public WebImageListener(Context context, Class imageActivity) {
mContext = context;
mImageActivity = imageActivity;
}
public WebImageListener(Context context) {
mContext = context;
}
public void collectImage(String url) {
if (!url.startsWith("http")
|| url.startsWith("https://mp.weixin.qq.com/")
|| url.startsWith("https://res.wx.qq.com/")
) {
return;
}
if (!mImages.contains(url))
mImages.add(url);
}
@JavascriptInterface
public void onImageClicked(String url) {
// Logger.e("clicked:" + url);
// if (mImageActivity != null) {
// Intent intent = new Intent(mContext, mImageActivity);
// intent.putExtra(ImageActivity.CURRENT_IMAGE_URL, url);
// intent.putExtra(ImageActivity.ALL_IMAGE_URLS, mImages);
// mContext.startActivity(intent);
// }
// ARouter.getInstance().build(PUBLIC_PHOTO)
// .withString(EXTRA_PHOTO_URL, url)
// .navigation();
}
}
package com.gingersoft.gsa.cloud.ui.utils.webviewUtils;
import android.text.TextUtils;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class WebViewUtils {
public static void initWebView(WebView webView) {
WebSettings settings = webView.getSettings();
// 1、设置WebView是否支持使用屏幕控件或手势进行缩放,默认是true,支持缩放。
settings.setSupportZoom(false);
// 2、设置WebView是否通过手势触发播放媒体,默认是true,需要手势触发。
settings.setMediaPlaybackRequiresUserGesture(true);
// 3、设置WebView是否使用其内置的变焦机制,该机制集合屏幕缩放控件使用,默认是false,不使用内置变焦机制。
settings.setBuiltInZoomControls(false);
// 4、设置WebView使用内置缩放机制时,是否展现在屏幕缩放控件上,默认true,展现在控件上。
settings.setDisplayZoomControls(false);
// 5、设置在WebView内部是否允许访问文件,默认允许访问。
settings.setAllowFileAccess(true);
// 6、是否允许在WebView中访问内容URL(Content Url),默认允许。内容Url访问允许WebView从安装在系统中的内容提供者载入内容。
settings.setAllowContentAccess(true);
// 7、设置WebView是否使用预览模式加载界面。
settings.setLoadWithOverviewMode(true);
// 8、设置WebView是否保存表单数据,默认true,保存数据。
settings.setSaveFormData(true);
// 9、设置WebView中加载页面字体变焦百分比,默认100,整型数。
settings.setTextZoom(100);
// 10、设置WebView访问第三方Cookies策略,参考CookieManager提供的方法:setShouldAcceptThirdPartyCookies。
// settings.setAcceptThirdPartyCookies(false);
// 11、设置WebView是否使用viewport,当该属性被设置为false时,加载页面的宽度总是适应WebView控件宽度;
// 当被设置为true,当前页面包含viewport属性标签,在标签中指定宽度值生效,如果页面不包含viewport标签,
// 无法提供一个宽度值,这个时候该方法将被使用。
settings.setUseWideViewPort(false);
// 12、设置WebView是否支持多屏窗口,参考WebChromeClient#onCreateWindow,默认false,不支持。
settings.setSupportMultipleWindows(false);
// 13、设置WebView底层的布局算法,参考LayoutAlgorithm#NARROW_COLUMNS,将会重新生成WebView布局。
// settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
// 14、设置WebView标准字体库字体,默认字体“sans-serif”。
settings.setStandardFontFamily("sans-serif");
// 15、设置WebView固定的字体库字体,默认“monospace”。
settings.setFixedFontFamily("monospace");
// 16、设置WebView Sans SeriFontFamily字体库字体,默认“sans-serif”。
settings.setSansSerifFontFamily("sans-serif");
// 17、设置WebView seri FontFamily字体库字体,默认“sans-serif”。
settings.setSerifFontFamily("sans-serif");
// 18、设置WebView字体库字体,默认“cursive”。
settings.setCursiveFontFamily("cursive");
// 19、设置WebView字体库字体,默认“fantasy”。
settings.setFantasyFontFamily("fantasy");
// 20、设置WebView字体最小值,默认值8,取值1到72。
settings.setMinimumFontSize(8);
// 21、设置WebView逻辑上最小字体值,默认值8,取值1到72。
settings.setMinimumLogicalFontSize(8);
// 22、设置WebView默认值字体值,默认值16,取值1到72。
settings.setDefaultFontSize(16);
// 23、设置WebView默认固定的字体值,默认值16,取值1到72。
settings.setDefaultFixedFontSize(16);
// 24、设置WebView是否加载图片资源,默认true,自动加载图片。
settings.setLoadsImagesAutomatically(true);
// 25、设置WebView是否以http、https方式访问从网络加载图片资源,默认false。
settings.setBlockNetworkImage(false);
// 26、设置WebView是否从网络加载资源,Application需要设置访问网络权限,否则报异常。
settings.setBlockNetworkLoads(false);
// 27、设置WebView是否允许执行JavaScript脚本,默认false,不允许。
settings.setJavaScriptEnabled(true);
// 28、设置WebView运行中的脚本可以是否访问任何原始起点内容,默认true。
settings.setAllowUniversalAccessFromFileURLs(true);
// 29、设置WebView运行中的一个文件方案被允许访问其他文件方案中的内容,默认值true。
settings.setAllowFileAccessFromFileURLs(true);
// 30、设置WebView保存地理位置信息数据路径,指定的路径Application具备写入权限。
// settings.setGeolocationDatabasePath(String path);
// 31、设置Application缓存API是否开启,默认false,设置有效的缓存路径参考setAppCachePath(String path)方法。
settings.setAppCacheEnabled(true);
// 32、设置当前Application缓存文件路径,Application Cache API能够开启需要指定Application具备写入权限的路径。
// settings.setAppCachePath(String appCachePath);
// 33、设置是否开启数据库存储API权限,默认false,未开启,可以参考setDatabasePath(String path)。
settings.setDatabaseEnabled(true);
// 34、设置是否开启DOM存储API权限,默认false,未开启,设置为true,WebView能够使用DOM storage API。
settings.setDomStorageEnabled(true);
// 35、设置是否开启定位功能,默认true,开启定位。
settings.setGeolocationEnabled(true);
// 36、设置脚本是否允许自动打开弹窗,默认false,不允许。
settings.setJavaScriptCanOpenWindowsAutomatically(true);
// 37、设置WebView加载页面文本内容的编码,默认“UTF-8”。
settings.setDefaultTextEncodingName("UTF-8");
// 38、设置WebView代理字符串,如果String为null或为空,将使用系统默认值。
// settings.setUserAgentString(String ua);
// 39、设置WebView是否需要设置一个节点获取焦点当被回调的时候,默认true。
settings.setNeedInitialFocus(true);
// 40、重写缓存被使用到的方法,该方法基于Navigation Type,加载普通的页面,将会检查缓存同时重新验证是否需要加载,
// 如果不需要重新加载,将直接从缓存读取数据,
// 允许客户端通过指定LOAD_DEFAULT、LOAD_CACHE_ELSE_NETWORK、LOAD_NO_CACHE、LOAD_CACHE_ONLY其中之一重写该行为方法,
// 默认值LOAD_DEFAULT。
// settings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 41、设置当一个安全站点企图加载来自一个不安全站点资源时WebView的行为,
// android.os.Build.VERSION_CODES.KITKAT默认为MIXED_CONTENT_ALWAYS_ALLOW,
// android.os.Build.VERSION_CODES#LOLLIPOP默认为MIXED_CONTENT_NEVER_ALLOW,
// 取值其中之一:MIXED_CONTENT_NEVER_ALLOW、MIXED_CONTENT_ALWAYS_ALLOW、MIXED_CONTENT_COMPATIBILITY_MODE。
// settings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
public static void addImageClickListener(WebView webView) {
webView.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName(\"img\"); " +
"for(var i=0;i<objs.length;i++) " +
"{" +
" window.listener.collectImage(objs[i].src); " +
" objs[i].onclick=function() " +
" { " +
" window.listener.onImageClicked(this.src); " +
" } " +
"}" +
"})()");
}
public static String convertTopicContent(String content) {
if (TextUtils.isEmpty(content) || TextUtils.isEmpty(content.trim())) return "";
// 过滤掉 img标签的width,height属性
content = content.replaceAll("(<img[^>]*?)\\s+width\\s*=\\s*\\S+", "$1");
content = content.replaceAll("(<img[^>]*?)\\s+height\\s*=\\s*\\S+", "$1");
// 添加点击查看大图
content = content.replaceAll("<img[^>]+src=\"([^\"\'\\s]+)\"[^>c]*>(?!((?!</?a\\b).)*</a>)",
"<img src=\"$1\" onClick=\"javascript:listener.onImageClicked('$1')\"/>");
// 过滤table的内部属性
content = content.replaceAll("(<table[^>]*?)\\s+border\\s*=\\s*\\S+", "$1");
content = content.replaceAll("(<table[^>]*?)\\s+cellspacing\\s*=\\s*\\S+", "$1");
content = content.replaceAll("(<table[^>]*?)\\s+cellpadding\\s*=\\s*\\S+", "$1");
return String.format("<!DOCTYPE html>"
+ "<html><head>"
+ "<link rel=\"stylesheet\" type=\"text/css\" href=\"file:///android_asset/html/css/markdown.css\">"
+ "<link rel=\"stylesheet\" href=\"file:///android_asset/html/css/monokai.css\"/>"
+ "<script type=\"text/javascript\" src=\"file:///android_asset/html/js/highlight.pack.js\"></script>"
+ "<script>hljs.initHighlightingOnLoad();</script>"
+ "</head>"
+ "<body>"
+ "<div class=\"markdown\">"
+ "%s"
+ "</div>"
+ "</body></html>", content);
}
}
package com.gingersoft.gsa.cloud.ui.view;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.LinearInterpolator;
import com.gingersoft.gsa.cloud.base.R;
import com.hyweb.n5.lib.util.DeviceUtil;
import com.jess.arms.utils.ArmsUtils;
import com.uuzuche.lib_zxing.DisplayUtil;
public class WebViewProgressBar extends View {
private Context mContext;
private int mMax;//进度条最大的进度
private int mDefaultHeight;//高度
private int mCurProgress;//当前的进度
private int mWidth;
private int mHeight;
private Paint mPaint;
private int mColor;
public WebViewProgressBar(Context context) {
this(context, null);
}
public WebViewProgressBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public WebViewProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
initAttr(attrs);
}
private void initAttr(AttributeSet attrs) {
TypedArray array = mContext.obtainStyledAttributes(attrs, R.styleable.webview_progressbar);
mMax = array.getInt(R.styleable.webview_progressbar_max, 100);
mCurProgress = array.getInt(R.styleable.webview_progressbar_progress, 0);
mDefaultHeight = array.getInt(R.styleable.webview_progressbar_progressHeight, 8);
mColor = array.getColor(R.styleable.webview_progressbar_progressColor, getResources().getColor(R.color.theme_text_pice_color));
array.recycle();
mPaint = new Paint();
mPaint.setColor(mColor);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
//矩形宽度为view的80%
if (widthMode == MeasureSpec.EXACTLY) {
mWidth = widthSize;
} else if (widthMode == MeasureSpec.AT_MOST) {
//mDefaultWidth 为你自定义设置的属性
mWidth = ArmsUtils.dip2px(getContext(),300);
} else if (widthMode == MeasureSpec.UNSPECIFIED) {
mWidth = widthSize;
}
if (heightMode == MeasureSpec.EXACTLY) {
mHeight = heightSize;
} else if (heightMode == MeasureSpec.AT_MOST) {
//mDefaultHeight 为你自定义设置的属性
mHeight = ArmsUtils.dip2px(getContext(),mDefaultHeight);
}
setMeasuredDimension(mWidth, mHeight);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float result = mWidth * ((float) mCurProgress / (float) 100);
canvas.drawRect(0, 0, result, mDefaultHeight, mPaint);
}
public int getMax() {
return mMax;
}
public void setMax(int max) {
mMax = max;
}
public int getCurProgress() {
return mCurProgress;
}
public interface OnEndListener {
void onEnd();//动画结束的回调
}
public void setCurProgress(int curProgress, long time, final OnEndListener listener) {
if (mCurProgress == 100) {//重置mCurProgress为0
mCurProgress = 0;
}
//注意是从 mCurProgress->curProgress 来动画来实现
ValueAnimator animator = ValueAnimator.ofInt(mCurProgress, curProgress);
animator.setDuration(time);
animator.setInterpolator(new LinearInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mCurProgress = (int) animation.getAnimatedValue();
postInvalidate();//通知刷新
}
});
animator.start();
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
if (listener != null) {
listener.onEnd();
}
}
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
public void setNormalProgress(int newProgress) {
mCurProgress = 0;
mCurProgress = newProgress;
postInvalidate();
}
}
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<color android:color="@android:color/transparent"/>
</item>
<item android:id="@android:id/progress">
<clip>
<color android:color="@color/theme_webview_progressbar_color"/>
</clip>
</item>
</layer-list>
\ 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"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/topbar"
android:layout_width="match_parent"
android:layout_height="?attr/qmui_topbar_height"
app:qmui_topbar_title_color="@color/theme_white_color" />
<include layout="@layout/include_basic_web"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.gingersoft.gsa.cloud.ui.view.WebViewProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_2"
android:visibility="gone" />
<ProgressBar
android:id="@+id/progress_bar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_2"
android:progressDrawable="@drawable/webview_progressbar" />
<TextView
android:id="@+id/tv_hint"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/content_hint_touch_the_screen_to_reload"
android:textColor="@color/theme_hint_color"
android:textSize="@dimen/font_normal2"
android:visibility="invisible" />
</FrameLayout>
\ No newline at end of file
......@@ -14,6 +14,13 @@
<attr name="SwipeBackLayoutStyle" format="reference" />
<declare-styleable name="webview_progressbar">
<attr name="progress" format="integer" />
<attr name="max" format="integer" />
<attr name="progressHeight" format="integer" />
<attr name="progressColor" format="color" />
</declare-styleable>
<!-- QMUI-->
<attr name="app_primary_color" format="color" /> <!-- topbar -->
<attr name="app_content_bg_color" format="color" /> <!-- content-->
......
......@@ -98,7 +98,8 @@
<string name="deleteExistsOrderdetail_All">所有</string>
<string name="mealheight">菜單高度</string>
<string name="datadown">數據下載</string>
<string name="content_hint_touch_the_screen_to_reload">輕觸屏幕重新加載</string>
<string name="authorize_call_phone">無法撥號,請檢查是否已經打開撥號權限。</string>
<!-- 上下拉刷新 -->
<string name="srl_header_pulling">下拉可以刷新</string>
<string name="srl_header_refreshing">正在刷新…</string>
......
......@@ -47,6 +47,9 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
api project(':updateApk')
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]
debugImplementation rootProject.ext.dependencies["canary-debug"]
releaseImplementation rootProject.ext.dependencies["canary-release"]
......
package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.CheckVersionRequest;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import com.tbruyelle.rxpermissions2.RxPermissions;
......@@ -23,6 +24,7 @@ import okhttp3.RequestBody;
public interface NewMainContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loginOut();
RxPermissions getRxPermissions();
......@@ -31,7 +33,7 @@ public interface NewMainContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<Object> checkAppVersion(RequestBody requestBody);
Observable<CheckVersionRequest> checkAppVersion(RequestBody requestBody);
Observable<Object> loginOut(RequestBody requestBody);
}
......
......@@ -2,6 +2,7 @@ package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.CheckVersionRequest;
import com.gingersoft.gsa.cloud.main.mvp.model.service.MainService;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.MainActivity;
import com.google.gson.Gson;
......@@ -50,7 +51,7 @@ public class NewMainModel extends BaseModel implements NewMainContract.Model {
}
@Override
public Observable<Object> checkAppVersion(RequestBody requestBody) {
public Observable<CheckVersionRequest> checkAppVersion(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MainService.class)
.checkAppVersion(requestBody);
}
......
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-06-09
* 修订历史:2020-06-09
* 描述:
*/
public class CheckVersionRequest {
/**
* operate : 1
* code : 1
* updatePath :
* errorMsg : 操作成功
*/
private int operate;
private String code;
private String updatePath;
private String errorMsg;
public int getOperate() {
return operate;
}
public void setOperate(int operate) {
this.operate = operate;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getUpdatePath() {
return updatePath;
}
public void setUpdatePath(String updatePath) {
this.updatePath = updatePath;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
package com.gingersoft.gsa.cloud.main.mvp.model.service;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.CheckVersionRequest;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
......@@ -16,6 +18,6 @@ public interface MainService {
Observable<Object> loginOut(@Body RequestBody requestBody);
@Headers({"Domain-Name: update_version"})
@POST("/member-web/api/system/checkAppVersion" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<Object> checkAppVersion(@Body RequestBody requestBody);
@POST("system/checkAppVersion" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<CheckVersionRequest> checkAppVersion(@Body RequestBody requestBody);
}
package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.contract.NewMainContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.CheckVersionRequest;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity;
import com.gingersoft.gsa.cloud.ui.activity.WebActivity;
import com.jess.arms.base.delegate.IActivity;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
......@@ -27,6 +33,9 @@ import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
import util.UpdateAppUtils;
import static com.jess.arms.utils.ArmsUtils.startActivity;
/**
......@@ -52,9 +61,12 @@ public class NewMainPresenter extends BasePresenter<NewMainContract.Model, NewMa
@Inject
AppManager mAppManager;
private NewMainActivity IActivity;
@Inject
public NewMainPresenter(NewMainContract.Model model, NewMainContract.View rootView) {
super(model, rootView);
this.IActivity = (NewMainActivity) rootView;
}
@Override
......@@ -69,28 +81,37 @@ public class NewMainPresenter extends BasePresenter<NewMainContract.Model, NewMa
public void checkAppVersion() {
RequestBody requestBody = new FormBody.Builder()
.add("version", DeviceUtils.getVersionName(mApplication) + "|" + DeviceUtils.getVersionCode(mApplication))
.add("type", "2")
.build();
mModel.checkAppVersion(requestBody)
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<Object>(mErrorHandler) {
.subscribe(new ErrorHandleSubscriber<CheckVersionRequest>(mErrorHandler) {
@Override
public void onNext(@NonNull Object info) {
if (info != null ) {
// int operate = json.optInt("operate");//操作类型:1、不提示更新 2、提示更新可选择更新 3、强行更新
// if (operate == 2 || operate == 3 || operate == 4 || operate == 5) {
// String updatePath = json.optString("updatePath");
// if (!TextUtils.isEmpty("updatePath") && !updatePath.equals("null")) {
// updateAPK(operate, updatePath);
// } else {
// if (operate == 3) {
// ExitAPP();
// }
// }
// }
public void onNext(@NonNull CheckVersionRequest info) {
if (info != null) {
/**
* 操作类型:
* 1、不提示更新
* 2、提示更新可选择更新
* 3、强行更新
* 4、跳转goole play下载app 没安装goole play就用webview打开goole网页下载
* 5、跳转goole play下载app 没安装goole play就用浏览器打开goole网页下载
*/
int operate = info.getOperate();
if (operate == 2 || operate == 3 || operate == 4 || operate == 5) {
String updatePath = info.getUpdatePath();
if (!TextUtils.isEmpty("updatePath") && !updatePath.equals("null")) {
updateAPK(operate, updatePath);
} else {
if (operate == 3) {
mAppManager.appExit();
}
}
}
} else {
}
}
......@@ -102,7 +123,7 @@ public class NewMainPresenter extends BasePresenter<NewMainContract.Model, NewMa
.build();
mModel.loginOut(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
......@@ -118,6 +139,44 @@ public class NewMainPresenter extends BasePresenter<NewMainContract.Model, NewMa
});
}
public void updateAPK(int type, String downApkURL) {
if(type == 4 || type == 5){
if(type == 4){
try {
DeviceUtils.launchAppDetail(IActivity, mApplication.getPackageName(), "com.android.vending");
} catch (Exception e) {
//跳转goole play下载app
WebActivity.startWebActivity_url(IActivity, downApkURL, WebActivity.RIGHT_TYPE_REFRESH);
}
}else{
try {
DeviceUtils.launchAppDetail(IActivity,mApplication.getPackageName(), "com.android.vending");
} catch (Exception e) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(downApkURL);
intent.setData(content_url);
startActivity(intent);
}
}
return;
}
boolean isForce = false;
if (type == 3 || type == 5) {
isForce = true;
}
UpdateAppUtils.from(IActivity)
.checkBy(UpdateAppUtils.CHECK_BY_VERSION_CODE) //更新检测方式,默认为VersionCode
.serverVersionCode(DeviceUtils.getVersionCode(mApplication))
.serverVersionName(DeviceUtils.getVersionName(mApplication))
.apkPath(downApkURL)
.showNotification(false) //是否显示下载进度到通知栏,默认为true
.updateInfo("發現新版本,點擊下載更新") //更新日志信息 String
.downloadBy(UpdateAppUtils.DOWNLOAD_BY_APP) //下载方式:app下载、手机浏览器下载(DOWNLOAD_BY_BROWSER)。默认app下载
.isForce(isForce) //是否强制更新,默认false 强制更新情况下用户不同意更新则不能使用app
.update();
}
/**
* 进入应用强制用户开启 存储的权限(保存error log来文件必须拥有读写权限)
*/
......@@ -138,4 +197,6 @@ public class NewMainPresenter extends BasePresenter<NewMainContract.Model, NewMa
// }
// }, mRootView.getRxPermissions(), mErrorHandler);
// }
}
......@@ -130,12 +130,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
// mPresenter.checkAppVersion();
mPresenter.checkAppVersion();
}
@Override
......@@ -240,7 +235,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
// }
List<Function> functions = new ArrayList<>();
// if (!BuildConfig.DEBUG) {
if (!BuildConfig.DEBUG) {
// functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.order, "order"));
functions.add(new Function((long) 150, 0, 5, "點餐", 0, 0));
functions.add(new Function((long) 138, 150, 5, "餐檯模式", R.drawable.ic_dining_table_mode, 0));
......@@ -263,11 +258,11 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
functions.add(new Function((long) 147, 152, 5, "員工管理", R.drawable.ic_staff_management_close, 1));
functions.add(new Function((long) 148, 152, 5, "權限管理", R.drawable.ic_authority_management_close, 1));
functions.add(new Function((long) 149, 152, 5, "操作記錄", R.drawable.ic_operation_record_close, 1));
// } else {
// functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.order, "order"));
// functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.manager, "manager"));
// functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.employee, "employee"));
// }
} else {
functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.order, "order"));
functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.manager, "manager"));
functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.employee, "employee"));
}
//將功能列表數據分組
SparseArray<String> parents = new SparseArray<>();
......@@ -308,14 +303,14 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
}
private void functionClick(String name, int status) {
// switch (status){
// case STATUS_NONACTIVATED:
// ToastUtils.show(mContext, "服務暫未開通,敬請期待");
// return;
// case STATUS_TIME_LIMIT:
// ToastUtils.show(mContext, "服務已到期,請前往續費");
// return;
// }
switch (status){
case STATUS_NONACTIVATED:
ToastUtils.show(mContext, "服務暫未開通,請前往開通");
return;
case STATUS_TIME_LIMIT:
ToastUtils.show(mContext, "服務已到期,請前往續費");
return;
}
if (name.equals("餐檯模式")) {
CC.obtainBuilder("Component.Table")
.setActionName("showTableActivity")
......
......@@ -7,11 +7,13 @@ import android.os.Bundle;
import android.os.Message;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
......@@ -26,6 +28,8 @@ import com.gingersoft.gsa.cloud.manager.mvp.ui.adapter.TableManageSectiontAdapte
import com.gingersoft.gsa.cloud.ui.adapter.BasTextSectiontAdapter;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionHeader;
import com.gingersoft.gsa.cloud.ui.recylcler.event.OnRecyclerItemClickListener;
import com.gingersoft.gsa.cloud.ui.recylcler.event.RecyItemTouchHelperCallback;
import com.gingersoft.gsa.cloud.ui.utils.AnimateUtils;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
......@@ -62,6 +66,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
......@@ -246,6 +251,29 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
}
}
});
RecyItemTouchHelperCallback itemTouchHelperCallback = new RecyItemTouchHelperCallback(mAdapter);
final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemTouchHelperCallback);
itemTouchHelper.attachToRecyclerView(mSectionLayout.getRecyclerView());
mSectionLayout.getRecyclerView().addOnItemTouchListener(new OnRecyclerItemClickListener(mSectionLayout.getRecyclerView()) {
@Override
public void onItemClick(RecyclerView.ViewHolder viewHolder) {
QMUIStickySectionAdapter.ViewHolder viewHolder1 = (QMUIStickySectionAdapter.ViewHolder) viewHolder;
Toast.makeText(mActivity, "點擊了:" + viewHolder1.getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
@Override
public void onLongClick(RecyclerView.ViewHolder viewHolder) {
QMUIStickySectionAdapter.ViewHolder viewHolder1 = (QMUIStickySectionAdapter.ViewHolder) viewHolder;
Toast.makeText(mActivity, "長按:" + viewHolder1.getAdapterPosition(), Toast.LENGTH_SHORT).show();
if (viewHolder.getLayoutPosition() != 0) {
itemTouchHelper.startDrag(viewHolder);
}
}
});
mSectionLayout.setAdapter(mAdapter, true);
}
......
......@@ -132,6 +132,10 @@ public class QMUISection<H extends QMUISection.Model<H>, T extends QMUISection.M
return mItemList.get(index);
}
public ArrayList<T> getItemList() {
return mItemList;
}
public boolean existItem(T item){
return mItemList.contains(item);
}
......
......@@ -33,8 +33,7 @@ import static com.qmuiteam.qmui.widget.section.QMUISection.ITEM_INDEX_LOAD_AFTER
import static com.qmuiteam.qmui.widget.section.QMUISection.ITEM_INDEX_LOAD_BEFORE;
import static com.qmuiteam.qmui.widget.section.QMUISection.ITEM_INDEX_SECTION_HEADER;
public abstract class QMUIStickySectionAdapter<
H extends QMUISection.Model<H>, T extends QMUISection.Model<T>, VH extends QMUIStickySectionAdapter.ViewHolder> extends RecyclerView.Adapter<VH> {
public abstract class QMUIStickySectionAdapter<H extends QMUISection.Model<H>, T extends QMUISection.Model<T>, VH extends QMUIStickySectionAdapter.ViewHolder> extends RecyclerView.Adapter<VH> {
private static final String TAG = "StickySectionAdapter";
public static final int ITEM_TYPE_UNKNOWN = -1;
public static final int ITEM_TYPE_SECTION_HEADER = 0;
......@@ -53,6 +52,10 @@ public abstract class QMUIStickySectionAdapter<
private Callback<H, T> mCallback;
private ViewCallback mViewCallback;
public List<QMUISection<H, T>> getCurrentData() {
return mCurrentData;
}
/**
* see {@link #setData(List, boolean, boolean)}
*
......
......@@ -16,6 +16,7 @@ import java.util.Map;
public class AddOrderRequest {
private long orderId;
private int tableId;
/**賬單小數*/
private Double rounding;
/**整單折扣ID*/
......@@ -30,6 +31,14 @@ public class AddOrderRequest {
this.orderId = orderId;
}
public int getTableId() {
return tableId;
}
public void setTableId(int tableId) {
this.tableId = tableId;
}
public Double getRounding() {
return rounding;
}
......
......@@ -18,6 +18,7 @@ public class DeleteOrderRequest {
private List<Map<Byte, DeleteOrderRequest.DeleteBean>> mapsDelete;
private long orderId ;
private int tableId;
private byte type;
private long reasonId;
......@@ -37,6 +38,14 @@ public class DeleteOrderRequest {
this.orderId = orderId;
}
public int getTableId() {
return tableId;
}
public void setTableId(int tableId) {
this.tableId = tableId;
}
public byte getType() {
return type;
}
......
......@@ -290,6 +290,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
* 更新賬單金額
*/
protected void updateOrderMoneyItem() {
updateFoodDiscount();
updateTableServiceAmount();
updateOrderDiscount();
updateOrderRounding();
......@@ -308,12 +309,12 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
if (orderBean.getDiscountValue() != 0) {
//百分比折扣
discount.setDiscount_value(orderBean.getDiscountValue());
addOrderDiscount(discount, 1);
addOrderDiscount(true, discount, 1);
}
if (orderBean.getDiscountAmount() != 0) {
//金額折扣
discount.setAmount(orderBean.getDiscountAmount());
addOrderDiscount(discount, 1);
addOrderDiscount(true, discount, 1);
}
}
}
......@@ -361,7 +362,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
*
* @param discount
*/
protected void addOrderDiscount(Discount discount, int status) {
protected void addOrderDiscount(boolean init, Discount discount, int status) {
double totalMoney = getFoodTotal();
for (BillOrderMoney item : mOrderMoneyList) {
if (item.getType() == BillOrderMoney.ROUNDING_TYPE) {
......@@ -386,7 +387,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
mOrderMoneyList.add(orderMoney);
mOrderMoneyAdapter.notifyDataSetChanged();
//更新總金額
if (mOrderContentActivity != null) {
if (!init && mOrderContentActivity != null) {
//先更新下賬單小數,再計算總金額才不會錯
updateOrderRounding();
//更新合計 總金額信息
......@@ -394,6 +395,18 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
}
}
/**
* 更新整單折扣
*/
protected void updateOrderDiscount() {
BillOrderMoney orderMoney = getBillOrderItemByType(BillOrderMoney.DISCOUNT_TYPE);
if (orderMoney != null) {
double totalMoney = getFoodTotal();
double discountPrice = Discount.calculationDiscount(orderMoney.getDiscount(), totalMoney);
orderMoney.setMoney(discountPrice);
}
}
private BillOrderMoney getBillOrderItemByType(int type) {
for (BillOrderMoney orderMoney : mOrderMoneyList) {
if (orderMoney.getType() == type) {
......@@ -404,9 +417,9 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
}
/**
* 更新折扣金額
* 更新食品折扣
*/
protected void updateOrderDiscount() {
protected void updateFoodDiscount() {
boolean updateData = false;
double totalMoney = 0;
......@@ -471,7 +484,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
if (m2 != 0) {
roundingMoney = MoneyUtil.sub(m2, MoneyUtil.get_ItemDecimals_money(m1));
}
if (roundingMoney != 0.00) {
if (roundingMoney != 0.0) {
BillOrderMoney roundingItem = new BillOrderMoney();
roundingItem.setMoney(MoneyUtil.getDecimalMoney(roundingMoney, MoneyUtil.ItemDecimals));
roundingItem.setTitle("賬單小數");
......@@ -720,6 +733,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
AddOrderRequest request = new AddOrderRequest();
request.setMaps(orderDetailBeanToAddFoodRequest(foodList));
request.setOrderId(MyOrderManage.getInstance().getOrderId());
request.setTableId(OpenTableManage.getDefault().getTableBean().getId());
Double rounding = getRounding();
request.setRounding(rounding != null ? rounding : 0);
Discount orderDiscount = getNesOrderDiscount();
......
......@@ -1642,6 +1642,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
DeleteOrderRequest.Request request = new DeleteOrderRequest.Request();
request.setMapsDelete(mapsDelete);
request.setOrderId(orderId);
request.setTableId(OpenTableManage.getDefault().getTableBean().getId());
request.setType(type);
request.setReasonId(reasonId);
return request;
......
......@@ -106,7 +106,6 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
public OrderContentPresenter(OrderContentContract.Model model, OrderContentContract.View rootView) {
super(model, rootView);
this.IActivity = (OrderContentActivity) rootView;
}
@Override
......@@ -557,21 +556,14 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
private void transferFood(TableBean.DataBean dataBean) {
//删除食品前先保存一份
List<OrderDetail> recodeOrderFoods = new ArrayList<>();
recodeOrderFoods.addAll(getOrderFoodLists());
String ids = getSelectedOldFoodIds();
if (TextUtils.isEmpty(ids)) {
return;
}
//删除已选中食品 重新计算账单小数 折扣
removeSelectedFoods();
updateOrderMoneyItem();
RequestBody requestBody = new FormBody.Builder()
.add("id", String.valueOf(dataBean.getId()))
.add("tableId", String.valueOf(OpenTableManage.getDefault().getTableBean().getId()))
.add("targetId", String.valueOf(dataBean.getId()))
.add("orderId", String.valueOf(MyOrderManage.getInstance().getOrderId()))
.add("orderDetailsIds", ids)
.build();
......@@ -585,25 +577,10 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseRespose>(mErrorHandler) {
private void restoreOrderDetails() {
getOrderFoodLists().clear();
getOrderFoodLists().addAll(recodeOrderFoods);
recodeOrderFoods.clear();
mSelectMealAdapter.setIndex();
mSelectMealAdapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable t) {
super.onError(t);
restoreOrderDetails();
}
@Override
public void onNext(@NonNull BaseRespose info) {
if (info == null) {
restoreOrderDetails();
mRootView.showMessage("轉移失敗");
return;
}
......@@ -626,6 +603,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mSelectMealAdapter.notifyDataSetChanged();
mSelectMealAdapter.setIndex();
updateOrderMoneyItem();
IActivity.initOrderDetail();
IActivity.backPressed();
} else {
......@@ -641,7 +619,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mDiscountDialog.setOnClickListener(new DiscountDialog.Builder.OnClickListener() {
@Override
public void onItemClick(Discount item, int position) {
addOrderDiscount(item, 0);
addOrderDiscount(false,item, 0);
updateOrderMoneyItem();
}
});
......
......@@ -157,10 +157,10 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
Function function = (Function) data;
switch (function.getStatus()) {
case STATUS_NONACTIVATED:
mRootView.showMessage( "服務暫未開通,敬請期待");
mRootView.showMessage("服務暫未開通,敬請期待");
return;
case STATUS_TIME_LIMIT:
mRootView.showMessage( "服務已到期,請前往續費");
mRootView.showMessage("服務已到期,請前往續費");
return;
}
if (function.getResUrl().equals(ComponentTable.table.bottom[0].getKeyRes())) {
......@@ -192,9 +192,9 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
}
public void initBottomFunctionItem() {
List<Function> functions = FunctionManager.getDefault().getFunctionByResModule(IActivity, ComponentTable.table.class, ComponentTable.table.bottom,"bottom");
List<Function> functions = FunctionManager.getDefault().getFunctionByResModule(IActivity, ComponentTable.table.class, ComponentTable.table.bottom, "bottom");
for (int i = 0; i < functions.size(); i++) {
if(functions.get(i).getParentId() == 0){
if (functions.get(i).getParentId() == 0) {
functions.remove(i);
}
}
......
......@@ -35,6 +35,7 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
......@@ -46,6 +47,7 @@ import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.FoodModifierDaoUtils;
import com.gingersoft.gsa.cloud.print.PrinterUtils;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.constans.GoldConstants;
......@@ -268,6 +270,10 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
protected void onCreate(@Nullable Bundle savedInstanceState) {
EventBus.getDefault().registerSticky(this);
super.onCreate(savedInstanceState);
OrderBean order = MyOrderManage.getInstance().getOrderBean();
if(order != null) {
ArmsUtils.snackbarText("訂單ID:" + order.getId());
}
}
@Override
......@@ -617,6 +623,10 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
case 3:
case 4:
case 5:
OrderBean order = MyOrderManage.getInstance().getOrderBean();
if(order != null) {
ArmsUtils.snackbarText("訂單ID:" + order.getId());
}
mPresenter.changeNumber(i);
break;
case 99:
......@@ -642,7 +652,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
break;
}
} else if (id == R.id.iv_fine_back) {
showViewModeVisibility(MealConstant.combo_ViewMode,MealConstant.modifier_ViewMode);
showViewModeVisibility(MealConstant.combo_ViewMode, MealConstant.modifier_ViewMode);
}
}
......
......@@ -13,7 +13,7 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_height="@dimen/dp_30"
android:background="@color/theme_color"
android:orientation="horizontal">
......@@ -21,8 +21,8 @@
android:id="@+id/tv_sold_hmmc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_5"
android:text="項目名稱"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/theme_white_color" />
......@@ -32,8 +32,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginTop="5dp"
android:layout_marginRight="20dp"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginRight="@dimen/dp_20"
android:text="數量"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/theme_white_color" />
......@@ -42,7 +42,7 @@
<LinearLayout
android:id="@+id/ll_meals_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.recyclerview.widget.RecyclerView
......@@ -60,7 +60,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_meals"
android:layout_marginBottom="35dp"
android:layout_marginBottom="@dimen/dp_35"
android:orientation="vertical">
<LinearLayout
......
......@@ -10,7 +10,6 @@
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
......@@ -21,7 +20,7 @@
<service android:name="service.UpdateAppService"/>
<provider
android:name="android.support.v4.content.FileProvider"
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
......
......@@ -21,13 +21,13 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import model.UpdateBean;
import service.UpdateAppService;
import teprinciple.updateapputils.R;
import util.DownloadAppUtils;
import util.UpdateAppUtils;
import view.ConfirmDialog;
import view.DownloadDialog;
/**
* 作者:ELEGANT_BIN
......
......@@ -7,7 +7,6 @@ import android.content.IntentFilter;
import android.os.IBinder;
import androidx.annotation.Nullable;
import util.UpdateAppReceiver;
/**
......
......@@ -8,11 +8,9 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import androidx.core.content.FileProvider;
import java.io.File;
import androidx.core.content.FileProvider;
import teprinciple.updateapputils.R;
/**
......@@ -97,7 +95,7 @@ public class UpdateAppReceiver extends BroadcastReceiver {
}
builder.setContentTitle("正在下載 " + title);
builder.setSmallIcon(R.drawable.logo);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setProgress(100, progress, false);
Notification notification = null;
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#1296db</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="colorPrimary">#398BED</color>
<color name="colorPrimaryDark">#398BED</color>
<color name="colorAccent">#2abbff</color>
<color name="text_blue">#0076FF</color>
<color name="text_black">#333333</color>
</resources>
\ 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