Beispiel #1
0
        /// <summary>
        /// 修改T_Tenants数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,修改操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <TTenantsEditModel, bool> > ModifyAsync(RequestObject <TTenantsEditModel> requestObject)
        {
            try
            {
                //执行结果
                var result = false;


                //没有修改信息,返回错误信息
                if (requestObject.PostDataList == null && requestObject.PostData == null)
                {
                    return(ResponseUtil <TTenantsEditModel, bool> .FailResult(requestObject, false, "PostData,PostDataList不能都为null"));
                }
                //批量更新优先级高于单记录更新
                if (requestObject.PostDataList != null && requestObject.PostDataList.Count > 0)
                {
                    //批量更新
                    var editList = _mapper.Map <List <TTenantsEditModel>, List <TTenantsModel> >(requestObject.PostDataList);
                    result = await _db.Instance.Updateable(editList).UpdateColumns(p => new {
                        // p.TenantName, 需要修改从表的企业名称
                        p.TenantShortName,
                        p.TenantEngName,
                        p.Area,
                        p.Industry,
                        p.TenantScale,
                        p.RegisteredCapital,
                        p.MainBusiness,
                        p.FixedTele,
                        p.Address,
                        p.TenantLogo
                    }).ExecuteCommandAsync() > 0;
                }
                else
                {
                    var edit = _mapper.Map <TTenantsModel>(requestObject.PostData);

                    //单记录更新
                    result = await _db.Instance.Updateable(edit).UpdateColumns(p => new {
                        // p.TenantName, 需要修改从表的企业名称
                        p.TenantShortName,
                        p.TenantEngName,
                        p.Area,
                        p.Industry,
                        p.TenantScale,
                        p.RegisteredCapital,
                        p.MainBusiness,
                        p.FixedTele,
                        p.Address,
                        p.TenantLogo
                    }).ExecuteCommandAsync() > 0;
                }

                //返回执行结果
                if (result)
                {
                    return(ResponseUtil <TTenantsEditModel, bool> .SuccessResult(requestObject, true));
                }
                return(ResponseUtil <TTenantsEditModel, bool> .FailResult(requestObject, false, "修改数据失败!"));
            }
            catch (Exception ex)
            {
                //返回异常结果
                return(ResponseUtil <TTenantsEditModel, bool> .FailResult(requestObject, false, ex.Message));
            }
        }
Beispiel #2
0
        /// <summary>
        /// 获取T_SM_CompanyApply数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,查询操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <TSMCompanyApplyQueryModel, List <TSMCompanyApplyQueryModel> > > GetAsync(RequestObject <TSMCompanyApplyQueryModel> requestObject, CurrentUser currentUser)
        {
            try
            {
                List <TSMCompanyApplyQueryModel> queryData = null; //查询结果集对象
                RefAsync <int> totalNumber = -1;                   //总记录数
                var            query       = _db.Instance.Queryable <TSMCompanyApplyDbModel, TSMUserAccountDbModel, TSMUserInfoDbModel>((t, t1, t2) => new object[] {
                    JoinType.Inner, t.AccountId == t1.ID,
                    JoinType.Inner, t1.UserInfoId == t2.ID
                }).Where((t, t1, t2) => t.CompanyId == currentUser.CompanyID);

                var company = _db.Instance.Queryable <TSMCompanyDbModel>().Where(p => p.ID == currentUser.CompanyID).First();

                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    List <IConditionalModel> conditionals = SqlSugarUtil.GetConditionalModels(requestObject.QueryConditions);
                    foreach (ConditionalModel item in conditionals)
                    {
                        if (item.FieldName.ToLower() == "telaccount")
                        {
                            item.FieldName = $"t1.{item.FieldName}";
                        }
                        else
                        {
                            if (item.ConditionalType == ConditionalType.LessThanOrEqual)
                            {
                                item.FieldValue = Convert.ToDateTime(item.FieldValue).AddDays(1).ToString("yyyyMMdd");
                            }
                            item.FieldName = $"t.{item.FieldName}";
                        }
                    }

                    query.Where(conditionals);
                }
                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    requestObject.OrderByConditions.ForEach(p => query.OrderBy($"{p.Column} {p.Condition}"));
                }

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query.Select(
                        (t, t1, t2) => new TSMCompanyApplyQueryModel
                    {
                        Id           = t.Id,
                        AccountId    = t.AccountId,
                        CompanyId    = t.CompanyId,
                        ApplyTime    = t.ApplyTime,
                        ApplyStatus  = t.ApplyStatus,
                        AccountName  = t1.AccountName,
                        TelAccount   = t1.TelAccount,
                        EmailAccount = t1.EmailAccount,
                        CompanyName  = company.CompanyName
                    })
                                .ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query.Select(
                        (t, t1, t2) => new TSMCompanyApplyQueryModel
                    {
                        Id           = t.Id,
                        AccountId    = t.AccountId,
                        CompanyId    = t.CompanyId,
                        ApplyTime    = t.ApplyTime,
                        ApplyStatus  = t.ApplyStatus,
                        AccountName  = t1.AccountName,
                        TelAccount   = t1.TelAccount,
                        EmailAccount = t1.EmailAccount,
                        CompanyName  = company.CompanyName
                    })
                                .ToListAsync();
                }

                //返回执行结果
                return(ResponseUtil <TSMCompanyApplyQueryModel, List <TSMCompanyApplyQueryModel> > .SuccessResult(requestObject, queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <TSMCompanyApplyQueryModel, List <TSMCompanyApplyQueryModel> > .FailResult(requestObject, null, ex.Message));
            }
        }
        /// <summary>
        /// 修改T_WM_OtherWhMain数据
        /// </summary>
        /// <param name="requestObject">Put请求参数</param>
        /// <returns>返回响应结果对象,包括响应代码,修改操作结果</returns>
        public async Task <ResponseObject <TWMOtherWhMainEditModel, bool> > PutAsync(RequestObject <TWMOtherWhMainEditModel> requestObject)
        {
            var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例

            try
            {
                if (requestObject.PostData == null)
                {
                    return(ResponseUtil <TWMOtherWhMainEditModel, bool> .FailResult(requestObject, false, "PostData不能为null"));
                }
                if (requestObject.PostData.ChildList == null || requestObject.PostData.ChildList.Count < 1)
                {
                    return(ResponseUtil <TWMOtherWhMainEditModel, bool> .FailResult(requestObject, false, "PostData.ChildList至少包含一条数据"));
                }
                //开启事务
                currDb.BeginTran();
                //修改主表信息
                var mainModel = _mapper.Map <TWMOtherWhMainDbModel>(requestObject.PostData);
                mainModel.Number = requestObject.PostData.ChildList.Sum(p => p.ActualNumber);
                mainModel.Amount = requestObject.PostData.ChildList.Sum(p => p.Amount);
                var mainFlag = await currDb.Updateable(mainModel)
                               .UpdateColumns(p => new
                {
                    p.WarehousingType,
                    p.WarehousingDate,
                    p.Number,
                    p.Amount,
                    p.ReceiptId
                })
                               .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 <TWMOtherWhDetailEditModel>,
                                                List <TWMOtherWhDetailDbModel> >(requestObject.PostData.ChildList);
                foreach (var item in detailModels)
                {
                    if (!detailFlag)
                    {
                        break;
                    }
                    item.MainId = mainModel.ID;
                    //新增或修改明细数据
                    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();
                    detailFlag = currDb.Deleteable <TWMOtherWhDetailDbModel>()
                                 .Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID)
                                 .ExecuteCommand() >= 0;
                }

                //提交事务
                currDb.CommitTran();
                //返回执行结果
                return(mainFlag && detailFlag
                    ? ResponseUtil <TWMOtherWhMainEditModel, bool> .SuccessResult(requestObject, true)
                    : ResponseUtil <TWMOtherWhMainEditModel, bool> .FailResult(requestObject, false, "修改数据失败!"));
            }
            catch (Exception ex)
            {
                //回滚事务
                currDb.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TWMOtherWhMainEditModel, bool> .FailResult(requestObject, false, ex.Message));
            }
        }
        /// <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));
            }
        }
        /// <summary>
        /// 获取T_WM_SalesMain主表数据数据
        /// </summary>
        /// <param name="requestObject">Get请求参数</param>
        /// <returns>返回响应结果对象,包括响应代码,查询操作结果</returns>
        public async Task <ResponseObject <List <TWMSalesMainQueryModel> > > GetMainListAsync(RequestGet requestObject, CurrentUser currentUser)
        {
            try
            {
                List <TWMSalesMainQueryModel> queryData = null; //查询结果集对象
                RefAsync <int> totalNumber = -1;                //总记录数


                var query = _db.Instance.Queryable <TWMSalesMainDbModel, TSSMSalesOrderMainDbModel, TBMCustomerFileDbModel,
                                                    TSMUserAccountDbModel, TSMUserAccountDbModel, TSMUserAccountDbModel, TSMUserAccountDbModel>((t, t1, t2, t3, t4, t5, t6) => new object[] {
                    JoinType.Inner, t.SourceId == t1.ID,
                    JoinType.Inner, t1.CustomerId == t2.ID,
                    JoinType.Left, t.OperatorId == t3.ID,
                    JoinType.Left, t.SendId == t4.ID,
                    JoinType.Left, t.WhAdminId == t5.ID,
                    JoinType.Left, t.AuditId == t6.ID
                }).Where((t, t1, t2, t3, t4, t5, t6) => t.DeleteFlag == false && t.CompanyId == currentUser.CompanyID);


                List <string> cQuery = new List <string>()
                {
                    "customerid"
                };
                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var mconditionals = requestObject.QueryConditions.Where(p => !cQuery.Contains(p.Column.ToLower())).ToList();
                    if (mconditionals.Count() > 0)
                    {
                        List <IConditionalModel> conditionals = SqlSugarUtil.GetConditionalModels(mconditionals);
                        foreach (ConditionalModel item in conditionals)
                        {
                            item.FieldName = $"t.{item.FieldName}";
                        }

                        query.Where(conditionals);
                    }

                    var mconditionals2 = requestObject.QueryConditions.Where(p => cQuery.Contains(p.Column.ToLower())).ToList();
                    if (mconditionals2.Count() > 0)
                    {
                        List <IConditionalModel> conditionals = SqlSugarUtil.GetConditionalModels(mconditionals2);
                        foreach (ConditionalModel item in conditionals)
                        {
                            item.FieldName = $"t1.{item.FieldName}";
                        }

                        query.Where(conditionals);
                    }
                }
                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    foreach (var item in requestObject.OrderByConditions)
                    {
                        var exp = SqlSugarUtil.GetOrderByLambda <TWMSalesMainDbModel>(item.Column);
                        if (exp == null)
                        {
                            continue;
                        }
                        if (item.Condition.ToLower() != "asc" &&
                            item.Condition.ToLower() != "desc")
                        {
                            continue;
                        }
                        query.OrderBy($"{item.Column} {item.Condition}");
                    }
                }

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query.Select((t, t1, t2, t3, t4, t5, t6) => new TWMSalesMainQueryModel
                    {
                        ID             = t.ID,
                        WhSendType     = t.WhSendType,
                        WhSendDate     = t.WhSendDate,
                        WhSendOrder    = t.WhSendOrder,
                        AuditStatus    = t.AuditStatus,
                        CustomerName   = t2.CustomerName,
                        CustomerId     = t1.CustomerId,
                        OperatorId     = t.OperatorId,
                        OperatorName   = t3.AccountName,
                        SendId         = t.SendId,
                        SendName       = t4.AccountName,
                        WhAdminId      = t.WhAdminId,
                        WhAdminName    = t5.AccountName,
                        AuditId        = t.AuditId,
                        AuditName      = t6.AccountName,
                        AuditTime      = t.AuditTime,
                        DeleteFlag     = t.DeleteFlag,
                        SourceId       = t.SourceId,
                        Number         = t.Number,
                        Amount         = t.Amount,
                        ReceiptAddress = t.ReceiptAddress,
                        SaleOrder      = t1.OrderNo,
                        IsShowEdit     = (t.AuditStatus != 2 && t.OperatorId == currentUser.UserID) ? true : false
                    }).ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query.Select((t, t1, t2, t3, t4, t5, t6) => new TWMSalesMainQueryModel
                    {
                        ID             = t.ID,
                        WhSendType     = t.WhSendType,
                        WhSendDate     = t.WhSendDate,
                        WhSendOrder    = t.WhSendOrder,
                        AuditStatus    = t.AuditStatus,
                        CustomerName   = t2.CustomerName,
                        CustomerId     = t1.CustomerId,
                        OperatorId     = t.OperatorId,
                        OperatorName   = t3.AccountName,
                        SendId         = t.SendId,
                        SendName       = t4.AccountName,
                        WhAdminId      = t.WhAdminId,
                        WhAdminName    = t5.AccountName,
                        AuditId        = t.AuditId,
                        AuditName      = t6.AccountName,
                        AuditTime      = t.AuditTime,
                        DeleteFlag     = t.DeleteFlag,
                        SourceId       = t.SourceId,
                        Number         = t.Number,
                        Amount         = t.Amount,
                        ReceiptAddress = t.ReceiptAddress,
                        SaleOrder      = t1.OrderNo,
                        IsShowEdit     = (t.AuditStatus != 2 && t.OperatorId == currentUser.UserID) ? true : false
                    }).ToListAsync();
                }

                //返回执行结果
                return(ResponseUtil <List <TWMSalesMainQueryModel> > .SuccessResult(queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <List <TWMSalesMainQueryModel> > .FailResult(null, ex.Message));
            }
        }
        /// <summary>
        /// 获取T_MM_ColorItem数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,查询操作结果</param>
        /// <param name="currentUser">当前操作用户</param>
        /// <returns></returns>
        public async Task <ResponseObject <List <TMMColorItemQueryModel> > > GetAsync(RequestGet requestObject, CurrentUser currentUser)
        {
            try
            {
                List <TMMColorItemQueryModel> queryData = null; //查询结果集对象
                RefAsync <int> totalNumber = -1;                //总记录数
                var            query       = _db.Instance.Queryable <TMMColorItemDbModel, TBMPackageDbModel, TBMDictionaryDbModel>(
                    (t, t0, t1) => new object[]
                {
                    JoinType.Inner, t.PackageId == t0.ID,
                    JoinType.Left, t.ItemId == t1.ID
                }
                    ).Where((t, t0, t1) => t0.CompanyId == currentUser.CompanyID);
                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var conditionals = SqlSugarUtil.GetConditionalModels(requestObject.QueryConditions);
                    query.Where(conditionals);
                }

                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    foreach (var item in requestObject.OrderByConditions)
                    {
                        var exp = SqlSugarUtil.GetOrderByLambda <TMMColorItemDbModel>(item.Column);
                        if (exp == null)
                        {
                            continue;
                        }
                        if (item.Condition.ToLower() != "asc" &&
                            item.Condition.ToLower() != "desc")
                        {
                            continue;
                        }
                        query.OrderBy($"{item.Column} {item.Condition}");
                    }
                }

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query.Select(
                        (t, t0, t1) => new TMMColorItemQueryModel
                    {
                        ID          = t.ID,
                        PackageId   = t.PackageId,
                        PackageCode = t0.DicCode,
                        PackageName = t0.DicValue,
                        ItemId      = t.ItemId,
                        ItemName    = t1.DicValue
                    })
                                .ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query.Select(
                        (t, t0, t1) => new TMMColorItemQueryModel
                    {
                        ID          = t.ID,
                        PackageId   = t.PackageId,
                        PackageCode = t0.DicCode,
                        PackageName = t0.DicValue,
                        ItemId      = t.ItemId,
                        ItemName    = t1.DicValue
                    })
                                .ToListAsync();
                }

                //返回执行结果
                return(ResponseUtil <List <TMMColorItemQueryModel> > .SuccessResult(queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <List <TMMColorItemQueryModel> > .FailResult(null, ex.Message));
            }
        }
