/// <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); }
/// <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); }