Commit aa43ab4d authored by 王海's avatar 王海

Merge remote-tracking branch 'origin/master'

parents 6cea6982 da655109
<component name="ProjectDictionaryState">
<dictionary name="Eurus">
<words>
<w>addr</w>
<w>alipay</w>
<w>appid</w>
<w>baozheng</w>
<w>caocao</w>
<w>chengyaojin</w>
<w>diaochan</w>
<w>exps</w>
<w>guanyu</w>
<w>hshop</w>
<w>huanggai</w>
<w>huangxin</w>
<w>inputer</w>
......@@ -20,11 +24,13 @@
<w>mawu</w>
<w>nong</w>
<w>patt</w>
<w>posppp</w>
<w>shixiu</w>
<w>skugrps</w>
<w>skus</w>
<w>strs</w>
<w>sunquan</w>
<w>unipay</w>
<w>xishi</w>
<w>yanqing</w>
<w>yuefei</w>
......
......@@ -9,6 +9,7 @@
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/pay" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
......
......@@ -4,6 +4,7 @@
<modules>
<module fileurl="file://$PROJECT_DIR$/TangKuPos.iml" filepath="$PROJECT_DIR$/TangKuPos.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/pay/pay.iml" filepath="$PROJECT_DIR$/pay/pay.iml" />
</modules>
</component>
</project>
\ No newline at end of file
......@@ -71,8 +71,8 @@ public class App extends Application {
.start();
// 初始化异常处理
initEx();
//初始化Frwagment框架
// initEx();
//初始化Fragment框架
initFragment();
//初始化数据库
......
......@@ -69,11 +69,11 @@ public class C {
/**
* 开发平台(开发人员使用)
*/
// public static final String BASE_URL = "http://demo.51zzd.cn:8080/";//开发测试平台
public static final String BASE_URL = "http://demo.51zzd.cn:8080/";//开发测试平台
/**
* 生产平台
*/
public static final String BASE_URL = "http://tk.51zzd.com/";
// public static final String BASE_URL = "http://tk.51zzd.com/";
private static final String PKG = "/tk/";
......@@ -298,6 +298,28 @@ public class C {
public static final String add = ROOT_URL + "add";
}
/**
* 付费相关接口
*/
public final class PAIDUP {
/**
* 付费规则查询
*/
public static final String getEnter = PKG + "/enter/query";
/**
* 开通营销
*/
public static final String activateMarketing = PKG + "/merchant/marketing";
/**
* 开通营销支付确认
*/
public static final String confirmMarketing = PKG + "/merchant/confirmMarketing";
/**
* 获取当前营销状态
*/
public static final String getMarketing = PKG + "/merchant/getMarketing";
}
public final class TICKET {
private static final String ROOT_URL = PKG + "ticket/";
......
......@@ -11,6 +11,7 @@ import com.xingdata.zzdpos.model.Category;
import com.xingdata.zzdpos.model.Gbound;
import com.xingdata.zzdpos.model.Mscard;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.PaidUpEnter;
import com.xingdata.zzdpos.model.Trule;
import com.xingdata.zzdpos.model.Ubound;
import com.xingdata.zzdpos.model.UsskuParam;
......@@ -565,7 +566,53 @@ public final class ApiFactory {
}
}
public static class PaidUp {
/**
* 付費規則查詢
*/
public static Observable<Pager<PaidUpEnter>> getEnter() {
return Api.getInstance().service.getEnter()
.onErrorReturn(new ErrorFilter<>())
.map(new ResultFilter<>())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
/**
* 查询营销
*/
public static Observable<Object> getMarketing() {
return Api.getInstance().service.getMarketing()
.onErrorReturn(new ErrorFilter<>())
.map(new ResultFilter<>())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
/**
* 开通营销
*/
public static Observable<Object> activateMarketing(Integer months, Integer years
) {
return Api.getInstance().service.activateMarketing(months, years)
.onErrorReturn(new ErrorFilter<>())
.map(new ResultFilter<>())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
/**
* 开通营销确认
*/
public static Observable<Object> confirmMarketing(String payNo, Integer operID
) {
return Api.getInstance().service.confirmMarketing(payNo, operID)
.onErrorReturn(new ErrorFilter<>())
.map(new ResultFilter<>())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}
public static class CsDetail {
/**
* 添加库存盘点详情
......
......@@ -15,6 +15,7 @@ import com.xingdata.zzdpos.model.Notice;
import com.xingdata.zzdpos.model.Oper;
import com.xingdata.zzdpos.model.Ossku;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.PaidUpEnter;
import com.xingdata.zzdpos.model.Pay;
import com.xingdata.zzdpos.model.Psb;
import com.xingdata.zzdpos.model.Saleorder;
......@@ -165,6 +166,18 @@ interface ApiService {
@POST(C.URL.FEED.add)
Observable<HttpMessage<Object>> addFeed(@Body Feed feed);
@POST(C.URL.PAIDUP.getEnter)
Observable<HttpMessage<Pager<PaidUpEnter>>> getEnter();
@POST(C.URL.PAIDUP.getMarketing)
Observable<HttpMessage<Object>> getMarketing();
@POST(C.URL.PAIDUP.activateMarketing)
Observable<HttpMessage<Object>> activateMarketing(@Query("months") Integer months, @Query("years") Integer years);
@POST(C.URL.PAIDUP.confirmMarketing)
Observable<HttpMessage<Object>> confirmMarketing(@Query("payNo") String payNo, @Query("openId") Integer openId);
@POST(C.URL.CSDETAIL.add)
Observable<HttpMessage<CsDetail>> addCsDetail(@Body CsDetail csDetail);
......
package com.xingdata.zzdpos.base;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.xingdata.zzdpos.R;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseMultiSelectAdapter<T, B extends ViewDataBinding> extends BaseQuickAdapter<T, BaseViewHolder> {
private List<Integer> mSelectedPositionList;
public BaseMultiSelectAdapter(int layoutResId, @Nullable List<T> data) {
super(layoutResId, data);
mSelectedPositionList = new ArrayList<>();
}
@Override
protected void convert(BaseViewHolder helper, T item) {
this.convert(helper, (B) helper.mViewBinding, mSelectedPositionList.contains(helper.getAdapterPosition()), item);
}
protected abstract void convert(BaseViewHolder helper, B mViewBinding, boolean isSelected, T item);
/**
* 获取所有选中的数据
*
* @return 选中的数据
*/
public List<T> getSelectedDatas() {
List<T> tList = new ArrayList<>();
for (int i = 0; i < getData().size(); i++) {
if (mSelectedPositionList.contains(i)) {
tList.add(getData().get(i));
}
}
return tList;
}
/**
* 选择全部,如果已经全选则全部取消
*/
public void selectAll() {
mSelectedPositionList = new ArrayList<>();
for (int i = 0; i < getData().size(); i++) {
mSelectedPositionList.add(i);
}
}
/**
* 选择某项数据
*
* @param position 要选定item的position
*/
public void select(int position) {
mSelectedPositionList.add(position);
}
/**
* 取消选择某项数据
*
* @param position 要取消的item的position
*/
public void deselect(int position) {
mSelectedPositionList.remove((Integer) position);
}
/**
* 反选
*
* @param position 要反选的item的position
*/
public void invert(int position) {
if (mSelectedPositionList.contains(position)) deselect(position);
else select(position);
}
@Override
protected View getItemView(int layoutResId, ViewGroup parent) {
ViewDataBinding binding = DataBindingUtil.inflate(mLayoutInflater, layoutResId, parent, false);
if (binding == null) return super.getItemView(layoutResId, parent);
View view = binding.getRoot();
view.setTag(R.id.BaseQuickAdapter_databinding_support, binding);
return view;
}
}
......@@ -6,6 +6,7 @@ import com.blankj.utilcode.util.TimeUtils;
import com.xingdata.zzdpos.App;
import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.base.BaseModel;
import com.xingdata.zzdpos.model.Gift;
import com.xingdata.zzdpos.model.HandoverInfo;
import com.xingdata.zzdpos.model.Level;
import com.xingdata.zzdpos.model.Ms;
......@@ -133,8 +134,8 @@ public class DBFactory {
* @return 商品分组
*/
public static Observable<List<Sskugrp>> querySkugrp() {
return Observable.just(DB.getInstance().get(StorePresenter.class).where(Sskugrp
.class).findAll())
return Observable.just(DB.getInstance().get(StorePresenter.class).where(Sskugrp.class)
.findAll())
.flatMap(sskugrps -> Observable.just(getList(sskugrps)));
}
......@@ -146,8 +147,8 @@ public class DBFactory {
* @return 商品名称
*/
public static String querySpuNameBySkuId(Long skuId) {
List<Sssku> ssskus = getList(DB.getInstance().get(StorePresenter.class).where(Sssku
.class).equalTo("skuId", skuId).findAll());
List<Sssku> ssskus = getList(DB.getInstance().get(StorePresenter.class).where(Sssku.class)
.equalTo("skuId", skuId).findAll());
if (ssskus.size() > 0) return ssskus.get(0).getSpuName();
else return null;
}
......@@ -161,20 +162,14 @@ public class DBFactory {
RealmQuery<Ms> query = DB.getInstance().get(StorePresenter.class).where(Ms.class);
query.equalTo("msStatus", 0);
query.notEqualTo("msTools", C.MS_TYPE.GIFT);
Long dateNow = Long.valueOf(TimeUtils.getNowString(new SimpleDateFormat("yyyyMMdd",
Locale.getDefault())));
query.beginGroup().lessThanOrEqualTo("msDateBegin", dateNow).greaterThanOrEqualTo
("msDateEnd", dateNow).endGroup();
Long dateNow = Long.valueOf(TimeUtils.getNowString(new SimpleDateFormat("yyyyMMdd", Locale.getDefault())));
query.beginGroup().lessThanOrEqualTo("msDateBegin", dateNow).greaterThanOrEqualTo("msDateEnd", dateNow).endGroup();
String weekNow = String.valueOf(TimeUtils.getWeekIndex(TimeUtils.getNowDate()));
query.contains("msWeekPlan", weekNow);
Long timeNow = Long.valueOf(TimeUtils.getNowString(new SimpleDateFormat("HHmmss",
Locale.getDefault())));
query.beginGroup().lessThanOrEqualTo("msTimeBegin", timeNow).greaterThanOrEqualTo
("msTimeEnd", timeNow).endGroup();
Long timeNow = Long.valueOf(TimeUtils.getNowString(new SimpleDateFormat("HHmmss", Locale.getDefault())));
query.beginGroup().lessThanOrEqualTo("msTimeBegin", timeNow).greaterThanOrEqualTo("msTimeEnd", timeNow).endGroup();
query.equalTo("msCoustomTag", 0);
......@@ -182,6 +177,22 @@ public class DBFactory {
return Observable.just(query.findAllSorted("msTouchTag2", Sort.DESCENDING))
.flatMap(ms -> Observable.just(getList(ms)));
}
/**
* 查询换购商品
*
* @param gifts 换购信息
* @return 换购信息列表(附带商品)
*/
public static Observable<List<Sssku>> queryGiftSkus(List<Gift> gifts) {
RealmQuery<Sssku> query = DB.getInstance().get(MainPresenter.class).where(Sssku.class);
for (int i = 0; i < gifts.size(); i++) {
if (i > 0) query.or();
query.equalTo("skuId", gifts.get(i).getSkuId());
}
return Observable.just(query.findAll()).flatMap(ssskus -> Observable.just(getList(ssskus)));
}
}
public static class Vip {
......
......@@ -3,15 +3,18 @@ package com.xingdata.zzdpos.model;
public class Gift {
public Gift(Long msId, Sssku sssku, Long addAmt) {
this.sssku = sssku;
public Gift(Long msId, Long skuId, Long addAmt, Long dateEnd) {
this.skuId = skuId;
this.msId = msId;
this.addAmt = addAmt;
this.dateEnd = dateEnd;
}
private Sssku sssku;
private Long msId;
private Long addAmt;
private Long skuId;
private Long dateEnd;
public Sssku getSssku() {
return sssku;
......@@ -37,4 +40,20 @@ public class Gift {
public void setAddAmt(Long addAmt) {
this.addAmt = addAmt;
}
public Long getSkuId() {
return skuId;
}
public void setSkuId(Long skuId) {
this.skuId = skuId;
}
public Long getDateEnd() {
return dateEnd;
}
public void setDateEnd(Long dateEnd) {
this.dateEnd = dateEnd;
}
}
......@@ -33,7 +33,7 @@ public class Ms extends RealmObject implements BaseModel, BaseBean {
public interface OnApplyListener {
void setDis(Ms ms);
void addGift(Long msId, Long skuId, long addAmt);
void addGift(Long msId, Long skuId, long addAmt, long dateEnd);
void removeGift(Long msId);
}
......@@ -73,7 +73,7 @@ public class Ms extends RealmObject implements BaseModel, BaseBean {
if (amt >= this.getPayAmt()) break;
}
if (amt >= this.getPayAmt()) {
onApplyListener.addGift(id, giftSkuId, giftSkuPrice);
onApplyListener.addGift(id, giftSkuId, giftSkuPrice, msDateEnd);
} else {
onApplyListener.removeGift(id);
}
......
package com.xingdata.zzdpos.model;
/**
* Created by Administrator on 2018/3/2.
*/
public class PaidUpEnter {
/**
* mssrvMapId : 1
* mssrvFree : 1
* mssrvPrice1 : 3000
* mssrvPrice2 : 36000
* vipLevelDef : 4
* ticketLevelDef : 9
* acctLevelDef : 2
* smsFee : 10
* updateTime : 1519808634000
* createTime : 1519808634000
* mssrvName : 开通优惠券
*/
private int mssrvMapId;
private int mssrvFree;
private int mssrvPrice1;
private int mssrvPrice2;
private int vipLevelDef;
private int ticketLevelDef;
private int acctLevelDef;
private int smsFee;
private long updateTime;
private long createTime;
private String mssrvName;
public int getMssrvMapId() {
return mssrvMapId;
}
public void setMssrvMapId(int mssrvMapId) {
this.mssrvMapId = mssrvMapId;
}
public int getMssrvFree() {
return mssrvFree;
}
public void setMssrvFree(int mssrvFree) {
this.mssrvFree = mssrvFree;
}
public int getMssrvPrice1() {
return mssrvPrice1;
}
public void setMssrvPrice1(int mssrvPrice1) {
this.mssrvPrice1 = mssrvPrice1;
}
public int getMssrvPrice2() {
return mssrvPrice2;
}
public void setMssrvPrice2(int mssrvPrice2) {
this.mssrvPrice2 = mssrvPrice2;
}
public int getVipLevelDef() {
return vipLevelDef;
}
public void setVipLevelDef(int vipLevelDef) {
this.vipLevelDef = vipLevelDef;
}
public int getTicketLevelDef() {
return ticketLevelDef;
}
public void setTicketLevelDef(int ticketLevelDef) {
this.ticketLevelDef = ticketLevelDef;
}
public int getAcctLevelDef() {
return acctLevelDef;
}
public void setAcctLevelDef(int acctLevelDef) {
this.acctLevelDef = acctLevelDef;
}
public int getSmsFee() {
return smsFee;
}
public void setSmsFee(int smsFee) {
this.smsFee = smsFee;
}
public long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(long updateTime) {
this.updateTime = updateTime;
}
public long getCreateTime() {
return createTime;
}
public void setCreateTime(long createTime) {
this.createTime = createTime;
}
public String getMssrvName() {
return mssrvName;
}
public void setMssrvName(String mssrvName) {
this.mssrvName = mssrvName;
}
}
......@@ -13,8 +13,10 @@ import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.ActivityMainBinding;
import com.xingdata.zzdpos.databinding.ItemMenuBottomBinding;
import com.xingdata.zzdpos.ui.dialog.PromptDialog;
import com.xingdata.zzdpos.ui.main.adapter.FragmentViewAdapter;
import com.xingdata.zzdpos.ui.main.dialog.HandoverDialog;
import com.xingdata.zzdpos.ui.main.dialog.PaidUpDialog;
import com.xingdata.zzdpos.ui.main.fragment.CasherFragment;
import com.xingdata.zzdpos.ui.main.fragment.MyselfFragment;
import com.xingdata.zzdpos.ui.main.fragment.ServiceFragment;
......@@ -44,6 +46,7 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
// private List<View> views=new ArrayList<>();
private List<ItemMenuBottomBinding> itemMenuBottomBindings = new ArrayList<>();
private HandoverDialog mHandoverDialog = new HandoverDialog();
private PaidUpDialog mPaidUpDialog = new PaidUpDialog();
@Override
public int getLayoutId() {
......@@ -52,6 +55,7 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
@Override
public void initView() {
mPresenter.getPaidUpEnter();
mainActivity = this;
mPresenter.initHandoverInfo();
List<BaseFragment> fragments = new ArrayList<>();
......@@ -181,6 +185,21 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
mHandoverDialog.show(this);
}
@Override
public void showPaidUpVipDialog(Class activity, Integer day) {
mPaidUpDialog.setDay(day);
mPaidUpDialog.setClass(activity);
mPaidUpDialog.show(this);
}
@Override
public void showMarketingResult() {
PromptDialog mPromptDialog = new PromptDialog();
mPromptDialog.setDialogType(PromptDialog.PROMPTDIALOG_SUCC, "开通成功");
mPromptDialog.setCustomButton("确定", view -> dismissAllDialog());
mPromptDialog.show((BaseActivity) ActivityUtils.getTopActivity(), 2);
}
@Override
public void onBackPressedSupport() {
if ((System.currentTimeMillis() - mExitTime) > 1500) {
......
......@@ -8,7 +8,9 @@ interface MainContract {
interface View extends BaseView {
void isShowLoading(Boolean is);
void showUptateDialog(String updateUrl, String version);
/**
* 交班确认
*/
......@@ -20,10 +22,34 @@ interface MainContract {
*/
void showHandoverDialog();
/**
* 显示会员续费页面
*/
void showPaidUpVipDialog(Class activity, Integer day);
/**
* 显示开通结果
*/
void showMarketingResult();
}
abstract class Presenter extends BasePresenter<View> {
/**
* 查詢會員规则
*/
public abstract void getPaidUpEnter();
/**
* 查詢會員付費
*/
public abstract void isPaidUpVip(Class activity);
/**
* 开通营销
*/
public abstract void activateMarketing(Integer months, Integer years);
/**
* 菜单EXIT页面 - 点击交班 打开交班报表页面
......
package com.xingdata.zzdpos.ui.main;
import android.os.Message;
import android.view.KeyEvent;
import com.alibaba.fastjson.JSON;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.SPUtils;
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.api.ApiFactory;
import com.xingdata.zzdpos.db.DBFactory;
import com.xingdata.zzdpos.model.HandoverInfo;
import com.xingdata.zzdpos.model.PaidUpEnter;
import com.xingdata.zzdpos.ui.login.LoginPresenter;
import com.xingdata.zzdpos.util.SystemUtil;
......@@ -30,7 +24,7 @@ import io.reactivex.ObservableSource;
import io.reactivex.functions.Function;
public class MainPresenter extends MainContract.Presenter {
public static PaidUpEnter mPaidUpEnter;
public static HandoverInfo handoverInfo;
......@@ -39,9 +33,66 @@ public class MainPresenter extends MainContract.Presenter {
this.initRealm();
}
@Override
public void getPaidUpEnter() {
ApiFactory.PaidUp.getEnter()
.subscribe(paidUpEnterPager -> {
if (paidUpEnterPager.getList().size() != 0) {
this.mPaidUpEnter = paidUpEnterPager.getList().get(0);
}
}
, throwable -> {
ToastUtils.showShort(throwable.getMessage());
}
);
}
@Override
public void isPaidUpVip(Class activity) {
ApiFactory.PaidUp.getMarketing()
.subscribe(object -> {
if (object.toString().length() == 0) {
mView.showPaidUpVipDialog(activity, null);
} else {
Long time = JSON.parseObject(object.toString()).getLong("openExp");
Integer day = (int) ((time - System.currentTimeMillis()) / 86400000L);
if (day <= 7) {
mView.showPaidUpVipDialog(activity, day);
} else {
ActivityUtils.startActivity(activity);
}
}
}
, throwable -> {
ToastUtils.showShort(throwable.getMessage());
}
);
}
@Override
public void activateMarketing(Integer months, Integer years) {
mView.isShowLoading(true);
ApiFactory.PaidUp.activateMarketing(months, years).doFinally(() -> mView.isShowLoading(false))
.subscribe(object -> {
mView.showMarketingResult();
}
, throwable -> {
ToastUtils.showShort(throwable.getMessage());
}
);
}
@Override
public void clickHandover() {
mView.showHandoverDialog();
}
......
package com.xingdata.zzdpos.ui.main.dialog;
import android.text.Html;
import android.view.View;
import com.blankj.utilcode.util.ActivityUtils;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseDialog;
import com.xingdata.zzdpos.databinding.DialogPaidUpBinding;
import com.xingdata.zzdpos.model.PaidUpEnter;
import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.ui.marketing.marketingMenu.MarketingMenuPresenter;
import com.xingdata.zzdpos.util.ConvertUtil;
/**
* 交班页面
*/
public class PaidUpDialog extends BaseDialog<MainPresenter, DialogPaidUpBinding> {
private Boolean isNew = true;
private Integer day;
private Class mClass;
public void setDay(Integer integer) {
this.day = integer;
}
public void setClass(Class mClass) {
this.mClass = mClass;
}
@Override
public int getLayoutId() {
return R.layout.dialog_paid_up;
}
@Override
public int getTitle() {
return -1;
}
@Override
public void onCancelClick(View view) {
super.onCancelClick(view);
if (!isNew) {
if (mClass != null) {
ActivityUtils.startActivity(mClass);
} else {
mPresenter.clickHandover();
}
}
}
@Override
public void onConfirmClick(View view) {
super.onConfirmClick(view);
if (isNew) {
mPresenter.activateMarketing(null, null);
dismiss();
} else {
mViewBinding.tvLine1.setVisibility(View.GONE);
mViewBinding.setIsShow(false);
}
}
@Override
public void initView() {
mViewBinding.setIsShow(true);
if (MainPresenter.mPaidUpEnter != null) {
setPaidUpEnter(MainPresenter.mPaidUpEnter);
}
}
public void setPaidUpEnter(PaidUpEnter paidUpEnter) {
if (day != null) {
if (day < 0) {
day = 0;
}
mViewBinding.tvLine1.setText(Html.fromHtml("<big><font color=\"black\">高级功能体验剩余</font></big>" +
"<big><big><big><font color=\"red\">" + day + "</font></big></big></big>" + "<big><font color=\"black\">天</font></big>"));
setBtnName("继续使用", "续费");
isNew = false;
} else {
mViewBinding.tvLine1.setText(Html.fromHtml("<big><font color=\"black\">高级功能可试用</font></big>" +
"<big><big><big><font color=\"red\">" + paidUpEnter.getMssrvFree() + "</font></big></big></big>" + "<big><font color=\"black\">月</font></big>"));
setBtnName("暂不试用", "开始试用");
isNew = true;
}
mViewBinding.tvLine2.setText(Html.fromHtml("<big><font color=\"black\">服务费:¥</font></big>" +
"<big><big><big><font color=\"black\">" + ConvertUtil.fenToYuan(Long.valueOf(paidUpEnter.getMssrvPrice2()), false) + "/年" + "</font></big></big></big>"));
}
}
......@@ -19,6 +19,7 @@ import com.xingdata.zzdpos.ui.main.adapter.MenuRecyclerAdapter;
import com.xingdata.zzdpos.ui.manage.manageMenu.ManageMenuActivity;
import com.xingdata.zzdpos.ui.marketing.marketingMenu.MarketingMenuActivity;
import com.xingdata.zzdpos.ui.payment.PaymentActivity;
import com.xingdata.zzdpos.ui.sendticke.SendTicketActivity;
import com.xingdata.zzdpos.ui.statistics.StatisticsActivity;
import com.xingdata.zzdpos.ui.store.StoreActivity;
import com.xingdata.zzdpos.ui.vip.VipActivity;
......@@ -130,7 +131,7 @@ public class CasherFragment extends BaseFragment<MainPresenter, FragmentCasherBi
MarketingMenuActivity.class));
break;
case C.MENU.MENU_TICKET://优惠券
ActivityUtils.startActivity(getActivity(), com.xingdata.zzdpos.ui.sendticke.SendTicketActivity.class);
mPresenter.isPaidUpVip(SendTicketActivity.class);
break;
case C.MENU.MENU_STATISTICS://统计
ActivityUtils.startActivity(getActivity(), StatisticsActivity.class);
......@@ -158,7 +159,7 @@ public class CasherFragment extends BaseFragment<MainPresenter, FragmentCasherBi
mViewBinding.btnHandover.setOnClickListener(new OnClickListener() {
@Override
protected void myOnClickListener(View v) {
mPresenter.clickHandover();
mPresenter.isPaidUpVip(null);
}
});
......
......@@ -33,7 +33,7 @@ public class InventoryActivity extends BaseActivity<InventoryPresenter, Activity
private InventoryFragment mInventoryFragment = new InventoryFragment();
private ManageDateFragment mManageDateFragment = new ManageDateFragment();
private InventoryAddFragment mInventoryAddFragment;
;
private ScanFragment mScanFragment;
@Override
......
......@@ -275,7 +275,6 @@ public class SsskuPresenter extends SsskuContract.Presenter {
public void doOnFinish() {
if (!isNeedSync) return;
final double[] nowPro = {0.0};
mView.showLoadingDialog();
SPUtils.getInstance().put(SplashActivity.SYNCHRONOUSERRORCODE, "");
SPUtils.getInstance().put(SplashActivity.SYNCHRONOUSERRORMSG, "");
for (int i = 0; i < SplashPresenter.listSync.size(); i++) {
......@@ -283,9 +282,6 @@ public class SsskuPresenter extends SsskuContract.Presenter {
@Override
public void getPro(double pro) {
nowPro[0] += pro;
if (nowPro[0] >= 100) {
mView.dismissLoadingDialog();
}
}
@Override
......
......@@ -10,8 +10,11 @@ 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.BaseActivity;
import com.xingdata.zzdpos.databinding.ActivityMarketingMenuBinding;
import com.xingdata.zzdpos.model.MarketingMenuModel;
import com.xingdata.zzdpos.ui.dialog.PromptDialog;
import com.xingdata.zzdpos.ui.main.dialog.PaidUpDialog;
import com.xingdata.zzdpos.ui.marketing.integral.IntegralActivity;
import com.xingdata.zzdpos.ui.marketing.marketingMenu.adapter.MarketingMenuAdapter;
import com.xingdata.zzdpos.ui.marketing.ms.MsActivity;
......@@ -24,14 +27,19 @@ import com.xingdata.zzdpos.util.RecyclerViewUtil;
import java.util.ArrayList;
import java.util.List;
public class MarketingMenuActivity extends AppCompatActivity {
public class MarketingMenuActivity extends BaseActivity<MarketingMenuPresenter, ActivityMarketingMenuBinding> implements MarketingMenuContract.View {
MarketingMenuAdapter marketingMenuAdapter;
List<Integer> list = new ArrayList<>();
private PaidUpDialog mPaidUpDialog = new PaidUpDialog();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_marketing_menu);
public int getLayoutId() {
return R.layout.activity_marketing_menu;
}
@Override
public void initView() {
ActivityMarketingMenuBinding mViewBinding = DataBindingUtil.setContentView(
this, R.layout.activity_marketing_menu);
......@@ -70,17 +78,20 @@ public class MarketingMenuActivity extends AppCompatActivity {
break;
case C.MENU.MENU_MS_TICKET: {
//优惠券设置
ActivityUtils.startActivity(ReturnTicketActivity.class);
mPresenter.isPaidUpVip(ReturnTicketActivity.class);
}
break;
case C.MENU.MENU_MS_RECHARGE: {
//充值优惠
ActivityUtils.startActivity(RechargeRuleActivity.class);
mPresenter.isPaidUpVip(RechargeRuleActivity.class);
}
break;
case C.MENU.MENU_MS_MS: {
//营销计划
ActivityUtils.startActivity(MsActivity.class);
mPresenter.isPaidUpVip(MsActivity.class);
}
break;
case C.MENU.MENU_MS_SMS: {
......@@ -95,4 +106,29 @@ public class MarketingMenuActivity extends AppCompatActivity {
}
});
}
@Override
public void showPaidUpVipDialog(Class activity, Integer day) {
mPaidUpDialog.setDay(day);
mPaidUpDialog.setClass(activity);
mPaidUpDialog.show(this);
}
@Override
public void showMarketingResult() {
PromptDialog mPromptDialog = new PromptDialog();
mPromptDialog.setDialogType(PromptDialog.PROMPTDIALOG_SUCC, "开通成功");
mPromptDialog.setCustomButton("确定", view -> dismissAllDialog());
mPromptDialog.show((BaseActivity) ActivityUtils.getTopActivity(), 2);
}
@Override
public void isShowLoading(Boolean is) {
if (is) {
mLoadingDialog.show((BaseActivity) mContext);
} else {
if (mLoadingDialog.isShowing) {
mLoadingDialog.dismiss();
}
}
}
}
package com.xingdata.zzdpos.ui.marketing.marketingMenu;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.base.BaseView;
interface MarketingMenuContract {
interface View extends BaseView {
/**
* 显示读取对话框
*/
void isShowLoading(Boolean is);
/**
* 显示会员续费页面
*/
void showPaidUpVipDialog(Class activity, Integer day);
/**
* 显示开通结果
*/
void showMarketingResult();
}
abstract class Presenter extends BasePresenter<View> {
/**
* 查詢會員规则
*/
public abstract void getPaidUpEnter();
/**
* 查詢會員付費
*/
public abstract void isPaidUpVip(Class activity);
/**
* 开通营销
*/
public abstract void activateMarketing(Integer months, Integer years);
}
}
package com.xingdata.zzdpos.ui.marketing.marketingMenu;
import com.alibaba.fastjson.JSON;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xingdata.zzdpos.api.ApiFactory;
import com.xingdata.zzdpos.ui.main.MainPresenter;
public class MarketingMenuPresenter extends MarketingMenuContract.Presenter {
@Override
public void getPaidUpEnter() {
ApiFactory.PaidUp.getEnter()
.subscribe(paidUpEnterPager -> {
if (paidUpEnterPager.getList().size() != 0) {
MainPresenter.mPaidUpEnter = paidUpEnterPager.getList().get(0);
}
}
, throwable -> {
ToastUtils.showShort(throwable.getMessage());
}
);
}
@Override
public void isPaidUpVip(Class activity) {
ApiFactory.PaidUp.getMarketing()
.subscribe(object -> {
if (object.toString().length() == 0) {
mView.showPaidUpVipDialog(activity, null);
} else {
Long time = JSON.parseObject(object.toString()).getLong("openExp");
Integer day = (int) ((time - System.currentTimeMillis()) / 86400000L);
if (day <= 7) {
mView.showPaidUpVipDialog(activity, day);
} else {
ActivityUtils.startActivity(activity);
}
}
}
, throwable -> {
ToastUtils.showShort(throwable.getMessage());
}
);
}
@Override
public void activateMarketing(Integer months, Integer years) {
mView.isShowLoading(true);
ApiFactory.PaidUp.activateMarketing(months, years).doFinally(() -> mView.isShowLoading(false))
.subscribe(object -> {
mView.showMarketingResult();
}
, throwable -> {
ToastUtils.showShort(throwable.getMessage());
}
);
}
@Override
public void onAttached() {
}
}
\ No newline at end of file
......@@ -201,7 +201,6 @@ public class MsPresenter<Sku extends BaseSku> extends MsContract.Presenter<Sku>
public void doOnFinish() {
if (!isNeedSync) return;
final double[] nowPro = {0.0};
mView.showLoadingDialog();
SPUtils.getInstance().put(SplashActivity.SYNCHRONOUSERRORCODE, "");
SPUtils.getInstance().put(SplashActivity.SYNCHRONOUSERRORMSG, "");
for (int i = 0; i < SplashPresenter.listSync.size(); i++) {
......@@ -209,9 +208,6 @@ public class MsPresenter<Sku extends BaseSku> extends MsContract.Presenter<Sku>
@Override
public void getPro(double pro) {
nowPro[0] += pro;
if (nowPro[0] >= 100) {
mView.dismissLoadingDialog();
}
}
@Override
......
......@@ -81,7 +81,7 @@ public class SettlePresenter extends SettleContract.Presenter {
}
@Override
public void addGift(Long msId, Long skuId, long addAmt) {
public void addGift(Long msId, Long skuId, long addAmt, long dateEnd) {
//这一版不做处理
}
......
......@@ -23,6 +23,7 @@ import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseActivity;
import com.xingdata.zzdpos.base.BaseSku;
import com.xingdata.zzdpos.databinding.ActivityStoreBinding;
import com.xingdata.zzdpos.model.Gift;
import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.Saledetail;
......@@ -33,6 +34,7 @@ import com.xingdata.zzdpos.ui.scan.ScanFragment;
import com.xingdata.zzdpos.ui.settle.SettleActivity;
import com.xingdata.zzdpos.ui.store.dialog.CartDialog;
import com.xingdata.zzdpos.ui.store.dialog.MsDialog;
import com.xingdata.zzdpos.ui.store.fragment.GiftFragment;
import com.xingdata.zzdpos.ui.store.fragment.SearchFragment;
import com.xingdata.zzdpos.ui.store.fragment.StoreFragment;
import com.xingdata.zzdpos.util.Global;
......@@ -46,6 +48,7 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin
private StoreFragment mStoreFragment = new StoreFragment();
private SearchFragment mSearchFragment = new SearchFragment();
private ScanFragment mScanFragment = new ScanFragment();
private GiftFragment mGiftFragment = new GiftFragment();
private CartDialog mCartDialog = new CartDialog();
private MsDialog mMsDialog = new MsDialog();
......@@ -77,12 +80,14 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin
);
mViewBinding.btnPayment.setOnClickListener(view -> {
//显示价格输入页面以添加无码商品
Intent intent = new Intent(StoreActivity.this, PaymentActivity.class);
intent.putExtra(C.SP_KEY.SETTLE_MODE, C.SETTLE_MODE.STORE);
ActivityUtils.startActivity(intent);
});
mScanFragment.setOnScanCompletedListener(barcode -> mPresenter.scanComplete(barcode));
}
@Override
......@@ -163,6 +168,11 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin
ActivityUtils.startActivity(intent);
}
@Override
public void showGiftFragment(List<Gift> gifts) {
this.start(mGiftFragment);
}
@Override
public void showSearchFragment() {
if (!mSearchFragment.isAdded()) {
......@@ -206,6 +216,11 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin
r.play();
}
@Override
public void loadGifts(List<Gift> gifts) {
mGiftFragment.loadGifts(gifts);
}
/**
* 执行抖动动画
......
......@@ -3,6 +3,7 @@ package com.xingdata.zzdpos.ui.store;
import com.xingdata.zzdpos.base.BasePresenter;
import com.xingdata.zzdpos.base.BaseSku;
import com.xingdata.zzdpos.base.BaseView;
import com.xingdata.zzdpos.model.Gift;
import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.model.Pager;
import com.xingdata.zzdpos.model.Saledetail;
......@@ -106,6 +107,13 @@ interface StoreContract {
*/
void showSettle(List<Saledetail> saledetails);
/**
* 显示换购页面
*
* @param gifts 换购信息列表
*/
void showGiftFragment(List<Gift> gifts);
/**
* 显示搜索页面
*/
......@@ -139,6 +147,11 @@ interface StoreContract {
* @param result 提示音
*/
void startAlarm(boolean result);
/**
* 加载换购信息
*/
void loadGifts(List<Gift> gifts);
}
abstract class Presenter extends BasePresenter<View> {
......@@ -246,6 +259,12 @@ interface StoreContract {
* @param b 获取焦点
*/
public abstract void searchBarFocusChanged(boolean b);
/**
* 换购页面 - 初始化
*/
public abstract void initGift();
}
}
......@@ -3,6 +3,7 @@ package com.xingdata.zzdpos.ui.store;
import com.xingdata.zzdpos.base.BaseSku;
import com.xingdata.zzdpos.db.DB;
import com.xingdata.zzdpos.db.DBFactory;
import com.xingdata.zzdpos.model.Gift;
import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.model.Saledetail;
import com.xingdata.zzdpos.model.Saleorder;
......@@ -32,6 +33,11 @@ public class StorePresenter extends StoreContract.Presenter {
*/
private List<Saledetail> mSaledetails;
/**
* 换购商品列表
*/
private List<Gift> mGiftList;
/**
* 当前营销计划
*/
......@@ -47,11 +53,10 @@ public class StorePresenter extends StoreContract.Presenter {
@Override
public void onAttached() {
this.initRealm();
mVip = Vip.createDefault();
mSaledetails = new ArrayList<>();
mGiftList = new ArrayList<>();
mSaleorder = new Saleorder();
mOnApplyListener = new Ms.OnApplyListener() {
@Override
public void setDis(Ms ms) {
......@@ -59,13 +64,18 @@ public class StorePresenter extends StoreContract.Presenter {
}
@Override
public void addGift(Long msId, Long skuId, long addAmt) {
//这一版不做处理
public void addGift(Long msId, Long skuId, long addAmt, long dateEnd) {
mGiftList.add(new Gift(msId, skuId, addAmt, dateEnd));
}
@Override
public void removeGift(Long msId) {
//这一版不作处理
for (int i = 0; i < mGiftList.size(); i++) {
if (mGiftList.get(i).getMsId().longValue() == msId) {
mGiftList.remove(i);
break;
}
}
}
};
}
......@@ -73,8 +83,12 @@ public class StorePresenter extends StoreContract.Presenter {
@Override
public void clickSettle() {
if (mSaledetails.size() == 0) return;
if (mGiftList.size() > 0) {
mView.showGiftFragment(mGiftList);
} else {
mView.showSettle(mSaledetails);
}
}
@Override
public void clickCartLogo() {
......@@ -200,6 +214,21 @@ public class StorePresenter extends StoreContract.Presenter {
if (b) mView.showSearchFragment();
}
@Override
public void initGift() {
mCompositeDisposable.add(DBFactory.Store.queryGiftSkus(mGiftList).subscribe(ssskus -> {
for (int i = 0; i < ssskus.size(); i++) {
for (int j = 0; j < mGiftList.size(); j++) {
if (ssskus.get(i).getSkuId().longValue() == mGiftList.get(j).getSkuId()) {
mGiftList.get(j).setSssku(ssskus.get(i));
break;
}
}
}
mView.loadGifts(mGiftList);
}));
}
/**
* 获取商品分组
......
package com.xingdata.zzdpos.ui.store.adapter;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseMultiSelectAdapter;
import com.xingdata.zzdpos.base.BaseViewHolder;
import com.xingdata.zzdpos.databinding.ItemStoreGiftBinding;
import com.xingdata.zzdpos.model.Gift;
import com.xingdata.zzdpos.util.ConvertUtil;
import java.util.ArrayList;
public class GiftAdapter extends BaseMultiSelectAdapter<Gift, ItemStoreGiftBinding> {
public GiftAdapter() {
super(R.layout.item_store_gift, new ArrayList<>());
}
@Override
protected void convert(BaseViewHolder helper, ItemStoreGiftBinding mViewBinding, boolean isSelected, Gift item) {
mViewBinding.tvName.setText(item.getSssku().getSpuName());
mViewBinding.tvOriginalPrice.setText(ConvertUtil.fenToYuan(item.getSssku().getSkuRetailPrice1(), true));
StringBuilder sbDateEnd = new StringBuilder(item.getDateEnd().toString());
sbDateEnd.insert(6, "-");
sbDateEnd.insert(4, "-");
mViewBinding.tvDateEnd.setText("换购截止:" + sbDateEnd.toString());
mViewBinding.tvAmt.setText(ConvertUtil.fenToYuanNoZero(item.getAddAmt()) + "元");
mViewBinding.ivChecked.setImageResource(isSelected ? R.mipmap.radio_select_bg : R.mipmap.radio_normal_bg);
}
}
......@@ -86,7 +86,8 @@ public class MsAdapter extends BaseAdapter<Ms, ItemStoreMsBinding> {
strType = mContext.getString(R.string.ms_type_money_off_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftOffAmt()));
break;
case C.MS_TYPE.GIFT:
strType = mContext.getString(R.string.ms_type_gift_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftSkuPrice()), ms.getGiftSkuName());
String spuName = DBFactory.Store.querySpuNameBySkuId(ms.getGiftSkuId());
strType = mContext.getString(R.string.ms_type_gift_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftSkuPrice()), spuName);
break;
}
......
package com.xingdata.zzdpos.ui.store.fragment;
import android.support.v7.widget.LinearLayoutManager;
import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentStoreGiftBinding;
import com.xingdata.zzdpos.model.Gift;
import com.xingdata.zzdpos.ui.store.StorePresenter;
import com.xingdata.zzdpos.ui.store.adapter.GiftAdapter;
import java.util.List;
public class GiftFragment extends BaseFragment<StorePresenter, FragmentStoreGiftBinding> {
private GiftAdapter mGiftAdapter;
@Override
public int getLayoutId() {
return R.layout.fragment_store_gift;
}
@Override
public void initView() {
// init gift
mGiftAdapter = new GiftAdapter();
mViewBinding.rlGift.setAdapter(mGiftAdapter);
mViewBinding.rlGift.setLayoutManager(new LinearLayoutManager(mContext));
mGiftAdapter.setOnItemClickListener((adapter, view, position) -> {
mGiftAdapter.invert(position);
mGiftAdapter.notifyItemChanged(position);
});
// init data
mPresenter.initGift();
}
/**
* 加载换购商品信息
*
* @param gifts 换购商品
*/
public void loadGifts(List<Gift> gifts) {
mGiftAdapter.setNewData(gifts);
}
}
......@@ -197,7 +197,8 @@ public class StoreFragment extends BaseFragment<StorePresenter, FragmentStoreBin
strType = getString(R.string.ms_type_money_off_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftOffAmt()));
break;
case C.MS_TYPE.GIFT:
strType = getString(R.string.ms_type_gift_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftSkuPrice()), ms.getGiftSkuName());
String spuName = DBFactory.Store.querySpuNameBySkuId(ms.getGiftSkuId());
strType = getString(R.string.ms_type_gift_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftSkuPrice()), spuName);
break;
}
......
......@@ -57,8 +57,8 @@ public final class SystemUtil {
e.printStackTrace();
}
}
// return deviceSN;
return "test01";
// return "0818562";
return "test8988";
}
/**
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="isShow"
type="Boolean" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_caocao"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:paddingTop="@dimen/all_margin">
<TextView
android:id="@+id/tv_line_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" />
<TextView
android:id="@+id/tv_line_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" />
<View
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="@dimen/view_line_L1"
android:layout_marginTop="@dimen/all_margin"
android:background="@color/lyt_main_bg"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_line_2" />
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/all_margin"
android:visibility="@{isShow?View.VISIBLE:View.GONE}">
<ImageView
android:id="@+id/img_model_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_manager_ticket" />
<TextView
android:id="@+id/tv_model_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_padding"
android:text="@string/paid_up_vip_model1"
android:textColor="@color/black_baozheng"
android:textSize="@dimen/all_text_size"
app:layout_constraintStart_toEndOf="@id/img_model_one"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_padding"
android:layout_marginTop="@dimen/all_padding"
android:text="@string/paid_up_vip_model1_detail"
android:textColor="@color/gary"
android:textSize="@dimen/all_text_size_low"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/img_model_one"
app:layout_constraintTop_toBottomOf="@id/tv_model_one" />
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/all_margin"
android:visibility="@{isShow?View.VISIBLE:View.GONE}">
<ImageView
android:id="@+id/img_model_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/top_up_preferential" />
<TextView
android:id="@+id/tv_model_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_padding"
android:text="@string/paid_up_vip_model2"
android:textColor="@color/black_baozheng"
android:textSize="@dimen/all_text_size"
app:layout_constraintStart_toEndOf="@id/img_model_two"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/paid_up_vip_model2_detail"
android:textColor="@color/gary"
android:textSize="@dimen/all_text_size_low"
android:layout_marginStart="@dimen/all_padding"
android:layout_marginTop="@dimen/all_padding"
app:layout_constraintTop_toBottomOf="@id/tv_model_two"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/img_model_two"
/>
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/all_margin"
android:visibility="@{isShow?View.VISIBLE:View.GONE}">
<ImageView
android:id="@+id/img_model_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/marketing_plan" />
<TextView
android:id="@+id/tv_model_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_padding"
android:text="@string/paid_up_vip_model3"
android:textColor="@color/black_baozheng"
android:textSize="@dimen/all_text_size"
app:layout_constraintStart_toEndOf="@id/img_model_three"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_padding"
android:layout_marginTop="@dimen/all_padding"
app:layout_constraintEnd_toEndOf="parent"
android:text="@string/paid_up_vip_model1_detail"
android:textColor="@color/gary"
android:textSize="@dimen/all_text_size_low"
app:layout_constraintStart_toEndOf="@id/img_model_three"
app:layout_constraintTop_toBottomOf="@id/tv_model_three" />
</android.support.constraint.ConstraintLayout>
</LinearLayout>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gray_zhouyu"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rl_gift"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white_caocao"
android:paddingEnd="@null"
android:paddingStart="@dimen/all_margin">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iv_pic"
android:layout_width="80dp"
android:layout_height="80dp"
app:failureImage="@mipmap/icon_goods_default"
app:layout_constraintBottom_toBottomOf="@+id/ll_price"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_name"
app:placeholderImage="@mipmap/icon_goods_default"
app:roundedCornerRadius="@dimen/all_shape_radius" />
<ImageView
android:id="@+id/iv_checked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/all_margin"
android:src="@mipmap/radio_select_bg"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/tv_name"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="parent" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_margin"
android:layout_marginTop="@dimen/all_margin"
android:lines="2"
android:text="维达纸巾"
android:textColor="@color/black_baozheng"
android:textSize="@dimen/all_text_size"
android:textStyle="bold"
app:layout_constraintLeft_toRightOf="@id/iv_pic"
app:layout_constraintRight_toLeftOf="@id/iv_checked"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_date_end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="截止时间 : 2017-01-02"
android:textColor="@color/red_guanyu"
android:textSize="@dimen/all_caption_size"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/tv_name" />
<TextView
android:id="@+id/tv_original_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/all_spacing"
android:text="原价 : ¥10.0"
android:textSize="@dimen/all_caption_size"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/tv_date_end" />
<LinearLayout
android:id="@+id/ll_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/tv_original_price">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加"
android:textSize="@dimen/all_caption_size" />
<TextView
android:id="@+id/tv_amt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/all_spacing"
android:layout_marginStart="@dimen/all_spacing"
android:text="4元"
android:textColor="@color/red_guanyu"
android:textSize="@dimen/all_text_size"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="换购"
android:textSize="@dimen/all_caption_size" />
</LinearLayout>
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="@dimen/all_line_width"
android:layout_marginTop="@dimen/all_margin"
android:background="@color/gray_kongming"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_price" />
</android.support.constraint.ConstraintLayout>
</layout>
......@@ -741,5 +741,12 @@
<string name="search_action">搜索</string>
<string name="search_clear">清空</string>
<!--续费会员-->
<string name="paid_up_vip_model1">优惠券设置</string>
<string name="paid_up_vip_model1_detail">设置优惠券面值,通过优惠券方式吸引回头客</string>
<string name="paid_up_vip_model2">充值优惠</string>
<string name="paid_up_vip_model2_detail">设置充值优惠金额,多充多送,让更多会员加入我们</string>
<string name="paid_up_vip_model3">营销计划</string>
<string name="paid_up_vip_model4_detail">提前设置打折、促销、满减、换购等优惠活动,不错过每一个节日</string>
<string name="paid_up_pay_hint">请选择支付方式</string>
</resources>
apply plugin: 'com.android.library'
android {
compileSdkVersion 26
defaultConfig {
minSdkVersion 25
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
package com.xingdata.zxpay;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.xingdata.zxpay.test", appContext.getPackageName());
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xingdata.zxpay" />
public class C {
}
package com.xingdata.zxpay.model;
import android.support.annotation.Nullable;
import java.util.Date;
public class Host {
private Integer hostMapId;
@Nullable
private String hostName;
@Nullable
private String hostAddr;
@Nullable
private String hostPort;
@Nullable
private Byte hostStatus;
@Nullable
private String hostCompany;
@Nullable
private String hostLawyer;
@Nullable
private String hostLawyerContact;
@Nullable
private String hostContractNumber;
@Nullable
private Long hostCostsRate;
@Nullable
private Long hostClearDate;
@Nullable
private Long hostTotalAmt;
@Nullable
private String hostKeyWechat;
@Nullable
private String hostKeyAlipay;
@Nullable
private String hostKeyUnipay;
@Nullable
private String hostNotiUrl;
@Nullable
private String hostAcqCode;
private Date updateTime;
private Date createTime;
public Integer getHostMapId() {
return hostMapId;
}
public void setHostMapId(Integer hostMapId) {
this.hostMapId = hostMapId;
}
@Nullable
public String getHostName() {
return hostName;
}
public void setHostName(@Nullable String hostName) {
this.hostName = hostName;
}
@Nullable
public String getHostAddr() {
return hostAddr;
}
public void setHostAddr(@Nullable String hostAddr) {
this.hostAddr = hostAddr;
}
@Nullable
public String getHostPort() {
return hostPort;
}
public void setHostPort(@Nullable String hostPort) {
this.hostPort = hostPort;
}
@Nullable
public Byte getHostStatus() {
return hostStatus;
}
public void setHostStatus(@Nullable Byte hostStatus) {
this.hostStatus = hostStatus;
}
@Nullable
public String getHostCompany() {
return hostCompany;
}
public void setHostCompany(@Nullable String hostCompany) {
this.hostCompany = hostCompany;
}
@Nullable
public String getHostLawyer() {
return hostLawyer;
}
public void setHostLawyer(@Nullable String hostLawyer) {
this.hostLawyer = hostLawyer;
}
@Nullable
public String getHostLawyerContact() {
return hostLawyerContact;
}
public void setHostLawyerContact(@Nullable String hostLawyerContact) {
this.hostLawyerContact = hostLawyerContact;
}
@Nullable
public String getHostContractNumber() {
return hostContractNumber;
}
public void setHostContractNumber(@Nullable String hostContractNumber) {
this.hostContractNumber = hostContractNumber;
}
@Nullable
public Long getHostCostsRate() {
return hostCostsRate;
}
public void setHostCostsRate(@Nullable Long hostCostsRate) {
this.hostCostsRate = hostCostsRate;
}
@Nullable
public Long getHostClearDate() {
return hostClearDate;
}
public void setHostClearDate(@Nullable Long hostClearDate) {
this.hostClearDate = hostClearDate;
}
@Nullable
public Long getHostTotalAmt() {
return hostTotalAmt;
}
public void setHostTotalAmt(@Nullable Long hostTotalAmt) {
this.hostTotalAmt = hostTotalAmt;
}
@Nullable
public String getHostKeyWechat() {
return hostKeyWechat;
}
public void setHostKeyWechat(@Nullable String hostKeyWechat) {
this.hostKeyWechat = hostKeyWechat;
}
@Nullable
public String getHostKeyAlipay() {
return hostKeyAlipay;
}
public void setHostKeyAlipay(@Nullable String hostKeyAlipay) {
this.hostKeyAlipay = hostKeyAlipay;
}
@Nullable
public String getHostKeyUnipay() {
return hostKeyUnipay;
}
public void setHostKeyUnipay(@Nullable String hostKeyUnipay) {
this.hostKeyUnipay = hostKeyUnipay;
}
@Nullable
public String getHostNotiUrl() {
return hostNotiUrl;
}
public void setHostNotiUrl(@Nullable String hostNotiUrl) {
this.hostNotiUrl = hostNotiUrl;
}
@Nullable
public String getHostAcqCode() {
return hostAcqCode;
}
public void setHostAcqCode(@Nullable String hostAcqCode) {
this.hostAcqCode = hostAcqCode;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
\ No newline at end of file
package com.xingdata.zxpay.model;
import android.support.annotation.Nullable;
import java.util.Date;
public class Posppp {
private Integer id;
private Integer hostMapId;
@Nullable
private Long opMapId;
@Nullable
private Long channelMapId;
private Long merMapId;
@Nullable
private String hshopName;
@Nullable
private String hshopNameabcn;
private Long casherId;
private Integer hshopNo;
@Nullable
private Integer hposNo;
private Byte pppFlag;
@Nullable
private Integer hposBatch;
@Nullable
private Integer hposTrace;
@Nullable
private String hposKey;
private Date updateTime;
private Date createTime;
@Nullable
private String hostName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getHostMapId() {
return hostMapId;
}
public void setHostMapId(Integer hostMapId) {
this.hostMapId = hostMapId;
}
@Nullable
public Long getOpMapId() {
return opMapId;
}
public void setOpMapId(@Nullable Long opMapId) {
this.opMapId = opMapId;
}
@Nullable
public Long getChannelMapId() {
return channelMapId;
}
public void setChannelMapId(@Nullable Long channelMapId) {
this.channelMapId = channelMapId;
}
public Long getMerMapId() {
return merMapId;
}
public void setMerMapId(Long merMapId) {
this.merMapId = merMapId;
}
@Nullable
public String getHshopName() {
return hshopName;
}
public void setHshopName(@Nullable String hshopName) {
this.hshopName = hshopName;
}
@Nullable
public String getHshopNameabcn() {
return hshopNameabcn;
}
public void setHshopNameabcn(@Nullable String hshopNameabcn) {
this.hshopNameabcn = hshopNameabcn;
}
public Long getCasherId() {
return casherId;
}
public void setCasherId(Long casherId) {
this.casherId = casherId;
}
public Integer getHshopNo() {
return hshopNo;
}
public void setHshopNo(Integer hshopNo) {
this.hshopNo = hshopNo;
}
@Nullable
public Integer getHposNo() {
return hposNo;
}
public void setHposNo(@Nullable Integer hposNo) {
this.hposNo = hposNo;
}
public Byte getPppFlag() {
return pppFlag;
}
public void setPppFlag(Byte pppFlag) {
this.pppFlag = pppFlag;
}
@Nullable
public Integer getHposBatch() {
return hposBatch;
}
public void setHposBatch(@Nullable Integer hposBatch) {
this.hposBatch = hposBatch;
}
@Nullable
public Integer getHposTrace() {
return hposTrace;
}
public void setHposTrace(@Nullable Integer hposTrace) {
this.hposTrace = hposTrace;
}
@Nullable
public String getHposKey() {
return hposKey;
}
public void setHposKey(@Nullable String hposKey) {
this.hposKey = hposKey;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Nullable
public String getHostName() {
return hostName;
}
public void setHostName(@Nullable String hostName) {
this.hostName = hostName;
}
}
\ No newline at end of file
package com.xingdata.zxpay.model;
import android.support.annotation.Nullable;
import java.util.Date;
public class Shopppp {
private Integer id;
private Integer hostMapId;
@Nullable
private Long opMapId;
@Nullable
private Long channelMapId;
private Long merMapId;
@Nullable
private String hshopName;
@Nullable
private String hshopNameabcn;
@Nullable
private Integer hshopNo;
private Byte pppFlag;
@Nullable
private String shopAppidDisp;
@Nullable
private String shopAppidScan;
@Nullable
private String hshopKeyWechat;
@Nullable
private String hshopKeyAlipay;
@Nullable
private String hshopKeyUnipay;
private Date updateTime;
private Date createTime;
@Nullable
private String hostName;
@Nullable
private Posppp posppp;
@Nullable
private Host host;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getHostMapId() {
return hostMapId;
}
public void setHostMapId(Integer hostMapId) {
this.hostMapId = hostMapId;
}
@Nullable
public Long getOpMapId() {
return opMapId;
}
public void setOpMapId(@Nullable Long opMapId) {
this.opMapId = opMapId;
}
@Nullable
public Long getChannelMapId() {
return channelMapId;
}
public void setChannelMapId(@Nullable Long channelMapId) {
this.channelMapId = channelMapId;
}
public Long getMerMapId() {
return merMapId;
}
public void setMerMapId(Long merMapId) {
this.merMapId = merMapId;
}
@Nullable
public String getHshopName() {
return hshopName;
}
public void setHshopName(@Nullable String hshopName) {
this.hshopName = hshopName;
}
@Nullable
public String getHshopNameabcn() {
return hshopNameabcn;
}
public void setHshopNameabcn(@Nullable String hshopNameabcn) {
this.hshopNameabcn = hshopNameabcn;
}
@Nullable
public Integer getHshopNo() {
return hshopNo;
}
public void setHshopNo(@Nullable Integer hshopNo) {
this.hshopNo = hshopNo;
}
public Byte getPppFlag() {
return pppFlag;
}
public void setPppFlag(Byte pppFlag) {
this.pppFlag = pppFlag;
}
@Nullable
public String getShopAppidDisp() {
return shopAppidDisp;
}
public void setShopAppidDisp(@Nullable String shopAppidDisp) {
this.shopAppidDisp = shopAppidDisp;
}
@Nullable
public String getShopAppidScan() {
return shopAppidScan;
}
public void setShopAppidScan(@Nullable String shopAppidScan) {
this.shopAppidScan = shopAppidScan;
}
@Nullable
public String getHshopKeyWechat() {
return hshopKeyWechat;
}
public void setHshopKeyWechat(@Nullable String hshopKeyWechat) {
this.hshopKeyWechat = hshopKeyWechat;
}
@Nullable
public String getHshopKeyAlipay() {
return hshopKeyAlipay;
}
public void setHshopKeyAlipay(@Nullable String hshopKeyAlipay) {
this.hshopKeyAlipay = hshopKeyAlipay;
}
@Nullable
public String getHshopKeyUnipay() {
return hshopKeyUnipay;
}
public void setHshopKeyUnipay(@Nullable String hshopKeyUnipay) {
this.hshopKeyUnipay = hshopKeyUnipay;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Nullable
public String getHostName() {
return hostName;
}
public void setHostName(@Nullable String hostName) {
this.hostName = hostName;
}
@Nullable
public Posppp getPosppp() {
return posppp;
}
public void setPosppp(@Nullable Posppp posppp) {
this.posppp = posppp;
}
@Nullable
public Host getHost() {
return host;
}
public void setHost(@Nullable Host host) {
this.host = host;
}
}
\ No newline at end of file
<resources>
<string name="app_name">pay</string>
</resources>
package com.xingdata.zxpay;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
include ':app'
include ':app', ':pay'
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