/// 
///INTERFACE IMPLIMENT FOR TABLE t_wmsOutPickRequest
///By wm with codesmith. 
///on 05/22/2017
/// 
using System;
using System.Data.SqlClient;
using DeiNiu.Utils; 
namespace DeiNiu.wms.Data.Model
{
    [Serializable]  class WmsOutPickRequest_Imp : WmsOutPickRequest_base_Imp
    { 
        protected override void CmdPrepare(SqlCommand sqlCmd)
        {
            WaveRule wr;
            base.CmdPrepare(sqlCmd);
            WmsOutPickRequest mObj = ( WmsOutPickRequest)modelObj;
            switch (_cust_op_flag)
            {
             case 99:  //query with dic
                    /*WaveRule wr = (WaveRule)mObj.CmdParameters[2];  
                    string whsql = mObj.CmdParameters[0].ToString();
                    if (wr.lineId > 0)
                    {
                         whsql += " and exists(select 1 from t_tmsLineDetail where custId =r.customerId and lineid =@lineId ) ";
                         sqlCmd.Parameters.AddWithValue("@lineId", wr.lineId);
                    }
                    if(!string.IsNullOrEmpty(wr.sales))
                    {
                        whsql += " and exists(select 1 from t_wmsOutRequest where pickOrderNo = r.pickorderNo and salesperson =@sales  ) ";
                        sqlCmd.Parameters.AddWithValue("@sales", wr.lineId);
                    }
                    */
                    string whsql = mObj.CmdParameters[0].ToString();
                    _strSql = "SELECT *,ROW_NUMBER() OVER (ORDER BY PRIORITY desc, ID) as sortNo  FROM v_stockOutRequestWithDetails r  WHERE DR = 1 " + whsql;
                    _strSql = "SELECT * FROM (" + _strSql + " )AS SORTEDTB WHERE sortNo BETWEEN @START AND @END" + " ORDER BY PRIORITY desc,ID desc";
                    _strSql += ";SELECT COUNT(*) FROM v_stockOutRequestWithDetails r WHERE DR = 1 " + whsql;
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@START", this._rownumStart);
                    sqlCmd.Parameters.AddWithValue("@END", this._rownumEnd);
                    sqlCmd.CommandText = _strSql;
                    break;
                case 100:  //by orderNo
                    _strSql = "SELECT * FROM t_wmsOutPickRequest WHERE PICKORDERNO = @PICKORDERNO";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@PICKORDERNO", mObj.CmdParameters[0]);
                    break;
                case 101:  //by orderNo
                    _strSql = "SELECT * FROM t_wmsOutPickRequest WHERE pickGroup = @pickGroup and pickStartOn =@pickStartOn and dueDate =@dueDate";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickGroup", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@pickStartOn", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@dueDate", mObj.CmdParameters[2]);
                    break;
                case 200:  //get order out detail by pick ORDERNO
                    _strSql = "SELECT * FROM v_stockOutPickDetail WHERE PICKORDERNO = @ORDERNO";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@ORDERNO", mObj.CmdParameters[0]);
                    break;
                case 201:  //get order out detail by pick ORDERNO
                    _strSql = "SELECT * FROM t_wmsoutpickdetail WHERE PICKORDERNO = @ORDERNO";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@ORDERNO", mObj.CmdParameters[0]);
                    break;
                case 210:  //get order out detail by pick ORDERNO
                    _strSql = "SELECT  TOP (@cnt) * FROM v_stockOutPickDetail WHERE PICKORDERNO = @ORDERNO";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@ORDERNO", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.PAGER_SIZE  );
                    break;
                case 300:  //get pickrequest by  status
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT   top (@cnt) *  FROM [t_wmsOutPickRequest]  "
                                 // + " where   orderType =@orderType and state =@state order by priority desc,custAddress, createtime "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                                 // + " where   orderType =@orderType and state =@state order by priority desc , createtime "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                                 + " where  1=1  " +
                                 " and createtime > getdate()-@daysOut "  +
                                 " and state =@state order by pickgroup, priority desc, createtime desc"; //后生成的先入,需二次处理的问题订单排后面
                    
                    //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                              
                    //sqlCmd.Parameters.AddWithValue("@outStoreType", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[0]);
                   sqlCmd.Parameters.AddWithValue("@cnt",  WmsConstants.OUT_PROCESS_ORDERS_CNT);
                    sqlCmd.Parameters.AddWithValue("@daysOut", WmsConstants.OUT_PROCESS_ORDERS_CNT );
                    sqlCmd.CommandText = _strSql;  
                    break;
                case 30001:  //get pickrequest by  status
                           _strSql = "SELECT   top (@cnt) *  FROM [t_wmsOutPickRequest]  "
                                + " where  1=1  " +
                                 " and createtime > getdate()-@daysOut " +
                                 " and state =@state order by pickgroup, priority  desc, checkedtime"; //未处理过的,或新处理过的优先,确保所有订单都有机会处理库存
               
                    //sqlCmd.Parameters.AddWithValue("@outStoreType", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.OUT_PROCESS_ORDERS_CNT );
                    sqlCmd.Parameters.AddWithValue("@daysOut", WmsConstants.OUT_PROCESS_ORDERS_CNT);
                    sqlCmd.CommandText = _strSql;
                    break;
                case 3001:  //get pickrequest by outStoreType,satus
                               _strSql = "SELECT    *  FROM [t_wmsOutPickRequest]  "
                                + " where  outStoreType = @outStoreType " +
                                 "  and state =@state " +
                             
                                 "order by pickgroup, priority desc, createtime "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                    sqlCmd.Parameters.AddWithValue("@outStoreType", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[1]);
                    // sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.PAGER_SIZE/2);
                    sqlCmd.CommandText = _strSql;
                    break;
                case 3002:  //get pickrequest by outStoreType, days
                    _strSql = "SELECT    *  FROM [t_wmsOutPickRequest]  "
                     + " where  outStoreType = @outStoreType " +
                      "  and createtime > getdate() -@days " +
                      " order by createtime ";  
                    sqlCmd.Parameters.AddWithValue("@outStoreType", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@days", mObj.CmdParameters[1]);
            
                    sqlCmd.CommandText = _strSql;
                    break;
                case 301:  //get pickrequest by ordertype,satus, with bulks only
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT  TOP (@cnt) *  FROM [t_wmsOutPickRequest] r  "
                        // + " where   orderType =@orderType and state =@state order by priority desc,custAddress, createtime "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                                 + " where bulkCnt>0 " 
                                 + " and orderType =@orderType  "  
                                 +" and state> " + (int)enumOutStockRequestStatus.定位完成
                                 + " and state <" + (int)enumOutStockRequestStatus.分拣完成
                                + " and bulkPickState>-1 and bulkPickState< " +(int)enumOutStockPickStatus.正在分拣; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                    wr = (WaveRule)mObj.CmdParameters[0];
                    if (wr.lineId > 0)
                    {
                         _strSql += " and exists(select 1 from t_tmsLineDetail where custId =r.customerId and lineid =@lineId ) ";
                         sqlCmd.Parameters.AddWithValue("@lineId", wr.ID);
                    }
                    if(!string.IsNullOrEmpty(wr.sales))
                    {
                        _strSql += " and exists(select 1 from t_wmsOutRequest where pickOrderNo = r.pickorderNo and salesperson =@sales  ) ";
                        sqlCmd.Parameters.AddWithValue("@sales", wr.sales);
                    }
                    _strSql +=  " order by priority desc, createtime ";
                                 
                    sqlCmd.Parameters.AddWithValue("@orderType", mObj.CmdParameters[1]);
                  //  sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[2]);
                    //sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.PAGER_SIZE/2);
                    sqlCmd.Parameters.AddWithValue("@cnt", 200);
                    sqlCmd.CommandText = _strSql;
                    break;
                case 3011: 
                     _strSql = "select  1 from v_stockOutPort port where recType=1 " 
                             + " and dpsorder is null and elabId >0 and voltype=0  "
                             + " and bulkPickState =" + (int)enumOutStockPickStatus.已定位;
                      wr = (WaveRule)mObj.CmdParameters[0];
                     if (wr.lineId > 0)
                    {
                        _strSql += " and ( orderType!= @orderType or  exists(select 1 from v_tmsLineDetail where custid = port.customerId and lineId =@lineId))";
                      sqlCmd.Parameters.AddWithValue("@lineId",wr.lineId );
                    }
                    if (!string.IsNullOrEmpty(wr.owner))
                    {
                        _strSql += " and ( orderType!= @orderType or  ownercode =@ownerCode ) ";
                        sqlCmd.Parameters.AddWithValue("@ownerCode", wr.owner);
                    }
                    sqlCmd.Parameters.AddWithValue("@orderType", (int)enumOrderType.销售出库);
                    _strSql += " and pickOrderNo = r.pickOrderNo";
                    
                    _strSql = "SELECT  TOP (@cnt) *  FROM [t_wmsOutPickRequest] r  where exists("
                        + _strSql + ") order by priority desc";
                    //_strSql += " order by pickOrderNo;";
                    sqlCmd.CommandText = _strSql;
                    //sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.PAGER_SIZE/2);
                    sqlCmd.Parameters.AddWithValue("@cnt", 200);
                    break;
                case 3012:  //get pickrequest by ordertype,satus, with bulks only
                    
                    _strSql = "SELECT  TOP (@cnt) *  FROM [t_wmsOutPickRequest] r  "
                                 // + " where   orderType =@orderType and state =@state order by priority desc,custAddress, createtime "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                                 + " where bulkCnt>0 "
                                 + " and orderType =@orderType  "
                                 + " and state> " + (int)enumOutStockRequestStatus.定位完成
                                 + " and state <" + (int)enumOutStockRequestStatus.分拣完成
                                + " and bulkPickState>-1 and bulkPickState< " + (int)enumOutStockPickStatus.正在分拣; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                    wr = (WaveRule)mObj.CmdParameters[0];
                    if (wr.lineId > 0)
                    {
                        _strSql += " and exists(select 1 from t_tmsLineDetail where custId =r.customerId and lineid =@lineId ) ";
                        sqlCmd.Parameters.AddWithValue("@lineId", wr.ID);
                    }
                    if (!string.IsNullOrEmpty(wr.sales))
                    {
                        _strSql += " and exists(select 1 from t_wmsOutRequest where pickOrderNo = r.pickorderNo and salesperson =@sales  ) ";
                        sqlCmd.Parameters.AddWithValue("@sales", wr.sales);
                    }
                   
                    string seedsql = _strSql + " and seedsLabelId=" + WmsConstants.SEEDS_LABLEID_MARK_VALUE;                      
                    seedsql += " order by priority desc, createtime ";
                     _strSql += " and seedsLabelId=0" ;                  
                     _strSql += " order by priority desc, createtime ";
                    _strSql += ";" + seedsql;
                   sqlCmd.Parameters.AddWithValue("@orderType", mObj.CmdParameters[1]);
                    //  sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[2]);
                    sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.PAGER_SIZE/2);
                   // sqlCmd.Parameters.AddWithValue("@cnt", 200);
                    sqlCmd.CommandText = _strSql;
                    break;
                case 302:  //get pickrequest for stock reduct
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT *  FROM [t_wmsOutPickRequest]  "
                        // + " where   orderType =@orderType and state =@state order by priority desc,custAddress, createtime "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                                 + " where   orderType =@orderType and state =@state order by priority desc , createtime "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                    sqlCmd.Parameters.AddWithValue("@orderType", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[1]);
                    sqlCmd.CommandText = _strSql;
                    break;
            
               
                case 303:  //partion pick,get all the free part pick detail records by ordertype,status
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT  TOP (@cnt) *  FROM [v_stockOutPartionBulkPickDetailRecords] r  "
                            + " where  orderType =@orderType  "          //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                            + " and state >=@state1 and state <=@state2" 
                             + " exists(SELECT 1  FROM [t_node] n where exists (select 1 from t_node where flag =2005 and n.parentid =id) "
                             + " and flag >0 and not exists( select 1 from t_wmsOutPickLable_tmp where partion =n.id )"
                             +" and n.id =r.part)";
                            wr = (WaveRule)mObj.CmdParameters[2];
                             if (wr.lineId > 0)
                    
                             {
                    
                                 _strSql += " and exists(select 1 from t_tmsLineDetail where custId =r.customerId and lineid =@lineId ) ";
                                 sqlCmd.Parameters.AddWithValue("@lineId", wr.lineId);
                   
                             }
                             if (!string.IsNullOrEmpty(wr.sales))
                   
                             {
                     
                                 _strSql += " and exists(select 1 from t_wmsOutRequest where pickOrderNo = r.pickorderNo and salesperson =@sales  ) ";
                    
                                 sqlCmd.Parameters.AddWithValue("@sales", wr.sales);
                   
                             }
                   // _strSql +=  " and not exists(select 1 from t_wmsOutPickDetail_tmp where pickOrderNo = r.pickOrderNo and and partion=@part)";
                 
                   _strSql += " order by priority desc,pickOrderNo, createtime ";
                    sqlCmd.Parameters.AddWithValue("@orderType", mObj.CmdParameters[0]);     
                     sqlCmd.Parameters.AddWithValue("@part", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@state1", (int)enumOutStockRequestStatus.待定位);
                    sqlCmd.Parameters.AddWithValue("@state2", (int)enumOutStockRequestStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.PART_REC_SIZE);
           
                    sqlCmd.CommandText = _strSql;
                    break;
                case 304:  //get parts not in wave
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT *  FROM [t_node] n where exists (select 1 from t_node where flag =2005 and n.parentid =id)  "
                              + " and flag >0 and not exists( select 1 from t_wmsOutPickLable_tmp where partion =n.flag )  "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                     
                    sqlCmd.CommandText = _strSql;
                    break;
                case 305:  //partion pick,get  the specified free part pick detail records by ordertype,status
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT  TOP (@cnt) *  FROM [v_stockOutPartionBulkPickDetailRecords] r  "
                            + " where  orderType =@orderType  "          //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                            + " and  state  >@state1 and state  <@state2"
                             + " and part =@part "
                              ;
                        wr = (WaveRule)mObj.CmdParameters[2];
                        if (wr.lineId > 0)
                        {
                            _strSql += " and exists(select 1 from t_tmsLineDetail where custId =r.customerId and lineid =@lineId ) ";
                            sqlCmd.Parameters.AddWithValue("@lineId", wr.lineId);
                        }
                        if (!string.IsNullOrEmpty(wr.sales))
                        {
                            _strSql += " and exists(select 1 from t_wmsOutRequest where pickOrderNo = r.pickorderNo and salesperson =@sales  ) ";
                            sqlCmd.Parameters.AddWithValue("@sales", wr.sales);
                        }
                    // _strSql +=  " and not exists(select 1 from t_wmsOutPickDetail_tmp where pickOrderNo = r.pickOrderNo and and partion=@part)";
                    _strSql += " order by priority desc ,pickOrderNo, createtime ";
                    sqlCmd.Parameters.AddWithValue("@orderType", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@part", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@state1", (int)enumOutStockRequestStatus.待定位);
                    sqlCmd.Parameters.AddWithValue("@state2", (int)enumOutStockRequestStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@cnt", WmsConstants.PART_REC_SIZE);
                    sqlCmd.CommandText = _strSql;
                    break;
             
                case 306:  //get parts flag (完成器ID )list,  
                    
                    _strSql = "SELECT *  FROM [t_node] n where exists (select 1 from t_node where flag =2005 and n.parentid =id)  "
                              + " and flag >0    ";  
                    sqlCmd.CommandText = _strSql;
                    break;
                case 307:  //get all parts
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT *  FROM [t_node] n where exists (select 1 from t_node where flag =2005 and n.parentid =id)  "
                              + " and flag >0 "; 
                    sqlCmd.CommandText = _strSql;
                    break;
                case 308:  //pick detail records for generate light
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT *  FROM [v_stockOutPartionBulkPickDetailRecords] r "
                              + " where  orderNo =@pickOrderno and bulkPickState=0   "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                    if (Convert.ToInt32(mObj.CmdParameters[1].ToString()) > 0)
                    {
                        _strSql += " and partion = @partion ";
                        sqlCmd.Parameters.AddWithValue("@partion", mObj.CmdParameters[1]);
                    }
                    sqlCmd.Parameters.AddWithValue("@pickOrderno", mObj.CmdParameters[0]);
                    _strSql += " and not exists(select 1 from t_wmsOutPickLable_tmp where recordId =r.id ) ";
                    sqlCmd.CommandText = _strSql;
                    break;
                case 309:  //get light data for pickOrder
                    // _strSql = "SELECT * FROM [t_wmsoutdetail] a where exists(select 1 from t_wmsoutrequest  where orderNo = a.orderNo and orderType =@orderType and status =@status)";
                    _strSql = "SELECT *  FROM [t_wmsOutPickLable_tmp] r "
                              + " where  pickOrderNo =@pickOrderno and state=0   "; //按创建时间排序,fifo,保证缺零货的订单补货后会优先进下个波次。  //bulkcnt desc" 按散货数量排序 ,先出散货多的,这样为了均衡复合台工作量,由于复合台和拣选单子是随机组合,所有没有必要了 ;
                    if (Convert.ToInt32(mObj.CmdParameters[1].ToString()) > 0)
                    {
                        _strSql += " and partion = @partion ";
                        sqlCmd.Parameters.AddWithValue("@partion", mObj.CmdParameters[1]);
                    }
                    sqlCmd.Parameters.AddWithValue("@pickOrderno", mObj.CmdParameters[0]);
                    sqlCmd.CommandText = _strSql;
                    break;
                case 399:
                    _strSql = ";    update t_wmsoutpickport set dpsorder=null where  exists( select 1 from t_wmsOutPickRequest where desk=0   and waveOrder is not null and  pickorderno = t_wmsoutpickport.pickOrderNo) ";
                    _strSql += " ; UPDATE t_wmsOutPickRequest  SET bulkPickState =@bulkstate,state=@state, waveOrder=null   from t_wmsOutPickRequest    WHERE     desk=0  and waveOrder is not null  ";
                  
                   sqlCmd.Parameters.AddWithValue("@bulkstate", (int)enumOutStockPickStatus.已定位);
                   sqlCmd.Parameters.AddWithValue("@state", (int)enumOutStockRequestStatus.正在分拣);
                   sqlCmd.CommandText = _strSql;   
                   break;
                case 400:  //update order status and bulkPickState by waveOrder
                    
                    //update bulkPickState
                    string whereWave = " exists (select 1 from t_wmsOutPickLable_tmp where dpsOrder= b.WAVEORDER)";
                    _strSql = "UPDATE t_wmsOutPickRequest  SET bulkPickState =@bulkSTATE, waveEnd = getDate() ,operater =@operater,lastmodified = getdate()   from t_wmsOutPickRequest b   WHERE " + whereWave;
                    _strSql += "; UPDATE t_wmsOutPickDetail SET bulkPickState =@bulkSTATE ,operater =@operater,lastmodified = getdate() from t_wmsOutPickDetail a " 
                            + " WHERE exists(select 1 from t_wmsOutPickRequest b where a.pickOrderNo = b.pickOrderNo and "+ whereWave+ ");";
                 
                    /*
                    _strSql = "UPDATE t_wmsOutPickRequest SET bulkPickState =@bulkSTATE, waveEnd = getDate() ,operater =@operater,lastmodified = getdate()  WHERE WAVEORDER =@WAVEORDER;";
                    _strSql += " UPDATE t_wmsOutPickDetail SET bulkPickState =@bulkSTATE ,operater =@operater,lastmodified = getdate() from t_wmsOutPickDetail a " 
                            + " WHERE exists(select 1 from t_wmsOutPickRequest b where a.pickOrderNo = b.pickOrderNo and b.WAVEORDER =@WAVEORDER);";
                     * */
                     //update state when bulkCount = count     全散货  
                    _strSql += "; UPDATE t_wmsOutPickDetail SET state = @pickSTATE  ,operater =@operater,lastmodified = getdate() from t_wmsOutPickDetail a "
                           + " WHERE exists(select 1 from t_wmsOutPickRequest b where a.pickOrderNo = b.pickOrderNo and " + whereWave + ") and bulkcount =count;"; //全零货
                    _strSql += "; UPDATE t_wmsOutPickDetail_tmp SET state = @pickSTATE   ,operater =@operater,lastmodified = getdate() from t_wmsOutPickDetail_tmp a "
                        + " WHERE exists(select 1 from t_wmsOutPickRequest b where a.pickOrderNo = b.pickOrderNo and " + whereWave + ") ;";
                      
                    _strSql += "; UPDATE t_wmsOutPickDetail_tmp SET  bulkPickState =@bulkSTATE ,operater =@operater,lastmodified = getdate() from t_wmsOutPickDetail_tmp a "
                           + " WHERE exists(select 1 from t_wmsOutPickRequest b where a.pickOrderNo = b.pickOrderNo and " + whereWave + ") and bulkcount =count;";
                    _strSql += "; UPDATE t_wmsOutPickRequest  SET state =@requestSTATE  ,operater =@operater,lastmodified = getdate()  from t_wmsOutPickRequest b  WHERE  batchPickState in(-1,2) and "   + whereWave;
                          
                    _strSql += "; UPDATE t_wmsOutRequest   SET STATE = b.state ,operater =@operater,lastmodified = getdate() from t_wmsOutRequest a  ,t_wmsOutPickRequest b where  a.pickOrderNo = b.pickorderNo and " +whereWave;
                    _strSql += "; UPDATE [t_wmsOutPickPort]   set state =@portPickState,pickCount=[count] where dpsOrder=@WAVEORDER"; 
             
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@WAVEORDER", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@bulkSTATE", (int)DeiNiu.Utils.enumOutStockPickStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@requestSTATE", (int)DeiNiu.Utils.enumOutStockRequestStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@pickSTATE", (int)DeiNiu.Utils.enumOutStockDetailStatus.完成分拣);
                    sqlCmd.Parameters.AddWithValue("@operater", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@portPickState", (int)enumPickState.已拣); 
                    break;
                case 401:  //update order status and bulkPickState by pickorder
                    //update bulkPickState
                    _strSql = "UPDATE t_wmsOutPickRequest SET bulkPickState =@bulkSTATE, waveEnd = getDate() ,operater =@operater,lastmodified = getdate()  WHERE WAVEORDER =@WAVEORDER;";
                    _strSql += " UPDATE t_wmsOutPickDetail SET bulkPickState =@bulkSTATE ,operater =@operater,lastmodified = getdate() from t_wmsOutPickDetail a "
                            + " WHERE exists(select 1 from t_wmsOutPickRequest b where a.pickOrderNo = b.pickOrderNo and b.pickOrderNo =@pickOrderNo);";
                    //update state when bulkCount = count     全散货  
                    _strSql += " UPDATE t_wmsOutPickDetail SET state = @pickSTATE  ,operater =@operater,lastmodified = getdate() from t_wmsOutPickDetail a "
                           + " WHERE exists(select 1 from t_wmsOutPickRequest b where a.pickOrderNo = b.pickOrderNo and b.pickOrderNo =@pickOrderNo ) and bulkcount =count;";
                    //_strSql += "UPDATE t_wmsOutPickRequest SET state =@requestSTATE  from t_wmsOutPickRequest a WHERE WAVEORDER =@WAVEORDER "
                    //            + " and( not exists(select 1 from t_wmsOutPickDetail b where a.pickOrderNo = b.pickOrderNo and b.bulkcount !=b.count ));";
                    _strSql += "UPDATE t_wmsOutPickRequest SET state =@requestSTATE  ,operater =@operater,lastmodified = getdate()  WHERE pickOrderNo =@pickOrderNo and batchPickState in(-1,2);";
                    //_strSql += " UPDATE t_wmsOutRequest SET STATE =@requestSTATE  from t_wmsOutRequest a "
                    //            + " WHERE EXISTS(select 1 from [v_stockOutRequestPick] where pickOrderNo= a.pickOrderNo and WAVEORDER =@WAVEORDER  and bulkcount =count);";
                    //_strSql += " UPDATE t_wmsOutRequest SET STATE =(select state from t_wmsOutPickRequest where pickOrderNo =a.pickorderNo where WAVEORDER =@WAVEORDER ) from t_wmsOutRequest a ";
                    _strSql += " UPDATE t_wmsOutRequest SET STATE = b.state ,operater =@operater,lastmodified = getdate() from t_wmsOutRequest a  ,t_wmsOutPickRequest b where  a.pickOrderNo = b.pickorderNo and pickOrderNo =@pickOrderNo";
                    // _strSql += "UPDATE t_wmsOutRequest  SET STATE =@requestSTATE   where orderno in( select orderno from  [v_stockOutRequestPick] where  WAVEORDER =@WAVEORDER  and bulkcount =count)";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@bulkSTATE", (int)DeiNiu.Utils.enumOutStockPickStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@requestSTATE", (int)DeiNiu.Utils.enumOutStockRequestStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@pickSTATE", (int)DeiNiu.Utils.enumOutStockDetailStatus.完成分拣);
                    sqlCmd.Parameters.AddWithValue("@operater", mObj.CmdParameters[1]);
                    break;
                case 410: //进入波次拣选,更新订单和明细bulkStatus
                    _strSql = "UPDATE t_wmsOutPickRequest SET bulkPickState =@bulkSTATE, waveStart = getDate(),operater =@operater,lastmodified = getdate()  WHERE pickOrderNo =@pickOrderNo;";
                    _strSql += " UPDATE t_wmsOutPickDetail SET bulkPickState =@bulkSTATE ,operater =@operater,lastmodified = getdate()  where pickOrderNo =@pickOrderNo and (bulkCount>0 or bulkPickState >=0)"; //只更新有零货的记录
                    _strSql += "; UPDATE t_wmsOutPickDetail_tmp SET bulkPickState =@bulkSTATE ,operater =@operater,lastmodified = getdate()  where pickOrderNo =@pickOrderNo and (bulkCount>0 or bulkPickState >=0)"; //只更新有零货的记录
                    sqlCmd.CommandText = _strSql;
                       sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                       sqlCmd.Parameters.AddWithValue("@bulkSTATE", mObj.CmdParameters[1]);
                       sqlCmd.Parameters.AddWithValue("@operater", mObj.CmdParameters[2]);
                    break;
                case 411: //进入Part 波次拣选,更新订单和明细bulkStatus
                    _strSql = "UPDATE t_wmsOutPickRequest SET bulkPickState =@bulkSTATE, waveStart = getDate(),operater =@operater,lastmodified = getdate()  WHERE pickOrderNo =@pickOrderNo;";
                    _strSql += " UPDATE t_wmsOutPickDetail pd SET bulkPickState =@bulkSTATE ,operater =@operater,lastmodified = getdate() "
                        +" where pickOrderNo =@pickOrderNo and (bulkCount>0 or bulkPickState >=0)" 
                        +" and exists(select 1 from t_wmsOutPickLable_tmp where pickorderNo =pd.pickorderno and part =@part and [orderDetailId] =pd.id )"; //只更新有零货的记录
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@part", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@bulkSTATE", mObj.CmdParameters[2]);
                    sqlCmd.Parameters.AddWithValue("@operater", mObj.CmdParameters[3]);
                    break;
                case 420: //进入波次拣选,更新订单和明细batchPickStatus
                    _strSql = "UPDATE t_wmsOutPickRequest SET batchPickState =@batchSTATE, waveStart = getDate(),operater =@operater ,lastmodified = getdate() WHERE pickOrderNo =@pickOrderNo;";
                    _strSql += " UPDATE t_wmsOutPickDetail SET batchPickState =@batchSTATE,operater =@operater,lastmodified = getdate()   " +
                        " where pickOrderNo =@pickOrderNo and (batchPickState >=0 or count -bulkCount > 0)"; //只更新有整货的记录
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@batchSTATE", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@operater", mObj.CmdParameters[2]);
                    break;
                case 430: // 更新订单和明细 orderStatus, detailStatus
                    _strSql = "UPDATE t_wmsOutPickRequest SET state =@orderState,operater =@operater ,lastmodified = getdate() WHERE pickOrderNo =@pickOrderNo";
                    _strSql += "; UPDATE t_wmsOutPickDetail SET state =@detailState,operater =@operater,lastmodified = getdate()   where pickOrderNo =@pickOrderNo ";
                    _strSql += "; UPDATE t_wmsOutRequest SET state =@orderState,operater =@operater,lastmodified = getdate()   where pickOrderNo =@pickOrderNo "; 
                    
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@orderState", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@detailState", mObj.CmdParameters[2]);
                    sqlCmd.Parameters.AddWithValue("@operater", mObj.CmdParameters[3]);
                    break;
                case 431: // 更新订单和明细 orderStatus, detailStatus
                    _strSql = "UPDATE t_wmsOutPickRequest SET state =@orderState,operater =@operater ,lastmodified = getdate() WHERE pickOrderNo =@pickOrderNo"; 
                    _strSql += "; UPDATE t_wmsOutRequest SET state =@orderState,operater =@operater,lastmodified = getdate()   where pickOrderNo =@pickOrderNo ";
                    _strSql += "; UPDATE t_wmsOutDetail SET state =@detailState,operater =@operater,lastmodified = getdate()  " +
                                  " where  exists(select 1 from t_wmsOutRequest where pickOrderNo =@pickOrderNo and orderNo= t_wmsOutDetail.orderNo  )  ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@orderState", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@detailState", mObj.CmdParameters[2]);
                    sqlCmd.Parameters.AddWithValue("@operater", mObj.CmdParameters[3]);
                    break;
                case 500:  //判断是否有正在拣选数据
                    _strSql = "SELECT top 11 FROM t_wmsOutPickLable_tmp ";
                    sqlCmd.CommandText = _strSql;
                   
                    break;
                case 550:  //判断是否有待拣选数据
                    _strSql = "SELECT top 11 FROM t_wmsOutPickRequest where state= @state ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@state",DeiNiu.Utils.enumOutStockRequestStatus.定位完成);
                    break;
                case 600: //query with orderNo or pickOrderNo 
                     
                      _strSql = "SELECT top 500 *  FROM v_stockOutRequestDetail where 1=1 ";
                      if (!(bool)mObj.CmdParameters[0])
                    {
                      
                        _strSql += " and orderNo= @orderNo ";                        
                        sqlCmd.Parameters.AddWithValue("@orderNo", mObj.CmdParameters[1]);
                    }
                    else
                    {
                        _strSql = "SELECT top 500  *  FROM v_stockOutRequestPick where 1=1 "
                                + " and pickOrderNo= @pickOrderNo ;" 
                                + _strSql
                                + " and pickOrderNo= @pickOrderNo ;"
                                + " select top 500  * from v_reportStockRecord where orderno=@pickOrderNo";
                        sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[1]);
                    }
                    