Beispiel #7
0
        /// <summary>
        /// 获取T_BM_WarehouseFile数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,查询操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <TBMWarehouseFileQueryModel, List <TBMWarehouseFileQueryModel> > > GetAsync(RequestObject <TBMWarehouseFileQueryModel> requestObject, int UserID)
        {
            try
            {
                var curentDB   = _db.Instance;
                var smUserInfo = SMCurentUserManager.GetCurentUserID(UserID, curentDB);
                List <TBMWarehouseFileQueryModel> queryData = null; //查询结果集对象
                RefAsync <int> totalNumber = -1;                    //总记录数
                var            query       = curentDB.Queryable <TBMWarehouseFileDbModel, TSMUserAccountDbModel, TSMUserInfoDbModel>(
                    (t, t0, t1) => new object[]
                {
                    JoinType.Left, t.PrincipalId == t0.ID,
                    JoinType.Left, t0.UserInfoId == t1.ID
                }).Where((t, t0, t1) => SqlFunc.IsNull(t.DeleteFlag, false) != true && t.CompanyId == smUserInfo.CompanyId);
                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var conditionals = SqlSugarUtil.GetConditionalModels(requestObject.QueryConditions);

                    foreach (ConditionalModel item in conditionals)
                    {
                        item.FieldName = $"t.{item.FieldName}";
                    }
                    query.Where(conditionals);
                }
                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    foreach (var item in requestObject.OrderByConditions)
                    {
                        var exp = SqlSugarUtil.GetOrderByLambda <TBMWarehouseFileDbModel>(item.Column);
                        if (exp == null)
                        {
                            continue;
                        }
                        if (item.Condition.ToLower() != "asc" &&
                            item.Condition.ToLower() != "desc")
                        {
                            continue;
                        }
                        query.OrderBy($"{item.Column} {item.Condition}");
                    }
                }

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query.Select((t, t0, t1) => new TBMWarehouseFileQueryModel
                    {
                        ID               = t.ID,
                        Code             = t.Code,
                        WarehouseName    = t.WarehouseName,
                        WarehouseAddress = t.WarehouseAddress,
                        PrincipalId      = t.PrincipalId,
                        RealName         = t.PrincipalId == null ? "" : t0.AccountName,
                        Status           = t.Status,
                        Remark           = t.Remark,
                        CompanyId        = t.CompanyId,
                        DeleteFlag       = t.DeleteFlag,
                    })
                                .ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query.Select((t, t0, t1) => new TBMWarehouseFileQueryModel
                    {
                        ID               = t.ID,
                        Code             = t.Code,
                        WarehouseName    = t.WarehouseName,
                        WarehouseAddress = t.WarehouseAddress,
                        PrincipalId      = t.PrincipalId,
                        RealName         = t.PrincipalId == null ? "" : t0.AccountName,
                        Status           = t.Status,
                        Remark           = t.Remark,
                        CompanyId        = t.CompanyId,
                        DeleteFlag       = t.DeleteFlag,
                    })
                                .ToListAsync();
                }

                //返回执行结果
                return(ResponseUtil <TBMWarehouseFileQueryModel, List <TBMWarehouseFileQueryModel> > .SuccessResult(requestObject, queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <TBMWarehouseFileQueryModel, List <TBMWarehouseFileQueryModel> > .FailResult(requestObject, null, ex.Message));
            }
        }
        /// <summary>
        /// 获取T_PM_Menus数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,查询操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <TPMMenusQueryModel, List <TPMMenusQueryModel> > > GetAsync(RequestObject <TPMMenusQueryModel> requestObject)
        {
            try
            {
                List <TPMMenusQueryModel> queryData   = null; //查询结果集对象
                RefAsync <int>            totalNumber = -1;   //总记录数
                var query = _db.Instance.Queryable <TPMMenusDbModel>();
                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var expressionList = SqlSugarUtil.GetQueryExpressions(requestObject.QueryConditions);
                    expressionList.ForEach(p => query.Where(p));
                }
                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    foreach (var item in requestObject.OrderByConditions)
                    {
                        var exp = SqlSugarUtil.GetOrderByLambda <TPMMenusDbModel>(item.Column);
                        if (exp == null)
                        {
                            continue;
                        }
                        if (item.Condition.ToLower() != "asc" &&
                            item.Condition.ToLower() != "desc")
                        {
                            continue;
                        }
                        query.OrderBy($"{item.Column} {item.Condition}");
                    }
                }

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query.Select(
                        (t) => new TPMMenusQueryModel
                    {
                        Id              = t.Id,
                        ParentID        = t.ParentID,
                        MenuName        = t.MenuName,
                        MenuPath        = t.MenuPath,
                        Seq             = t.Seq,
                        IsMenu          = t.IsMenu,
                        MenuAnotherName = t.MenuAnotherName,
                        Status          = t.Status,
                        MenuIcon        = t.MenuIcon,
                        MenuDesc        = t.MenuDesc,
                        CreateTime      = t.CreateTime,
                        CreateId        = t.CreateId,
                    })
                                .ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query.Select(
                        (t) => new TPMMenusQueryModel
                    {
                        Id              = t.Id,
                        ParentID        = t.ParentID,
                        MenuName        = t.MenuName,
                        MenuPath        = t.MenuPath,
                        Seq             = t.Seq,
                        IsMenu          = t.IsMenu,
                        MenuAnotherName = t.MenuAnotherName,
                        Status          = t.Status,
                        MenuIcon        = t.MenuIcon,
                        MenuDesc        = t.MenuDesc,
                        CreateTime      = t.CreateTime,
                        CreateId        = t.CreateId,
                    })
                                .ToListAsync();
                }

                //返回执行结果
                return(ResponseUtil <TPMMenusQueryModel, List <TPMMenusQueryModel> > .SuccessResult(requestObject, queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <TPMMenusQueryModel, List <TPMMenusQueryModel> > .FailResult(requestObject, null, ex.Message));
            }
        }
        /// <summary>
        /// 导出期初模板
        /// </summary>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <ResponseObject <ExportOpeningTemplateModel> > ExportOpeningTemplate(CurrentUser currentUser)
        {
            string error = string.Empty;
            int    index = 0;

            String warehouseName = "";
            var    warehouseDic  = await _db.Instance.Queryable <TBMWarehouseFileDbModel>().Where(t => SqlFunc.IsNull(t.DeleteFlag, false) == false &&
                                                                                                  t.CompanyId == currentUser.CompanyID).ToListAsync();


            warehouseDic.ForEach(x =>
            {
                warehouseName += "," + x.WarehouseName;
            });

            //单位
            var unitList = _db.Instance.Queryable <TBMDictionaryDbModel, TBMDictionaryTypeDbModel>(
                (t, t0) => new object[]
            {
                JoinType.Left, t.TypeId == t0.ID,
            }).Where((t, t0) => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID &&
                     SqlFunc.IsNull(t0.DeleteFlag, false) == false && t0.TypeName == "计量单位"
                     ).Select((t, t0) => t).ToList();

            ExportOpeningTemplateModel result = new ExportOpeningTemplateModel();
            var materialFileQuery             = await _db.Instance.Queryable <TBMMaterialFileDbModel>().Where(p => p.CompanyId == currentUser.CompanyID && SqlFunc.IsNull(p.DeleteFlag, false) == false)
                                                .Select(p => new MaterialFileTemplate
            {
                BasicUnitId  = p.BaseUnitId,
                WareUnitId   = p.WarehouseUnitId,
                MaterialCode = p.MaterialCode,
                MaterialName = p.MaterialName,
                Spec         = p.Spec
            }).ToListAsync();



            materialFileQuery.ForEach((x) => {
                index++;
                if (x.WareUnitId != null)
                {
                    var unitDic = unitList.Where(p => p.ID == x.WareUnitId).FirstOrDefault();
                    if (unitDic == null)
                    {
                        error += $"物料:{x.MaterialName},代码{x.MaterialCode}的 仓库单位已经被删除,请重新设置{System.Environment.NewLine}";
                    }
                    else
                    {
                        x.WareUnitName = unitDic.DicValue;
                    }
                }
                else
                {
                    var unitDic = unitList.Where(p => p.ID == x.BasicUnitId).FirstOrDefault();
                    if (unitDic == null)
                    {
                        error += ($"物料:{x.MaterialName},代码{x.MaterialCode}的 基本单位已经被删除,请重新设置{System.Environment.NewLine}");
                    }
                    else
                    {
                        x.WareUnitName = unitDic.DicValue;
                    }
                }
            });

            if (error != string.Empty)
            {
                throw new Exception(error);
            }
            result.List          = materialFileQuery;
            result.WarehouseName = warehouseName.Substring(1).Split("1");
            return(ResponseUtil <ExportOpeningTemplateModel> .SuccessResult(result));
        }
        /// <summary>
        /// 上移下移
        /// </summary>
        /// <param name="requestObject"></param>
        /// <returns></returns>
        public async Task <ResponseObject <TPMMenusMoveModel, bool> > MovePostion(RequestObject <TPMMenusMoveModel> requestObject)
        {
            try
            {
                //执行结果
                var result = true;

                _db.Instance.BeginTran();
                //没有修改信息,返回错误信息
                if (requestObject.PostDataList == null && requestObject.PostData == null)
                {
                    return(ResponseUtil <TPMMenusMoveModel, bool> .FailResult(requestObject, false, "PostData,PostDataList不能都为null"));
                }
                //批量更新优先级高于单记录更新
                if (requestObject.PostDataList != null && requestObject.PostDataList.Count > 0)
                {
                    //批量更新
                    //var editList = _mapper.Map<List<TPMMenusEditModel>, List<TPMMenusDbModel>>(requestObject.PostDataList);
                    //result = await _db.Instance.Updateable(editList).ExecuteCommandAsync() > 0;
                }
                else
                {
                    //单记录更新
                    //var editModel = _mapper.Map<TPMMenusDbModel>(requestObject.PostData);
                    //result = await _db.Instance.Updateable(editModel).ExecuteCommandAsync() > 0;
                    var thisMenu = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.Id == requestObject.PostData.Id).First();

                    if (thisMenu != null)
                    {
                        if (requestObject.PostData.Type == 0) //上移
                        {
                            var nodes = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.ParentID == thisMenu.ParentID).OrderBy(p => p.Seq).ToList();

                            var tempNodes = nodes.Where(p => p.Id == thisMenu.Id).FirstOrDefault();

                            int index = nodes.IndexOf(tempNodes);

                            if (index != 0)
                            {
                                for (var i = 0; i < nodes.Count; i++)
                                {
                                    if (i + 1 == index)//前一位置
                                    {
                                        nodes[i].Seq = index;
                                    }
                                    else if (i == index)//当前位置
                                    {
                                        nodes[i].Seq = i - 1;
                                    }
                                    else
                                    {
                                        nodes[i].Seq = i;
                                    }
                                }

                                await _db.Instance.Updateable(nodes).UpdateColumns(p => new { p.Seq }).ExecuteCommandAsync();
                            }
                        }
                        else if (requestObject.PostData.Type == 1)//下移
                        {
                            var nodes     = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.ParentID == thisMenu.ParentID).OrderBy(p => p.Seq).ToList();
                            var tempNodes = nodes.Where(p => p.Id == thisMenu.Id).FirstOrDefault();

                            int index = nodes.IndexOf(tempNodes);

                            if (index != nodes.Count)
                            {
                                for (var i = nodes.Count - 1; i > -1; i--)
                                {
                                    if (i - 1 == index)//下一个位置
                                    {
                                        nodes[i].Seq = index;
                                    }
                                    else if (i == index)//当前位置
                                    {
                                        nodes[i].Seq = i + 1;
                                    }
                                    else
                                    {
                                        nodes[i].Seq = i;
                                    }
                                }

                                await _db.Instance.Updateable(nodes).UpdateColumns(p => new { p.Seq }).ExecuteCommandAsync();
                            }
                        }
                    }
                }
                _db.Instance.CommitTran();
                //返回执行结果
                if (result)
                {
                    return(ResponseUtil <TPMMenusMoveModel, bool> .SuccessResult(requestObject, true));
                }
                return(ResponseUtil <TPMMenusMoveModel, bool> .FailResult(requestObject, false, "修改数据失败!"));
            }
            catch (Exception ex)
            {
                _db.Instance.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TPMMenusMoveModel, bool> .FailResult(requestObject, false, ex.Message));
            }
        }
        /// <summary>
        /// 删除T_PM_Menus数据
        /// </summary>
        /// <param name="requestObject"></param>
        /// <param name="UserID"></param>
        /// <returns></returns>
        public async Task <ResponseObject <TPMenusDeleteAllModel, bool> > DeleteAsync(RequestObject <TPMenusDeleteAllModel> requestObject, int UserID)
        {
            try
            {
                //执行结果
                var result = false;



                //没有删除数据,返回错误信息
                if (requestObject.PostDataList == null && requestObject.PostData == null)
                {
                    return(ResponseUtil <TPMenusDeleteAllModel, bool> .FailResult(requestObject, false, "PostData,PostDataList不能都为null"));
                }
                //批量删除的优先级高于单记录删除
                if (requestObject.PostDataList != null && requestObject.PostDataList.Count > 0)
                {
                    if (requestObject.PostDataList.Select(p => p.PassWord).Count() != 1)
                    {
                        return(ResponseUtil <TPMenusDeleteAllModel, bool> .FailResult(requestObject, false, "密码无效"));
                    }
                    else
                    {
                        //验证密码
                        bool checkP = _tUsersService.CheckPassword(UserID, requestObject.PostDataList.Select(p => p.PassWord).FirstOrDefault());

                        if (checkP != true)
                        {
                            return(ResponseUtil <TPMenusDeleteAllModel, bool> .FailResult(requestObject, false, "密码无效"));
                        }
                    }


                    var ids = requestObject.PostDataList.Select(p => p.Id).ToList();

                    //批量删除
                    var delList = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => ids.Contains(p.Id)).ToList();

                    List <TPMMenusDbModel> toDelList = new List <TPMMenusDbModel>();

                    foreach (var item in delList)
                    {
                        var toDel = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.LogicPath.StartsWith(item.LogicPath)).ToList();

                        toDelList.AddRange(toDel);
                    }

                    result = await _db.Instance.Deleteable(toDelList).ExecuteCommandAsync() > 0;
                }
                else
                {
                    //验证密码
                    bool checkP = _tUsersService.CheckPassword(UserID, requestObject.PostData.PassWord);

                    if (checkP != true)
                    {
                        return(ResponseUtil <TPMenusDeleteAllModel, bool> .FailResult(requestObject, false, "密码无效"));
                    }

                    //单记录删除
                    var delModel = requestObject.PostData;

                    var delModelDB = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.Id == delModel.Id).First();

                    if (delModelDB != null)//删除该节点以及所有子节点
                    {
                        var toDelList = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.LogicPath.StartsWith(delModelDB.LogicPath)).ToList();

                        result = await _db.Instance.Deleteable(toDelList).ExecuteCommandAsync() > 0;
                    }
                }
                //返回执行结果
                if (result)
                {
                    return(ResponseUtil <TPMenusDeleteAllModel, bool> .SuccessResult(requestObject, true));
                }
                return(ResponseUtil <TPMenusDeleteAllModel, bool> .FailResult(requestObject, false, "删除数据失败!"));
            }
            catch (Exception ex)
            {
                //返回异常结果
                return(ResponseUtil <TPMenusDeleteAllModel, bool> .FailResult(requestObject, false, ex.Message));
            }
        }
        /// <summary>
        /// 修改T_PM_Menus数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,修改操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <TPMMenusEditModel, bool> > PutAsync(RequestObject <TPMMenusEditModel> requestObject)
        {
            try
            {
                //执行结果
                var result = false;

                _db.Instance.BeginTran();
                //没有修改信息,返回错误信息
                if (requestObject.PostDataList == null && requestObject.PostData == null)
                {
                    return(ResponseUtil <TPMMenusEditModel, bool> .FailResult(requestObject, false, "PostData,PostDataList不能都为null"));
                }
                //批量更新优先级高于单记录更新
                if (requestObject.PostDataList != null && requestObject.PostDataList.Count > 0)
                {
                    //批量更新
                    var editList = _mapper.Map <List <TPMMenusEditModel>, List <TPMMenusDbModel> >(requestObject.PostDataList);

                    var childList = new List <TPMMenusDbModel>();
                    foreach (var item in editList)
                    {
                        var    editModelDB  = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.Id == item.Id).First();
                        string oldlogicPath = editModelDB.LogicPath;//原来的路径
                        string newlogicPath = oldlogicPath;

                        if (item.ParentID == -1)
                        {
                            newlogicPath = item.Id.ToString();

                            item.LogicPath = newlogicPath;
                        }
                        else
                        {
                            var pnode = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.Id == item.ParentID).First();
                            if (pnode != null)
                            {
                                newlogicPath   = pnode.LogicPath + "." + item.Id.ToString();
                                item.LogicPath = newlogicPath;
                            }
                        }

                        if (!string.Equals(oldlogicPath, newlogicPath))// 如果
                        {
                            int oldLength = oldlogicPath.Length;

                            var cList = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.LogicPath.StartsWith(oldlogicPath) && p.Id != item.Id).ToList();
                            cList.ForEach(x => {
                                x.LogicPath = newlogicPath + x.LogicPath.Substring(oldLength);
                            });
                            childList.AddRange(cList);
                        }
                    }

                    if (childList.Count() > 0)
                    {
                        await _db.Instance.Updateable(childList).UpdateColumns(p => new { p.LogicPath }).ExecuteCommandAsync();
                    }

                    result = await _db.Instance.Updateable(editList).ExecuteCommandAsync() > 0;
                }
                else
                {
                    //单记录更新
                    var editModel = _mapper.Map <TPMMenusDbModel>(requestObject.PostData);

                    var editModelDB = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.Id == editModel.Id).First();

                    string oldlogicPath1 = editModelDB.LogicPath.ToString();//原来的路径

                    string newlogicPath2 = oldlogicPath1;
                    var    childList     = new List <TPMMenusDbModel>();

                    if (editModel.ParentID == -1)
                    {
                        newlogicPath2       = editModel.Id.ToString();
                        editModel.LogicPath = newlogicPath2;
                    }
                    else
                    {
                        var pnode = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.Id == editModel.ParentID).First();
                        if (pnode != null)
                        {
                            newlogicPath2       = pnode.LogicPath + "." + editModel.Id.ToString();
                            editModel.LogicPath = newlogicPath2;
                        }
                    }
                    if (!string.Equals(oldlogicPath1, newlogicPath2))// 如果
                    {
                        int oldLength = oldlogicPath1.Length;

                        var cList = _db.Instance.Queryable <TPMMenusDbModel>().Where(p => p.LogicPath.StartsWith(oldlogicPath1) && p.Id != editModel.Id).ToList();
                        cList.ForEach(x => {
                            x.LogicPath = newlogicPath2 + x.LogicPath.Substring(oldLength);
                        });

                        childList.AddRange(cList);
                    }

                    if (childList.Count() > 0)
                    {
                        await _db.Instance.Updateable(childList).UpdateColumns(p => new { p.LogicPath }).ExecuteCommandAsync();
                    }

                    result = await _db.Instance.Updateable(editModel).ExecuteCommandAsync() > 0;
                }


                _db.Instance.CommitTran();
                //返回执行结果
                if (result)
                {
                    return(ResponseUtil <TPMMenusEditModel, bool> .SuccessResult(requestObject, true));
                }
                return(ResponseUtil <TPMMenusEditModel, bool> .FailResult(requestObject, false, "修改数据失败!"));
            }
            catch (Exception ex)
            {
                _db.Instance.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TPMMenusEditModel, bool> .FailResult(requestObject, false, ex.Message));
            }
        }
        /// <summary>
        /// 新增T_PM_Menus数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,新增操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <TPMMenusAddModel, bool> > PostAsync(RequestObject <TPMMenusAddModel> requestObject)
        {
            try
            {
                _db.Instance.BeginTran();
                //如果没有新增数据,返回错误信息
                if (requestObject.PostData == null && requestObject.PostDataList == null)
                {
                    return(ResponseUtil <TPMMenusAddModel, bool> .FailResult(requestObject, false, "PostData,PostDataList不能都为null"));
                }
                var result = true;
                //批量新增的优先级高于单条数据新增,且只会执行一个新增操作
                if (requestObject.PostDataList != null && requestObject.PostDataList.Count > 0)
                {
                    var addList = _mapper.Map <List <TPMMenusAddModel>, List <TPMMenusDbModel> >(requestObject.PostDataList);

                    List <TPMMenusDbModel> parentNodes = new List <TPMMenusDbModel>();
                    foreach (var item in addList)
                    {
                        parentNodes.AddRange(FindParentNodes(item.ParentID));
                    }

                    foreach (var item in parentNodes.Distinct())
                    {
                        item.IsMenu = false;
                        await _db.Instance.Updateable(item).UpdateColumns(p => new { p.IsMenu }).ExecuteCommandAsync();
                    }

                    result = await _db.Instance.Insertable(addList).ExecuteCommandIdentityIntoEntityAsync();

                    foreach (var item in addList)
                    {
                        if (item.ParentID == -1)
                        {
                            item.LogicPath = item.Id.ToString();
                        }
                        else
                        {
                            var pNode = parentNodes.Where(p => p.Id == item.ParentID).FirstOrDefault();

                            if (pNode != null)
                            {
                                item.LogicPath = pNode.LogicPath + "." + item.Id.ToString();
                            }
                        }
                    }

                    await _db.Instance.Updateable(addList).UpdateColumns(p => new { p.LogicPath }).ExecuteCommandAsync();
                }
                else
                {
                    var addModel = _mapper.Map <TPMMenusDbModel>(requestObject.PostData);
                    List <TPMMenusDbModel> parentNodes = FindParentNodes(addModel.ParentID);

                    foreach (var item in parentNodes)
                    {
                        item.IsMenu = false;
                        await _db.Instance.Updateable(item).UpdateColumns(p => new { p.IsMenu }).ExecuteCommandAsync();
                    }


                    result = await _db.Instance.Insertable(addModel).ExecuteCommandIdentityIntoEntityAsync();

                    if (addModel.ParentID == -1)
                    {
                        addModel.LogicPath = addModel.Id.ToString();
                    }
                    else
                    {
                        var pNode = parentNodes.Where(p => p.Id == addModel.ParentID).FirstOrDefault();
                        if (pNode != null)
                        {
                            addModel.LogicPath = pNode.LogicPath + "." + addModel.Id.ToString();
                        }
                    }

                    await _db.Instance.Updateable(addModel).UpdateColumns(p => new { p.LogicPath }).ExecuteCommandAsync();
                }

                _db.Instance.CommitTran();
                //返回执行结果
                if (result)
                {
                    return(ResponseUtil <TPMMenusAddModel, bool> .SuccessResult(requestObject, true));
                }
                return(ResponseUtil <TPMMenusAddModel, bool> .FailResult(requestObject, false, "新增数据失败!"));
            }
            catch (Exception ex)
            {
                _db.Instance.RollbackTran();
                //返回异常结果
                return(ResponseUtil <TPMMenusAddModel, bool> .FailResult(requestObject, false, ex.Message));
            }
        }
