public ActionResult StockLock(TreasuryLocks obj) { obj.LockCategorySN = Request["selectCategorySN"]; var op = TakeStockService.AddStockLock(obj); return(Content(op.ToJson())); }
public ActionResult Save(TreasuryLocks obj, short state, short hasrepeat) { var op = TakeStockService.SaveOrUpdate(obj, Request["Updated"], Request["Inserted"], Request["Deleted"], Request["ActualDate"], state, hasrepeat); if (op.Successed) { TakeStockService.RemoveCache(obj.CheckBatch); } return(Content(op.ToJson())); }
public ActionResult Import(TreasuryLocks obj, char codeCol, char countCol, int?minRow, int?maxRow, string checkUID) { var re = TakeStockService.Import(obj, Request.Files, codeCol, countCol, minRow.GetValueOrDefault(), maxRow.GetValueOrDefault(), checkUID); return(Content(re.ToJson())); }
/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="httpFiles"></param> /// <param name="codeCol">条码列</param> /// <param name="countCol">实盘列</param> /// <param name="minRow">起始行</param> /// <param name="maxRow">截止行</param> /// <returns></returns> public static OpResult Import(TreasuryLocks obj, System.Web.HttpFileCollectionBase httpFiles, char codeCol, char countCol, int minRow, int maxRow, string checkUID) { var op = new OpResult(); try { if (httpFiles.Count <= 0 || httpFiles[0].ContentLength <= 0) { op.Message = "请先选择Excel文件"; return(op); } var stream = httpFiles[0].InputStream; var ext = httpFiles[0].FileName.Substring(httpFiles[0].FileName.LastIndexOf(".")); if (!(ext.Equals(".xls", StringComparison.CurrentCultureIgnoreCase) || ext.Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))) { op.Message = "请先选择Excel文件"; return(op); } var over = HttpContext.Current.Request["over"].ToType <short?>(); int?checkCol = null; if (!HttpContext.Current.Request["CheckCol"].IsNullOrEmpty()) { checkCol = (int)Convert.ToChar(HttpContext.Current.Request["CheckCol"]); } obj.CompanyId = CommonService.CompanyId; var dt = new ExportExcel().ToDataTable(stream, minRow: minRow, maxRow: maxRow); var codeIdx = Convert.ToInt32(codeCol) - 65; var countIdx = Convert.ToInt32(countCol) - 65; var users = new List <Sys.Entity.SysUserInfo>(); if (checkCol.HasValue) { var codes = dt.AsEnumerable().Select(o => o[checkCol.Value - 65].ToString()).Distinct().ToList(); users = UserInfoService.FindList(o => o.CompanyId == CommonService.CompanyId && codes.Contains(o.UserCode)); } var stocks = new List <StockTakingLog>(); var errLs = new Dictionary <int, string>(); int idx = 1; foreach (DataRow dr in dt.Rows) { idx++; string barcode = "", number = ""; try { barcode = dr[codeIdx].ToString(); number = dr[countIdx].ToString(); if (checkCol.HasValue) { var code = dr[checkCol.Value - 65].ToString(); if (!code.IsNullOrEmpty()) { var user = users.FirstOrDefault(o => o.UserCode == code); if (user != null) { checkUID = user.UID; } else { errLs.Add(idx, barcode + " 盘点员工号不存在!"); continue; } } } } catch (Exception) { throw new Exception("列选择超过范围!"); } if (barcode.IsNullOrEmpty()) { continue; } if (number.IsNullOrEmpty() && !barcode.IsNullOrEmpty()) { errLs.Add(idx, barcode + " 实盘数量为空"); continue; } decimal num = 0; if (!decimal.TryParse(number, out num) || num < 0) { errLs.Add(idx, barcode + " 实盘数量小于零"); continue; } var st = stocks.FirstOrDefault(o => o.Barcode == barcode); if (st != null) { st.Number += num; } else { stocks.Add(new StockTakingLog() { Id = idx, Barcode = barcode, Number = num, CheckBatch = obj.CheckBatch, CheckUID = checkUID, CreateDT = DateTime.Now, State = over.GetValueOrDefault(), SysPrice = 0, CompanyId = obj.CompanyId, Source = 3 }); } } op = SaveOrUpdate(obj, "[]", stocks.ToJson(), "[]", HttpContext.Current.Request["ActualDate"], 1); var errs = op.Data as Dictionary <int, string>; if (errs == null) { errs = new Dictionary <int, string>(); } foreach (var de in errs) { errLs.Add(de.Key, de.Value); } if (errLs.Any()) { var html = "<ul><li>成功导入{0}条数据,余{1}条导入失败!</li><li><a href=\"javascript:void(0)\" onclick=\"viewErr()\">查看失败记录!</a></li></ul>"; op.Message = string.Format(html, stocks.Count - errs.Count, errLs.Count); op.Descript = "<dl><dt>以下数据导入失败:</dt>{0}</dl>"; string str = ""; foreach (var de in errLs) { str += "<dd>行" + de.Key + ":" + de.Value + "</dd>"; } op.Descript = string.Format(op.Descript, str); } else { op.Message = "<ul><li>成功导入" + stocks.Count + "条数据!</li></ul>"; } op.Message = System.Web.HttpUtility.UrlEncode(op.Message); op.Descript = System.Web.HttpUtility.UrlEncode(op.Descript); Log.WriteInsert("盘点导入", Sys.LogModule.库存管理); } catch (Exception ex) { op.Message = ex.Message; Log.WriteError(ex); } return(op); }
public static OpResult SaveOrUpdate(TreasuryLocks obj, string updated, string inserted, string deleted, string actualDate, short state = 1, short hasrepeat = 1)//hasrepeat=1?覆盖:累加 { var op = new OpResult(); try { var updateStocks = updated.ToObject <List <StockTakingLog> >().Where(o => !o.Barcode.IsNullOrEmpty()); var insertStocks = inserted.ToObject <List <StockTakingLog> >().Where(o => !o.Barcode.IsNullOrEmpty()); var deleteStocks = deleted.ToObject <List <StockTakingLog> >().Where(o => !o.Barcode.IsNullOrEmpty()); if (!updateStocks.Any() && !insertStocks.Any() && !deleteStocks.Any()) { throw new Exception("无更新记录!"); } var barcodes = insertStocks.Select(o => o.Barcode).ToList(); var stocks = FindList(o => barcodes.Contains(o.Barcode) && o.CheckBatch == obj.CheckBatch && o.CompanyId == CommonService.CompanyId); var errls = new Dictionary <int, string>(); var stocklogs = BaseService <StockTakingLog> .FindList(o => barcodes.Contains(o.Barcode) && o.CheckBatch == obj.CheckBatch && o.State == 1 && o.CompanyId == CommonService.CompanyId); if (state == 0) { var reslogs = BaseService <StockTakingLog> .FindList(o => o.CheckBatch == obj.CheckBatch && o.State == 0 && o.Source != 2 && o.CompanyId == CommonService.CompanyId && o.CreateUID == Sys.CurrentUser.UID); BaseService <StockTakingLog> .CurrentRepository.RemoveRange(reslogs, false);//先删除原先记录 } var stockTakings = new List <StockTaking>(); if (state == 1 && insertStocks.Any()) { var bars = insertStocks.Select(o => o.Barcode).ToList(); stockTakings = BaseService <StockTaking> .FindList(o => o.CompanyId == CommonService.CompanyId && o.CheckBatch == obj.CheckBatch && bars.Contains(o.Barcode)); } var date = actualDate.ToType <DateTime>(); foreach (var add in insertStocks) { //var sk = stocks.FirstOrDefault(o => o.Barcode == add.Barcode); var q = from a in CurrentRepository.QueryEntity join b in ProductService.CurrentRepository.QueryEntity on new { a.CompanyId, a.Barcode } equals new { b.CompanyId, b.Barcode } where a.CompanyId == CommonService.CompanyId && a.CheckBatch == obj.CheckBatch && (("," + b.Barcodes + ",").Contains("," + add.Barcode + ",") || b.Barcode == add.Barcode) select a; if (!q.Any()) { errls.Add(add.Id, add.Barcode + " 条码不存在"); continue; } if (state == 1 && stocklogs.Any(o => o.Barcode == add.Barcode) && add.State == 0)//复盘不验证 { errls.Add(add.Id, add.Barcode + " 条码已复盘"); continue; } add.CreateUID = Sys.CurrentUser.UID; add.CheckBatch = obj.CheckBatch; //add.CreateDT = DateTime.Now; add.ActualDate = date; add.CompanyId = CommonService.CompanyId; if (add.Source <= 0) { add.Source = 1; } BaseService <StockTakingLog> .CurrentRepository.Add(add, false); var stock = stockTakings.FirstOrDefault(o => o.Barcode == add.Barcode); if (stock != null && stock.LockNumber != add.Number) { stock.Sure = 2; } } if (updateStocks.Any()) { barcodes = updateStocks.Select(o => o.Barcode).ToList(); stocklogs = BaseService <StockTakingLog> .FindList(o => barcodes.Contains(o.Barcode) && o.CheckBatch == obj.CheckBatch && o.CompanyId == CommonService.CompanyId); foreach (var update in updateStocks) { var log = stocklogs.FirstOrDefault(o => o.Id == update.Id); if (log == null) { continue; } log.Number = update.Number; } } if (deleteStocks.Any()) { var ids = deleteStocks.Select(o => o.Id).ToList(); stocklogs = BaseService <StockTakingLog> .FindList(o => ids.Contains(o.Id)); BaseService <StockTakingLog> .CurrentRepository.RemoveRange(stocklogs, false); } op = BaseService <StockTakingLog> .Update(stocklogs); op.Data = errls; } catch (Exception ex) { op.Message = ex.Message; Log.WriteError(ex); } return(op); }
public static OpResult AddStockLock(TreasuryLocks obj) { var op = new OpResult(); try { obj.LockStoreID.IsNullThrow(); var xh = obj.CheckBatch.Substring(obj.CheckBatch.Length - 2); if (int.Parse(xh) > 20) { op.Message = "每月最多只能锁定20次"; return(op); } var selectBarcodes = HttpContext.Current.Request["selectBarcodes"]; var barcodes = new string[] { }; if (selectBarcodes.IsNullOrEmpty()) { List <int> childsns = null; if (!obj.LockCategorySN.IsNullOrEmpty()) { var parsns = obj.LockCategorySN.Split(',').Select(o => int.Parse(o)).ToList(); childsns = ProductCategoryService.GetChildSNs(parsns, true); } else { var ware = WarehouseService.Find(o => o.StoreId == obj.LockStoreID && o.CompanyId == CommonService.CompanyId); var parsns = ware.CategorySN.Split(',').Where(o => !o.IsNullOrEmpty()).Select(o => int.Parse(o)).ToList(); childsns = ProductCategoryService.GetChildSNs(parsns); } barcodes = ProductService.FindList(o => childsns.Contains(o.CategorySN) && o.CompanyId == CommonService.CompanyId).Select(o => o.Barcode).Distinct().ToArray(); } else { barcodes = selectBarcodes.Split(','); } var dt = dal.GetInventoryBalanceLast(CommonService.CompanyId, obj.LockStoreID, string.Join(",", barcodes)); if (dt == null || dt.Rows.Count <= 0) { op.Message = "该门店暂无库存信息"; } else { obj.LockDate = DateTime.Now; obj.LockUID = Sys.CurrentUser.UID; obj.CompanyId = CommonService.CompanyId; var stocks = new List <StockTaking>(); foreach (DataRow dr in dt.Rows) { if (stocks.Any(o => o.Barcode == dr["Barcode"].ToString())) { continue; } stocks.Add(new StockTaking() { Barcode = dr["Barcode"].ToString(), LockNumber = dr["Number"].ToType <decimal>(), CheckBatch = obj.CheckBatch, CreateDT = obj.LockDate, CreateUID = obj.LockUID, CompanyId = obj.CompanyId }); } BaseService <TreasuryLocks> .Add(obj, false); op = AddRange(stocks); } } catch (Exception ex) { op.Message = ex.Message; Log.WriteError(ex); } return(op); }