Commit 931d78d8 by Wyh

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

parent 771adf38
...@@ -11,6 +11,7 @@ import com.epson.epos2.printer.ReceiveListener; ...@@ -11,6 +11,7 @@ import com.epson.epos2.printer.ReceiveListener;
import com.gingersoft.gsa.cloud.common.logan.LoganManager; import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterFlowProxy; 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.log.LogUtil;
import com.gingersoft.gsa.cloud.common.utils.threadPool.ThreadPoolManager;
import com.gingersoft.gsa.cloud.print.PrintExecutor; import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder; import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.impl.OnPrjPrintResultListener; import com.gingersoft.gsa.cloud.print.impl.OnPrjPrintResultListener;
...@@ -72,25 +73,27 @@ public class EpsonPrint implements ReceiveListener { ...@@ -72,25 +73,27 @@ public class EpsonPrint implements ReceiveListener {
if (mPrinter == null) { if (mPrinter == null) {
return; return;
} }
while (true) { ThreadPoolManager.getInstence().putExecutableTasks(() -> {
try { while (true) {
LoganManager.w_printer(TAG, "斷開連接"); try {
mPrinter.disconnect(); LoganManager.w_printer(TAG, "斷開連接");
break; mPrinter.disconnect();
} catch (final Exception e) { break;
LoganManager.w_printer(TAG, "斷開連接報錯:" + e.getMessage()); } catch (final Exception e) {
if (e instanceof Epos2Exception) { LoganManager.w_printer(TAG, "斷開連接報錯:" + e.getMessage());
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING. if (e instanceof Epos2Exception) {
if (((Epos2Exception) e).getErrorStatus() == Epos2Exception.ERR_PROCESSING) { //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 { } else {
break; 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 { ...@@ -51,5 +51,9 @@ public class OrderWareHouseBean {
* 副單位 * 副單位
*/ */
private WareHousingUnitBean purchaseWarehousingUnit; 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 ...@@ -97,6 +97,12 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas
private int minimumInventory; private int minimumInventory;
private int shelfLife; private int shelfLife;
private int warningDays; 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 ...@@ -137,6 +143,7 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas
/** /**
* 复制一個類 * 复制一個類
*
* @param old * @param old
* @return * @return
*/ */
...@@ -158,7 +165,6 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas ...@@ -158,7 +165,6 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas
} }
@Override @Override
public PurchaseFoodBean cloneForDiff() { public PurchaseFoodBean cloneForDiff() {
return null; 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 { ...@@ -161,6 +161,14 @@ public class PurchaseOrderDetailsBean {
private String orderNo; private String orderNo;
private DeputyUnitBean showUnit; 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 { ...@@ -67,33 +67,5 @@ public class WareHouseListBean {
*/ */
private int count; 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 { ...@@ -26,7 +26,7 @@ public class WarehouseDetailsBean {
private String name; private String name;
private String purchase; private String purchase;
private String orderNo; private String orderNo;
private double foodQuantity; private int foodQuantity;
private double totalPrice; private double totalPrice;
// private String createTime; // private String createTime;
private String supplierName; private String supplierName;
...@@ -55,6 +55,10 @@ public class WarehouseDetailsBean { ...@@ -55,6 +55,10 @@ public class WarehouseDetailsBean {
* 消耗狀態,1從未被消耗,2消耗了一部分,3完全消耗 * 消耗狀態,1從未被消耗,2消耗了一部分,3完全消耗
*/ */
private int consumeStatus; private int consumeStatus;
/**
* 入庫詳情ids,逗號分隔
*/
private String warehousingOrderDetailsIds;
public final static int WAREHOUSE_STATE_NEVER_CONSUMED = 1; public final static int WAREHOUSE_STATE_NEVER_CONSUMED = 1;
public final static int WAREHOUSE_STATE_PART_CONSUMED = 2; public final static int WAREHOUSE_STATE_PART_CONSUMED = 2;
public final static int WAREHOUSE_STATE_ALL_CONSUMED = 3; public final static int WAREHOUSE_STATE_ALL_CONSUMED = 3;
......
...@@ -33,6 +33,8 @@ public interface OrderDetailsContract { ...@@ -33,6 +33,8 @@ public interface OrderDetailsContract {
void uploadPicSuccess(String imgUrl); void uploadPicSuccess(String imgUrl);
void buyAgain(); void buyAgain();
void querySnCodeSuccess(int position, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
...@@ -49,6 +51,12 @@ public interface OrderDetailsContract { ...@@ -49,6 +51,12 @@ public interface OrderDetailsContract {
Observable<BaseResult> deleteOrder(int orderId); Observable<BaseResult> deleteOrder(int orderId);
/** /**
* 查詢食品sn碼
* @param encodeFoodNo 食品編號
* @param encodeOrderNo 訂單編號
*/
Observable<BaseResult> querySnCodes(String encodeFoodNo, String encodeOrderNo);
/**
* 再來一單 * 再來一單
* @param map * @param map
* @return * @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; package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult; 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.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
...@@ -28,7 +29,7 @@ public interface WareHouseListContract { ...@@ -28,7 +29,7 @@ public interface WareHouseListContract {
interface View extends IView { interface View extends IView {
void loadWarehousingInfo(WareHouseListBean.WareHousingDataBean data); void loadWarehousingInfo(WareHouseListBean.WareHousingDataBean data);
void loadListInfo(List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos); void loadListInfo(List<PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos);
void finishLoad(); void finishLoad();
......
...@@ -2,6 +2,7 @@ package com.gingersoft.supply_chain.mvp.contract; ...@@ -2,6 +2,7 @@ package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult; import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean; 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.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.bean.WarehouseDetailsBean; import com.gingersoft.supply_chain.mvp.bean.WarehouseDetailsBean;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
...@@ -52,6 +53,29 @@ public interface WarehouseDetailsContract { ...@@ -52,6 +53,29 @@ public interface WarehouseDetailsContract {
* 修改庫存數量 * 修改庫存數量
*/ */
void setWarehousingNum(int num); 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返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
...@@ -75,6 +99,10 @@ public interface WarehouseDetailsContract { ...@@ -75,6 +99,10 @@ public interface WarehouseDetailsContract {
*/ */
Observable<BaseResult> getWarehousingNum(Map<String, Object> map); 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 ...@@ -74,6 +74,11 @@ public class OrderDetailsModel extends BaseModel implements OrderDetailsContract
} }
@Override @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) { public Observable<BaseResult> buyAgainByFoodIds(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).buyAgainByFoodIds(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 ...@@ -76,5 +76,10 @@ public class WarehouseDetailsModel extends BaseModel implements WarehouseDetails
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getWarehousingNum(map); 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 ...@@ -102,6 +102,10 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
*/ */
public int foodNoIndex = 10; public int foodNoIndex = 10;
/** /**
* 食材sn碼下標
*/
public int foodSnIndex = 11;
/**
* 食材單價下標 * 食材單價下標
*/ */
public int foodIngredientPriceIndex = 12; public int foodIngredientPriceIndex = 12;
...@@ -240,6 +244,8 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient ...@@ -240,6 +244,8 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
foodNoInputBean.setEdit(false); foodNoInputBean.setEdit(false);
foodNoInputBean.setShowValue(purchaseFoodBean.getFoodNo()); foodNoInputBean.setShowValue(purchaseFoodBean.getFoodNo());
} }
//sn食材
infoMultiBeans.get(foodSnIndex).setChecked(purchaseFoodBean.getFoodMarkSn() == PurchaseFoodBean.HAS_SN);
//單價 //單價
if (purchaseFoodBean.getUnitPrice() != null) { if (purchaseFoodBean.getUnitPrice() != null) {
infoMultiBeans.get(foodIngredientPriceIndex).setShowValue(purchaseFoodBean.getUnitPrice() + ""); infoMultiBeans.get(foodIngredientPriceIndex).setShowValue(purchaseFoodBean.getUnitPrice() + "");
...@@ -474,6 +480,8 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient ...@@ -474,6 +480,8 @@ public class NewFoodIngredientsPresenter extends BasePresenter<NewFoodIngredient
} else { } else {
purchaseFoodBean.setFoodNo(null); purchaseFoodBean.setFoodNo(null);
} }
//是否有sn碼
purchaseFoodBean.setFoodMarkSn(infoMultiBeans.get(foodSnIndex).isChecked() ? PurchaseFoodBean.HAS_SN : PurchaseFoodBean.NOT_HAS_SN);
//單價 //單價
String unitPriceStr = infoMultiBeans.get(foodIngredientPriceIndex).getShowValue(); String unitPriceStr = infoMultiBeans.get(foodIngredientPriceIndex).getShowValue();
if (TextUtil.isNotEmptyOrNullOrUndefined(unitPriceStr)) { if (TextUtil.isNotEmptyOrNullOrUndefined(unitPriceStr)) {
......
...@@ -11,6 +11,7 @@ import com.gingersoft.gsa.cloud.common.utils.other.TextUtil; ...@@ -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.gsa.cloud.common.utils.view.BitmapUtil;
import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean; import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean; 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.PurchaseOrderDetailsBean;
import com.gingersoft.supply_chain.mvp.bean.OrderWareHouseBean; import com.gingersoft.supply_chain.mvp.bean.OrderWareHouseBean;
import com.gingersoft.supply_chain.mvp.bean.WareHousingUnitBean; import com.gingersoft.supply_chain.mvp.bean.WareHousingUnitBean;
...@@ -361,22 +362,13 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo ...@@ -361,22 +362,13 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
List<OrderWareHouseBean.PurchaseWarehousingOrderDetail> purchaseWarehousingOrderDetails = new ArrayList<>(); List<OrderWareHouseBean.PurchaseWarehousingOrderDetail> purchaseWarehousingOrderDetails = new ArrayList<>();
for (PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean purchaseOrderDetailsInfoVosBean : purchaseOrderDetailsInfoVosBeans) { for (PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean purchaseOrderDetailsInfoVosBean : purchaseOrderDetailsInfoVosBeans) {
if (purchaseOrderDetailsInfoVosBean.getStatus() != PurchaseOrderDetailsBean.COMPLETE_RECEIVED && purchaseOrderDetailsInfoVosBean.isChecked()) { if (purchaseOrderDetailsInfoVosBean.getStatus() != PurchaseOrderDetailsBean.COMPLETE_RECEIVED && purchaseOrderDetailsInfoVosBean.isChecked()) {
//新的入庫類
OrderWareHouseBean.PurchaseWarehousingOrderDetail purchaseWarehousingOrderDetail = new OrderWareHouseBean.PurchaseWarehousingOrderDetail(); OrderWareHouseBean.PurchaseWarehousingOrderDetail purchaseWarehousingOrderDetail = new OrderWareHouseBean.PurchaseWarehousingOrderDetail();
purchaseWarehousingOrderDetail.setOrderDetailsId(purchaseOrderDetailsInfoVosBean.getId()); purchaseWarehousingOrderDetail.setOrderDetailsId(purchaseOrderDetailsInfoVosBean.getId());
purchaseWarehousingOrderDetail.setPurchaseFoodId(purchaseOrderDetailsInfoVosBean.getPurchaseFoodId()); purchaseWarehousingOrderDetail.setPurchaseFoodId(purchaseOrderDetailsInfoVosBean.getPurchaseFoodId());
purchaseWarehousingOrderDetail.setFoodQuantity(purchaseOrderDetailsInfoVosBean.getFoodQuantity()); purchaseWarehousingOrderDetail.setFoodQuantity(purchaseOrderDetailsInfoVosBean.getFoodQuantity());
purchaseWarehousingOrderDetail.setFoodPrice(purchaseOrderDetailsInfoVosBean.getFoodPrice()); purchaseWarehousingOrderDetail.setFoodPrice(purchaseOrderDetailsInfoVosBean.getFoodPrice());
purchaseWarehousingOrderDetail.setTotalPrice(MoneyUtil.priceCalculation(purchaseOrderDetailsInfoVosBean.getFoodPrice(), purchaseOrderDetailsInfoVosBean.getFoodQuantity())); 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(); DeputyUnitBean deputyUnitBean = purchaseOrderDetailsInfoVosBean.getShowUnit();
WareHousingUnitBean wareHousingUnitBean = DeputyUnitBean.getWareHousingUnitByDeputyUnit(deputyUnitBean); WareHousingUnitBean wareHousingUnitBean = DeputyUnitBean.getWareHousingUnitByDeputyUnit(deputyUnitBean);
if (purchaseOrderDetailsInfoVosBean.getStatus() != PurchaseOrderDetailsBean.WAIT_RECEIVED && deputyUnitBean.getId() != null) { if (purchaseOrderDetailsInfoVosBean.getStatus() != PurchaseOrderDetailsBean.WAIT_RECEIVED && deputyUnitBean.getId() != null) {
...@@ -386,6 +378,21 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo ...@@ -386,6 +378,21 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
wareHousingUnitBean.setBrandId(RestaurantInfoManager.newInstance().getBrandId()); wareHousingUnitBean.setBrandId(RestaurantInfoManager.newInstance().getBrandId());
wareHousingUnitBean.setRestaurantId(RestaurantInfoManager.newInstance().getRestaurantId()); wareHousingUnitBean.setRestaurantId(RestaurantInfoManager.newInstance().getRestaurantId());
purchaseWarehousingOrderDetail.setPurchaseWarehousingUnit(wareHousingUnitBean); 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); purchaseWarehousingOrderDetails.add(purchaseWarehousingOrderDetail);
} }
} }
...@@ -419,6 +426,29 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo ...@@ -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 圖片路徑 * @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; package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application; import android.app.Application;
import android.view.View;
import com.gingersoft.gsa.cloud.common.bean.BaseResult; 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.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils; import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil; import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean; import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean;
import com.gingersoft.supply_chain.mvp.bean.ConsumeWareHousingBean; 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.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.bean.WarehouseDetailsBean; import com.gingersoft.supply_chain.mvp.bean.WarehouseDetailsBean;
import com.gingersoft.supply_chain.mvp.content.Constant; import com.gingersoft.supply_chain.mvp.content.Constant;
...@@ -22,6 +27,7 @@ import io.reactivex.schedulers.Schedulers; ...@@ -22,6 +27,7 @@ import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody; import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import javax.inject.Inject; import javax.inject.Inject;
...@@ -29,9 +35,11 @@ import javax.inject.Inject; ...@@ -29,9 +35,11 @@ import javax.inject.Inject;
import com.gingersoft.supply_chain.mvp.contract.WarehouseDetailsContract; import com.gingersoft.supply_chain.mvp.contract.WarehouseDetailsContract;
import com.jess.arms.utils.RxLifecycleUtils; import com.jess.arms.utils.RxLifecycleUtils;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
...@@ -165,20 +173,30 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon ...@@ -165,20 +173,30 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon
/** /**
* 庫存消耗 * 庫存消耗
* *
* @param foodNo 食材編號 * @param purchaseWarehousingOrderDetailsVO 食材信息
* @param consumeQuantity 消耗數量 * @param consumeQuantity 消耗數量
* @param purchaseConsumeReasonId 原因id * @param consumeReasonBean 消耗原因
* @param remarks 備註 * @param remarks 備註
*/ */
public void consumeWareHousing(String foodNo, int consumeQuantity, int purchaseConsumeReasonId, String remarks) { public void consumeWareHousing(PurchaseWarehousingOrderDetailsVO purchaseWarehousingOrderDetailsVO, int consumeQuantity, ConsumeReasonBean consumeReasonBean, String remarks, List<String> snCodes, boolean whetherPrint) {
FormBody.Builder formBody = new FormBody.Builder() PurchaseConsumeSnBean purchaseConsumeSnBean = new PurchaseConsumeSnBean();
.add("foodNo", foodNo) purchaseConsumeSnBean.brandId = RestaurantInfoManager.newInstance().getBrandId();
.add("consumeQuantity", String.valueOf(consumeQuantity)) purchaseConsumeSnBean.restaurantId = RestaurantInfoManager.newInstance().getRestaurantId();
.add("purchaseConsumeReasonId", String.valueOf(purchaseConsumeReasonId)) purchaseConsumeSnBean.foodNo = purchaseWarehousingOrderDetailsVO.getFoodNo();
.add("remarks", remarks); purchaseConsumeSnBean.purchaseConsumeReasonId = consumeReasonBean.getId();
Constant.addRestaurantId(formBody); purchaseConsumeSnBean.remarks = remarks;
Constant.addBrandId(formBody); if (snCodes != null) {
mModel.consumeWareHousing(formBody.build()) 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()) .subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(Constant.UPDATE_LOADING)) .doOnSubscribe(disposable -> mRootView.showLoading(Constant.UPDATE_LOADING))
.subscribeOn(AndroidSchedulers.mainThread()) .subscribeOn(AndroidSchedulers.mainThread())
...@@ -189,10 +207,18 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon ...@@ -189,10 +207,18 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon
@Override @Override
public void onNext(BaseResult baseResult) { public void onNext(BaseResult baseResult) {
if (baseResult != null && baseResult.isSuccess()) { if (baseResult != null && baseResult.isSuccess()) {
//消耗完之後,刷新列表 if (whetherPrint) {
mRootView.getPageInfo(); mRootView.printConsumeOrder(consumeReasonBean.getDescription(), consumeQuantity);
//重新獲取庫存數量 } else {
getWarehousingNum(foodNo); //如果需要打印,則是在打印完之後查詢,如果不需要打印,現在就查詢刷新頁面
//消耗完之後,刷新列表
mRootView.getPageInfo();
//重新獲取庫存數量
getWarehousingNum(purchaseWarehousingOrderDetailsVO.getFoodNo());
}
//不需要打印,現在就移除消耗视图,显示流水页面
//如果需要打印,則在打印完成後執行
mRootView.showList(View.VISIBLE);
} else if (baseResult != null && TextUtil.isNotEmptyOrNullOrUndefined(baseResult.getErrMsg())) { } else if (baseResult != null && TextUtil.isNotEmptyOrNullOrUndefined(baseResult.getErrMsg())) {
mRootView.showMessage(baseResult.getErrMsg()); mRootView.showMessage(baseResult.getErrMsg());
} else { } else {
...@@ -231,4 +257,26 @@ public class WarehouseDetailsPresenter extends BasePresenter<WarehouseDetailsCon ...@@ -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 { ...@@ -282,6 +282,11 @@ public interface SupplierServer {
@POST("purchaseOrder/delete" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("purchaseOrder/delete" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> deleteOrder(@Field("id") int orderId); 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獲取詳細信息 * 再來一單,通過食材ids獲取詳細信息
* *
...@@ -448,6 +453,9 @@ public interface SupplierServer { ...@@ -448,6 +453,9 @@ public interface SupplierServer {
@GET("purchaseConsume/get/remaining/quantity" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("purchaseConsume/get/remaining/quantity" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getWarehousingNum(@QueryMap Map<String, Object> map); 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; ...@@ -11,6 +11,7 @@ import android.widget.EditText;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.supply_chain.R; import com.gingersoft.supply_chain.R;
......
...@@ -37,7 +37,7 @@ public class InventoryRecordAdapter extends BaseQuickAdapter<InventoryRecordBean ...@@ -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_username, inventoryRecordBean.getUserName());
viewHolder.setText(R.id.tv_inventory_record_number, String.valueOf(inventoryRecordBean.getRemainingQuantity())); 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_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_username, ContextCompat.getColor(getContext(), R.color.color_3c));
viewHolder.setTextColor(R.id.tv_inventory_record_number, 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 ...@@ -40,6 +40,7 @@ public class WareHousingDetailsAdapter extends BaseQuickAdapter<WarehouseDetails
public WareHousingDetailsAdapter(@Nullable List<WarehouseDetailsBean> data, int type) { public WareHousingDetailsAdapter(@Nullable List<WarehouseDetailsBean> data, int type) {
super(R.layout.item_warehouse_details, data); super(R.layout.item_warehouse_details, data);
this.type = type; this.type = type;
addChildClickViewIds(R.id.tv_warehouse_details_food_num);
} }
@Override @Override
......
...@@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat; ...@@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder; import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.supply_chain.R; import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.PurchaseWarehousingOrderDetailsVO;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean; import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
...@@ -20,19 +21,19 @@ import java.util.List; ...@@ -20,19 +21,19 @@ import java.util.List;
* Time: 16:36 * Time: 16:36
* Use:庫存查詢的訂單列表 * Use:庫存查詢的訂單列表
*/ */
public class WarehousingQueryAdapter extends BaseQuickAdapter<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO, BaseViewHolder> { public class WarehousingQueryAdapter extends BaseQuickAdapter<PurchaseWarehousingOrderDetailsVO, BaseViewHolder> {
private Context context; private Context context;
private int[] colors = new int[]{R.color.color_f9, R.color.white}; 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); super(R.layout.item_warehousing_query, purchaseWarehousingOrderDetailsVosBeans);
addChildClickViewIds(R.id.tv_warehouse_item_inventory_quantity); addChildClickViewIds(R.id.tv_warehouse_item_inventory_quantity);
this.context = context; this.context = context;
} }
@Override @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_name, item.getName());
viewHolder.setText(R.id.tv_warehouse_item_ingredients_species, item.getFoodCategoryName()); viewHolder.setText(R.id.tv_warehouse_item_ingredients_species, item.getFoodCategoryName());
viewHolder.setText(R.id.tv_warehouse_item_unit, item.getUnitName()); viewHolder.setText(R.id.tv_warehouse_item_unit, item.getUnitName());
......
...@@ -113,8 +113,8 @@ public class FunctionListFragment extends BaseSupplyChainFragment<FunctionListPr ...@@ -113,8 +113,8 @@ public class FunctionListFragment extends BaseSupplyChainFragment<FunctionListPr
start(SupplierListFragment.newInstance(false, null)); start(SupplierListFragment.newInstance(false, null));
break; break;
case "食材": case "食材":
// start(FoodIngredientsFragment.newInstance(FOOD_INGREDIENTS)); start(FoodIngredientsFragment.newInstance(FOOD_INGREDIENTS));
start(BuyIngredientsFragment.newInstance()); // start(BuyIngredientsFragment.newInstance());
break; break;
case "種類": case "種類":
start(CategoryFragment.newInstance()); start(CategoryFragment.newInstance());
......
...@@ -139,8 +139,9 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr ...@@ -139,8 +139,9 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr
private void initEditText() { private void initEditText() {
edSupplier.setOnEditorActionListener((v, actionId, event) -> { edSupplier.setOnEditorActionListener((v, actionId, event) -> {
if (event != null) { if (actionId == EditorInfo.IME_ACTION_SEARCH) {
return true; hideSoftInput();
getSupplierList();
} }
return false; 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; ...@@ -5,6 +5,7 @@ import android.text.InputFilter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
...@@ -20,6 +21,7 @@ import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils; ...@@ -20,6 +21,7 @@ import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.supply_chain.R; import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2; import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWareHouseListComponent; 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.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.contract.WareHouseListContract; import com.gingersoft.supply_chain.mvp.contract.WareHouseListContract;
import com.gingersoft.supply_chain.mvp.presenter.WareHouseListPresenter; import com.gingersoft.supply_chain.mvp.presenter.WareHouseListPresenter;
...@@ -114,6 +116,16 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList ...@@ -114,6 +116,16 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList
}); });
getWarehousing(); getWarehousing();
edWarehouseListSearch.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, 16), InputFilterUtils.getChAndEnAndNumAndPtInputFilter(mContext)}); 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() { private void getWarehousing() {
...@@ -171,7 +183,7 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList ...@@ -171,7 +183,7 @@ public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseList
} }
@Override @Override
public void loadListInfo(List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos) { public void loadListInfo(List<PurchaseWarehousingOrderDetailsVO> purchaseWarehousingOrderDetailsVos) {
if (purchaseWarehousingOrderDetailsVos == null || purchaseWarehousingOrderDetailsVos.size() <= 0) { if (purchaseWarehousingOrderDetailsVos == null || purchaseWarehousingOrderDetailsVos.size() <= 0) {
loadService.showCallback(EmptyCallback.class); loadService.showCallback(EmptyCallback.class);
return; return;
......
...@@ -21,7 +21,7 @@ import com.gingersoft.supply_chain.R; ...@@ -21,7 +21,7 @@ import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2; import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWarehousingInventoryComponent; import com.gingersoft.supply_chain.di.component.DaggerWarehousingInventoryComponent;
import com.gingersoft.supply_chain.mvp.bean.InventoryRecordBean; 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.contract.WarehousingInventoryContract;
import com.gingersoft.supply_chain.mvp.presenter.WarehousingInventoryPresenter; import com.gingersoft.supply_chain.mvp.presenter.WarehousingInventoryPresenter;
import com.gingersoft.supply_chain.mvp.ui.adapter.InventoryRecordAdapter; import com.gingersoft.supply_chain.mvp.ui.adapter.InventoryRecordAdapter;
...@@ -29,9 +29,6 @@ import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment; ...@@ -29,9 +29,6 @@ import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.qmuiteam.qmui.widget.QMUITopBar; import com.qmuiteam.qmui.widget.QMUITopBar;
import com.scwang.smartrefresh.layout.SmartRefreshLayout; 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; import java.util.List;
...@@ -60,9 +57,9 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho ...@@ -60,9 +57,9 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
SmartRefreshLayout smartRefreshLayout; SmartRefreshLayout smartRefreshLayout;
private int pageIndex; 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(); WarehousingInventoryFragment fragment = new WarehousingInventoryFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putSerializable(WarehouseDetailsFragment.FOOD_INFO_KEY, purchaseWarehousingOrderDetailsVo); bundle.putSerializable(WarehouseDetailsFragment.FOOD_INFO_KEY, purchaseWarehousingOrderDetailsVo);
...@@ -89,7 +86,7 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho ...@@ -89,7 +86,7 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
Bundle arguments = getArguments(); Bundle arguments = getArguments();
if (arguments != null) { if (arguments != null) {
purchaseWarehousingOrderDetailsVo = (WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVO) arguments.getSerializable(WarehouseDetailsFragment.FOOD_INFO_KEY); purchaseWarehousingOrderDetailsVo = (PurchaseWarehousingOrderDetailsVO) arguments.getSerializable(WarehouseDetailsFragment.FOOD_INFO_KEY);
//獲取庫存盤點記錄 //獲取庫存盤點記錄
getWarehousingRecord(); getWarehousingRecord();
//加載食品圖片 //加載食品圖片
......
...@@ -178,6 +178,10 @@ public class InventoryConsumptionView extends FrameLayout { ...@@ -178,6 +178,10 @@ public class InventoryConsumptionView extends FrameLayout {
} }
} }
public void setConsumptionNumber(int consumptionNumber) {
edInput.setText(String.valueOf(consumptionNumber));
}
public interface OnConfirmClickListener { public interface OnConfirmClickListener {
/** /**
* 確認時,將消耗的庫存,原因,備註傳遞回去 * 確認時,將消耗的庫存,原因,備註傳遞回去
......
...@@ -36,10 +36,9 @@ public class ScanSnPopup extends BottomPopupView { ...@@ -36,10 +36,9 @@ public class ScanSnPopup extends BottomPopupView {
TextView tvFoodInboundQuantity; TextView tvFoodInboundQuantity;
@BindView(R2.id.layout_scan_sn) @BindView(R2.id.layout_scan_sn)
LinearLayout rootLayout; LinearLayout rootLayout;
private OnScanResultListener onScanResultListener; 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()); super(fragment.requireContext());
if (snCodes == null) { if (snCodes == null) {
snCodes = new ArrayList<>(); snCodes = new ArrayList<>();
...@@ -47,10 +46,14 @@ public class ScanSnPopup extends BottomPopupView { ...@@ -47,10 +46,14 @@ public class ScanSnPopup extends BottomPopupView {
this.foodName = foodName; this.foodName = foodName;
this.snCodes = snCodes; this.snCodes = snCodes;
this.fragment = fragment; this.fragment = fragment;
this.onScanResultListener = onScanResultListener;
addInnerContent(); addInnerContent();
} }
public ScanSnPopup setOnScanResultListener(OnScanResultListener onScanResultListener) {
this.onScanResultListener = onScanResultListener;
return this;
}
@Override @Override
protected int getImplLayoutId() { protected int getImplLayoutId() {
return R.layout.popup_scan_sn; return R.layout.popup_scan_sn;
...@@ -63,7 +66,10 @@ public class ScanSnPopup extends BottomPopupView { ...@@ -63,7 +66,10 @@ public class ScanSnPopup extends BottomPopupView {
ButterKnife.bind(this); ButterKnife.bind(this);
tvFoodIngredientsName.setText(foodName); tvFoodIngredientsName.setText(foodName);
tvFoodInboundQuantity.setText(String.valueOf(snCodes.size())); 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 @Override
...@@ -84,6 +90,4 @@ public class ScanSnPopup extends BottomPopupView { ...@@ -84,6 +90,4 @@ public class ScanSnPopup extends BottomPopupView {
*/ */
void onScanResult(List<String> scanResult); void onScanResult(List<String> scanResult);
} }
} }
...@@ -2,10 +2,13 @@ package com.gingersoft.supply_chain.mvp.ui.widget; ...@@ -2,10 +2,13 @@ package com.gingersoft.supply_chain.mvp.ui.widget;
import android.content.Context; import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
...@@ -29,11 +32,14 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaTextView; ...@@ -29,11 +32,14 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import cn.bingoogolapple.qrcode.core.BarcodeType; import cn.bingoogolapple.qrcode.core.BarcodeType;
import me.yokeyword.fragmentation.SupportHelper;
/** /**
* @author 宇航. * @author 宇航.
...@@ -56,18 +62,20 @@ public class ScanSnView extends FrameLayout { ...@@ -56,18 +62,20 @@ public class ScanSnView extends FrameLayout {
@BindView(R2.id.ed_input_sn) @BindView(R2.id.ed_input_sn)
EditText edInputSn; EditText edInputSn;
@BindView(R2.id.iv_scan_sn) @BindView(R2.id.iv_scan_sn)
QMUIAlphaImageButton btnScanSN; QMUIAlphaImageButton btnScanSn;
@BindView(R2.id.tv_submit_sn) @BindView(R2.id.tv_submit_sn)
QMUIAlphaTextView tvSubmitSN; QMUIAlphaTextView tvSubmitSn;
private Fragment fragment; private Fragment fragment;
private OnCancelListener onCancelListener; 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()); super(fragment.requireContext());
this.snCodes = snCodes; this.snCodes = snCodes;
this.onScanResultListener = onScanResultListener; this.onScanResultListener = onScanResultListener;
this.fragment = fragment; this.fragment = fragment;
this.onSingerResultListener = onSingerResultListener;
init(); init();
} }
...@@ -87,11 +95,12 @@ public class ScanSnView extends FrameLayout { ...@@ -87,11 +95,12 @@ public class ScanSnView extends FrameLayout {
private void init() { private void init() {
View rootView = LayoutInflater.from(getContext()).inflate(R.layout.layout_scan_sn, this, false); View rootView = LayoutInflater.from(getContext()).inflate(R.layout.layout_scan_sn, this, false);
ButterKnife.bind(this, rootView); ButterKnife.bind(this, rootView);
//初始化adapter //初始化adapter
SnCodeAdapter adapter = new SnCodeAdapter(R.layout.item_sn_code, snCodes); SnCodeAdapter adapter = new SnCodeAdapter(R.layout.item_sn_code, snCodes);
rvSnCode.setAdapter(adapter); rvSnCode.setAdapter(adapter);
//掃描sn媽 //掃描sn媽
btnScanSN.setOnClickListener(v -> btnScanSn.setOnClickListener(v ->
XPermissionUtils.launchCamera(fragment, (allGranted, grantedList, deniedList) -> { XPermissionUtils.launchCamera(fragment, (allGranted, grantedList, deniedList) -> {
if (allGranted) { if (allGranted) {
//去掃碼頁面 //去掃碼頁面
...@@ -104,22 +113,29 @@ public class ScanSnView extends FrameLayout { ...@@ -104,22 +113,29 @@ public class ScanSnView extends FrameLayout {
if (qrCodeResult != null) { if (qrCodeResult != null) {
String snCode = String.valueOf(qrCodeResult); String snCode = String.valueOf(qrCodeResult);
if (adapter.getData().contains(snCode)) { if (adapter.getData().contains(snCode)) {
ToastUtils.show(getContext(), "商品已存在"); ToastUtils.show(getContext(), "商品已存在,不能重複添加");
} else { } 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碼 //提交輸入框中的sn碼
if (TextUtil.isNotEmptyOrNullOrUndefined(edInputSn)) { commitSnCode(adapter);
adapter.addData(edInputSn.getText().toString());
edInputSn.setText("");
}
}); });
btnFoodIngredientsConfirm.setOnClickListener(v -> { btnFoodIngredientsConfirm.setOnClickListener(v -> {
...@@ -139,17 +155,42 @@ public class ScanSnView extends FrameLayout { ...@@ -139,17 +155,42 @@ public class ScanSnView extends FrameLayout {
}); });
adapter.setOnItemChildClickListener((adapter1, view, position) -> { adapter.setOnItemChildClickListener((adapter1, view, position) -> {
if (view.getId() == R.id.iv_sn_code_delete) { if (view.getId() == R.id.iv_sn_code_delete) {
onSingerResultListener.onScanValue(false, adapter.getItem(position), adapter.getItemCount());
adapter1.removeAt(position); adapter1.removeAt(position);
} }
}); });
addView(rootView); 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) { public ScanSnView setOnCancelListener(OnCancelListener onCancelListener) {
this.onCancelListener = onCancelListener; this.onCancelListener = onCancelListener;
return this; 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 { public interface OnCancelListener {
void onCancel(); 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 @@ ...@@ -37,6 +37,7 @@
android:layout_weight="1" android:layout_weight="1"
android:background="@null" android:background="@null"
android:hint="@string/search_food_name_no" android:hint="@string/search_food_name_no"
android:imeOptions="actionSearch"
android:inputType="text" android:inputType="text"
android:maxLength="20" android:maxLength="20"
android:maxLines="1" /> android:maxLines="1" />
......
<?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 @@ ...@@ -35,6 +35,7 @@
android:layout_marginRight="@dimen/dp_4" android:layout_marginRight="@dimen/dp_4"
android:layout_weight="1" android:layout_weight="1"
android:background="@null" android:background="@null"
android:imeOptions="actionDone"
android:gravity="center_vertical" android:gravity="center_vertical"
android:hint="@string/str_please_input" android:hint="@string/str_please_input"
android:inputType="number" android:inputType="number"
...@@ -77,6 +78,9 @@ ...@@ -77,6 +78,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout> </FrameLayout>
<LinearLayout <LinearLayout
......
...@@ -4,4 +4,5 @@ ...@@ -4,4 +4,5 @@
android:id="@+id/rv_purchase_list_content" android:id="@+id/rv_purchase_list_content"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
\ No newline at end of file app:layout_behavior="@string/appbar_scrolling_view_behavior" />
\ No newline at end of file
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
<com.qmuiteam.qmui.widget.QMUITopBar xmlns:android="http://schemas.android.com/apk/res/android" <com.qmuiteam.qmui.widget.QMUITopBar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/supply_top_bar" android:id="@+id/supply_top_bar"
app:qmui_topbar_title_color="@color/theme_white_color"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/head_height" android:layout_height="@dimen/head_height"
app:qmui_topbar_text_btn_color_state_list="@color/white"
android:background="@color/theme_color" 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 @@ ...@@ -16,7 +16,7 @@
<string name="str_format_purchase_no">採購單號:%1$s</string> <string name="str_format_purchase_no">採購單號:%1$s</string>
<string name="str_format_warehouse_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_positive">+%1$s</string>
<string name="str_format_less">-%1$s</string> <string name="str_format_less">-%1$s</string>
<string name="str_unit_price_colon">單價:$%1$.2f</string> <string name="str_unit_price_colon">單價:$%1$.2f</string>
...@@ -33,4 +33,5 @@ ...@@ -33,4 +33,5 @@
<string name="str_no">NO:%1$s</string> <string name="str_no">NO:%1$s</string>
<string name="str_prepared">製單人:%1$s</string> <string name="str_prepared">製單人:%1$s</string>
<string name="str_device_not_print">您的設備不支持打印</string> <string name="str_device_not_print">您的設備不支持打印</string>
</resources> </resources>
\ No newline at end of file
...@@ -48,7 +48,17 @@ ...@@ -48,7 +48,17 @@
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
<item name="android:layout_marginRight">@dimen/dp_1</item> <item name="android:layout_marginRight">@dimen/dp_1</item>
</style> </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"> <style name="WareHouse_Value_TextStyle">
<item name="android:textSize">@dimen/dp_14</item> <item name="android:textSize">@dimen/dp_14</item>
<item name="android:textStyle">bold</item> <item name="android:textStyle">bold</item>
......
...@@ -7,8 +7,8 @@ ext { ...@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 29, targetSdkVersion : 29,
//正式版: 1.0.3 3 //正式版: 1.0.3 3
//內部測試版:1.2.0 20 //內部測試版:1.2.0 20
versionCode : 29, versionCode : 30,
versionName : "1.2.9" versionName : "1.3.0"
] ]
version = [ version = [
......
...@@ -76,10 +76,10 @@ public class ArmsUtils { ...@@ -76,10 +76,10 @@ public class ArmsUtils {
res)); res));
// 新建一个属性对象,设置文字的大小 // 新建一个属性对象,设置文字的大小
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(size, true); AbsoluteSizeSpan ass = new AbsoluteSizeSpan(size, true);
// 附加属性到文本 // 附加属性到文本
ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 设置hint // 设置hint
v.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失 v.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失
} }
...@@ -215,9 +215,9 @@ public class ArmsUtils { ...@@ -215,9 +215,9 @@ public class ArmsUtils {
* @param string * @param string
*/ */
public static void makeText(Context context, String string) { public static void makeText(Context context, String string) {
if(mToast != null){ if (mToast != null) {
mToast.cancel(); mToast.cancel();
mToast = null; mToast = null;
} }
mToast = Toast.makeText(context.getApplicationContext(), string, Toast.LENGTH_SHORT); mToast = Toast.makeText(context.getApplicationContext(), string, Toast.LENGTH_SHORT);
mToast.setText(string); mToast.setText(string);
......
package com.gingersoft.gsa.cloud.common.constans; package com.gingersoft.gsa.cloud.common.constans;
import android.content.Context; import android.content.Context;
import android.util.Log;
import com.gingersoft.gsa.cloud.common.BuildConfig; import com.gingersoft.gsa.cloud.common.BuildConfig;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils; import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
...@@ -43,7 +44,8 @@ public class HttpsConstans { ...@@ -43,7 +44,8 @@ public class HttpsConstans {
public static String RESTAURANT_API_PATH = "/ricepon-restaurant/api/";//餐廳模塊路徑 public static String RESTAURANT_API_PATH = "/ricepon-restaurant/api/";//餐廳模塊路徑
public static String PURCHASE_API_PATH = "/ricepon-purchase/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_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"; //石书本地 public static String ROOT_SERVER_SHI_SHU_HK = "http://192.168.1.154:9012/api"; //石书本地
......
...@@ -31,10 +31,10 @@ public class RestaurantInfoManager { ...@@ -31,10 +31,10 @@ public class RestaurantInfoManager {
if (restaurantInfo == null) { if (restaurantInfo == null) {
restaurantInfo = new RestaurantInfo(); 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, "")); brandInfo.setBrandName((String) SPUtils.get(UserConstans.brandName, ""));
restaurantInfo.setGsPosShopId((String) SPUtils.get(UserConstans.gsPosShopId, "-1")); 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, "")); restaurantInfo.setRestaurantName((String) SPUtils.get(UserConstans.restaurantName, ""));
} }
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/theme_color"/> <!-- 填充背景色 -->
<solid android:color="@color/theme_color" />
<corners android:radius="@dimen/dp_8"/> <!-- 圓角 -->
<corners android:radius="@dimen/dp_8" />
</shape> </shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white"/> <!-- 填充背景色 -->
<solid android:color="@color/white" />
<corners android:radius="@dimen/dp_8"/> <!-- 圓角 -->
<corners android:radius="@dimen/dp_8" />
</shape> </shape>
\ No newline at end of file
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
style="@style/Multi_Input_editStyle" style="@style/Multi_Input_editStyle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:imeOptions="actionNext"
android:layout_marginLeft="@dimen/dp_5" android:layout_marginLeft="@dimen/dp_5"
android:layout_weight="1" android:layout_weight="1"
android:drawablePadding="@dimen/dp_5" 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