Beispiel #14
0
        /// <summary>
        /// 获取T_Tenants数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,查询操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <TTenantsModel, List <TTenantsQueryModel> > > GetAsync(RequestObject <TTenantsModel> requestObject)
        {
            try
            {
                List <TTenantsQueryModel> queryData   = null; //查询结果集对象
                RefAsync <int>            totalNumber = -1;   //总记录数
                var query = _db.Instance.Queryable <TTenantsModel, TSMCompanyDbModel>(
                    (t, t1) => new object[]
                {
                    JoinType.Left, t.ID == t1.CompanyInfoId,
                });


                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var expressionList = SqlSugarUtil.GetQueryExpressions(requestObject.QueryConditions);
                    expressionList.ForEach(p => query.Where(p));
                }
                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    requestObject.OrderByConditions.ForEach(p => query.OrderBy($"{p.Column} {p.Condition}"));
                }

                var queryResult = query.Select((t, t1) => new TTenantsQueryModel
                {
                    Address           = t.Address,
                    Area              = t.Area,
                    CreateId          = t.CreateId,
                    CreateTime        = t.CreateTime,
                    FixedTele         = t.FixedTele,
                    Id                = t.ID,
                    Industry          = t.Industry,
                    IsTrial           = t.IsTrial,
                    MainBusiness      = t.MainBusiness,
                    RegisteredCapital = t.RegisteredCapital,
                    Status            = t.Status,
                    TemplateId        = t.TemplateId,
                    TenantEngName     = t.TenantEngName,
                    TenantLogo        = t.TenantLogo,
                    TenantName        = t1.CompanyName,
                    TenantScale       = t.TenantScale,
                    TenantShortName   = t.TenantShortName,
                    TrialDate         = t.TrialDate,
                    ValidityPeriod    = t.ValidityPeriod
                });


                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await queryResult.ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await queryResult.ToListAsync();
                }

                //返回执行结果
                return(ResponseUtil <TTenantsModel, List <TTenantsQueryModel> > .SuccessResult(requestObject, queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <TTenantsModel, List <TTenantsQueryModel> > .FailResult(requestObject, null, ex.Message));
            }
        }
        /// <summary>
        /// 新增T_MM_ColorItem数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,新增操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <bool> > PostAsync(RequestPost <List <TMMColorItemAddModel> > requestObject, CurrentUser currentUser)
        {
            try
            {
//#if DEBUG
//                var i = 9;
//#else

//                 throw new Exception();
//#endif

                //如果没有新增数据,返回错误信息
                if (requestObject.PostData == null && requestObject.PostData.Count < 1)
                {
                    return(ResponseUtil <bool> .FailResult(false, "PostData至少包含一条数据"));
                }

                //新增数据
                var addList   = _mapper.Map <List <TMMColorItemAddModel>, List <TMMColorItemDbModel> >(requestObject.PostData);
                int packageId = requestObject.PostData[0].PackageId;

                foreach (var item in addList)
                {
                    if (item.ID <= 0)
                    {
                        await _db.Instance.Insertable(item).ExecuteCommandIdentityIntoEntityAsync();
                    }
                    else
                    {
                        await _db.Instance.Updateable(item).ExecuteCommandAsync();
                    }
                }

                List <int> addListID = addList.Select(p => p.ID).ToList();

                var toDelteModel = _db.Instance.Queryable <TMMColorItemDbModel>()
                                   .Where(p => p.PackageId == packageId && !addListID.Contains(p.ID)).Select(p => p).ToList();

                if (toDelteModel.Count() > 0)
                {
                    var dic = _db.Instance.Queryable <TBMDictionaryDbModel, TBMDictionaryTypeDbModel>((t, t1) => new object[] {
                        JoinType.Inner, t.TypeId == t1.ID
                    }).Where((t, t1) => t1.TypeName == "配色方案" && t1.CompanyId == currentUser.CompanyID).ToList();

                    var packageList = _db.Instance.Queryable <TBMPackageDbModel>().Where(p => p.CompanyId == currentUser.CompanyID).ToList();

                    foreach (var itemDel in toDelteModel)
                    {
                        if (_db.Instance.Queryable <TMMBOMMainDbModel, TMMBOMDetailDbModel>((t, t1) => new object[] { JoinType.Inner, t.ID == t1.MainId })
                            .Any((t, t1) => t.PackageId == itemDel.PackageId && t1.ItemId == itemDel.ItemId)) //此包型的BOM是否包含被删除的配色项目
                        {
                            bool isExis = _db.Instance.Queryable <TMMProductionOrderDetailDbModel, TMMProductionOrderMainDbModel>((t, t1) => new object[] {
                                JoinType.Inner, t.MainId == t1.ID
                            }).Any((t, t1) => t1.DeleteFlag == false &&
                                   t1.MRPStatus == false && t1.AuditStatus == 2 &&
                                   t.PackageId == itemDel.PackageId
                                   );  // 是否存在没有算料的生产单

                            if (isExis)
                            {
                                string itemName    = dic.Where(p => p.ID == itemDel.ItemId).FirstOrDefault()?.DicValue;
                                string packageName = packageList.Where(p => p.ID == itemDel.PackageId).FirstOrDefault()?.DicValue;
                                throw new Exception($"已审核通过的生产单,正在使用包型'{packageName}'Bom的配色项目{itemName},请将生产单算料,或者删除包型Bom的配色项目'{itemName}'");
                            }

                            //删除此包型所有的配色项目
                            var deleteColorSolution1 = _db.Instance.Deleteable <TMMColorSolutionDetailDbModel>().Where(p => p.ItemId == itemDel.ItemId &&
                                                                                                                       SqlFunc.Subqueryable <TMMColorSolutionMainDbModel>().Where(p1 => p1.ID == p.MainId && p1.PackageId == itemDel.PackageId).Any());
                            deleteColorSolution1.ExecuteCommand();
                            //删除BOM
                            var bomDelete = _db.Instance.Deleteable <TMMBOMDetailDbModel>().Where(p => p.ItemId == itemDel.ItemId && SqlFunc.Subqueryable <TMMBOMMainDbModel>().
                                                                                                  Where(p1 => p1.ID == p.MainId && p1.PackageId == itemDel.PackageId).Any());
                            bomDelete.ExecuteCommand();
                        }
                        else
                        {
                            //删除此包型所有的配色项目
                            var deleteColorSolution = _db.Instance.Deleteable <TMMColorSolutionDetailDbModel>().Where(p => p.ItemId == itemDel.ItemId &&
                                                                                                                      SqlFunc.Subqueryable <TMMColorSolutionMainDbModel>().Where(p1 => p1.ID == p.MainId && p1.PackageId == itemDel.PackageId).Any());
                            deleteColorSolution.ExecuteCommand();
                        }
                    }

                    _db.Instance.Deleteable(toDelteModel).ExecuteCommand();
                }

                _db.Instance.CommitTran();
                //返回执行结果
                return(ResponseUtil <bool> .SuccessResult(true));
            }
            catch (Exception ex)
            {
                _db.Instance.RollbackTran();
                //返回异常结果
                return(ResponseUtil <bool> .FailResult(false, ex.Message));
            }
        }
        /// <summary>
        /// 导入期初
        /// </summary>
        public async Task <ResponseObject <List <string> > > ImportPrime(RequestPost <ImportPrimeModel> requestObject, CurrentUser currentUser)
        {
            try
            {
                //没有新增数据,返回错误信息
                if (requestObject.PostDataList == null || requestObject.PostDataList.Count() == 0)
                {
                    return(ResponseUtil <List <string> > .FailResult(null, "PostDataList必须有值"));
                }
                //合法性检查

                //仓库
                var Warehouses = _db.Instance.Queryable <TBMWarehouseFileDbModel>().
                                 Where(p => p.CompanyId == currentUser.CompanyID && SqlFunc.IsNull(p.DeleteFlag, false) == false).ToList();

                //单位
                var unitList = _db.Instance.Queryable <TBMDictionaryDbModel, TBMDictionaryTypeDbModel>(
                    (t, t0) => new object[]
                {
                    JoinType.Left, t.TypeId == t0.ID,
                }).Where((t, t0) => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID &&
                         SqlFunc.IsNull(t0.DeleteFlag, false) == false && t0.TypeName == "计量单位"
                         ).ToList();

                //物料
                var MaterialList = _db.Instance.Queryable <TBMMaterialFileDbModel>().Where(t => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID).ToList();

                List <TWMPrimeCountDbModel> tWMPrimeCountDbModels = new List <TWMPrimeCountDbModel>();

                var importPrimeModels = requestObject.PostDataList;

                int           index     = 1;
                List <string> errorList = new List <string>();
                List <TWMPrimeCountDbModel> TWMPrimeCountList = new List <TWMPrimeCountDbModel>();
                foreach (var item in importPrimeModels)
                {
                    string msg = string.Empty;
                    TWMPrimeCountDbModel tWMPrimeCountDbModel = new TWMPrimeCountDbModel();
                    var material = MaterialList.Where(p => p.MaterialCode == item.MaterialCode).FirstOrDefault();

                    if (material != null)
                    {
                        tWMPrimeCountDbModel.MaterialId = material.ID;


                        int unitId = material.WarehouseUnitId == null ? material.BaseUnitId : material.WarehouseUnitId.Value;

                        TBMDictionaryDbModel unit = unitList.Where(p => p.ID == unitId).FirstOrDefault();
                        if (unit.DicValue != item.UnitName)
                        {
                            msg += $"库存单位应该为{unit.DicValue}";
                        }
                    }
                    else
                    {
                        msg += $"物料代码{item.MaterialCode}不存在;";
                    }



                    var houses = Warehouses.Where(p => p.WarehouseName == item.WarehouseName).FirstOrDefault();
                    if (houses != null)
                    {
                        tWMPrimeCountDbModel.WarehouseId = houses.ID;
                    }


                    tWMPrimeCountDbModel.PrimeNum  = item.Num;
                    tWMPrimeCountDbModel.CompanyId = currentUser.CompanyID;

                    if (msg != string.Empty)
                    {
                        msg = $"第{index}行数据:{msg}";
                        errorList.Add(msg);
                    }
                    else
                    {
                        TWMPrimeCountList.Add(tWMPrimeCountDbModel);
                    }

                    index++;
                }


                if (errorList.Count() > 0)
                {
                    return(ResponseUtil <List <string> > .FailResult(errorList));
                }

                if (TWMPrimeCountList.Count() > 0)
                {
                    await _db.Instance.Insertable <TWMPrimeCountDbModel>(TWMPrimeCountList).ExecuteCommandAsync();
                }

                return(ResponseUtil <List <string> > .SuccessResult(null));
            }
            catch (Exception ex)
            {
                return(ResponseUtil <List <string> > .FailResult(null, ex.Message));
            }
        }
        /// <summary>
        /// 删除配色项目,所有节点
        /// </summary>
        /// <param name="requestDelete"></param>
        /// <returns></returns>
        public async Task <ResponseObject <bool> > DeleteAllAsync(RequestDelete <DeleteModel> requestDelete, CurrentUser currentUser)
        {
            try
            {
                //如果没有新增数据,返回错误信息
                if (requestDelete.PostData == null)
                {
                    return(ResponseUtil <bool> .FailResult(false, "PostData至少包含一条数据"));
                }

                var toDelteModel = _db.Instance.Queryable <TMMColorItemDbModel> ()
                                   .Where(p => p.PackageId == requestDelete.PostData.ID).Select(p => p).ToList();

                var dic = _db.Instance.Queryable <TBMDictionaryDbModel, TBMDictionaryTypeDbModel>((t, t1) => new object[] {
                    JoinType.Inner, t.TypeId == t1.ID
                }).Where((t, t1) => t1.TypeName == "配色方案" && t1.CompanyId == currentUser.CompanyID).ToList();

                var packageList = _db.Instance.Queryable <TBMPackageDbModel>().Where(p => p.CompanyId == currentUser.CompanyID).ToList();

                foreach (var itemDel in toDelteModel)
                {
                    if (_db.Instance.Queryable <TMMBOMMainDbModel, TMMBOMDetailDbModel>((t, t1) => new object[] { JoinType.Inner, t.ID == t1.MainId })
                        .Any((t, t1) => t.PackageId == itemDel.PackageId && t1.ItemId == itemDel.ItemId)) //此包型的BOM是否包含被删除的配色项目
                    {
                        string itemName    = dic.Where(p => p.ID == itemDel.ItemId).FirstOrDefault()?.DicValue;
                        string packageName = packageList.Where(p => p.ID == itemDel.PackageId).FirstOrDefault()?.DicValue;

                        bool isExis = _db.Instance.Queryable <TMMProductionOrderDetailDbModel, TMMProductionOrderMainDbModel>((t, t1) => new object[] {
                            JoinType.Inner, t.MainId == t1.ID
                        }).Any((t, t1) => t1.DeleteFlag == false &&
                               SqlFunc.IsNull(t1.MRPStatus, false) == false && t1.AuditStatus == 2 &&
                               t.PackageId == itemDel.PackageId
                               );  // 是否存在没有算料的生产单

                        if (isExis)
                        {
                            throw new Exception($"已审核通过的生产单,正在使用包型'{packageName}'Bom的配色项目{itemName},请将生产单算料,或者删除包型Bom的配色项目'{itemName}'");
                        }

                        //删除此包型所有的配色项目
                        var deleteColorSolution = _db.Instance.Deleteable <TMMColorSolutionDetailDbModel>().Where(p => p.ItemId == itemDel.ItemId &&
                                                                                                                  SqlFunc.Subqueryable <TMMColorSolutionMainDbModel>().Where(p1 => p1.ID == p.MainId && p1.PackageId == itemDel.PackageId).Any());

                        //删除BOM
                        _db.Instance.Deleteable <TMMBOMDetailDbModel>().Where(p => p.ItemId == itemDel.ItemId && SqlFunc.Subqueryable <TMMBOMMainDbModel>().
                                                                              Where(p1 => p1.ID == p.MainId && p1.PackageId == itemDel.PackageId).Any());
                    }
                }


                var result = await _db.Instance.Deleteable <TMMColorItemDbModel>()
                             .Where(p => p.PackageId == requestDelete.PostData.ID)
                             .ExecuteCommandAsync() > 0;

                //返回执行结果
                return(result ? ResponseUtil <bool> .SuccessResult(true) : ResponseUtil <bool> .FailResult(false, "新增数据失败!"));
            }
            catch (Exception ex)
            {
                //返回异常结果
                return(ResponseUtil <bool> .FailResult(false, ex.Message));
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestObject"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <ResponseObject <List <InventoryResultModel> > > LoadReport(RequestGet requestObject, CurrentUser currentUser)
        {
            try
            {
                //数据字典
                var tBMDictionary = _db.Instance.Queryable <TBMDictionaryDbModel>().Where(p => p.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => p.DicValue);

                var warehouseDic = _db.Instance.Queryable <TBMWarehouseFileDbModel>().Where(t => SqlFunc.IsNull(t.DeleteFlag, false) != true &&
                                                                                            t.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => new { Name = p.WarehouseName, Code = p.Code });

                List <InventoryResultModel> result = new List <InventoryResultModel>();

                //其他出入库
                var otherCount = _db.Instance.Queryable <TWMOtherCountDbModel>().
                                 Select(p => new InAndOutModel()
                {
                    MaterialId   = p.MaterialId,
                    WarehouseId  = p.WarehouseId,
                    WhNumber     = p.WhNumber,
                    WhSendNumber = p.WhSendNumber
                });

                //盘亏盘盈出入库
                var pCount = _db.Instance.Queryable <TWMProfitDeficitCountDbModel>().
                             Select(p => new InAndOutModel()
                {
                    MaterialId   = p.MaterialId,
                    WarehouseId  = p.WarehouseId,
                    WhNumber     = p.WhNumber,
                    WhSendNumber = p.WhSendNumber
                });

                //销售出入库
                var SaleCount = _db.Instance.Queryable <TWMSalesCountDbModel>().
                                Select(p => new InAndOutModel()
                {
                    MaterialId   = p.MaterialId,
                    WarehouseId  = p.WarehouseId,
                    WhNumber     = p.WhNumber,
                    WhSendNumber = p.WhSendNumber
                });

                //采购出入库
                var PurchaseCount = _db.Instance.Queryable <TWMPurchaseCountDbModel>().
                                    Select(p => new InAndOutModel()
                {
                    MaterialId   = p.MaterialId,
                    WarehouseId  = p.WarehouseId,
                    WhNumber     = p.WhNumber,
                    WhSendNumber = p.WhSendNumber
                });

                //生产出入库
                var ProductCount = _db.Instance.Queryable <TWMProductionCountDbModel>().
                                   Select(p => new InAndOutModel()
                {
                    MaterialId   = p.MaterialId,
                    WarehouseId  = p.WarehouseId,
                    WhNumber     = p.WhNumber,
                    WhSendNumber = p.WhSendNumber
                });

                //出入库数量
                var allCount = _db.Instance.UnionAll(otherCount, pCount, SaleCount, PurchaseCount, ProductCount).GroupBy(p => new { p.MaterialId, p.WarehouseId }).
                               Select(p => new TradeInventoryModel()
                {
                    TradeNumber = SqlFunc.AggregateSum(p.WhNumber) - SqlFunc.AggregateSum(p.WhSendNumber),
                    MaterialId  = p.MaterialId,
                    WarehouseId = p.WarehouseId
                }).AS("t100");

                var materialFileQuery = _db.Instance.Queryable <TBMMaterialFileDbModel>().Where(p => p.CompanyId == currentUser.CompanyID);

                var ts = _db.Instance.Queryable(materialFileQuery, allCount, JoinType.Inner, (p1, p2) => p1.ID == p2.MaterialId);

                #region 待出库数量

                //其他待出库
                var otherToOut = _db.Instance.Queryable <TWMOtherWhSendMainDbModel, TWMOtherWhSendDetailDbModel>((t1, t2) =>
                                                                                                                 new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) =>
                                                                                                                                                                            t1.AuditStatus != 2 &&
                                                                                                                                                                            t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut {
                    MaterialId = t2.MaterialId, Amount = t2.ActualNumber
                });

                //盘亏出库
                var deficitToOut = _db.Instance.Queryable <TWMDeficitMainDbModel, TWMDeficitDetailDbModel>((t1, t2) =>
                                                                                                           new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) =>
                                                                                                                                                                      t1.AuditStatus != 2 &&
                                                                                                                                                                      t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut {
                    MaterialId = t2.MaterialId, Amount = t2.ActualNumber
                });

                //销售出库
                var saleToOut = _db.Instance.Queryable <TWMSalesMainDbModel, TWMSalesDetailDbModel>((t1, t2) =>
                                                                                                    new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) =>
                                                                                                                                                               t1.AuditStatus != 2 &&
                                                                                                                                                               t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut {
                    MaterialId = t2.MaterialId, Amount = t2.ActualNum
                });

                //生产待出库
                var productToOut = _db.Instance.Queryable <TWMProductionMainDbModel, TWMProductionDetailDbModel>((t1, t2) =>
                                                                                                                 new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) =>
                                                                                                                                                                            t1.AuditStatus != 2 &&
                                                                                                                                                                            t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut {
                    MaterialId = t2.MaterialId, Amount = t2.ActualNum
                });

                var allToOut = _db.Instance.UnionAll(otherToOut, deficitToOut, saleToOut, productToOut).AS("t101");

                var tsToOut = allToOut.ToList().GroupBy(p => p.MaterialId).Select(p => new InventoryOut()
                {
                    MaterialId = p.Key, Amount = p.Sum(m => m.Amount)
                }).ToList()
                              .ToDictionary(p => p.MaterialId, p => new { MaterialId = p.MaterialId, Amount = p.Amount });
                #endregion

                string[] cQuery = { "warehouseid" };
                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var QueryConditions1 = requestObject.QueryConditions.Where(p => !cQuery.Contains(p.Column.ToLower())).ToList();

                    if (QueryConditions1.Count() > 0)
                    {
                        var conditionals1 = SqlSugarUtil.GetConditionalModels(QueryConditions1);

                        foreach (ConditionalModel item in conditionals1)
                        {
                            item.FieldName = $"p1.{item.FieldName}";
                        }
                        ts.Where(conditionals1);
                    }

                    var QueryConditions2 = requestObject.QueryConditions.Where(p => cQuery.Contains(p.Column.ToLower())).FirstOrDefault();
                    if (QueryConditions2 != null)
                    {
                        int WarehouseId = Convert.ToInt32(QueryConditions2.Content);

                        ts = ts.Where((p1, p2) => p2.WarehouseId == WarehouseId);
                    }
                }

                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    foreach (var item in requestObject.OrderByConditions)
                    {
                        var exp = SqlSugarUtil.GetOrderByLambda <TBMMaterialFileDbModel>(item.Column);
                        if (exp == null)
                        {
                            continue;
                        }
                        if (item.Condition.ToLower() != "asc" &&
                            item.Condition.ToLower() != "desc")
                        {
                            continue;
                        }
                        ts.OrderBy($"p1.{item.Column} {item.Condition}");
                    }
                }
                #region 最新采购/生产时间
                var Purchase = _db.Instance.Queryable <TPSMPurchaseOrderDetailDbModel, TPSMPurchaseOrderMainDbModel>(
                    (t1, t2) => new object[] { JoinType.Left, t1.MainId == t2.ID })
                               .Where((t1, t2) => t2.CompanyId == currentUser.CompanyID && SqlFunc.IsNull(t2.DeleteFlag, false) != true &&
                                      t2.AuditStatus == 2
                                      )
                               .GroupBy((t1, t2) => t1.MaterialId)
                               .Select((t1, t2) => new { MaterialId = t1.MaterialId, OrderDate = SqlFunc.AggregateMax(t2.OrderDate) }).ToList()
                               .ToDictionary(p => p.MaterialId, p => new { MaterialId = p.MaterialId, OrderDate = p.OrderDate });
                var Production = _db.Instance.Queryable <TMMProductionOrderDetailDbModel, TMMProductionOrderMainDbModel>(
                    (t1, t2) => new object[] { JoinType.Left, t1.MainId == t2.ID })
                                 .Where((t1, t2) => t2.CompanyId == currentUser.CompanyID && SqlFunc.IsNull(t2.DeleteFlag, false) != true &&
                                        t2.AuditStatus == 2)
                                 .GroupBy((t1, t2) => t1.MaterialId)
                                 .Select((t1, t2) => new { MaterialId = t1.MaterialId, OrderDate = SqlFunc.AggregateMax(t2.OrderDate) }).ToList()
                                 .ToDictionary(p => p.MaterialId, p => new { MaterialId = p.MaterialId, OrderDate = p.OrderDate });
                #endregion
                int totalNum = -1;
                if (requestObject.IsPaging)
                {
                    int skipNum = requestObject.PageSize * (requestObject.PageIndex - 1);
                    totalNum = ts.Count();
                    result   = await ts.Select((p1, p2) => new InventoryResultModel
                    {
                        MaterialName    = p1.MaterialName,
                        BaseUnitId      = p1.BaseUnitId,
                        ColorId         = p1.ColorId,
                        MaterialCode    = p1.MaterialCode,
                        MaterialId      = p1.ID,
                        Spec            = p1.Spec,
                        WarehouseAmount = p2.TradeNumber,
                        WarehouseUnitId = p1.WarehouseUnitId,
                        WarehouseRate   = p1.WarehouseRate,
                        WarehouseId     = p2.WarehouseId,
                        ShelfLife       = p1.ShelfLife
                    }).Skip(skipNum).Take(requestObject.PageSize).ToListAsync();
                }
                else
                {
                    result = await ts.Select((p1, p2) => new InventoryResultModel
                    {
                        MaterialName    = p1.MaterialName,
                        BaseUnitId      = p1.BaseUnitId,
                        ColorId         = p1.ColorId,
                        MaterialCode    = p1.MaterialCode,
                        MaterialId      = p1.ID,
                        Spec            = p1.Spec,
                        WarehouseAmount = p2.TradeNumber,
                        WarehouseUnitId = p1.WarehouseUnitId,
                        WarehouseRate   = p1.WarehouseRate,
                        WarehouseId     = p2.WarehouseId,
                        ShelfLife       = p1.ShelfLife
                    }).ToListAsync();
                }
                var TWMPrimeCountDbList = _db.Instance.Queryable <TWMPrimeCountDbModel>().Where(p => p.CompanyId == currentUser.CompanyID).ToList();
                result.ForEach(x =>
                {
                    #region 最新生产/采购时间
                    string Production_PurchaseDateTime = "";
                    if (Production.ContainsKey(x.MaterialId))
                    {
                        Production_PurchaseDateTime += "" + Convert.ToDateTime(Production[x.MaterialId].OrderDate).ToString("yyyy-MM-dd");
                    }
                    else
                    {
                        Production_PurchaseDateTime += "无生产";
                    }
                    if (Purchase.ContainsKey(x.MaterialId))
                    {
                        Production_PurchaseDateTime += "/" + Convert.ToDateTime(Purchase[x.MaterialId].OrderDate).ToString("yyyy-MM-dd");
                    }
                    else
                    {
                        Production_PurchaseDateTime += "/无采购";
                    }
                    if (Production_PurchaseDateTime != "")
                    {
                        x.Production_PurchaseDateTime = Production_PurchaseDateTime;
                    }
                    #endregion
                    if (tsToOut.ContainsKey(x.MaterialId))
                    {
                        x.WarehouseAvailabilityAmount = x.WarehouseAmount - tsToOut[x.MaterialId].Amount;
                    }
                    if (x.WarehouseUnitId.HasValue)
                    {
                        if (tBMDictionary.ContainsKey(x.WarehouseUnitId.Value))
                        {
                            x.WarehouseUnitName = tBMDictionary[x.WarehouseUnitId.Value];
                        }
                    }

                    if (warehouseDic.ContainsKey(x.WarehouseId))
                    {
                        x.WarehouseName = warehouseDic[x.WarehouseId].Name;
                        x.WarehouseCode = warehouseDic[x.WarehouseId].Code;
                    }

                    if (tBMDictionary.ContainsKey(x.BaseUnitId))
                    {
                        x.BaseUnitName = tBMDictionary[x.BaseUnitId];
                    }

                    if (string.IsNullOrEmpty(x.WarehouseUnitName))
                    {
                        x.WarehouseUnitName = x.BaseUnitName;
                    }

                    if (x.WarehouseRate == null)
                    {
                        x.WarehouseRate = 1;
                    }

                    if (x.ColorId.HasValue)
                    {
                        if (tBMDictionary.ContainsKey(x.ColorId.Value))
                        {
                            x.ColorName = tBMDictionary[x.ColorId.Value];
                        }
                    }

                    var firstEntity = TWMPrimeCountDbList.Where(p => p.WarehouseId == x.WarehouseId && p.MaterialId == x.MaterialId).FirstOrDefault();

                    if (firstEntity != null)
                    {
                        x.WarehouseAmount = x.WarehouseAmount + firstEntity.PrimeNum;
                        x.PrimeNum        = firstEntity.PrimeNum;
                    }
                });

                return(ResponseUtil <List <InventoryResultModel> > .SuccessResult(result, totalNum));
            }
            catch (Exception ex)
            {
                return(ResponseUtil <List <InventoryResultModel> > .FailResult(null, ex.Message));
            }
        }