                    sqlCmd.CommandText = _strSql;
                    break;
                case 700:  //get pick details by waveno
                    _strSql = "SELECT * from [v_stockOutWavePickDetail] where  waveOrder = @waveOrder "; 
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@waveOrder", mObj.CmdParameters[0]);
                    break;
                case 710:  //get bulk pick details in current wave
                    _strSql = "SELECT * FROM v_stockOutBulkInCurrentWave  ";
                    sqlCmd.CommandText = _strSql;
                 
                    break;
                case 720:  //get bulk pick details in partion pick wave
                    _strSql = "SELECT * FROM v_stockOutPartionBulkInCurrentWave  ";
                    sqlCmd.CommandText = _strSql;
                    break;
                case 800:  //取零货待复核订单
                   // _strSql = "SELECT  *  FROM [t_wmsOutPickDetail] a where exists(select 1 from t_wmsOutPickRequest where pickOrderNo = a.pickOrderNo and desk =@desk and  (state = 6 or state =7 )) order by orderNo;  ";
                    _strSql = "select  0 xuhao, *"
                        +",(select bulkpickstate from t_wmsOutPickRequest where pickorderno =a.pickorderno) as orderBulkPickstate "
                        +" from v_stockOutPickDetailValidation a where  desk=@desk ";
                   //_strSql += "  and orderState >=" + (int)DeiNiu.Utils.enumOutStockPickStatus.分拣完成;
                  //  _strSql += "  and bulkPickstate >=" + (int)DeiNiu.Utils.enumOutStockPickStatus.分拣完成; 
                   _strSql += "  and orderState <= " + (int)DeiNiu.Utils.enumOutStockPickStatus.复核完成; 
                    _strSql += "  and createtime > getdate()-@days"  ; 
                 
                  
                  //播种数据
                    /*
                     * _strSql += "; SELECT  seedsPickNo, goodsId,goodsName, batch, SUM(bulkCount) AS bulkcount, orderState, desk"
                        + " FROM   dbo.[v_stockOutPickDetailValidation] "
                        + " WHERE   (seedsPickNo IS NOT NULL) and  desk=@desk and orderState <= " + (int)DeiNiu.Utils.enumOutStockPickStatus.复核完成
                        + " GROUP BY seedsPickNo, goodsId,goodsName, batch, orderState, desk ";
                    */
                    _strSql += " ; select * from [v_stockOutPickDetailSeeds] where  desk=@desk ";
                    //  _strSql += "  and orderState <= " + (int)DeiNiu.Utils.enumOutStockPickStatus.打包完成;  //波次拣货明细
                    _strSql += "  and seedsStatus <= " + (int)DeiNiu.Utils.enumOutStockPickStatus.打包完成;  //波次拣货明细
                    _strSql += "  and createtime > getdate()-@days"; 
                /*
#if DEBUG
                    _strSql += " or desk >0) and orderState <= " + (int)DeiNiu.Utils.enumOutStockPickStatus.复核完成; ; //TODO: remove  desk >0,test only
#else
                      _strSql += " ) and orderState <= " + (int)DeiNiu.Utils.enumOutStockPickStatus.复核完成; 
                     
#endif
                     */ 
                     
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@desk", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@days", WmsConstants.VALIDATION_KEEP_DAYS);
                    break;
                case 810:  //get original out request details by pickorder
                    _strSql = "SELECT * from [v_stockOutDetail_wms] v where  exists (select 1 from t_wmsOutRequest where orderNo = v.orderNo and pickOrderNo =@pickOrderNo  ) ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    break;
                case 820:  //播种数据
                    _strSql = "select  0 xuhao, *"
                       + ",(select bulkpickstate from t_wmsOutPickRequest where pickorderno =a.pickorderno) as orderBulkPickstate "
                       + " from v_stockOutPickDetailValidation a where 1=1 ";
                    if (!string.IsNullOrEmpty(mObj.CmdParameters[0].ToString()))
                    {
                        _strSql += " and  desk = @desk  ";
                        sqlCmd.Parameters.AddWithValue("@desk", mObj.CmdParameters[0]);
                    }
                 
                    if (!string.IsNullOrEmpty(mObj.CmdParameters[2].ToString()))
                    {
                        _strSql += " and seedsPickNo=@seedsPickNo  ";
                        sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[2]);
                    }
                    else
                    {
                        _strSql += "  and createtime > getdate()-@days";
                    }
                    _strSql += "  and orderState <= " + (int)DeiNiu.Utils.enumOutStockPickStatus.复核完成;
                    _strSql += "; SELECT * from [v_stockOutPickDetailSeeds] where 1=1";
                   
                    if (!string.IsNullOrEmpty(mObj.CmdParameters[0].ToString()))
                    {
                        _strSql += " and  desk = @desk  ";
                        
                    }
                    if (!string.IsNullOrEmpty(mObj.CmdParameters[1].ToString()))
                    {
                        _strSql += "  and seedsStatus <= @seedsStatus ";
                        sqlCmd.Parameters.AddWithValue("@seedsStatus", mObj.CmdParameters[1]);
                    }
                    if (!string.IsNullOrEmpty(mObj.CmdParameters[2].ToString())){
                        _strSql += " and seedsPickNo=@seedsPickNo  ";
                       
                    }
                    else
                    {
                        _strSql += "  and createtime > getdate()-@days";
                    }
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@days", WmsConstants.VALIDATION_KEEP_DAYS);
                    break;
                case 830:  //get goods list by seedsNo
                    _strSql  = " SELECT * from [v_stockOutPickDetailSeeds] where 1=1";
                    _strSql += " and seedsPickNo=@seedsPickNo order by confirmedCount ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[0]);
                    break;
                case 900:  //保存复核用数据
                    //_strSql = " insert into t_wmsOutPickDetail_tmp select * from t_wmsOutPickDetail a  where "
                    //        +"  exists(select 1 from t_wmsOutPickRequest where pickOrderNo = a.pickOrderNo and  waveOrder = @waveNo)"
                    _strSql = " insert into t_wmsOutPickDetail_tmp "
                             + " select a.desk,a.bulkPickState as orderState,a.waveOrder,a.seedsPickNo,a.seedsPort,a.seedsLabelId,b.* "
                             + " from   t_wmsOutPickRequest a inner join t_wmsOutPickDetail b on a.pickOrderNo = b.pickOrderNo "
                             + " where   waveOrder = @waveNo "
                             + " and b.bulkCount > 0";
                          //   + " and not exists (select 1 from t_wmsOutPickDetail_tmp where id = b.id); ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@waveNo", mObj.CmdParameters[0]);
                    break;
                case 9001:  //保存复核用数据
                    //_strSql = " insert into t_wmsOutPickDetail_tmp select * from t_wmsOutPickDetail a  where "
                    //        +"  exists(select 1 from t_wmsOutPickRequest where pickOrderNo = a.pickOrderNo and  waveOrder = @waveNo)"
                    _strSql = " insert into t_wmsOutPickDetail_tmp "
                             + " select a.desk,a.bulkPickState as orderState,a.waveOrder,a.seedsPickNo,a.seedsPort,a.seedsLabelId,b.* "
                             + " from   t_wmsOutPickRequest a inner join t_wmsOutPickDetail b on a.pickOrderNo = b.pickOrderNo "
                             + " where   waveOrder = @waveNo and a.pickOrderNo = @pickNo "
                             + " and b.bulkCount > 0";
                    //   + " and not exists (select 1 from t_wmsOutPickDetail_tmp where id = b.id); ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@waveNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@pickNo", mObj.CmdParameters[1]);
                    break;
                case 901:  //保存复核用数据
                    //_strSql = " insert into t_wmsOutPickDetail_tmp select * from t_wmsOutPickDetail a  where "
                    //        +"  exists(select 1 from t_wmsOutPickRequest where pickOrderNo = a.pickOrderNo and  waveOrder = @waveNo)"
                    _strSql = " insert into t_wmsOutPickDetail_tmp "
                             + " select a.desk,a.bulkPickState as orderState,a.waveOrder,a.seedsPickNo,a.seedsPort,a.seedsLabelId,b.* "
                             + " from   t_wmsOutPickRequest a inner join t_wmsOutPickDetail b on a.pickOrderNo = b.pickOrderNo "
                             + " where   a.pickOrderNo = @pickOrderNo "
                             + " and b.bulkCount > 0";
                             // " and not exists (select 1 from t_wmsOutPickDetail_tmp where id = b.id); ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    break;
                case 1000:  //取待复核订单明细
                    // _strSql = "SELECT  *  FROM [t_wmsOutPickDetail] a where exists(select 1 from t_wmsOutPickRequest where pickOrderNo = a.pickOrderNo and desk =@desk and  (state = 6 or state =7 )) order by orderNo;  ";
                    _strSql = "select * from t_wmsOutPickDetail_tmp where pickOrderNo=@pickOrder;"; 
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrder", mObj.CmdParameters[0]);
                    break;
                case 1100:  //get pick details by pickOrderNo
                    _strSql = "SELECT * from [v_stockOutWavePickDetail] where pickOrderNo = @pickOrderNo and pdaOuting >0  ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    break;
                case 11001:  //get pick details by seedsPickNo,skuId
                    _strSql = "SELECT * from [v_stockOutWavePickDetail] where "
                        +" seedsPickNo = @seedsPickNo and pdaOuting >0  " 
                        +" and skuId=@skuid";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@skuid", mObj.CmdParameters[1]);
                    break;
                 case 1101:  //get seeds data for light 
                    _strSql = " select seedsLabelId as ele_lab_id,0 as ele_address,  seedsPort as port,sum(bulkCount) as pick_count,"+
                              " sum(bulkcount - confirmedCount)as send_count,desk as color,desk as ele_order ";
                    _strSql += " from  t_wmsOutPickDetail_tmp";
                    _strSql += " where seedsPickNo = @seedsPickNo";
                    _strSql += " and goodsId =@goodsId and batch =@batch"; 
                    _strSql += " and bulkcount - confirmedCount > 0";
                    _strSql += " group by seedsLabelId,seedsPort,desk";
                    //取分播拣货单列表,实时数据v_stockOutPickDetailSeeds
                    _strSql += "; select * from v_stockOutPickDetailValidation   ";
                   // _strSql += "; select * from v_stockOutPickDetailSeeds   ";
                    _strSql += " where seedsPickNo = @seedsPickNo";
                    _strSql += " and goodsId =@goodsId and batch =@batch"; 
                  //  _strSql += " and bulkcount - confirmedCount > 0";
                
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@goodsId", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@batch", mObj.CmdParameters[2]);
                    break;
                 case 1102:  
                   
                    // 某商品剩余待分播数量
                    _strSql  = "select count(*) as cnt from v_stockOutPickDetailValidation   ";
                    _strSql += " where seedsPickNo = @seedsPickNo";
                    _strSql += " and goodsId =@goodsId and batch =@batch";
                    _strSql += " and bulkPickState < @orderState";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@goodsId", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@batch", mObj.CmdParameters[2]);
                    sqlCmd.Parameters.AddWithValue("@orderState",(int)DeiNiu.Utils.enumOutStockPickStatus.复核完成 );
                    break;
                 case 1103:
                    // 待分播数量
                    _strSql  = "select count(*) as cnt from v_stockOutPickDetailValidation   ";
                    _strSql += " where seedsPickNo = @seedsPickNo";
                    //_strSql += " and orderState < @orderState";
                    _strSql += " and seedsLabelId =@labId ";
                    _strSql += " and bulkPickState < @state";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@labId", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@state", (int)DeiNiu.Utils.enumOutStockPickStatus.复核完成);
                 
                    break;
                 case 1104:
                    //播种详细
                    _strSql  = "select * from v_stockOutPickDetailValidation   ";
                    _strSql += " where seedsPickNo = @seedsPickNo";
                    _strSql += " and seedsLabelId =@labId ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@labId", mObj.CmdParameters[1]);
                    break;
                 case 1105:
                    //播种详细
                    _strSql = "select count(*) as cnt from v_stockOutPickDetailValidation   ";
                    _strSql += " where seedsPickNo = @seedsPickNo";
                    _strSql += " and bulkpickstate <@state ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@state", (int)DeiNiu.Utils.enumOutStockPickStatus.复核完成);
                    break;
                case 1200:  //删除复核临时数据 pickOrderNo
                   // _strSql = "DELETE FROM t_wmsOutPickDetail_tmp where pickOrderNo=@pickOrder; ";
                    _strSql = "DELETE FROM t_wmsOutPickDetail_tmp where orderState > @bulkPickOrderState ";
                    _strSql += " and checkedTime < getdate()-@days";
                 //  _strSql += " and validDate ";;
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@bulkPickOrderState", (int)DeiNiu.Utils.enumOutStockPickStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@days", WmsConstants.VALIDATION_KEEP_DAYS);
                    break;
                case 1300:  //get validation exception list
                    _strSql = "SELECT * FROM v_stockOutValidationException where bulkPickState =@state order by waveOrder,desk desc";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[0]);
                    break;
                case 1400:  // get validation exception list with solution
                    _strSql = "SELECT * FROM v_stockOutValidationException where bulkPickState =" + (int)DeiNiu.Utils.enumOutStockPickStatus.复核异常处理;
