コード例 #1
0
        /// <summary>
        /// 计算待出库
        /// </summary>
        /// <param name="tWMStaQuery"></param>
        /// <returns></returns>
        public decimal CalcuToOut(TWMStaQuery tWMStaQuery)
        {
            var details = _db.Instance.Queryable <TWMDeficitMainDbModel, TWMDeficitDetailDbModel, TBMMaterialFileDbModel>(
                (t1, t2, t3) => new object[]
            {
                JoinType.Inner,
                t1.ID == t2.MainId,
                JoinType.Inner,
                t2.MaterialId == t3.ID
            })
                          .Where((t1, t2, t3) => t1.AuditStatus != 2 &&
                                 t2.WarehouseId == tWMStaQuery.WarehouseId &&
                                 t2.MaterialId == tWMStaQuery.MaterialId &&
                                 t1.DeleteFlag == false);

            if (tWMStaQuery.EditID != null && tWMStaQuery.OperateType == OperateEnum.Invertory)
            {
                details = details.Where((t1, t2, t3) => t1.ID != tWMStaQuery.EditID);
            }

            //待出库数量
            decimal ToSendNum = details.Sum((t1, t2, t3) => t2.ActualNumber);

            return(ToSendNum);
        }
コード例 #2
0
        /// <summary>
        /// 获取出库单所有的信息
        /// </summary>
        /// <param name="iMainId"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <ResponseObject <TWMOtherWhSendMainQueryModel> > GetWholeMainData(int iMainId, CurrentUser currentUser)
        {
            var result = await GetMainData(iMainId);

            result.IsShowEdit = (result.AuditStatus != 2 && result.OperatorId == currentUser.UserID) ? true : false;

            for (int i = 0; i < result.ChildList.Count; i++)
            {
                var thisEntity = result.ChildList[i];

                TWMStaQuery tWMStaQuery = new TWMStaQuery();

                tWMStaQuery.MaterialId  = thisEntity.MaterialId;
                tWMStaQuery.WarehouseId = thisEntity.WarehouseId;

                if (result.AuditStatus != 2)
                {
                    tWMStaQuery.OperateType = OperateEnum.Other;
                    tWMStaQuery.EditID      = iMainId;
                }

                var tWMCountModel = _staticInventory.GeTWMCountModel(tWMStaQuery);

                if (result.AuditStatus == 2)
                {
                    thisEntity.AvailableNum = tWMCountModel.AccountNum;
                }
                else
                {
                    thisEntity.AvailableNum = tWMCountModel.AvaiableNum;
                }
            }

            return(ResponseUtil <TWMOtherWhSendMainQueryModel> .SuccessResult(result));
        }
コード例 #3
0
ファイル: SaleAmount.cs プロジェクト: gzyfadmin/PackeageCloud
        /// <summary>
        /// 出入库数量
        /// </summary>
        /// <param name="tWMStaQuery"></param>
        /// <returns></returns>

        public decimal CalcuInAndOut(TWMStaQuery tWMStaQuery)
        {
            decimal tradeNum = 0; //入库和出库的差

            tradeNum = _db.Instance.Queryable <TWMSalesCountDbModel>().Where(p => p.MaterialId == tWMStaQuery.MaterialId && p.WarehouseId == tWMStaQuery.WarehouseId).
                       Sum(p => SqlFunc.IsNull(p.WhNumber, 0) - SqlFunc.IsNull(p.WhSendNumber, 0));

            return(tradeNum);
        }
コード例 #4
0
        /// <summary>
        /// 审核通过后统计当前出库单信息
        /// </summary>
        /// <param name="iMainId"></param>
        private void OtherWhCountAsync(int iMainId, CurrentUser currentUser)
        {
            var mainEntity = _db.Instance.Queryable <TWMProductionMainDbModel>().Where(p => p.ID == iMainId).First();

            //获取出库明细
            var details = _db.Instance.Queryable <TWMProductionDetailDbModel>()
                          .Where(p => p.MainId == iMainId)
                          .ToList();

            //更新出库数量
            var detailList = details.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMProductionCountDbModel
            {
                MaterialId   = p.Key.MaterialId,
                WarehouseId  = p.Key.WarehouseId,
                WhSendNumber = p.Sum(p1 => p1.ActualNum)
            }).ToList();



            var mList = BasicCacheGet.GetMaterial(currentUser);

            foreach (var item in detailList)
            {
                TWMStaQuery tWMStaQuery = new TWMStaQuery();
                tWMStaQuery.EditID      = iMainId;
                tWMStaQuery.MaterialId  = item.MaterialId;
                tWMStaQuery.WarehouseId = item.WarehouseId;
                tWMStaQuery.OperateType = OperateEnum.Product;

                decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum;

                if (AvaiableNum <= 0)
                {
                    var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                    throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量可用量不足");
                }
                if (item.WhSendNumber > AvaiableNum)
                {
                    var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                    throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}");
                }

                var updateFlag = _db.Instance.Updateable(item)
                                 .SetColumns(p => p.WhSendNumber == p.WhSendNumber + item.WhSendNumber)
                                 .Where(p => p.MaterialId == item.MaterialId && p.WarehouseId == item.WarehouseId)
                                 .ExecuteCommand() > 0;
                if (!updateFlag)
                {
                    _db.Instance.Insertable(item).ExecuteCommand();
                }
            }
        }