Beispiel #19
0
        /// <summary>
        /// 新增T_BM_WarehouseFile数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,新增操作结果</param>
        /// <param name="UserID">操作人ID</param>
        /// <returns></returns>
        public async Task <ResponseObject <TBMWarehouseFileAddModel, bool> > PostAsync(RequestObject <TBMWarehouseFileAddModel> requestObject, int UserID)
        {
            try
            {
                var curentDB = _db.Instance;

                SMUserInfo sMUserInfo = SMCurentUserManager.GetCurentUserID(UserID, curentDB);
                //如果没有新增数据,返回错误信息
                if (requestObject.PostData == null && requestObject.PostDataList == null)
                {
                    return(ResponseUtil <TBMWarehouseFileAddModel, bool> .FailResult(requestObject, false, "PostData,PostDataList不能都为null"));
                }
                var result = false;
                //批量新增的优先级高于单条数据新增,且只会执行一个新增操作
                if (requestObject.PostDataList != null && requestObject.PostDataList.Count > 0)
                {
                    var addList = _mapper.Map <List <TBMWarehouseFileAddModel>, List <TBMWarehouseFileDbModel> >(requestObject.PostDataList);
                    foreach (var item in addList)
                    {
                        item.CompanyId = sMUserInfo.CompanyId.Value;
                    }

                    result = await curentDB.Insertable(addList).ExecuteCommandAsync() > 0;
                }
                else
                {
                    var addModel = _mapper.Map <TBMWarehouseFileDbModel>(requestObject.PostData);
                    addModel.CompanyId  = sMUserInfo.CompanyId.Value;
                    addModel.DeleteFlag = false;

                    var oldModel = curentDB.Queryable <TBMWarehouseFileDbModel>().Where(p => SqlFunc.IsNull(p.DeleteFlag, false) == false && p.WarehouseName == addModel.WarehouseName &&
                                                                                        p.CompanyId == sMUserInfo.CompanyId.Value).First();

                    if (oldModel != null)
                    {
                        return(ResponseUtil <TBMWarehouseFileAddModel, bool> .FailResult(requestObject, false, addModel.WarehouseName + " 已经存在"));
                    }

                    var oldModelCode = curentDB.Queryable <TBMWarehouseFileDbModel>().Where(p => SqlFunc.IsNull(p.DeleteFlag, false) == false && p.Code == addModel.Code &&
                                                                                            p.CompanyId == sMUserInfo.CompanyId.Value).First();

                    if (oldModelCode != null)
                    {
                        return(ResponseUtil <TBMWarehouseFileAddModel, bool> .FailResult(requestObject, false, "编号:" + addModel.Code + " 已经存在"));
                    }

                    addModel.CompanyId = sMUserInfo.CompanyId.Value;

                    result = await _db.Instance.Insertable(addModel).ExecuteCommandAsync() > 0;
                }
                //返回执行结果
                if (result)
                {
                    return(ResponseUtil <TBMWarehouseFileAddModel, bool> .SuccessResult(requestObject, true));
                }
                return(ResponseUtil <TBMWarehouseFileAddModel, bool> .FailResult(requestObject, false, "新增数据失败!"));
            }
            catch (Exception ex)
            {
                //返回异常结果
                return(ResponseUtil <TBMWarehouseFileAddModel, bool> .FailResult(requestObject, false, ex.Message));
            }
        }
        /// <summary>
        /// 历史记录
        /// </summary>
        /// <param name="requestObject"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <ResponseObject <List <HistoryInventory> > > History(HistoryInventoryQuery requestObject, CurrentUser currentUser)
        {
            List <HistoryInventory> result = new List <HistoryInventory>();

            //其他出库
            var otherOut = _db.Instance.Queryable <TWMOtherWhDetailDbModel, TWMOtherWhMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "其他入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //
            var otherIn = _db.Instance.Queryable <TWMOtherWhSendDetailDbModel, TWMOtherWhSendMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 2,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "其他出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });


            //盘盈入库
            var profitDetail = _db.Instance.Queryable <TWMProfitDetailDbModel, TWMProfitMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "盘盈入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //盘亏出库
            var deficit = _db.Instance.Queryable <TWMDeficitDetailDbModel, TWMDeficitMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 2,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "盘亏出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //生产入库
            var productionIn = _db.Instance.Queryable <TWMProductionWhDetailDbModel, TWMProductionWhMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrderNo,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "生产入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //生产出库
            var productionOut = _db.Instance.Queryable <TWMProductionDetailDbModel, TWMProductionMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 2,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "生产出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });



            //销售出库
            var saleDetail = _db.Instance.Queryable <TWMSalesDetailDbModel, TWMSalesMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "销售出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //采购入库
            var purchaseIn = _db.Instance.Queryable <TWMPurchaseDetailDbModel, TWMPurchaseMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrderNo,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "采购入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });


            //单位
            var unitList = _db.Instance.Queryable <TBMDictionaryDbModel, TBMDictionaryTypeDbModel>(
                (t, t0) => new object[]
            {
                JoinType.Left, t.TypeId == t0.ID,
            }).Where((t, t0) => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID &&
                     SqlFunc.IsNull(t0.DeleteFlag, false) == false
                     ).ToList();

            //出入库数量
            var allCountOrgin = _db.Instance.UnionAll(otherOut, otherIn, profitDetail,
                                                      deficit, productionIn, productionOut, saleDetail, purchaseIn)
                                .Where(p => p.MaterialId == requestObject.MaterialId && p.WarehouseId == requestObject.WarehouseId);

            //排序条件
            if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
            {
                foreach (var item in requestObject.OrderByConditions)
                {
                    var exp = SqlSugarUtil.GetOrderByLambda <HistoryInventory>(item.Column);
                    if (exp == null)
                    {
                        continue;
                    }
                    if (item.Condition.ToLower() != "asc" &&
                        item.Condition.ToLower() != "desc")
                    {
                        continue;
                    }
                    allCountOrgin.OrderBy($"{item.Column} {item.Condition}");
                }
            }

            var allCount = allCountOrgin.AS("t101");


            int totalNum = -1;

            if (requestObject.IsPaging)
            {
                int skipNum = requestObject.PageSize * (requestObject.PageIndex - 1);
                result = await allCount.Skip(skipNum).Take(requestObject.PageSize).ToListAsync();

                totalNum = allCount.Count();
            }
            else
            {
                result = await allCount.ToListAsync();
            }
            result.ForEach((x) =>
            {
                var unit = unitList.Where(p => p.ID == x.WarehouseUnitId).FirstOrDefault();
                if (unit != null)
                {
                    x.WarehouseUnitName = unit.DicValue;
                }

                var basicunit = unitList.Where(p => p.ID == x.BaseUnitId).FirstOrDefault();
                if (basicunit != null)
                {
                    x.BaseUnitName = basicunit.DicValue;
                }
            });

            return(ResponseUtil <List <HistoryInventory> > .SuccessResult(result, totalNum));
        }
        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));
            }
        }
