public override string SaveData() { _order.OrderStatus = 2; //初始态 _order.EditStatus = 0; //无人编辑 StringBuilder sb = new StringBuilder(); using (var edm = new Gold.DAL.GoldEntities()) { try { var tmp = edm.ShiftOrder.SingleOrDefault(o => o.OrderCode == _order.OrderCode); if (tmp == null) { edm.ShiftOrder.AddObject(_order); } else { //判断该订单是否已经开始其他作业,如果是,则不允许覆盖 if (tmp.OrderStatus != 2) { throw new Exception("此订单(" + tmp.OrderCode + ")已开始其他作业,不允许再次上传!"); } foreach (ShiftOrderDetail oldDetail in tmp.ShiftOrderDetail) { //如果实收数量为0,则直接删除 if (oldDetail.NumActual == null || oldDetail.NumActual == 0) { continue; } else { bool isExist = false;//是否新旧订单都有此商品 foreach (ShiftOrderDetail newDetail in _order.ShiftOrderDetail) { //判断在当前的新excel中是否有此商品,如果有,则保存实收数量 if (newDetail.CargoCode == oldDetail.CargoCode) { newDetail.NumActual = oldDetail.NumActual; isExist = true; _order.OrderStatus = 1;//部分已下发 break; } } if (isExist) { continue; } else { //如果当前新excel没有此商品,则直接添加 ShiftOrderDetail sd = new ShiftOrderDetail(); sd.CargoCode = oldDetail.CargoCode; sd.CargoModel = oldDetail.CargoModel; sd.CargoName = oldDetail.CargoName; sd.CargoSpec = oldDetail.CargoSpec; sd.CargoUnits = oldDetail.CargoUnits; sd.Comment = oldDetail.Comment; sd.DetailRowNumber = oldDetail.DetailRowNumber; sd.DetailRowStatus = oldDetail.DetailRowStatus; sd.NCOrderCode = oldDetail.NCOrderCode; sd.NumActual = oldDetail.NumActual; sd.NumCurrentPlan = oldDetail.NumCurrentPlan; sd.NumOriginalPlan = oldDetail.NumOriginalPlan; sd.OrderCode = oldDetail.OrderCode; sd.ReleaseYear = oldDetail.ReleaseYear; sd.Reserve1 = oldDetail.Reserve1; sd.Reserve2 = oldDetail.Reserve2; if (sd.NumActual != null && sd.NumActual != 0) { _order.OrderStatus = 1;//部分已下发 } _order.ShiftOrderDetail.Add(sd); } } } edm.ShiftOrder.DeleteObject(tmp); edm.SaveChanges(); edm.ShiftOrder.AddObject(_order); } edm.SaveChanges(); sb.AppendLine("保存成功!"); } catch (Exception ex) { sb.Append("保存数据时发生异常:"); string msg = Utility.LogHelper.GetExceptionMsg(ex); sb.Append(msg); Utility.LogHelper.WriteLog(Utility.LogHelper.LogLevel.Error, "转库订单保存异常", ex); } } return(sb.ToString()); }
/// <summary> /// 从DataTable中获取采购订单明细实体列表 /// </summary> /// <param name="dt"></param> /// <param name="msg"></param> /// <returns></returns> private List <DAL.ShiftOrderDetail> GetModelDetailFromDataTable(DataTable dt, out string msg) { try { List <DAL.ShiftOrderDetail> list = new List <DAL.ShiftOrderDetail>(); msg = ""; //接口协议文档中定义的字段 Dictionary <string, string> dataFieldNameDic = new Dictionary <string, string>(); dataFieldNameDic.Add("NCOrderCode", "转库单编号"); dataFieldNameDic.Add("DetailRowNumber", "行号"); dataFieldNameDic.Add("CargoCode", "商品编码"); dataFieldNameDic.Add("CargoName", "商品名称"); dataFieldNameDic.Add("CargoSpec", "规格"); dataFieldNameDic.Add("CargoModel", "型号"); dataFieldNameDic.Add("CargoUnits", "单位"); dataFieldNameDic.Add("NumOriginalPlan", "数量"); if (dt == null || dt.Rows.Count == 0) { msg = "用友系统返回数据集中无数据!"; return(new List <ShiftOrderDetail>()); } StringBuilder errorColName = new StringBuilder(); //检查数据集中是否存在指定字段 foreach (KeyValuePair <string, string> kvp in dataFieldNameDic) { if (dt.Columns.Contains(kvp.Key) == false) { errorColName.Append(Environment.NewLine); errorColName.Append(kvp.Value); errorColName.Append("-"); errorColName.Append(kvp.Key); } } if (errorColName.Length > 0) { errorColName.Insert(0, "用友系统返回的数据集中未包含如下字段,不能进行有效解析!"); msg = errorColName.ToString(); return(new List <ShiftOrderDetail>());; } //遍历数据集创建实体 foreach (DataRow dr in dt.Rows) { ShiftOrderDetail newModel = new ShiftOrderDetail(); newModel.NCOrderCode = DataCheckHelper.GetCellString(dr["NCOrderCode"]); newModel.DetailRowNumber = DataCheckHelper.GetCellString(dr["DetailRowNumber"]); newModel.CargoCode = DataCheckHelper.GetCellString(dr["CargoCode"]); string cargoCode = DbCommonMethod.ParsingCargoCode(newModel.CargoCode); if (string.IsNullOrEmpty(cargoCode)) { throw new ApplicationException("商品不存在:" + newModel.CargoCode); } newModel.CargoName = DataCheckHelper.GetCellString(dr["CargoName"]); newModel.CargoSpec = DataCheckHelper.GetCellString(dr["CargoSpec"]); newModel.CargoModel = DataCheckHelper.GetCellString(dr["CargoModel"]); newModel.CargoUnits = DataCheckHelper.GetCellString(dr["CargoUnits"]); //数量 if (!string.IsNullOrEmpty(DataCheckHelper.GetCellString(dr["NumOriginalPlan"]))) { double d; if (double.TryParse(DataCheckHelper.GetCellString(dr["NumOriginalPlan"]), out d)) { newModel.NumOriginalPlan = d; } } newModel.DetailRowStatus = 2;//初始态 newModel.OrderCode = newModel.OrderCode; newModel.NCOrderCode = newModel.NCOrderCode; List <ShiftOrderDetail> existShiftOrderDetail = (from r in list where r.NCOrderCode == newModel.NCOrderCode && r.DetailRowNumber == newModel.DetailRowNumber select r).ToList <ShiftOrderDetail>(); if (existShiftOrderDetail == null || existShiftOrderDetail.Count == 0)//过滤重复数据 { list.Add(newModel); } } return(list); } catch (Exception ex) { msg = ex.Message; return(new List <ShiftOrderDetail>());; } }
protected override void BindingOrderItem(object[] array) { if (_order.ShiftOrderDetail == null) { _order.ShiftOrderDetail = new EntityCollection <ShiftOrderDetail>(); } if (_itemDefine == null) { throw new ApplicationException("未发现行项目字段定义!"); } if (_itemDefine.Count() == array.Count()) { ShiftOrderDetail orderItem = new ShiftOrderDetail(); for (int i = 0; i < array.Count(); i++) { string fieldName = Regex.Replace(_itemDefine[i].ToString(), @"\s", ""); string fieldValue = Regex.Replace(array[i].ToString(), @"\s", ""); switch (fieldName) { case "商品编码": orderItem.CargoCode = fieldValue; string cargoCode = DbCommonMethod.ParsingCargoCode(fieldValue); if (string.IsNullOrEmpty(cargoCode)) { throw new ApplicationException("商品不存在:" + fieldValue); } break; case "商品名称": orderItem.CargoName = fieldValue; break; case "规格": orderItem.CargoSpec = fieldValue; break; case "型号": //过滤型号值,如果型号是90.000,则去90,去掉小数点后面的0 double dou; string strModel = fieldValue; double douModel = 0; if (double.TryParse(fieldValue, out dou)) { douModel = dou; } if (douModel != 0 && strModel.Contains(".")) { string sdecimal = strModel.Substring(strModel.IndexOf(".") + 1, strModel.Length - strModel.IndexOf(".") - 1); int istring = Convert.ToInt32(sdecimal); if (istring == 0) { strModel = fieldValue.Substring(0, fieldValue.IndexOf(".")); } } orderItem.CargoModel = strModel; break; case "单位": orderItem.CargoUnits = fieldValue; break; case "数量": if (!string.IsNullOrEmpty(fieldValue)) { double d; if (double.TryParse(fieldValue, out d)) { orderItem.NumOriginalPlan = d; } } break; default: break; } } if (string.IsNullOrEmpty(orderItem.DetailRowNumber)) { orderItem.DetailRowNumber = _rowNum.ToString(); } orderItem.DetailRowStatus = 2;//初始态 orderItem.OrderCode = _order.OrderCode; orderItem.NCOrderCode = _order.NCOrderCode; orderItem.ShiftOrder = _order; IEnumerable <KeyValuePair <string, object> > entityKeyValues = new KeyValuePair <string, object>[] { new KeyValuePair <string, object>("OrderCode", orderItem.OrderCode), new KeyValuePair <string, object>("DetailRowNumber", orderItem.DetailRowNumber) }; orderItem.EntityKey = new EntityKey("GoldEntities.ShiftOrderDetail", entityKeyValues); _order.ShiftOrderDetail.Add(orderItem); } }