コード例 #5
0
        //计算期初数量
        private decimal GetPrimeNum(TWMStaQuery tWMStaQuery)
        {
            decimal primeNum = 0;

            var TWMPrimeCountDbList = _db.Instance.Queryable <TWMPrimeCountDbModel>().Where(p => p.MaterialId == tWMStaQuery.MaterialId && p.WarehouseId == tWMStaQuery.WarehouseId).ToList();

            if (TWMPrimeCountDbList.FirstOrDefault() != null)
            {
                return(TWMPrimeCountDbList.FirstOrDefault().PrimeNum);
            }

            return(primeNum);
        }
コード例 #6
0
        /// <summary>
        /// 计算待入库数量
        /// </summary>
        /// <param name="tWMStaQuery"></param>
        /// <returns></returns>
        public decimal CalcuToIn(TWMStaQuery tWMStaQuery)
        {
            var details = _db.Instance.Queryable <TWMProductionWhMainDbModel, TWMProductionWhDetailDbModel, TBMMaterialFileDbModel>((t1, t2, t3) =>
                                                                                                                                    new object[] {
                JoinType.Inner,
                t1.ID == t2.MainId,
                JoinType.Inner,
                t2.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t1.AuditStatus != 2 && t2.WarehouseId == tWMStaQuery.WarehouseId &&
                     t2.MaterialId == tWMStaQuery.MaterialId && t1.DeleteFlag == false
                     );


            //待入库数量
            decimal ToSendNum = details.Sum((t1, t2, t3) => t2.ActualNum);

            return(ToSendNum);
        }
コード例 #7
0
        /// <summary>
        /// 获取统计结果
        /// </summary>
        /// <param name="tWMStaQuery"></param>
        /// <returns></returns>
        public TWMCountModel GeTWMCountModel(TWMStaQuery tWMStaQuery)
        {
            TWMCountModel tWMCountModel = new TWMCountModel()
            {
                WarehouseId = tWMStaQuery.WarehouseId, MaterialId = tWMStaQuery.MaterialId
            };

            tWMCountModel.PrimeNum = GetPrimeNum(tWMStaQuery);

            //待入库数量
            _calcuInventory.ToList().ForEach(x =>
            {
                tWMCountModel.WaitWarehousingNum += x.CalcuToIn(tWMStaQuery);
                tWMCountModel.WaitOutWhNum       += x.CalcuToOut(tWMStaQuery);
                tWMCountModel.InAndOut           += x.CalcuInAndOut(tWMStaQuery);
            });

            tWMCountModel.AccountNum = tWMCountModel.PrimeNum + tWMCountModel.InAndOut;

            tWMCountModel.AvaiableNum = tWMCountModel.AccountNum - tWMCountModel.WaitOutWhNum;

            return(tWMCountModel);
        }
コード例 #8
0
ファイル: SaleAmount.cs プロジェクト: gzyfadmin/PackeageCloud
 /// <summary>
 /// 计算待入库数量
 /// </summary>
 /// <param name="tWMStaQuery"></param>
 /// <returns></returns>
 public decimal CalcuToIn(TWMStaQuery tWMStaQuery)
 {
     return(0);
 }
コード例 #9
0
        /// <summary>
        /// 修改T_WM_OtherWhSendMain数据
        /// </summary>
        /// <param name="requestObject">Put请求参数</param>
        /// <param name="currentUser"></param>
        /// <returns>返回响应结果对象,包括响应代码,修改操作结果</returns>
        public async Task <ResponseObject <TWMOtherWhSendMainQueryModel> > PutAsync(RequestPut <TWMOtherWhSendMainEditModel> requestObject, CurrentUser currentUser)
        {
            var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例

            try
            {
                if (requestObject.PostData == null)
                {
                    return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "PostData不能为null"));
                }
                if (requestObject.PostData.ChildList == null || requestObject.PostData.ChildList.Count < 1)
                {
                    return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "PostData.ChildList至少包含一条数据"));
                }
                //开启事务
                currDb.BeginTran();
                //修改主表信息
                var mainModel = _mapper.Map <TWMOtherWhSendMainDbModel>(requestObject.PostData);
                mainModel.Number = requestObject.PostData.ChildList.Sum(p => p.ActualNumber);
                mainModel.Amount = requestObject.PostData.ChildList.Sum(p => p.Amount);
                await currDb.Updateable(mainModel)
                .UpdateColumns(p => new
                {
                    p.WhSendType,
                    p.WhSendDate,
                    p.Number,
                    p.Amount,
                    p.ReceiptId
                })
                .ExecuteCommandAsync();

                /*
                 * 修改明细逻辑
                 * 1.根据主单ID查询现有明细数据
                 * 2.PostData.ChildList中明细ID <= 0的新增
                 * 3.PostData.ChildList中明细ID > 0的修改
                 * 4.删除不在PostData.CihldList中的数据
                 */
                var detailModels = _mapper.Map <List <TWMOtherWhSendDetailEditModel>,
                                                List <TWMOtherWhSendDetailDbModel> >(requestObject.PostData.ChildList);

                foreach (var item in detailModels)
                {
                    item.MainId = mainModel.ID;
                    if (item.ID <= 0)
                    {
                        await currDb.Insertable(item).ExecuteCommandIdentityIntoEntityAsync();
                    }
                    else
                    {
                        await currDb.Updateable(item).ExecuteCommandAsync();
                    }
                }

                //删除明细数据
                var detailIds = detailModels.Select(p => p.ID).ToList();
                currDb.Deleteable <TWMOtherWhSendDetailDbModel>()
                .Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID)
                .ExecuteCommand();

                #region 检查出库是否超过可用量

                int?iMainId = mainModel.ID;
                var mList   = BasicCacheGet.GetMaterial(currentUser);

                var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel
                {
                    MaterialId   = p.Key.MaterialId,
                    WarehouseId  = p.Key.WarehouseId,
                    WhSendNumber = p.Sum(p1 => p1.ActualNumber)
                }).ToList();

                foreach (var item in details)
                {
                    TWMStaQuery tWMStaQuery = new TWMStaQuery();
                    tWMStaQuery.EditID      = iMainId;
                    tWMStaQuery.MaterialId  = item.MaterialId;
                    tWMStaQuery.WarehouseId = item.WarehouseId;
                    tWMStaQuery.OperateType = OperateEnum.Other;

                    decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum;
                    if (AvaiableNum < 0)
                    {
                        var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足");
                    }

                    if (item.WhSendNumber > AvaiableNum)
                    {
                        var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}");
                    }
                }

                #endregion

                var returnData = await GetMainData(mainModel.ID);

                //提交事务
                currDb.CommitTran();

                //返回执行结果
                return(ResponseUtil <TWMOtherWhSendMainQueryModel> .SuccessResult(returnData));
            }
            catch (Exception ex)
            {
                //回滚事务
                currDb.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, ex.Message));
            }
        }
