/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Caching.AutoMate.RedisCache; using CoreCms.Net.Configuration; using CoreCms.Net.Filter; using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.FromBody; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; using CoreCms.Net.Web.Admin.Infrastructure; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using NPOI.HSSF.UserModel; using SqlSugar; using Yitter.IdGenerator; namespace CoreCms.Net.Web.Admin.Controllers { /// /// 商品表 /// [Description("商品表")] [Route("api/[controller]/[action]")] [ApiController] [RequiredErrorForAdmin] [Authorize(Permissions.Name)] public class CoreCmsGoodsController : ControllerBase { private readonly ICoreCmsBrandServices _brandServices; private readonly ICoreCmsGoodsCategoryExtendServices _categoryExtendServices; private readonly ICoreCmsGoodsCategoryServices _coreCmsGoodsCategoryServices; private readonly ICoreCmsGoodsServices _coreCmsGoodsServices; private readonly ICoreCmsGoodsGradeServices _goodsGradeServices; private readonly ICoreCmsGoodsParamsServices _goodsParamsServices; private readonly ICoreCmsGoodsTypeSpecServices _goodsTypeSpecServices; private readonly ICoreCmsLabelServices _labelServices; private readonly ICoreCmsProductsServices _productsServices; private readonly ICoreCmsSettingServices _settingServices; private readonly ICoreCmsGoodsTypeSpecValueServices _typeSpecValueServices; private readonly ICoreCmsUserGradeServices _userGradeServices; private readonly ICoreCmsProductsDistributionServices _productsDistributionServices; private readonly IWebHostEnvironment _webHostEnvironment; private readonly IRedisOperationRepository _redisOperationRepository; private readonly ICoreCmsGoodsCategoryExtendServices _goodsCategoryExtendServices; /// /// 构造函数 /// public CoreCmsGoodsController(IWebHostEnvironment webHostEnvironment , ICoreCmsGoodsServices coreCmsGoodsServices , ICoreCmsSettingServices settingServices , ICoreCmsBrandServices brandServices , ICoreCmsGoodsCategoryServices coreCmsGoodsCategoryServices , ICoreCmsUserGradeServices userGradeServices , ICoreCmsGoodsParamsServices goodsParamsServices , ICoreCmsGoodsTypeSpecValueServices typeSpecValueServices , ICoreCmsGoodsGradeServices goodsGradeServices , ICoreCmsProductsServices productsServices , ICoreCmsGoodsCategoryExtendServices categoryExtendServices , ICoreCmsLabelServices labelServices , ICoreCmsProductsDistributionServices productsDistributionServices , ICoreCmsGoodsTypeSpecServices goodsTypeSpecServices, IRedisOperationRepository redisOperationRepository, ICoreCmsGoodsCategoryExtendServices goodsCategoryExtendServices) { _webHostEnvironment = webHostEnvironment; _coreCmsGoodsServices = coreCmsGoodsServices; _settingServices = settingServices; _brandServices = brandServices; _coreCmsGoodsCategoryServices = coreCmsGoodsCategoryServices; _userGradeServices = userGradeServices; _goodsParamsServices = goodsParamsServices; _typeSpecValueServices = typeSpecValueServices; _goodsGradeServices = goodsGradeServices; _productsServices = productsServices; _categoryExtendServices = categoryExtendServices; _labelServices = labelServices; _productsDistributionServices = productsDistributionServices; _goodsTypeSpecServices = goodsTypeSpecServices; _redisOperationRepository = redisOperationRepository; _goodsCategoryExtendServices = goodsCategoryExtendServices; } #region 获取列表============================================================ // POST: Api/CoreCmsGoods/GetPageList /// /// 获取列表 /// /// [HttpPost] [Description("获取列表")] public async Task GetPageList() { var jm = new AdminUiCallBack(); var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1); var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30); var where = PredicateBuilder.True(); //获取排序字段 var orderField = Request.Form["orderField"].FirstOrDefault(); Expression> orderEx = orderField switch { "id" => p => p.id, "bn" => p => p.bn, "name" => p => p.name, "brief" => p => p.brief, "price" => p => p.price, "costprice" => p => p.costprice, "mktprice" => p => p.mktprice, "images" => p => p.images, "goodsCategoryId" => p => p.goodsCategoryId, "goodsTypeId" => p => p.goodsTypeId, "brandId" => p => p.brandId, "isNomalVirtual" => p => p.isNomalVirtual, "isMarketable" => p => p.isMarketable, "stock" => p => p.stock, "freezeStock" => p => p.freezeStock, "weight" => p => p.weight, "unit" => p => p.unit, "intro" => p => p.intro, "spesDesc" => p => p.spesDesc, "parameters" => p => p.parameters, "commentsCount" => p => p.commentsCount, "viewCount" => p => p.viewCount, "buyCount" => p => p.buyCount, "uptime" => p => p.uptime, "downtime" => p => p.downtime, "sort" => p => p.sort, "labelIds" => p => p.labelIds, "newSpec" => p => p.newSpec, "createTime" => p => p.createTime, "updateTime" => p => p.updateTime, "isRecommend" => p => p.isRecommend, "isHot" => p => p.isHot, "isDel" => p => p.isDel, _ => p => p.id }; //设置排序方式 var orderDirection = Request.Form["orderDirection"].FirstOrDefault(); var orderBy = orderDirection switch { "asc" => OrderByType.Asc, "desc" => OrderByType.Desc, _ => OrderByType.Desc }; //查询筛选 //商品序列 var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0); if (id > 0) @where = @where.And(p => p.id == id); //商品编码 nvarchar var bn = Request.Form["bn"].FirstOrDefault(); if (!string.IsNullOrEmpty(bn)) @where = @where.And(p => p.bn.Contains(bn)); //商品名称 nvarchar var name = Request.Form["name"].FirstOrDefault(); if (!string.IsNullOrEmpty(name)) @where = @where.And(p => p.name.Contains(name)); //商品分类ID 关联category.id int var selectTreeSelectNodeId = Request.Form["selectTree_select_nodeId"].FirstOrDefault().ObjectToInt(0); if (selectTreeSelectNodeId > 0) @where = @where.And(p => p.goodsCategoryId == selectTreeSelectNodeId); //商品分类ID 关联category.id int var goodsCategoryId = Request.Form["goodsCategoryId"].FirstOrDefault().ObjectToInt(0); if (goodsCategoryId > 0) { //获取全部数据缓存 var categories = await _coreCmsGoodsCategoryServices.QueryAsync(true, true); var ids = GoodsHelper.GetChildIds(categories, goodsCategoryId); //扩展分类 var extends = await _goodsCategoryExtendServices.QueryListByClauseAsync(p => p.goodsCategroyId == goodsCategoryId); if (extends.Any()) { var extGoodIds = extends.Select(p => p.goodsId).ToList(); where = where.And(p => ids.Contains(p.goodsCategoryId) || extGoodIds.Contains(p.id)); } else { where = where.And(p => ids.Contains(p.goodsCategoryId)); } } //商品类别ID 关联goods_type.id int var goodsTypeId = Request.Form["goodsTypeId"].FirstOrDefault().ObjectToInt(0); if (goodsTypeId > 0) @where = @where.And(p => p.goodsTypeId == goodsTypeId); //品牌ID 关联brand.id int var brandId = Request.Form["brandId"].FirstOrDefault().ObjectToInt(0); if (brandId > 0) @where = @where.And(p => p.brandId == brandId); //是否上架 bit var isMarketable = Request.Form["isMarketable"].FirstOrDefault(); if (!string.IsNullOrEmpty(isMarketable) && isMarketable.ToLowerInvariant() == "true") @where = @where.And(p => p.isMarketable); else if (!string.IsNullOrEmpty(isMarketable) && isMarketable.ToLowerInvariant() == "false") @where = @where.And(p => p.isMarketable == false); //是否推荐 bit var isRecommend = Request.Form["isRecommend"].FirstOrDefault(); if (!string.IsNullOrEmpty(isRecommend) && isRecommend.ToLowerInvariant() == "true") @where = @where.And(p => p.isRecommend); else if (!string.IsNullOrEmpty(isRecommend) && isRecommend.ToLowerInvariant() == "false") @where = @where.And(p => p.isRecommend == false); //是否热门 bit var isHot = Request.Form["isHot"].FirstOrDefault(); if (!string.IsNullOrEmpty(isHot) && isHot.ToLowerInvariant() == "true") @where = @where.And(p => p.isHot); else if (!string.IsNullOrEmpty(isHot) && isHot.ToLowerInvariant() == "false") @where = @where.And(p => p.isHot == false); //是否报警 var warn = Request.Form["warn"].FirstOrDefault(); if (!string.IsNullOrEmpty(warn) && warn.ToLowerInvariant() == "true") { //获取库存 var allConfigs = await _settingServices.GetConfigDictionaries(); var kc = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.GoodsStocksWarn); if (kc != null) { var kcNumer = kc.ObjectToInt(); where = where.And(p => p.stock <= kcNumer && p.isDel == false && p.isMarketable); } else { where = where.And(p => p.stock <= 0 && p.isDel == false && p.isMarketable); } } where = where.And(p => p.isDel == false); //获取数据 var list = await _coreCmsGoodsServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize); if (list != null && list.Any()) { var labels = await _labelServices.QueryAsync(true, true); foreach (var item in list) if (!string.IsNullOrEmpty(item.labelIds)) { var ids = CommonHelper.StringToIntArray(item.labelIds); item.labels = labels.Where(p => ids.Contains(p.id)).ToList(); } } //返回数据 jm.data = list; jm.code = 0; jm.count = list.TotalCount; jm.msg = "数据调用成功!"; return jm; } #endregion #region 首页数据============================================================ // POST: Api/CoreCmsGoods/GetIndex /// /// 首页数据 /// /// [HttpPost] [Description("首页数据")] public async Task GetIndex() { //返回数据 var jm = new AdminUiCallBack { code = 0 }; var totalGoods = await _coreCmsGoodsServices.GetCountAsync(p => p.id > 0 && p.isDel == false); var totalMarketableUp = await _coreCmsGoodsServices.GetCountAsync(p => p.isMarketable && p.isDel == false); var totalMarketableDown = await _coreCmsGoodsServices.GetCountAsync(p => p.isMarketable == false && p.isDel == false); //获取库存 var allConfigs = await _settingServices.GetConfigDictionaries(); var kc = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.GoodsStocksWarn); var totalWarn = 0; if (kc != null) { var kcNumer = kc.ObjectToInt(); totalWarn = await _coreCmsGoodsServices.GetCountAsync(p => p.stock <= kcNumer && p.isDel == false && p.isMarketable); } else { totalWarn = await _coreCmsGoodsServices.GetCountAsync(p => p.stock <= 0 && p.isDel == false && p.isMarketable); } //获取商品分类 var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true); //获取品牌 var brands = await _brandServices.QueryAsync(true, true); //获取商品经销方式 var productsDistributionType = EnumHelper.EnumToList(); jm.data = new { totalGoods, totalMarketableUp, totalMarketableDown, totalWarn, categories = GoodsHelper.GetTree(categories), categoriesAll = categories, brands, productsDistributionType }; return jm; } #endregion #region 创建数据============================================================ // POST: Api/CoreCmsGoods/GetCreate /// /// 创建数据 /// /// [HttpPost] [Description("创建数据")] public async Task GetCreate() { //返回数据 var jm = new AdminUiCallBack { code = 0 }; //获取商品分类 var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true); //获取参数列表 var paramsList = await _goodsParamsServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true); //获取SKU列表 var skuList = await _goodsTypeSpecServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true); //获取品牌 var brands = await _brandServices.QueryListByClauseAsync(p => p.id > 0 && p.isShow == true, p => p.id, OrderByType.Desc, true, true); //获取用户等级 var userGrade = await _userGradeServices.QueryAsync(); //获取商品经销enum var productsDistributionType = EnumHelper.EnumToList(); jm.data = new { categories = GoodsHelper.GetTree(categories, false), brands, userGrade, productsDistributionType, paramsList, skuList }; return jm; } #endregion #region 创建提交============================================================ // POST: Api/CoreCmsGoods/DoCreate /// /// 创建提交 /// /// /// [HttpPost] [Description("创建提交")] public async Task DoCreate([FromBody] FMGoodsInsertModel entity) { var jm = await _coreCmsGoodsServices.InsertAsync(entity); return jm; } #endregion #region 编辑数据============================================================ // POST: Api/CoreCmsGoods/GetEdit /// /// 编辑数据 /// /// [HttpPost] [Description("编辑数据")] public async Task GetEdit(int id) { var jm = new AdminUiCallBack(); var model = await _coreCmsGoodsServices.QueryByIdAsync(id); if (model == null) { jm.msg = "不存在此信息"; jm.data = id; return jm; } jm.code = 0; //获取商品分类 var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true); //获取用户等级 var userGrade = await _userGradeServices.QueryAsync(); //用户价格体系 var goodsGrades = await _goodsGradeServices.QueryListByClauseAsync(p => p.goodsId == model.id); //货品信息 var products = await _productsServices.QueryListByClauseAsync(p => p.goodsId == model.id && p.isDel == false); //扩展信息 var categoryExtend = await _categoryExtendServices.QueryListByClauseAsync(p => p.goodsId == model.id); //获取商品经销enum var productsDistributionType = EnumHelper.EnumToList(); //获取参数列表 var paramsList = await _goodsParamsServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true); //获取SKU列表 var skuList = await _goodsTypeSpecServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true); //获取品牌 var brands = await _brandServices.QueryListByClauseAsync(p => p.id > 0 && p.isShow == true, p => p.id, OrderByType.Desc, true, true); if (products != null && products.Any()) { var pIds = products.Select(p => p.id).ToList(); if (pIds.Any()) { // 获取商品经销明细 var pds = await _productsDistributionServices.QueryListByClauseAsync(p => pIds.Contains(p.productsId), p => p.id, OrderByType.Asc); products.ForEach(p => { foreach (var o in pds.Where(o => o.productsId == p.id)) { p.levelOne = o.levelOne; p.levelTwo = o.levelTwo; p.levelThree = o.levelThree; } }); jm.otherData = pds; } } //获取参数信息 var goodsTypeSpec = new List(); var goodsParams = new List(); //获取参数 if (!string.IsNullOrEmpty(model.goodsParamsIds)) { var paramsIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsParamsIds); goodsParams = await _goodsParamsServices.QueryListByClauseAsync(p => paramsIds.Contains(p.id)); } //获取属性 if (!string.IsNullOrEmpty(model.goodsSkuIds)) { var specIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsSkuIds); var typeSpecs = skuList.Where(p => specIds.Contains(p.id)).ToList(); var typeSpecValues = await _typeSpecValueServices.QueryListByClauseAsync(p => specIds.Contains(p.specId)); typeSpecs.ForEach(p => { p.specValues = typeSpecValues.Where(o => o.specId == p.id).ToList(); }); goodsTypeSpec = typeSpecs; } jm.data = new { model, categories = GoodsHelper.GetTree(categories, false), brands, userGrade, goodsGrades, products, categoryExtend, goodsTypeSpec, goodsParams, productsDistributionType, paramsList, skuList }; return jm; } #endregion #region 编辑提交============================================================ // POST: Admins/CoreCmsGoods/Edit /// /// 编辑提交 /// /// /// [HttpPost] [Description("编辑提交")] public async Task DoEdit([FromBody] FMGoodsInsertModel entity) { var jm = await _coreCmsGoodsServices.UpdateAsync(entity); return jm; } #endregion #region 删除数据============================================================ // POST: Api/CoreCmsGoods/DoDelete/10 /// /// 单选删除 /// /// /// [HttpPost] [Description("单选删除")] public async Task DoDelete([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsGoodsServices.QueryByIdAsync(entity.id); if (model == null) { jm.msg = GlobalConstVars.DataisNo; return jm; } model.isDel = true; //假删除 var bl = await _coreCmsGoodsServices.UpdateAsync(model); if (bl) { await _productsServices.UpdateAsync(p => new CoreCmsProducts() { isDel = true }, p => p.goodsId == model.id); await _redisOperationRepository.LikeRemoveAsync("SqlSugarDataCache.GoodListDTO." + "*"); } jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure; return jm; } #endregion #region 预览数据============================================================ // POST: Api/CoreCmsGoods/GetDetails/10 /// /// 预览数据 /// /// /// [HttpPost] [Description("预览数据")] public async Task GetDetails([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsGoodsServices.QueryByIdAsync(entity.id); if (model == null) { jm.msg = "不存在此信息"; jm.data = entity.id; return jm; } jm.code = 0; //获取商品分类 var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true); //获取用户等级 var userGrade = await _userGradeServices.QueryAsync(); //用户价格体系 var goodsGrades = await _goodsGradeServices.QueryListByClauseAsync(p => p.goodsId == model.id); //货品信息 var products = await _productsServices.QueryListByClauseAsync(p => p.goodsId == model.id && p.isDel == false); //扩展信息 var categoryExtend = await _categoryExtendServices.QueryListByClauseAsync(p => p.goodsId == model.id); //获取商品经销enum var productsDistributionType = EnumHelper.EnumToList(); //获取参数列表 var paramsList = await _goodsParamsServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true); //获取SKU列表 var skuList = await _goodsTypeSpecServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true); //获取品牌 var brands = await _brandServices.QueryListByClauseAsync(p => p.id > 0 && p.isShow == true, p => p.id, OrderByType.Desc, true, true); if (products != null && products.Any()) { var pIds = products.Select(p => p.id).ToList(); if (pIds.Any()) { // 获取商品经销明细 var pds = await _productsDistributionServices.QueryListByClauseAsync(p => pIds.Contains(p.productsId), p => p.id, OrderByType.Asc); products.ForEach(p => { foreach (var o in pds.Where(o => o.productsId == p.id)) { p.levelOne = o.levelOne; p.levelTwo = o.levelTwo; p.levelThree = o.levelThree; } }); jm.otherData = pds; } } //获取参数信息 var goodsTypeSpec = new List(); var goodsParams = new List(); //获取参数 if (!string.IsNullOrEmpty(model.goodsParamsIds)) { var paramsIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsParamsIds); goodsParams = await _goodsParamsServices.QueryListByClauseAsync(p => paramsIds.Contains(p.id)); } //获取属性 if (!string.IsNullOrEmpty(model.goodsSkuIds)) { var specIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsSkuIds); var typeSpecs = await _goodsTypeSpecServices.QueryListByClauseAsync(p => specIds.Contains(p.id)); var typeSpecValues = await _typeSpecValueServices.QueryListByClauseAsync(p => specIds.Contains(p.specId)); typeSpecs.ForEach(p => { p.specValues = typeSpecValues.Where(o => o.specId == p.id).ToList(); }); goodsTypeSpec = typeSpecs; } jm.data = new { model, categories = GoodsHelper.GetTree(categories, false), brands, userGrade, goodsGrades, products, categoryExtend, goodsTypeSpec, goodsParams, productsDistributionType, paramsList, skuList }; return jm; } #endregion #region 设置是否虚拟商品============================================================ // POST: Api/CoreCmsGoods/DoSetisNomalVirtual/10 /// /// 设置是否虚拟商品 /// /// /// [HttpPost] [Description("设置是否虚拟商品")] public async Task DoSetisNomalVirtual([FromBody] FMUpdateBoolDataByIntId entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsGoodsServices.QueryByIdAsync(entity.id); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } oldModel.isNomalVirtual = entity.data; var bl = await _coreCmsGoodsServices.UpdateAsync(oldModel); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 设置是否上架============================================================ // POST: Api/CoreCmsGoods/DoSetisMarketable/10 /// /// 设置是否上架 /// /// /// [HttpPost] [Description("设置是否上架")] public async Task DoSetisMarketable([FromBody] FMUpdateBoolDataByIntId entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsGoodsServices.QueryByIdAsync(entity.id); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } oldModel.isMarketable = entity.data; var bl = await _coreCmsGoodsServices.UpdateAsync(oldModel); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 设置是否推荐============================================================ // POST: Api/CoreCmsGoods/DoSetisRecommend/10 /// /// 设置是否推荐 /// /// /// [HttpPost] [Description("设置是否推荐")] public async Task DoSetisRecommend([FromBody] FMUpdateBoolDataByIntId entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsGoodsServices.QueryByIdAsync(entity.id); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } oldModel.isRecommend = entity.data; var bl = await _coreCmsGoodsServices.UpdateAsync(oldModel); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 设置是否热门============================================================ // POST: Api/CoreCmsGoods/DoSetisHot/10 /// /// 设置是否热门 /// /// /// [HttpPost] [Description("设置是否热门")] public async Task DoSetisHot([FromBody] FMUpdateBoolDataByIntId entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsGoodsServices.QueryByIdAsync(entity.id); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } oldModel.isHot = entity.data; var bl = await _coreCmsGoodsServices.UpdateAsync(oldModel); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 设置是否删除============================================================ // POST: Api/CoreCmsGoods/DoSetisDel/10 /// /// 设置是否删除 /// /// /// [HttpPost] [Description("设置是否删除")] public async Task DoSetisDel([FromBody] FMUpdateBoolDataByIntId entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsGoodsServices.QueryByIdAsync(entity.id); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } oldModel.isDel = entity.data; var bl = await _coreCmsGoodsServices.UpdateAsync(oldModel); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 获取商品SKU明细============================================================ // POST: Api/CoreCmsGoods/GetSkuDetail/10 /// /// 获取商品SKU明细 /// /// /// [HttpPost] [Description("获取商品SKU明细")] public async Task GetSkuDetail([FromBody] FMArrayIntIds entity) { var jm = new AdminUiCallBack(); if (entity.id.Length <= 0) { jm.msg = "请提交SKU模型"; return jm; } var typeSpecs = await _goodsTypeSpecServices.QueryListByClauseAsync(p => entity.id.Contains(p.id)); var typeSpecValues = await _typeSpecValueServices.QueryListByClauseAsync(p => entity.id.Contains(p.specId)); typeSpecs.ForEach(p => { p.specValues = typeSpecValues.Where(o => o.specId == p.id).ToList(); }); jm.data = new { goodsTypeSpec = typeSpecs }; var bl = true; jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 根据属性值生成货品html=================================================== // POST: Api/CoreCmsGoods/GetSpecHtml /// /// 根据属性值生成货品html /// /// /// [HttpPost] [Description("根据属性值生成货品html")] public AdminUiCallBack GetSpecHtml([FromBody] FmSerializeArray model) { var jm = new AdminUiCallBack(); var list = model.entity; if (!list.Any()) { jm.msg = "提交数据获取失败"; return jm; } var newSpecs = list.Where(p => p.name.Contains("newSpec&&")).ToList(); foreach (var t in newSpecs) { t.value = t.value.Trim(); if (GoodsHelper.FilterChar(t.value) == false) continue; jm.msg = "自定义规格不符合支持规则格式"; return jm; } var oldProducts = list.Where(p => p.name.Contains("product[spesDesc][]")).Select(p => p.value).ToList(); //if (entity.value.GroupBy(n => n).Any(c => c.Count() > 1)) //{ // jm.msg = "属性值不允许有相同"; return jm; //} jm.msg = "数据获取成功"; //修改后的所有属性数据 var newSpecStr = string.Empty; var newSpec = list.Where(p => p.name.Contains("newSpec")).ToList(); if (newSpec.Any()) { newSpec.ForEach(p => { p.name = p.name.Replace("newSpec&&", ""); newSpecStr += p.name + ":" + p.value + "|"; }); newSpecStr = newSpecStr.Remove(newSpecStr.Length - 1, 1); } //选择后已经修改的属性数据 var selectSpecStr = string.Empty; var selectSpec = list.Where(p => p.name.Contains("selectSpec")).ToList(); if (selectSpec.Any()) { selectSpec.ForEach(p => { p.name = p.name.Replace("selectSpec&&", ""); selectSpecStr += p.name + ":" + p.value + "|"; }); selectSpecStr = selectSpecStr.Remove(selectSpecStr.Length - 1, 1); } if (selectSpec.Any()) { var newSelectSpec = selectSpec; newSelectSpec.ForEach(p => { var id = p.name.Split("&&")[0]; var name = p.name.Split("&&")[1]; p.name = name; var newValue = newSpec.Find(p => p.name == id); p.value = newValue.value; }); //生成商品规格sku var arrayList = newSelectSpec.Select((x, i) => new { Index = i, Value = x }) .GroupBy(x => x.Value.name) .Select(x => x.Select(v => v.Value).ToList()) .ToList(); var sku = new string[arrayList.Count][]; var arrayListIndex = 0; arrayList.ForEach(p => { var arr = new string[p.Count]; for (var index = 0; index < p.Count; index++) arr[index] = p[index].name + ":" + p[index].value; sku[arrayListIndex] = arr; arrayListIndex++; }); var skuArray = SkuHelper.process(sku); //生成货品列表 var products = new List(); var count = 0; foreach (var array in skuArray) { if (oldProducts.Any() && oldProducts.Contains(array)) { continue; } var obj = new CoreCmsProducts(); if (count == 0) obj.isDefalut = true; //var sn = list.Find(p => p.name == "goods[sn]"); obj.sn = "SN" + YitIdHelper.NextId(); var price = list.Find(p => p.name == "goods[price]"); obj.price = price != null && !string.IsNullOrEmpty(price.value) ? Convert.ToDecimal(price.value) : 0; var costprice = list.Find(p => p.name == "goods[costprice]"); obj.costprice = costprice != null && !string.IsNullOrEmpty(costprice.value) ? Convert.ToDecimal(costprice.value) : 0; var mktprice = list.Find(p => p.name == "goods[mktprice]"); obj.mktprice = mktprice != null && !string.IsNullOrEmpty(mktprice.value) ? Convert.ToDecimal(mktprice.value) : 0; var stock = list.Find(p => p.name == "goods[stock]"); obj.stock = stock != null && !string.IsNullOrEmpty(stock.value) ? Convert.ToInt16(stock.value) : 9999; obj.spesDesc = array; products.Add(obj); count++; } jm.data = new { products, arrayList, skuArray, sku, newSpecStr, selectSpecStr }; } var bl = true; jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 批量删除============================================================ // POST: Api/CoreCmsGoods/DoBatchDelete/10,11,20 /// /// 批量删除 /// /// /// [HttpPost] [Description("批量删除")] public async Task DoBatchDelete([FromBody] FMArrayIntIds entity) { var jm = await _coreCmsGoodsServices.DeleteByIdsAsync(entity.id); return jm; } #endregion #region 批量上架============================================================ // POST: Api/CoreCmsGoods/DoBatchMarketableUp/10,11,20 /// /// 批量上架 /// /// /// [HttpPost] [Description("批量上架")] public async Task DoBatchMarketableUp([FromBody] FMArrayIntIds entity) { var jm = await _coreCmsGoodsServices.DoBatchMarketableUp(entity.id); return jm; } #endregion #region 批量下架============================================================ // POST: Api/CoreCmsGoods/DoBatchMarketableDown/10,11,20 /// /// 批量下架 /// /// /// [HttpPost] [Description("批量下架")] public async Task DoBatchMarketableDown([FromBody] FMArrayIntIds entity) { var jm = await _coreCmsGoodsServices.DoBatchMarketableDown(entity.id); return jm; } #endregion #region 批量修改价格=========================================================== // POST: Api/CoreCmsGoods/GetBatchModifyPrice /// /// 批量修改价格 /// /// /// [HttpPost] [Description("批量修改价格")] public AdminUiCallBack GetBatchModifyPrice([FromBody] FMArrayIntIds entity) { var jm = new AdminUiCallBack(); var priceType = EnumHelper.EnumToList(); var userGrade = _userGradeServices.Query(); if (userGrade.Any()) userGrade.ForEach(p => { priceType.Add(new EnumEntity { description = p.title, title = "grade_price_" + p.id, value = 10000 + p.id }); }); jm.code = 0; jm.data = new { entity, priceType }; return jm; } // POST: Api/CoreCmsGoods/DoBatchModifyPrice /// /// 批量修改价格提交 /// /// /// [HttpPost] [Description("批量修改价格提交")] public async Task DoBatchModifyPrice([FromBody] FmBatchModifyPrice entity) { var jm = await _coreCmsGoodsServices.DoBatchModifyPrice(entity); return jm; } #endregion #region 批量修改库存=========================================================== // POST: Api/CoreCmsGoods/GetBatchModifyStock /// /// 批量修改库存 /// /// /// [HttpPost] [Description("批量修改库存")] public AdminUiCallBack GetBatchModifyStock([FromBody] FMArrayIntIds entity) { var jm = new AdminUiCallBack(); jm.code = 0; jm.data = new { entity }; return jm; } // POST: Api/CoreCmsGoods/DoBatchModifyStock /// /// 批量修改库存提交 /// /// /// [HttpPost] [Description("批量修改库存提交")] public async Task DoBatchModifyStock([FromBody] FmBatchModifyStock entity) { var jm = await _coreCmsGoodsServices.DoBatchModifyStock(entity); return jm; } #endregion #region 设置标签============================================================ // POST: Api/CoreCmsGoods/GetLabel /// /// 设置标签 /// /// /// [HttpPost] [Description("设置标签")] public async Task GetLabel([FromBody] FMArrayIntIds entity) { var jm = new AdminUiCallBack(); var model = await _labelServices.QueryAsync(); if (model == null) { jm.msg = "不存在此信息"; return jm; } jm.code = 0; jm.data = new { labels = model, ids = entity }; return jm; } // POST: Admins/CoreCmsGoods/DoSetLabel /// /// 设置标签提交 /// /// /// [HttpPost] [Description("设置标签提交")] public async Task DoSetLabel([FromBody] FmSetLabel entity) { var jm = await _coreCmsGoodsServices.DoSetLabel(entity); return jm; } #endregion #region 去除标签============================================================ // POST: Api/CoreCmsGoods/GetDeleteLabel /// /// 去除标签 /// /// /// [HttpPost] [Description("去除标签")] public async Task GetDeleteLabel([FromBody] FMArrayIntIds entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsGoodsServices.QueryByIDsAsync(entity.id); if (model == null) { jm.msg = "不存在此信息"; return jm; } var labelIds = model.Select(p => p.labelIds).ToList(); var r = new List(); labelIds.ForEach(p => { var arr = CommonHelper.StringToIntArray(p); r.AddRange(arr); }); var labels =await _labelServices.QueryListByClauseAsync(p => r.Contains(p.id)); jm.code = 0; jm.data = new { labels, ids = entity }; return jm; } // POST: Admins/CoreCmsGoods/DoDeleteLabel /// /// 去除标签提交 /// /// /// [HttpPost] [Description("去除标签提交")] public async Task DoDeleteLabel([FromBody] FmSetLabel entity) { var jm = await _coreCmsGoodsServices.DoDeleteLabel(entity); return jm; } #endregion } }