Commit 4a0175ec authored by 姜敏's avatar 姜敏

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/AndroidManifest.xml
#	app/src/main/java/com/xingdata/zzdpos/ui/main/fragment/CasherFragment.java
#	app/src/main/java/com/xingdata/zzdpos/util/SystemUtil.java
parents 9671595b 60dc818c
......@@ -3,12 +3,24 @@
<words>
<w>baozheng</w>
<w>caocao</w>
<w>chengyaojin</w>
<w>diaochan</w>
<w>exps</w>
<w>guanyu</w>
<w>huanggai</w>
<w>huangxin</w>
<w>inputer</w>
<w>kongming</w>
<w>kongrun</w>
<w>likui</w>
<w>liubei</w>
<w>mawu</w>
<w>patt</w>
<w>shixiu</w>
<w>sunquan</w>
<w>xishi</w>
<w>yanqing</w>
<w>yuefei</w>
<w>zhangfei</w>
<w>zhouyu</w>
</words>
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xingdata.zzdpos">
package="com.xingdata.zzdpos">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<application
android:name=".App"
......@@ -50,6 +50,28 @@
android:name=".ui.payment.PaymentActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />
<activity
android:name=".ui.marketing.integral.IntegralActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />
<activity
android:name=".ui.marketing.ticket.ReturnTicketActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:label="@string/title_activity_ticket"
android:theme="@style/AppTheme" />
<activity
android:name=".ui.settle.SettleActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />
<activity
android:name=".ui.announcement.AnnouncementActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />
<activity android:name=".ui.help.HelpActivity" />
<activity android:name=".ui.feedback.FeedBackActivity"></activity>
<activity
android:name=".ui.vip.VipActivity"
android:configChanges="keyboard|orientation|screenSize|keyboardHidden"
......
......@@ -14,6 +14,11 @@ public class C {
public static final int MENU_TICKET = 104;
public static final int MENU_STATISTICS = 105;
public static final int MENU_MANAGER = 106;
public static final int MENU_ANNOUNCEMENT = 107;
public static final int MENU_FEED = 108;
public static final int MENU_UPDATE = 109;
public static final int MENU_HELP = 110;
public static final int MENU_EXIT = 111;
}
......@@ -396,6 +401,8 @@ public class C {
public final class EXTRA_KEY {
public static final String EXCEPTION = "extra.key.exception";
public static final String SETTLE_MODE = "extra.key.settle.mode";
public static final String SETTLE_EXTRA = "extra.key.settle.extra";
}
......@@ -465,4 +472,9 @@ public class C {
//商品
public static final int SKU = 4;
}
public final class SETTLE_MODE {
public static final int PAYMENT = 1;
public static final int STORE = 2;
}
}
......@@ -194,7 +194,7 @@ interface ApiService {
Observable<HttpMessage<String>> addOrderMis(@Body Saleorder.Param saleorderParam);
@POST(C.URL.SALEORDER.addOrderPayMis)
Observable<HttpMessage<String>> addOrderPayMis(@Body Saleorder.Pay saleorderPay);
Observable<HttpMessage<Saleorder>> addOrderPayMis(@Body Saleorder.Pay saleorderPay);
@POST(C.URL.USER.query)
Observable<HttpMessage<Pager<Vip>>> queryDetailByWD(@Query("wd") String keyword, @Query
......
......@@ -10,6 +10,7 @@ import android.view.KeyEvent;
import android.view.View;
import com.hwangjr.rxbus.RxBus;
import com.xingdata.zzdpos.util.InstanceUtil;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
......@@ -17,7 +18,6 @@ import java.util.List;
import me.yokeyword.fragmentation.ISupportFragment;
import me.yokeyword.fragmentation.SupportActivity;
import com.xingdata.zzdpos.util.InstanceUtil;
/**
* BaseActivity,供新创建的Activity继承
......@@ -57,11 +57,9 @@ public abstract class BaseActivity<P extends BasePresenter, B extends ViewDataBi
protected void initPresenter() {
if (this instanceof BaseView &&
this.getClass().getGenericSuperclass() instanceof ParameterizedType &&
((ParameterizedType) (this.getClass().getGenericSuperclass())).getActualTypeArguments().length > 0) {
Class mPresenterClass = (Class) ((ParameterizedType) (this.getClass()
.getGenericSuperclass())).getActualTypeArguments()[0];
if (this instanceof BaseView && this.getClass().getGenericSuperclass() instanceof ParameterizedType
&& ((ParameterizedType) (this.getClass().getGenericSuperclass())).getActualTypeArguments().length > 0) {
Class mPresenterClass = (Class) ((ParameterizedType) (this.getClass().getGenericSuperclass())).getActualTypeArguments()[0];
mPresenter = InstanceUtil.getInstance(mPresenterClass);
mPresenter.setIntent(getIntent()).setView(this).build();
}
......
......@@ -69,7 +69,7 @@ public abstract class BaseDialog<P extends BasePresenter, B extends ViewDataBind
}
protected void seConfirmEnable( boolean isEnable){
protected void seConfirmEnable(boolean isEnable) {
mBaseBinding.btnConfirm.setEnabled(isEnable);
}
......@@ -143,7 +143,7 @@ public abstract class BaseDialog<P extends BasePresenter, B extends ViewDataBind
super.onActivityCreated(savedInstanceState);
if (!isEasy()) {
WindowManager.LayoutParams attributes = getDialog().getWindow().getAttributes();
attributes.width = ScreenUtils.getScreenWidth() * 45 / 100;
attributes.width = ScreenUtils.getScreenWidth() * 95 / 100;
attributes.height = -2;
getDialog().getWindow().setAttributes(attributes);
}
......
......@@ -35,7 +35,6 @@ public abstract class BasePresenter<V> {
protected Realm getRealm() {
if (mRealm == null) {
mRealm = Realm.getInstance(App.instance.mRealmConfig);
// mRealm.setAutoRefresh(false);
}
return mRealm;
}
......
package com.xingdata.zzdpos.db;
import com.xingdata.zzdpos.App;
import com.xingdata.zzdpos.base.BaseModel;
import com.xingdata.zzdpos.model.HandoverInfo;
import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.model.Pay;
import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.ui.settle.SettlePresenter;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import io.realm.Realm;
import io.realm.RealmModel;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.RealmResults;
import com.xingdata.zzdpos.App;
import com.xingdata.zzdpos.base.BaseModel;
import io.realm.Sort;
public class DBFactory {
public static class Main {
/**
* 查询交班记录
*/
public static HandoverInfo queryHandoverInfo(Long operId, String date) {
return DB.getInstance().get(MainPresenter.class).where(HandoverInfo.class)
.equalTo("operId", operId)
.equalTo("date", date)
.findFirst();
}
/**
* 更改交班记录
*/
public static void updateHandoverInfo(HandoverInfo handoverInfo) {
DB.getInstance().get(MainPresenter.class).executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(handoverInfo);
}
});
}
}
public static class Settle {
/**
* 查询支付渠道
*
* @return 支付渠道
*/
public static Observable<List<Pay>> queryPays() {
RealmQuery<Pay> query = DB.getInstance().get(SettlePresenter.class).where(Pay.class);
query.equalTo("payDispFlag", 1);
return Observable.just(query.findAll())
.flatMap(pays -> Observable.just(getList(pays)));
}
/**
* 查询营销活动
*
* @return 营销活动
*/
public static Observable<List<Ms>> queryMss() {
RealmQuery<Ms> query = DB.getInstance().get(SettlePresenter.class).where(Ms.class);
query.equalTo("msStatus", 0);
return Observable.just(query.findAllSorted("msTouchTag2", Sort.DESCENDING))
.flatMap(ms -> Observable.just(getList(ms)));
}
}
public static <E extends RealmModel> List<E> getLimitList(RealmResults<E> data, int offset, int limit) {
......
......@@ -2,7 +2,6 @@ package com.xingdata.zzdpos.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseBean;
import com.xingdata.zzdpos.base.BaseModel;
......@@ -40,64 +39,32 @@ public class Pay extends RealmObject implements BaseModel, BaseBean {
public void init() {
switch (getPayType()) {
case C.PAY_CHANNEL.CASH:
iconId = new int[]{R.mipmap.pay_xianjin_no, R.mipmap.pay_xianjin};
// iconId = new int[]{R.mipmap.pay_xianjin_no, R.mipmap.pay_xianjin};
isSelected = true;
break;
case C.PAY_CHANNEL.ALI:
iconId = new int[]{R.mipmap.pay_zhifubao_no, R.mipmap.pay_zhifubao};
// iconId = new int[]{R.mipmap.pay_zhifubao_no, R.mipmap.pay_zhifubao};
break;
case C.PAY_CHANNEL.WECHAT:
iconId = new int[]{R.mipmap.pay_weixin_no, R.mipmap.pay_weixin};
// iconId = new int[]{R.mipmap.pay_weixin_no, R.mipmap.pay_weixin};
break;
case C.PAY_CHANNEL.BANK:
iconId = new int[]{R.mipmap.pay_yinlian_no, R.mipmap.pay_yinlian};
// iconId = new int[]{R.mipmap.pay_yinlian_no, R.mipmap.pay_yinlian};
break;
case C.PAY_CHANNEL.CARD:
iconId = new int[]{R.mipmap.pay_chuzhi_no, R.mipmap.pay_chuzhi};
// iconId = new int[]{R.mipmap.pay_chuzhi_no, R.mipmap.pay_chuzhi};
isNeedVip = true;
break;
case C.PAY_CHANNEL.TALLY:
iconId = new int[]{R.mipmap.pay_shezhang_no, R.mipmap.pay_shezhang};
// iconId = new int[]{R.mipmap.pay_shezhang_no, R.mipmap.pay_shezhang};
isNeedVip = true;
break;
default:
iconId = new int[]{R.mipmap.pay_xianjin_no, R.mipmap.pay_xianjin};
// iconId = new int[]{R.mipmap.pay_xianjin_no, R.mipmap.pay_xianjin};
break;
}
}
// public BasePayFragment createView(Vip vip, Saleorder saleorder) {
// BasePayFragment basePayFragment = null;
// switch (payType) {
// case C.PAY_CHANNEL.CASH:
// basePayFragment = new CashPayFragment();
// break;
// case C.PAY_CHANNEL.ALI:
// basePayFragment = new AliPayFragment();
// break;
// case C.PAY_CHANNEL.WECHAT:
// basePayFragment = new WechatPayFragment();
// break;
// case C.PAY_CHANNEL.BANK:
// basePayFragment = new BankPayFragment();
// break;
// case C.PAY_CHANNEL.CARD:
// basePayFragment = new CardPayFragment();
// break;
// case C.PAY_CHANNEL.TALLY:
// basePayFragment = new TallyPayFragment();
// break;
// default:
// basePayFragment = new CashPayFragment();
// break;
// }
// basePayFragment.mVip = vip;
// basePayFragment.mSaleorder = saleorder;
// basePayFragment.mPayType = payType;
//
// return basePayFragment;
// }
@PrimaryKey
private Long id;
......
......@@ -255,6 +255,12 @@ public class Saleorder implements BaseModel, BaseBean, BaseOrderPrint {
private long msDisAmt;
/**
* 支付方式
*/
@JSONField(serialize = false)
private int payType;
/**
* 设置订单的商品详情
*
......@@ -983,7 +989,6 @@ public class Saleorder implements BaseModel, BaseBean, BaseOrderPrint {
}
@Override
public String getPayChange() {
return null;
......@@ -996,7 +1001,7 @@ public class Saleorder implements BaseModel, BaseBean, BaseOrderPrint {
@Override
public String getGoodsAmtSum() {
return ConvertUtil.fenToYuan(orderAuthAmt,true);
return ConvertUtil.fenToYuan(orderAuthAmt, true);
}
@Override
......@@ -1011,8 +1016,8 @@ public class Saleorder implements BaseModel, BaseBean, BaseOrderPrint {
@Override
public List<BaseGoodPrint> getGoodList() {
List<BaseGoodPrint> baseGoodPrints=new ArrayList<>();
for (Saledetail saledetail:saledetailList){
List<BaseGoodPrint> baseGoodPrints = new ArrayList<>();
for (Saledetail saledetail : saledetailList) {
baseGoodPrints.add(saledetail);
}
return baseGoodPrints;
......@@ -1063,6 +1068,15 @@ public class Saleorder implements BaseModel, BaseBean, BaseOrderPrint {
return shopNameabcn;
}
public int getPayType() {
return payType;
}
public void setPayType(int payType) {
this.payType = payType;
}
/**
* 优惠项目实体类
*/
......
package com.xingdata.zzdpos.ui.announcement;
import android.view.View;
import com.blankj.utilcode.util.ActivityUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.databinding.ActivityAnnouncementBinding;
import com.xingdata.zzdpos.model.Notice;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.ui.announcement.fragment.AnnouncementFragment;
import com.xingdata.zzdpos.util.OnClickListener;
public class AnnouncementActivity extends BaseActivity<AnnouncementPresenter, ActivityAnnouncementBinding> implements AnnouncementContract.View {
private AnnouncementFragment mAnnouncementFragment = new AnnouncementFragment();
@Override
public int getLayoutId() {
return R.layout.activity_announcement;
}
@Override
public void initView() {
mViewBinding.icTitle.tvTitle.setText("公告");
mViewBinding.icTitle.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
finish();
}
});
loadRootFragment(R.id.fragment_container, mAnnouncementFragment, false, false);
}
// @Override
// public void showAnnouncementDetail(Notice s) {
// mAnnouncementDetailFragment.showAnnouncementDetail(s);
// }
@Override
public void loadNotice(Pager<Notice> noticePager, boolean isRefresh) {
mAnnouncementFragment.setData(noticePager, isRefresh);
}
}
package com.xingdata.zzdpos.ui.announcement;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.base.BaseView;
import com.xingdata.zzdpos.model.Notice;
import com.xingdata.zzdpos.model.Pager;
public interface AnnouncementContract {
interface View extends BaseView {
/**
* 加载列表
*/
void loadNotice(Pager<Notice> noticePager, boolean isRefresh);
}
abstract class Presenter extends BasePresenter<View> {
/**
* 初始化查询公告列表
*/
abstract void queryNoticeList();
public abstract void refreshAnnouncement();
public abstract void loadMoreAnnouncement();
}
}
package com.xingdata.zzdpos.ui.announcement;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.api.ApiFactory;
public class AnnouncementPresenter extends AnnouncementContract.Presenter {
private int nowPageNumber = 1;
private int nowPageSize = 10;
@Override
public void onAttached() {
}
@Override
public void queryNoticeList() {
ApiFactory.Notice.queryNotice(nowPageNumber, nowPageSize).doFinally(() -> {
// mView.isShowLoading(false);
})
.subscribe(noticePager -> {
if (noticePager.getTotalRow() == 0) {
ToastUtils.showShort("抱歉,暂无公告");
}
//判断是否能加载更多
mView.loadNotice(noticePager, nowPageNumber == 1);
}, throwable -> {
ToastUtils.showShort(throwable.getMessage());
});
}
@Override
public void refreshAnnouncement() {
this.nowPageNumber = 1;
queryNoticeList();
}
@Override
public void loadMoreAnnouncement() {
this.nowPageNumber++;
queryNoticeList();
}
}
\ No newline at end of file
package com.xingdata.zzdpos.ui.announcement.adapter;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import com.blankj.utilcode.util.TimeUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseAdapter;
import com.xingdata.zzdpos.databinding.ItemAnnouncementDetailBinding;
import com.xingdata.zzdpos.model.Notice;
import java.util.List;
public class AnnouncementAdapter extends BaseAdapter<Notice, ItemAnnouncementDetailBinding> {
public AnnouncementAdapter(@Nullable List<Notice> data) {
super(R.layout.item_announcement_detail, data);
}
@Override
protected void convert(ItemAnnouncementDetailBinding mViewBinding, Notice item) {
mViewBinding.date.setText(TimeUtils.millis2String(item.getCreateTime()));
mViewBinding.title.setText(item.getNoticeTitle());
mViewBinding.body.setText(item.getNoticeDesc());
}
@Override
protected View getItemView(int layoutResId, ViewGroup parent) {
return super.getItemView(layoutResId, parent);
}
}
package com.xingdata.zzdpos.ui.announcement.fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentAnnouncementBinding;
import com.xingdata.zzdpos.model.Notice;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.ui.announcement.AnnouncementPresenter;
import com.xingdata.zzdpos.ui.announcement.adapter.AnnouncementAdapter;
import java.util.ArrayList;
public class AnnouncementFragment extends BaseFragment<AnnouncementPresenter, FragmentAnnouncementBinding> {
private AnnouncementAdapter announcementAdapter;
@Override
public int getLayoutId() {
return R.layout.fragment_announcement;
}
@Override
protected boolean isLazy() {
return false;
}
@Override
public void initView() {
initRecycler();
mPresenter.queryNoticeList();
}
private void initRecycler() {
mViewBinding.announcementRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
announcementAdapter = new AnnouncementAdapter(new ArrayList<>());
announcementAdapter.bindToRecyclerView(mViewBinding.announcementRecycler);
mViewBinding.srlProduct.setOnRefreshListener(this::onRefresh);
announcementAdapter.setOnLoadMoreListener(this::onLoadMore, mViewBinding.announcementRecycler);
}
private void onRefresh() {
mPresenter.refreshAnnouncement();
}
private void onLoadMore() {
mPresenter.loadMoreAnnouncement();
}
/**
* 设置数据
*
* @param pager 数据
* @param isRefresh 是否刷新
*/
public void setData(Pager<Notice> pager, boolean isRefresh) {
if (isRefresh) {
announcementAdapter.setEnableLoadMore(true);
mViewBinding.srlProduct.setRefreshing(false);
}
if (isRefresh) announcementAdapter.setNewData(pager.getList());
else if (pager.getList().size() > 0) announcementAdapter.addData(pager.getList());
if (pager.isLastPage()) announcementAdapter.loadMoreEnd(isRefresh);
else announcementAdapter.loadMoreComplete();
}
}
package com.xingdata.zzdpos.ui.feedback;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import com.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.api.ApiFactory;
import com.xingdata.zzdpos.databinding.ActivityFeedBackBinding;
import com.xingdata.zzdpos.model.Feed;
import com.xingdata.zzdpos.ui.login.LoginPresenter;
import com.xingdata.zzdpos.util.OnClickListener;
public class FeedBackActivity extends AppCompatActivity {
private ActivityFeedBackBinding mFeedBackBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View root = LayoutInflater.from(this).inflate(R.layout.activity_feed_back, null);
setContentView(root);
mFeedBackBinding = DataBindingUtil.bind(root);
mFeedBackBinding.icTitle.tvTitle.setText(R.string.feedBack_hint);
mFeedBackBinding.icTitle.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
finish();
}
});
mFeedBackBinding.setTextSize("0");
mFeedBackBinding.editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
mFeedBackBinding.setTextSize(mFeedBackBinding.editText.getText().toString().length() + "");
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
mFeedBackBinding.btnSubmit.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
if (mFeedBackBinding.editText.getText().length() < 10) {
ToastUtils.showShort("请详细描述下您遇到的问题");
} else {
Feed feed = new Feed();
feed.setFeedText(mFeedBackBinding.editText.getText().toString() + "联系方式:" + mFeedBackBinding.editContactWay.getText().toString());
feed.setOpMapId(LoginPresenter.loginReturnBean.getOpMapId());
feed.setOperMobile(LoginPresenter.loginReturnBean.getOperMobile());
feed.setFeedFlag("0");
feed.setOpNameabcn(LoginPresenter.loginReturnBean.getOperName());
clickFeedOk(feed);
}
}
});
}
public void clickFeedOk(Feed feed) {
ApiFactory.Feed.addFeed(feed)
.subscribe(object -> {
finish();
}, throwable -> {
ToastUtils.showShort(throwable.getMessage());
});
}
@Override
protected void onPause() {
KeyboardUtils.hideSoftInput(this);
super.onPause();
}
}
package com.xingdata.zzdpos.ui.help;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.databinding.ActivityHelpBinding;
import com.xingdata.zzdpos.util.OnClickListener;
public class HelpActivity extends AppCompatActivity {
private ActivityHelpBinding mHelpBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View root = LayoutInflater.from(this).inflate(R.layout.activity_help, null);
setContentView(root);
mHelpBinding = DataBindingUtil.bind(root);
mHelpBinding.icTitle.tvTitle.setText(R.string.help_hint);
mHelpBinding.icTitle.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
finish();
}
});
}
}
......@@ -22,6 +22,8 @@ import com.xingdata.zzdpos.ui.login.fragment.SignInFragment;
import com.xingdata.zzdpos.ui.login.fragment.bean.LoginReturnBean;
import com.xingdata.zzdpos.ui.login.fragment.bean.StoreAddressJsonBean;
import com.xingdata.zzdpos.ui.login.fragment.bean.StoreTypeJsonBean;
import com.xingdata.zzdpos.ui.marketing.integral.IntegralActivity;
import com.xingdata.zzdpos.ui.payment.PaymentActivity;
import com.xingdata.zzdpos.ui.splash.SplashActivity;
import com.xingdata.zzdpos.view.PopupWindowDownList;
......@@ -136,7 +138,7 @@ public class LoginActivity extends BaseActivity<LoginPresenter, ActivityLoginBin
promptDialog.dismiss();
//如果sn已经绑定款台,则直接跳转主页
if (loginReturnBean.getBindSN()) {
startActivity(new Intent(LoginActivity.this, MainActivity.class));
startActivity(new Intent(LoginActivity.this, IntegralActivity.class));
LoginActivity.this.finish();
return;
}
......
......@@ -2,24 +2,41 @@ package com.xingdata.zzdpos.ui.main;
import android.app.Activity;
import android.databinding.DataBindingUtil;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.View;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.databinding.ActivityMainBinding;
import com.xingdata.zzdpos.databinding.ItemMenuBottomBinding;
import com.xingdata.zzdpos.ui.main.adapter.FragmentViewAdapter;
import com.xingdata.zzdpos.ui.main.dialog.HandoverDialog;
import com.xingdata.zzdpos.ui.main.fragment.CasherFragment;
import com.xingdata.zzdpos.ui.main.fragment.MyselfFragment;
import com.xingdata.zzdpos.ui.main.fragment.ServiceFragment;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBinding> {
private int[] titleInts={R.string.menu_cashier,R.string.menu_service,R.string.menu_myself};
private int[] iconList ={R.mipmap.icon_menu_cashier_1,R.mipmap.icon_menu_service_0,R.mipmap.icon_menu_myself_0};
public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBinding> implements MainContract.View {
private int[] titleInts = {R.string.menu_cashier, R.string.menu_service, R.string.menu_myself};
private int[] iconList = {R.mipmap.icon_menu_cashier_1, R.mipmap.icon_menu_service_0, R.mipmap.icon_menu_myself_0};
private FragmentPagerAdapter mFragmentPagerAdapter;
// private List<View> views=new ArrayList<>();
private List<ItemMenuBottomBinding> itemMenuBottomBindings = new ArrayList<>();
private HandoverDialog mHandoverDialog = new HandoverDialog();
@Override
public int getLayoutId() {
......@@ -28,30 +45,64 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
@Override
public void initView() {
mPresenter.initHandoverInfo();
List<Fragment> fragments = new ArrayList<>();
fragments.add(new CasherFragment());
fragments.add(new CasherFragment());
fragments.add(new CasherFragment());
fragments.add(new ServiceFragment());
fragments.add(new MyselfFragment());
mFragmentPagerAdapter = new FragmentViewAdapter(fragments, getSupportFragmentManager());
mViewBinding.fragmentContainer.setAdapter(mFragmentPagerAdapter);
mViewBinding.tabLayout.setupWithViewPager(mViewBinding.fragmentContainer);
setupTabIcons();
initMenuBottomView();
}
private void initMenuBottomView() {
Observable.create(new ObservableOnSubscribe<View>() {
@Override
public void subscribe(ObservableEmitter<View> e) throws Exception {
e.onNext(getLayoutInflater().inflate(R.layout.item_menu_bottom, null));
e.onNext(getLayoutInflater().inflate(R.layout.item_menu_bottom, null));
e.onNext(getLayoutInflater().inflate(R.layout.item_menu_bottom, null));
}
}).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<View>() {
int i = 0;
@Override
public void accept(View view) throws Exception {
ItemMenuBottomBinding itemMenuBottomBinding = DataBindingUtil.bind(view);
itemMenuBottomBinding.text.setText(titleInts[i]);
if (i == 0) {
itemMenuBottomBinding.text.setTextColor(getResources().getColor(R.color.red_guanyu));
}
itemMenuBottomBinding.img.setImageResource(iconList[i]);
itemMenuBottomBindings.add(itemMenuBottomBinding);
mViewBinding.tabLayout.getTabAt(i).setCustomView(view);
i++;
}
});
mViewBinding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
tab.setIcon(R.mipmap.icon_menu_cashier_1);
itemMenuBottomBindings.get(0).img.setImageResource(R.mipmap.icon_menu_cashier_1);
itemMenuBottomBindings.get(0).text.setTextColor(getResources().getColor(R.color.red_guanyu));
break;
case 1:
tab.setIcon(R.mipmap.icon_menu_service_1);
itemMenuBottomBindings.get(1).img.setImageResource(R.mipmap.icon_menu_service_1);
itemMenuBottomBindings.get(1).text.setTextColor(getResources().getColor(R.color.red_guanyu));
break;
case 2:
tab.setIcon(R.mipmap.icon_menu_myself_1);
itemMenuBottomBindings.get(2).img.setImageResource(R.mipmap.icon_menu_myself_1);
itemMenuBottomBindings.get(2).text.setTextColor(getResources().getColor(R.color.red_guanyu));
break;
}
}
......@@ -60,13 +111,16 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
public void onTabUnselected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
tab.setIcon(R.mipmap.icon_menu_cashier_0);
itemMenuBottomBindings.get(0).img.setImageResource(R.mipmap.icon_menu_cashier_0);
itemMenuBottomBindings.get(0).text.setTextColor(getResources().getColor(R.color.black_likui));
break;
case 1:
tab.setIcon(R.mipmap.icon_menu_service_0);
itemMenuBottomBindings.get(1).img.setImageResource(R.mipmap.icon_menu_service_0);
itemMenuBottomBindings.get(1).text.setTextColor(getResources().getColor(R.color.black_likui));
break;
case 2:
tab.setIcon(R.mipmap.icon_menu_myself_0);
itemMenuBottomBindings.get(2).img.setImageResource(R.mipmap.icon_menu_myself_0);
itemMenuBottomBindings.get(2).text.setTextColor(getResources().getColor(R.color.black_likui));
break;
}
}
......@@ -80,13 +134,8 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
}
private void setupTabIcons() {
for (int i = 0; i < 3; i++) {
mViewBinding.tabLayout.getTabAt(i).setIcon(iconList[i]).setText(titleInts[i]);
}
@Override
public void showHandoverDialog() {
mHandoverDialog.show(this);
}
}
......@@ -17,10 +17,10 @@ interface MainContract {
// */
// void showChangePasswordDialog();
//
// /**
// * 显示交班报表页面
// */
// void showHandoverDialog();
/**
* 显示交班报表页面
*/
void showHandoverDialog();
//
// /**
// * 显示反馈页面
......@@ -270,10 +270,10 @@ interface MainContract {
// */
// public abstract void clickChangePassword();
//
// /**
// * 菜单EXIT页面 - 点击交班 打开交班报表页面
// */
// public abstract void clickHandover();
/**
* 菜单EXIT页面 - 点击交班 打开交班报表页面
*/
public abstract void clickHandover();
//
//
// /**
......@@ -507,15 +507,15 @@ interface MainContract {
// */
// public abstract void sync(SplashPresenter.SynchronousTask synchronousTask);
//
// /**
// * 初始化交班记录
// */
// public abstract void initHandoverInfo();
//
// /**
// * 交班确认
// */
// public abstract void clickHandoverOk();
/**
* 初始化交班记录
*/
public abstract void initHandoverInfo();
/**
* 交班确认
*/
public abstract void clickHandoverOk();
//
// /**
// * 点击换购确定按钮
......
......@@ -12,6 +12,9 @@ import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.TimeUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.api.print.ZX_PrintPOS;
import com.xingdata.zzdpos.db.DBFactory;
import com.xingdata.zzdpos.model.HandoverInfo;
import com.xingdata.zzdpos.ui.login.LoginPresenter;
import java.text.SimpleDateFormat;
......@@ -24,11 +27,8 @@ import io.reactivex.ObservableSource;
import io.reactivex.functions.Function;
public class MainPresenter extends MainContract.Presenter {
@Override
public void onAttached() {
}
// public static HandoverInfo handoverInfo;
public static HandoverInfo handoverInfo;
//
// /**
// * 当前的使用的支付方式
......@@ -94,10 +94,10 @@ public class MainPresenter extends MainContract.Presenter {
// private ScannerUtil mScannerUtil;
//
//
// @Override
// public void onAttached() {
// this.initRealm();
//
@Override
public void onAttached() {
this.initRealm();
// mVip = Vip.createDefault();
// mCartProducts = new ArrayList<>();
// mOrderInfo = new Saleorder();
......@@ -114,8 +114,8 @@ public class MainPresenter extends MainContract.Presenter {
// this.getPayChannels();
// //获取营销活动信息
// this.getMsList();
// }
//
}
// @Override
// public void clickLock() {
// mView.goLockActivity();
......@@ -131,11 +131,11 @@ public class MainPresenter extends MainContract.Presenter {
// mView.showChangePasswordDialog();
// }
//
// @Override
// public void clickHandover() {
// mView.showHandoverDialog();
// }
//
@Override
public void clickHandover() {
mView.showHandoverDialog();
}
//
// @Override
// public void clickFeedback() {
......@@ -869,28 +869,28 @@ public class MainPresenter extends MainContract.Presenter {
// }
//
//
// @Override
// public void initHandoverInfo() {
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
// String time = TimeUtils.millis2String(System.currentTimeMillis(), simpleDateFormat);
// handoverInfo = DBFactory.Main.queryHandoverInfo(LoginPresenter.loginReturnBean.getOperId
// (), time);
// if (handoverInfo == null) {
// handoverInfo = new HandoverInfo();
// handoverInfo.setId(Long.valueOf(LoginPresenter.loginReturnBean.getOperId() + time));
// handoverInfo.setDate(time);
// handoverInfo.setOperId(LoginPresenter.loginReturnBean.getOperId());
// handoverInfo.setAlipay(0L);
// handoverInfo.setPos(0L);
// handoverInfo.setCash(0L);
// handoverInfo.setFinallyAmt(0L);
// handoverInfo.setSumOrder(0L);
// handoverInfo.setVip(0L);
// handoverInfo.setWechat(0L);
// DBFactory.Main.updateHandoverInfo(handoverInfo);
// }
// }
//
@Override
public void initHandoverInfo() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
String time = TimeUtils.millis2String(System.currentTimeMillis(), simpleDateFormat);
handoverInfo = DBFactory.Main.queryHandoverInfo(LoginPresenter.loginReturnBean.getOperId
(), time);
if (handoverInfo == null) {
handoverInfo = new HandoverInfo();
handoverInfo.setId(Long.valueOf(LoginPresenter.loginReturnBean.getOperId() + time));
handoverInfo.setDate(time);
handoverInfo.setOperId(LoginPresenter.loginReturnBean.getOperId());
handoverInfo.setAlipay(0L);
handoverInfo.setPos(0L);
handoverInfo.setCash(0L);
handoverInfo.setFinallyAmt(0L);
handoverInfo.setSumOrder(0L);
handoverInfo.setVip(0L);
handoverInfo.setWechat(0L);
DBFactory.Main.updateHandoverInfo(handoverInfo);
}
}
// /**
// * 更新交班信息
// */
......@@ -929,14 +929,14 @@ public class MainPresenter extends MainContract.Presenter {
// getRealm().copyToRealmOrUpdate(handoverInfo);
// getRealm().commitTransaction();
// }
//
//
// @Override
// public void clickHandoverOk() {
@Override
public void clickHandoverOk() {
// logout();
// mView.handoverOk();
// }
//
}
// @Override
// public void clickFeedOk(Feed feed) {
// ApiFactory.Feed.addFeed(feed)
......
package com.xingdata.zzdpos.ui.main.adapter;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseAdapter;
import com.xingdata.zzdpos.databinding.ItemMyselfStringBinding;
import com.xingdata.zzdpos.databinding.ItemStringBinding;
import java.util.List;
/**
* Created by Administrator on 2017/12/21.
*/
public class MySelfRecyclerAdapter extends BaseAdapter<Integer, ItemMyselfStringBinding> {
private Context mContext;
private Integer titleId;
private Integer imgId;
public MySelfRecyclerAdapter(Context mContext, @Nullable List<Integer> integers) {
super(R.layout.item_myself_string, integers);
this.mContext = mContext;
}
@Override
protected void convert(ItemMyselfStringBinding mViewBinding, Integer item) {
switch (item) {
case C.MENU.MENU_ANNOUNCEMENT:
titleId = R.string.menu_announcement;
imgId = R.mipmap.ic_announcement;
break;
case C.MENU.MENU_FEED:
titleId = R.string.menu_feed;
imgId = R.mipmap.ic_feedback;
break;
case C.MENU.MENU_UPDATE:
titleId = R.string.menu_update;
imgId = R.mipmap.ic_upgrade;
break;
case C.MENU.MENU_HELP:
titleId = R.string.menu_help;
imgId = R.mipmap.ic_helping;
break;
case C.MENU.MENU_EXIT:
titleId = R.string.menu_exit;
imgId = R.mipmap.ic_out;
break;
}
mViewBinding.itemTv.setText(titleId);
Drawable drawable=mContext.getDrawable(imgId);
drawable.setBounds(0,0,(int)mViewBinding.itemTv.getTextSize()+20,(int)mViewBinding.itemTv.getTextSize()+20);
Drawable drawableRight=mContext.getDrawable(R.mipmap.drop_down);
drawableRight.setBounds(0,0,(int)mViewBinding.itemTv.getTextSize(),(int)mViewBinding.itemTv.getTextSize());
mViewBinding.itemTv.setCompoundDrawables(drawable,null,drawableRight,null);
}
}
package com.xingdata.zzdpos.ui.main.dialog;
import android.view.View;
import com.blankj.utilcode.util.TimeUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseDialog;
import com.xingdata.zzdpos.databinding.DialogHandoverBinding;
import com.xingdata.zzdpos.ui.login.LoginPresenter;
import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.util.ConvertUtil;
/**
* 交班页面
*/
public class HandoverDialog extends BaseDialog<MainPresenter, DialogHandoverBinding> {
@Override
public int getLayoutId() {
return R.layout.dialog_handover;
}
@Override
public int getTitle() {
return R.string.handover_hint;
}
@Override
public void onConfirmClick(View view) {
super.onConfirmClick(view);
mPresenter.clickHandoverOk();
}
@Override
public void initView() {
if (MainPresenter.handoverInfo == null) {
mPresenter.initHandoverInfo();
}
mViewBinding.setOperName(LoginPresenter.loginReturnBean.getOperName());
mViewBinding.setDate(TimeUtils.getNowString());
mViewBinding.setAlipay(ConvertUtil.fenToYuan(MainPresenter.handoverInfo.getAlipay(), true));
mViewBinding.setWechat(ConvertUtil.fenToYuan(MainPresenter.handoverInfo.getWechat(), true));
mViewBinding.setCash(ConvertUtil.fenToYuan(MainPresenter.handoverInfo.getCash(), true));
mViewBinding.setVipPay(ConvertUtil.fenToYuan(MainPresenter.handoverInfo.getVip(), true));
mViewBinding.setBank(ConvertUtil.fenToYuan(MainPresenter.handoverInfo.getPos(), true));
mViewBinding.handoverTvSumamt.setText(ConvertUtil.fenToYuan(MainPresenter.handoverInfo.getFinallyAmt(), true));
mViewBinding.setOrderNum(String.valueOf(MainPresenter.handoverInfo.getSumOrder()));
}
}
package com.xingdata.zzdpos.ui.main.fragment;
import android.content.Intent;
import android.support.v7.widget.GridLayoutManager;
import android.view.View;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.ActivityUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.xingdata.zzdpos.C;
......@@ -13,14 +17,19 @@ import com.xingdata.zzdpos.databinding.FragmentCasherBinding;
import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.ui.main.adapter.MenuRecyclerAdapter;
import com.xingdata.zzdpos.ui.vip.VipActivity;
import com.xingdata.zzdpos.ui.payment.PaymentActivity;
import com.xingdata.zzdpos.ui.splash.SplashActivity;
import com.xingdata.zzdpos.util.MyMenuItemDecoration;
import com.xingdata.zzdpos.util.OnClickListener;
import java.util.ArrayList;
import java.util.List;
public class CasherFragment extends BaseFragment<MainPresenter,FragmentCasherBinding> {
public class CasherFragment extends BaseFragment<MainPresenter, FragmentCasherBinding> {
private MenuRecyclerAdapter mMenuRecyclerAdapter;
private List<Integer> integers;
@Override
public int getLayoutId() {
return R.layout.fragment_casher;
......@@ -39,15 +48,15 @@ public class CasherFragment extends BaseFragment<MainPresenter,FragmentCasherBin
integers.add(106);
mMenuRecyclerAdapter = new MenuRecyclerAdapter(getActivity(), integers);
mMenuRecyclerAdapter.bindToRecyclerView(mViewBinding.fragmentCasherRecycler);
// mViewBinding.fragmentCasherRecycler.addItemDecoration(new MyItemDecoration(getActivity(), 2, R.color.black_zhangfei));
mViewBinding.fragmentCasherRecycler.addItemDecoration(new MyMenuItemDecoration(getActivity(), 5, getResources().getColor(R.color.golden_yuji)));
mMenuRecyclerAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
switch ((int)adapter.getData().get(position)) {
switch ((int) adapter.getData().get(position)) {
case C.MENU.MENU_VIP://会员
ActivityUtils.startActivity(new Intent(getActivity(),VipActivity.class));
break;
case C.MENU.MENU_RECHARGE://充值
case C.MENU.MENU_RECHARGE://充值
break;
case C.MENU.MENU_MS://营销
......@@ -66,5 +75,24 @@ public class CasherFragment extends BaseFragment<MainPresenter,FragmentCasherBin
}
}
});
mViewBinding.tvPayment.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
ActivityUtils.startActivity(getActivity(), PaymentActivity.class);
}
});
mViewBinding.tvSplash.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
ActivityUtils.startActivity(getActivity(), SplashActivity.class);
}
});
mViewBinding.btnHandover.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
mPresenter.clickHandover();
}
});
}
}
package com.xingdata.zzdpos.ui.main.fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import com.blankj.utilcode.util.ActivityUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentMyselfBinding;
import com.xingdata.zzdpos.ui.announcement.AnnouncementActivity;
import com.xingdata.zzdpos.ui.feedback.FeedBackActivity;
import com.xingdata.zzdpos.ui.help.HelpActivity;
import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.ui.main.adapter.MySelfRecyclerAdapter;
import java.util.ArrayList;
import java.util.List;
public class MyselfFragment extends BaseFragment<MainPresenter, FragmentMyselfBinding> {
private MySelfRecyclerAdapter mMySelfRecyclerAdapter;
private List<Integer> integers;
@Override
public int getLayoutId() {
return R.layout.fragment_myself;
}
@Override
public void initView() {
mViewBinding.fragmentMyselfRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
integers = new ArrayList<>();
integers.add(107);
integers.add(108);
integers.add(109);
integers.add(110);
integers.add(111);
mMySelfRecyclerAdapter = new MySelfRecyclerAdapter(getActivity(), integers);
mMySelfRecyclerAdapter.bindToRecyclerView(mViewBinding.fragmentMyselfRecycler);
// mViewBinding.fragmentCasherRecycler.addItemDecoration(new MyItemDecoration(getActivity(), 2, R.color.black_zhangfei));
mMySelfRecyclerAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
switch ((int) adapter.getData().get(position)) {
case C.MENU.MENU_ANNOUNCEMENT://公告
ActivityUtils.startActivity(getActivity(), AnnouncementActivity.class);
break;
case C.MENU.MENU_FEED://反馈
ActivityUtils.startActivity(getActivity(), FeedBackActivity.class);
break;
case C.MENU.MENU_UPDATE://升级
break;
case C.MENU.MENU_HELP://帮助
ActivityUtils.startActivity(getActivity(), HelpActivity.class);
break;
case C.MENU.MENU_EXIT://退出
break;
}
}
});
}
}
package com.xingdata.zzdpos.ui.main.fragment;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentServiceBinding;
import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.ui.main.adapter.MenuRecyclerAdapter;
import java.util.List;
public class ServiceFragment extends BaseFragment<MainPresenter,FragmentServiceBinding> {
private MenuRecyclerAdapter mMenuRecyclerAdapter;
private List<Integer> integers;
@Override
public int getLayoutId() {
return R.layout.fragment_service;
}
@Override
public void initView() {
}
}
package com.xingdata.zzdpos.ui.marketing.integral;
import android.support.annotation.Nullable;
import android.view.View;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.databinding.ActivityIntegralBinding;
import com.xingdata.zzdpos.model.Category;
import com.xingdata.zzdpos.model.Gbound;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.Ubound;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.dialog.PromptDialog;
import com.xingdata.zzdpos.util.OnClickListener;
import java.util.List;
public class IntegralActivity extends BaseActivity<IntegralPresenter, ActivityIntegralBinding>
implements IntegralContract.View {
@Override
public int getLayoutId() {
return R.layout.activity_integral;
}
@Override
public void initView() {
loadRootFragment(R.id.frg, mPresenter.integralIndexFragment);
}
@Override
public void initComplete(List<Category> list, int nowCategory) {
mPresenter.integralIndexFragment.initComplete(list, nowCategory);
}
@Override
public void error(String errMsg, LoadingDialog loadingDialog) {
if (loadingDialog != null) {
loadingDialog.dismiss();
}
PromptDialog PromptDialog = new PromptDialog();
PromptDialog.show((BaseActivity) mContext);
PromptDialog.setDialogType(com.xingdata.zzdpos.ui.dialog.PromptDialog.PROMPTDIALOG_ERROR,
errMsg).setCustomButton
("关闭", new View.OnClickListener() {
@Override
public void onClick(View view) {
PromptDialog.dismiss();
}
});
LogUtils.e(errMsg);
ToastUtils.showLong(errMsg);
}
@Override
public void querySucc(@Nullable Pager<Gbound> pager, Boolean isLoadMore, int queryType,
LoadingDialog loadingDialog) {
mPresenter.integralIndexFragment.querySucc(pager, isLoadMore, queryType, loadingDialog);
}
@Override
public void addSucc(LoadingDialog loadingDialog) {
mPresenter.query(1, mPresenter.integralIndexFragment.NORMAL_TYPE, loadingDialog);
}
@Override
public void updateSucc(LoadingDialog loadingDialog) {
pop();
mPresenter.query(1, mPresenter.integralIndexFragment.NORMAL_TYPE, loadingDialog);
}
@Override
public void exchangeQuerySucc(Pager<Ubound> uboundPager, LoadingDialog loadingDialog) {
mPresenter.integralIndexFragment.exchangeQuerySucc(uboundPager, loadingDialog);
}
@Override
public void exchangeUpdateSucc(Ubound ubound, LoadingDialog loadingDialog) {
mPresenter.exchangeQuery(loadingDialog);
}
}
package com.xingdata.zzdpos.ui.marketing.integral;
import android.support.annotation.Nullable;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.base.BaseView;
import com.xingdata.zzdpos.model.Category;
import com.xingdata.zzdpos.model.Gbound;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.Ubound;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import java.util.List;
/**
* Created by Administrator on 2017/11/23.
*/
public interface IntegralContract {
interface View extends BaseView {
void initComplete(List<Category> list, int nowCategory);
void error(String errMsg, LoadingDialog loadingDialog);
void querySucc(Pager<Gbound> pager, Boolean isLoadMore, int queryType, LoadingDialog
loadingDialog);
void addSucc(LoadingDialog loadingDialog);
void updateSucc(LoadingDialog loadingDialog);
void exchangeQuerySucc(Pager<Ubound> uboundPager, LoadingDialog loadingDialog);
void exchangeUpdateSucc(Ubound ubound, LoadingDialog loadingDialog);
}
abstract class Presenter extends BasePresenter<View> {
abstract void initData(Category category, int nowCategory);
abstract void query(int pageNumber, int queryType, LoadingDialog loadingDialog);
abstract void add(@Nullable Gbound gbound, LoadingDialog loadingDialog);
abstract void update(@Nullable Gbound gbound, LoadingDialog loadingDialog);
abstract void exchangeQuery(LoadingDialog loadingDialog);
abstract void exchangeUpdate(@Nullable Ubound ubound, LoadingDialog loadingDialog);
}
}
package com.xingdata.zzdpos.ui.marketing.integral;
import android.support.annotation.Nullable;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.api.ApiFactory;
import com.xingdata.zzdpos.model.Category;
import com.xingdata.zzdpos.model.Gbound;
import com.xingdata.zzdpos.model.Ubound;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.marketing.integral.fragment.IntegralGetFragment;
import com.xingdata.zzdpos.ui.marketing.integral.fragment.IntegralIndexFragment;
import java.util.List;
import io.reactivex.functions.Function;
/**
* Created by Administrator on 2017/11/23.
*/
public class IntegralPresenter extends IntegralContract.Presenter {
private int number = 1;
public IntegralIndexFragment integralIndexFragment = new IntegralIndexFragment();
public IntegralGetFragment integralGetFragment = new IntegralGetFragment();
@Override
public void onAttached() {
}
@Override
public void initData(Category category, int nowCategory) {
ApiFactory.Shop.queryAll(category)
.map(new Function<List<Category>, List<Category>>() {
@Override
public List<Category> apply(List<Category> categoryOnes) throws
Exception {
for (Category categoryOne : categoryOnes) {
categoryOne.setNowCategory(nowCategory);
}
return categoryOnes;
}
}).subscribe(s -> {
mView.initComplete(s, nowCategory);
}, throwable -> {
mView.error(throwable.getMessage(), null);
});
}
/**
* @param pageNumber 页码 >0则使用,<0则使用默认页码number
* @param queryType 请求类型,0:正常请求;1:加载更多请求;2刷新请求
*/
@Override
public void query(int pageNumber, int queryType, LoadingDialog loadingDialog) {
if (pageNumber > 0) {
this.number = pageNumber;
}
ApiFactory.Gbounds.query(C.PRODUCT.PAGE_SIZE, number).subscribe(querySucc -> {
Boolean isLoadMore = false;
if (!querySucc.isLastPage()) {
this.number++;
isLoadMore = true;
} else {
isLoadMore = false;
}
mView.querySucc(querySucc, isLoadMore, queryType, loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
@Override
public void add(Gbound gbound, LoadingDialog loadingDialog) {
ApiFactory.Gbounds.add(gbound).subscribe(addSucc -> {
mView.addSucc(loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
@Override
public void update(Gbound gbound, LoadingDialog loadingDialog) {
ApiFactory.Gbounds.update(gbound).subscribe(addSucc -> {
mView.updateSucc(loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
@Override
public void exchangeQuery(LoadingDialog loadingDialog) {
ApiFactory.Ubounds.query().subscribe(query -> {
mView.exchangeQuerySucc(query, loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
@Override
public void exchangeUpdate(@Nullable Ubound ubound, LoadingDialog loadingDialog) {
ApiFactory.Ubounds.update(ubound).subscribe(exchangeUpdateSucc -> {
mView.exchangeUpdateSucc(exchangeUpdateSucc, loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
}
package com.xingdata.zzdpos.ui.marketing.integral.adapter;
import android.support.annotation.Nullable;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseAdapter;
import com.xingdata.zzdpos.databinding.ItemIntegralBinding;
import com.xingdata.zzdpos.model.Gbound;
import java.util.List;
/**
* Created by Administrator on 2017/11/24.
*/
public class IntegralAdapter extends BaseAdapter<Gbound, ItemIntegralBinding> {
public IntegralAdapter(int layoutResId, @Nullable List<Gbound> data) {
super(layoutResId, data);
}
@Override
protected void convert(ItemIntegralBinding mViewBinding, Gbound item) {
mViewBinding.tvVip.setText(item.getVipLevelName());
if (item.getSpuCateId() == 0) {
mViewBinding.tvSource.setText("全品类");
} else {
//来源品类
if (item.getSpuCateName() != null) {
mViewBinding.tvSource.setText(item.getSpuCateName());
}
}
//获取规则
mViewBinding.tvGet.setText(item.getTruleName());
//开通启用状态 0:正常 1 暂停 默认 0
if (item.getBoundGetStatus() == 0) {
mViewBinding.tvStatus.setText("启用");
} else {
mViewBinding.tvStatus.setText("未启用");
}
}
}
package com.xingdata.zzdpos.ui.marketing.integral.adapter;
import android.support.annotation.Nullable;
import com.xingdata.zzdpos.base.BaseAdapter;
import com.xingdata.zzdpos.databinding.ItemIntegralBinding;
import com.xingdata.zzdpos.model.Ubound;
import com.xingdata.zzdpos.util.ConvertUtil;
import java.util.List;
/**
* Created by Administrator on 2017/11/24.
*/
public class IntegralExchangeAdapter extends BaseAdapter<Ubound, ItemIntegralBinding> {
public IntegralExchangeAdapter(int layoutResId, @Nullable List<Ubound> data) {
super(layoutResId, data);
}
@Override
protected void convert(ItemIntegralBinding mViewBinding, Ubound item) {
mViewBinding.tvVipTitle.setText("积分面值");
mViewBinding.tvSourceTitle.setText("兑换规则");
mViewBinding.tvVip.setText(item.getBoundValAmt() + "个积分=1元");
//兑换规则
if (item.getBoundOrderAmt() != null && item.getBoundUseNum() != null) {
mViewBinding.tvSource.setText("订单实收金额满" + ConvertUtil.fenToYuan(item.getBoundOrderAmt
()) + "元\n最多使用" + item.getBoundUseNum() + "积分");
}
//备注
mViewBinding.tvGet.setText("无");
if (item.getBoundUseStatus() != null) {
//开通启用状态 0:正常 1 暂停 默认 0
if (item.getBoundUseStatus() == 0) {
mViewBinding.tvStatus.setText("启用");
} else {
mViewBinding.tvStatus.setText("未启用");
}
}
}
}
package com.xingdata.zzdpos.ui.marketing.integral.dialog;
import android.annotation.SuppressLint;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.base.BaseDialog;
import com.xingdata.zzdpos.databinding.DialogIntegralExchangeSettingBinding;
import com.xingdata.zzdpos.model.Ubound;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.marketing.integral.IntegralPresenter;
import com.xingdata.zzdpos.util.ConvertUtil;
/**
* 积分兑换设置界面
*/
public class IntegralExchangeDialog extends BaseDialog<IntegralPresenter,
DialogIntegralExchangeSettingBinding> {
Ubound ubound;
@Override
public int getLayoutId() {
return R.layout.dialog_integral_exchange_setting;
}
@Override
protected boolean isShowTitle() {
return true;
}
@Override
public int getTitle() {
return R.string.integral_exchange_title;
}
@SuppressLint("SetTextI18n")
@Override
public void initView() {
setCancelable(false);
mViewBinding.setOnClickListener(view -> {
hintKbTwo();
switch (view.getId()) {
case R.id.rd_suspendeds: {
//暂停
ubound.setBoundUseStatus((byte) 1);
}
break;
case R.id.rd_starts: {
//启用
ubound.setBoundUseStatus((byte) 0);
}
break;
}
});
initUiData();
}
private void initUiData() {
if (ubound != null) {
if (ubound.getBoundUseStatus() != null && ubound.getBoundUseStatus() == 0) {
mViewBinding.rdStarts.setChecked(true);
} else if (ubound.getBoundUseStatus() != null && ubound.getBoundUseStatus() == 1) {
mViewBinding.rdSuspendeds.setChecked(true);
}
if (ubound.getBoundValAmt() != null) {
mViewBinding.etIntegralExchangeRuleCountMoney.setText(ubound.getBoundValAmt() + "");
}
if (ubound.getBoundOrderAmt() != null) {
mViewBinding.etIntegralExchangeMoney.setText(ConvertUtil.fenToYuanNoPoint(ubound
.getBoundOrderAmt()));
}
if (ubound.getBoundUseNum() != null) {
mViewBinding.etIntegralExchangeCount.setText(ubound.getBoundUseNum() + "");
}
}
}
public void setData(Ubound ubound) {
this.ubound = ubound;
}
@Override
public void onConfirmClick(View view) {
super.onConfirmClick(view);
if (isNullAndSet()) {
LoadingDialog loadingDialog = new LoadingDialog();
loadingDialog.show((BaseActivity) getActivity());
ubound.setUpdateTime(null);
ubound.setCreateTime(null);
mPresenter.exchangeUpdate(ubound, loadingDialog);
this.dismiss();
} else {
ToastUtils.showLong("输入数据不能null");
}
}
/**
* 判断用户输入数据是否为null
*
* @return 输入为null返回false 反之返回true
*/
private boolean isNullAndSet() {
if (ubound == null || ubound.getBoundUseStatus() == null) {
return false;
}
if (TextUtils.isEmpty(mViewBinding.etIntegralExchangeRuleCountMoney.getText().toString())
|| TextUtils.isEmpty(mViewBinding.etIntegralExchangeMoney.getText().toString())
|| TextUtils.isEmpty(mViewBinding.etIntegralExchangeCount.getText().toString
())) {
return false;
}
ubound.setBoundValAmt(Long.parseLong(mViewBinding.etIntegralExchangeRuleCountMoney
.getText().toString()));
ubound.setBoundOrderAmt(ConvertUtil.yuanToFen(mViewBinding.etIntegralExchangeMoney
.getText().toString()));
ubound.setBoundUseNum(Long.parseLong(mViewBinding.etIntegralExchangeCount.getText()
.toString()));
return true;
}
/**
* 显示软键盘,Dialog使用
*/
public void hintKbTwo() {
View view = getDialog().getCurrentFocus();
if (view == null) {
return;
}
if (view instanceof TextView) {
InputMethodManager mInputMethodManager = (InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
mInputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager
.RESULT_UNCHANGED_SHOWN);
}
}
@Override
public void dismiss() {
hintKbTwo();
super.dismiss();
}
}
package com.xingdata.zzdpos.ui.marketing.integral.fragment;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import android.widget.TextView;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentIntegralMainBinding;
import com.xingdata.zzdpos.model.Category;
import com.xingdata.zzdpos.model.Gbound;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.Ubound;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.marketing.integral.IntegralActivity;
import com.xingdata.zzdpos.ui.marketing.integral.IntegralPresenter;
import com.xingdata.zzdpos.ui.marketing.integral.adapter.IntegralAdapter;
import com.xingdata.zzdpos.ui.marketing.integral.adapter.IntegralExchangeAdapter;
import com.xingdata.zzdpos.ui.marketing.integral.dialog.IntegralExchangeDialog;
import com.xingdata.zzdpos.util.OnClickListener;
import java.util.ArrayList;
import java.util.List;
/**
* 绑定款台界面
* <p>
* 设备没有绑定款台的进行绑定操作
*/
public class IntegralIndexFragment extends BaseFragment<IntegralPresenter,
FragmentIntegralMainBinding> {
// IntegralGetDialog integralGetDialog;
IntegralAdapter integralAdapter;
IntegralExchangeAdapter integralExchangeAdapter;
private Boolean isLoadMore = false;
public static final int NORMAL_TYPE = 1;
public static final int LOADMORE_TYPE = 2;
public static final int REFRESH_TYPE = 3;
LoadingDialog loadingDialog = new LoadingDialog();
private long mExitTime;//控制快速点击
@Override
public int getLayoutId() {
return R.layout.fragment_integral_main;
}
@Override
public void initView() {
mViewBinding.icTitle.tvTitle.setText("积分规则");
mViewBinding.icTitle.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
ActivityUtils.finishActivity(IntegralActivity.class);
}
});
integralAdapter = new IntegralAdapter(R.layout.item_integral, new ArrayList<>());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mViewBinding.rvMessage.setLayoutManager(linearLayoutManager);
mViewBinding.rvMessage.setAdapter(integralAdapter);
List<Ubound> list = new ArrayList<>();
Ubound ubound = new Ubound();
ubound.setBoundValAmt(1000l);
ubound.setBoundUseStatus((byte) 0);
ubound.setBoundOrderAmt(10l);
ubound.setBoundUseNum(10000l);
list.add(ubound);
integralExchangeAdapter = new IntegralExchangeAdapter(R.layout.item_integral, list);
LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(getActivity());
linearLayoutManager1.setOrientation(LinearLayoutManager.VERTICAL);
mViewBinding.rvExchangeMessage.setLayoutManager(linearLayoutManager1);
mViewBinding.rvExchangeMessage.setAdapter(integralExchangeAdapter);
mViewBinding.setOnClickListener(v -> {
switch (v.getId()) {
case R.id.btn_add: {
mPresenter.integralGetFragment.setNowType(1);
start(mPresenter.integralGetFragment);
// integralGetDialog = new IntegralGetDialog();
// integralGetDialog.setNowType(1);
// integralGetDialog.show((BaseActivity) getActivity());
}
break;
case R.id.rb_get: {
mViewBinding.rbGet.getPaint().setFakeBoldText(true);
mViewBinding.rbExchange.getPaint().setFakeBoldText(false);
showView(v.getId());
mPresenter.query(1, NORMAL_TYPE, null);
}
break;
case R.id.rb_exchange: {
mViewBinding.rbGet.getPaint().setFakeBoldText(false);
mViewBinding.rbExchange.getPaint().setFakeBoldText(true);
showView(v.getId());
LoadingDialog loadingDialog = new LoadingDialog();
loadingDialog.show((BaseActivity) getActivity());
mPresenter.exchangeQuery(loadingDialog);
}
break;
default: {
}
break;
}
});
//set Presenter listener
mViewBinding.srlProduct.setOnRefreshListener(this::refreshProduct);
integralAdapter.setOnLoadMoreListener(this::loadMoreProduct, mViewBinding.rvMessage);
integralAdapter.setOnItemClickListener((adapter, view, position) -> clickProduct
(integralAdapter.getData().get(position)));
integralExchangeAdapter.setOnItemClickListener((adapter, view, position) ->
exchangeClickProduct(integralExchangeAdapter.getData().get(position)));
mPresenter.query(1, NORMAL_TYPE, null);
}
public void initComplete(List<Category> list, int nowCategory) {
if (list.size() <= 0) {
return;
}
mPresenter.integralGetFragment.setCategoryDate(list, nowCategory);
}
public void querySucc(@Nullable Pager<Gbound> pager, Boolean isLoadMore, int queryType,
LoadingDialog loadingDialog) {
if (loadingDialog != null) {
loadingDialog.dismiss();
}
this.isLoadMore = isLoadMore;
if (pager == null || pager.getList() == null || pager.getList().size() <= 0) {
integralAdapter.setEmptyView(getEmptyView("没有规则"));
}
if (pager.getList() != null) {
switch (queryType) {
case NORMAL_TYPE: {
//正常请求
integralAdapter.setNewData(pager.getList());
}
break;
case LOADMORE_TYPE: {
//加载更多
integralAdapter.addData(pager.getList());
}
break;
case REFRESH_TYPE: {
//刷新请求
integralAdapter.setNewData(pager.getList());
}
break;
}
}
integralAdapter.setEnableLoadMore(false);
mViewBinding.srlProduct.setRefreshing(false);
}
public void exchangeQuerySucc(Pager<Ubound> uboundPager, LoadingDialog loadingDialog) {
if (loadingDialog != null) {
loadingDialog.dismiss();
}
if (uboundPager != null && uboundPager.getList() != null) {
integralExchangeAdapter.setNewData(uboundPager.getList());
}
}
/**
* 刷新商品
*/
private void refreshProduct() {
integralAdapter.setEnableLoadMore(false);
mPresenter.query(1, REFRESH_TYPE, null);
}
/**
* 加载更多商品
*/
private void loadMoreProduct() {
mViewBinding.srlProduct.setRefreshing(false);
if (isLoadMore) {
mPresenter.query(-1, LOADMORE_TYPE, null);
}
}
/**
* 积分获取页面点击item
*/
private void clickProduct(Gbound gbound) {
if ((System.currentTimeMillis() - mExitTime) > 1000) {
// integralGetDialog = new IntegralGetDialog();
loadingDialog.show((BaseActivity) getActivity());
mPresenter.integralGetFragment.setData(gbound, loadingDialog);
start(mPresenter.integralGetFragment);
// integralGetDialog.show((BaseActivity) getActivity());
mExitTime = System.currentTimeMillis();
} else {
ToastUtils.showLong("您操作太快了");
}
}
/**
* 积分兑换页面点击item
*/
private void exchangeClickProduct(Ubound gbound) {
if ((System.currentTimeMillis() - mExitTime) > 1000) {
IntegralExchangeDialog integralExchangeDialog = new IntegralExchangeDialog();
integralExchangeDialog.setData(gbound);
integralExchangeDialog.show((BaseActivity) getActivity());
mExitTime = System.currentTimeMillis();
} else {
ToastUtils.showLong("您操作太快了");
}
}
private View getEmptyView(String str) {
View view = getLayoutInflater().inflate(R.layout.view_empty, null);
((TextView) view.findViewById(R.id.tv_empty)).setText(str);
return view;
}
private void showView(int id) {
switch (id) {
case R.id.rb_get: {
mViewBinding.llGet.setVisibility(View.VISIBLE);
mViewBinding.llExchange.setVisibility(View.GONE);
}
break;
case R.id.rb_exchange: {
mViewBinding.llGet.setVisibility(View.GONE);
mViewBinding.llExchange.setVisibility(View.VISIBLE);
}
break;
}
}
}
package com.xingdata.zzdpos.ui.marketing.ticket;
import android.support.v7.widget.GridLayoutManager;
import android.text.Html;
import android.view.View;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.databinding.ActivityReturnTicketBinding;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.Trule;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.marketing.ticket.adapter.ReturnTicketAdapter;
import com.xingdata.zzdpos.ui.marketing.ticket.dialog.TicketAddDialog;
import com.xingdata.zzdpos.util.OnClickListener;
import com.xingdata.zzdpos.util.RecyclerViewUtil;
import java.util.ArrayList;
public class ReturnTicketActivity extends BaseActivity<ReturnTicketPresenter,
ActivityReturnTicketBinding>
implements ReturnTicketContract.View {
ReturnTicketAdapter returnTicketAdapter;
LoadingDialog loadingDialog = new LoadingDialog();
@Override
public int getLayoutId() {
return R.layout.activity_return_ticket;
}
@Override
public void initView() {
mViewBinding.icTitle.tvTitle.setText("优惠券规则");
mViewBinding.icTitle.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
ActivityUtils.finishActivity(ReturnTicketActivity.class);
}
});
mViewBinding.btnGroup.setText(Html.fromHtml(
getResources().
getString(R.string
.tv_ticket_count, "<font color='#1f7bdb'><big> " + "0" + " " +
"</big></font>")));
final int SPACING = mContext.getResources().getDimensionPixelOffset(R.dimen
.vip_message_item_spacing);
returnTicketAdapter = new
ReturnTicketAdapter(new ArrayList<>(), mPresenter);
mViewBinding.rcTicket.setAdapter(returnTicketAdapter);
mViewBinding.rcTicket.setLayoutManager(new
GridLayoutManager(ReturnTicketActivity.this,
4));
mViewBinding.rcTicket.addItemDecoration(new RecyclerViewUtil.GridSpacingItemDecoration(4,
SPACING, true));
mViewBinding.setOnClickListener(view ->
{
switch (view.getId()) {
case R.id.btn_add: {
mPresenter.ticketAddDialog = new TicketAddDialog();
mPresenter.ticketAddDialog.show(this);
}
break;
default: {
}
break;
}
});
}
@Override
public void error(String errorMsg, LoadingDialog loadingDialog) {
closeLoading(loadingDialog);
LogUtils.e(errorMsg);
ToastUtils.showLong(errorMsg);
}
@Override
public void addSucc(LoadingDialog loadingDialog) {
if (mPresenter.ticketAddDialog != null && mPresenter.ticketAddDialog.isShowing) {
mPresenter.ticketAddDialog.dismiss();
}
mPresenter.truleQuery(loadingDialog);
}
@Override
public void truleQuerySucc(Pager<Trule> trulePager, LoadingDialog loadingDialog) {
closeLoading(loadingDialog);
if (trulePager == null || trulePager.getList() == null || trulePager.getList().size() <=
0) {
mViewBinding.tvEmpty.setVisibility(View.VISIBLE);
}
if (trulePager != null && trulePager.getList() != null) {
mViewBinding.tvEmpty.setVisibility(View.GONE);
returnTicketAdapter.setNewData(trulePager.getList());
mViewBinding.btnGroup.setText(Html.fromHtml(getResources().getString(R.string
.tv_ticket_count,
"<font color='#1f7bdb'><big> " + trulePager.getList().size() + " " +
"</big></font>")));
}
}
@Override
public void truleUpdateSucc(LoadingDialog loadingDialog) {
if (mPresenter.ticketAddDialog != null && mPresenter.ticketAddDialog.isShowing) {
mPresenter.ticketAddDialog.dismiss();
}
mPresenter.truleQuery(loadingDialog);
}
private void closeLoading(LoadingDialog loadingDialog) {
if (loadingDialog != null) {
loadingDialog.dismiss();
}
}
@Override
protected void onResume() {
super.onResume();
loadingDialog.show(this);
mPresenter.truleQuery(loadingDialog);
}
}
package com.xingdata.zzdpos.ui.marketing.ticket;
import android.support.annotation.Nullable;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.base.BaseView;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.Trule;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
/**
* Created by Administrator on 2017/11/24.
*/
public interface ReturnTicketContract {
interface View extends BaseView {
void error(String errorMsg, LoadingDialog loadingDialog);
void addSucc(LoadingDialog loadingDialog);
void truleQuerySucc(Pager<Trule> trulePager, LoadingDialog loadingDialog);
void truleUpdateSucc(LoadingDialog loadingDialog);
}
abstract class Presenter extends BasePresenter<View> {
abstract void add(@Nullable Trule trule, LoadingDialog loadingDialog);
abstract void truleQuery(LoadingDialog loadingDialog);
abstract void truleUpdate(@Nullable Trule trule, LoadingDialog loadingDialog);
}
}
package com.xingdata.zzdpos.ui.marketing.ticket;
import android.support.annotation.Nullable;
import com.xingdata.zzdpos.api.ApiFactory;
import com.xingdata.zzdpos.model.Trule;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.marketing.ticket.dialog.TicketAddDialog;
/**
* Created by Administrator on 2017/11/24.
*/
public class ReturnTicketPresenter extends ReturnTicketContract.Presenter {
public TicketAddDialog ticketAddDialog;
@Override
public void onAttached() {
}
@Override
public void add(@Nullable Trule trule, LoadingDialog loadingDialog) {
ApiFactory.TRULE.truleAdd(trule).subscribe(s -> {
mView.addSucc(loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
@Override
public void truleQuery(LoadingDialog loadingDialog) {
ApiFactory.TRULE.truleQuery().subscribe(pager -> {
mView.truleQuerySucc(pager, loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
@Override
public void truleUpdate(@Nullable Trule trule, LoadingDialog loadingDialog) {
ApiFactory.TRULE.truleUpdate(trule).subscribe(pager -> {
mView.truleUpdateSucc(loadingDialog);
}, throwable -> {
mView.error(throwable.getMessage(), loadingDialog);
});
}
}
package com.xingdata.zzdpos.ui.marketing.ticket.adapter;
import android.support.annotation.Nullable;
import android.view.View;
import com.blankj.utilcode.util.TimeUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.base.BaseAdapter;
import com.xingdata.zzdpos.databinding.ItemReturnTicketBinding;
import com.xingdata.zzdpos.model.Trule;
import com.xingdata.zzdpos.ui.marketing.ticket.ReturnTicketPresenter;
import com.xingdata.zzdpos.ui.marketing.ticket.dialog.TicketAddDialog;
import com.xingdata.zzdpos.util.ConvertUtil;
import java.text.SimpleDateFormat;
import java.util.List;
public class ReturnTicketAdapter extends BaseAdapter<Trule, ItemReturnTicketBinding> {
ReturnTicketPresenter mPersenter;
public ReturnTicketAdapter(@Nullable List<Trule> data, ReturnTicketPresenter mPersenter) {
super(R.layout.item_return_ticket, data);
this.mPersenter = mPersenter;
}
@Override
protected void convert(ItemReturnTicketBinding mViewBinding, Trule item) {
mViewBinding.tvTicket.setText("优\n惠\n券");
// mViewBinding.tvSend.setText("发\n券");
mViewBinding.tvSend.setText("\n");
mViewBinding.tvTicketMoney.setText(ConvertUtil.fenToYuanNoPoint(item.getTruleValAmt()));
mViewBinding.tvRule.setText(mContext.getResources().getString(R.string.tv_rule,
ConvertUtil.fenToYuanNoPoint(item.getTruleOrderAmt())));
mViewBinding.tvDate.setText(mContext.getResources().getString(R.string.tv_date,
TimeUtils.millis2String(item.getTruleExp(), new SimpleDateFormat("yyy-mm-dd"))));
mViewBinding.clSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ToastUtils.showLong("发券");
}
});
mViewBinding.clItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPersenter.ticketAddDialog = new TicketAddDialog();
mPersenter.ticketAddDialog.setNowType(2);
mPersenter.ticketAddDialog.editTicketData(item);
mPersenter.ticketAddDialog.show((BaseActivity) mContext);
}
});
}
}
package com.xingdata.zzdpos.ui.marketing.ticket.dialog;
import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.content.Context;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.DatePicker;
import android.widget.TextView;
import com.blankj.utilcode.util.TimeUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.base.BaseDialog;
import com.xingdata.zzdpos.databinding.DialogTicketAddSettingBinding;
import com.xingdata.zzdpos.model.Trule;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.marketing.ticket.ReturnTicketPresenter;
import com.xingdata.zzdpos.util.ConvertUtil;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* 积分获取设置界面
*/
public class TicketAddDialog extends BaseDialog<ReturnTicketPresenter,
DialogTicketAddSettingBinding> {
LoadingDialog loadingDialog = new LoadingDialog();
//0:正常 1暂停
private byte nowStatus = 1;
//当前编辑的对象
private Trule trule = new Trule();
//1为新增,2为更新
private int nowType = 1;
@Override
public int getLayoutId() {
return R.layout.dialog_ticket_add_setting;
}
@Override
protected boolean isShowTitle() {
return true;
}
@Override
public int getTitle() {
return R.string.return_ticket_title;
}
@SuppressLint("SetTextI18n")
@Override
public void initView() {
hintKbTwo();
mViewBinding.etTicketMoney.addTextChangedListener(mTextWatcher);
mViewBinding.etRuleMoney.addTextChangedListener(mTextWatcher);
mViewBinding.etTicketCount.addTextChangedListener(mTextWatcher);
if (nowType == 2) {
setTitle("编辑优惠券");
mViewBinding.tvIntegralRuleName.setText(trule.getTruleName());
if (trule.getTruleStatus() == 1) {
mViewBinding.rbSuspended.setChecked(true);
} else if (trule.getTruleStatus() == 0) {
mViewBinding.rbStart.setChecked(true);
}
mViewBinding.etTicketMoney.setText(ConvertUtil.fenToYuanNoPoint(trule.getTruleValAmt
()));
mViewBinding.tvDate.setText(TimeUtils.millis2String(trule.getTruleExp(), new
SimpleDateFormat("yyyy-mm-dd")));
mViewBinding.etRuleMoney.setText(ConvertUtil.fenToYuanNoPoint(trule.getTruleOrderAmt
()));
mViewBinding.etTicketCount.setText(trule.getTruleUseNum() + "");
}
mViewBinding.setOnClickListener(view -> {
hintKbTwo();
switch (view.getId()) {
case R.id.tv_date: {
showDialogPick(mViewBinding.tvDate);
}
break;
case R.id.rb_suspended: {
//暂停
nowStatus = 1;
}
break;
case R.id.rb_start: {
//启用
nowStatus = 0;
}
break;
default: {
}
break;
}
});
}
public void editTicketData(Trule trule) {
this.trule = trule;
}
@Override
public void onConfirmClick(View view) {
if (isNull()) {
if (Integer.parseInt(mViewBinding.etRuleMoney.getText().toString()) <= Integer
.parseInt(mViewBinding.etTicketMoney.getText().toString())) {
ToastUtils.showLong("可用金额需大于优惠券面值 ");
return;
}
loadingDialog.show((BaseActivity) mContext);
if (nowType == 1) {
mPresenter.add(getUiData(), loadingDialog);
} else if (nowType == 2) {
mPresenter.truleUpdate(getUiData(), loadingDialog);
}
} else {
ToastUtils.showLong("输入数据不能null");
}
super.onConfirmClick(view);
}
private Trule getUiData() {
mViewBinding.tvIntegralRuleName.setText(mViewBinding.etTicketMoney.getText().toString() +
"元优惠券");
trule.setTruleName(mViewBinding.tvIntegralRuleName.getText().toString());
//0:正常 1暂停 默认0
trule.setTruleStatus(nowStatus);
trule.setTruleValAmt(ConvertUtil.yuanToFen(mViewBinding.etTicketMoney.getText().toString
()));
trule.setTruleExp(TimeUtils.string2Millis(mViewBinding.tvDate.getText().toString(), new
SimpleDateFormat("yyyy-mm-dd")));
trule.setTruleOrderAmt(ConvertUtil.yuanToFen(mViewBinding.etRuleMoney.getText().toString
()));
if (!mViewBinding.etTicketCount.getText().toString().equals("")) {
trule.setTruleUseNum(Byte.parseByte(mViewBinding.etTicketCount.getText().toString()));
} else {
trule.setTruleUseNum((byte) 1);
}
return trule;
}
/**
* 判断用户输入数据是否为null
*
* @return 输入为null返回false 反之返回true
*/
private boolean isNull() {
return !(TextUtils.isEmpty(mViewBinding.etTicketMoney.getText().toString())
|| TextUtils.isEmpty(mViewBinding.tvDate.getText().toString())
|| TextUtils.isEmpty(mViewBinding.etRuleMoney.getText().toString())
|| TextUtils.isEmpty(mViewBinding.etTicketCount.getText().toString()));
}
//将两个选择时间的dialog放在该函数中
private void showDialogPick(final View btn) {
//获取Calendar对象,用于获取当前时间
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
//实例化DatePickerDialog对象
DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, new
DatePickerDialog.OnDateSetListener() {
//选择完日期后会调用该回调函数
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int
dayOfMonth) {
//因为monthOfYear会比实际月份少一月所以这边要加1
((TextView) btn).setText(year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);
}
}, year, month, day);
//弹出选择日期对话框
datePickerDialog.show();
}
/**
* 显示软键盘,Dialog使用
*/
public void hintKbTwo() {
View view = getDialog().getCurrentFocus();
if (view == null) {
return;
}
if (view instanceof TextView) {
InputMethodManager mInputMethodManager = (InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
mInputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager
.RESULT_UNCHANGED_SHOWN);
}
}
private TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
String text = s.toString();
int len = s.toString().length();
if (len == 1 && text.equals("0")) {
s.clear();
}
}
};
public void setNowType(int type) {
trule = new Trule();
this.nowType = type;
}
@Override
public void dismiss() {
hintKbTwo();
super.dismiss();
}
}
package com.xingdata.zzdpos.ui.payment;
import android.content.Intent;
import com.blankj.utilcode.util.ActivityUtils;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.databinding.ActivityPaymentBinding;
import com.xingdata.zzdpos.ui.payment.fragment.PaymentFragment;
import com.xingdata.zzdpos.ui.settle.SettleActivity;
public class PaymentActivity extends BaseActivity<PaymentPresenter, ActivityPaymentBinding> implements PaymentContract.View {
......@@ -19,4 +24,12 @@ public class PaymentActivity extends BaseActivity<PaymentPresenter, ActivityPaym
loadRootFragment(R.id.f_payment, mPaymentFragment);
}
@Override
public void showSettle(Long amt) {
Intent intent = new Intent(PaymentActivity.this, SettleActivity.class);
intent.putExtra(C.EXTRA_KEY.SETTLE_MODE, C.SETTLE_MODE.PAYMENT);
intent.putExtra(C.EXTRA_KEY.SETTLE_EXTRA, amt);
ActivityUtils.startActivity(intent);
}
}
......@@ -7,8 +7,19 @@ import com.xingdata.zzdpos.base.BaseView;
interface PaymentContract {
interface View extends BaseView {
/**
* 显示结算页面
*/
void showSettle(Long amt);
}
abstract class Presenter extends BasePresenter<PaymentContract.View> {
abstract class Presenter extends BasePresenter<View> {
/**
* 收款界面 - 点击收款
*
* @param amt 金额
*/
public abstract void clickSettle(Long amt);
}
}
\ No newline at end of file
package com.xingdata.zzdpos.ui.payment;
import com.blankj.utilcode.util.EncryptUtils;
import com.xingdata.zzdpos.api.ApiFactory;
import com.xingdata.zzdpos.util.SystemUtil;
public class PaymentPresenter extends PaymentContract.Presenter {
@Override
public void onAttached() {
ApiFactory.Test.signBefore("13111111111", EncryptUtils.encryptMD5ToString("000000".getBytes()),
"1", SystemUtil.getDeviceSN()).subscribe(loginReturnBean -> {
}, throwable -> {
});
}
@Override
public void clickSettle(Long amt) {
mView.showSettle(amt);
}
}
package com.xingdata.zzdpos.ui.payment.fragment;
import com.blankj.utilcode.util.LogUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentPaymentBinding;
......@@ -10,7 +9,7 @@ import com.xingdata.zzdpos.util.ConvertUtil;
public class PaymentFragment extends BaseFragment<PaymentPresenter, FragmentPaymentBinding> {
private CalculatorView mCalculatorView = new CalculatorView();
private CalculatorView<PaymentPresenter> mCalculatorView = new CalculatorView<>();
@Override
public int getLayoutId() {
......@@ -20,14 +19,14 @@ public class PaymentFragment extends BaseFragment<PaymentPresenter, FragmentPaym
@Override
public void initView() {
loadRootFragment(R.id.f_inputer, mCalculatorView);
mCalculatorView.setmOnResultChangeListener((exp, result) -> {
LogUtils.e(exp + "\n" + result);
mCalculatorView.setOnResultChangeListener((exp, result) -> {
String strResult = ConvertUtil.fenToYuan(result);
mViewBinding.tvExp.setText(exp);
mViewBinding.tvResult.setText(ConvertUtil.fenToYuan(result));
mViewBinding.tvResult.setText(strResult);
mViewBinding.tvAmt.setText(strResult);
});
mCalculatorView.setmOnSettleClickListener(result -> {
LogUtils.e(ConvertUtil.fenToYuan(result));
mCalculatorView.setOnSettleClickListener(result -> {
if (result > 0) mPresenter.clickSettle(result);
});
}
}
......@@ -7,15 +7,15 @@ import android.widget.TextView;
import com.blankj.utilcode.util.LogUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.databinding.ViewCalculatorBinding;
import com.xingdata.zzdpos.ui.payment.PaymentPresenter;
import com.xingdata.zzdpos.util.ConvertUtil;
import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CalculatorView extends BaseFragment<PaymentPresenter, ViewCalculatorBinding> {
public class CalculatorView<P extends BasePresenter> extends BaseFragment<P, ViewCalculatorBinding> {
private String mExp;
private String mValue;
......@@ -48,13 +48,13 @@ public class CalculatorView extends BaseFragment<PaymentPresenter, ViewCalculato
public void initView() {
View.OnClickListener mOnClickListener = view -> {
switch (view.getId()) {
case R.id.btn_del:
case R.id.tv_del:
delete();
break;
case R.id.btn_clear:
case R.id.tv_clear:
clear();
break;
case R.id.btn_settle:
case R.id.tv_settle:
settle();
break;
default:
......@@ -63,21 +63,20 @@ public class CalculatorView extends BaseFragment<PaymentPresenter, ViewCalculato
String str = ((TextView) view).getText().toString();
String[] mExps = mExp.split("[+\\-×÷]");
if (mLast.matches("[+\\-×÷]")) mValue = "";
else if (mExps.length > 1) mValue = mExps[mExps.length - 1];
else mValue = mExp.replaceAll("[+\\-×÷]", "");
if (mExps.length > 1) mValue = mExps[mExps.length - 1];
else mValue = mExp;
//限制位数
if (str.matches("[0-9]+") && mValue.split("[.]").length > 1 && mValue.split("[.]")[1].length() == 2)
return;
//限制小数点
if ((mExp.length() == 0 || mValue.contains(".")) && str.matches("[.]"))
return;
//限制符号
if (mLast.matches("[+\\-×÷.]") && str.matches("[+\\-×÷.]"))
return;
if (mLast.matches("[+\\-×÷.]") && str.matches("[+\\-×÷.]")) return;
if (mValue.length() > 0 && str.matches("[+\\-×÷]")) {
mValue = "";
} else {
if (mValue.length() == 0 && str.matches("[+\\-×÷]")) return;
if (mValue.contains(".") && str.matches("[+\\-×÷.]")) return;
if (mValue.split("[.]").length > 1 && mValue.split("[.]")[1].length() > 2)
return;
if (mValue.length() == 0 && str.equals(".")) mExp += "0";
}
mLast = str;
mExp += str;
......@@ -97,7 +96,8 @@ public class CalculatorView extends BaseFragment<PaymentPresenter, ViewCalculato
private void delete() {
if (mExp.length() > 0) {
mExp = mExp.substring(0, mExp.length() - 1);
mLast = mExp.substring(mExp.length() - 1, mExp.length());
if (mExp.length() > 0) mLast = mExp.substring(mExp.length() - 1, mExp.length());
else mLast = "";
}
}
......@@ -122,7 +122,7 @@ public class CalculatorView extends BaseFragment<PaymentPresenter, ViewCalculato
/**
* 解析计算四则运算表达式,例:2+((3+4)*2-22)/2*3
* 解析计算四则运算表达式
*
* @param exp 算式
* @return 结果
......@@ -196,11 +196,12 @@ public class CalculatorView extends BaseFragment<PaymentPresenter, ViewCalculato
}
public void setmOnResultChangeListener(OnResultChangeListener mOnResultChangeListener) {
this.mOnResultChangeListener = mOnResultChangeListener;
public void setOnResultChangeListener(OnResultChangeListener onResultChangeListener) {
this.mOnResultChangeListener = onResultChangeListener;
mOnResultChangeListener.onResultChange(mExp, ConvertUtil.yuanToFen(parseExp(mExp)));
}
public void setmOnSettleClickListener(onSettleClickListener mOnSettleClickListener) {
this.mOnSettleClickListener = mOnSettleClickListener;
public void setOnSettleClickListener(onSettleClickListener onSettleClickListener) {
this.mOnSettleClickListener = onSettleClickListener;
}
}
package com.xingdata.zzdpos.ui.settle;
import com.blankj.utilcode.util.ActivityUtils;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.databinding.ActivitySettleBinding;
import com.xingdata.zzdpos.model.Pay;
import com.xingdata.zzdpos.model.Saleorder;
import com.xingdata.zzdpos.model.Ticket;
import com.xingdata.zzdpos.model.Vip;
import com.xingdata.zzdpos.ui.dialog.LoadingDialog;
import com.xingdata.zzdpos.ui.main.MainActivity;
import com.xingdata.zzdpos.ui.settle.fragment.CashPayFragment;
import com.xingdata.zzdpos.ui.settle.fragment.PayResultFragment;
import com.xingdata.zzdpos.ui.settle.fragment.SettleFragment;
import java.util.List;
public class SettleActivity extends BaseActivity<SettlePresenter, ActivitySettleBinding> implements SettleContract.View {
private SettleFragment mSettleFragment = new SettleFragment();
private CashPayFragment mCashPayFragment = new CashPayFragment();
private PayResultFragment mPayResultFragment = new PayResultFragment();
private LoadingDialog mLoadingDialog = new LoadingDialog();
@Override
public int getLayoutId() {
return R.layout.activity_settle;
}
@Override
public void initView() {
this.loadRootFragment(R.id.f_settle, mSettleFragment);
}
@Override
public void setSettleFragmentBySettleMode(int settleMode) {
}
@Override
public void showSettleFragment() {
this.popTo(mSettleFragment.getClass(), false);
}
@Override
public void showVipFragment() {
}
@Override
public void loadVips(List<Vip> vips) {
}
@Override
public void loadVip(Vip vip) {
mSettleFragment.loadVip(vip);
}
@Override
public void showTicketFragment() {
}
@Override
public void loadTickets(List<Ticket> tickets) {
}
@Override
public void loadTicket(Ticket ticket) {
}
@Override
public void loadPays(List<Pay> pays) {
mSettleFragment.loadPays(pays);
}
@Override
public void loadSaleorder(Saleorder saleorder) {
mSettleFragment.loadSaleorder(saleorder);
mCashPayFragment.loadSaleorder(saleorder);
}
@Override
public void showPayFragment(int payChannel) {
switch (payChannel) {
case C.PAY_CHANNEL.CASH:
this.start(mCashPayFragment);
break;
}
}
@Override
public void changeLockState(boolean isLock) {
}
@Override
public void showLoadingDialog() {
mLoadingDialog.show(this);
}
@Override
public void dismissLoadingDialog() {
mLoadingDialog.dismiss();
}
@Override
public void showPaySuccFragment(Saleorder saleorder) {
this.start(mPayResultFragment.setResult(true).setSaleorder(saleorder));
}
@Override
public void showPayFailFragment(Throwable throwable, Saleorder saleorder) {
this.start(mPayResultFragment.setResult(false).setSaleorder(saleorder));
}
@Override
public void backToMainActivity() {
ActivityUtils.startActivity(this, MainActivity.class);
}
}
package com.xingdata.zzdpos.ui.settle;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.base.BaseView;
import com.xingdata.zzdpos.model.Pay;
import com.xingdata.zzdpos.model.Saleorder;
import com.xingdata.zzdpos.model.Ticket;
import com.xingdata.zzdpos.model.Vip;
import java.util.List;
interface SettleContract {
interface View extends BaseView {
/**
* 设置初始化结算页面
*
* @param settleMode 结算模式
*/
void setSettleFragmentBySettleMode(int settleMode);
/**
* 显示结算Fragment
*/
void showSettleFragment();
/**
* 显示会员Fragment
*/
void showVipFragment();
/**
* 加载会员列表
*
* @param vips 会员列表
*/
void loadVips(List<Vip> vips);
/**
* 加载会员信息
*
* @param vip 会员信息
*/
void loadVip(Vip vip);
/**
* 显示优惠券Fragment
*/
void showTicketFragment();
/**
* 加载优惠券列表
*
* @param tickets 优惠券列表
*/
void loadTickets(List<Ticket> tickets);
/**
* 加载优惠券信息
*
* @param ticket 优惠券信息
*/
void loadTicket(Ticket ticket);
/***
* 加载支付方式列表
*
* @param pays 支付方法会列表
*/
void loadPays(List<Pay> pays);
/**
* 加载订单信息
*
* @param saleorder 订单信息
*/
void loadSaleorder(Saleorder saleorder);
/**
* 显示支付页面
*
* @param payChannel 支付渠道
*/
void showPayFragment(int payChannel);
/**
* 改变锁定状态
*
* @param isLock 是否锁定
*/
void changeLockState(boolean isLock);
/**
* 显示读取对话框
*/
void showLoadingDialog();
/**
* 隐藏读取对话框
*/
void dismissLoadingDialog();
/**
* 显示支付成功界面
*
* @param saleorder 订单信息
*/
void showPaySuccFragment(Saleorder saleorder);
/**
* 显示支付失败界面
*
* @param throwable 错误信息
* @param saleorder 订单信息
*/
void showPayFailFragment(Throwable throwable, Saleorder saleorder);
/**
* 返回主页面
*/
void backToMainActivity();
}
abstract class Presenter extends BasePresenter<View> {
/**
* 结算页面 - 初始化结算页面
*/
public abstract void initSettle();
/**
* 结算页面 - 点击会员View
*/
public abstract void clickVipView();
/**
* 会员界面 - 查找会员
*
* @param keyword 搜索关键字
*/
public abstract void searchVip(String keyword);
/**
* 会员页面 - 选择会员
*
* @param vip 会员
*/
public abstract void selectVip(Vip vip);
/**
* 结算页面 - 点击优惠券View
*/
public abstract void clickTicketView();
/**
* 结算页面 - 查询优惠券
*/
public abstract void searchTicket(Long vipId);
/**
* 优惠券页面 - 选择优惠券
*
* @param ticket 使用的优惠券
*/
public abstract void selectTicket(Ticket ticket);
/**
* 结算页面 - 切换积分状态
*
* @param isUsePoint 是否使用积分
*/
public abstract void changePointState(boolean isUsePoint);
/**
* 点击支付渠道
*
* @param payChannel 支付渠道
*/
public abstract void clickPayChannelView(int payChannel);
/**
* 现金结算页面 - 现金支付
*
* @param inputAmt 输入金额
* @param changeAmt 找零金额
*/
public abstract void payInCash(Long inputAmt, Long changeAmt);
/**
* 支付宝结算页面 - 支付宝支付
*
* @param payCode 支付码
*/
public abstract void payInAli(String payCode);
/**
* 微信结算页面 - 微信支付
*
* @param payCode 支付码
*/
public abstract void payInWechat(String payCode);
/**
* 银行卡结算页面 - 银行卡支付
*/
public abstract void payInBank();
/**
* 储值卡结算页面 - 储值卡
*
* @param cardNo 卡号
* @param password 密码
*/
public abstract void payInCard(Long cardNo, String password);
/**
* 赊账结算页面 - 赊账
*/
public abstract void payInTally();
/**
* 支付结果页面 - 完成订单
*/
public abstract void clickComplete();
/**
* 支付结果页面 - 重试
*/
public abstract void clickRetry();
}
}
package com.xingdata.zzdpos.ui.settle;
import com.blankj.utilcode.util.StringUtils;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.api.ApiFactory;
import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.model.Pay;
import com.xingdata.zzdpos.model.Saledetail;
import com.xingdata.zzdpos.model.Saleorder;
import com.xingdata.zzdpos.model.Ticket;
import com.xingdata.zzdpos.model.Vip;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
public class SettlePresenter extends SettleContract.Presenter {
/**
* 结算模式
*/
private int mSettleMode;
/**
* 当前会员
*/
private Vip mVip;
/**
* 当前的营销活动列表
*/
private List<Ms> mMss;
/**
* 当前设备的支付渠道信息
*/
private List<Pay> mPays;
/**
* 当前购物车的商品明细
*/
private List<Saledetail> mSaledetails;
/**
* 当前订单信息
*/
private Saleorder mSaleorder;
@Override
public void onAttached() {
this.initRealm();
mSaleorder = new Saleorder();
mSaledetails = new ArrayList<>();
mVip = Vip.createDefault();
mSettleMode = getIntent().getIntExtra(C.EXTRA_KEY.SETTLE_MODE, -1);
switch (mSettleMode) {
case C.SETTLE_MODE.PAYMENT:
this.getPaymentIntent();
break;
case C.SETTLE_MODE.STORE:
this.getStoreIntent();
break;
}
}
/**
* 获取收款信息
*/
private void getPaymentIntent() {
Long payAmt = getIntent().getLongExtra(C.EXTRA_KEY.SETTLE_EXTRA, 0);
mSaledetails.add(0, Saledetail.create("收款", payAmt, mVip));
mSaleorder.setSaledetails(mSaledetails).settle();
}
/**
* 获取开单信息
*/
private void getStoreIntent() {
}
@Override
public void initSettle() {
ApiFactory.Pay.query().subscribe(
pays -> mView.loadPays(pays),
throwable -> {
}
);
mView.loadSaleorder(mSaleorder);
mView.setSettleFragmentBySettleMode(mSettleMode);
}
@Override
public void clickVipView() {
// mView.showVipFragment();
mView.loadVip(Vip.createDefault());
}
@Override
public void searchVip(String keyword) {
ApiFactory.User.queryUserDetailByKeyword(keyword).subscribe(
vip -> {
List<Vip> vips = new ArrayList<>();
vips.add(vip);
mView.loadVips(vips);
},
throwable -> {
});
}
@Override
public void selectVip(Vip vip) {
mView.showSettleFragment();
mView.loadVip(vip);
}
@Override
public void clickTicketView() {
mView.showTicketFragment();
}
@Override
public void searchTicket(Long vipId) {
ApiFactory.Ticket.query(vipId).subscribe(
tickets -> mView.loadTickets(tickets),
throwable -> {
});
}
@Override
public void selectTicket(Ticket ticket) {
mView.loadTicket(ticket);
}
@Override
public void changePointState(boolean isUsePoint) {
}
@Override
public void clickPayChannelView(int payChannel) {
mSaleorder.setPayType(payChannel);
mView.showPayFragment(payChannel);
}
@Override
public void payInCash(Long inputAmt, Long changeAmt) {
subscribePay(commitOrder()
.flatMap(orderNo -> ApiFactory.Saleorder.addOrderPayMis(mSaleorder.pay(orderNo, C.PAY_CHANNEL.CASH)))
);
}
@Override
public void payInAli(String payCode) {
}
@Override
public void payInWechat(String payCode) {
}
@Override
public void payInBank() {
}
@Override
public void payInCard(Long cardNo, String password) {
}
@Override
public void payInTally() {
}
@Override
public void clickComplete() {
mView.backToMainActivity();
}
@Override
public void clickRetry() {
mView.showSettleFragment();
}
/**
* 订阅支付
*
* @param observable 数据源
*/
private void subscribePay(Observable<Saleorder> observable) {
mView.showLoadingDialog();
observable.doFinally(() -> mView.dismissLoadingDialog()).subscribe(
this::paySucc,
this::payFail
);
}
/**
* 提交订单
*/
private Observable<String> commitOrder() {
if (StringUtils.isEmpty(mSaleorder.getOrderNo())) {
return ApiFactory.Saleorder.addOrderMis(createSaleorderParam())
.doAfterNext(s -> {
mSaleorder.setOrderNo(s);
mView.changeLockState(true);
});
} else {
return Observable.just(mSaleorder.getOrderNo());
}
}
/**
* 获取参数形式的订单信息
*
* @return 参数形式的订单信息
*/
private Saleorder.Param createSaleorderParam() {
Saleorder.Param saleorderParam = mSaleorder.setVip(mVip).param();
for (int i = 0; i < mSaledetails.size(); i++) {
saleorderParam.saleOrderParamDetailList.add(mSaledetails.get(i).param());
}
return saleorderParam;
}
/**
* 支付成功
*/
private void paySucc(Saleorder saleorder) {
mView.showPaySuccFragment(saleorder);
}
/**
* 支付失败
*/
private void payFail(Throwable throwable) {
mView.showPayFailFragment(throwable, mSaleorder);
}
}
package com.xingdata.zzdpos.ui.settle.adapter;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseAdapter;
import com.xingdata.zzdpos.databinding.ItemPayBinding;
import com.xingdata.zzdpos.model.Pay;
import java.util.ArrayList;
public class PayAdapter extends BaseAdapter<Pay, ItemPayBinding> {
public PayAdapter() {
super(R.layout.item_pay, new ArrayList<>());
}
@Override
protected void convert(ItemPayBinding mViewBinding, Pay item) {
int resLogo, resBackground;
switch (item.getPayType()) {
case C.PAY_CHANNEL.CASH:
resLogo = R.mipmap.pay_cash;
resBackground = R.color.red_diaochan;
break;
case C.PAY_CHANNEL.WECHAT:
resLogo = R.mipmap.pay_wechat;
resBackground = R.color.green_kongrun;
break;
case C.PAY_CHANNEL.ALI:
resLogo = R.mipmap.pay_alipay;
resBackground = R.color.blue_yuefei;
break;
case C.PAY_CHANNEL.BANK:
resLogo = R.mipmap.pay_card;
resBackground = R.color.cyan_liubei;
break;
case C.PAY_CHANNEL.CARD:
resLogo = R.mipmap.pay_membershipcard;
resBackground = R.color.yellow_huangxin;
break;
case C.PAY_CHANNEL.TALLY:
resLogo = R.mipmap.pay_credit;
resBackground = R.color.purple_yanqing;
break;
default:
resLogo = R.mipmap.pay_cash;
resBackground = R.color.red_diaochan;
break;
}
mViewBinding.ivLogo.setImageResource(resLogo);
GenericDraweeHierarchy hierarchy = mViewBinding.ivBackground.getHierarchy();
hierarchy.setBackgroundImage(mContext.getResources().getDrawable(resBackground));
mViewBinding.ivBackground.setHierarchy(hierarchy);
}
}
package com.xingdata.zzdpos.ui.settle.fragment;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentPayCashBinding;
import com.xingdata.zzdpos.model.Saleorder;
import com.xingdata.zzdpos.ui.settle.SettlePresenter;
import com.xingdata.zzdpos.ui.settle.view.InputerView;
import com.xingdata.zzdpos.util.ConvertUtil;
public class CashPayFragment extends BaseFragment<SettlePresenter, FragmentPayCashBinding> {
private InputerView<SettlePresenter> mInputerView = new InputerView<>();
private Long mOrderAmt;
@Override
public int getLayoutId() {
return R.layout.fragment_pay_cash;
}
@Override
public void initView() {
this.loadRootFragment(R.id.f_inputer, mInputerView);
mInputerView.setOnResultChangeListener(this::setOrderInfo);
mInputerView.setOnSettleClickListener(this::clickSettle);
mViewBinding.tvOrderAmt.setText(ConvertUtil.fenToYuan(mOrderAmt));
mViewBinding.tvPayAmt.setText(ConvertUtil.fenToYuan(mOrderAmt));
mViewBinding.tvChange.setText("---");
}
/**
* 加载订单信息
*
* @param saleorder 订单信息
*/
public void loadSaleorder(Saleorder saleorder) {
this.mOrderAmt = saleorder.getOrderPayAmt();
}
/**
* 界面设置
*
* @param payAmt 实付价格
*/
private void setOrderInfo(Long payAmt) {
mViewBinding.tvPayAmt.setText(ConvertUtil.fenToYuan(payAmt));
if (payAmt - mOrderAmt > 0) {
mViewBinding.tvChange.setText(ConvertUtil.fenToYuan(payAmt - mOrderAmt));
} else {
mViewBinding.tvChange.setText("---");
}
}
/**
* 点击结算
*
* @param payAmt 实付价格
*/
private void clickSettle(Long payAmt) {
if (payAmt - mOrderAmt >= 0) {
mPresenter.payInCash(payAmt, payAmt - mOrderAmt);
}
}
}
package com.xingdata.zzdpos.ui.settle.fragment;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentPayResultBinding;
import com.xingdata.zzdpos.model.Saleorder;
import com.xingdata.zzdpos.ui.settle.SettlePresenter;
public class PayResultFragment extends BaseFragment<SettlePresenter, FragmentPayResultBinding> {
private boolean mResult;
private Saleorder mSaleorder;
@Override
public int getLayoutId() {
return R.layout.fragment_pay_result;
}
@Override
public void initView() {
mViewBinding.setPayResult(mResult);
mViewBinding.tvCount.setText(mSaleorder.getGoodsCnt());
mViewBinding.tvOrderAmt.setText(mSaleorder.getPayAmt());
mViewBinding.tvType.setText(mSaleorder.getPayChannel());
mViewBinding.tvTime.setText(mSaleorder.getOrderTime());
mViewBinding.ivResult.setImageResource(mResult ? R.mipmap.ic_succeed : R.mipmap.ic_fail);
mViewBinding.btnConfirm.setOnClickListener(view -> {
if (mResult) mPresenter.clickComplete();
else mPresenter.clickRetry();
});
}
/**
* 设置订单信息
*
* @param saleorder 订单信息
* @return this
*/
public PayResultFragment setSaleorder(Saleorder saleorder) {
this.mSaleorder = saleorder;
return this;
}
/**
* 设置结果
*
* @param isSucc 是否成功
* @return this
*/
public PayResultFragment setResult(boolean isSucc) {
this.mResult = isSucc;
return this;
}
}
package com.xingdata.zzdpos.ui.settle.fragment;
import android.support.design.widget.BottomSheetBehavior;
import android.support.v7.widget.StaggeredGridLayoutManager;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentSettleBinding;
import com.xingdata.zzdpos.model.Pay;
import com.xingdata.zzdpos.model.Saleorder;
import com.xingdata.zzdpos.model.Vip;
import com.xingdata.zzdpos.ui.settle.SettlePresenter;
import com.xingdata.zzdpos.ui.settle.adapter.PayAdapter;
import com.xingdata.zzdpos.util.ConvertUtil;
import com.xingdata.zzdpos.util.RecyclerViewUtil;
import java.util.List;
public class SettleFragment extends BaseFragment<SettlePresenter, FragmentSettleBinding> {
private PayAdapter mPayAdapter;
@Override
public int getLayoutId() {
return R.layout.fragment_settle;
}
@Override
public void initView() {
mViewBinding.setDefualtVip(true);
// pay adapter
mPayAdapter = new PayAdapter();
mViewBinding.rlPay.setAdapter(mPayAdapter);
mViewBinding.rlPay.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));
mViewBinding.rlPay.addItemDecoration(new RecyclerViewUtil.GridSpacingItemDecoration(3, 20, true));
mPayAdapter.setOnItemClickListener((adapter, view, position) -> mPresenter.clickPayChannelView(mPayAdapter.getData().get(position).getPayType()));
// other listener
mViewBinding.clVip.setOnClickListener(view -> mPresenter.clickVipView());
mViewBinding.tvSettle.setOnClickListener(view -> BottomSheetBehavior.from(mViewBinding.llSheet).setState(BottomSheetBehavior.STATE_EXPANDED));
mPresenter.initSettle();
}
/**
* 加载会员
*
* @param vip 会员信息
*/
public void loadVip(Vip vip) {
mViewBinding.setDefualtVip(false);
mViewBinding.setName("张洋");
mViewBinding.setPhone("15201451212");
mViewBinding.setDisRate("8.5");
// mViewBinding.setDefualtVip(vip.isDefaultVip());
// mViewBinding.setName(vip.getVipName());
// mViewBinding.setPhone(ConvertUtil.longToString(vip.getVipMobile()));
// if (vip.getVipDefDiscount() < 100 && vip.getVipDefDiscount() > 0) {
// mViewBinding.setDisRate(String.valueOf((double) vip.getVipDefDiscount() / 10));
// }
}
/**
* 加载订单信息
*
* @param saleorder 订单信息
*/
public void loadSaleorder(Saleorder saleorder) {
mViewBinding.tvPayAmt.setText(ConvertUtil.fenToYuan(saleorder.getOrderPayAmt()));
}
/**
* 加载支付方式
*/
public void loadPays(List<Pay> pays) {
mPayAdapter.setNewData(pays);
}
}
package com.xingdata.zzdpos.ui.settle.view;
import android.view.View;
import android.widget.TextView;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.databinding.ViewInputerBinding;
import com.xingdata.zzdpos.util.ConvertUtil;
public class InputerView<P extends BasePresenter> extends BaseFragment<P, ViewInputerBinding> {
private String mValue;
private OnResultChangeListener mOnResultChangeListener;
private onSettleClickListener mOnSettleClickListener;
public InputerView() {
mValue = "";
}
public interface OnResultChangeListener {
void onResultChange(Long result);
}
public interface onSettleClickListener {
void onSettleClick(Long result);
}
@Override
public int getLayoutId() {
return R.layout.view_inputer;
}
@Override
public void initView() {
View.OnClickListener mOnClickListener = view -> {
switch (view.getId()) {
case R.id.tv_del:
delete();
break;
case R.id.tv_clear:
clear();
break;
case R.id.tv_settle:
settle();
break;
default:
if (view instanceof TextView) {
String str = ((TextView) view).getText().toString();
//限制位数
if (str.matches("[0-9]+") && mValue.split("[.]").length > 1 && mValue.split("[.]")[1].length() == 2)
return;
//限制小数点
if ((mValue.length() == 0 || mValue.contains(".")) && str.matches("[.]"))
return;
mValue += str;
}
break;
}
if (mOnResultChangeListener != null) {
mOnResultChangeListener.onResultChange(ConvertUtil.yuanToFen(mValue));
}
};
mViewBinding.setOnClick(mOnClickListener);
}
/**
* 删除
*/
private void delete() {
if (mValue.length() > 0) mValue = mValue.substring(0, mValue.length() - 1);
}
/**
* 结账
*/
private void settle() {
if (mOnSettleClickListener != null) {
mOnSettleClickListener.onSettleClick(ConvertUtil.yuanToFen(mValue));
}
}
/**
* 清空
*/
private void clear() {
mValue = "";
if (mOnResultChangeListener != null) {
mOnResultChangeListener.onResultChange(ConvertUtil.yuanToFen(mValue));
}
}
public void setOnResultChangeListener(OnResultChangeListener onResultChangeListener) {
this.mOnResultChangeListener = onResultChangeListener;
this.clear();
}
public void setOnSettleClickListener(onSettleClickListener onSettleClickListener) {
this.mOnSettleClickListener = onSettleClickListener;
}
}
package com.xingdata.zzdpos.ui.store;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.base.BaseView;
interface StoreContract {
interface View extends BaseView {
}
abstract class Presenter extends BasePresenter<View> {
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment