コード例 #1
0
ファイル: MRPService.cs プロジェクト: gzyfadmin/PackeageCloud
        /// <summary>
        /// 采购完成后重新领料
        /// </summary>
        /// <param name="orderID"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <ResponseObject <NOEntity> > RePick(int orderID, CurrentUser currentUser)
        {
            try
            {
                TMMProductionOrderMainDbModel tMMProductionOrderMainDbModel = _db.Instance.Queryable <TMMProductionOrderMainDbModel>().Where(p => p.ID == orderID).First();

                if (tMMProductionOrderMainDbModel.IsPickAll == true)
                {
                    throw new Exception("已全部转领料");
                }

                TMMPurchaseApplyMainDbModel purchaseEntity = await _db.Instance.Queryable <TMMPurchaseApplyMainDbModel>().Where(p => p.SourceId == orderID && p.CompanyId == currentUser.CompanyID && p.DeleteFlag == false).FirstAsync();

                NOEntity nOEntity = new NOEntity();
                if (purchaseEntity == null)
                {
                    throw new Exception("还没采购,或者无需采购");
                }

                if (purchaseEntity.TransferFlag == true)
                {
                    throw new Exception("采购流程未完成");
                }
                else
                {
                    int producePurchaseId = purchaseEntity.ID;
                    if (_db.Instance.Queryable <TPSMPurchaseOrderMainDbModel>().Any(p => p.DeleteFlag == false && p.TransferStatus == true && p.SourceId == purchaseEntity.ID))
                    {
                        throw new Exception("采购流程未完成");
                    }
                    var allTWMPurchase = _db.Instance.Queryable <TWMPurchaseDetailDbModel, TWMPurchaseMainDbModel>((t, t1) => new object[] { JoinType.Inner, t.MainId == t1.ID }).
                                         Where((t, t1) => t1.DeleteFlag == false && SqlFunc.Subqueryable <TPSMPurchaseOrderMainDbModel>().
                                               Where(p1 => p1.SourceId == producePurchaseId && t1.SourceId == p1.ID).Any()).Select((t, t1) => new { Main = t1, Deatail = t }).ToList();

                    if (allTWMPurchase.Any(p => p.Main.AuditStatus != 2))
                    {
                        throw new Exception("采购流程未完成");
                    }
                    else
                    {
                        var basicMe  = BasicCacheGet.GetMaterial(currentUser);
                        var groupSum = allTWMPurchase.Select(p => p.Deatail).GroupBy(x => x.MaterialId);

                        List <TMMPickApplyDetailDbModel> PickApplyList = new List <TMMPickApplyDetailDbModel>();
                        foreach (var item in groupSum)
                        {
                            var key          = item.Key;
                            var itemDeatails = item.ToList();
                            var firstItem    = itemDeatails.FirstOrDefault();

                            decimal total = item.Sum(p => p.ActualNum);
                            var     me    = basicMe.Where(p => p.ID == item.Key).FirstOrDefault();

                            decimal ProduceTotal = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Produce, total);

                            TMMPickApplyDetailDbModel ApplyDetail = new TMMPickApplyDetailDbModel();
                            ApplyDetail.ApplyNum   = ProduceTotal;
                            ApplyDetail.MaterialId = key;
                            ApplyDetail.TransNum   = ProduceTotal;
                            PickApplyList.Add(ApplyDetail);
                        }

                        if (PickApplyList.Count() > 0)
                        {
                            TMMPickApplyMainDbModel tMMPickApplyMainDbModel = new TMMPickApplyMainDbModel();
                            tMMPickApplyMainDbModel.DeleteFlag = false;
                            tMMPickApplyMainDbModel.SourceId   = orderID;
                            //tMMPickApplyMainDbModel.PickNo = OrderGenerator.Generator(OrderEnum.PMR, currentUser.CompanyID);
                            string code = _codeMakers.Where(p => p.ProvideName == OrderEnum.PMR.GetDescription()).FirstOrDefault()?.MakeNo(currentUser.CompanyID);
                            tMMPickApplyMainDbModel.PickNo       = code;
                            tMMPickApplyMainDbModel.ApplyDate    = DateTime.Now;
                            tMMPickApplyMainDbModel.OperatorId   = currentUser.UserID;
                            tMMPickApplyMainDbModel.OperatorTime = DateTime.Now;
                            tMMPickApplyMainDbModel.AuditStatus  = 2;
                            tMMPickApplyMainDbModel.CompanyId    = currentUser.CompanyID;
                            tMMPickApplyMainDbModel.TransferFlag = true;

                            int mId = _db.Instance.Insertable(tMMPickApplyMainDbModel).ExecuteReturnIdentity();

                            PickApplyList.ForEach((x) =>
                            {
                                x.MainId = mId;
                            });

                            _db.Instance.Insertable(PickApplyList).ExecuteCommand();

                            _db.Instance.Updateable <TMMProductionOrderMainDbModel>().SetColumns(p => new TMMProductionOrderMainDbModel {
                                IsPickAll = true
                            }).Where(p => p.ID == orderID).ExecuteCommand();

                            nOEntity.ID = tMMPickApplyMainDbModel.ID;
                            nOEntity.NO = tMMPickApplyMainDbModel.PickNo;
                        }
                    }
                }

                _db.Instance.CommitTran();
                return(ResponseUtil <NOEntity> .SuccessResult(nOEntity));
            }
            catch (Exception ex)
            {
                _db.Instance.RollbackTran();
                return(ResponseUtil <NOEntity> .FailResult(null, ex.Message));
            }
        }
コード例 #2
0
ファイル: MRPService.cs プロジェクト: gzyfadmin/PackeageCloud
        /// <summary>
        /// 转领料单
        /// </summary>
        /// <returns></returns>
        public async Task <ResponseObject <NOEntity> > TransPick(int orderID, CurrentUser currentUser)
        {
            try
            {
                _db.Instance.BeginTran();

                NOEntity nOEntity = new NOEntity();
                TMMProductionOrderMainDbModel mainEntity = _db.Instance.Queryable <TMMProductionOrderMainDbModel>().Where(p => p.ID == orderID &&
                                                                                                                          p.CompanyId == currentUser.CompanyID && p.IsPick == true).First();
                if (mainEntity == null)
                {
                    return(ResponseUtil <NOEntity> .FailResult(null, "生产订单不存在,或者已转领料单"));
                }

                if (mainEntity.MRPStatus == false)
                {
                    return(ResponseUtil <NOEntity> .FailResult(null, "还没算料,无法转单"));
                }

                var Allmaterial = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID).ToList();

                List <TMMPickApplyDetailDbModel>       PickApplyList  = new List <TMMPickApplyDetailDbModel>();
                List <TMMProductionOrderBOMSumDbModel> productionList = new List <TMMProductionOrderBOMSumDbModel>();
                foreach (var item in Allmaterial)
                {
                    if (item.PickNum > 0) //领料
                    {
                        TMMPickApplyDetailDbModel ApplyDetail = new TMMPickApplyDetailDbModel();
                        ApplyDetail.ApplyNum   = item.PickNum;
                        ApplyDetail.MaterialId = item.MaterialId;
                        ApplyDetail.TransNum   = item.PickNum;
                        PickApplyList.Add(ApplyDetail);

                        item.PickTransNum = item.PickNum;
                        productionList.Add(item); //BOM 已转领料单数量
                    }
                }

                if (PickApplyList.Count() > 0)
                {
                    TMMPickApplyMainDbModel tMMPickApplyMainDbModel = new TMMPickApplyMainDbModel();
                    tMMPickApplyMainDbModel.DeleteFlag = false;
                    tMMPickApplyMainDbModel.SourceId   = orderID;

                    string code = _codeMakers.Where(p => p.ProvideName == OrderEnum.PMR.GetDescription()).FirstOrDefault()?.MakeNo(currentUser.CompanyID);
                    tMMPickApplyMainDbModel.PickNo       = code;
                    tMMPickApplyMainDbModel.ApplyDate    = DateTime.Now;
                    tMMPickApplyMainDbModel.OperatorId   = currentUser.UserID;
                    tMMPickApplyMainDbModel.OperatorTime = DateTime.Now;
                    tMMPickApplyMainDbModel.AuditStatus  = 2;
                    tMMPickApplyMainDbModel.CompanyId    = currentUser.CompanyID;
                    tMMPickApplyMainDbModel.TransferFlag = true;


                    int mId = _db.Instance.Insertable(tMMPickApplyMainDbModel).ExecuteReturnIdentity();

                    PickApplyList.ForEach((x) =>
                    {
                        x.MainId = mId;
                    });

                    _db.Instance.Insertable(PickApplyList).ExecuteCommand();

                    nOEntity.ID = mId;
                    nOEntity.NO = tMMPickApplyMainDbModel.PickNo;
                }

                if (productionList.Count() > 0)
                {
                    _db.Instance.Updateable(productionList).UpdateColumns(p => new { p.PickTransNum }).ExecuteCommand();
                }

                mainEntity.IsPick = false;
                _db.Instance.Updateable <TMMProductionOrderMainDbModel>(mainEntity).UpdateColumns(p => new { p.IsPick }).ExecuteCommand();

                _db.Instance.CommitTran();
                return(ResponseUtil <NOEntity> .SuccessResult(nOEntity));
            }
            catch (Exception ex)
            {
                _db.Instance.RollbackTran();
                return(ResponseUtil <NOEntity> .FailResult(null, ex.Message));
            }
        }