コード例 #10
0
        /// <summary>
        /// 新增T_WM_OtherWhSendMain数据
        /// </summary>
        /// <param name="requestObject">Post请求参数</param>
        /// <param name="currentUser"></param>
        /// <returns>返回响应结果对象,包括响应代码,新增操作结果</returns>
        public async Task <ResponseObject <TWMOtherWhSendMainQueryModel> > PostAsync(RequestPost <TWMOtherWhSendMainAddModel> requestObject, CurrentUser currentUser)
        {
            var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例

            try
            {
                //没有新增数据,返回错误信息
                if (requestObject.PostData == null)
                {
                    return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "PostData不能为null"));
                }
                //开启事务
                currDb.BeginTran();

                #region 检查出库是否超过可用量

                int?iMainId = null;
                var mList   = BasicCacheGet.GetMaterial(currentUser);

                var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel
                {
                    MaterialId   = p.Key.MaterialId,
                    WarehouseId  = p.Key.WarehouseId,
                    WhSendNumber = p.Sum(p1 => p1.ActualNumber)
                }).ToList();

                foreach (var item in details)
                {
                    TWMStaQuery tWMStaQuery = new TWMStaQuery();
                    tWMStaQuery.EditID      = iMainId;
                    tWMStaQuery.MaterialId  = item.MaterialId;
                    tWMStaQuery.WarehouseId = item.WarehouseId;

                    decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum;
                    if (AvaiableNum < 0)
                    {
                        var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足");
                    }

                    if (item.WhSendNumber > AvaiableNum)
                    {
                        var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}");
                    }
                }

                #endregion


                //插入主表数据
                var mapMainModel = _mapper.Map <TWMOtherWhSendMainDbModel>(requestObject.PostData);
                mapMainModel.CompanyId  = currentUser.CompanyID;
                mapMainModel.OperatorId = currentUser.UserID;
                mapMainModel.Number     = requestObject.PostData.ChildList.Sum(p => p.ActualNumber);
                mapMainModel.Amount     = requestObject.PostData.ChildList.Sum(p => p.Amount);

                var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync();

                //更新明细表外键ID值
                requestObject.PostData.ChildList.ForEach(p => p.MainId = mainId);
                //插入从表数据
                var mapDetailModelList = _mapper.Map <List <TWMOtherWhSendDetailAddModel>, List <TWMOtherWhSendDetailDbModel> >(requestObject.PostData.ChildList);
                var result             = await currDb.Insertable(mapDetailModelList).ExecuteCommandAsync() > 0;

                var returnData = await GetMainData(mainId);

                //提交事务
                currDb.CommitTran();
                //返回执行结果
                return(result ? ResponseUtil <TWMOtherWhSendMainQueryModel> .SuccessResult(returnData) : ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "新增数据失败!"));
            }
            catch (Exception ex)
            {
                //回滚事务
                currDb.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, ex.Message));
            }
        }