Beispiel #22
0
        public ActionResult List(FormCollection collection)
        {
            using (var db = new YGSDbContext())
            {
                /*
                 * 变量定义
                 */
                var    employee = (User.Identity as AppkizIdentity).Employee;
                OrgMgr orgMgr   = new OrgMgr();

                // 页数
                int page = WHConstants.Default_Page;
                // 分页大小
                int pageSize = WHConstants.Default_Page_Size;
                // 申请数据
                var applyList = db.Apply.Where(n => n.UserId == employee.EmplID && n.IsDelete == false);

                /*
                 * 参数获取
                 */
                // 申请单状态
                var status = collection["status"];
                // 关键字
                var keyword = collection["keyword"];
                // 页数
                var pageString = collection["page"];
                // 分页大小
                var pageSizeString = collection["pageSize"];

                /*
                 * 参数校验
                 */
                // 验证状态
                if (string.IsNullOrEmpty(status))
                {
                    return(ResponseUtil.Error(400, "状态不能为空"));
                }
                else
                {
                    applyList = applyList.Where(n => n.ApplyStatus == status);
                }
                // 关键字
                if (!string.IsNullOrEmpty(keyword))
                {
                    applyList = applyList.Where(n => n.OutName.Contains(keyword));
                }
                // 验证分页大小
                if (!string.IsNullOrEmpty(pageString))
                {
                    if (int.TryParse(pageString, out page))
                    {
                        if (page <= 0)
                        {
                            return(ResponseUtil.Error(400, "分页大小错误"));
                        }
                    }
                    else
                    {
                        // 验证出错
                        return(ResponseUtil.Error(400, "分页大小错误"));
                    }
                }
                // 验证页数
                if (!string.IsNullOrEmpty(pageSizeString))
                {
                    if (int.TryParse(pageSizeString, out pageSize))
                    {
                        if (pageSize <= 0)
                        {
                            return(ResponseUtil.Error(400, "页数错误"));
                        }
                    }
                    else
                    {
                        // 验证出错
                        return(ResponseUtil.Error(400, "页数错误"));
                    }
                }

                /*
                 * 查询申请
                 */
                // 记录总数
                var totalCount = applyList.Count();
                // 记录总页数
                var totalPage = (int)Math.Ceiling((float)totalCount / pageSize);
                // 查询结果数据
                var resultRecords = applyList.OrderByDescending(n => n.CreateTime).Skip((page - 1) * pageSize).Take(pageSize).ToList();

                //预约列表格式
                List <object> applys = new List <object>();

                // 履历表
                foreach (var apply in resultRecords)
                {
                    var applyEmployee = orgMgr.GetEmployee(apply.UserId);
                    // 获得所有外出人员id
                    var historyIdList = apply.OutUsers.Split(',').Select(int.Parse).ToList();

                    applys.Add(new
                    {
                        id        = apply.ID,
                        outName   = apply.OutName,
                        desc      = apply.Desc,
                        applyDate = apply.ApplyDate.ToString("yyyy/MM/dd"),
                        applyUser = applyEmployee == null ? null : string.Format("{0} {1}", applyEmployee.DeptName, applyEmployee.EmplName),
                        outUsers  = db.User.ToList().Where(m => historyIdList.Contains(m.ID)).Select(m => new
                        {
                            id   = m.ID,
                            name = m.Name
                        }).ToList(),
                        checkOpinion = apply.CheckOpinion,
                        nextStep     = apply.ApplyStatus == WHConstants.Apply_Status_Examing ? "等待领导审批" : (apply.ApplyStatus == WHConstants.Apply_Status_Passed ? "下载并填写表格" : "修改并重新提交审核")
                    });
                }

                return(new JsonNetResult(new
                {
                    code = 200,
                    data = new
                    {
                        records = applys,
                        meta = new
                        {
                            current_page = page,
                            total_page = totalPage,
                            current_count = (page - 1) * pageSize + resultRecords.ToList().Count(),
                            total_count = totalCount,
                            per_page = pageSize
                        }
                    }
                }));
            }
        }
        /// <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));
            }
        }
