Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        /// <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>());;
            }
        }
Esempio n. 3
0
        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);
            }
        }