コード例 #11
0
        /// <summary>
        /// 修改T_WM_SalesMain数据
        /// </summary>
        /// <param name="requestObject">Put请求参数</param>
        /// <returns>返回响应结果对象,包括响应代码,修改操作结果</returns>
        public async Task <ResponseObject <TWMSalesMainQueryModel> > PutAsync(RequestPut <TWMSalesMainEditModel> requestObject, CurrentUser currentUser)
        {
            var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例

            try
            {
//#if DEBUG

//#else
//                     return null;
//#endif

                if (requestObject.PostData == null)
                {
                    return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, "PostData不能为null"));
                }
                if (requestObject.PostData.ChildList == null || requestObject.PostData.ChildList.Count < 1)
                {
                    return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, "PostData.ChildList至少包含一条数据"));
                }
                //开启事务
                currDb.BeginTran();

                //修改主表信息
                var mainModel = _mapper.Map <TWMSalesMainDbModel>(requestObject.PostData);
                mainModel.Number = requestObject.PostData.ChildList.Sum(p => p.ActualNum);
                mainModel.Amount = requestObject.PostData.ChildList.Sum(p => p.Amount);

                var mainFlag = await currDb.Updateable(mainModel).UpdateColumns(p => new
                {
                    p.WhSendDate,
                    p.Number,
                    p.Amount,
                    p.SendId,
                    p.WhAdminId,
                    p.ReceiptAddress
                }).ExecuteCommandAsync() > 0;

                /*
                 * 修改明细逻辑
                 * 1.根据主单ID查询现有明细数据
                 * 2.PostData.ChildList中明细ID <= 0的新增
                 * 3.PostData.ChildList中明细ID > 0的修改
                 * 4.删除不在PostData.CihldList中的数据
                 */
                var detailFlag   = true;
                var detailModels = _mapper.Map <List <TWMSalesDetailEditModel>,
                                                List <TWMSalesDetailDbModel> >(requestObject.PostData.ChildList);

                var mainEntity = _db.Instance.Queryable <TWMSalesMainDbModel>().Where(p => p.ID == mainModel.ID).First();

                var listItem = _db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Where(t => t.MainId == mainEntity.SourceId).ToList();

                var materList = BasicCacheGet.GetMaterial(currentUser);

                List <TSSMSalesOrderDetailDbModel> toEdit = new List <TSSMSalesOrderDetailDbModel>();

                foreach (var item in detailModels)
                {
                    if (!detailFlag)
                    {
                        break;
                    }
                    item.MainId = mainModel.ID;
                    var procudeMaterial = listItem.Where(p => p.ID == item.SalesOrderDetailId).FirstOrDefault();//销售合同明细
                    var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault();

                    if (!detailFlag)
                    {
                        break;
                    }
                    item.MainId = mainModel.ID;

                    if (item.ID <= 0) //新增
                    {
                        decimal proNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum);

                        decimal wareTransNum = UnitChange.TranserUnit(me, UnitType.Sales, UnitType.Warehouse, procudeMaterial.TransferNum);//可转的数量(仓库单位)
                        if (item.ActualNum > wareTransNum)
                        {
                            throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{wareTransNum }");
                        }
                        else if (item.ActualNum == wareTransNum)
                        {
                            item.SalesOrderActualNum    = procudeMaterial.TransferNum;
                            procudeMaterial.TransferNum = 0;
                        }
                        else
                        {
                            if (proNum > procudeMaterial.TransferNum)
                            {
                                item.SalesOrderActualNum    = procudeMaterial.TransferNum;
                                procudeMaterial.TransferNum = 0;
                            }
                            else
                            {
                                item.SalesOrderActualNum    = proNum;
                                procudeMaterial.TransferNum = procudeMaterial.TransferNum - proNum;
                            }
                        }
                        toEdit.Add(procudeMaterial);
                        //decimal proNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum);

                        //var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault();
                        //if (m != null)
                        //{
                        //    if (m.TransferNum < proNum)
                        //    {
                        //        throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{proNum }");
                        //    }
                        //    m.TransferNum = m.TransferNum - proNum;

                        //    toEdit.Add(m);
                        //}
                    }
                    else //修改
                    {
                        var dModel = _db.Instance.Queryable <TWMSalesDetailDbModel>().Where(p => p.ID == item.ID).First();
                        if (dModel != null)
                        {
                            if (dModel.ActualNum != item.ActualNum)
                            {
                                #region

                                ////原出库数量(销售单位)
                                //decimal oldActualNumPro = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, dModel.ActualNum);
                                //decimal TransNum = procudeMaterial.TransferNum + item.SalesOrderActualNum; //可转数量(生产单位)
                                ////现出库数量(销售单位)
                                //decimal nowActualNumPro = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum);


                                //if (item.ActualNum > nowActualNumPro)
                                //{
                                //    throw new Exception($"物料代码{me.MaterialCode} 入库数量不能大于{nowActualNumPro }");
                                //}
                                //else if (item.ActualNum == nowActualNumPro)
                                //{
                                //    item.SalesOrderActualNum = TransNum;
                                //    procudeMaterial.TransferNum = 0;
                                //}
                                //else
                                //{
                                //    if (oldActualNumPro > TransNum)
                                //    {
                                //        item.SalesOrderActualNum = TransNum;
                                //        procudeMaterial.TransferNum = 0;
                                //    }
                                //    else
                                //    {
                                //        item.SalesOrderActualNum = oldActualNumPro;
                                //        procudeMaterial.TransferNum = TransNum - oldActualNumPro;
                                //    }
                                //}

                                #endregion

                                decimal saleNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum); //实际转出数量(销售单位)

                                decimal TransNum = procudeMaterial.TransferNum + dModel.SalesOrderActualNum;                      //可转数量(生产单位)

                                decimal wareTransNum = UnitChange.TranserUnit(me, UnitType.Sales, UnitType.Warehouse, TransNum);  //可转的数量(仓库单位)

                                if (item.ActualNum > wareTransNum)
                                {
                                    throw new Exception($"物料代码{me.MaterialCode} 入库数量不能大于{wareTransNum }");
                                }
                                else if (item.ActualNum == wareTransNum)
                                {
                                    item.SalesOrderActualNum    = TransNum;
                                    procudeMaterial.TransferNum = 0;
                                }
                                else
                                {
                                    if (saleNum > TransNum)
                                    {
                                        item.SalesOrderActualNum    = TransNum;
                                        procudeMaterial.TransferNum = 0;
                                    }
                                    else
                                    {
                                        item.SalesOrderActualNum    = saleNum;
                                        procudeMaterial.TransferNum = TransNum - saleNum;
                                    }
                                }

                                toEdit.Add(procudeMaterial);
                                //var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault();
                                //if (m != null)
                                //{
                                //    if (m.TransferNum + oldActualNumPro < nowActualNumPro)
                                //    {
                                //        throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{m.TransferNum + oldActualNumPro }");
                                //    }
                                //    m.TransferNum = m.TransferNum + oldActualNumPro - nowActualNumPro;

                                //    toEdit.Add(m);
                                //}
                            }
                            else
                            {
                                item.SalesOrderActualNum = dModel.SalesOrderActualNum;
                            }
                        }
                    }



                    //新增或修改明细数据
                    detailFlag = item.ID <= 0
                        ? await currDb.Insertable(item).ExecuteCommandIdentityIntoEntityAsync()
                        : await currDb.Updateable(item).ExecuteCommandAsync() > 0;
                }


                //删除明细数据
                if (detailFlag)
                {
                    var detailIds    = detailModels.Select(p => p.ID).ToList();
                    var whDetailList = currDb.Queryable <TWMSalesDetailDbModel>().Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID).ToList();

                    foreach (var item in whDetailList)
                    {
                        var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        //decimal proNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum);

                        var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault();
                        if (m != null)
                        {
                            m.TransferNum = m.TransferNum + item.SalesOrderActualNum;
                            toEdit.Add(m);
                        }
                    }

                    detailFlag = currDb.Deleteable <TWMSalesDetailDbModel>()
                                 .Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID)
                                 .ExecuteCommand() >= 0;
                }

                #region 检查出库是否超过可用量

                int?iMainId = mainModel.ID;
                var mList   = BasicCacheGet.GetMaterial(currentUser);

                var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel
                {
                    MaterialId   = p.Key.MaterialId,
                    WarehouseId  = p.Key.WarehouseId,
                    WhSendNumber = p.Sum(p1 => p1.ActualNum)
                }).ToList();

                foreach (var item in details)
                {
                    TWMStaQuery tWMStaQuery = new TWMStaQuery();
                    tWMStaQuery.EditID      = iMainId;
                    tWMStaQuery.MaterialId  = item.MaterialId;
                    tWMStaQuery.WarehouseId = item.WarehouseId;

                    decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum;
                    if (AvaiableNum < 0)
                    {
                        var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足");
                    }
                    if (item.WhSendNumber > AvaiableNum)
                    {
                        var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}");
                    }
                }

                #endregion

                if (toEdit.Count() > 0)
                {
                    _db.Instance.Updateable(toEdit).ExecuteCommand();
                }

                if (!_db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Any(p => p.TransferNum > 0 && p.MainId == mainEntity.SourceId))
                {
                    _db.Instance.Updateable <TSSMSalesOrderMainDbModel>().Where(p => p.ID == mainEntity.SourceId).SetColumns(p => p.TransferStatus == false).ExecuteCommand();
                }
                else
                {
                    _db.Instance.Updateable <TSSMSalesOrderMainDbModel>().Where(p => p.ID == mainEntity.SourceId).SetColumns(p => p.TransferStatus == true).ExecuteCommand();
                }

                //提交事务
                currDb.CommitTran();

                var resultTemp = await GetWholeMainData(requestObject.PostData.ID, currentUser);

                return(ResponseUtil <TWMSalesMainQueryModel> .SuccessResult(resultTemp.Data));
            }
            catch (Exception ex)
            {
                //回滚事务
                currDb.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, ex.Message));
            }
        }
