public object PutOrderProduction([FromBody] IEnumerable <OrderProduction> details)
        {
            if (details == null || !details.Any())
            {
                return(Result.GenError <Result>(Error.ParamError));
            }
            if (details.Any(x => x.Id == 0))
            {
                return(Result.GenError <Result>(Error.OrderProductionNotExist));
            }
            if (details.Any(x => x.DeliveryTime == default(DateTime)))
            {
                return(Result.GenError <Result>(Error.OrderProductionNotExist));
            }

            if (details.GroupBy(x => x.DeliveryTime).Any(y => y.Count() > 1))
            {
                return(Result.GenError <Result>(Error.OrderProductionDuplicate));
            }

            var ids = details.Select(x => x.Id);
            var cnt = OrderProductionHelper.Instance.GetCountByIds(ids);

            if (cnt != details.Count())
            {
                return(Result.GenError <Result>(Error.OrderProductionNotExist));
            }
            var oId   = details.FirstOrDefault()?.OrderId ?? 0;
            var sames = details.Select(x => x.DeliveryTime);

            if (OrderProductionHelper.GetHaveSame(oId, oId, sames, ids))
            {
                return(Result.GenError <Result>(Error.OrderProductionIsExist));
            }

            var markedDateTime = DateTime.Now;

            foreach (var detail in details)
            {
                detail.MarkedDateTime = markedDateTime;
                detail.Remark         = detail.Remark ?? "";
            }
            OrderProductionHelper.Instance.Update(details);
            return(Result.GenError <Result>(Error.Success));
        }
        public object PostOrderProduction([FromBody] IEnumerable <OrderProductionDetail> details)
        {
            if (details == null || !details.Any())
            {
                return(Result.GenError <Result>(Error.ParamError));
            }
            if (details.Any(x => x.DeliveryTime == default(DateTime)))
            {
                return(Result.GenError <Result>(Error.OrderProductionNotExist));
            }

            if (details.GroupBy(x => x.DeliveryTime).Any(y => y.Count() > 1))
            {
                return(Result.GenError <Result>(Error.OrderProductionDuplicate));
            }

            var oId   = details.FirstOrDefault()?.OrderId ?? 0;
            var sames = details.Select(x => x.DeliveryTime);

            if (OrderProductionHelper.GetHaveSame(oId, oId, sames))
            {
                return(Result.GenError <Result>(Error.OrderProductionIsExist));
            }

            var userId         = Request.GetIdentityInformation();
            var markedDateTime = DateTime.Now;

            foreach (var detail in details)
            {
                detail.CreateUserId   = userId;
                detail.MarkedDateTime = markedDateTime;
                detail.Remark         = detail.Remark ?? "";
            }
            OrderProductionHelper.Instance.Add(details);
            return(Result.GenError <Result>(Error.Success));
        }
Exemple #3
0
        public object PutOrder([FromBody] IEnumerable <OrderDetail> details)
        {
            if (details == null || !details.Any())
            {
                return(Result.GenError <Result>(Error.ParamError));
            }
            if (details.Any(x => x.Id == 0))
            {
                return(Result.GenError <Result>(Error.OrderNotExist));
            }
            if (details.Any(x => x.ExNumber.IsNullOrEmpty()))
            {
                return(Result.GenError <Result>(Error.OrderNotEmpty));
            }
            if (details.GroupBy(x => x.ExNumber).Any(y => y.Count() > 1))
            {
                return(Result.GenError <Result>(Error.OrderDuplicate));
            }
            if (details.Count(detail => detail.Pros.GroupBy(x => x.DeliveryTime).Any(y => y.Count() > 1)) > 0)
            {
                return(Result.GenError <Result>(Error.OrderProductionDuplicate));
            }

            var userId         = Request.GetIdentityInformation();
            var markedDateTime = DateTime.Now;

            foreach (var detail in details)
            {
                detail.CreateUserId   = userId;
                detail.MarkedDateTime = markedDateTime;
                detail.CreateTime     = markedDateTime;
                detail.List           = detail.Pros?.Select(x => x.ProductionId).Distinct().Join() ?? "";
                detail.DeliveryTime   = detail.Pros?.Max(x => x.DeliveryTime) ?? default(DateTime);
                detail.Count          = detail.Pros?.Sum(x => x.Count) ?? 0;
                detail.Pros           = detail.Pros ?? new List <OrderProductionDetail>();
                foreach (var d in detail.Pros)
                {
                    d.OrderId = detail.Id;
                }
                detail.Remark = detail.Remark ?? "";
            }
            if (details.Count(detail => detail.Pros.GroupBy(x => x.DeliveryTime).Any(y => y.Count() > 1)) > 0)
            {
                return(Result.GenError <Result>(Error.OrderProductionDuplicate));
            }
            var sames = details.Select(x => x.ExNumber);
            var ids   = details.Select(x => x.Id);

            if (OrderHelper.GetHaveSame(sames, ids))
            {
                return(Result.GenError <Result>(Error.OrderIsExist));
            }
            var oIds   = details.Select(x => x.Id);
            var pIds   = details.SelectMany(x => x.PIds);
            var sameDs = details.SelectMany(x => x.Pros.Select(y => y.DeliveryTime));
            var opIds  = details.SelectMany(x => x.Pros.Select(y => y.Id));

            if (OrderProductionHelper.GetHaveSame(oIds, pIds, sameDs, opIds))
            {
                return(Result.GenError <Result>(Error.OrderProductionIsExist));
            }
            var oldOrders = OrderHelper.GetDetails(oIds).ToDictionary(x => x.Id);

            if (oldOrders.Count != oIds.Count())
            {
                return(Result.GenError <Result>(Error.OrderNotExist));
            }

            var upOrders = details.Where(x => ClassExtension.HaveChange(x, oldOrders[x.Id], true));

            if (upOrders.Any())
            {
                OrderHelper.Instance.Update(upOrders);
            }

            var oldOrderProductions = OrderProductionHelper.GetDetails(oIds, pIds);
            var add = new List <OrderProduction>();
            var up  = new List <OrderProduction>();
            var del = new List <OrderProduction>();

            foreach (var detail in details)
            {
                var oldOPs = oldOrderProductions.Where(x => x.OrderId == detail.Id).ToDictionary(x => x.Id);
                del.AddRange(oldOPs.Where(x => detail.Pros.All(y => y.Id != x.Key)).Select(x => x.Value));
                foreach (var pro in detail.Pros)
                {
                    if (oldOPs.ContainsKey(pro.Id))
                    {
                        if (ClassExtension.HaveChange(pro, oldOPs[pro.Id], true))
                        {
                            pro.MarkedDateTime = markedDateTime;
                            pro.Remark         = pro.Remark ?? "";
                            up.Add(pro);
                        }
                    }
                    else
                    {
                        add.Add(pro);
                    }
                }
            }
            if (add.Any())
            {
                OrderProductionHelper.Instance.Add(add);
            }

            if (up.Any())
            {
                OrderProductionHelper.Instance.Update <OrderProduction>(up);
            }

            if (del.Any())
            {
                OrderProductionHelper.Instance.Delete(del.Select(x => x.Id));
            }

            return(Result.GenError <Result>(Error.Success));
        }