Beispiel #24
0
 public ActionResult Update(int id)
 {
     /*
      * 查询申请
      */
     using (var db = new YGSDbContext())
     {
         var apply = db.Apply.Where(n => n.ID == id).FirstOrDefault();
         if (apply == null)
         {
             return(ResponseUtil.Error(400, "申请不存在"));
         }
         else
         {
             // 获得所有外出人员id
             var userIdList = apply.OutUsers.Split(',').Select(int.Parse).ToList();
             return(new JsonNetResult(new
             {
                 code = 200,
                 data = new
                 {
                     credTypes = new object[]
                     {
                         new {
                             id = 1,
                             type = WHConstants.Cred_Type_Passport,
                             name = "护照"
                         },
                         new
                         {
                             id = 2,
                             type = WHConstants.Cred_Type_Permit,
                             name = "通行证"
                         }
                     },
                     record = new
                     {
                         id = apply.ID,
                         outName = apply.OutName,
                         desc = apply.Desc,
                         credType = apply.CredType,
                         applyDate = apply.ApplyDate.ToString("yyyy/MM/dd"),
                         outUsers = db.User.Where(n => userIdList.Contains(n.ID)).Select(n => new
                         {
                             id = n.ID,
                             name = n.Name,
                             credNo = n.CredNo,
                             history = db.History.Where(m => m.ApplyId == apply.ID && m.UserId == n.ID).Select(m => new {
                                 id = m.ID,
                                 signNo = m.SignNo,
                                 signNation = m.SignNation,
                                 signTime = m.SignTime,
                                 isOut = m.IsOut
                             }).ToList()
                         }).ToList(),
                         applyAtt = db.Attachment.ToList().Where(m => apply.ApplyAtt.Split(',').Select(int.Parse).ToList().Contains(m.ID)).Select(m => new
                         {
                             id = m.ID,
                             name = m.Name,
                             url = Url.Action("Download", "Common", new { id = m.ID })
                         }),
                         outDate = new
                         {
                             show = apply.OutDate != null,
                             data = apply.OutDate == null ? "" : apply.OutDate.Value.ToString("yyyy/MM/dd")
                         },
                         afterAtt = new
                         {
                             show = apply.ApplyStatus == WHConstants.Apply_Status_Passed || apply.AfterAtt != null,
                             data = apply.AfterAtt == null ? null: db.Attachment.ToList().Where(m => apply.AfterAtt.Split(',').Select(int.Parse).ToList().Contains(m.ID)).Select(m => new
                             {
                                 id = m.ID,
                                 name = m.Name,
                                 url = Url.Action("Download", "Common", new { id = m.ID })
                             })
                         }
                     }
                 }
             }));
         }
     }
 }
        /// <summary>
        /// 删除T_WM_SalesMain数据
        /// </summary>
        /// <param name="requestObject">Delete请求参数</param>
        /// <returns>返回响应结果对象,包括响应代码,删除操作结果</returns>
        public async Task <ResponseObject <bool> > DeleteAsync(RequestDelete <DeleteModel> requestObject, CurrentUser currentUser)
        {
            var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例

            try
            {
                if (requestObject.PostData == null && requestObject.PostDataList == null)
                {
                    return(ResponseUtil <bool> .FailResult(false, "PostData、PostDataList不能都为null"));
                }
                //开启事务
                currDb.BeginTran();
                //删除标识
                var mainFlag   = true;
                var detailFlag = true;
                //var materList = BasicCacheGet.GetMaterial(currentUser);

                List <int> IDS = new List <int>();

                if (requestObject.PostDataList != null && requestObject.PostDataList.Count > 0)
                {
                    IDS      = requestObject.PostDataList.Select(p => p.ID).ToList();
                    mainFlag = await _db.Instance.Updateable <TWMSalesMainDbModel>()
                               .SetColumns(p => p.DeleteFlag == true)
                               .Where(p => IDS.Contains(p.ID))
                               .ExecuteCommandAsync() > 0;
                }
                else
                {
                    IDS.Add(requestObject.PostData.ID);
                    //单条删除
                    mainFlag = await _db.Instance.Updateable <TWMSalesMainDbModel>()
                               .SetColumns(p => p.DeleteFlag == true)
                               .Where(p => p.ID == requestObject.PostData.ID)
                               .ExecuteCommandAsync() > 0;
                }

                //批量删除



                foreach (int ids in IDS)
                {
                    List <TSSMSalesOrderDetailDbModel> toEdit = new List <TSSMSalesOrderDetailDbModel>();            //可转销售单详细信息
                    var mainEntity = _db.Instance.Queryable <TWMSalesMainDbModel>().Where(P => P.ID == ids).First(); //可转销售单主表

                    var listItem = _db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().
                                   Where(t => t.MainId == mainEntity.SourceId).ToList(); //可转销售单详细信息

                    var whDetailList = currDb.Queryable <TWMSalesDetailDbModel>().Where(p => p.MainId == ids).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.ID == item.SalesOrderDetailId).FirstOrDefault();
                        if (m != null)
                        {
                            //m.TransferNum = m.TransferNum + proNum;
                            m.TransferNum = m.TransferNum + item.SalesOrderActualNum;
                            toEdit.Add(m);
                        }
                    }

                    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();
                //返回执行结果
                return(mainFlag && detailFlag ? ResponseUtil <bool> .SuccessResult(true) : ResponseUtil <bool> .FailResult(false, "删除数据失败!"));
            }
            catch (Exception ex)
            {
                //回滚事务
                currDb.RollbackTran();
                //返回异常结果
                return(ResponseUtil <bool> .FailResult(false, ex.Message));
            }
        }