コード例 #12
0
        /// <summary>
        /// 新增T_WM_SalesMain数据
        /// </summary>
        /// <param name="requestObject">Post请求参数</param>
        /// <returns>返回响应结果对象,包括响应代码,新增操作结果</returns>
        public async Task <ResponseObject <TWMSalesMainQueryModel> > PostAsync(RequestPost <TWMSalesMainAddModel> requestObject, CurrentUser currentUser)
        {
            var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例

            try
            {
                //没有新增数据,返回错误信息
                if (requestObject.PostData == null)
                {
                    return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, "PostData不能为null"));
                }
                //开启事务
                currDb.BeginTran();
                //插入主表数据
                var mapMainModel = _mapper.Map <TWMSalesMainDbModel>(requestObject.PostData);
                mapMainModel.CompanyId   = currentUser.CompanyID;
                mapMainModel.OperatorId  = currentUser.UserID;
                mapMainModel.Number      = requestObject.PostData.ChildList.Sum(p => p.ActualNum);
                mapMainModel.Amount      = requestObject.PostData.ChildList.Sum(p => p.Amount);
                mapMainModel.AuditStatus = 0;
                var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync();

                //更新明细表外键ID值
                requestObject.PostData.ChildList.ForEach(p => p.MainId = mainId);
                //插入从表数据
                var mapDetailModelList = _mapper.Map <List <TWMSalesDetailAddModel>, List <TWMSalesDetailDbModel> >(requestObject.PostData.ChildList);

                #region 检查出库是否超过可用量

                int?iMainId   = mainId;
                var materList = BasicCacheGet.GetMaterial(currentUser);

                var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel
                {
                    MaterialId   = p.Key.MaterialId,
                    WarehouseId  = p.Key.WarehouseId,
                    WhSendNumber = p.Sum(p1 => p1.ActualNum)
                }).ToList();

                foreach (var item in details)
                {
                    TWMStaQuery tWMStaQuery = new TWMStaQuery();
                    tWMStaQuery.EditID      = iMainId;
                    tWMStaQuery.MaterialId  = item.MaterialId;
                    tWMStaQuery.WarehouseId = item.WarehouseId;

                    decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum;
                    if (AvaiableNum < 0)
                    {
                        var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足");
                    }
                    if (item.WhSendNumber > AvaiableNum)
                    {
                        var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault();
                        throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}");
                    }
                }

                #endregion
                #region 处理销售单的可转单数量


                var listItem = _db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Where(t => t.MainId == mapMainModel.SourceId).ToList();//来源单据


                List <TSSMSalesOrderDetailDbModel> toEdit = new List <TSSMSalesOrderDetailDbModel>();

                foreach (var item in mapDetailModelList)
                {
                    var procudeMaterial = listItem.Where(p => p.ID == item.SalesOrderDetailId).FirstOrDefault(); //销售合同明细

                    var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault();                     //物料

                    decimal proNum       = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum);
                    decimal wareTransNum = UnitChange.TranserUnit(me, UnitType.Sales, UnitType.Warehouse, procudeMaterial.TransferNum);//可转的数量(仓库单位)

                    if (item.ActualNum > wareTransNum)
                    {
                        throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{wareTransNum }");
                    }
                    else if (item.ActualNum == wareTransNum)
                    {
                        item.SalesOrderActualNum    = procudeMaterial.TransferNum;
                        procudeMaterial.TransferNum = 0;
                    }
                    else
                    {
                        if (proNum > procudeMaterial.TransferNum)
                        {
                            item.SalesOrderActualNum    = procudeMaterial.TransferNum;
                            procudeMaterial.TransferNum = 0;
                        }
                        else
                        {
                            item.SalesOrderActualNum    = proNum;
                            procudeMaterial.TransferNum = procudeMaterial.TransferNum - proNum;
                        }
                    }

                    toEdit.Add(procudeMaterial);
                    //var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault();
                    //if (m != null)
                    //{
                    //    if (m.TransferNum < proNum)
                    //    {
                    //        throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{proNum }");
                    //    }
                    //    m.TransferNum = m.TransferNum - proNum;

                    //    toEdit.Add(m);
                    //}
                }

                if (toEdit.Count() > 0)
                {
                    _db.Instance.Updateable(toEdit).ExecuteCommand();
                }

                if (!_db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Any(p => p.TransferNum > 0 && p.MainId == mapMainModel.SourceId))
                {
                    _db.Instance.Updateable <TSSMSalesOrderMainDbModel>().Where(p => p.ID == mapMainModel.SourceId).SetColumns(p => p.TransferStatus == false).ExecuteCommand();
                }

                #endregion

                var result = await currDb.Insertable(mapDetailModelList).ExecuteCommandAsync() > 0;

                //提交事务
                currDb.CommitTran();
                //返回执行结果

                var resultTemp = await GetWholeMainData(mainId, currentUser);

                return(ResponseUtil <TWMSalesMainQueryModel> .SuccessResult(resultTemp.Data));
            }
            catch (Exception ex)
            {
                //回滚事务
                currDb.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, ex.Message));
            }
        }
