/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.Filter; using CoreCms.Net.IRepository.UnitOfWork; 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.Services; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; using CoreCms.Net.Web.Admin.Infrastructure; using Essensoft.Paylink.Alipay.Domain; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.CodeAnalysis.Operations; using NPOI.SS.Formula.Functions; using SqlSugar; using ZstdSharp.Unsafe; namespace CoreCms.Net.Web.Admin.Controllers { /// /// 经销商表 /// [Description("经销商表")] [Route("api/[controller]/[action]")] [ApiController] [RequiredErrorForAdmin] [Authorize(Permissions.Name)] public class CoreCmsDistributionController : ControllerBase { private readonly ICoreCmsDistributionServices _coreCmsDistributionServices; private readonly ICoreCmsUserGradeServices _userGradeServices; private readonly ICoreCmsDistributionGradeServices _distributionGradeServices; private readonly ICoreCmsUserServices _userServices; private readonly IWebHostEnvironment _webHostEnvironment; private readonly ICoreCmsAreaServices _areaServices; private readonly ICoreCmsSettingServices _coreCmsSettingServices; private readonly IUnitOfWork _unitOfWork; private readonly ICoreCmsStoreServices _coreCmsStoreServices; private readonly ICoreCmsClerkServices _coreCmsClerkServices; /// /// 构造函数 /// public CoreCmsDistributionController(IWebHostEnvironment webHostEnvironment , ICoreCmsDistributionServices coreCmsDistributionServices, ICoreCmsUserGradeServices userGradeServices, ICoreCmsDistributionGradeServices distributionGradeServices, ICoreCmsUserServices userServices, ICoreCmsAreaServices areaServices, ICoreCmsSettingServices coreCmsSettingServices, IUnitOfWork unitOfWork, ICoreCmsStoreServices coreCmsStoreServices, ICoreCmsClerkServices coreCmsClerkServices) { _webHostEnvironment = webHostEnvironment; _coreCmsDistributionServices = coreCmsDistributionServices; _userGradeServices = userGradeServices; _distributionGradeServices = distributionGradeServices; _userServices = userServices; _areaServices = areaServices; _coreCmsSettingServices = coreCmsSettingServices; _unitOfWork = unitOfWork; _coreCmsStoreServices = coreCmsStoreServices; _coreCmsClerkServices= coreCmsClerkServices; } #region 获取列表============================================================ // POST: Api/CoreCmsDistribution/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, "userId" => p => p.userId, "name" => p => p.name, "gradeId" => p => p.gradeId, "mobile" => p => p.mobile, "weixin" => p => p.weixin, "qq" => p => p.qq, "storeName" => p => p.storeName, "storeLogo" => p => p.storeLogo, "storeBanner" => p => p.storeBanner, "storeDesc" => p => p.storeDesc, "verifyStatus" => p => p.verifyStatus, "createTime" => p => p.createTime, "updateTime" => p => p.updateTime, "verifyTime" => p => p.verifyTime, "isDelete" => p => p.isDelete, _ => p => p.id }; //设置排序方式 var orderDirection = Request.Form["orderDirection"].FirstOrDefault(); var orderBy = orderDirection switch { "asc" => OrderByType.Asc, "desc" => OrderByType.Desc, _ => OrderByType.Desc }; //查询筛选 //序列 int var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0); if (id > 0) where = where.And(p => p.id == id); //用户Id int var userId = Request.Form["userId"].FirstOrDefault().ObjectToInt(0); if (userId > 0) where = where.And(p => p.userId == userId); //经销商名称 nvarchar var name = Request.Form["name"].FirstOrDefault(); if (!string.IsNullOrEmpty(name)) where = where.And(p => p.name.Contains(name)); //经销等级 int var gradeId = Request.Form["gradeId"].FirstOrDefault().ObjectToInt(0); if (gradeId > 0) where = where.And(p => p.gradeId == gradeId); //用户等级 int var userGradeId = Request.Form["userGradeId"].FirstOrDefault().ObjectToInt(0); if (userGradeId > 0) where = where.And(p => p.UserGradeId == userGradeId); //手机号 nvarchar var mobile = Request.Form["mobile"].FirstOrDefault(); if (!string.IsNullOrEmpty(mobile)) where = where.And(p => p.mobile.Contains(mobile)); //微信号 nvarchar var weixin = Request.Form["weixin"].FirstOrDefault(); if (!string.IsNullOrEmpty(weixin)) where = where.And(p => p.weixin.Contains(weixin)); //qq号 nvarchar var qq = Request.Form["qq"].FirstOrDefault(); if (!string.IsNullOrEmpty(qq)) where = where.And(p => p.qq.Contains(qq)); //店铺名称 nvarchar var storeName = Request.Form["storeName"].FirstOrDefault(); if (!string.IsNullOrEmpty(storeName)) where = where.And(p => p.storeName.Contains(storeName)); //店铺Logo nvarchar var storeLogo = Request.Form["storeLogo"].FirstOrDefault(); if (!string.IsNullOrEmpty(storeLogo)) where = where.And(p => p.storeLogo.Contains(storeLogo)); //店铺Banner nvarchar var storeBanner = Request.Form["storeBanner"].FirstOrDefault(); if (!string.IsNullOrEmpty(storeBanner)) where = where.And(p => p.storeBanner.Contains(storeBanner)); //店铺简介 nvarchar var storeDesc = Request.Form["storeDesc"].FirstOrDefault(); if (!string.IsNullOrEmpty(storeDesc)) where = where.And(p => p.storeDesc.Contains(storeDesc)); //审核状态 int var verifyStatus = Request.Form["verifyStatus"].FirstOrDefault().ObjectToInt(0); if (verifyStatus > 0) where = where.And(p => p.verifyStatus == verifyStatus); //创建时间 datetime var createTime = Request.Form["createTime"].FirstOrDefault(); if (!string.IsNullOrEmpty(createTime)) { if (createTime.Contains("到")) { var dts = createTime.Split("到"); var dtStart = dts[0].Trim().ObjectToDate(); where = where.And(p => p.createTime > dtStart); var dtEnd = dts[1].Trim().ObjectToDate(); where = where.And(p => p.createTime < dtEnd); } else { var dt = createTime.ObjectToDate(); where = where.And(p => p.createTime > dt); } } //更新时间 datetime var updateTime = Request.Form["updateTime"].FirstOrDefault(); if (!string.IsNullOrEmpty(updateTime)) { if (updateTime.Contains("到")) { var dts = updateTime.Split("到"); var dtStart = dts[0].Trim().ObjectToDate(); where = where.And(p => p.updateTime > dtStart); var dtEnd = dts[1].Trim().ObjectToDate(); where = where.And(p => p.updateTime < dtEnd); } else { var dt = updateTime.ObjectToDate(); where = where.And(p => p.updateTime > dt); } } //审核时间 datetime var verifyTime = Request.Form["verifyTime"].FirstOrDefault(); if (!string.IsNullOrEmpty(verifyTime)) { if (verifyTime.Contains("到")) { var dts = verifyTime.Split("到"); var dtStart = dts[0].Trim().ObjectToDate(); where = where.And(p => p.verifyTime > dtStart); var dtEnd = dts[1].Trim().ObjectToDate(); where = where.And(p => p.verifyTime < dtEnd); } else { var dt = verifyTime.ObjectToDate(); where = where.And(p => p.verifyTime > dt); } } //是否删除 bit var isDelete = Request.Form["isDelete"].FirstOrDefault(); if (!string.IsNullOrEmpty(isDelete) && isDelete.ToLowerInvariant() == "true") where = where.And(p => p.isDelete); else if (!string.IsNullOrEmpty(isDelete) && isDelete.ToLowerInvariant() == "false") where = where.And(p => p.isDelete == false); //获取数据 var list = await _coreCmsDistributionServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize); //返回数据 jm.data = list; jm.code = 0; jm.count = list.TotalCount; jm.msg = "数据调用成功!"; return jm; } #endregion #region 首页数据============================================================ // POST: Api/CoreCmsDistribution/GetIndex /// /// 首页数据 /// /// [HttpPost] [Description("首页数据")] public async Task GetIndex() { //返回数据 var jm = new AdminUiCallBack { code = 0 }; var distributionVerifyStatus = EnumHelper.EnumToList(); var grades = await _distributionGradeServices.GetCaChe(); var userGrades = await _userGradeServices.QueryAsync(); jm.data = new { distributionVerifyStatus, grades, userGrades }; return jm; } #endregion #region 创建数据============================================================ // POST: Api/CoreCmsDistribution/GetCreate /// /// 创建数据 /// /// [HttpPost] [Description("创建数据")] public async Task GetCreate() { //返回数据 var jm = new AdminUiCallBack { code = 0 }; var distributionVerifyStatus = EnumHelper.EnumToList(); var grades = await _distributionGradeServices.GetCaChe(); jm.code = 0; jm.data = new { distributionVerifyStatus, grades }; return jm; } #endregion #region 创建提交============================================================ // POST: Api/CoreCmsDistribution/DoCreate /// /// 创建提交 /// /// /// [HttpPost] [Description("创建提交")] public async Task DoCreate([FromBody] FMAdminCreateDistributionPost entity) { var jm = new AdminUiCallBack(); var user = await _userServices.QueryByClauseAsync(p => p.id == entity.userId); if (user == null) { jm.msg = "提交的【已注册手机号】未查询到注册用户"; return jm; } var isDistribution = await _coreCmsDistributionServices.ExistsAsync(p => p.userId == user.id); if (isDistribution) { jm.msg = "提交的用户已经有经销商记录,请找到相关项进行审核"; return jm; } var model = new CoreCmsDistribution(); model.userId = user.id; model.name = entity.name; model.gradeId = entity.gradeId; model.mobile = string.IsNullOrEmpty(entity.mobile) ? user.mobile : entity.mobile; model.profession = entity.profession; model.storeCoordinate = entity.storeCoordinate; model.storeLogo = entity.storeBanner; model.storeName= entity.storeName; model.sales=entity.sales; model.areaCode=entity.areaCode; model.address=entity.address; model.verifyStatus = entity.verifyStatus; model.createTime = DateTime.Now; model.isDelete = false; try { _unitOfWork.BeginTran(); if (model.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) { model.verifyTime = DateTime.Now; //老模型未通过审核,新模型未通过审核,那么为审核通过过程 var allConfigs = await _coreCmsSettingServices.GetConfigDictionaries(); var kc = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryUserGroupKey); var group = await _userGradeServices.GetUserGradeByValueKey(kc); if (group != null) { //关联经销商用户等级 if (user != null) { user.grade = group.id; user.updataTime = DateTime.Now; await _userServices.UpdateAsync(user); } } //处理店铺 if (entity.profession == "文具店") { //新建店铺名称 var store = await _coreCmsStoreServices.QueryByClauseAsync(x => x.userID == model.userId); if (store != null) { //存在店铺 store.coordinate = entity.storeCoordinate; store.storeName = entity.storeName; //用logo代替门头照片 store.logoImage = model.storeLogo; store.en = true; store.updateTime = DateTime.Now; await _coreCmsStoreServices.UpdateAsync(store); } else { var areaCode = model.areaCode.Split(',').OrderByDescending(x => x).FirstOrDefault(); var db = _unitOfWork.GetDbClient(); string[] lat = []; if (!string.IsNullOrEmpty(model.storeCoordinate)) lat = model.storeCoordinate.Split(","); //新建地铺 store = new CoreCmsStore { userID = model.userId, address = model.address, areaId = areaCode.ToInt32OrDefault(510000), storeName = model.storeName, coordinate = model.storeCoordinate, createTime = DateTime.Now, mobile = model.mobile, linkMan = user.nickName, }; if (lat.Length == 2) { store.latitude = lat[0]; store.longitude = lat[1]; } var storeid = await _unitOfWork.GetDbClient().Insertable(store).ExecuteReturnIdentityAsync(); //将自己设置为店员 CoreCmsClerk clerk = new CoreCmsClerk() { createTime = DateTime.Now, storeId = storeid, userId = entity.userId, }; await _coreCmsClerkServices.InsertAsync(clerk); } } } await _coreCmsDistributionServices.InsertAsync(model); _unitOfWork.CommitTran(); } catch (Exception) { _unitOfWork.RollbackTran(); throw; } jm.code = 1; jm.msg = GlobalConstVars.CreateSuccess ; return jm; } #endregion #region 编辑数据============================================================ // POST: Api/CoreCmsDistribution/GetEdit /// /// 编辑数据 /// /// /// [HttpPost] [Description("编辑数据")] public async Task GetEdit([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsDistributionServices.QueryByIdAsync(entity.id); if (model == null) { jm.msg = "不存在此信息"; return jm; } var distributionVerifyStatus = EnumHelper.EnumToList(); var grades = await _distributionGradeServices.GetCaChe(); jm.code = 0; jm.data = new { model, distributionVerifyStatus, grades }; return jm; } #endregion #region 编辑提交============================================================ // POST: Api/CoreCmsDistribution/Edit /// /// 编辑提交 /// /// /// [HttpPost] [Description("编辑提交")] public async Task DoEdit([FromBody] CoreCmsDistribution entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsDistributionServices.QueryByIdAsync(entity.id); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } //事物处理过程开始 oldModel.name = entity.name; oldModel.gradeId = entity.gradeId; oldModel.mobile = entity.mobile; //oldModel.weixin = entity.weixin; //oldModel.qq = entity.qq; try { _unitOfWork.BeginTran(); if (oldModel.verifyStatus != (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes && entity.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) { //老模型未通过审核,新模型未通过审核,那么为审核通过过程 var allConfigs = await _coreCmsSettingServices.GetConfigDictionaries(); var kc = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryUserGroupKey); var olduser = await _userServices.QueryByIdAsync(oldModel.userId); var group = await _userGradeServices.GetUserGradeByValueKey(kc); if (group != null) { //关联经销商用户等级 if (olduser != null) { olduser.grade = group.id; olduser.updataTime = DateTime.Now; await _userServices.UpdateAsync(olduser); } } //如果是通过审核 oldModel.verifyTime = DateTime.Now; //处理店铺 if(entity.profession=="文具店") { //新建店铺名称 var store = await _coreCmsStoreServices.QueryByClauseAsync(x => x.userID == oldModel.userId); if(store!=null) { //存在店铺 store.coordinate= entity.storeCoordinate; store.storeName = entity.storeName; //用logo代替门头照片 store.logoImage = entity.storeLogo; store.en = true; store.updateTime = DateTime.Now; await _coreCmsStoreServices.UpdateAsync(store); } else { var areaCode = oldModel.areaCode.Split(',').OrderByDescending(x=>x).FirstOrDefault(); var db = _unitOfWork.GetDbClient(); string[] lat = []; if (!string.IsNullOrEmpty(oldModel.storeCoordinate)) lat = oldModel.storeCoordinate.Split(","); //新建地铺 store = new CoreCmsStore { userID = oldModel.userId, address = oldModel.address, areaId = areaCode.ToInt32OrDefault(510000), storeName = oldModel.storeName, coordinate = oldModel.storeCoordinate, createTime = DateTime.Now, mobile = oldModel.mobile, linkMan = olduser.userName, }; if(lat.Length==2) { store.latitude= lat[0]; store.longitude= lat[1]; } var id= await _unitOfWork.GetDbClient().Insertable(store).ExecuteReturnIdentityAsync(); //将自己设置为店员 CoreCmsClerk clerk = new CoreCmsClerk() { createTime = DateTime.Now, storeId = id, userId = entity.userId, }; await _coreCmsClerkServices.InsertAsync(clerk); } } } else if (oldModel.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes && entity.verifyStatus != (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) { //如果是取消审核 var allConfigs = await _coreCmsSettingServices.GetConfigDictionaries(); var kc = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryUserGroupKey); var group = await _userGradeServices.GetUserGradeByValueKey(kc); var defgroup = await _userGradeServices.GetDefaultUserGrade(); if (defgroup != null) { var olduser = await _userServices.QueryByIdAsync(oldModel.userId); if (olduser != null) {//处理用户等级 if (olduser.grade == group.id) { if (defgroup != null) { olduser.grade = defgroup.id; } else { olduser.grade = 0; } olduser.updataTime = DateTime.Now; await _userServices.UpdateAsync(olduser); } } var store = await _coreCmsStoreServices.QueryByClauseAsync(x => x.userID == oldModel.userId); //处理店铺 取消已有店铺的使能 if(store != null ) if(store.en== true) { store.en = false; store.updateTime= DateTime.Now; await _coreCmsStoreServices.UpdateAsync(store); } } } oldModel.verifyStatus = entity.verifyStatus; oldModel.updateTime = DateTime.Now; //if (oldModel.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) //{ // oldModel.verifyTime = DateTime.Now; //} //事物处理过程结束 var bl = await _coreCmsDistributionServices.UpdateAsync(oldModel); _unitOfWork.CommitTran(); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } catch (Exception ) { _unitOfWork.RollbackTran(); jm.code = 1; jm.msg = GlobalConstVars.EditFailure; return jm; } //if(oldModel.verifyStatus!= (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes&& entity.verifyStatus== (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) //{ // var allConfigs = await _coreCmsSettingServices.GetConfigDictionaries(); // var kc = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryUserGroupKey); // var group = await _userGradeServices.GetUserGradeByValueKey(kc); // //如果是通过审核 // oldModel.verifyTime = DateTime.Now; //} //else // if(oldModel.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes && entity.verifyStatus != (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) //{ // //如果是取消审核 //} //oldModel.verifyStatus = entity.verifyStatus; //oldModel.updateTime = DateTime.Now; ////if (oldModel.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) ////{ //// oldModel.verifyTime = DateTime.Now; ////} ////事物处理过程结束 //var bl = await _coreCmsDistributionServices.UpdateAsync(oldModel); //jm.code = bl ? 0 : 1; //jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; //return jm; } #endregion #region 删除数据============================================================ // POST: Api/CoreCmsDistribution/DoDelete/10 /// /// 单选删除 /// /// /// [HttpPost] [Description("单选删除")] public async Task DoDelete([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsDistributionServices.QueryByIdAsync(entity.id); if (model == null) { jm.msg = GlobalConstVars.DataisNo; return jm; } try { _unitOfWork.BeginTran(); //如果是取消审核 var allConfigs = await _coreCmsSettingServices.GetConfigDictionaries(); var kc = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryUserGroupKey); var group = await _userGradeServices.GetUserGradeByValueKey(kc); var defgroup = await _userGradeServices.GetDefaultUserGrade(); if (defgroup != null) { var olduser = await _userServices.QueryByIdAsync(model.userId); if (olduser != null) {//处理用户等级 if (olduser.grade == group.id) { if (defgroup != null) { olduser.grade = defgroup.id; } else { olduser.grade = 0; } olduser.updataTime = DateTime.Now; await _userServices.UpdateAsync(olduser); } } var store = await _coreCmsStoreServices.QueryByClauseAsync(x => x.userID == model.userId); //处理店铺 取消已有店铺的使能 if(store != null ) { // var clerk= await _unitOfWork.GetDbClient().Queryable().Where(x => x.storeId == store.id).ToListAsync(); //删除店铺员工 await _unitOfWork.GetDbClient().Deleteable().Where(x=>x.storeId==store.id).ExecuteCommandAsync(); //删除店铺 await _coreCmsStoreServices.DeleteByIdAsync(store.id); } } var bl = await _coreCmsDistributionServices.DeleteByIdAsync(entity.id); _unitOfWork.CommitTran(); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure; return jm; } catch (Exception) { _unitOfWork.RollbackTran(); jm.code = 1; jm.msg = GlobalConstVars.DeleteFailure; return jm; } } #endregion #region 预览数据============================================================ // POST: Api/CoreCmsDistribution/GetDetails/10 /// /// 预览数据 /// /// /// [HttpPost] [Description("预览数据")] public async Task GetDetails([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsDistributionServices.QueryByIdAsync(entity.id); if (model == null) { jm.msg = "不存在此信息"; return jm; } var distributionVerifyStatus = EnumHelper.EnumToList(); var grades = await _distributionGradeServices.GetCaChe(); jm.code = 0; jm.data = new { model, distributionVerifyStatus, grades }; return jm; } #endregion #region 预览数据============================================================ // POST: Api/CoreCmsDistribution/GetDetailsAchievement/10 /// /// 预览数据 /// /// /// [HttpPost] [Description("预览数据")] public async Task GetDetailsAchievement([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsDistributionServices.QueryByIdAsync(entity.id); if (model == null) { jm.msg = "不存在此信息"; return jm; } var distributionRankingDTOs = _coreCmsDistributionServices.QueryAchievement(model.userId); jm.code = 0; jm.data = distributionRankingDTOs; return jm; } #endregion } }