Beispiel #26
0
        public ActionResult DoUpdate(FormCollection collection)
        {
            /*
             * 变量定义
             */
            // 申请ID
            int aid = 0;

            /*
             * 参数获取
             */
            // 申请ID
            var id = collection["id"];
            // 团组名
            var outName = collection["outName"];
            // 出访任务
            var descn = collection["desc"];
            // 出访类型
            var credType = collection["credType"];
            // 人员ID列表
            var outUsers = collection["outUsers"];
            // 申请附件ID列表
            var applyAtt = collection["applyAtt"];
            // 资料回传附件ID列表
            var afterAtt = collection["afterAtt"];

            /*
             * 参数校验
             */
            // 申请ID
            if (string.IsNullOrEmpty(id))
            {
                return(ResponseUtil.Error(400, "申请ID不能为空"));
            }
            else
            {
                if (!int.TryParse(id, out aid))
                {
                    return(ResponseUtil.Error(400, "申请ID不正确"));
                }
            }
            // 团组名
            if (string.IsNullOrEmpty(outName))
            {
                return(ResponseUtil.Error(400, "团组名不能为空"));
            }
            // 出访任务
            if (string.IsNullOrEmpty(descn))
            {
                return(ResponseUtil.Error(400, "出访类型不能为空"));
            }
            // 人员ID列表
            if (string.IsNullOrEmpty(outUsers))
            {
                return(ResponseUtil.Error(400, "出访人员不能为空"));
            }
            // 申请附件ID不能为空
            if (string.IsNullOrEmpty(applyAtt))
            {
                return(ResponseUtil.Error(400, "申请附件不能为空"));
            }

            /*
             * 查询申请
             */
            using (var db = new YGSDbContext())
            {
                var apply = db.Apply.Where(n => n.ID == aid).FirstOrDefault();
                if (apply == null)
                {
                    return(ResponseUtil.Error(400, "申请不存在"));
                }
                else
                {
                    apply.OutName  = outName;
                    apply.Desc     = descn;
                    apply.CredType = credType;
                    apply.OutUsers = outUsers;
                    apply.ApplyAtt = applyAtt;
                    if (!string.IsNullOrEmpty(afterAtt))
                    {
                        apply.AfterAtt = afterAtt;
                    }
                    else
                    {
                        apply.AfterAtt = null;
                    }
                    // 如果当前申请是被拒绝,则重新到待审核中
                    if (apply.ApplyStatus == WHConstants.Apply_Status_Rejected)
                    {
                        apply.ApplyStatus = WHConstants.Apply_Status_Examing;

                        var notifyUserIdList = NotificationUtil.GetNotificationUsers();
                        foreach (var user in notifyUserIdList)
                        {
                            NotificationUtil.SendNotification(user, "您有新的出国申请审核", "/Apps/YGS/Home/Check");
                        }
                    }
                    db.SaveChanges();

                    return(ResponseUtil.OK(200, "申请更新成功"));
                }
            }
        }
        /// <summary>
        /// 获取T_WM_OtherWhDetail数据
        /// </summary>
        /// <param name="requestObject">Get请求参数</param>
        /// <returns>返回响应结果对象,包括响应代码,查询操作结果</returns>
        public async Task <ResponseObject <int, List <TWMOtherWhDetailQueryModel> > > GetDetailListAsync(RequestObject <int> requestObject)
        {
            try
            {
                //查询结果集对象
                List <TWMOtherWhDetailQueryModel> queryData = null;
                //总记录数
                RefAsync <int> totalNumber = -1;
                var            query       = _db.Instance.Queryable <TWMOtherWhDetailDbModel, TBMMaterialFileDbModel, TBMDictionaryTypeDbModel
                                                                     , TBMDictionaryDbModel, TBMDictionaryDbModel, TBMDictionaryDbModel>(
                    (t, t0, t1, t2, t3, t4) => 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
                }
                    );

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query.Select((t, t0, t1, t2, t3, t4) => new TWMOtherWhDetailQueryModel
                    {
                        ID                = t.ID,
                        MainId            = t.MainId,
                        MaterialId        = t.MaterialId,
                        WarehouseId       = t.WarehouseId,
                        BatchNumber       = t.BatchNumber,
                        ShouldNumber      = t.ShouldNumber,
                        ActualNumber      = t.ActualNumber,
                        MaterialCode      = t0.MaterialCode,
                        MaterialName      = t0.MaterialName,
                        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,
                        WarehouseRate     = t0.WarehouseRate,
                        Spec              = t0.Spec,
                        UnitPrice         = t.UnitPrice,
                        Amount            = t.Amount,
                        ValidityPeriod    = t.ValidityPeriod,
                    })
                                .Where(t => t.MainId == requestObject.PostData)
                                .ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query.Select((t, t0, t1, t2, t3, t4) => new TWMOtherWhDetailQueryModel
                    {
                        ID                = t.ID,
                        MainId            = t.MainId,
                        MaterialId        = t.MaterialId,
                        WarehouseId       = t.WarehouseId,
                        BatchNumber       = t.BatchNumber,
                        ShouldNumber      = t.ShouldNumber,
                        ActualNumber      = t.ActualNumber,
                        MaterialCode      = t0.MaterialCode,
                        MaterialName      = t0.MaterialName,
                        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,
                        WarehouseRate     = t0.WarehouseRate,
                        Spec              = t0.Spec,
                        UnitPrice         = t.UnitPrice,
                        Amount            = t.Amount,
                        ValidityPeriod    = t.ValidityPeriod,
                    })
                                .Where(t => t.MainId == requestObject.PostData)
                                .ToListAsync();
                }
                //返回执行结果
                return(ResponseUtil <int, List <TWMOtherWhDetailQueryModel> > .SuccessResult(requestObject, queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <int, List <TWMOtherWhDetailQueryModel> > .FailResult(requestObject, null, ex.Message));
            }
        }
