Commit 931d78d8 by Wyh

1、Epson打印占主線程問題 2、供應鏈Sn食材代碼

parent 771adf38
......@@ -11,6 +11,7 @@ import com.epson.epos2.printer.ReceiveListener;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterFlowProxy;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.common.utils.threadPool.ThreadPoolManager;
import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.impl.OnPrjPrintResultListener;
......@@ -72,25 +73,27 @@ public class EpsonPrint implements ReceiveListener {
if (mPrinter == null) {
return;
}
while (true) {
try {
LoganManager.w_printer(TAG, "斷開連接");
mPrinter.disconnect();
break;
} catch (final Exception e) {
LoganManager.w_printer(TAG, "斷開連接報錯:" + e.getMessage());
if (e instanceof Epos2Exception) {
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING.
if (((Epos2Exception) e).getErrorStatus() == Epos2Exception.ERR_PROCESSING) {
ThreadPoolManager.getInstence().putExecutableTasks(() -> {
while (true) {
try {
LoganManager.w_printer(TAG, "斷開連接");
mPrinter.disconnect();
break;
} catch (final Exception e) {
LoganManager.w_printer(TAG, "斷開連接報錯:" + e.getMessage());
if (e instanceof Epos2Exception) {
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING.
if (((Epos2Exception) e).getErrorStatus() == Epos2Exception.ERR_PROCESSING) {
} else {
break;
}
} else {
break;
}
} else {
break;
}
}
}
});
}
/**
......
package com.gingersoft.supply_chain.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.supply_chain.di.module.SnCodeListModule;
import com.gingersoft.supply_chain.mvp.contract.SnCodeListContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.supply_chain.mvp.ui.fragment.warehouse.SnCodeListFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/26/2021 19:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component(modules = SnCodeListModule.class, dependencies = AppComponent.class)
public interface SnCodeListComponent {
void inject(SnCodeListFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
SnCodeListComponent.Builder view(SnCodeListContract.View view);
SnCodeListComponent.Builder appComponent(AppComponent appComponent);
SnCodeListComponent build();
}
}
\ No newline at end of file
package com.gingersoft.supply_chain.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.supply_chain.mvp.contract.SnCodeListContract;
import com.gingersoft.supply_chain.mvp.model.SnCodeListModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/26/2021 19:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public abstract class SnCodeListModule {
@Binds
abstract SnCodeListContract.Model bindSnCodeListModel(SnCodeListModel model);
}
\ No newline at end of file
......@@ -51,5 +51,9 @@ public class OrderWareHouseBean {
* 副單位
*/
private WareHousingUnitBean purchaseWarehousingUnit;
/**
* sn碼
*/
private List<PurchaseFoodEncodeSn> purchaseFoodEncodeSn;
}
}
package com.gingersoft.supply_chain.mvp.bean;
import java.util.List;
/**
* @author 宇航.
* User: admin
* Date: 2021/3/26
* Time: 17:02
* Use:
*/
public class PurchaseConsumeSnBean {
public int brandId;
public int restaurantId;
public String foodNo;
public int consumeQuantity;
public int purchaseConsumeReasonId;
public String remarks;
public List<PurchaseFoodEncodeSn> purchaseFoodEncodeSn;
public static class PurchaseFoodEncodeSn {
public PurchaseFoodEncodeSn(String encodeSnNo) {
this.encodeSnNo = encodeSnNo;
}
public String encodeSnNo;
}
}
......@@ -97,6 +97,12 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas
private int minimumInventory;
private int shelfLife;
private int warningDays;
/**
* 食材是否有sn碼
*/
private int foodMarkSn;
public static final int NOT_HAS_SN = 0;
public static final int HAS_SN = 1;
/**
* 庫存預警 模塊
......@@ -137,6 +143,7 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas
/**
* 复制一個類
*
* @param old
* @return
*/
......@@ -158,7 +165,6 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas
}
@Override
public PurchaseFoodBean cloneForDiff() {
return null;
......
package com.gingersoft.supply_chain.mvp.bean;
import java.io.Serializable;
/**
* @author 宇航.
* User: admin
* Date: 2021/3/25
* Time: 18:20
* Use:
*/
public class PurchaseFoodEncodeSn implements Serializable {
/**
* 食材編號
*/
private String encodeFoodNo;
/**
* 採購訂單編號
*/
private String encodeOrderNo;
/**
* sn編碼
*/
private String encodeSnNo;
public Integer id;
public long createTime;
public long updateTime;
public int createUid;
public int updateUid;
public String userName;
/**
* 是否新增
*/
public boolean newAdd = false;
public PurchaseFoodEncodeSn() {
}
public PurchaseFoodEncodeSn(String encodeFoodNo, String encodeOrderNo, String encodeSnNo) {
this.encodeFoodNo = encodeFoodNo;
this.encodeOrderNo = encodeOrderNo;
this.encodeSnNo = encodeSnNo;
}
public String getEncodeFoodNo() {
return encodeFoodNo;
}
public void setEncodeFoodNo(String encodeFoodNo) {
this.encodeFoodNo = encodeFoodNo;
}
public String getEncodeOrderNo() {
return encodeOrderNo;
}
public void setEncodeOrderNo(String encodeOrderNo) {
this.encodeOrderNo = encodeOrderNo;
}
public String getEncodeSnNo() {
return encodeSnNo;
}
public void setEncodeSnNo(String encodeSnNo) {
this.encodeSnNo = encodeSnNo;
}
}
......@@ -161,6 +161,14 @@ public class PurchaseOrderDetailsBean {
private String orderNo;
private DeputyUnitBean showUnit;
/**
* {@link PurchaseFoodBean.NOT_HAS_SN}
* {@link PurchaseFoodBean.HAS_SN}
*/
private int foodMarkSn;
/**
* sn集合,掃描了sn之後,裝在這裡面
*/
private List<PurchaseFoodEncodeSn> purchaseFoodEncodeSns;
}
}
package com.gingersoft.supply_chain.mvp.bean;
import java.io.Serializable;
import lombok.Data;
/**
* @author 宇航.
* User: admin
* Date: 2021/3/26
* Time: 12:19
* Use:
*/
@Data
public class PurchaseWarehousingOrderDetailsVO implements Serializable {
/**
* id : 84
* name : 阿克苏苹果🍎
* cateName : 特级水果
* supplierName : 盒马生鲜
* basicUnitName : 1
* foodPrice : 89
* foodNum : 3
* foodAmount : 267
*/
private int id;
private String foodNo;
private String name;
private String foodCategoryName;
// private String supplierName;
private String unitName;
private double foodPrice;
private int foodNum;
private double foodAmount;
private String images;
/**
* {@link PurchaseFoodBean.NOT_HAS_SN}
* {@link PurchaseFoodBean.HAS_SN}
*/
private int foodMarkSn;
}
......@@ -67,33 +67,5 @@ public class WareHouseListBean {
*/
private int count;
}
/**
* 食品信息
*/
@Data
public static class PurchaseWarehousingOrderDetailsVO implements Serializable {
/**
* id : 84
* name : 阿克苏苹果🍎
* cateName : 特级水果
* supplierName : 盒马生鲜
* basicUnitName : 1
* foodPrice : 89
* foodNum : 3
* foodAmount : 267
*/
private int id;
private String foodNo;
private String name;
private String foodCategoryName;
// private String supplierName;
private String unitName;
private double foodPrice;
private int foodNum;
private double foodAmount;
private String images;
private boolean snFood;
}
}
}
......@@ -26,7 +26,7 @@ public class WarehouseDetailsBean {
private String name;
private String purchase;
private String orderNo;
private double foodQuantity;
private int foodQuantity;
private double totalPrice;
// private String createTime;
private String supplierName;
......@@ -55,6 +55,10 @@ public class WarehouseDetailsBean {
* 消耗狀態,1從未被消耗,2消耗了一部分,3完全消耗
*/
private int consumeStatus;
/**
* 入庫詳情ids,逗號分隔
*/
private String warehousingOrderDetailsIds;
public final static int WAREHOUSE_STATE_NEVER_CONSUMED = 1;
public final static int WAREHOUSE_STATE_PART_CONSUMED = 2;
public final static int WAREHOUSE_STATE_ALL_CONSUMED = 3;
......
......@@ -33,6 +33,8 @@ public interface OrderDetailsContract {
void uploadPicSuccess(String imgUrl);
void buyAgain();
void querySnCodeSuccess(int position, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......@@ -49,6 +51,12 @@ public interface OrderDetailsContract {
Observable<BaseResult> deleteOrder(int orderId);
/**
* 查詢食品sn碼
* @param encodeFoodNo 食品編號
* @param encodeOrderNo 訂單編號
*/
Observable<BaseResult> querySnCodes(String encodeFoodNo, String encodeOrderNo);
/**
* 再來一單
* @param map
* @return
......
package com.gingersoft.supply_chain.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/26/2021 19:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface SnCodeListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.PurchaseWarehousingOrderDetailsVO;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
......@@ -28,7 +29,7 @@ public interface WareHouseListContract {
interface View extends IView {
void loadWarehousingInfo(WareHouseListBean.WareHousingDataBean data);
void loadListInfo(List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos);
void loadListInfo(List<PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos);
void finishLoad();
......
......@@ -2,6 +2,7 @@ package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodEncodeSn;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.bean.WarehouseDetailsBean;
import com.jess.arms.mvp.IView;
......@@ -52,6 +53,29 @@ public interface WarehouseDetailsContract {
* 修改庫存數量
*/
void setWarehousingNum(int num);
/**
* 如果消耗成功了,需要移除消耗视图,显示流水
*
* @param visibility 是否显示流水
*/
void showList(int visibility);
/**
* 打印消耗单
*
* @param consumeReasonDesc 消耗原因
* @param consumptionNum 消耗数量
*/
void printConsumeOrder(String consumeReasonDesc, int consumptionNum);
/**
* 跳转到sn码页面
*
* @param remark
* @param sns
*/
void jumpSnList(int foodQuantity, String remark, List<PurchaseFoodEncodeSn> sns);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......@@ -75,6 +99,10 @@ public interface WarehouseDetailsContract {
*/
Observable<BaseResult> getWarehousingNum(Map<String, Object> map);
/**
* 獲取Sn列表
*/
Observable<BaseResult> querySnCodeList(Map<String, Object> map);
}
}
......@@ -74,6 +74,11 @@ public class OrderDetailsModel extends BaseModel implements OrderDetailsContract
}
@Override
public Observable<BaseResult> querySnCodes(String encodeFoodNo, String encodeOrderNo) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).querySnCodes(encodeFoodNo, encodeOrderNo);
}
@Override
public Observable<BaseResult> buyAgainByFoodIds(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).buyAgainByFoodIds(map);
}
......
package com.gingersoft.supply_chain.mvp.model;
import android.app.Application;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.supply_chain.mvp.contract.SnCodeListContract;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/26/2021 19:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class SnCodeListModel extends BaseModel implements SnCodeListContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public SnCodeListModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
......@@ -76,5 +76,10 @@ public class WarehouseDetailsModel extends BaseModel implements WarehouseDetails
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getWarehousingNum(map);
}
@Override
public Observable<BaseResult> querySnCodeList(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).querySnCodeList(map);
}
}
\ No newline at end of file
......@@ -102,6 +102,10 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
*/
public int foodNoIndex = 10;
/**
* 食材sn碼下標
*/
public int foodSnIndex = 11;
/**
* 食材單價下標
*/
public int foodIngredientPriceIndex = 12;
......@@ -240,6 +244,8 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
foodNoInputBean.setEdit(false);
foodNoInputBean.setShowValue(purchaseFoodBean.getFoodNo());
}
//sn食材
infoMultiBeans.get(foodSnIndex).setChecked(purchaseFoodBean.getFoodMarkSn() == PurchaseFoodBean.HAS_SN);
//單價
if (purchaseFoodBean.getUnitPrice() != null) {
infoMultiBeans.get(foodIngredientPriceIndex).setShowValue(purchaseFoodBean.getUnitPrice() + "");
......@@ -474,6 +480,8 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
} else {
purchaseFoodBean.setFoodNo(null);
}
//是否有sn碼
purchaseFoodBean.setFoodMarkSn(infoMultiBeans.get(foodSnIndex).isChecked() ? PurchaseFoodBean.HAS_SN : PurchaseFoodBean.NOT_HAS_SN);
//單價
String unitPriceStr = infoMultiBeans.get(foodIngredientPriceIndex).getShowValue();
if (TextUtil.isNotEmptyOrNullOrUndefined(unitPriceStr)) {
......
......@@ -11,6 +11,7 @@ import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.view.BitmapUtil;
import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodEncodeSn;
import com.gingersoft.supply_chain.mvp.bean.PurchaseOrderDetailsBean;
import com.gingersoft.supply_chain.mvp.bean.OrderWareHouseBean;
import com.gingersoft.supply_chain.mvp.bean.WareHousingUnitBean;
......@@ -361,22 +362,13 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
List<OrderWareHouseBean.PurchaseWarehousingOrderDetail> purchaseWarehousingOrderDetails = new ArrayList<>();
for (PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean purchaseOrderDetailsInfoVosBean : purchaseOrderDetailsInfoVosBeans) {
if (purchaseOrderDetailsInfoVosBean.getStatus() != PurchaseOrderDetailsBean.COMPLETE_RECEIVED && purchaseOrderDetailsInfoVosBean.isChecked()) {
//新的入庫類
OrderWareHouseBean.PurchaseWarehousingOrderDetail purchaseWarehousingOrderDetail = new OrderWareHouseBean.PurchaseWarehousingOrderDetail();
purchaseWarehousingOrderDetail.setOrderDetailsId(purchaseOrderDetailsInfoVosBean.getId());
purchaseWarehousingOrderDetail.setPurchaseFoodId(purchaseOrderDetailsInfoVosBean.getPurchaseFoodId());
purchaseWarehousingOrderDetail.setFoodQuantity(purchaseOrderDetailsInfoVosBean.getFoodQuantity());
purchaseWarehousingOrderDetail.setFoodPrice(purchaseOrderDetailsInfoVosBean.getFoodPrice());
purchaseWarehousingOrderDetail.setTotalPrice(MoneyUtil.priceCalculation(purchaseOrderDetailsInfoVosBean.getFoodPrice(), purchaseOrderDetailsInfoVosBean.getFoodQuantity()));
// List<DeputyUnitBean> deputyUnitBeans = purchaseOrderDetailsInfoVosBean.getFoodUnits();
//將副單位轉為入庫用的副單位
// if (deputyUnitBeans != null && deputyUnitBeans.size() > 1) {
// //主單位名稱
// purchaseWarehousingOrderDetail.setBasicUnitName(deputyUnitBeans.get(1).getDeputyUnit());
// //主單位數量
// purchaseWarehousingOrderDetail.setBasicUnitValue(deputyUnitBeans.get(1).getDeputyValue());
// //統計副單位
// List<WareHousingUnitBean> wareHousingUnitBeans = new ArrayList<>();
// for (int i = 0; i < deputyUnitBeans.size(); i++) {
DeputyUnitBean deputyUnitBean = purchaseOrderDetailsInfoVosBean.getShowUnit();
WareHousingUnitBean wareHousingUnitBean = DeputyUnitBean.getWareHousingUnitByDeputyUnit(deputyUnitBean);
if (purchaseOrderDetailsInfoVosBean.getStatus() != PurchaseOrderDetailsBean.WAIT_RECEIVED && deputyUnitBean.getId() != null) {
......@@ -386,6 +378,21 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
wareHousingUnitBean.setBrandId(RestaurantInfoManager.newInstance().getBrandId());
wareHousingUnitBean.setRestaurantId(RestaurantInfoManager.newInstance().getRestaurantId());
purchaseWarehousingOrderDetail.setPurchaseWarehousingUnit(wareHousingUnitBean);
//sn碼
List<PurchaseFoodEncodeSn> snList = null;
// StringBuilder snCode = new StringBuilder();
if (purchaseOrderDetailsInfoVosBean.getPurchaseFoodEncodeSns() != null) {
snList = new ArrayList<>();
//只遍歷出新增的
for (PurchaseFoodEncodeSn purchaseFoodEncodeSn : purchaseOrderDetailsInfoVosBean.getPurchaseFoodEncodeSns()) {
if (purchaseFoodEncodeSn.newAdd) {
snList.add(purchaseFoodEncodeSn);
// snCode.append(purchaseFoodEncodeSn.getEncodeSnNo()).append(",");
}
}
// snCode.substring(0, snCode.length() - 1);
}
purchaseWarehousingOrderDetail.setPurchaseFoodEncodeSn(snList);
purchaseWarehousingOrderDetails.add(purchaseWarehousingOrderDetail);
}
}
......@@ -419,6 +426,29 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
}
/**
* 查詢商品sn碼
*/
public void querySnCodes(int position, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean) {
mModel.querySnCodes(infoVosBean.getFoodNo(), infoVosBean.getOrderNo())
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(Constant.QUERY_LOADING))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseResult info) {
if (info.isSuccess()) {
List<PurchaseFoodEncodeSn> purchaseFoodEncodeSns = GsonUtils.jsonToList(info.getData(), PurchaseFoodEncodeSn.class);
infoVosBean.setPurchaseFoodEncodeSns(purchaseFoodEncodeSns);
mRootView.querySnCodeSuccess(position, infoVosBean);
}
}
});
}
/**
* 上傳圖片
*
* @param filePath 圖片路徑
......
package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.supply_chain.mvp.contract.SnCodeListContract;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/26/2021 19:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class SnCodeListPresenter extends BasePresenter<SnCodeListContract.Model, SnCodeListContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public SnCodeListPresenter(SnCodeListContract.Model model, SnCodeListContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application;
import android.view.View;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean;
import com.gingersoft.supply_chain.mvp.bean.ConsumeWareHousingBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseConsumeSnBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodEncodeSn;
import com.gingersoft.supply_chain.mvp.bean.PurchaseWarehousingOrderDetailsVO;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.bean.WarehouseDetailsBean;
import com.gingersoft.supply_chain.mvp.content.Constant;
......@@ -22,6 +27,7 @@ import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import javax.inject.Inject;
......@@ -29,9 +35,11 @@ import javax.inject.Inject;
import com.gingersoft.supply_chain.mvp.contract.WarehouseDetailsContract;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
......@@ -165,20 +173,30 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon
/**
* 庫存消耗
*
* @param foodNo 食材編號
* @param consumeQuantity 消耗數量
* @param purchaseConsumeReasonId 原因id
* @param remarks 備註
* @param purchaseWarehousingOrderDetailsVO 食材信息
* @param consumeQuantity 消耗數量
* @param consumeReasonBean 消耗原因
* @param remarks 備註
*/
public void consumeWareHousing(String foodNo, int consumeQuantity, int purchaseConsumeReasonId, String remarks) {
FormBody.Builder formBody = new FormBody.Builder()
.add("foodNo", foodNo)
.add("consumeQuantity", String.valueOf(consumeQuantity))
.add("purchaseConsumeReasonId", String.valueOf(purchaseConsumeReasonId))
.add("remarks", remarks);
Constant.addRestaurantId(formBody);
Constant.addBrandId(formBody);
mModel.consumeWareHousing(formBody.build())
public void consumeWareHousing(PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVO, int consumeQuantity, ConsumeReasonBean consumeReasonBean, String remarks, List<String> snCodes, boolean whetherPrint) {
PurchaseConsumeSnBean purchaseConsumeSnBean = new PurchaseConsumeSnBean();
purchaseConsumeSnBean.brandId = RestaurantInfoManager.newInstance().getBrandId();
purchaseConsumeSnBean.restaurantId = RestaurantInfoManager.newInstance().getRestaurantId();
purchaseConsumeSnBean.foodNo = purchaseWarehousingOrderDetailsVO.getFoodNo();
purchaseConsumeSnBean.purchaseConsumeReasonId = consumeReasonBean.getId();
purchaseConsumeSnBean.remarks = remarks;
if (snCodes != null) {
List<PurchaseConsumeSnBean.PurchaseFoodEncodeSn> snList = new ArrayList<>();
for (String snCode : snCodes) {
snList.add(new PurchaseConsumeSnBean.PurchaseFoodEncodeSn(snCode));
}
purchaseConsumeSnBean.consumeQuantity = snList.size();
purchaseConsumeSnBean.purchaseFoodEncodeSn = snList;
} else {
purchaseConsumeSnBean.consumeQuantity = consumeQuantity;
}
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(purchaseConsumeSnBean));
mModel.consumeWareHousing(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(Constant.UPDATE_LOADING))
.subscribeOn(AndroidSchedulers.mainThread())
......@@ -189,10 +207,18 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon
@Override
public void onNext(BaseResult baseResult) {
if (baseResult != null && baseResult.isSuccess()) {
//消耗完之後,刷新列表
mRootView.getPageInfo();
//重新獲取庫存數量
getWarehousingNum(foodNo);
if (whetherPrint) {
mRootView.printConsumeOrder(consumeReasonBean.getDescription(), consumeQuantity);
} else {
//如果需要打印,則是在打印完之後查詢,如果不需要打印,現在就查詢刷新頁面
//消耗完之後,刷新列表
mRootView.getPageInfo();
//重新獲取庫存數量
getWarehousingNum(purchaseWarehousingOrderDetailsVO.getFoodNo());
}
//不需要打印,現在就移除消耗视图,显示流水页面
//如果需要打印,則在打印完成後執行
mRootView.showList(View.VISIBLE);
} else if (baseResult != null && TextUtil.isNotEmptyOrNullOrUndefined(baseResult.getErrMsg())) {
mRootView.showMessage(baseResult.getErrMsg());
} else {
......@@ -231,4 +257,26 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon
}
});
}
public void querySnCodeList(int foodQuantity, String remark, String warehousingOrderDetailsIds) {
Map<String, Object> map = new HashMap<>();
map.put("warehousingOrderDetailsIds", warehousingOrderDetailsIds);
mModel.querySnCodeList(map)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(Constant.QUERY_LOADING))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if (baseResult != null && baseResult.isSuccess()) {
List<PurchaseFoodEncodeSn> purchaseFoodEncodeSns = GsonUtils.jsonToList(baseResult.getData(), PurchaseFoodEncodeSn.class);
mRootView.jumpSnList(foodQuantity, remark, purchaseFoodEncodeSns);
}
}
});
}
}
......@@ -282,6 +282,11 @@ public interface SupplierServer {
@POST("purchaseOrder/delete" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> deleteOrder(@Field("id") int orderId);
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseFood/purchaseFoodSnlist" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> querySnCodes(@Query("encodeFoodNo") String encodeFoodNo, @Query("encodeOrderNo") String encodeOrderNo);
/**
* 再來一單,通過食材ids獲取詳細信息
*
......@@ -448,6 +453,9 @@ public interface SupplierServer {
@GET("purchaseConsume/get/remaining/quantity" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getWarehousingNum(@QueryMap Map<String, Object> map);
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseFood/purchaseFoodSnlist" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> querySnCodeList(@QueryMap Map<String, Object> map);
/**
* 查詢庫存消耗記錄
......
......@@ -11,6 +11,7 @@ import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.supply_chain.R;
......
......@@ -37,7 +37,7 @@ public class InventoryRecordAdapter extends BaseQuickAdapter<InventoryRecordBean
viewHolder.setText(R.id.tv_inventory_record_username, inventoryRecordBean.getUserName());
viewHolder.setText(R.id.tv_inventory_record_number, String.valueOf(inventoryRecordBean.getRemainingQuantity()));
viewHolder.setText(R.id.tv_inventory_record_difference, String.valueOf(inventoryRecordBean.getConsumeQuantity()));
viewHolder.setText(R.id.tv_inventory_record_operating_data, TimeUtils.getTime(inventoryRecordBean.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT));
viewHolder.setText(R.id.tv_inventory_record_operating_data, TimeUtils.getTime(inventoryRecordBean.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT_YMDHM));
viewHolder.setTextColor(R.id.tv_inventory_record_username, ContextCompat.getColor(getContext(), R.color.color_3c));
viewHolder.setTextColor(R.id.tv_inventory_record_number, ContextCompat.getColor(getContext(), R.color.color_3c));
......
package com.gingersoft.supply_chain.mvp.ui.adapter;
import android.content.Context;
import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodEncodeSn;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* @author 宇航.
* User: admin
* Date: 2021/3/26
* Time: 19:53
* Use:
*/
public class SnCodesAdapter extends BaseQuickAdapter<PurchaseFoodEncodeSn, BaseViewHolder> {
private int[] colors = new int[]{R.color.color_f9, R.color.white};
public SnCodesAdapter(@Nullable List<PurchaseFoodEncodeSn> data) {
super(R.layout.include_sn_item, data);
}
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, PurchaseFoodEncodeSn purchaseFoodEncodeSn) {
int colorRes = getColor(getContext(), colors[viewHolder.getAdapterPosition() % 2]);
viewHolder.setBackgroundColor(R.id.layout_sn_item, colorRes);
setTextColor(viewHolder, getColor(getContext(), R.color.color_3c));
viewHolder.setText(R.id.tv_serial_number, String.valueOf(viewHolder.getAdapterPosition()));
viewHolder.setText(R.id.tv_sn_code, String.valueOf(purchaseFoodEncodeSn.getEncodeSnNo()));
viewHolder.setText(R.id.tv_operator, String.valueOf(purchaseFoodEncodeSn.userName));
viewHolder.setText(R.id.tv_time, TimeUtils.getStringByFormat(purchaseFoodEncodeSn.updateTime, TimeUtils.DATE_FORMAT_DATE));
}
private void setTextColor(@NotNull BaseViewHolder viewHolder, int textColorRes) {
viewHolder.setTextColor(R.id.tv_serial_number, textColorRes);
viewHolder.setTextColor(R.id.tv_sn_code, textColorRes);
viewHolder.setTextColor(R.id.tv_operator, textColorRes);
viewHolder.setTextColor(R.id.tv_time, textColorRes);
}
private int getColor(Context context, int colorRes) {
return ContextCompat.getColor(context, colorRes);
}
}
......@@ -40,6 +40,7 @@ public class WareHousingDetailsAdapter extends BaseQuickAdapter<WarehouseDetails
public WareHousingDetailsAdapter(@Nullable List<WarehouseDetailsBean> data, int type) {
super(R.layout.item_warehouse_details, data);
this.type = type;
addChildClickViewIds(R.id.tv_warehouse_details_food_num);
}
@Override
......
......@@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.PurchaseWarehousingOrderDetailsVO;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import org.jetbrains.annotations.NotNull;
......@@ -20,19 +21,19 @@ import java.util.List;
* Time: 16:36
* Use:庫存查詢的訂單列表
*/
public class WarehousingQueryAdapter extends BaseQuickAdapter<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO, BaseViewHolder> {
public class WarehousingQueryAdapter extends BaseQuickAdapter<PurchaseWarehousingOrderDetailsVO, BaseViewHolder> {
private Context context;
private int[] colors = new int[]{R.color.color_f9, R.color.white};
public WarehousingQueryAdapter(Context context, List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVosBeans) {
public WarehousingQueryAdapter(Context context, List<PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVosBeans) {
super(R.layout.item_warehousing_query, purchaseWarehousingOrderDetailsVosBeans);
addChildClickViewIds(R.id.tv_warehouse_item_inventory_quantity);
this.context = context;
}
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO item) {
protected void convert(@NotNull BaseViewHolder viewHolder, PurchaseWarehousingOrderDetailsVO item) {
viewHolder.setText(R.id.tv_warehouse_item_ingredients_name, item.getName());
viewHolder.setText(R.id.tv_warehouse_item_ingredients_species, item.getFoodCategoryName());
viewHolder.setText(R.id.tv_warehouse_item_unit, item.getUnitName());
......
......@@ -113,8 +113,8 @@ public class FunctionListFragment extends BaseSupplyChainFragment<FunctionListPr
start(SupplierListFragment.newInstance(false, null));
break;
case "食材":
// start(FoodIngredientsFragment.newInstance(FOOD_INGREDIENTS));
start(BuyIngredientsFragment.newInstance());
start(FoodIngredientsFragment.newInstance(FOOD_INGREDIENTS));
// start(BuyIngredientsFragment.newInstance());
break;
case "種類":
start(CategoryFragment.newInstance());
......
......@@ -5,9 +5,11 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -26,6 +28,7 @@ import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemChildClickListener;
import com.gingersoft.gsa.cloud.common.utils.CollectionUtils;
import com.gingersoft.gsa.cloud.common.utils.FileUtils;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.common.utils.glide.GlideUtils;
......@@ -39,6 +42,8 @@ import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerOrderDetailsComponent;
import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodEncodeSn;
import com.gingersoft.supply_chain.mvp.bean.PurchaseOrderDetailsBean;
import com.gingersoft.supply_chain.mvp.bean.WareHousingUnitBean;
import com.gingersoft.supply_chain.mvp.contract.OrderDetailsContract;
......@@ -54,6 +59,7 @@ import com.google.android.material.checkbox.MaterialCheckBox;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.http.imageloader.ImageLoader;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BasePopupView;
import com.lxj.xpopup.core.ImageViewerPopupView;
import com.lxj.xpopup.enums.PopupPosition;
import com.lxj.xpopup.interfaces.OnSelectListener;
......@@ -66,6 +72,7 @@ import com.yalantis.ucrop.UCrop;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import butterknife.BindView;
import butterknife.OnClick;
......@@ -249,21 +256,17 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
switch (orderDetailsBean.getStatus()) {
case PurchaseOrderDetailsBean.WAIT_RECEIVED:
ivOrderState.setVisibility(View.INVISIBLE);
// tvOrderDetailsOrderState.setText("待收貨");
break;
case PurchaseOrderDetailsBean.PART_RECEIVED:
ivOrderState.setVisibility(View.VISIBLE);
// tvOrderDetailsOrderState.setText("部分收貨");
ivOrderState.setImageResource(R.drawable.ic_partial_receipt);
break;
case PurchaseOrderDetailsBean.COMPLETE_RECEIVED:
// tvOrderDetailsOrderState.setText("已完成");
ivOrderState.setImageResource(R.drawable.ic_all_receipt);
break;
case PurchaseOrderDetailsBean.REFUSE_RECEIVED:
//拒收
ivOrderState.setImageResource(R.drawable.ic_refuse_accept);
// ivOrderState.setImageResource();
break;
default:
break;
......@@ -321,6 +324,11 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
startWithPop(ShoppingCatFragment.newInstance());
}
@Override
public void querySnCodeSuccess(int position, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean) {
showScanPopup(position, infoVosBean);
}
public static class ImageLoader implements XPopupImageLoader {
@Override
public void loadImage(int position, @NonNull Object url, @NonNull ImageView imageView) {
......@@ -357,34 +365,24 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
//食材點擊事件
orderDetailsFoodAdapter.setOnItemClickListener((adapter, view, position) -> {
PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean = orderDetailsFoodAdapter.getData().get(position);
// if(infoVosBean.getStatus() == PurchaseOrderDetailsBean.COMPLETE_RECEIVED){
// //已經全部收貨的,不讓選中
// return;
// }
//判斷是不是sn食材
// new XPopup.Builder(requireContext())
// .hasShadowBg(false)
// .asCustom(new ScanSnPopup(this, infoVosBean.getName(), null, scanResult -> {
// //當前食材infoVosBean裡面有個sn碼集合,將scanResult添加進去
//
// }))
// .show();
infoVosBean.setChecked(!infoVosBean.isChecked());
adapter.notifyItemChanged(position);
//修改選中狀態後,重新計算入庫總價
DeputyUnitBean showUnit = infoVosBean.getShowUnit();
if (infoVosBean.isChecked()) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(showUnit.getDeputyValue(), showUnit.getUnitPrice()));
typesOfFood += 1;
if (infoVosBean.getFoodMarkSn() == PurchaseFoodBean.HAS_SN) {
//sn食材,如果是選中狀態,改為未選中
//如果未選中,查看食材是否已經收過貨,信息里是否有sn碼,如果有,就直接顯示掃碼彈窗,如果沒有,就通過接口獲取這個食材的sn碼
if (infoVosBean.isChecked()) {
setFoodCheckState(adapter, position, infoVosBean);
} else {
if (infoVosBean.getStatus() == PurchaseOrderDetailsBean.WAIT_RECEIVED) {
//沒收過貨的
showScanPopup(position, infoVosBean);
} else {
//收過貨的,需要查詢sn碼
mPresenter.querySnCodes(position, infoVosBean);
}
}
} else {
totalAmount = MoneyUtil.sub(totalAmount, MoneyUtil.priceCalculation(showUnit.getDeputyValue(), showUnit.getUnitPrice()));
typesOfFood -= 1;
//不是sn食材,選中
setFoodCheckState(adapter, position, infoVosBean);
}
//全選
cbOrderDetailsAllSelected.setChecked(typesOfFood == orderDetailsFoodAdapter.getData().size());
setTotalAmount();
setTypesOfFood();
});
orderDetailsFoodAdapter.setOnItemChildClickListener((adapter, view, position) -> {
int id = view.getId();
......@@ -392,26 +390,22 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
//切換單位
PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean purchaseOrderDetailsInfoVosBean = orderDetailsFoodAdapter.getData().get(position);
List<DeputyUnitBean> foodUnits = purchaseOrderDetailsInfoVosBean.getFoodUnits();
// String[] units = new String[0];
List<String> units = new ArrayList<>();
if (foodUnits != null) {
// units = new String[foodUnits.size()];
for (int i = 0; i < foodUnits.size(); i++) {
// units[i] = foodUnits.get(i).getDeputyUnit();
units.add(foodUnits.get(i).getDeputyUnit());
}
}
if (units.size() > 1) {
ChooseUnitPopup popup = new ChooseUnitPopup(requireContext()).setStringData(units).setOnSelectListener(new OnSelectListener() {
@Override
public void onSelect(int position, String text) {
//將用戶之前輸入的值,修改到新選擇的單位匯中
DeputyUnitBean showUnit = purchaseOrderDetailsInfoVosBean.getShowUnit();
DeputyUnitBean deputyUnitBean = foodUnits.get(position);
ChooseUnitPopup popup = new ChooseUnitPopup(requireContext()).setStringData(units).setOnSelectListener((position1, text) -> {
//將用戶之前輸入的值,修改到新選擇的單位匯中
DeputyUnitBean showUnit = purchaseOrderDetailsInfoVosBean.getShowUnit();
if (foodUnits != null && position1 < foodUnits.size()) {
DeputyUnitBean deputyUnitBean = foodUnits.get(position1);
deputyUnitBean.setDeputyValue(showUnit.getDeputyValue());
deputyUnitBean.setUnitPrice(showUnit.getUnitPrice());
purchaseOrderDetailsInfoVosBean.setShowUnit(deputyUnitBean);
orderDetailsFoodAdapter.notifyItemChanged(position);
orderDetailsFoodAdapter.notifyItemChanged(position1);
}
});
new XPopup.Builder(getContext())
......@@ -424,6 +418,86 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
});
}
/**
* 顯示掃碼popupwindow
*
* @param position 下標
* @param infoVosBean 食品信息
*/
private void showScanPopup(int position, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean) {
List<PurchaseFoodEncodeSn> purchaseFoodEncodeSns1 = infoVosBean.getPurchaseFoodEncodeSns();
List<String> snCodes = null;
//將之前錄入的sn碼遍歷出來
if (purchaseFoodEncodeSns1 != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
snCodes = purchaseFoodEncodeSns1.stream().map(PurchaseFoodEncodeSn::getEncodeSnNo).collect(Collectors.toList());
} else {
snCodes = new ArrayList<>();
for (PurchaseFoodEncodeSn purchaseFoodEncodeSn : purchaseFoodEncodeSns1) {
snCodes.add(purchaseFoodEncodeSn.getEncodeSnNo());
}
}
}
ScanSnPopup scanSnPopup = new ScanSnPopup(this, infoVosBean.getName(), CollectionUtils.deepCopy(snCodes));
List<String> finalSnCodes = snCodes;
scanSnPopup.setOnScanResultListener(scanResult -> {
//當前食材infoVosBean裡面有個sn碼集合,將scanResult添加進去
if (scanResult != null && scanResult.size() > 0) {
List<PurchaseFoodEncodeSn> purchaseFoodEncodeSns = new ArrayList<>(scanResult.size());
int newAddSize = 0;
for (String s : scanResult) {
PurchaseFoodEncodeSn purchaseFoodEncodeSn = new PurchaseFoodEncodeSn();
purchaseFoodEncodeSn.setEncodeFoodNo(infoVosBean.getFoodNo());
purchaseFoodEncodeSn.setEncodeOrderNo(infoVosBean.getOrderNo());
purchaseFoodEncodeSn.setEncodeSnNo(s);
if (finalSnCodes == null || !finalSnCodes.contains(s)) {
//判斷這個snCode是不是已經收過貨了,沒收過貨,新增的就為true
purchaseFoodEncodeSn.newAdd = true;
newAddSize++;
}
purchaseFoodEncodeSns.add(purchaseFoodEncodeSn);
}
//本次收貨數量=新增掃sn碼數量
DeputyUnitBean showUnit = infoVosBean.getShowUnit();
showUnit.setDeputyValue(newAddSize);
infoVosBean.setPurchaseFoodEncodeSns(purchaseFoodEncodeSns);
setFoodCheckState(orderDetailsFoodAdapter, position, infoVosBean);
scanSnPopup.dismiss();
} else {
showMessage("請掃描食材sn碼");
}
});
new XPopup.Builder(requireContext())
.hasShadowBg(false)
.asCustom(scanSnPopup)
.show();
}
/**
* 設置食材選中狀態
*
* @param adapter 適配器
* @param position 食材下標
* @param infoVosBean 食材信息
*/
private void setFoodCheckState(BaseQuickAdapter<?, ?> adapter, int position, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean) {
infoVosBean.setChecked(!infoVosBean.isChecked());
adapter.notifyItemChanged(position);
//修改選中狀態後,重新計算入庫總價
DeputyUnitBean showUnit = infoVosBean.getShowUnit();
if (infoVosBean.isChecked()) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(showUnit.getDeputyValue(), showUnit.getUnitPrice()));
typesOfFood += 1;
} else {
totalAmount = MoneyUtil.sub(totalAmount, MoneyUtil.priceCalculation(showUnit.getDeputyValue(), showUnit.getUnitPrice()));
typesOfFood -= 1;
}
//全選
cbOrderDetailsAllSelected.setChecked(typesOfFood == orderDetailsFoodAdapter.getData().size());
setTotalAmount();
setTypesOfFood();
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
......
......@@ -139,8 +139,9 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr
private void initEditText() {
edSupplier.setOnEditorActionListener((v, actionId, event) -> {
if (event != null) {
return true;
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
hideSoftInput();
getSupplierList();
}
return false;
});
......
package com.gingersoft.supply_chain.mvp.ui.fragment.warehouse;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerSnCodeListComponent;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodEncodeSn;
import com.gingersoft.supply_chain.mvp.contract.SnCodeListContract;
import com.gingersoft.supply_chain.mvp.presenter.SnCodeListPresenter;
import com.gingersoft.supply_chain.mvp.ui.adapter.SnCodesAdapter;
import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.jess.arms.di.component.AppComponent;
import com.qmuiteam.qmui.widget.QMUITopBar;
import org.w3c.dom.Text;
import java.io.Serializable;
import java.util.List;
import butterknife.BindView;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/26/2021 19:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public class SnCodeListFragment extends BaseSupplyChainFragment<SnCodeListPresenter> implements SnCodeListContract.View {
final static String FOOD_NAME_KEY = "FoodNameKey";
final static String REMARK_KEY = "RemarkKey";
final static String SN_KEY = "snKey";
final static String HOUSING_NUM_KEY = "housingNumKey";
@BindView(R2.id.supply_top_bar)
QMUITopBar supplyTopBar;
@BindView(R2.id.tv_remark)
TextView tvRemark;
@BindView(R2.id.rv_sn)
RecyclerView rvSn;
@BindView(R2.id.tv_sn_housing_num)
TextView tvHousingNum;
public static SnCodeListFragment newInstance(String foodName, String remarks, int housingNum, List<PurchaseFoodEncodeSn> sns) {
SnCodeListFragment fragment = new SnCodeListFragment();
Bundle bundle = new Bundle();
bundle.putString(FOOD_NAME_KEY, foodName);
bundle.putSerializable(SN_KEY, (Serializable) sns);
bundle.putString(REMARK_KEY, remarks);
bundle.putInt(HOUSING_NUM_KEY, housingNum);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerSnCodeListComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_sn_code_list, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
Bundle arguments = getArguments();
if (arguments != null) {
initTopBar(supplyTopBar, arguments.getString(FOOD_NAME_KEY));
int housingNum = arguments.getInt(HOUSING_NUM_KEY, 0);
if (housingNum > 0) {
tvHousingNum.setText("+" + housingNum);
} else {
tvHousingNum.setText(String.valueOf(housingNum));
}
tvRemark.setText(String.format(getString(R.string.str_format_remark), arguments.getString(REMARK_KEY)));
List<PurchaseFoodEncodeSn> sns = (List<PurchaseFoodEncodeSn>) arguments.getSerializable(SN_KEY);
SnCodesAdapter adapter = new SnCodesAdapter(sns);
rvSn.setAdapter(adapter);
} else {
showMessage("獲取數據失敗");
killMyself();
}
}
}
......@@ -5,6 +5,7 @@ import android.text.InputFilter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
......@@ -20,6 +21,7 @@ import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWareHouseListComponent;
import com.gingersoft.supply_chain.mvp.bean.PurchaseWarehousingOrderDetailsVO;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.contract.WareHouseListContract;
import com.gingersoft.supply_chain.mvp.presenter.WareHouseListPresenter;
......@@ -114,6 +116,16 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList
});
getWarehousing();
edWarehouseListSearch.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, 16), InputFilterUtils.getChAndEnAndNumAndPtInputFilter(mContext)});
edWarehouseListSearch.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED) {
//響應回車按鈕
//隐藏软键盘
hideSoftInput();
pageIndex = 0;
getWarehousing();
}
return false;
});
}
private void getWarehousing() {
......@@ -171,7 +183,7 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList
}
@Override
public void loadListInfo(List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos) {
public void loadListInfo(List<PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos) {
if (purchaseWarehousingOrderDetailsVos == null || purchaseWarehousingOrderDetailsVos.size() <= 0) {
loadService.showCallback(EmptyCallback.class);
return;
......
......@@ -3,6 +3,7 @@ package com.gingersoft.supply_chain.mvp.ui.fragment.warehouse;
import android.animation.LayoutTransition;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -18,6 +19,8 @@ import androidx.print.PrintHelper;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemChildClickListener;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
......@@ -31,6 +34,9 @@ import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWarehouseDetailsComponent;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean;
import com.gingersoft.supply_chain.mvp.bean.OutboundOrderBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodEncodeSn;
import com.gingersoft.supply_chain.mvp.bean.PurchaseWarehousingOrderDetailsVO;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.bean.WarehouseDetailsBean;
import com.gingersoft.supply_chain.mvp.contract.WarehouseDetailsContract;
......@@ -99,7 +105,7 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
private PurchasePageAdapter adapter;
public final static String FOOD_INFO_KEY = "purchaseWarehousingBean";
private WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVO;
private PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVO;
/**
* 入庫
*/
......@@ -109,7 +115,7 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
*/
public final static int OUT_STOCK_TYPE = 1;
public static WarehouseDetailsFragment newInstance(WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVosBean) {
public static WarehouseDetailsFragment newInstance(PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVosBean) {
WarehouseDetailsFragment fragment = new WarehouseDetailsFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(FOOD_INFO_KEY, purchaseWarehousingOrderDetailsVosBean);
......@@ -144,7 +150,7 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
layoutRoot.setLayoutTransition(layoutTransition);
smartRefreshLayout.setOnRefreshListener(refreshLayout -> getPageInfo());
if (arguments != null) {
purchaseWarehousingOrderDetailsVO = (WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO) arguments.getSerializable(FOOD_INFO_KEY);
purchaseWarehousingOrderDetailsVO = (PurchaseWarehousingOrderDetailsVO) arguments.getSerializable(FOOD_INFO_KEY);
if (purchaseWarehousingOrderDetailsVO == null) {
killMyself();
showMessage("食材信息獲取失敗,請稍候重試");
......@@ -244,6 +250,16 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
adapter = new PurchasePageAdapter(wareHousingDetailsAdapter, 2);
vpWarehouseViewpager.setAdapter(adapter);
}
wareHousingDetailsAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (purchaseWarehousingOrderDetailsVO.getFoodMarkSn() == PurchaseFoodBean.HAS_SN) {
//SN食材
if (view.getId() == R.id.tv_warehouse_details_food_num) {
WarehouseDetailsBean item = wareHousingDetailsAdapter.getItem(position);
//查詢消耗,收貨Sn碼詳情
mPresenter.querySnCodeList(item.getFoodQuantity(), "", item.getWarehousingOrderDetailsIds());
}
}
});
} else {
wareHousingDetailsAdapter.setType(vpWarehouseViewpager.getCurrentItem());
wareHousingDetailsAdapter.setList(warehouseDetailsBeans);
......@@ -258,13 +274,14 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
button.setOnClickListener(v -> showInventory(consumeReasonBeans));
}
/**
* 顯示庫存消耗
*
* @param consumeReasonBeans 庫存消耗原因
*/
private void showInventory(List<ConsumeReasonBean> consumeReasonBeans) {
if (smartRefreshLayout.getVisibility() == View.VISIBLE) {
if (vpWarehouseViewpager.getVisibility() == View.VISIBLE) {
//隱藏庫存消耗記錄列表
showList(View.GONE);
//移除掉
......@@ -276,14 +293,20 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
inventoryConsumptionView = new InventoryConsumptionView(requireContext(), consumeReasonBeans, purchaseWarehousingOrderDetailsVO.getFoodNum());
layoutRoot.addView(inventoryConsumptionView);
//如果不是sn食材
if (!purchaseWarehousingOrderDetailsVO.isSnFood()) {
if (purchaseWarehousingOrderDetailsVO.getFoodMarkSn() == PurchaseFoodBean.NOT_HAS_SN) {
inventoryConsumptionView.setShowBtn();
inventoryConsumptionView.setOnConfirmClickListener((consumptionNum, reasonIndex, remarks) -> inventory(consumeReasonBeans))
inventoryConsumptionView.setOnConfirmClickListener((consumptionNum, reasonIndex, remarks) -> inventory(consumeReasonBeans, null, inventoryConsumptionView.getIsPrint()))
.setOnCancelListener(() -> showList(View.VISIBLE));
return;
}
//初始化掃碼view
scanSnView = new ScanSnView(this, null, scanResult -> inventory(consumeReasonBeans)).setOnCancelListener(() -> {
scanSnView = new ScanSnView(this, null, (isAdd, snCode, currentSnCodeNumber) -> inventoryConsumptionView.setConsumptionNumber(currentSnCodeNumber), scanResult -> {
if (scanResult.isEmpty()) {
showMessage("請掃碼sn碼");
return;
}
inventory(consumeReasonBeans, scanResult, inventoryConsumptionView.getIsPrint());
}).setOnCancelListener(() -> {
//取消
showList(View.VISIBLE);
});
......@@ -300,24 +323,47 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
}
}
private void inventory(List<ConsumeReasonBean> consumeReasonBeans) {
//掃完碼,點擊確認
showList(View.VISIBLE);
/**
* 移除显示消耗的view
*/
private void removeInventoryView() {
layoutRoot.removeView(inventoryConsumptionView);
layoutRoot.removeView(scanSnView);
inventoryConsumptionView = null;
scanSnView = null;
}
/**
* 消耗方法
*
* @param consumeReasonBeans
* @param snCodes
* @param whetherPrint
*/
private void inventory(List<ConsumeReasonBean> consumeReasonBeans, List<String> snCodes, boolean whetherPrint) {
//獲取用戶輸入的消耗數量
int consumptionNum = inventoryConsumptionView.getConsumptionNum();
if (consumptionNum == -1) {
return;
}
//調用消耗接口
mPresenter.consumeWareHousing(purchaseWarehousingOrderDetailsVO.getFoodNo(), consumptionNum, consumeReasonBeans.get(inventoryConsumptionView.getReasonIndex()).getId(), inventoryConsumptionView.getRemark());
mPresenter.consumeWareHousing(purchaseWarehousingOrderDetailsVO, consumptionNum, consumeReasonBeans.get(inventoryConsumptionView.getReasonIndex()), inventoryConsumptionView.getRemark(), snCodes, whetherPrint);
setFragmentResult(RESULT_OK, null);
}
@Override
public void printConsumeOrder(String consumeReasonDesc, int consumptionNum) {
if (inventoryConsumptionView.getIsPrint()) {
//打印
onPrintPdf(consumeReasonBeans.get(inventoryConsumptionView.getReasonIndex()).getDescription(), inventoryConsumptionView.getRemark(), consumptionNum);
onPrintPdf(consumeReasonDesc, inventoryConsumptionView.getRemark(), consumptionNum);
}
}
@Override
public void jumpSnList(int foodQuantity, String remark, List<PurchaseFoodEncodeSn> sns) {
start(SnCodeListFragment.newInstance(purchaseWarehousingOrderDetailsVO.getName(), remark, foodQuantity, sns));
}
private void onPrintPdf(String consumptionReason, String remarks, int foodNum) {
PrintHelper printHelper = new PrintHelper(requireContext());
boolean b = PrintHelper.systemSupportsPrint();
......@@ -332,6 +378,9 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
printHelper.setColorMode(PrintHelper.COLOR_MODE_MONOCHROME);
printHelper.printBitmap(String.format(getString(R.string.str_restaurant_outbound_order), purchaseWarehousingOrderDetailsVO.getName()), generatePrintBitmap(consumptionReason, remarks, foodNum), () -> {
//打印完成回調
getPageInfo();
//重新獲取庫存數量
mPresenter.getWarehousingNum(purchaseWarehousingOrderDetailsVO.getFoodNo());
});
} else {
//不支持打印
......@@ -370,10 +419,13 @@ public class WarehouseDetailsFragment extends BaseSupplyChainFragment<WarehouseD
*
* @param visible 是否顯示
*/
private void showList(int visible) {
smartRefreshLayout.setVisibility(visible);
@Override
public void showList(int visible) {
vpWarehouseViewpager.setVisibility(visible);
layoutTitle.setVisibility(visible);
loadService.getLoadLayout().setVisibility(visible);
if (visible == View.VISIBLE) {
removeInventoryView();
}
}
@Override
......
......@@ -21,7 +21,7 @@ import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWarehousingInventoryComponent;
import com.gingersoft.supply_chain.mvp.bean.InventoryRecordBean;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseWarehousingOrderDetailsVO;
import com.gingersoft.supply_chain.mvp.contract.WarehousingInventoryContract;
import com.gingersoft.supply_chain.mvp.presenter.WarehousingInventoryPresenter;
import com.gingersoft.supply_chain.mvp.ui.adapter.InventoryRecordAdapter;
......@@ -29,9 +29,6 @@ import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.jess.arms.di.component.AppComponent;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.util.List;
......@@ -60,9 +57,9 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
SmartRefreshLayout smartRefreshLayout;
private int pageIndex;
private WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVo;
private PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVo;
public static WarehousingInventoryFragment newInstance(WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVo) {
public static WarehousingInventoryFragment newInstance(PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVo) {
WarehousingInventoryFragment fragment = new WarehousingInventoryFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(WarehouseDetailsFragment.FOOD_INFO_KEY, purchaseWarehousingOrderDetailsVo);
......@@ -89,7 +86,7 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
public void initData(@Nullable Bundle savedInstanceState) {
Bundle arguments = getArguments();
if (arguments != null) {
purchaseWarehousingOrderDetailsVo = (WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO) arguments.getSerializable(WarehouseDetailsFragment.FOOD_INFO_KEY);
purchaseWarehousingOrderDetailsVo = (PurchaseWarehousingOrderDetailsVO) arguments.getSerializable(WarehouseDetailsFragment.FOOD_INFO_KEY);
//獲取庫存盤點記錄
getWarehousingRecord();
//加載食品圖片
......
......@@ -178,6 +178,10 @@ public class InventoryConsumptionView extends FrameLayout {
}
}
public void setConsumptionNumber(int consumptionNumber) {
edInput.setText(String.valueOf(consumptionNumber));
}
public interface OnConfirmClickListener {
/**
* 確認時,將消耗的庫存,原因,備註傳遞回去
......
......@@ -36,10 +36,9 @@ public class ScanSnPopup extends BottomPopupView {
TextView tvFoodInboundQuantity;
@BindView(R2.id.layout_scan_sn)
LinearLayout rootLayout;
private OnScanResultListener onScanResultListener;
public ScanSnPopup(@NonNull Fragment fragment, String foodName, List<String> snCodes, OnScanResultListener onScanResultListener) {
public ScanSnPopup(@NonNull Fragment fragment, String foodName, List<String> snCodes) {
super(fragment.requireContext());
if (snCodes == null) {
snCodes = new ArrayList<>();
......@@ -47,10 +46,14 @@ public class ScanSnPopup extends BottomPopupView {
this.foodName = foodName;
this.snCodes = snCodes;
this.fragment = fragment;
this.onScanResultListener = onScanResultListener;
addInnerContent();
}
public ScanSnPopup setOnScanResultListener(OnScanResultListener onScanResultListener) {
this.onScanResultListener = onScanResultListener;
return this;
}
@Override
protected int getImplLayoutId() {
return R.layout.popup_scan_sn;
......@@ -63,7 +66,10 @@ public class ScanSnPopup extends BottomPopupView {
ButterKnife.bind(this);
tvFoodIngredientsName.setText(foodName);
tvFoodInboundQuantity.setText(String.valueOf(snCodes.size()));
rootLayout.addView(new ScanSnView(fragment, snCodes, onScanResultListener).setOnCancelListener(() -> dismiss()));
rootLayout.addView(new ScanSnView(fragment, snCodes, (isAdd, snCode, currentSnCodeNumber) -> {
//每掃描出一個調用
tvFoodInboundQuantity.setText(String.valueOf(currentSnCodeNumber));
}, onScanResultListener).setOnCancelListener(this::dismiss), new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
}
@Override
......@@ -84,6 +90,4 @@ public class ScanSnPopup extends BottomPopupView {
*/
void onScanResult(List<String> scanResult);
}
}
......@@ -2,10 +2,13 @@ package com.gingersoft.supply_chain.mvp.ui.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
......@@ -29,11 +32,14 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import cn.bingoogolapple.qrcode.core.BarcodeType;
import me.yokeyword.fragmentation.SupportHelper;
/**
* @author 宇航.
......@@ -56,18 +62,20 @@ public class ScanSnView extends FrameLayout {
@BindView(R2.id.ed_input_sn)
EditText edInputSn;
@BindView(R2.id.iv_scan_sn)
QMUIAlphaImageButton btnScanSN;
QMUIAlphaImageButton btnScanSn;
@BindView(R2.id.tv_submit_sn)
QMUIAlphaTextView tvSubmitSN;
QMUIAlphaTextView tvSubmitSn;
private Fragment fragment;
private OnCancelListener onCancelListener;
private OnSingerResultListener onSingerResultListener;
public ScanSnView(Fragment fragment, List<String> snCodes, ScanSnPopup.OnScanResultListener onScanResultListener) {
public ScanSnView(Fragment fragment, List<String> snCodes, OnSingerResultListener onSingerResultListener, ScanSnPopup.OnScanResultListener onScanResultListener) {
super(fragment.requireContext());
this.snCodes = snCodes;
this.onScanResultListener = onScanResultListener;
this.fragment = fragment;
this.onSingerResultListener = onSingerResultListener;
init();
}
......@@ -87,11 +95,12 @@ public class ScanSnView extends FrameLayout {
private void init() {
View rootView = LayoutInflater.from(getContext()).inflate(R.layout.layout_scan_sn, this, false);
ButterKnife.bind(this, rootView);
//初始化adapter
SnCodeAdapter adapter = new SnCodeAdapter(R.layout.item_sn_code, snCodes);
rvSnCode.setAdapter(adapter);
//掃描sn媽
btnScanSN.setOnClickListener(v ->
btnScanSn.setOnClickListener(v ->
XPermissionUtils.launchCamera(fragment, (allGranted, grantedList, deniedList) -> {
if (allGranted) {
//去掃碼頁面
......@@ -104,22 +113,29 @@ public class ScanSnView extends FrameLayout {
if (qrCodeResult != null) {
String snCode = String.valueOf(qrCodeResult);
if (adapter.getData().contains(snCode)) {
ToastUtils.show(getContext(), "商品已存在");
ToastUtils.show(getContext(), "商品已存在,不能重複添加");
} else {
adapter.addData(String.valueOf(qrCodeResult));
adapter.addData(snCode);
onSingerResultListener.onScanValue(true, snCode, adapter.getItemCount());
}
}
});
}
})
);
edInputSn.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED) {
//響應回車按鈕
//隐藏软键盘
SupportHelper.hideSoftInput(v);
commitSnCode(adapter);
}
return false;
});
//提交按鈕
tvSubmitSN.setOnClickListener(v -> {
tvSubmitSn.setOnClickListener(v -> {
//提交輸入框中的sn碼
if (TextUtil.isNotEmptyOrNullOrUndefined(edInputSn)) {
adapter.addData(edInputSn.getText().toString());
edInputSn.setText("");
}
commitSnCode(adapter);
});
btnFoodIngredientsConfirm.setOnClickListener(v -> {
......@@ -139,17 +155,42 @@ public class ScanSnView extends FrameLayout {
});
adapter.setOnItemChildClickListener((adapter1, view, position) -> {
if (view.getId() == R.id.iv_sn_code_delete) {
onSingerResultListener.onScanValue(false, adapter.getItem(position), adapter.getItemCount());
adapter1.removeAt(position);
}
});
addView(rootView);
}
private void commitSnCode(SnCodeAdapter adapter) {
if (TextUtil.isNotEmptyOrNullOrUndefined(edInputSn)) {
if (adapter.getData().contains(edInputSn.getText().toString())) {
ToastUtils.show(getContext(), "商品已存在,不能重複添加");
} else {
String snCode = edInputSn.getText().toString();
adapter.addData(snCode);
edInputSn.setText("");
onSingerResultListener.onScanValue(true, snCode, adapter.getItemCount());
}
} else {
ToastUtils.show(getContext(), "請輸入SN碼");
}
}
public ScanSnView setOnCancelListener(OnCancelListener onCancelListener) {
this.onCancelListener = onCancelListener;
return this;
}
public interface OnSingerResultListener {
/**
* @param isAdd true為新增,false為刪除
* @param snCode sn碼
* @param currentSnCodeNumber 當前有多少個sn碼
*/
void onScanValue(boolean isAdd, String snCode, int currentSnCodeNumber);
}
public interface OnCancelListener {
void onCancel();
}
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/supply_chain_bg_color"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/head_height"
android:background="@color/trans"
app:elevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="@dimen/dp_10"
app:layout_scrollFlags="scroll">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="庫存:"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16" />
<TextView
android:id="@+id/tv_sn_housing_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/red"
android:textSize="@dimen/dp_18"
android:textStyle="bold"
tools:text="100" />
</LinearLayout>
<TextView
android:id="@+id/tv_remark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
tools:text="備註:" />
<include
layout="@layout/include_sn_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginRight="@dimen/dp_10"
app:layout_scrollFlags="scroll|exitUntilCollapsed" />
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/supply_chain_top_bar" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
......@@ -37,6 +37,7 @@
android:layout_weight="1"
android:background="@null"
android:hint="@string/search_food_name_no"
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLength="20"
android:maxLines="1" />
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_warehousing_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/supply_chain_bg_color"
android:orientation="vertical">
android:background="@color/supply_chain_bg_color">
<include layout="@layout/supply_chain_top_bar" />
<LinearLayout
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/shape_white_eight_corners_bg"
android:orientation="horizontal"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10">
<ImageView
android:id="@+id/iv_warehouse_img"
android:layout_width="@dimen/dp_77"
android:layout_height="@dimen/dp_77"
android:layout_marginLeft="@dimen/dp_13" />
android:background="@color/trans">
<include
layout="@layout/supply_chain_top_bar"
app:layout_scrollFlags="scroll|enterAlways" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_8"
android:orientation="vertical">
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/shape_white_eight_corners_bg"
android:orientation="horizontal"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
app:layout_scrollFlags="scroll|enterAlways">
<ImageView
android:id="@+id/iv_warehouse_img"
android:layout_width="@dimen/dp_77"
android:layout_height="@dimen/dp_77"
android:layout_marginLeft="@dimen/dp_13" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_8"
android:orientation="vertical">
<TextView
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="庫存:" />
android:orientation="horizontal">
<TextView
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="庫存:" />
<TextView
android:id="@+id/tv_warehouse_inventory_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/other_order_details_sure_btn_color"
android:textSize="@dimen/dp_19"
tools:text="100" />
<TextView
android:id="@+id/tv_food_unit"
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="盒" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<TextView
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="規格:" />
<TextView
android:id="@+id/tv_warehouse_specifications"
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="1KG/盒" />
</LinearLayout>
<TextView
android:id="@+id/tv_warehouse_inventory_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/other_order_details_sure_btn_color"
android:textSize="@dimen/dp_19"
tools:text="100" />
<TextView
android:id="@+id/tv_food_unit"
android:id="@+id/tv_warehouse_unit_price"
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="盒" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<TextView
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="規格:" />
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center_vertical"
tools:text="最新單價:$10.00" />
<TextView
android:id="@+id/tv_warehouse_specifications"
android:id="@+id/tv_warehouse_total_amount"
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="1KG/盒" />
tools:text="總價:$1000.00" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_warehousing_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:orientation="horizontal"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed">
<TextView
android:id="@+id/tv_warehouse_unit_price"
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:id="@+id/tv_warehousing_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
tools:text="最新單價:$10.00" />
android:background="@drawable/shape_left_themecolor_radius_btn"
android:gravity="center"
android:paddingTop="@dimen/dp_11"
android:paddingBottom="@dimen/dp_11"
android:text="入庫流水"
android:textColor="@color/white"
android:textSize="@dimen/dp_17" />
<TextView
android:id="@+id/tv_warehouse_total_amount"
style="@style/WareHouse_Details_TextStyle"
android:layout_width="wrap_content"
android:id="@+id/tv_outbound_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
tools:text="總價:$1000.00" />
android:layout_weight="1"
android:background="@drawable/shape_right_white_radius_btn"
android:gravity="center"
android:paddingTop="@dimen/dp_11"
android:paddingBottom="@dimen/dp_11"
android:text="出庫流水"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_17" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_warehousing_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_warehousing_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/shape_left_themecolor_radius_btn"
android:gravity="center"
android:paddingTop="@dimen/dp_11"
android:paddingBottom="@dimen/dp_11"
android:text="入庫流水"
android:textColor="@color/white"
android:textSize="@dimen/dp_17" />
<TextView
android:id="@+id/tv_outbound_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/shape_right_white_radius_btn"
android:gravity="center"
android:paddingTop="@dimen/dp_11"
android:paddingBottom="@dimen/dp_11"
android:text="出庫流水"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_17" />
</LinearLayout>
</com.google.android.material.appbar.AppBarLayout>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/srl_warehouse_details_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:srlAccentColor="@color/theme_333_color"
app:srlEnablePreviewInEditMode="true"
app:srlPrimaryColor="@color/trans">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/vp_warehouse_viewpager"
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_10" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- scrollview在代碼中要添加多個子view,所以多用一個LinearLayout包裹起來-->
<LinearLayout
android:id="@+id/layout_warehousing_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/vp_warehouse_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_10"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
</androidx.core.widget.NestedScrollView>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/layout_sn_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/theme_color"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<TextView
android:id="@+id/tv_serial_number"
style="@style/TextStyle_Sn_warehousing_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="序號" />
<include layout="@layout/include_vertical_color_e8_dividing_line" />
<TextView
android:id="@+id/tv_sn_code"
style="@style/TextStyle_Sn_warehousing_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2.4"
android:text="SN碼" />
<include layout="@layout/include_vertical_color_e8_dividing_line" />
<TextView
android:id="@+id/tv_operator"
style="@style/TextStyle_Sn_warehousing_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.8"
android:text="操作人" />
<include layout="@layout/include_vertical_color_e8_dividing_line" />
<TextView
android:id="@+id/tv_time"
style="@style/TextStyle_Sn_warehousing_record"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2.1"
android:text="時間" />
</LinearLayout>
\ No newline at end of file
......@@ -35,6 +35,7 @@
android:layout_marginRight="@dimen/dp_4"
android:layout_weight="1"
android:background="@null"
android:imeOptions="actionDone"
android:gravity="center_vertical"
android:hint="@string/str_please_input"
android:inputType="number"
......@@ -77,6 +78,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
<LinearLayout
......
......@@ -4,4 +4,5 @@
android:id="@+id/rv_purchase_list_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
\ No newline at end of file
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
\ No newline at end of file
......@@ -2,11 +2,11 @@
<com.qmuiteam.qmui.widget.QMUITopBar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/supply_top_bar"
app:qmui_topbar_title_color="@color/theme_white_color"
android:layout_width="match_parent"
android:layout_height="@dimen/head_height"
app:qmui_topbar_text_btn_color_state_list="@color/white"
android:background="@color/theme_color"
android:fitsSystemWindows="true" />
android:fitsSystemWindows="true"
app:qmui_topbar_text_btn_color_state_list="@color/white"
app:qmui_topbar_title_color="@color/theme_white_color" />
......@@ -16,7 +16,7 @@
<string name="str_format_purchase_no">採購單號:%1$s</string>
<string name="str_format_warehouse_no">入庫單號:%1$s</string>
<string name="str_format_remark">備註:%1$d</string>
<string name="str_format_remark">備註:%1$s</string>
<string name="str_format_positive">+%1$s</string>
<string name="str_format_less">-%1$s</string>
<string name="str_unit_price_colon">單價:$%1$.2f</string>
......@@ -33,4 +33,5 @@
<string name="str_no">NO:%1$s</string>
<string name="str_prepared">製單人:%1$s</string>
<string name="str_device_not_print">您的設備不支持打印</string>
</resources>
\ No newline at end of file
......@@ -48,7 +48,17 @@
<item name="android:gravity">center</item>
<item name="android:layout_marginRight">@dimen/dp_1</item>
</style>
<style name="TextStyle_Sn_warehousing_record">
<item name="android:textSize">@dimen/dp_14</item>
<item name="android:textColor">@color/white</item>
<item name="android:ellipsize">end</item>
<item name="android:maxLines">1</item>
<item name="android:paddingTop">@dimen/dp_10</item>
<item name="android:paddingBottom">@dimen/dp_10</item>
<item name="android:paddingLeft">@dimen/dp_2</item>
<item name="android:paddingRight">@dimen/dp_2</item>
<item name="android:gravity">center</item>
</style>
<style name="WareHouse_Value_TextStyle">
<item name="android:textSize">@dimen/dp_14</item>
<item name="android:textStyle">bold</item>
......
......@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 29,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode : 29,
versionName : "1.2.9"
versionCode : 30,
versionName : "1.3.0"
]
version = [
......
......@@ -76,10 +76,10 @@ public class ArmsUtils {
res));
// 新建一个属性对象,设置文字的大小
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(size, true);
// 附加属性到文本
// 附加属性到文本
ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 设置hint
// 设置hint
v.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失
}
......@@ -215,9 +215,9 @@ public class ArmsUtils {
* @param string
*/
public static void makeText(Context context, String string) {
if(mToast != null){
if (mToast != null) {
mToast.cancel();
mToast = null;
mToast = null;
}
mToast = Toast.makeText(context.getApplicationContext(), string, Toast.LENGTH_SHORT);
mToast.setText(string);
......
package com.gingersoft.gsa.cloud.common.constans;
import android.content.Context;
import android.util.Log;
import com.gingersoft.gsa.cloud.common.BuildConfig;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
......@@ -43,7 +44,8 @@ public class HttpsConstans {
public static String RESTAURANT_API_PATH = "/ricepon-restaurant/api/";//餐廳模塊路徑
public static String PURCHASE_API_PATH = "/ricepon-purchase/api/";//供應鏈路徑
public static String ROOT_SERVER_YOU_CHANG_HK = "http://192.168.1.149:9015/api"; //友常本地
// public static String ROOT_SERVER_YOU_CHANG_HK = "http://192.168.1.149:9015/api"; //友常本地
public static String ROOT_SERVER_YOU_CHANG_HK = "http://192.168.1.161:9016/api"; //溫浩本地
public static String ROOT_SERVER_ZHI_WANG_HK = "http://192.168.1.169:9012/api"; //世維本地
public static String ROOT_SERVER_SHI_SHU_HK = "http://192.168.1.154:9012/api"; //石书本地
......
......@@ -31,10 +31,10 @@ public class RestaurantInfoManager {
if (restaurantInfo == null) {
restaurantInfo = new RestaurantInfo();
}
brandInfo.setBrandId((Integer) SPUtils.get(UserConstans.brandId, 1));
brandInfo.setBrandId((Integer) SPUtils.get(UserConstans.brandId, -1));
brandInfo.setBrandName((String) SPUtils.get(UserConstans.brandName, ""));
restaurantInfo.setGsPosShopId((String) SPUtils.get(UserConstans.gsPosShopId, "-1"));
restaurantInfo.setRestaurantId((Integer) SPUtils.get(UserConstans.restaurantId, 26));
restaurantInfo.setRestaurantId((Integer) SPUtils.get(UserConstans.restaurantId, -1));
restaurantInfo.setRestaurantName((String) SPUtils.get(UserConstans.restaurantName, ""));
}
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/theme_color"/>
<corners android:radius="@dimen/dp_8"/>
<!-- 填充背景色 -->
<solid android:color="@color/theme_color" />
<!-- 圓角 -->
<corners android:radius="@dimen/dp_8" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white"/>
<corners android:radius="@dimen/dp_8"/>
<!-- 填充背景色 -->
<solid android:color="@color/white" />
<!-- 圓角 -->
<corners android:radius="@dimen/dp_8" />
</shape>
\ No newline at end of file
......@@ -13,6 +13,7 @@
style="@style/Multi_Input_editStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:imeOptions="actionNext"
android:layout_marginLeft="@dimen/dp_5"
android:layout_weight="1"
android:drawablePadding="@dimen/dp_5"
......
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