pda/zhuike/src/main/java/com/novelbook/android/Fragments/StockOutPickOneByOne.java

899 lines
28 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.novelbook.android.Fragments;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.novelbook.android.BuildConfig;
import com.novelbook.android.Main2Activity;
import com.novelbook.android.MyApp;
import com.novelbook.android.R;
import com.novelbook.android.bean.StockOutPort;
import com.novelbook.android.netsubscribe.BookSubscribe;
import com.novelbook.android.netutils.HttpMethods;
import com.novelbook.android.netutils.OnSuccessAndFaultListener;
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
import com.novelbook.android.utils.Constants;
import com.novelbook.android.utils.WmsUtil;
import org.json.JSONObject;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import butterknife.OnEditorAction;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class StockOutPickOneByOne extends BasicFragment {
public static final String TAG = StockOutPickOneByOne.class.getSimpleName();
@BindView(R.id.edFlowNo)
EditText edFlowNo;
@BindView(R.id.edLoc)
EditText edLoc;
@BindView(R.id.edPickcnt)
EditText edPickcnt;
@BindView(R.id.locationId)
TextView tvLocationId;
@BindView(R.id.orderno)
TextView orderno;
@BindView(R.id.tvtranArea)
TextView tvTranArea;
@BindView(R.id.tvTranLoc)
TextView tvTranLoc;
@BindView(R.id.custom)
TextView custom;
@BindView(R.id.goodsName)
TextView goodsName ;
// @BindView(R.id.barcode)
// TextView tvBarcode;
// @BindView(R.id.manufacture)
// TextView manufacture;
@BindView(R.id.spec)
TextView spec;
@BindView(R.id.productDate)
TextView productDate;
@BindView(R.id.validDate)
TextView validDate;
@BindView(R.id.batch)
TextView batch;
@BindView(R.id.avCount)
TextView tvCount;
@BindView(R.id.unit)
TextView unit;
@BindView(R.id.tvPages)
TextView tvPages;
@BindView(R.id.packcnt)
TextView packcnt;
@BindView(R.id.tvMinOperationUnit)
TextView tvMinOperationUnit;
@BindView(R.id.tvMinOperationUnit2)
TextView tvMinOperationUnit2;
@BindView(R.id.btnLastPage)
TextView btnLastPage;
@BindView(R.id.btnNextPage)
TextView btnNextPage;
@BindView(R.id.btnConfirm)
TextView btnConfirm;
@BindView(R.id.lltaskId)
LinearLayout lltask;
@BindView(R.id.edTaskId)
EditText edTaskId;
@BindView(R.id.llbatch)
LinearLayout llbatch;
@BindView(R.id.llbulk)
LinearLayout llbulk;
@BindView(R.id.tvUnit2)
TextView tvUnit2;
@BindView(R.id.edBulkcnt)
EditText edBulk;
@BindView(R.id.tvVirtialCnt)
TextView tvVirtialCnt;
String taskId;
@OnEditorAction(R.id.edTaskId)
boolean taskIdIn(KeyEvent key){
if (!WmsUtil.isKeyEnterDown(key)) {
return true;
}
taskId = edTaskId.getText().toString().trim().replaceAll("\\r|\\n","");
if(!TextUtils.isEmpty(taskId)){
failureMsg="";
isPickSuccess =false;
// resetInput();
doGetTaskDetail(taskId);
edTaskId.setText("");
}
return false;
}
String flowNo, lastCustomerId="",lastJobNo="";
boolean isPickSuccess;
private int currentPage;
private List< StockOutPort> mListOutTasks = new ArrayList<>();
@Override
protected void initDebugData() {
}
@Override
protected int getLayoutRes() {
return R.layout.fragment_stock_out_pick_one_by_one;
}
@Override
protected void initData() {
btnLastPage.setEnabled(false);
btnNextPage.setEnabled(false);
btnConfirm.setEnabled(false);
edTaskId.setEnabled( MyApp.user.hasSpecialAuth("按下架任务编号获取任务"));
}
@Override
protected void fillData11() {
// setInfo( failureMsg);
goNexPage();
}
@Override
protected void fillData() {
if(TextUtils.isEmpty((failureMsg)))
setInfo( failureMsg);
fillTaskDetail();
isPickSuccess = failureMsg!=null && failureMsg.equals(("成功"));
if(isPickSuccess){
// resetInput();
// edLoc.setText("");
// flowNo=locCode=taskId="";
}
}
private void resetInput() {
// mStockOutPort = new StockOutPort();
fillTaskDetail();
// mStockOutPort=null;
}
@Override
protected void initViews() {
// title="出库下架";
///edLoc.requestFocus();
if(!TextUtils.isEmpty(flowNo)){
edFlowNo.setText(flowNo);
}
}
public StockOutPickOneByOne() {
// Required empty public constructor
}
@Override
protected void processArguments() {
}
private StockOutPort mStockOutPort(){
btnLastPage.setEnabled(currentPage>0);
btnNextPage.setEnabled(currentPage+1<mListOutTasks.size());
if(mListOutTasks.size()==0){
btnNextPage.setEnabled((!TextUtils.isEmpty((lastJobNo))));
}
if( mListOutTasks .size()==0){
return new StockOutPort();
}
currentPage=currentPage<0?0:currentPage;
currentPage=currentPage>= mListOutTasks .size()?mListOutTasks.size()-1:currentPage;
return mListOutTasks.get(currentPage);
}
public static StockOutPickOneByOne newInstance() {
StockOutPickOneByOne fragment = new StockOutPickOneByOne();
return fragment;
}
private void fillTaskDetail() {
llbulk.setVisibility(View.VISIBLE);
llbatch.setVisibility(View.VISIBLE);
if(mListOutTasks.size()==0){
// return;
}
tvUnit2.setText(mStockOutPort().getUnit());
tvLocationId.setText(mStockOutPort().getLocationId());
orderno.setText(mStockOutPort().getPickOrderNo());
custom.setText(mStockOutPort().getCustomerName());
goodsName.setText( mStockOutPort().getGoodsId().length()>0? mStockOutPort().getGoodsName() + " | " + mStockOutPort().getGoodsId():"");
// tvBarcode.setText(mStockOutPort().getBarCode());
// manufacture.setText(mStockOutPort().getManufacturer());
spec.setText(mStockOutPort().getSpec());
productDate.setText(mStockOutPort().getProductDate());
validDate.setText(mStockOutPort().getValidDate());
batch.setText(mStockOutPort().getBatch());
tvCount.setText(mStockOutPort().getPcs()==0?mStockOutPort().getCount()+"" : mStockOutPort().getPcs()+"");
tvCount.setText( mStockOutPort().getCount() +"");
unit.setText(mStockOutPort().getUnit());
//packcnt.setText( mStockOutPort().getPcs() +"");
packcnt.setText( mStockOutPort().getMinOperateCount() +"");
// tvTranArea.setText(mStockOutPort().getTranAreaName());
tvTranArea.setText(mStockOutPort().getTranAreaName() + " " + mStockOutPort().getTranLocationId());
// tvMinOperationUnit.setText(mStockOutPort().getPickUnit() );
tvMinOperationUnit.setText(mStockOutPort().getUnit() );
tvMinOperationUnit2.setText(mStockOutPort().getPickUnit() );
edTaskId.setText(mStockOutPort().getId());
//edLoc.setEnabled(mStockOutPort().getPickState()== Enums.enumPickState.未拣);
tvVirtialCnt.setText(mStockOutPort().getVirtialCnt()+"");
edLoc.setHint(mStockOutPort().getLocationId());;
edPickcnt.setText( "0");
edBulk.setText("0");
// edPickcnt.setEnabled(false);
btnConfirm.setEnabled(false);
tvPages.setText( "/" );
if( !TextUtils.isEmpty(mStockOutPort().getId()) )
{
boolean isweight =isWeighUnit(mStockOutPort().getPickUnit());
int pcs = mStockOutPort().getPcs()*100;
float minO =mStockOutPort().getMinOperateCount()*100;
float r = (pcs*minO)/10000;
float cnt = mStockOutPort().getCount();
float bulk= cnt -r;
if (isweight) {
llbatch.setVisibility(View.GONE);
llbulk.setVisibility(View.VISIBLE);
edBulk.setText(mStockOutPort().getCount()+"") ;
}else{
edPickcnt.setText(mStockOutPort().getPcs()+""); //
edBulk.setText( bulk+"") ;
// edPickcnt.setText(r+"");
if(r>0){
llbatch.setVisibility(View.VISIBLE);
}else{
llbatch.setVisibility(View.GONE);
}
if(bulk>0){
llbulk.setVisibility(View.VISIBLE);
}else{
llbulk.setVisibility(View.GONE);
}
}
/*
llbatch.setVisibility(View.GONE);
boolean isweight =isWeighUnit(mStockOutPort().getUnit());
if(!mStockOutPort().getUnit().equalsIgnoreCase(mStockOutPort().getPickUnit())){
llbulk.setVisibility(isweight ?View.GONE:View.VISIBLE);//库存单位称重,不显示零数部分
}else if(isweight){ //分拣单位和库存单位都是 斤
llbatch.setVisibility(View.GONE);
}else{ //分拣单位和库存单位一致,且不为斤
llbulk.setVisibility(View.GONE);
}
*/
if(!lastCustomerId.equalsIgnoreCase( mStockOutPort().getCustomerId())){
edFlowNo.setText("");
lastCustomerId= mStockOutPort().getCustomerId();
}
edLoc.setText("");
// edLoc.setEnabled(true);
if( !TextUtils.isEmpty( mStockOutPort().getCustomerId() ) &&connectBlueWeight(edBulk,mStockOutPort().getPickUnit(),edFlowNo) ){
// edPickcnt.setText("0");
edBulk.setText(mStockOutPort().getCount()+"");
edLoc.setText(mStockOutPort().getLocationId()); //货位分蔬菜。。
// edLoc.setEnabled(false);
// edPickcnt.setEnabled(false);
}else if(TextUtils.isEmpty( mStockOutPort().getCustomerId() ) ) {
// connectBlueWeight(null,mStockOutPort().getPickUnit(),edFlowNo); //判断连接还是断开蓝牙
edPickcnt.setEnabled(true); //后台验证数量,无特殊权限不可提交修改数量
edFlowNo.setEnabled(true);
if(edFlowNo.getText().toString().startsWith("W")){
edFlowNo.setText("");
}
// edPickcnt.setText(mStockOutPort().getCount()+"");
/*
if(mStockOutPort().getPcs()>0) {
llbatch.setVisibility(View.VISIBLE);
if (bulk == 0) {
if (mStockOutPort().getPickUnit().equalsIgnoreCase(mStockOutPort().getUnit())) {
llbulk.setVisibility(View.GONE);
}
}
}
*/
if(bulk>0){
llbulk.setVisibility(View.VISIBLE);
if(mStockOutPort().getPcs()==0){
if(mStockOutPort().getPickUnit().equalsIgnoreCase(mStockOutPort().getUnit())){
llbatch.setVisibility(View.GONE);
}
}
}
}
btnConfirm.setEnabled(true);
lastJobNo = mStockOutPort().getJobNo();
tvPages.setText(currentPage+1 +"/" +mListOutTasks.size());
if(BuildConfig.DEBUG) {
edLoc.setText(mStockOutPort().getLocationId());
/*
if(mStockOutPort().getUnit().equalsIgnoreCase(mStockOutPort().getPickUnit())){
if (edBulk.getText().toString().equals("0")) {
edBulk.setText(mStockOutPort().getCount() + "");
}
}else{
if (edPickcnt.getText().toString().equals("0")) {
edPickcnt.setText(mStockOutPort().getPcs() + "");
}
if (edBulk.getText().toString().equals("0")) {
edBulk.setText(mStockOutPort().getCount() + "");
}
}
*/
if (edFlowNo.getText().length() == 0) {
edFlowNo.setText(mStockOutPort().getPickOrderNo());
}
}
}
edLoc.requestFocus();
}
private void doGetTaskDetail(String taskId) {
setInfo("");
BookSubscribe.getPickDetail(taskId ,true,
new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
try {
StockOutPort mStockOutPort = null;
Gson gson = new Gson();
List< StockOutPort> lst = new ArrayList<StockOutPort>();
Type type = new TypeToken<ArrayList<StockOutPort>>(){}.getType();
lst =(List<StockOutPort>) gson.fromJson(result,type);
if(lst.size()==0){
failureMsg= "任务不存在";
handler.sendEmptyMessage(2);
}else
for (StockOutPort obj: lst
) {
mStockOutPort =obj;
mListOutTasks.add(currentPage,mStockOutPort);
handler.sendEmptyMessage(1);
break;
}
Log.d(TAG,"get StockOutPort succeed, port goods name is " +mStockOutPort().getGoodsName() );
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "onSuccess: 解析失败", e);
}
Log.d(TAG, "progress: progress to hide");
}
@Override
public void onSuccess(JSONObject jsonObject) {
}
@Override
public void onFault(String errorMsg) {
//tvIp.setText("failure");
//失败
Log.e(TAG, "error on get firstpage: " + errorMsg);
failureMsg =errorMsg;
handler.sendEmptyMessage(2);
}
}, this.getActivity(),true));
}
String locationId;
@OnEditorAction(R.id.edLoc)
boolean locationIn(KeyEvent key){
if (!WmsUtil.isKeyEnterDown(key)) {
return true;
}
locationId = edLoc.getText().toString().trim().replaceAll("\\r|\\n","");
if(locationId.length()<10 ){
return false;
}
setInfo("");
if(!TextUtils.isEmpty(locationId)){
edLoc.selectAll();
// editLoc.requestFocus();
}
if(locationId.contains(":999")) { //to print
String url = "http://%s/DNlight/printOutTaskCode?userId=%s&orderType=%s";
url = String.format(url, locationId, MyApp.user.getID(), 0);
doPrintTasks(url);
edLoc.setText("");
return false;
} else if(mListOutTasks.size()==0){ // to get new tasks
assingeOutTasks();
return false;
}else {
beforeFinishTask();
}
return false;
}
private void assingeOutTasks() {
Map<String,String> map = new HashMap<>();
//string lastJobNo, string locationId,int warehouse
if(TextUtils.isEmpty(locationId)){
locationId=mStockOutPort().getLocationId();
}
if(TextUtils.isEmpty(locationId)){
return;
}
map.put("lastJobNo",lastJobNo);
map.put("locationId",locationId);
BookSubscribe.taskAssignByLocation(map,
new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
}
@Override
public void onSuccess(JSONObject jsonObject) {
try {
Type type = new TypeToken<ArrayList<StockOutPort>>(){}.getType();
mListOutTasks =(List<StockOutPort>) gson.fromJson(jsonObject.getString("Data"),type);
// if(lst.size()>0){
// taskItem = lst.get(0);
// }
currentPage=0;
Log.d(TAG,"return result out task size: " + mListOutTasks.size());
handler.sendEmptyMessage(1);
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "onSuccess: 解析失败", e);
}
Log.d(TAG, "progress: progress to hide");
}
@Override
public void onFault(String errorMsg) {
//tvIp.setText("failure");
//失败
Log.e(TAG, "error on get : " + errorMsg);
failureMsg =errorMsg;
handler.sendEmptyMessage(2);
}
}, this.getActivity(),true));
}
private void getAssignedOutTasks() {
BookSubscribe.getTaskAssigned(MyApp.user.getID(),locationId,0,0,
false,0,0,-1,
new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
try {
Log.d(TAG,"get result is " + result);
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<StockOutPort>>(){}.getType();
mListOutTasks =(List<StockOutPort>) gson.fromJson(result,type);
currentPage=0;
Log.d(TAG, "mListOutTasks size " + mListOutTasks.size());
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "onSuccess: 解析失败", e);
}
Log.d(TAG, "progress: progress to hide");
handler.sendEmptyMessage(1);
}
@Override
public void onSuccess(JSONObject jsonObject) {
}
@Override
public void onFault(String errorMsg) {
//tvIp.setText("failure");
//失败
Log.e(TAG, "error on get firstpage: " + errorMsg);
failureMsg =errorMsg;
handler.sendEmptyMessage(2);
}
}, this.getActivity(),true));
}
private void beforeFinishTask() {
if(TextUtils.isEmpty(mStockOutPort().getId())){
return;
}
locationId = edLoc.getText().toString().trim().replaceAll("\\r|\\n","");
if (!locationId.equalsIgnoreCase(mStockOutPort().getLocationId())) {
if(locationId.length()>3 && !locationId.substring(0,2).equalsIgnoreCase(mStockOutPort().getLocationId().substring(0,2))){ //货区不同
assingeOutTasks();
return;
}
edLoc.selectAll();
setInfo("下架请扫描货位条码 " + mStockOutPort().getLocationId());
edLoc.requestFocus();
return ;
}
// btnConfirm.setEnabled(false);
isPickSuccess =false;
failureMsg="";
//string flowNo, string waveNo, string pickOrderNo, int id, decimal pickCount
flowNo = edFlowNo.getText().toString().trim().replaceAll("\\r|\\n","");
float cnt =0f;
try{
cnt= Float.valueOf(edPickcnt.getText().toString())
*mStockOutPort().getMinOperateCount()*100/100
+ Float.valueOf(edBulk.getText().toString()) ;
if(cnt<0){
throw new Exception();
}
}catch (Exception er){
showMessageOnUiThread(activity,"请输入正确的数量");
}
if(cnt>0 && TextUtils.isEmpty(flowNo)){
setInfo("请输入容器号");
edFlowNo.requestFocus();
return;
}
Map<String,String> map = new HashMap<>();
map.put("flowNo",flowNo);
map.put("waveNo","");
map.put("pickOrderNo",mStockOutPort().getPickOrderNo());
map.put("id",mStockOutPort().getId());
// map.put("pickCount",mStockOutPort().getCount());
map.put("pickCount",cnt+"");
float reqCnt =mStockOutPort().getCount();
float diff =Math.abs(cnt - reqCnt);
float pct =Math.abs(cnt - mStockOutPort().getCount()) *100 / mStockOutPort().getCount();
pct =diff*100 / reqCnt;
// if(cnt != mStockOutPort().getCount()){
if(pct > Constants.allowPercent){
new AlertDialog.Builder(getActivity())
.setTitle("提示")
.setMessage("拣货数量异常,是否确定下架?")
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setPositiveButton("下架", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
doFinishTask(map);
}
}).setCancelable(true).show();
}else{
doFinishTask(map);
}
}
void doFinishTask( Map<String,String> map ){
btnConfirm.setEnabled(false);
locationId = mStockOutPort().getLocationId();
BookSubscribe.finishPickItem(map,
new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
}
@Override
public void onSuccess(JSONObject jsonObject) {
try {
failureMsg =jsonObject.getString("Data");
isPickSuccess = failureMsg!=null && failureMsg.equals(("成功"));
showMessageOnUiThread(getActivity(),failureMsg);
if(isPickSuccess ) {
if ( !TextUtils.isEmpty( mStockOutPort().getCustomerId() ) &&connectBlueWeight(edBulk, mStockOutPort().getPickUnit(),null)) {
Log.d(TAG, "to print ticket......................: ");
printToBlue(Integer.valueOf( mStockOutPort().getRecType())==12? mStockOutPort().getTranAreaName() : mStockOutPort().getCustomerName(), mStockOutPort().getGoodsName(),
map.get("pickCount") + mStockOutPort().getUnit(), flowNo,MyApp.user.getEm_name() + " " + getFormatedDate(),
flowNo);
}
List< StockOutPort> tmp = new ArrayList<>();
for (StockOutPort s: mListOutTasks ) {
if(s.getId() !=mStockOutPort().getId()){
tmp.add(s);
}
}
mListOutTasks = tmp;
// doGetTaskDetail(mStockOutPort().getId());
if(mListOutTasks.size()==0){
assingeOutTasks();
}else {
currentPage=0;
handler.sendEmptyMessage(1);
}
}else{
handler.sendEmptyMessage(2);
}
Log.d(TAG,"return result: " + failureMsg );
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "onSuccess: 解析失败", e);
}
// Log.d(TAG, "progress: progress to hide");
}
@Override
public void onFault(String errorMsg) {
//tvIp.setText("failure");
//失败
Log.e(TAG, "error on get firstpage: " + errorMsg);
failureMsg =errorMsg;
handler.sendEmptyMessage(2);
}
}, this.getActivity(),true));
btnConfirm.setEnabled(true);
}
void doPrintTasks(String url){
Request request = new Request.Builder()
.url(url).build();
showProgressDialog();
HttpMethods.getOkClient().newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, " print out tasks onFailure(int, Header[],byte[], Throwable ) was received");
failureMsg="打印信息发送失败";
handler.sendEmptyMessage(2);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.code()!=200) {
Log.e(TAG, "print tasks onResponse:return code" +response.code() );
}
ResponseBody body = response.body();
final String result =body.string();
Log.e(TAG, "print tasks onResponse result: " + result);
try {
failureMsg="打印信息发送成功";
handler.sendEmptyMessage(12);
}catch (Exception e){
Log.e(TAG, "onResponse: ",e );
}finally {
}
}
});
}
private void goLastPage() {
if(currentPage>0) {
currentPage--;
}
fillData();
}
private void goNexPage() {
Log.d(TAG,"currentPage " + currentPage );
Log.d(TAG,"mListOutTasks.size " + mListOutTasks.size() );
currentPage = currentPage >= mListOutTasks.size() ?mListOutTasks.size()-1:currentPage;
currentPage =currentPage<0?0:currentPage;
if(currentPage<mListOutTasks.size()-1) {
currentPage++;
fillData();
}
}
@OnClick({R.id.btnConfirm,R.id.btnNextPage,R.id.btnLastPage, R.id.btnGoSeeds})
void btnOnClick(View view) {
setInfo("");
switch (view.getId()) {
case R.id.btnConfirm:
beforeFinishTask();
break;
case R.id.btnNextPage:
goNexPage();
break;
case R.id.btnLastPage:
goLastPage();
break;
case R.id.btnGoSeeds:
goSeeds();
break;
// case R.id.btnBlueInput:
// ((Main2Activity)activity).connectScale(edSeedsBulkCnt);;
// break;
}
}
boolean canBack;
private void goSeeds() {
if(canBack) {
popBack();
}else{
( (Main2Activity)activity).showSeedsOut(edFlowNo.getText().toString(),false);
}
canBack=!canBack;
}
@Override
public void onResume(){
super.onResume();
edFlowNo.setText(flowNo);
connectBlues();
getAssignedOutTasks();
}
public void setFlowNo(String flowNo) {
this.flowNo=flowNo;
}
}