Ejemplo n.º 1
0
        /// <summary>
        /// 计算指定任务中是否存在不完整的套餐
        /// </summary>
        /// <param name="taskID">任务 ID</param>
        /// <returns></returns>
        private List <SODetailEntity> CalcNonFullDetails(int taskID)
        {
            List <SODetailEntity> list = new List <SODetailEntity>();

            List <SODetailEntity> details  = this.taskDal.GetDetailsByTaskID(taskID);
            List <SODetailEntity> findList = details.FindAll(u => !string.IsNullOrEmpty(u.CombMaterial));

            if (findList.Count > 0) // 验证套餐完整性
            {
                // 根据套餐分组 key=CombMaterial_RowNo
                Dictionary <string, List <SODetailEntity> > dicPackage = new Dictionary <string, List <SODetailEntity> >();
                foreach (SODetailEntity detail in findList)
                {
                    string key = string.Format("{0}_{1}", detail.CombMaterial, detail.RowNO);
                    if (dicPackage.ContainsKey(key))
                    {
                        dicPackage[key].Add(detail);
                    }
                    else
                    {
                        dicPackage.Add(key,
                                       new List <SODetailEntity>(new SODetailEntity[] { detail }));
                    }
                }
                // 计算每个套餐中最小的成套量与应返回数,
                foreach (string key in dicPackage.Keys)
                {
                    List <SODetailEntity> array  = dicPackage[key];
                    SODetailEntity        detail = null;
                    // 从该套餐中找中成套数最小的
                    foreach (SODetailEntity item in array)
                    {
                        if (detail == null)
                        {
                            detail = item;
                            continue;
                        }
                        SODetailEntity minPick = array.Find(
                            u => u.PickQty == 0 ||
                            u.PickQty / u.SuitNum < detail.PickQty / detail.SuitNum);
                        if (minPick == null)
                        {
                            break;
                        }
                        detail = minPick;
                    }
                    if (detail == null)
                    {
                        continue;
                    }
                    decimal packageCount = detail.PickQty < detail.SuitNum ?
                                           0 : detail.PickQty / detail.SuitNum;// 最小成套数
                    array.ForEach(u =>
                    {
                        u.ReturnQty = u.PickQty - packageCount * u.SuitNum;
                    });
                    list.AddRange(array.FindAll(u => u.ReturnQty > 0));
                }
            }
            return(list);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 出库单管理,查询出库单明细
        /// </summary>
        /// <param name="billID"></param>
        /// <returns></returns>
        public List <SODetailEntity> GetDetails(int billID)
        {
            List <SODetailEntity> list = new List <SODetailEntity>();

            try
            {
                #region 请求数据
                System.Text.StringBuilder loStr = new System.Text.StringBuilder();
                loStr.Append("billID=").Append(billID);
                string jsonQuery = WebWork.SendRequest(loStr.ToString(), WebWork.URL_GetDetails);
                if (string.IsNullOrEmpty(jsonQuery))
                {
                    MsgBox.Warn(WebWork.RESULT_NULL);
                    //LogHelper.InfoLog(WebWork.RESULT_NULL);
                    return(list);
                }
                #endregion

                #region 正常错误处理

                JsonGetDetails bill = JsonConvert.DeserializeObject <JsonGetDetails>(jsonQuery);
                if (bill == null)
                {
                    //MsgBox.Warn(WebWork.JSON_DATA_NULL);
                    return(list);
                }
                if (bill.flag != 0)
                {
                    MsgBox.Warn(bill.error);
                    return(list);
                }
                #endregion

                #region 赋值数据
                foreach (JsonGetDetailsResult jbr in bill.result)
                {
                    SODetailEntity asnEntity = new SODetailEntity();
                    #region 0-10
                    asnEntity.BatchNO      = jbr.batchNo;
                    asnEntity.BillID       = Convert.ToInt32(jbr.billId);
                    asnEntity.CombMaterial = jbr.comMaterial;
                    asnEntity.DetailID     = Convert.ToInt32(jbr.detailId);
                    asnEntity.DueDate      = jbr.dueDate;
                    asnEntity.IsCase       = Convert.ToInt32(jbr.isCase);
                    asnEntity.MaterialCode = jbr.skuCode;
                    asnEntity.MaterialName = jbr.skuName;
                    asnEntity.PickQty      = Convert.ToDecimal(jbr.pickQty);
                    asnEntity.Price1       = Convert.ToDecimal(jbr.price);
                    #endregion
                    #region 11-20
                    asnEntity.Qty    = Convert.ToDecimal(jbr.qty);
                    asnEntity.Remark = jbr.remark;
                    asnEntity.RowNO  = Convert.ToInt32(jbr.rowNo);
                    ///jbr.rowNo1;
                    asnEntity.SkuBarcode = jbr.skuBarCode;
                    asnEntity.Spec       = jbr.spec;
                    asnEntity.SuitNum    = Convert.ToDecimal(jbr.suitNum);
                    asnEntity.UnitCode   = jbr.umCode;
                    asnEntity.UnitName   = jbr.umName;
                    #endregion
                    try
                    {
                        //if (!string.IsNullOrEmpty(jbr.closeDate))
                        //    asnEntity.CloseDate = Convert.ToDateTime(jbr.closeDate);
                    }
                    catch (Exception msg)
                    {
                        MsgBox.Warn(msg.Message);
                        //LogHelper.errorLog("PSoManage+QueryBills", msg);
                    }
                    list.Add(asnEntity);
                }
                return(list);

                #endregion
            }
            catch (Exception ex)
            {
                MsgBox.Err(ex.Message);
            }
            return(list);
        }