コード例 #13
0
        public async Task <ResponseObject <TWMSalesMainQueryModel> > GetWholeMainData(int iMainId, CurrentUser currentUser)
        {
            try
            {
                RequestGet requestGet = new RequestGet()
                {
                    IsPaging        = false,
                    QueryConditions = new List <QueryCondition>()
                    {
                        new QueryCondition()
                        {
                            Column = "Id", Condition = ConditionEnum.Equal, Content = iMainId.ToString()
                        }
                    }
                };

                var allMain = await GetMainListAsync(requestGet, currentUser);


                var mainModel = allMain.Data.FirstOrDefault();



                var detailModelsSql = _db.Instance.Queryable <TWMSalesDetailDbModel, TBMMaterialFileDbModel, TBMDictionaryTypeDbModel,
                                                              TBMDictionaryDbModel, TBMDictionaryDbModel, TBMDictionaryDbModel, TWMSalesMainDbModel, TSSMSalesOrderDetailDbModel
                                                              , TBMPackageDbModel, TMMColorSolutionMainDbModel>(
                    (t, t0, t1, t2, t3, t4, t5, t6, t7, t8) => new object[]
                {
                    JoinType.Left, t.MaterialId == t0.ID,
                    JoinType.Left, t0.MaterialTypeId == t1.ID,
                    JoinType.Left, t0.ColorId == t2.ID,
                    JoinType.Left, t0.BaseUnitId == t3.ID,
                    JoinType.Left, t0.WarehouseUnitId == t4.ID,
                    JoinType.Inner, t.MainId == t5.ID,
                    JoinType.Inner, t.SalesOrderDetailId == t6.ID,
                    JoinType.Left, t0.PackageID == t7.ID,
                    JoinType.Left, t6.ColorSolutionId == t8.ID
                })
                                      .Select((t, t0, t1, t2, t3, t4, t5, t6, t7, t8) => new TWMSalesDetailQueryModel
                {
                    ID                  = t.ID,
                    MainId              = t.MainId,
                    MaterialId          = t.MaterialId,
                    MaterialName        = t0.MaterialName,
                    MaterialCode        = t0.MaterialCode,
                    WarehouseId         = t.WarehouseId,
                    ActualNum           = t.ActualNum,
                    SalesOrderActualNum = t.SalesOrderActualNum,
                    SalesOrderDetailId  = t.SalesOrderDetailId,
                    UnitPrice           = t.UnitPrice,
                    Amount              = t.Amount,
                    MaterialTypeId      = t0.MaterialTypeId,
                    MaterialTypeName    = t1.TypeName,
                    ColorId             = t0.ColorId,
                    ColorName           = t2.DicValue,
                    BaseUnitId          = t0.BaseUnitId,
                    BaseUnitName        = t3.DicValue,
                    WarehouseUnitId     = t0.WarehouseUnitId,
                    WarehouseUnitName   = SqlFunc.IsNullOrEmpty(t4.ID) ? t3.DicValue : t4.DicValue,
                    SalesUnitId         = t0.SalesUnitId,
                    SalesRate           = t0.SalesRate,
                    WarehouseRate       = t0.WarehouseRate,
                    Spec                = t0.Spec,
                    Remark              = t.Remark,
                    SalesNum            = t6.SalesNum,
                    ShouldSaleNum       = t6.TransferNum,
                    PackageCode         = t7.DicCode,
                    PackageName         = t7.DicValue,
                    ColorSolutionName   = t8.SolutionCode
                })
                                      .Where(t => t.MainId == iMainId).OrderBy(t => t.ID);

                var detailModels = await detailModelsSql.ToListAsync();

                //物料
                List <TBMMaterialFileCacheModel> mList = BasicCacheGet.GetMaterial(currentUser);

                detailModels.ForEach(p =>
                {
                    TBMMaterialFileCacheModel me = mList.Where(x => x.ID == p.MaterialId).FirstOrDefault();
                    if (me == null)
                    {
                        throw new Exception($"物料{p.MaterialId},不存在");
                    }

                    TWMStaQuery tWMStaQuery = new TWMStaQuery();
                    tWMStaQuery.MaterialId  = p.MaterialId;
                    tWMStaQuery.WarehouseId = p.WarehouseId;


                    if (mainModel.AuditStatus != 2)
                    {
                        //p.WaitNum = p.WaitNum - p.ActualNum;

                        tWMStaQuery.EditID      = mainModel.ID;
                        tWMStaQuery.OperateType = OperateEnum.Sale;
                        // p.ShouldNum = p.SalesOrderActualNum + p.ActualNum;
                        p.ShouldSaleNum = p.ShouldSaleNum + p.SalesOrderActualNum;
                    }


                    p.SalesNumOnInventory = GetInveroryFromSaleNum(me, p.SalesNum);

                    p.AvailableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum;
                });

                mainModel.ChildList = detailModels;
                return(ResponseUtil <TWMSalesMainQueryModel> .SuccessResult(mainModel));
            }
            catch (Exception ex)
            {
                return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null));
            }
        }
