Commit 69e9e173 by Wyh

1、修改DaoManager的Context引用 2、加入BlockCanary檢測卡頓

parent 22421977
......@@ -49,7 +49,7 @@ allprojects {
maven { url 'http://www.idescout.com/maven/repo/' }
// 私有仓库地址
maven { url "http://lib.gcssloop.com/repository/gcssloop-central/" }
maven {url 'https://storage.googleapis.com/r8-releases/raw'}
maven { url 'https://storage.googleapis.com/r8-releases/raw' }
//阿里云仓库
maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
......
......@@ -45,7 +45,6 @@
<!-- 自动聚焦权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!--相机权限-->
......
......@@ -101,47 +101,47 @@ import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Main
if (project.ext.runAsApp) {
final def log = project.logger
final def variants = project.android.applicationVariants
variants.all { variant ->
if (!variant.buildType.isDebuggable()) {
log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")
return;
}
JavaCompile javaCompile = variant.javaCompile
javaCompile.doLast {
String[] args = ["-showWeaveInfo",
"-1.8",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath", javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath", javaCompile.classpath.asPath,
"-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
log.debug "ajc args: " + Arrays.toString(args)
MessageHandler handler = new MessageHandler(true);
new Main().run(args, handler);
for (IMessage message : handler.getMessages(null, true)) {
switch (message.getKind()) {
case IMessage.ABORT:
case IMessage.ERROR:
case IMessage.FAIL:
log.error message.message, message.thrown
break;
case IMessage.WARNING:
log.warn message.message, message.thrown
break;
case IMessage.INFO:
log.info message.message, message.thrown
break;
case IMessage.DEBUG:
log.debug message.message, message.thrown
break;
}
}
}
}
}
\ No newline at end of file
//if (project.ext.runAsApp) {
// final def log = project.logger
// final def variants = project.android.applicationVariants
//
// variants.all { variant ->
// if (!variant.buildType.isDebuggable()) {
// log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")
// return;
// }
//
// JavaCompile javaCompile = variant.javaCompile
// javaCompile.doLast {
// String[] args = ["-showWeaveInfo",
// "-1.8",
// "-inpath", javaCompile.destinationDir.toString(),
// "-aspectpath", javaCompile.classpath.asPath,
// "-d", javaCompile.destinationDir.toString(),
// "-classpath", javaCompile.classpath.asPath,
// "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
// log.debug "ajc args: " + Arrays.toString(args)
//
// MessageHandler handler = new MessageHandler(true);
// new Main().run(args, handler);
// for (IMessage message : handler.getMessages(null, true)) {
// switch (message.getKind()) {
// case IMessage.ABORT:
// case IMessage.ERROR:
// case IMessage.FAIL:
// log.error message.message, message.thrown
// break;
// case IMessage.WARNING:
// log.warn message.message, message.thrown
// break;
// case IMessage.INFO:
// log.info message.message, message.thrown
// break;
// case IMessage.DEBUG:
// log.debug message.message, message.thrown
// break;
// }
// }
// }
// }
//}
\ No newline at end of file
......@@ -29,7 +29,7 @@ public class OrderWareHouseBean {
private String files;
private String remarks;
private double totalPrice;
private int supplierId;
private int brandId;
private int restaurantId;
//入庫原因,字符串
......@@ -38,8 +38,8 @@ public class OrderWareHouseBean {
@Data
public static class PurchaseWarehousingOrderDetail {
private int orderDetailsId;
private int purchaseFoodId;
private Integer orderDetailsId;
private Integer purchaseFoodId;
private int foodQuantity;
private double foodPrice;
private double totalPrice;
......@@ -61,6 +61,8 @@ public class OrderWareHouseBean {
* sn碼
*/
private List<PurchaseFoodEncodeSn> purchaseFoodEncodeSn;
private int supplierId;
}
@Data
......
......@@ -116,6 +116,12 @@ public class PurchaseFoodBean implements Serializable, QMUISection.Model<Purchas
*/
private DeputyUnitBean showUnit;
/**
* WarehousingOrderDetailsBean
* 入庫訂單專用
*/
private String warehousingOrderNo;
/**
* 庫存預警 模塊
*/
@Data
......
......@@ -52,6 +52,8 @@ public class PurchaseOrderDetailsBean {
*/
private String files;
private int supplierId;
/**
* 狀態:0全部 1待收貨 2部分收貨 3已完成 4拒收
*/
......
......@@ -8,22 +8,95 @@ package com.gingersoft.supply_chain.mvp.bean;
* Use:
*/
public class WarehouseOrderBean {
public String orderNo;
public String warehousingMember;
public String warehousingTime;
public String warehousingFoodName;
public int warehousingSpecies;
public String warehousingReason;
public WarehouseOrderBean() {
}
public WarehouseOrderBean(String orderNo, String warehousingMember, String warehousingTime, String warehousingFoodName, int warehousingSpecies, String warehousingReason) {
this.orderNo = orderNo;
this.warehousingMember = warehousingMember;
this.warehousingTime = warehousingTime;
this.warehousingFoodName = warehousingFoodName;
this.warehousingSpecies = warehousingSpecies;
this.warehousingReason = warehousingReason;
/**
* id : 949
* warehousingOrderNo : RK20210430945580
* uid : 397
* createTime : 2021
* purchaseFoodCount : 3
* foodName : 山楂糕,好看,哈哈哈
* storageType : 調撥入庫
* userName : null
*/
private int id;
private String warehousingOrderNo;
private int uid;
private String createTime;
private int purchaseFoodCount;
private String foodName;
private String storageType;
private String userName;
private double totalPrice;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getWarehousingOrderNo() {
return warehousingOrderNo;
}
public void setWarehousingOrderNo(String warehousingOrderNo) {
this.warehousingOrderNo = warehousingOrderNo;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public int getPurchaseFoodCount() {
return purchaseFoodCount;
}
public void setPurchaseFoodCount(int purchaseFoodCount) {
this.purchaseFoodCount = purchaseFoodCount;
}
public String getFoodName() {
return foodName;
}
public void setFoodName(String foodName) {
this.foodName = foodName;
}
public String getStorageType() {
return storageType;
}
public void setStorageType(String storageType) {
this.storageType = storageType;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}
}
package com.gingersoft.supply_chain.mvp.bean;
import java.util.ArrayList;
import java.util.List;
/**
* @author 宇航. 1239658231@qq.com
* User: admin
* Date: 2021/4/30
* Time: 19:46
* Use:入庫訂單詳情
*/
public class WarehousingOrderDetailsBean {
/**
* id : 1106
* warehousingOrderNo : RK20210430945580
* name : 山楂糕
* foodNo : FD1598602755
* supplierName : 深圳市牛呆呆公司
* basicUnitName : 個
* foodQuantity : 0
* foodPrice : 0
* totalPrice : 0
* remarks :
* foodMarkSn : 0
*/
private int id;
private String warehousingOrderNo;
private String name;
private String foodNo;
private String supplierName;
private String basicUnitName;
private int foodQuantity;
private double foodPrice;
private int totalPrice;
private String remarks;
private int foodMarkSn;
public static List<PurchaseFoodBean> conversionToPurchaseFoodBean(List<WarehousingOrderDetailsBean> warehousingOrderDetailsBean) {
List<PurchaseFoodBean> purchaseFoodBeans = new ArrayList<>();
if (warehousingOrderDetailsBean != null) {
for (WarehousingOrderDetailsBean orderDetailsBean : warehousingOrderDetailsBean) {
purchaseFoodBeans.add(conversionToPurchaseFoodBean(orderDetailsBean));
}
}
return purchaseFoodBeans;
}
public static PurchaseFoodBean conversionToPurchaseFoodBean(WarehousingOrderDetailsBean warehousingOrderDetailsBean) {
PurchaseFoodBean purchaseFoodBean = new PurchaseFoodBean();
purchaseFoodBean.setId(warehousingOrderDetailsBean.getId());
purchaseFoodBean.setName(warehousingOrderDetailsBean.getName());
purchaseFoodBean.setFoodNo(warehousingOrderDetailsBean.getFoodNo());
purchaseFoodBean.setSupplierName(warehousingOrderDetailsBean.getSupplierName());
purchaseFoodBean.setBasicUnitName(warehousingOrderDetailsBean.getBasicUnitName());
purchaseFoodBean.setFoodQuantity(warehousingOrderDetailsBean.getFoodQuantity());
purchaseFoodBean.setUnitPrice(warehousingOrderDetailsBean.getFoodPrice());
purchaseFoodBean.setRemarks(warehousingOrderDetailsBean.getRemarks());
purchaseFoodBean.setFoodMarkSn(warehousingOrderDetailsBean.getFoodMarkSn());
purchaseFoodBean.setWarehousingOrderNo(warehousingOrderDetailsBean.getWarehousingOrderNo());
return purchaseFoodBean;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getWarehousingOrderNo() {
return warehousingOrderNo;
}
public void setWarehousingOrderNo(String warehousingOrderNo) {
this.warehousingOrderNo = warehousingOrderNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFoodNo() {
return foodNo;
}
public void setFoodNo(String foodNo) {
this.foodNo = foodNo;
}
public String getSupplierName() {
return supplierName;
}
public void setSupplierName(String supplierName) {
this.supplierName = supplierName;
}
public String getBasicUnitName() {
return basicUnitName;
}
public void setBasicUnitName(String basicUnitName) {
this.basicUnitName = basicUnitName;
}
public int getFoodQuantity() {
return foodQuantity;
}
public void setFoodQuantity(int foodQuantity) {
this.foodQuantity = foodQuantity;
}
public double getFoodPrice() {
return foodPrice;
}
public void setFoodPrice(int foodPrice) {
this.foodPrice = foodPrice;
}
public int getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(int totalPrice) {
this.totalPrice = totalPrice;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public int getFoodMarkSn() {
return foodMarkSn;
}
public void setFoodMarkSn(int foodMarkSn) {
this.foodMarkSn = foodMarkSn;
}
}
package com.gingersoft.supply_chain.mvp.bean;
import java.util.List;
/**
* @author 宇航. 1239658231@qq.com
* User: admin
* Date: 2021/4/30
* Time: 19:24
* Use:
*/
public class WarehousingOrderListBean {
private int total;
private List<WarehouseOrderBean> PurchaseWarehousingOrdersVO;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List<WarehouseOrderBean> getPurchaseWarehousingOrdersVO() {
return PurchaseWarehousingOrdersVO;
}
public void setPurchaseWarehousingOrdersVO(List<WarehouseOrderBean> purchaseWarehousingOrdersVO) {
PurchaseWarehousingOrdersVO = purchaseWarehousingOrdersVO;
}
}
......@@ -67,13 +67,13 @@ public class PurchaseConstant {
public static final String DELETE_FAIL = "刪除失敗,請稍後重試";
public static int getBrandId() {
// return RestaurantInfoManager.newInstance().getBrandId();
return BuildConfig.DEBUG ? 1 : RestaurantInfoManager.newInstance().getBrandId();
return RestaurantInfoManager.newInstance().getBrandId();
// return BuildConfig.DEBUG ? 1 : RestaurantInfoManager.newInstance().getBrandId();
}
public static int getRestaurantId() {
// return RestaurantInfoManager.newInstance().getRestaurantId();
return BuildConfig.DEBUG ? 26 : RestaurantInfoManager.newInstance().getRestaurantId();
return RestaurantInfoManager.newInstance().getRestaurantId();
// return BuildConfig.DEBUG ? 26 : RestaurantInfoManager.newInstance().getRestaurantId();
}
public static void addBrandId(@NonNull Map<String, Object> map) {
......@@ -97,4 +97,9 @@ public class PurchaseConstant {
map.put("pageSize", PAGE_SIZE);
}
public static void addPageIndex(Map<String, Object> map, int pageIndex) {
map.put("pageIndex", pageIndex * PAGE_SIZE);
}
}
......@@ -122,22 +122,7 @@ public class SupplyShoppingCart {
}
public void removeFoodsByFoodId(int foodId) {
RxJavaUtils.doInIOThread(new RxIOTask<Object>(0) {
@Override
public Void doInIOThread(Object o) {
//刪除供應商成功後,需要從購物車數據中將這個供應商的食材都刪除掉
List<PurchaseFoodBean> cartFoods = SupplyShoppingCart.getInstance().getCartFoods();
Iterator<PurchaseFoodBean> iterator = cartFoods.iterator();
while (iterator.hasNext()) {
PurchaseFoodBean next = iterator.next();
if (next.getId() != null && next.getId() == foodId) {
iterator.remove();
break;
}
}
return null;
}
});
foodBeanMap.remove(foodId);
}
public void removeFoodsBySupplier(int supplierId) {
......
package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.ui.adapter.ConsumptionReasonAdapter;
import com.gingersoft.supply_chain.mvp.ui.adapter.WareHousingOrderFoodAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import java.util.Map;
......@@ -30,6 +31,14 @@ public interface WarehousingOrderDetailsContract {
void initReason(ConsumptionReasonAdapter consumptionReasonAdapter);
void initFoodView(WareHousingOrderFoodAdapter wareHousingOrderFoodAdapter);
/**
* 新增入庫單成功
*/
void addOrderSuccess();
void setOrderAllInfo();
void showSnCodePopup(PurchaseFoodBean infoVosBean);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......@@ -43,5 +52,19 @@ public interface WarehousingOrderDetailsContract {
* 生成入庫單
*/
Observable<BaseResult> addWarehousingOrder(RequestBody requestBody);
/**
* 獲取入庫單詳情
*
* @param warehousingOrderId 入庫訂單id
*/
Observable<BaseResult> getWarehousingOrderDetails(int warehousingOrderId);
/**
* 查詢食品sn碼
* @param encodeFoodNo 食品編號
* @param encodeOrderNo 訂單編號
*/
Observable<BaseResult> querySnCodes(String encodeFoodNo, String encodeOrderNo);
}
}
package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.WarehouseOrderBean;
import com.gingersoft.supply_chain.mvp.ui.adapter.WarehousingOrderListAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
/**
* ================================================
......@@ -19,11 +27,22 @@ import com.jess.arms.mvp.IModel;
public interface WarehousingOrderListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadList(WarehousingOrderListAdapter adapter);
/**
* 關閉加載動畫
* @param isNoMore 是否還有更多 true 沒有更多了
*/
void finishLoad(boolean isNoMore);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
/**
* 獲取入庫單列表
*/
Observable<BaseResult> getWarehousingOrderList(Map<String, Object> map);
}
}
......@@ -53,7 +53,7 @@ public class WarehouseDetailsModel extends BaseModel implements WarehouseDetails
@Override
public Observable<BaseResult> getWarehousingOrderDetails(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getWarehousingOrderDetails(map);
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getWarehousingDetails(map);
}
@Override
......
......@@ -60,4 +60,14 @@ public class WarehousingOrderDetailsModel extends BaseModel implements Warehousi
public Observable<BaseResult> addWarehousingOrder(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).addWarehousingOrder(requestBody);
}
@Override
public Observable<BaseResult> getWarehousingOrderDetails(int warehousingOrderId) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getWarehousingOrderDetails(warehousingOrderId);
}
@Override
public Observable<BaseResult> querySnCodes(String encodeFoodNo, String encodeOrderNo) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).querySnCodes(encodeFoodNo, encodeOrderNo);
}
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.gingersoft.supply_chain.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.server.SupplierServer;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
......@@ -12,6 +14,10 @@ import javax.inject.Inject;
import com.gingersoft.supply_chain.mvp.contract.WarehousingOrderListContract;
import java.util.Map;
import io.reactivex.Observable;
/**
* ================================================
......@@ -43,4 +49,9 @@ public class WarehousingOrderListModel extends BaseModel implements WarehousingO
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<BaseResult> getWarehousingOrderList(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getWarehousingOrderList(map);
}
}
\ No newline at end of file
......@@ -534,13 +534,9 @@ public class BuyIngredientsPresenter extends BasePresenter<BuyIngredientsContrac
*/
public void addFood(PurchaseFoodBean purchaseFoodBean) {
if (purchaseFoodBean.getFoodQuantity() == 0) {
// purchaseFoodBeanMap.remove(purchaseFoodBean.getId());
SupplyShoppingCart.getInstance().removeFoodsByFoodId(purchaseFoodBean.getId());
} else {
// purchaseFoodBeanMap.put(purchaseFoodBean.getId(), purchaseFoodBean);
if (!SupplyShoppingCart.getInstance().getCartFoods().contains(purchaseFoodBean)) {
SupplyShoppingCart.getInstance().addFood(purchaseFoodBean);
}
SupplyShoppingCart.getInstance().addFood(purchaseFoodBean);
}
}
......
......@@ -74,6 +74,8 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
AppManager mAppManager;
private int orderId;
private int supplierId;
/**
* 所上傳的圖片路徑集合
*/
......@@ -122,6 +124,7 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
if (orderDetailsBean != null) {
OrderDetailsPresenter.this.orderId = orderId;
try {
supplierId = orderDetailsBean.getSupplierId();
transformationWareHouse(orderDetailsBean);
orderState = orderDetailsBean.getStatus();
//加載圖片
......@@ -334,6 +337,7 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
if (CollectionUtils.isNullOrEmpty(purchaseWarehousingOrderDetails)) {
return null;
}
orderWareHouseBean.setStatus(state);
orderWareHouseBean.setOrderId(orderId);
......@@ -349,6 +353,7 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
purchaseWarehousingOrder.setRestaurantId(PurchaseConstant.getRestaurantId());
purchaseWarehousingOrder.setBrandId(PurchaseConstant.getBrandId());
purchaseWarehousingOrder.setRemarks(remark);
purchaseWarehousingOrder.setSupplierId(supplierId);
purchaseWarehousingOrder.setTotalPrice(totalAmount);
orderWareHouseBean.setPurchaseWarehousingOrder(purchaseWarehousingOrder);
orderWareHouseBean.setPurchaseWarehousingOrderDetailsTOS(purchaseWarehousingOrderDetails);
......@@ -378,6 +383,7 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
purchaseWarehousingOrderDetail.setPurchaseFoodId(purchaseOrderDetailsInfoVosBean.getPurchaseFoodId());
purchaseWarehousingOrderDetail.setFoodQuantity(purchaseOrderDetailsInfoVosBean.getFoodQuantity());
purchaseWarehousingOrderDetail.setFoodPrice(purchaseOrderDetailsInfoVosBean.getFoodPrice());
purchaseWarehousingOrderDetail.setSupplierId(supplierId);
purchaseWarehousingOrderDetail.setTotalPrice(MoneyUtil.priceCalculation(purchaseOrderDetailsInfoVosBean.getFoodPrice(), purchaseOrderDetailsInfoVosBean.getFoodQuantity()));
DeputyUnitBean deputyUnitBean = purchaseOrderDetailsInfoVosBean.getShowUnit();
WareHousingUnitBean wareHousingUnitBean = DeputyUnitBean.getWareHousingUnitByDeputyUnit(deputyUnitBean);
......
......@@ -3,6 +3,7 @@ package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.utils.CollectionUtils;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
......@@ -12,7 +13,9 @@ import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean;
import com.gingersoft.supply_chain.mvp.bean.OrderWareHouseBean;
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.bean.WarehousingOrderDetailsBean;
import com.gingersoft.supply_chain.mvp.content.PurchaseConstant;
import com.gingersoft.supply_chain.mvp.content.SupplyShoppingCart;
import com.gingersoft.supply_chain.mvp.ui.adapter.ConsumptionReasonAdapter;
......@@ -23,6 +26,7 @@ import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
......@@ -82,6 +86,35 @@ public class WarehousingOrderDetailsPresenter extends BasePresenter<WarehousingO
}
/**
* 獲取入庫單詳情
*
* @param warehousingOrderId
*/
public void getWarehousingOrderDetails(int warehousingOrderId) {
mModel.getWarehousingOrderDetails(warehousingOrderId)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(PurchaseConstant.GET_INFO_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<WarehousingOrderDetailsBean> warehousingOrderDetailsBeans = GsonUtils.jsonToList(baseResult.getData(), WarehousingOrderDetailsBean.class);
setAdapter(WarehousingOrderDetailsBean.conversionToPurchaseFoodBean(warehousingOrderDetailsBeans));
} else if (baseResult != null && TextUtil.isNotEmptyOrNullOrUndefined(baseResult.getErrMsg())) {
mRootView.showMessage(baseResult.getErrMsg());
} else {
mRootView.showMessage(PurchaseConstant.GET_INFO_ERROR);
}
}
});
}
/**
* 獲取入庫類型:原因
*/
public void getWarehousingReason() {
......@@ -99,7 +132,6 @@ public class WarehousingOrderDetailsPresenter extends BasePresenter<WarehousingO
@Override
public void onNext(BaseResult baseResult) {
if (baseResult != null && baseResult.isSuccess()) {
//消耗完之後,關閉頁面
List<ConsumeReasonBean> consumeReasonBeans = GsonUtils.jsonToList(baseResult.getData(), ConsumeReasonBean.class);
consumptionReasonAdapter = new ConsumptionReasonAdapter(consumeReasonBeans);
mRootView.initReason(consumptionReasonAdapter);
......@@ -113,16 +145,64 @@ public class WarehousingOrderDetailsPresenter extends BasePresenter<WarehousingO
}
/**
* 查詢商品sn碼
*/
public void querySnCodes(PurchaseFoodBean infoVosBean) {
mModel.querySnCodes(infoVosBean.getFoodNo(), infoVosBean.getWarehousingOrderNo())
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(PurchaseConstant.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);
if (purchaseFoodEncodeSns != null) {
infoVosBean.setPurchaseFoodEncodeSn(purchaseFoodEncodeSns);
mRootView.showSnCodePopup(infoVosBean);
}
}
}
});
}
public void setSelectReason(String warehousingReason) {
if (consumptionReasonAdapter != null) {
int reasonSize = consumptionReasonAdapter.getItemCount();
for (int i = 0; i < reasonSize; i++) {
ConsumeReasonBean item = consumptionReasonAdapter.getItem(i);
if (item.getDescription().equals(warehousingReason)) {
consumptionReasonAdapter.setSelectIndex(i);
return;
}
}
}
}
/**
* 獲取食材
*/
public void initWarehousingFood() {
List<PurchaseFoodBean> warehousingFood = SupplyShoppingCart.getInstance().getCartFoods();
setAdapter(warehousingFood);
}
private void setAdapter(List<PurchaseFoodBean> warehousingFood) {
if (wareHousingOrderFoodAdapter == null) {
wareHousingOrderFoodAdapter = new WareHousingOrderFoodAdapter(warehousingFood);
mRootView.initFoodView(wareHousingOrderFoodAdapter);
} else {
wareHousingOrderFoodAdapter.setNewInstance(warehousingFood);
}
mRootView.setOrderAllInfo();
}
public void notifyAdapter(int position) {
wareHousingOrderFoodAdapter.notifyItemChanged(wareHousingOrderFoodAdapter.getHeaderLayoutCount() + position);
}
public List<PurchaseFoodBean> getWarehousingFood() {
......@@ -198,6 +278,8 @@ public class WarehousingOrderDetailsPresenter extends BasePresenter<WarehousingO
// mRootView.showMessage("食材【" + datum.getName() + "】沒有單位,請修改食材信息");
// return;
// }
purchaseWarehousingUnit.setBrandId(PurchaseConstant.getBrandId());
purchaseWarehousingUnit.setRestaurantId(PurchaseConstant.getRestaurantId());
purchaseWarehousingUnit.setUnitName(datum.getBasicUnitName());
purchaseWarehousingUnit.setUnitValue(datum.getFoodQuantity());
purchaseWarehousingUnit.setUnitPrice(datum.getUnitPrice());
......@@ -207,16 +289,22 @@ public class WarehousingOrderDetailsPresenter extends BasePresenter<WarehousingO
if (datum.getFoodMarkSn() == PurchaseFoodBean.HAS_SN) {
List<PurchaseFoodEncodeSn> purchaseFoodEncodeSn = datum.getPurchaseFoodEncodeSn();
if (CollectionUtils.isNullOrEmpty(purchaseFoodEncodeSn)) {
mRootView.showMessage("食材【" + datum.getName() + "】數量不能為0,請掃描SN碼");
mRootView.showMessage("食材【" + datum.getName() + "】SN碼數量不能為0,請掃描SN碼");
return;
}
if (datum.getFoodQuantity() != purchaseFoodEncodeSn.size()) {
mRootView.showMessage("食材【" + datum.getName() + "】SN碼數量不足" + datum.getFoodQuantity() + "個,請掃描SN碼!");
return;
}
for (PurchaseFoodEncodeSn foodEncodeSn : purchaseFoodEncodeSn) {
foodEncodeSn.setEncodeSnNo(datum.getFoodNo());
foodEncodeSn.setEncodeFoodNo(datum.getFoodNo());
}
orderDetail.setPurchaseFoodEncodeSn(purchaseFoodEncodeSn);
}
orderDetail.setSupplierId(datum.getSupplierId());
orderDetail.setPurchaseFoodId(datum.getId());
orderDetail.setBrandId(PurchaseConstant.getBrandId());
orderDetail.setFoodPrice(datum.getUnitPrice());
orderDetail.setRestaurantId(PurchaseConstant.getRestaurantId());
orderDetail.setFoodQuantity(datum.getFoodQuantity());
double foodTotalAmount = MoneyUtil.priceCalculation(datum.getUnitPrice(), datum.getFoodQuantity());
......@@ -237,7 +325,8 @@ public class WarehousingOrderDetailsPresenter extends BasePresenter<WarehousingO
@Override
public void onNext(BaseResult baseResult) {
if (baseResult != null && baseResult.isSuccess()) {
mRootView.showMessage("入庫成功");
mRootView.addOrderSuccess();
} else if (baseResult != null && TextUtil.isNotEmptyOrNullOrUndefined(baseResult.getErrMsg())) {
mRootView.showMessage(baseResult.getErrMsg());
} else {
......
......@@ -2,16 +2,34 @@ package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.utils.CollectionUtils;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.ui.animator.CustomAnimation3;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean;
import com.gingersoft.supply_chain.mvp.bean.WarehousingOrderListBean;
import com.gingersoft.supply_chain.mvp.content.PurchaseConstant;
import com.gingersoft.supply_chain.mvp.ui.adapter.ConsumptionReasonAdapter;
import com.gingersoft.supply_chain.mvp.ui.adapter.WarehousingOrderListAdapter;
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 io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import javax.inject.Inject;
import com.gingersoft.supply_chain.mvp.contract.WarehousingOrderListContract;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
......@@ -37,6 +55,10 @@ public class WarehousingOrderListPresenter extends BasePresenter<WarehousingOrde
@Inject
AppManager mAppManager;
WarehousingOrderListAdapter warehousingOrderListAdapter;
public int pageIndex = 0;
@Inject
public WarehousingOrderListPresenter(WarehousingOrderListContract.Model model, WarehousingOrderListContract.View rootView) {
super(model, rootView);
......@@ -50,4 +72,50 @@ public class WarehousingOrderListPresenter extends BasePresenter<WarehousingOrde
this.mImageLoader = null;
this.mApplication = null;
}
public void getWarehousingOrderList() {
Map<String, Object> map = new HashMap<>(2);
PurchaseConstant.addBrandId(map);
PurchaseConstant.addRestaurantId(map);
PurchaseConstant.addPageSize(map);
PurchaseConstant.addPageIndex(map, pageIndex);
mModel.getWarehousingOrderList(map)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(PurchaseConstant.GET_INFO_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()) {
WarehousingOrderListBean warehousingOrderListBean = GsonUtils.GsonToBean(baseResult.getData(), WarehousingOrderListBean.class);
if (warehousingOrderListBean == null) {
mRootView.showMessage("訂單數據獲取失敗,請稍候重試");
mRootView.killMyself();
} else {
if (warehousingOrderListAdapter == null) {
warehousingOrderListAdapter = new WarehousingOrderListAdapter(warehousingOrderListBean.getPurchaseWarehousingOrdersVO());
warehousingOrderListAdapter.setAdapterAnimation(new CustomAnimation3());
mRootView.loadList(warehousingOrderListAdapter);
} else {
if (pageIndex == 0) {
warehousingOrderListAdapter.setList(warehousingOrderListBean.getPurchaseWarehousingOrdersVO());
} else {
warehousingOrderListAdapter.addData(warehousingOrderListBean.getPurchaseWarehousingOrdersVO());
mRootView.finishLoad(CollectionUtils.isNullOrEmpty(warehousingOrderListBean.getPurchaseWarehousingOrdersVO()));
return;
}
}
}
} else if (baseResult != null && TextUtil.isNotEmptyOrNullOrUndefined(baseResult.getErrMsg())) {
mRootView.showMessage(baseResult.getErrMsg());
} else {
mRootView.showMessage(PurchaseConstant.GET_INFO_ERROR);
}
mRootView.finishLoad(false);
}
});
}
}
......@@ -427,7 +427,7 @@ public interface SupplierServer {
*/
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseWarehousingOrder/details/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getWarehousingOrderDetails(@QueryMap Map<String, Object> map);
Observable<BaseResult> getWarehousingDetails(@QueryMap Map<String, Object> map);
/**
* 查詢出庫流水
......@@ -496,7 +496,30 @@ public interface SupplierServer {
@GET("purchaseConsumeReason/multipleStorageCauseList" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getMultipleStorageCauseList(@QueryMap Map<String, Object> map);
/**
* 下入庫單
* @param requestBody
* @return
*/
@Headers({"Domain-Name: ricepon-purchase"})
@POST("purchaseWarehousingOrder/details/addMultipleStorageDetails" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> addWarehousingOrder(@Body RequestBody requestBody);
/**
* 查詢入庫單列表
* @param map
*/
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseWarehousingOrder/details/getMultipleStorageOrder" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getWarehousingOrderList(@QueryMap Map<String, Object> map);
/**
* 查詢入庫單詳情
*/
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseWarehousingOrder/details/getMultipleStorageOrderDetails" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getWarehousingOrderDetails(@Query("warehousingOrderId") int warehousingOrderId);
}
......@@ -12,9 +12,15 @@ import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.order.order.TakeawayOrder;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.di.component.DaggerSupplyChainMainComponent;
import com.gingersoft.supply_chain.mvp.content.PurchaseConstant;
import com.gingersoft.supply_chain.mvp.content.SupplyShoppingCart;
import com.gingersoft.supply_chain.mvp.contract.SupplyChainMainContract;
import com.gingersoft.supply_chain.mvp.presenter.SupplyChainMainPresenter;
......
package com.gingersoft.supply_chain.mvp.ui.adapter
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.MoneyUtil
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil
import com.gingersoft.supply_chain.R
import com.gingersoft.supply_chain.mvp.bean.WarehouseOrderBean
......@@ -15,11 +18,15 @@ import com.gingersoft.supply_chain.mvp.bean.WarehouseOrderBean
class WarehousingOrderListAdapter(data: MutableList<WarehouseOrderBean>?) : BaseQuickAdapter<WarehouseOrderBean, BaseViewHolder>(R.layout.item_warehousing_order_list, data) {
override fun convert(holder: BaseViewHolder, item: WarehouseOrderBean) {
holder.setText(R.id.tv_warehousing_order_no, item.orderNo)
holder.setText(R.id.tv_warehousing_order_createTime, item.warehousingTime)
holder.setText(R.id.tv_warehousing_order_species, item.warehousingSpecies.toString())
holder.setText(R.id.tv_warehousing_order_createMember, item.warehousingMember)
holder.setText(R.id.tv_warehousing_order_foods, item.warehousingFoodName)
holder.setText(R.id.tv_warehousing_order_createReason, item.warehousingReason)
holder.setText(R.id.tv_warehousing_order_no, item.warehousingOrderNo)
holder.setText(R.id.tv_warehousing_order_createTime, item.createTime)
holder.setText(R.id.tv_warehousing_order_species, String.format(context.getString(R.string.str_format_species_colon), item.purchaseFoodCount))
holder.setText(R.id.tv_warehousing_order_createMember, String.format(context.getString(R.string.str_format_warehousing_member), item.userName))
holder.setText(R.id.tv_warehousing_order_foods, item.foodName)
holder.setText(R.id.tv_warehousing_order_createReason, item.storageType)
val amount = String.format(context.getString(R.string.str_total_amount_colon_s), MoneyUtil.formatDouble(item.totalPrice))
holder.setText(R.id.tv_warehousing_order_amount, TextUtil.getBoldSpannableString(amount, ContextCompat.getColor(context, R.color.required_color), 4, amount.length))
}
}
\ No newline at end of file
......@@ -108,6 +108,8 @@ public class BuyIngredientsFragment extends BaseSupplyChainFragment<BuyIngredien
QMUIAlphaButton btnFoodIngredientsConfirm;
@BindView(R2.id.tv_ingredients_food_num)
TextView tvIngredientsFoodNum;
@BindView(R2.id.layout_choose_size)
LinearLayout layoutChooseSize;
@BindView(R2.id.btn_food_ingredients_cancel)
QMUIAlphaButton btnFoodIngredientsCancel;
@BindView(R2.id.layout_food_ingredients_btn)
......@@ -311,12 +313,13 @@ public class BuyIngredientsFragment extends BaseSupplyChainFragment<BuyIngredien
if (pageType == FOOD_INGREDIENTS) {
layoutFoodIngredientsBtn.setVisibility(View.GONE);
btnNewFoodIngredient.setVisibility(View.VISIBLE);
tvSelectFoodSize.setVisibility(View.GONE);
layoutChooseSize.setVisibility(View.GONE);
} else if (pageType == GET_FOOD_BY_WAREHOUSING_ORDER) {
//創建入庫單
tvSelectFoodSize.setVisibility(View.VISIBLE);
layoutChooseSize.setVisibility(View.VISIBLE);
btnFoodIngredientsCancel.setVisibility(View.GONE);
} else {
layoutChooseSize.setVisibility(View.GONE);
layoutFoodIngredientsBtn.setVisibility(View.VISIBLE);
}
}
......@@ -519,16 +522,17 @@ public class BuyIngredientsFragment extends BaseSupplyChainFragment<BuyIngredien
if (CollectionUtils.isNotNullOrEmpty(purchaseFood)) {
if (pageType == GET_FOOD_BY_WAREHOUSING_ORDER) {
//採購入庫單
setFragmentResult(RESULT_OK, null);
List<Fragment> fragments = requireActivity().getSupportFragmentManager().getFragments();
for (Fragment fragment : fragments) {
if (fragment instanceof WarehousingOrderDetailsFragment) {
//有入庫單詳情
popTo(WarehousingOrderDetailsFragment.class, false);
killMyself();
return;
}
}
//沒入庫單詳情
startWithPop(WarehousingOrderDetailsFragment.newInstance());
startWithPop(WarehousingOrderDetailsFragment.newInstance(-1, ""));
} else {
startForResult(ShoppingCatFragment.newInstance(), TO_SHOPPING_CART_REQUEST_CODE);
}
......
......@@ -165,7 +165,7 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
@Override
public void initData(@Nullable Bundle savedInstanceState) {
initTopBar(supplyTopBar, "入庫單");
initTopBar(supplyTopBar, getString(R.string.str_warehousing_order));
supplyTopBar.addRightImageButton(R.drawable.ic_white_more, R.id.id_more).setOnClickListener(this);
edRemark.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(mContext, RemarkProvider.REMARK_TEXT_LENGTH), InputFilterUtils.getChAndEnNumPtWrapInputFilter(mContext)});
Bundle arguments = getArguments();
......
......@@ -16,19 +16,13 @@ import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
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.MoneyUtil;
import com.gingersoft.gsa.cloud.ui.utils.AppDialog;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWarehousingOrderDetailsComponent;
import com.gingersoft.supply_chain.mvp.bean.ConsumeReasonBean;
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.content.SupplyShoppingCart;
import com.gingersoft.supply_chain.mvp.contract.WarehousingOrderDetailsContract;
import com.gingersoft.supply_chain.mvp.presenter.WarehousingOrderDetailsPresenter;
import com.gingersoft.supply_chain.mvp.ui.adapter.ConsumptionReasonAdapter;
......@@ -37,14 +31,13 @@ import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.food.BuyIngredientsFragment;
import com.gingersoft.supply_chain.mvp.ui.widget.GoodsDetailsPopup;
import com.gingersoft.supply_chain.mvp.ui.widget.ScanSnPopup;
import com.gingersoft.supply_chain.mvp.ui.widget.WarehousingFoodDetailsPopup;
import com.jess.arms.di.component.AppComponent;
import com.lxj.xpopup.XPopup;
import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import butterknife.BindView;
......@@ -76,10 +69,24 @@ public class WarehousingOrderDetailsFragment extends BaseSupplyChainFragment<War
QMUIAlphaTextView tvOrderConfirm;
@BindView(R2.id.tv_order_cancel)
QMUIAlphaTextView tvOrderCancel;
@BindView(R2.id.layout_btn)
LinearLayout layoutBtn;
private boolean isLeave = false;
private int warehousingOrderId;
private String warehousingReason;
public static WarehousingOrderDetailsFragment newInstance() {
public static final int ADD_FOOD_REQUEST_CODE = 1001;
private static final String WAREHOUSING_ORDER_ID_KEY = "warehousingOrderIdKey";
private static final String WAREHOUSING_ORDER_REASON_KEY = "warehousingReasonKey";
public static WarehousingOrderDetailsFragment newInstance(int warehousingOrderId, String reason) {
WarehousingOrderDetailsFragment fragment = new WarehousingOrderDetailsFragment();
Bundle bundle = new Bundle();
bundle.putInt(WAREHOUSING_ORDER_ID_KEY, warehousingOrderId);
bundle.putString(WAREHOUSING_ORDER_REASON_KEY, reason);
fragment.setArguments(bundle);
return fragment;
}
......@@ -100,16 +107,37 @@ public class WarehousingOrderDetailsFragment extends BaseSupplyChainFragment<War
@Override
public void initData(@Nullable Bundle savedInstanceState) {
initTopBar(supplyTopBar, getString(R.string.str_warehousing_order));
Bundle arguments = getArguments();
//入庫類型
rvWarehousingType.setLayoutManager(new GridLayoutManager(requireContext(), 3));
mPresenter.getWarehousingReason();
if (arguments != null) {
warehousingOrderId = arguments.getInt(WAREHOUSING_ORDER_ID_KEY, -1);
warehousingReason = arguments.getString(WAREHOUSING_ORDER_REASON_KEY);
if (warehousingOrderId != -1) {
mPresenter.getWarehousingOrderDetails(warehousingOrderId);
layoutBtn.setVisibility(View.GONE);
return;
}
}
initFoodInfo();
}
private void initFoodInfo() {
mPresenter.initWarehousingFood();
setOrderAllInfo();
}
@Override
public void setOrderAllInfo() {
//總價
tvOrderTotalAmount.setText(String.format(getString(R.string.str_amount_tran_s), MoneyUtil.formatDouble(mPresenter.getFoodTotalAmount())));
//種類
tvFoodSpecies.setText(mPresenter.getFoodSize() + "");
}
private View getHeader() {
View view = getLayoutInflater().inflate(R.layout.item_warehousing_order_details, rvWarehousingFood, false);
TextView goodsName = view.findViewById(R.id.tv_goods_name);
......@@ -132,13 +160,27 @@ public class WarehousingOrderDetailsFragment extends BaseSupplyChainFragment<War
@Override
public void initReason(ConsumptionReasonAdapter consumptionReasonAdapter) {
rvWarehousingType.setAdapter(consumptionReasonAdapter);
consumptionReasonAdapter.setOnItemChildClickListener((adapter, view, position) -> consumptionReasonAdapter.setSelectIndex(position));
mPresenter.setSelectReason(warehousingReason);
}
@Override
public void initFoodView(WareHousingOrderFoodAdapter wareHousingOrderFoodAdapter) {
wareHousingOrderFoodAdapter.addHeaderView(getHeader());
rvWarehousingFood.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(requireContext(), R.color.color_ccc), LinearLayout.LayoutParams.MATCH_PARENT, 1));
wareHousingOrderFoodAdapter.addFooterView(getFooter(v -> start(BuyIngredientsFragment.newInstance(BuyIngredientsFragment.GET_FOOD_BY_WAREHOUSING_ORDER))));
if (warehousingOrderId == -1) {
//加添加食材按鈕
wareHousingOrderFoodAdapter.addFooterView(getFooter(v -> startForResult(BuyIngredientsFragment.newInstance(BuyIngredientsFragment.GET_FOOD_BY_WAREHOUSING_ORDER), ADD_FOOD_REQUEST_CODE)));
} else {
//加一條線
wareHousingOrderFoodAdapter.addFooterView(getLayoutInflater().inflate(R.layout.include_horizontal_color_ccc_dividing_line, rvWarehousingFood, false));
if (wareHousingOrderFoodAdapter.getItemCount() > 0) {
edRemark.setText(String.format(getString(R.string.str_format_remark_colon), wareHousingOrderFoodAdapter.getItem(0).getRemarks()));
edRemark.setFocusable(false);
edRemark.setEnabled(false);
edRemark.setBackground(null);
}
}
rvWarehousingFood.setAdapter(wareHousingOrderFoodAdapter);
wareHousingOrderFoodAdapter.setOnItemChildClickListener((adapter, view, position) -> {
int viewId = view.getId();
......@@ -150,40 +192,45 @@ public class WarehousingOrderDetailsFragment extends BaseSupplyChainFragment<War
PurchaseFoodBean item = wareHousingOrderFoodAdapter.getItem(position);
if (wareHousingOrderFoodAdapter.getItem(position).getFoodMarkSn() == PurchaseFoodBean.HAS_SN) {
//SN食材,輸入SN碼
showScanPopup(wareHousingOrderFoodAdapter.getItem(position));
if (warehousingOrderId == -1) {
showScanPopup(position, wareHousingOrderFoodAdapter.getItem(position));
} else {
mPresenter.querySnCodes(item);
}
} else {
//顯示詳情
new XPopup.Builder(requireContext())
.autoOpenSoftInput(false)
.autoFocusEditText(false)
.asCustom(new GoodsDetailsPopup(requireContext(), item).setEditNumber(false))
.asCustom(new WarehousingFoodDetailsPopup(requireContext(), item))
.show();
}
}
});
}
@Override
public void addOrderSuccess() {
isLeave = true;
setFragmentResult(RESULT_OK, null);
killMyself();
}
/**
* 顯示掃碼popupwindow
*
* @param infoVosBean 食品信息
*/
private void showScanPopup(PurchaseFoodBean infoVosBean) {
private void showScanPopup(int position, PurchaseFoodBean infoVosBean) {
List<PurchaseFoodEncodeSn> foodEncodeSns = infoVosBean.getPurchaseFoodEncodeSn();
ScanSnPopup scanSnPopup = new ScanSnPopup(this, infoVosBean.getName(), foodEncodeSns, true)
.setOnDeleteListener((snCode, snPosition) -> {
foodEncodeSns.remove(snCode);
});
.setOnDeleteListener((snCode, snPosition) -> foodEncodeSns.remove(snCode));
scanSnPopup.setOnScanResultListener((popup, scanResult) -> {
//當前食材infoVosBean裡面有個sn碼集合,將scanResult添加進去
// //添加到食品中去
// if (foodEncodeSns != null) {
// foodEncodeSns.addAll(newAddSnCodes);
// } else {
// infoVosBean.setPurchaseFoodEncodeSns(newAddSnCodes);
// }
DeputyUnitBean showUnit = infoVosBean.getShowUnit();
showUnit.setDeputyValue(scanResult.size());
infoVosBean.setPurchaseFoodEncodeSn(scanResult);
infoVosBean.setFoodQuantity(scanResult.size());
mPresenter.notifyAdapter(position);
setOrderAllInfo();
scanSnPopup.dismissOrHideSoftInput();
if (!scanSnPopup.isDismiss()) {
scanSnPopup.dismiss();
......@@ -193,9 +240,16 @@ public class WarehousingOrderDetailsFragment extends BaseSupplyChainFragment<War
requireContext())
.asCustom(scanSnPopup)
.show();
}
@Override
public void showSnCodePopup(PurchaseFoodBean infoVosBean) {
new XPopup.Builder(requireContext())
.asCustom(new ScanSnPopup(this, infoVosBean.getName(), infoVosBean.getPurchaseFoodEncodeSn(), false))
.show();
}
private void createWarehousingOrder() {
mPresenter.createWarehousingOrder(edRemark.getText().toString());
}
......@@ -211,4 +265,25 @@ public class WarehousingOrderDetailsFragment extends BaseSupplyChainFragment<War
killMyself();
}
}
@Override
public boolean onBackPressedSupport() {
if (warehousingOrderId == -1 && !isLeave && mPresenter.getFoodSize() > 0) {
AppDialog.getInstance().showTipDialog(requireContext(), getString(R.string.str_info_not_save_about_to_leave), () -> {
isLeave = true;
killMyself();
});
return true;
}
return super.onBackPressedSupport();
}
@Override
public void onFragmentResult(int requestCode, int resultCode, Bundle data) {
super.onFragmentResult(requestCode, resultCode, data);
if (requestCode == ADD_FOOD_REQUEST_CODE) {
//刷新列表
initFoodInfo();
}
}
}
......@@ -10,9 +10,12 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.gingersoft.gsa.cloud.common.core.user.UserConstans;
import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.core.user.info.UserInfo;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.ui.animator.CustomAnimation1;
import com.gingersoft.gsa.cloud.ui.animator.CustomAnimation3;
......@@ -27,7 +30,13 @@ import com.gingersoft.supply_chain.mvp.ui.adapter.WarehousingOrderListAdapter;
import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.food.BuyIngredientsFragment;
import com.jess.arms.di.component.AppComponent;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.core.LoadSir;
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.ArrayList;
import java.util.List;
......@@ -55,6 +64,9 @@ public class WarehousingOrderListFragment extends BaseSupplyChainFragment<Wareho
QMUITopBar supplyTopBar;
@BindView(R2.id.rv_second_category)
RecyclerView rvSecondCategory;
@BindView(R2.id.smart_fresh)
SmartRefreshLayout smartRefreshLayout;
private final static int NEW_WAREHOUSING_ORDER_REQUEST_CODE = 1001;
public static WarehousingOrderListFragment newInstance() {
WarehousingOrderListFragment fragment = new WarehousingOrderListFragment();
......@@ -78,15 +90,26 @@ public class WarehousingOrderListFragment extends BaseSupplyChainFragment<Wareho
@Override
public void initData(@Nullable Bundle savedInstanceState) {
initTopBar(supplyTopBar, "入庫單");
initTopBar(supplyTopBar, getString(R.string.str_warehousing_order));
smartRefreshLayout.setPrimaryColorsId(R.color.trans, R.color.black);
loadService = LoadSir.getDefault().register(smartRefreshLayout, (Callback.OnReloadListener) v -> {
mPresenter.pageIndex = 0;
loadOrderList();
});
smartRefreshLayout.setOnRefreshListener(refreshLayout -> loadOrderList());
smartRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
mPresenter.pageIndex++;
loadOrderList();
}
});
supplyTopBar.addRightImageButton(R.drawable.ic_circle_new_food_ingredient, R.id.topbar_right_add_button).setOnClickListener(this);
List<WarehouseOrderBean> warehouseOrderBeanList = new ArrayList<>();
for (int i = 0; i < 15; i++) {
warehouseOrderBeanList.add(new WarehouseOrderBean("RKO1101" + i, UserContext.newInstance().getMemberName(), TimeUtils.getCurrentDate(TimeUtils.DEFAULT_DATE_FORMAT_YMDHM), "巴西肥牛", 1, "調撥入庫"));
}
WarehousingOrderListAdapter adapter = new WarehousingOrderListAdapter(warehouseOrderBeanList);
adapter.setAdapterAnimation(new CustomAnimation3());
rvSecondCategory.setAdapter(adapter);
loadOrderList();
}
private void loadOrderList() {
mPresenter.getWarehousingOrderList();
}
@Override
......@@ -96,7 +119,42 @@ public class WarehousingOrderListFragment extends BaseSupplyChainFragment<Wareho
//先清空購物車
SupplyShoppingCart.getInstance().clear();
//新增入庫單
start(BuyIngredientsFragment.newInstance(BuyIngredientsFragment.GET_FOOD_BY_WAREHOUSING_ORDER));
// start(BuyIngredientsFragment.newInstance(BuyIngredientsFragment.GET_FOOD_BY_WAREHOUSING_ORDER));
startForResult(WarehousingOrderDetailsFragment.newInstance(-1, ""), NEW_WAREHOUSING_ORDER_REQUEST_CODE);
}
}
@Override
public void loadList(WarehousingOrderListAdapter warehousingOrderListAdapter) {
finishLoad(false);
if (warehousingOrderListAdapter.getItemCount() <= 0) {
loadService.showCallback(EmptyCallback.class);
} else {
loadService.showSuccess();
warehousingOrderListAdapter.setOnItemClickListener((adapter, view, position) -> {
start(WarehousingOrderDetailsFragment.newInstance(warehousingOrderListAdapter.getItem(position).getId(), warehousingOrderListAdapter.getItem(position).getStorageType()));
});
rvSecondCategory.setAdapter(warehousingOrderListAdapter);
}
}
@Override
public void finishLoad(boolean isNoMore) {
smartRefreshLayout.finishRefresh();
smartRefreshLayout.finishLoadMore();
if (isNoMore) {
smartRefreshLayout.finishLoadMoreWithNoMoreData();
} else {
smartRefreshLayout.resetNoMoreData();
}
}
@Override
public void onFragmentResult(int requestCode, int resultCode, Bundle data) {
super.onFragmentResult(requestCode, resultCode, data);
if (requestCode == NEW_WAREHOUSING_ORDER_REQUEST_CODE) {
mPresenter.pageIndex = 0;
loadOrderList();
}
}
}
......@@ -197,19 +197,19 @@ public class ScanSnView extends FrameLayout {
});
adapter.setOnItemChildClickListener((adapter1, view, position) -> {
if (view.getId() == R.id.iv_sn_code_delete) {
// if (adapter.getItem(position).newAdd) {
onSingerResultListener.onScanValue(false, adapter.getItem(position), adapter.getItemCount());
if (onDeleteSnCodeListener != null) {
onDeleteSnCodeListener.onDelete(adapter.getItem(position), position);
}
if (adapter.getItem(position).newAdd) {
newCodeSize--;
onSingerResultListener.onScanValue(false, adapter.getItem(position), adapter.getItemCount());
if (onDeleteSnCodeListener != null) {
onDeleteSnCodeListener.onDelete(adapter.getItem(position), position);
}
if (adapter.getItem(position).newAdd) {
newCodeSize--;
}
adapter1.removeAt(position);
setConfirmBtnState();
} else {
ToastUtils.show(getContext(), "已入庫的SN碼不可刪除");
}
adapter1.removeAt(position);
setConfirmBtnState();
// } else {
// ToastUtils.show(getContext(), "已入庫的SN碼不可刪除");
// }
}
});
addView(rootView);
......
package com.gingersoft.supply_chain.mvp.ui.widget;
import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.common.utils.glide.GlideUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.threadPool.ThreadPoolManager;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.content.PurchaseConstant;
import com.gingersoft.supply_chain.mvp.ui.adapter.BuyIngredientsAdapter;
import com.lxj.xpopup.core.CenterPopupView;
import com.qmuiteam.qmui.widget.textview.QMUISpanTouchFixTextView;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* @author 宇航.
* User: admin
* Date: 2021/4/15
* Time: 10:07
* Use:
*/
public class WarehousingFoodDetailsPopup extends CenterPopupView {
@BindView(R2.id.tv_goods_name)
TextView tvGoodsName;
@BindView(R2.id.tv_goods_price)
QMUISpanTouchFixTextView tvGoodsPrice;
@BindView(R2.id.tv_goods_no)
TextView tvGoodsNo;
@BindView(R2.id.tv_food_number)
TextView tvFoodNumber;
@BindView(R2.id.tv_food_total_amount)
QMUISpanTouchFixTextView tvFoodTotalAmount;
@BindView(R2.id.tv_goods_specification)
TextView tvGoodsSpecification;
@BindView(R2.id.iv_popup_close)
ImageView ivPopupClose;
private PurchaseFoodBean purchaseFoodBean;
public WarehousingFoodDetailsPopup(@NonNull Context context, PurchaseFoodBean purchaseFoodBean) {
super(context);
this.purchaseFoodBean = purchaseFoodBean;
}
@Override
protected int getImplLayoutId() {
return R.layout.layout_warehousing_details_popup;
}
@Override
protected void onCreate() {
super.onCreate();
ButterKnife.bind(this);
popupInfo.autoOpenSoftInput = false;
tvGoodsName.setText(purchaseFoodBean.getName());
tvFoodNumber.setText(String.valueOf(purchaseFoodBean.getFoodQuantity()));
tvGoodsNo.setText(purchaseFoodBean.getFoodNo());
String price = String.format(getContext().getString(R.string.str_unit_price_colon_s), MoneyUtil.formatDouble(purchaseFoodBean.getUnitPrice()));
tvGoodsPrice.setText(TextUtil.getBoldSpannableString(price, ContextCompat.getColor(getContext(), R.color.required_color), 3, price.length()));
String totalAmountText = String.format(getContext().getString(R.string.str_total_amount_colon_s), MoneyUtil.formatDouble(MoneyUtil.priceCalculation(purchaseFoodBean.getUnitPrice(), purchaseFoodBean.getFoodQuantity())));
tvFoodTotalAmount.setText(TextUtil.getBoldSpannableString(totalAmountText, ContextCompat.getColor(getContext(), R.color.required_color), 3, price.length()));
if (TextUtil.isNotEmptyOrNullOrUndefined(purchaseFoodBean.getPackingDescription())) {
tvGoodsSpecification.setText(purchaseFoodBean.getPackingDescription());
} else {
tvGoodsSpecification.setText(purchaseFoodBean.getBasicUnitName());
}
ivPopupClose.setOnClickListener(this::onClick);
}
private void onClick(View v) {
dismiss();
}
}
......@@ -11,7 +11,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_2"
android:layout_marginRight="@dimen/dp_2"
android:layout_marginBottom="@dimen/dp_15"
android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/selector_new_order_radio_bg"
android:button="@null"
android:paddingLeft="@dimen/dp_10"
......
......@@ -10,13 +10,11 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_5"
android:paddingRight="@dimen/dp_10"
android:paddingBottom="@dimen/dp_5"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
android:text="+添加食材"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/supply_chain_textSize_16" />
android:textSize="@dimen/supply_chain_textSize_18" />
<include
layout="@layout/include_horizontal_color_ccc_dividing_line"
......
......@@ -224,11 +224,12 @@
android:visibility="gone" />
<LinearLayout
android:id="@+id/layout_choose_size"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_20"
android:layout_weight="1"
android:visibility="visible">
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
......@@ -302,8 +303,7 @@
android:layout_marginTop="@dimen/dp_5"
android:layout_marginBottom="@dimen/dp_5"
android:layout_weight="1"
android:text="取消"
android:visibility="gone" />
android:text="取消"/>
</LinearLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
......
......@@ -7,10 +7,16 @@
<include layout="@layout/supply_chain_top_bar" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_second_category"
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/smart_fresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_second_category"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</LinearLayout>
\ No newline at end of file
......@@ -32,7 +32,6 @@
android:id="@+id/rv_warehousing_food"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
android:layout_weight="1"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
......@@ -47,7 +46,8 @@
android:textColor="@color/theme_333_color"
android:textSize="@dimen/supply_chain_textSize_16"
android:thumb="@drawable/shape_thumb_on"
android:track="@drawable/selector_switch_track" />
android:track="@drawable/selector_switch_track"
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
......@@ -101,12 +101,13 @@
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_2"
android:layout_marginRight="@dimen/dp_15"
android:textCursorDrawable="@drawable/cursor_theme"
android:hint="@string/str_remark"
android:textColorHint="@color/color_ccc"
android:textCursorDrawable="@drawable/cursor_theme"
android:textSize="@dimen/supply_chain_textSize_16" />
<LinearLayout
android:id="@+id/layout_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_15"
......
......@@ -13,31 +13,30 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:layout_marginLeft="@dimen/dp_8"
android:layout_marginRight="@dimen/dp_8"
android:orientation="horizontal">
android:orientation="horizontal"
android:paddingLeft="@dimen/dp_8"
android:paddingRight="@dimen/dp_8">
<TextView
android:id="@+id/tv_warehousing_order_no"
android:layout_width="wrap_content"
android:id="@+id/tv_warehousing_order_createReason"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_17"
tools:text="入庫單號" />
tools:text="調撥入庫" />
<TextView
android:id="@+id/tv_warehousing_order_createTime"
android:id="@+id/tv_warehousing_order_amount"
style="@style/Food_Ingredient_Info_TextStyle"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="right"
android:maxLines="1"
tools:text="2020-11-20 12:00" />
android:layout_gravity="end|center_vertical"
tools:text="總價:" />
</LinearLayout>
<include layout="@layout/include_horizontal_color_eee_dividing_line" />
......@@ -47,24 +46,27 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="@dimen/dp_8">
android:paddingLeft="@dimen/dp_8"
android:paddingTop="@dimen/dp_5"
android:paddingRight="@dimen/dp_8">
<TextView
android:id="@+id/tv_warehousing_order_species"
android:id="@+id/tv_warehousing_order_no"
style="@style/Food_Ingredient_Info_TextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="種類:12" />
tools:text="入庫單號" />
<TextView
android:id="@+id/tv_warehousing_order_createMember"
android:id="@+id/tv_warehousing_order_createTime"
style="@style/Food_Ingredient_Info_TextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_5"
android:layout_weight="1"
android:gravity="end"
tools:text="入庫人" />
android:ellipsize="end"
android:gravity="right"
android:maxLines="1"
tools:text="2020-11-20 12:00" />
</LinearLayout>
<LinearLayout
......@@ -72,26 +74,38 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="@dimen/dp_8"
android:paddingRight="@dimen/dp_8"
android:paddingBottom="@dimen/dp_8">
android:paddingTop="@dimen/dp_5"
android:paddingRight="@dimen/dp_8">
<TextView
android:id="@+id/tv_warehousing_order_foods"
android:id="@+id/tv_warehousing_order_species"
style="@style/Food_Ingredient_Info_TextStyle"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:singleLine="true"
tools:text="巴西肥牛、澳洲牛排" />
tools:text="種類:12" />
<TextView
android:id="@+id/tv_warehousing_order_createReason"
android:id="@+id/tv_warehousing_order_createMember"
style="@style/Food_Ingredient_Info_TextStyle"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
tools:text="調撥入庫" />
android:layout_marginLeft="@dimen/dp_5"
android:layout_weight="1"
android:gravity="end"
tools:text="入庫人" />
</LinearLayout>
<TextView
android:id="@+id/tv_warehousing_order_foods"
style="@style/Food_Ingredient_Info_TextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:paddingBottom="@dimen/dp_5"
android:paddingLeft="@dimen/dp_8"
android:paddingTop="@dimen/dp_5"
android:paddingRight="@dimen/dp_8"
android:singleLine="true"
tools:text="巴西肥牛、澳洲牛排" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_white_eight_corners_bg"
android:orientation="vertical"
android:padding="@dimen/dp_10">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_goods_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_16"
tools:text="巴西费缪" />
<TextView
android:id="@+id/tv_goods_no"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical|end"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_16"
tools:text="SP001" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_goods_specification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_16"
tools:text="1KG/盒" />
<TextView
android:id="@+id/tv_food_number"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_5"
android:layout_weight="1"
android:gravity="end"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_16"
tools:text="海鮮天地" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_9"
android:orientation="horizontal">
<com.qmuiteam.qmui.widget.textview.QMUISpanTouchFixTextView
android:id="@+id/tv_goods_price"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:text="單價:$100.0"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_16" />
<com.qmuiteam.qmui.widget.textview.QMUISpanTouchFixTextView
android:id="@+id/tv_food_total_amount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical|end"
android:includeFontPadding="false"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_16"
tools:text="總價:$100.0" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/iv_popup_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_19"
android:layout_marginBottom="@dimen/dp_10"
android:src="@drawable/dialog_close" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/str_warehousing_order"
android:textColor="@color/black"
android:textSize="@dimen/dp_30" />
<TextView
android:id="@+id/tv_warehousing_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="@dimen/dp_16"
tools:text="入庫單號" />
<TextView
android:id="@+id/tv_warehousing_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:textColor="@color/black"
android:textSize="@dimen/dp_16"
tools:text="入庫日期" />
<include layout="@layout/include_horizontal_color_eee_dividing_line" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_warehousing_food"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_5"
android:layout_weight="1"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<TextView
android:id="@+id/tv_total_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_10"
android:textColor="@color/black"
android:textSize="@dimen/dp_16"
tools:text="總計:1111" />
</LinearLayout>
\ No newline at end of file
......@@ -11,6 +11,8 @@
<string name="str_supplier">供應商</string>
<string name="str_species">種類</string>
<string name="str_species_colon">種類:</string>
<string name="str_format_species_colon">種類:%1$d</string>
<string name="str_add_subtype">+子類別</string>
<string name="str_inventory_consumption">庫存消耗</string>
<string name="str_consumption_inventory">消耗庫存:</string>
......@@ -27,6 +29,7 @@
<string name="str_latest_unit_price_colon">最新單價:$%1$.2f</string>
<string name="str_total_amount_colon">總價:$%1$.2f</string>
<string name="str_total_amount_colon_s">總金額:$%1$s</string>
<string name="str_delete_category_tip">是否確認刪除該類別【%1$s】,子類和食材將一同刪除?</string>
<string name="str_preview">預覽</string>
<string name="str_ingredients_name">食材名:</string>
......@@ -58,6 +61,7 @@
<string name="str_confirm_receipt">是否確認收貨?</string>
<string name="str_new_add_ingredients">新增食材</string>
<string name="str_chosen">已選擇</string>
<string name="str_warehousing_order">入庫單</string>
<string name="str_format_warehousing_member">入庫人:%1$s</string>
</resources>
\ No newline at end of file
......@@ -135,7 +135,7 @@ dependencies {
api 'com.github.huangyanbin:SmartTable:2.2.0'
implementation 'com.lxj:xpopup:2.2.10'
implementation "androidx.documentfile:documentfile:1.0.1"
implementation 'com.github.markzhai:blockcanary-android:1.5.0'
implementation 'org.aspectj:aspectjrt:1.8.14'
aspectjx {
exclude 'androidx', 'org.jetbrains.kotlin', "module-info", 'com.google', 'com.squareup', 'org.apache', 'versions.9', 'com.squareup.okio', 'okio', 'leakcanary', 'com.google.firebase', 'com.google.android'
......
......@@ -16,6 +16,7 @@ import com.dianping.logan.Logan;
import com.dianping.logan.OnLoganProtocolStatus;
import com.gingersoft.gsa.cloud.common.BuildConfig;
import com.gingersoft.gsa.cloud.common.R;
import com.gingersoft.gsa.cloud.common.config.AppBlockCanaryContext;
import com.gingersoft.gsa.cloud.common.config.LoganConfig;
import com.gingersoft.gsa.cloud.common.config.expandconfig.ExpandInfoSetting;
import com.gingersoft.gsa.cloud.common.config.expandconfig.FunctionExtendedConfiguration;
......@@ -47,6 +48,7 @@ import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.github.moduth.blockcanary.BlockCanary;
import com.hyweb.n5.lib.exception.NoInitPrinterException;
import com.hyweb.n5.lib.util.PrinterUtil;
import com.jess.arms.base.BaseApplication;
......@@ -153,6 +155,8 @@ public class GsaCloudApplication extends BaseApplication {
initAutoSize();
//上傳餐廳擴展信息
uploadExpandInfo();
BlockCanary.install(mAppContext, new AppBlockCanaryContext()).start();
LoganManager.w_action(TAG, "init end.....");
return null;
}
......
package com.gingersoft.gsa.cloud.common.config;
import android.content.Context;
import com.github.moduth.blockcanary.BlockCanaryContext;
import com.github.moduth.blockcanary.internal.BlockInfo;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
/**
* @author 宇航. 1239658231@qq.com
* User: admin
* Date: 2021/5/6
* Time: 14:12
* Use:
*/
public class AppBlockCanaryContext extends BlockCanaryContext {
// 实现各种上下文,包括应用标示符,用户uid,网络类型,卡慢判断阙值,Log保存位置等
/**
* Implement in your project.
*
* @return Qualifier which can specify this installation, like version + flavor.
*/
@Override
public String provideQualifier() {
return "unknown";
}
/**
* Implement in your project.
*
* @return user id
*/
@Override
public String provideUid() {
return "uid";
}
/**
* Network type
*
* @return {@link String} like 2G, 3G, 4G, wifi, etc.
*/
@Override
public String provideNetworkType() {
return "unknown";
}
/**
* Config monitor duration, after this time BlockCanary will stop, use
* with {@code BlockCanary}'s isMonitorDurationEnd
*
* @return monitor last duration (in hour)
*/
@Override
public int provideMonitorDuration() {
return -1;
}
/**
* Config block threshold (in millis), dispatch over this duration is regarded as a BLOCK. You may set it
* from performance of device.
*
* @return threshold in mills
*/
@Override
public int provideBlockThreshold() {
return 1000;
}
/**
* Thread stack dump interval, use when block happens, BlockCanary will dump on main thread
* stack according to current sample cycle.
* <p>
* Because the implementation mechanism of Looper, real dump interval would be longer than
* the period specified here (especially when cpu is busier).
* </p>
*
* @return dump interval (in millis)
*/
@Override
public int provideDumpInterval() {
return provideBlockThreshold();
}
/**
* Path to save log, like "/blockcanary/", will save to sdcard if can.
*
* @return path of log files
*/
@Override
public String providePath() {
return "/blockcanary/";
}
/**
* If need notification to notice block.
*
* @return true if need, else if not need.
*/
@Override
public boolean displayNotification() {
return true;
}
/**
* Implement in your project, bundle files into a zip file.
*
* @param src files before compress
* @param dest files compressed
* @return true if compression is successful
*/
@Override
public boolean zip(File[] src, File dest) {
return false;
}
/**
* Implement in your project, bundled log files.
*
* @param zippedFile zipped file
*/
@Override
public void upload(File zippedFile) {
throw new UnsupportedOperationException();
}
/**
* Packages that developer concern, by default it uses process name,
* put high priority one in pre-order.
*
* @return null if simply concern only package with process name.
*/
@Override
public List<String> concernPackages() {
return null;
}
/**
* Filter stack without any in concern package, used with @{code concernPackages}.
*
* @return true if filter, false it not.
*/
@Override
public boolean filterNonConcernStack() {
return false;
}
/**
* Provide white list, entry in white list will not be shown in ui list.
*
* @return return null if you don't need white-list filter.
*/
@Override
public List<String> provideWhiteList() {
LinkedList<String> whiteList = new LinkedList<>();
whiteList.add("org.chromium");
return whiteList;
}
/**
* Whether to delete files whose stack is in white list, used with white-list.
*
* @return true if delete, false it not.
*/
@Override
public boolean deleteFilesInWhiteList() {
return true;
}
/**
* Block interceptor, developer may provide their own actions.
*/
@Override
public void onBlock(Context context, BlockInfo blockInfo) {
}
}
......@@ -2,5 +2,5 @@
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/horizontal_dividing_line"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0_5"
android:layout_height="@dimen/dp_1"
android:background="@color/color_ccc" />
package com.gingersoft.gsa.cloud.database;
import android.content.Context;
import com.gingersoft.gsa.cloud.database.greendao.DaoMaster;
import com.gingersoft.gsa.cloud.database.greendao.DaoSession;
import org.greenrobot.greendao.query.QueryBuilder;
/**
......@@ -31,7 +33,7 @@ public class DaoManager {
* @return
*/
public static DaoManager getInstance() {
synchronized (manager){
synchronized (manager) {
return manager;
}
}
......@@ -41,7 +43,8 @@ public class DaoManager {
}
public void init(Context context) {
this.context = context;
// this.context = context;//內存洩漏
this.context = context.getApplicationContext();
}
/**
......
......@@ -17,11 +17,11 @@ public class CustomAnimation3 implements BaseAnimation {
Animator alpha = ObjectAnimator.ofFloat(view, "alpha", 0, 1f);
alpha.setDuration(450);
Animator translationY =
ObjectAnimator.ofFloat(view, "translationY", view.getRootView().getHeight(), 0.5f);
translationY.setDuration(450);
translationY.setInterpolator(new DecelerateInterpolator(1.2f));
// Animator translationY =
// ObjectAnimator.ofFloat(view, "translationY", view.getRootView().getHeight(), 1f);
// translationY.setDuration(450);
// translationY.setInterpolator(new DecelerateInterpolator(1.2f));
return new Animator[]{alpha, translationY};
return new Animator[]{alpha};
}
}
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