using JiepeiWMS.Common.Helper; using JiepeiWMS.Common.HttpContextUser; using JiepeiWMS.Extends; using JiepeiWMS.IServices; using JiepeiWMS.Model; using JiepeiWMS.Model.Models; using JiepeiWMS.Model.ViewModels; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace JiepeiWMS.Api.Controllers { [Route("api/[controller]/[action]")] [ApiController] [Authorize(Permissions.Name)] public class WMProductClassController : ControllerBase { /// /// 商品分类 /// private readonly IWMProductClassServices _wMProductClassServices; private readonly ISysOrgServices _BllSysOrg; readonly IUser _user; private readonly ISysUserInfoServices _sysUserInfoServices; private readonly IWMProductListServices _wMProductListServices; private readonly IUserRoleServices _userRole; public WMProductClassController(IWMProductClassServices WMProductClassServices, ISysOrgServices BllSysOrg, IUser user, ISysUserInfoServices SysUserInfoServices, IWMProductListServices WMProductListServices, IUserRoleServices userRole) { _wMProductClassServices = WMProductClassServices; _BllSysOrg = BllSysOrg; _user = user; _sysUserInfoServices = SysUserInfoServices; _wMProductListServices = WMProductListServices; _userRole = userRole; } /// /// 查询列表 /// /// 页数 /// 关键字 /// 条数 /// [HttpGet] public async Task>> Index(int page = 1, string key = "", int intPageSize = 20) { PageModel productClass = new PageModel(); if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } Expression> whereExpression = s => s.Id > 0; //筛选主体Id //var userInfoModel = await _sysUserInfoServices.QueryById(_user.ID); //if (userInfoModel != null) //{ // whereExpression = whereExpression.And(s => s.SysOrgId == userInfoModel.SysOrgId); //} if (!string.IsNullOrWhiteSpace(key)) { whereExpression = whereExpression.And(s => s.ClassName != null && s.ClassName.Contains(key.Trim())); } productClass = await _wMProductClassServices.QueryPage(whereExpression, page, intPageSize, " Id desc "); var productClassView = productClass.data; var productClassAll = await _wMProductClassServices.Query(); foreach (var item in productClassView) { List pidarr = new List { item.ParentId }; if (item.ParentId > 0) { pidarr.Add(0); } var parent = productClassAll.FirstOrDefault(d => d.Id == item.ParentId); while (parent != null) { pidarr.Add(parent.Id); parent = productClassAll.FirstOrDefault(d => d.Id == parent.ParentId); } item.ParentIdArr = pidarr.OrderBy(d => d).Distinct().ToList(); } productClass.data = productClassView; return new MessageModel>() { msg = "获取成功", success = productClass.dataCount >= 0, response = productClass }; } /// /// 获取列表 /// /// [HttpGet] [AllowAnonymous] public async Task> Get(int id = 0) { var classList = await _wMProductClassServices.Query(); //classList = classList.Where(x => x.SysOrgId == _user.SysOrgId).ToList(); return new MessageModel() { msg = "获取成功", success = true, response = new { classList } }; } /// /// 查询树形节点 /// /// 父节点 /// 关键字 /// [HttpGet] [AllowAnonymous] public async Task>> GetTreeTable(int parent = 0, string key = "") { List productClass = new List(); var apiList = await _wMProductClassServices.Query(); var WMProductClassList = await _wMProductClassServices.Query(); if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } //筛选主体Id //WMProductClassList = WMProductClassList.Where(a => a.SysOrgId == _user.SysOrgId).ToList(); if (key != "") { productClass = WMProductClassList.Where(a => a.ClassName.Contains(key)).OrderBy(a => a.Sort).ToList(); } else { productClass = WMProductClassList.Where(a => a.ParentId == parent).OrderBy(a => a.Sort).ToList(); } foreach (var item in productClass) { List parentIdarr = new List { }; var productClasssModel = WMProductClassList.FirstOrDefault(d => d.Id == item.ParentId); while (productClasssModel != null) { parentIdarr.Add(productClasssModel.Id); productClasssModel = WMProductClassList.FirstOrDefault(d => d.Id == productClasssModel.ParentId); } parentIdarr.Reverse(); parentIdarr.Insert(0, 0); item.ParentIdArr = parentIdarr; item.hasChildren = key != "" ? false : WMProductClassList.Where(d => d.ParentId == item.Id).Any(); } return new MessageModel>() { msg = "获取成功", success = productClass.Count >= 0, response = productClass }; } /// /// 获取分类树下拉 /// /// /// /// [HttpGet] [AllowAnonymous] public async Task> GetProductClassTree(int parentId = 0, bool needbtn = false) { var data = new MessageModel(); var productClass = await _wMProductClassServices.Query(); var productClassTrees = (from child in productClass orderby child.Id select new ProductClassTree { value = child.Id, label = child.ClassName, parentId = child.ParentId, order = child.Sort, }).ToList(); ProductClassTree rootRoot = new ProductClassTree { value = 0, parentId = 0, label = "根节点" }; productClassTrees = productClassTrees.OrderBy(d => d.order).ToList(); RecursionHelper.LoopToAppendChildrenProductClass(productClassTrees, rootRoot, parentId, needbtn); data.success = true; if (data.success) { data.response = rootRoot; data.msg = "获取成功"; } return data; } /// /// 获取分类树联动 /// /// /// /// [HttpGet] [AllowAnonymous] public async Task> GetProductClassTreeLink(int parentId = 0, bool needbtn = false) { var data = new MessageModel(); var productClass = await _wMProductClassServices.Query(); var productClassTrees = (from child in productClass orderby child.Id select new ProductClassTree { value = child.Id, label = child.ClassName, parentId = child.ParentId, order = child.Sort, }).ToList(); ProductClassTree rootRoot = new ProductClassTree { value = 0, parentId = 0, label = "根节点" }; foreach (var item in productClass) { List parentIdarr = new List { }; var ClassModel = productClass.FirstOrDefault(d => d.Id == parentId); while (ClassModel != null) { parentIdarr.Add(ClassModel.Id); ClassModel = productClass.FirstOrDefault(d => d.Id == ClassModel.ParentId); } parentIdarr.Reverse(); parentIdarr.Insert(0, 0); rootRoot.ParentIdArr = parentIdarr; } productClassTrees = productClassTrees.OrderBy(d => d.order).ToList(); RecursionHelper.LoopToAppendChildrenProductClass(productClassTrees, rootRoot, parentId, needbtn); data.success = true; if (data.success) { data.response = rootRoot; data.msg = "获取成功"; } return data; } /// /// 添加 /// /// /// [HttpPost] public async Task> Add([FromBody] WMProductClass request) { var data = new MessageModel(); var productClassList = await _wMProductClassServices.Query(x => x.Id == request.ParentId); if (productClassList != null && productClassList.Any()) { request.LevelId = productClassList.FirstOrDefault().LevelId + 1; } else { request.LevelId = 1; } request.SysOrgId = _user.SysOrgId; var id = await _wMProductClassServices.Add(request); data.success = id > 0; if (data.success) { data.response = id.ObjToString(); data.msg = "添加成功"; } return data; } /// /// 更新 /// /// /// [HttpPut] public async Task> Update([FromBody] WMProductClass request) { var data = new MessageModel(); if (request.Id > 0) { var productClassList = await _wMProductClassServices.GetParentIdList(request.ParentId); if (productClassList != null && productClassList.Any()) { request.LevelId = productClassList.FirstOrDefault().LevelId; } else { request.LevelId = 1; } data.success = await _wMProductClassServices.Update(request); if (data.success) { data.msg = "更新成功"; data.response = request?.Id.ObjToString(); } } return data; } /// /// 删除 /// /// /// //[HttpDelete] //public async Task> Delete(int id) //{ // var data = new MessageModel(); // if (id > 0) // { // var productClassModel = await _wMProductClassServices.QueryById(id); // var productClassList = await _wMProductClassServices.GetParentIdList(productClassModel.Id); // if (productClassList != null && productClassList.Any()) // { // data.success = false; // data.msg = "请先删除该分类下的子节点"; // } // else // { // var productSpecList = await _wMProductListServices.Query(x => x.ClassId == productClassModel.Id); // if (productSpecList != null && productSpecList.Any()) // { // data.success = false; // data.msg = "请先删除商品列表内所关联的规格"; // } // else // { // data.success = await _wMProductClassServices.Delete(productClassModel); // if (data.success) // { // data.msg = "删除成功"; // data.response = productClassModel?.Id.ObjToString(); // } // } // } // } // return data; //} /// /// 导出商品分类表格 /// [HttpGet] public async Task ExportProductClass() { var productClassList = await _wMProductClassServices.QuerySql("select Id,ClassName,Sort,LevelId,(select CompanyName from SysOrg where id = SysOrgId)OrgName from WMProductClass pl"); if (productClassList != null && productClassList.Any()) { var PCList = productClassList.Select(c => new { c.Id, c.ClassName, c.Sort, c.LevelId, c.OrgName }).ToList(); var heads = new List() { "编号", "分类名称", "排序", "分类级别(数字代表相应的级别)", "所属组织" }; var stream = ExcelHelper.CreateExcelStreamFromList(PCList, heads); return File(stream, "application/octet-stream", "商品分类.xlsx"); } return null; } /// /// 导入商品分类表格 /// [HttpPost] public async Task> ImportProductClass([FromForm] IFormCollection files) { var data = new MessageModel(); var importProductClassModel = new ImportProductClassViewModels(); var importProductClassList = new List(); try { var sysUserInfoModel = await _sysUserInfoServices.QueryById(_user.ID); if (sysUserInfoModel == null || sysUserInfoModel.tdIsDelete == true) { data.msg = "当前用户已被禁用无法进行导入"; data.response = 0.ObjToString(); data.status = 500; return data; } var userRoleList = await _userRole.Query(x => x.UserId == sysUserInfoModel.uID); if (userRoleList == null && userRoleList.Count() == 0) { data.msg = "当前用户还未配置角色无法进行导入"; data.response = 0.ObjToString(); data.status = 500; return data; } var path = Directory.GetCurrentDirectory(); var fileFolder = Path.Combine(path, "ImportFile"); if (!Directory.Exists(fileFolder)) Directory.CreateDirectory(fileFolder); FormFileCollection fileCollection = (FormFileCollection)files.Files; foreach (var file in fileCollection) { var fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(file.FileName); var filePath = Path.Combine(fileFolder, fileName); //using (var stream = new FileStream(filePath, FileMode.Create)) //{ // await file.CopyToAsync(stream); //} //var dtExcel = ExcelHelper.Read(filePath); using (var stream = new FileStream(filePath, FileMode.Create)) { file.CopyTo(stream); } var dtExcel = ExcelHelper.ImportExcel(filePath); foreach (DataRow myRow in dtExcel.Rows) { if (string.IsNullOrWhiteSpace(myRow[0].ToString())) continue; if (string.IsNullOrWhiteSpace(myRow[1].ToString())) continue; if (string.IsNullOrWhiteSpace(myRow[2].ToString())) continue; if (string.IsNullOrWhiteSpace(myRow[3].ToString())) continue; importProductClassModel = new ImportProductClassViewModels() { OrgName = myRow[0].ToString(), ClassGrade = myRow[1].ToString(), ClassCode = myRow[2].ToString(), ClassName = myRow[3].ToString(), }; importProductClassList.Add(importProductClassModel); } foreach (var item in importProductClassList) { var sysOrgModel = await _BllSysOrg.GetShortName(item.OrgName); var Level = ExcelHelper.GradeForSort(item.ClassGrade); var productClassList = await _wMProductClassServices.GetClassCodeList(item.ClassCode, Level); //匹配分类编码和等级 var productClassModel = await _wMProductClassServices.GetModel(x => x.ClassCode == item.ClassCode); if (productClassModel != null) { //更新商品分类表 productClassModel.ClassName = item.ClassName; productClassModel.LevelId = Level; await _wMProductClassServices.Update(productClassModel); } else { var productClassParentId = productClassList.Any() ? productClassList.OrderBy(x => x.Id).FirstOrDefault().Id : 0; var productClassSort = await _wMProductClassServices.Query(x => x.ParentId == productClassParentId); //添加商品分类表 var productClass = new WMProductClass(); productClass.ClassName = item.ClassName; productClass.ClassCode = item.ClassCode; productClass.Sort = productClassSort.Count(); productClass.ParentId = productClassParentId; productClass.LevelId = Level; productClass.SysOrgId = sysOrgModel == null ? 0 : sysOrgModel.Id; await _wMProductClassServices.Add(productClass); } } } data.response = 1.ObjToString(); data.msg = "导入商品分类成功"; data.success = true; return data; } catch (Exception ex) { data.msg = ex.Message; data.response = 0.ObjToString(); data.status = 500; return data; } } } }