コード例 #14
0
        public async Task <ResponseObject <TWMProductionMainQueryModel> > GetWholeMainData(int iMainId, CurrentUser currentUser)
        {
            try
            {
                RequestGet requestGet = new RequestGet()
                {
                    IsPaging        = false,
                    QueryConditions = new List <QueryCondition>()
                    {
                        new QueryCondition()
                        {
                            Column = "Id", Condition = ConditionEnum.Equal, Content = iMainId.ToString()
                        }
                    }
                };

                var allMain = await GetMainListAsync(requestGet, currentUser);


                var mainModel = allMain.Data.FirstOrDefault();

                var materList = BasicCacheGet.GetMaterial(currentUser);
                var dicList   = BasicCacheGet.GetDic(currentUser);

                var detailModels = await _db.Instance.Queryable <TWMProductionDetailDbModel, TWMProductionMainDbModel,
                                                                 TBMMaterialFileDbModel, TMMPickApplyMainDbModel, TMMPickApplyDetailDbModel>(
                    (t, t0, t1, t2, t3) => new object[] {
                    JoinType.Inner, t.MainId == t0.ID,
                    JoinType.Inner, t.MaterialId == t1.ID,
                    JoinType.Inner, t0.SourceId == t2.ID,
                    JoinType.Inner, t.PickApplyDetailId == t3.ID
                }
                    ).Select((t, t0, t1, t2, t3) => new TWMProductionDetailQueryModel
                {
                    ID                = t.ID,
                    MainId            = t.MainId,
                    MaterialId        = t.MaterialId,
                    MaterialName      = t1.MaterialName,
                    MaterialCode      = t1.MaterialCode,
                    WarehouseId       = t.WarehouseId,
                    ActualNum         = t.ActualNum,
                    PickActualNum     = t.PickActualNum,
                    PickApplyDetailId = t.PickApplyDetailId,
                    UnitPrice         = t.UnitPrice,
                    Amount            = t.Amount,
                    MaterialTypeId    = t1.MaterialTypeId,
                    //MaterialTypeName = t1.TypeName,
                    ColorId = t1.ColorId,
                    //ColorName = t2.DicValue,
                    BaseUnitId = t1.BaseUnitId,
                    //BaseUnitName = t3.DicValue,
                    WarehouseUnitId = t1.WarehouseUnitId,
                    //WarehouseUnitName = t4.DicValue,
                    WarehouseRate = t1.WarehouseRate,
                    ProduceRate   = t1.ProduceRate,
                    ProduceUnitId = t1.ProduceUnitId,
                    //ProduceUnitName = t5.DicValue,
                    Spec     = t1.Spec,
                    Remark   = t.Remark,
                    TransNum = t3.TransNum,
                })
                                   .Where(t => t.MainId == iMainId)
                                   .ToListAsync();


                detailModels.ForEach((x) => {
                    var thisMaterial = materList.Where(p => p.ID == x.MaterialId).FirstOrDefault();

                    if (mainModel.AuditStatus != 2)
                    {
                        x.TransNum = x.TransNum + x.PickActualNum;
                    }

                    x.MaterialTypeName  = thisMaterial.MaterialTypeName;
                    x.ColorName         = thisMaterial.ColorName;
                    x.BaseUnitName      = thisMaterial.BaseUnitName;
                    x.WarehouseUnitName = thisMaterial.WarehouseUnitName;
                    x.ProduceUnitName   = thisMaterial.ProduceUnitName;


                    TWMStaQuery tWMStaQuery = new TWMStaQuery();
                    tWMStaQuery.MaterialId  = x.MaterialId;
                    tWMStaQuery.WarehouseId = x.WarehouseId;

                    if (mainModel.AuditStatus != 2)
                    {
                        tWMStaQuery.EditID      = mainModel.ID;
                        tWMStaQuery.OperateType = OperateEnum.Product;
                    }

                    x.AvailableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum;
                });


                mainModel.ChildList = detailModels;
                return(ResponseUtil <TWMProductionMainQueryModel> .SuccessResult(mainModel));
            }
            catch (Exception ex)
            {
                return(ResponseUtil <TWMProductionMainQueryModel> .FailResult(null));
            }
        }