/*
#if DEBUG
                    _strSql +=" and ( desk=@desk  or desk >0) order by waveOrder desc"; //TODO: remove  desk >0,test only  
#else
                       _strSql +=  " and desk=@desk  order by waveOrder desc"; 
#endif
*/
                       _strSql += " and desk=@desk  order by waveOrder desc"; 
                     //  _strSql  += " order by waveOrder desc"; 
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@desk", mObj.CmdParameters[0]);
                    break;
                case 1500:  //get batch out orders by status
                    _strSql = "SELECT *  FROM  [t_wmsOutPickRequest] where state =@status and batchpickstate >=@batchpickstate1 and batchpickstate <=@batchpickstate2 order by waveOrder desc";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@status", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@batchpickstate1", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@batchpickstate2", mObj.CmdParameters[2]);
                    break;
                case 1510: //get today's rep order details by order type 
                    _strSql = "SELECT * FROM [t_wmsoutpickdetail] a where 1=1 "
                            + " and exists(select 1 from [t_wmsOutPickRequest]  where pickorderNo = a.pickorderNo and orderType =@orderType and orderDate =getDate())"
                            + " and batchpickstate <@pickStatus" ;//+ (int)Utils.enumOutStockPickStatus.复核完成; //复核完成=完成零货上架
                    sqlCmd.Parameters.AddWithValue("@orderType",(int) Utils.enumOrderType.补货出库);
                    sqlCmd.Parameters.AddWithValue("@pickStatus", mObj.CmdParameters[0]);
                    sqlCmd.CommandText = _strSql;
                    break;
                case 1600:  //get batch out order pick details   
                    _strSql = "SELECT *  FROM  [v_stockOutWavePickDetail] where pickOrderNo= @pickOrderNo and state =@status and volType > @volType and batchpickstate >=@batchpickstate";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@status", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@batchpickstate", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[2]);
                    sqlCmd.Parameters.AddWithValue("@volType",(int) Utils.enumWhLocVol.零库 );
                    break;
                case 1610:  //get batch out order pick details  by pickOrderNo 
                    _strSql = "SELECT *  FROM  [v_stockOutBatchPickDetail] where pickOrderNo= @pickOrderNo order by part";
                    sqlCmd.CommandText = _strSql; 
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
         
                    break;
                case 1620:  //get batch out order pick details  by pickOrderNo 
                    _strSql = "SELECT *  FROM  [v_tmsPickRequest] where pickOrderNo= @pickOrderNo ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]);
                    break;
                 case 1700:  //get batch out order details   
                    _strSql = "SELECT *  FROM  [v_stockOutPickDetail] where pickOrderNo= @pickOrderNo and state =@status and batchpickstate >=@batchpickstate";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@status", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@batchpickstate", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[2]);
                    break;
                /*
                 case 1800:  //update batch pick detail status   
                    _strSql = "update t_wmsOutPickDetail set batchpickstate = @newBatchpickstate where pickOrderNo= @pickOrderNo and bulkcount= @orderDate ";                          
                    if(!string.IsNullOrEmpty( mObj.CmdParameters[3].ToString())){ //flowno is not null
                       _strSql  += " and isnull(flowNo,'') =@flowNo";
                       sqlCmd.Parameters.AddWithValue("@flowNo", mObj.CmdParameters[3]);
                    }
                    if (Convert.ToInt32(mObj.CmdParameters[4].ToString())>0) //by emp partion
                    {  
                        _strSql += " and partionEmpId  =@operId";
                        sqlCmd.Parameters.AddWithValue("@operId", mObj.CmdParameters[4]);
                    }
                    string orderDate = mObj.CmdParameters[2].ToString();
                    int days = -1;
#if DEBUG
                    days =-100;
#else
                    days =-30;
#endif
                    if (string.IsNullOrEmpty(orderDate))
                    {
                        orderDate = DateTime.Now.Date.AddDays(days).ToShortDateString();//this.getDateTime();
                    }
                    _strSql  += " order by 货位";
                      sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@orderDate", orderDate); 
                    sqlCmd.Parameters.AddWithValue("@ordertype", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[1]);
                  
                    break;
                 case 2301:  //电脑查看拣货任务列表
                    _strSql = " SELECT * from v_stockOutBatchPickDetail where ordertype = @orderType "
                             + " and state =@state and orderDate >= @orderDate ";
                    //  + " and takeBy =@takeBy order by waveOrder";
                    orderDate = mObj.CmdParameters[2].ToString();
                    days = -1;
#if DEBUG
                    days = -100;
#else
                    days =-30;
#endif
                    if (string.IsNullOrEmpty(orderDate))
                    {
                        orderDate = DateTime.Now.Date.AddDays(days).ToShortDateString();//this.getDateTime();
                    }
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@orderDate", orderDate);
                    sqlCmd.Parameters.AddWithValue("@ordertype", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@flowNo", mObj.CmdParameters[3]);
                    break;
                 case 2302:  //pda查看分配给某个员工的拣货任务
                    _strSql = " SELECT  [货区], [货位] ,[商品],[数量] ,[件] ,[状态]  ,[分配人], [线路]" 
                             + " from v_stockOutBatchPickDetail4Wince where ordertype = @orderType "
                             + " and state =@state and orderDate >= @orderDate "
                             + " and takeBy =@takeBy order by waveOrder";
                    orderDate = mObj.CmdParameters[2].ToString();
                    days = -1;
#if DEBUG
                    days = -100;
#else
                    days =-30;
#endif
                    if (string.IsNullOrEmpty(orderDate))
                    {
                        orderDate = DateTime.Now.Date.AddDays(days).ToShortDateString();//this.getDateTime();
                    }
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@orderDate", orderDate);
                    sqlCmd.Parameters.AddWithValue("@ordertype", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@state", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@flowNo", mObj.CmdParameters[3]);
                    break;
                 case 2400:  //update priority
                    _strSql = " update t_wmsOutPickRequest set priority =@priority ,operater =@operId,lastmodified = getdate()  where pickOrderNo in " + mObj.CmdParameters[0];
                     
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@priority", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@operId", mObj.CmdParameters[2]);
                    break;
                 case 2500:  //batch only request
                    _strSql = "select top 1 * from t_wmsOutPickRequest where batchPickState=@batchState ";//" and bulkPickstate =@bulkState"; 
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@batchState", mObj.CmdParameters[0]);
                 //   sqlCmd.Parameters.AddWithValue("@bulkState", (int)enumOutStockPickStatus.无需分拣);
                    break;
                case 2600:  // 取播种拣选明细
                    _strSql = "SELECT  goodsId, batch, skuId, canSeedOut, orderState, pickGroup, SUM(count) AS count " +
                        " FROM     dbo.v_stockOutPickDetailPickgroup WHERE 1=1" +
                         //  " and seedsport=@mark " +
                         " and pickGroup =@groupMark";
                         if (!WmsConstants.SEEDS_PICK_ALL)
                            {
                                _strSql += " and canseedout =1 ";
                            }
                    _strSql += " and orderState = @orderState " + 
                            " GROUP BY goodsId, batch, skuId, canSeedOut, orderState, pickGroup ";//" and bulkPickstate =@bulkState"; 
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@groupMark", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@orderState", mObj.CmdParameters[1]);
                   
                    break;
                case 2700:  // 更新seedsPickOrder
                    _strSql = " update t_wmsOutRequest set seedsPickOrderNo=@seedsPickOrder where pickOrderNo=@pickOrderNo;" +
                        " update t_wmsOutPickRequest set seedsPickNo =@seedsPickOrder where pickOrderNo=@pickOrderNo;"; 
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@seedsPickOrder", mObj.CmdParameters[1]);
                    sqlCmd.Parameters.AddWithValue("@pickOrderNo", mObj.CmdParameters[0]); 
                    break;
                case 2800:  // 分拣完成、所有任务已复核(抽检复核,装车时自动复核)
                    _strSql = "select top 10 * from t_wmsoutpickrequest p where state =@orderState  and" +
                        " not exists(select 1 from t_wmsoutpickport where pickorderno =p.pickorderno and state <@pickState) "; 
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@orderState", (int)enumOutStockRequestStatus.分拣完成);
                    sqlCmd.Parameters.AddWithValue("@pickState", (int)enumPickState.复核完成); 
                    break;
                case 2900:  // get by transNo ( vihicle type plateId    )
                    _strSql = "SELECT *  FROM  [t_wmsoutpickrequest] r where transNo =@transNo" +
                        " or exists( select  1  FROM  [t_wmsoutpickrequest] where seedspickno =r.pickOrderNo and transNo =@transNo )";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@transNo", mObj.CmdParameters[0]);
                    break;
                case 3000:  // 关闭分拣单下的所有相关任务
                    _strSql = "update t_wmsflow set state=@state where orderno =@orderNo and state<@state ";
                    sqlCmd.CommandText = _strSql;
                    sqlCmd.Parameters.AddWithValue("@orderNo", mObj.CmdParameters[0]);
                    sqlCmd.Parameters.AddWithValue("@state", (int)enumFlowTaskStatus.已完成);
                    break;
            }
        }
    }
}