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
|
{
|
/// <summary>
|
/// 商品分类
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// 查询列表
|
/// </summary>
|
/// <param name="page">页数</param>
|
/// <param name="key">关键字</param>
|
/// <param name="intPageSize">条数</param>
|
/// <returns></returns>
|
[HttpGet]
|
public async Task<MessageModel<PageModel<WMProductClass>>> Index(int page = 1, string key = "", int intPageSize = 20)
|
{
|
PageModel<WMProductClass> productClass = new PageModel<WMProductClass>();
|
if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
|
{
|
key = "";
|
}
|
|
Expression<Func<WMProductClass, bool>> 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<int> pidarr = new List<int>
|
{
|
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<PageModel<WMProductClass>>()
|
{
|
msg = "获取成功",
|
success = productClass.dataCount >= 0,
|
response = productClass
|
};
|
}
|
|
/// <summary>
|
/// 获取列表
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet]
|
[AllowAnonymous]
|
public async Task<MessageModel<object>> Get(int id = 0)
|
{
|
var classList = await _wMProductClassServices.Query();
|
|
//classList = classList.Where(x => x.SysOrgId == _user.SysOrgId).ToList();
|
|
return new MessageModel<object>()
|
{
|
msg = "获取成功",
|
success = true,
|
response = new
|
{
|
classList
|
}
|
};
|
}
|
|
/// <summary>
|
/// 查询树形节点
|
/// </summary>
|
/// <param name="parent">父节点</param>
|
/// <param name="key">关键字</param>
|
/// <returns></returns>
|
[HttpGet]
|
[AllowAnonymous]
|
public async Task<MessageModel<List<WMProductClass>>> GetTreeTable(int parent = 0, string key = "")
|
{
|
List<WMProductClass> productClass = new List<WMProductClass>();
|
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<int> parentIdarr = new List<int> { };
|
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<List<WMProductClass>>()
|
{
|
msg = "获取成功",
|
success = productClass.Count >= 0,
|
response = productClass
|
};
|
}
|
|
/// <summary>
|
/// 获取分类树下拉
|
/// </summary>
|
/// <param name="parentId"></param>
|
/// <param name="needbtn"></param>
|
/// <returns></returns>
|
[HttpGet]
|
[AllowAnonymous]
|
public async Task<MessageModel<ProductClassTree>> GetProductClassTree(int parentId = 0, bool needbtn = false)
|
{
|
var data = new MessageModel<ProductClassTree>();
|
|
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;
|
}
|
|
/// <summary>
|
/// 获取分类树联动
|
/// </summary>
|
/// <param name="parentId"></param>
|
/// <param name="needbtn"></param>
|
/// <returns></returns>
|
[HttpGet]
|
[AllowAnonymous]
|
public async Task<MessageModel<ProductClassTree>> GetProductClassTreeLink(int parentId = 0, bool needbtn = false)
|
{
|
var data = new MessageModel<ProductClassTree>();
|
|
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<int> parentIdarr = new List<int> { };
|
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;
|
}
|
|
/// <summary>
|
/// 添加
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<MessageModel<string>> Add([FromBody] WMProductClass request)
|
{
|
var data = new MessageModel<string>();
|
|
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;
|
}
|
|
/// <summary>
|
/// 更新
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPut]
|
public async Task<MessageModel<string>> Update([FromBody] WMProductClass request)
|
{
|
var data = new MessageModel<string>();
|
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;
|
}
|
|
/// <summary>
|
/// 删除
|
/// </summary>
|
/// <param name="id"></param>
|
/// <returns></returns>
|
//[HttpDelete]
|
//public async Task<MessageModel<string>> Delete(int id)
|
//{
|
// var data = new MessageModel<string>();
|
// 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;
|
//}
|
|
/// <summary>
|
/// 导出商品分类表格
|
/// </summary>
|
[HttpGet]
|
public async Task<IActionResult> 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<string>() { "编号", "分类名称", "排序", "分类级别(数字代表相应的级别)", "所属组织" };
|
|
var stream = ExcelHelper.CreateExcelStreamFromList(PCList, heads);
|
return File(stream, "application/octet-stream", "商品分类.xlsx");
|
}
|
return null;
|
}
|
|
/// <summary>
|
/// 导入商品分类表格
|
/// </summary>
|
[HttpPost]
|
public async Task<MessageModel<string>> ImportProductClass([FromForm] IFormCollection files)
|
{
|
var data = new MessageModel<string>();
|
var importProductClassModel = new ImportProductClassViewModels();
|
var importProductClassList = new List<ImportProductClassViewModels>();
|
|
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;
|
}
|
}
|
}
|
}
|