Beispiel #28
0
        public ActionResult DoAdd(FormCollection collection)
        {
            /*
             * 变量定义
             */
            // 当前用户
            var employee = (User.Identity as AppkizIdentity).Employee;

            /*
             * 参数获取
             */
            // 组团名
            var outName = collection["outName"];
            // 任务描述
            var descn = collection["desc"];
            // 出访类型
            var credType = collection["credType"];
            // 出访人员履历
            var outUsers = collection["outUsers"];
            // 申请附件
            var applyAtt = collection["applyAtt"];

            /*
             * 参数校验
             */
            // 团组名
            if (string.IsNullOrEmpty(outName))
            {
                return(ResponseUtil.Error(400, "团组名不能为空"));
            }
            // 出访任务
            if (string.IsNullOrEmpty(descn))
            {
                return(ResponseUtil.Error(400, "任务描述不能为空"));
            }
            // 出访类型
            if (string.IsNullOrEmpty(credType))
            {
                return(ResponseUtil.Error(400, "出访类型不能为空"));
            }
            // 人员ID列表
            if (string.IsNullOrEmpty(outUsers))
            {
                return(ResponseUtil.Error(400, "出访人员不能为空"));
            }
            // 申请附件ID不能为空
            if (string.IsNullOrEmpty(applyAtt))
            {
                return(ResponseUtil.Error(400, "申请附件不能为空"));
            }

            /*
             * 存储申请
             */
            using (var db = new YGSDbContext())
            {
                var apply = new YGS_Apply();
                apply.OutName     = outName;
                apply.Desc        = descn;
                apply.UserId      = employee.EmplID;
                apply.CredType    = credType;
                apply.OutUsers    = outUsers;
                apply.ApplyAtt    = applyAtt;
                apply.ApplyStatus = WHConstants.Apply_Status_Examing;
                apply.ApplyDate   = DateTime.Now;
                apply.NextStep    = "下载并填写表格";
                apply.CreateTime  = DateTime.Now;
                apply.UpdateTime  = DateTime.Now;
                apply.IsDelete    = false;
                db.Apply.Add(apply);
                db.SaveChanges();

                var notifyUserIdList = NotificationUtil.GetNotificationUsers();

                foreach (var user in notifyUserIdList)
                {
                    NotificationUtil.SendNotification(user, "您有新的出国申请审核", "/Apps/YGS/Home/Check");
                }

                return(ResponseUtil.OK(200, "创建成功"));
            }
        }
        /// <summary>
        /// 获取T_WM_OtherWhMain主表数据数据
        /// </summary>
        /// <param name="requestObject">Get请求参数</param>
        /// <param name="currentUser"></param>
        /// <returns>返回响应结果对象,包括响应代码,查询操作结果</returns>
        public async Task <ResponseObject <TWMOtherWhMainQueryModel, List <TWMOtherWhMainQueryModel> > > GetMainListAsync(RequestObject <TWMOtherWhMainQueryModel> requestObject,
                                                                                                                          CurrentUser currentUser)
        {
            try
            {
                List <TWMOtherWhMainQueryModel> queryData = null; //查询结果集对象
                RefAsync <int> totalNumber = -1;                  //总记录数
                var            query       = _db.Instance.Queryable <TWMOtherWhMainDbModel, TSMUserAccountDbModel, TSMUserAccountDbModel, TSMUserAccountDbModel>(
                    (t, t0, t1, t2) => new object[]
                {
                    JoinType.Left, t.OperatorId == t0.ID,
                    JoinType.Left, t.ReceiptId == t1.ID,
                    JoinType.Left, t.AuditId == t2.ID
                });
                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var conditionals = SqlSugarUtil.GetConditionalModels(requestObject.QueryConditions);
                    query.Where(conditionals);
                }
                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    foreach (var item in requestObject.OrderByConditions)
                    {
                        var exp = SqlSugarUtil.GetOrderByLambda <TWMOtherWhMainDbModel>(item.Column);
                        if (exp == null)
                        {
                            continue;
                        }
                        if (item.Condition.ToLower() != "asc" &&
                            item.Condition.ToLower() != "desc")
                        {
                            continue;
                        }
                        query.OrderBy($"{item.Column} {item.Condition}");
                    }
                }

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query.Select((t, t0, t1, t2) => new TWMOtherWhMainQueryModel
                    {
                        ID = t.ID,
                        WarehousingType  = t.WarehousingType,
                        WarehousingDate  = t.WarehousingDate,
                        WarehousingOrder = t.WarehousingOrder,
                        AuditStatus      = t.AuditStatus,
                        OperatorId       = t.OperatorId,
                        OperatorName     = t0.AccountName,
                        ReceiptId        = t.ReceiptId,
                        ReceiptName      = t1.AccountName,
                        AuditId          = t.AuditId,
                        AuditName        = t2.AccountName,
                        AuditTime        = t.AuditTime,
                        DeleteFlag       = t.DeleteFlag,
                        Number           = t.Number,
                        Amount           = t.Amount,
                        AllowEdit        = currentUser.UserID == t.OperatorId && t.AuditStatus != 2
                    })
                                .Where(t => t.CompanyId == currentUser.CompanyID && !(bool)t.DeleteFlag)
                                .ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query.Select((t, t0, t1, t2) => new TWMOtherWhMainQueryModel
                    {
                        ID = t.ID,
                        WarehousingType  = t.WarehousingType,
                        WarehousingDate  = t.WarehousingDate,
                        WarehousingOrder = t.WarehousingOrder,
                        AuditStatus      = t.AuditStatus,
                        OperatorId       = t.OperatorId,
                        OperatorName     = t0.AccountName,
                        ReceiptId        = t.ReceiptId,
                        ReceiptName      = t1.AccountName,
                        AuditId          = t.AuditId,
                        AuditName        = t2.AccountName,
                        AuditTime        = t.AuditTime,
                        DeleteFlag       = t.DeleteFlag,
                        Number           = t.Number,
                        Amount           = t.Amount,
                        AllowEdit        = currentUser.UserID == t.OperatorId && t.AuditStatus != 2
                    })
                                .Where(t => t.CompanyId == currentUser.CompanyID && !(bool)t.DeleteFlag)
                                .ToListAsync();
                }

                //返回执行结果
                return(ResponseUtil <TWMOtherWhMainQueryModel, List <TWMOtherWhMainQueryModel> > .SuccessResult(requestObject, queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <TWMOtherWhMainQueryModel, List <TWMOtherWhMainQueryModel> > .FailResult(requestObject, null, ex.Message));
            }
        }
        /// <summary>
        /// 获取T_BM_Package数据
        /// </summary>
        /// <param name="requestObject">返回响应结果对象,包括响应代码,查询操作结果</param>
        /// <returns></returns>
        public async Task <ResponseObject <List <TBMPackageQueryModel> > > GetAsync(RequestGet requestObject, CurrentUser currentUser)
        {
            try
            {
                List <TBMPackageQueryModel> queryData = null; //查询结果集对象
                RefAsync <int> totalNumber            = -1;   //总记录数
                var            query = _db.Instance.Queryable <TBMPackageDbModel, TSMUserAccountDbModel, TSMUserAccountDbModel>(
                    (t, t1, t2) => new object[]
                {
                    JoinType.Left, t.CreateId == t1.ID,
                    JoinType.Left, t.UpdateId == t2.ID
                }).Where((t, t1, t2) => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID);
                //查询条件
                if (requestObject.QueryConditions != null && requestObject.QueryConditions.Count > 0)
                {
                    var conditionals = SqlSugarUtil.GetConditionalModels(requestObject.QueryConditions);
                    foreach (ConditionalModel item in conditionals)
                    {
                        item.FieldName = item.FieldName = $"t.{item.FieldName}";
                    }
                    query.Where(conditionals);
                }
                //排序条件
                if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
                {
                    foreach (var item in requestObject.OrderByConditions)
                    {
                        var exp = SqlSugarUtil.GetOrderByLambda <TBMPackageDbModel>(item.Column);
                        if (exp == null)
                        {
                            continue;
                        }
                        if (item.Condition.ToLower() != "asc" &&
                            item.Condition.ToLower() != "desc")
                        {
                            continue;
                        }
                        query.OrderBy($"{item.Column} {item.Condition}");
                    }
                }

                //执行查询
                if (requestObject.IsPaging)
                {
                    queryData = await query
                                .Where(t => t.DeleteFlag == false)
                                .Select((t, t1, t2) => new TBMPackageQueryModel
                    {
                        ID         = t.ID,
                        DicCode    = t.DicCode,
                        DicValue   = t.DicValue,
                        Remark     = t.Remark,
                        CreateTime = t.CreateTime,
                        CreateId   = t.CreateId,
                        CreateName = t1.AccountName,
                        UpdateTime = t.UpdateTime,
                        UpdateId   = t.UpdateId,
                        UpdateName = t2.AccountName,
                        ImgPath    = t.ImgPath,
                    })
                                .ToPageListAsync(requestObject.PageIndex, requestObject.PageSize, totalNumber);
                }
                else
                {
                    queryData = await query
                                .Where(t => t.DeleteFlag == false)
                                .Select((t, t1, t2) => new TBMPackageQueryModel
                    {
                        ID         = t.ID,
                        DicCode    = t.DicCode,
                        DicValue   = t.DicValue,
                        Remark     = t.Remark,
                        CreateTime = t.CreateTime,
                        CreateId   = t.CreateId,
                        CreateName = t1.AccountName,
                        UpdateTime = t.UpdateTime,
                        UpdateId   = t.UpdateId,
                        UpdateName = t2.AccountName,
                        ImgPath    = t.ImgPath,
                    })
                                .ToListAsync();
                }


                //返回执行结果
                return(ResponseUtil <List <TBMPackageQueryModel> > .SuccessResult(queryData, totalNumber));
            }
            catch (Exception ex)
            {
                //返回查询异常结果
                return(ResponseUtil <List <TBMPackageQueryModel> > .FailResult(null, ex.Message));
            }
        }