添加项目文件。

This commit is contained in:
JianWeie
2021-12-20 21:27:32 +08:00
parent 747486f5cb
commit 82d825b7a5
3514 changed files with 887941 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2021/1/31 21:45:10
* Description: 暂无
***********************************************************************/
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
namespace CoreCms.Net.Services
{
/// <summary>
/// 表单项表 接口实现
/// </summary>
public class CoreCmsFormItemServices : BaseServices<CoreCmsFormItem>, ICoreCmsFormItemServices
{
private readonly ICoreCmsFormItemRepository _dal;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsFormItemServices(IUnitOfWork unitOfWork, ICoreCmsFormItemRepository dal)
{
_dal = dal;
BaseDal = dal;
_unitOfWork = unitOfWork;
}
}
}

View File

@@ -0,0 +1,531 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2021/1/31 21:45:10
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Auth;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
namespace CoreCms.Net.Services
{
/// <summary>
/// 表单 接口实现
/// </summary>
public class CoreCmsFormServices : BaseServices<CoreCmsForm>, ICoreCmsFormServices
{
private readonly ICoreCmsFormRepository _dal;
private readonly ICoreCmsFormItemRepository _itemRepository;
private readonly ICoreCmsFormSubmitServices _formSubmitServices;
private readonly ICoreCmsFormSubmitDetailServices _formSubmitDetailServices;
private readonly ICoreCmsProductsServices _productsServices;
private readonly ICoreCmsAreaServices _areaServices;
private IHttpContextAccessor _httpContextAccessor;
private readonly ICoreCmsGoodsServices _goodsServices;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsFormServices(IUnitOfWork unitOfWork, ICoreCmsFormRepository dal, ICoreCmsFormItemRepository itemRepository, ICoreCmsGoodsServices goodsServices, ICoreCmsFormSubmitServices formSubmitServices, IHttpContextAccessor httpContextAccessor, ICoreCmsAreaServices areaServices, ICoreCmsFormSubmitDetailServices formSubmitDetailServices, ICoreCmsProductsServices productsServices)
{
this._dal = dal;
_itemRepository = itemRepository;
_goodsServices = goodsServices;
_formSubmitServices = formSubmitServices;
_httpContextAccessor = httpContextAccessor;
_areaServices = areaServices;
_formSubmitDetailServices = formSubmitDetailServices;
_productsServices = productsServices;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public async Task<AdminUiCallBack> InsertAsync(FMForm entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<AdminUiCallBack> UpdateAsync(FMForm entity)
{
return await _dal.UpdateAsync(entity);
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsForm entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsForm> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<AdminUiCallBack> DeleteByIdAsync(int id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region ==========================================================
/// <summary>
/// 获取缓存的所有数据
/// </summary>
/// <returns></returns>
public async Task<List<CoreCmsForm>> GetCaChe()
{
return await _dal.GetCaChe();
}
/// <summary>
/// 更新cache
/// </summary>
public async Task<List<CoreCmsForm>> UpdateCaChe()
{
return await _dal.UpdateCaChe();
}
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
public new async Task<IPageList<CoreCmsForm>> QueryPageAsync(Expression<Func<CoreCmsForm, bool>> predicate,
Expression<Func<CoreCmsForm, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
}
#endregion
/// <summary>
/// 获取form表单详情
/// </summary>
/// <param name="id"></param>
/// <param name="token"></param>
/// <param name="noToken"></param>
/// <returns></returns>
public async Task<WebApiCallBack> GetFormInfo(int id, string token, bool noToken = false)
{
var jm = new WebApiCallBack();
if (id == 0)
{
jm.msg = GlobalErrorCodeVars.Code10051;
jm.status = false;
return jm;
}
var formModel = await _dal.QueryByIdAsync(id);
if (formModel == null)
{
jm.msg = GlobalErrorCodeVars.Code18008;
return jm;
}
var dt = DateTime.Now;
//检查过期时间
if (formModel.endDateTime < dt && noToken == false)
{
jm.msg = GlobalErrorCodeVars.Code18002;
jm.data = new
{
isExpires = true,
needLogin = false
};
return jm;
}
//如果是后台则不验证token
if (noToken)
{
formModel.isLogin = false;
}
if (formModel.isLogin && string.IsNullOrEmpty(token))
{
jm.msg = GlobalErrorCodeVars.Code14006;
jm.data = new
{
needLogin = true,
isExpires = false,
};
return jm;
}
else if (formModel.isLogin && !string.IsNullOrEmpty(token))
{
var userId = TokenHelper.GetUserIdBySecurityToken(token);
jm.otherData = userId;
if (userId <= 0)
{
jm.msg = GlobalErrorCodeVars.Code14006;
jm.data = new
{
needLogin = true,
isExpires = false,
};
return jm;
}
}
var items = await _itemRepository.QueryListByClauseAsync(p => p.formId == formModel.id, p => p.sort, OrderByType.Asc);
foreach (var item in items)
{
if (item.type == GlobalEnumVars.FormFieldTypes.goods.ToString())
{
if (noToken == false)
{
var goodId = Convert.ToInt32(item.value);
if (goodId > 0)
{
item.good = await _goodsServices.GetGoodsDetial(goodId);
}
}
}
else if (item.type == GlobalEnumVars.FormFieldTypes.radio.ToString())
{
item.radioValue = item.value.Split(",").ToList();
}
else if (item.type == GlobalEnumVars.FormFieldTypes.checbox.ToString())
{
var valueArray = item.value.Split(",");
var defaultArray = item.defaultValue.Split(",");
var tempCheckbox = new List<TempCheckbox>();
foreach (var v in valueArray)
{
var t = new TempCheckbox { @checked = defaultArray.Contains(v), value = v };
tempCheckbox.Add(t);
}
item.checkboxValue = tempCheckbox;
}
else if (item.type == GlobalEnumVars.FormFieldTypes.date.ToString())
{
//没有值的时候设置下默认值
if (string.IsNullOrEmpty(item.defaultValue))
{
item.defaultValue = dt.ToString("yyyy-MM-hh");
}
}
else if (item.type == GlobalEnumVars.FormFieldTypes.time.ToString())
{
//没有值的时候设置下默认值
if (string.IsNullOrEmpty(item.defaultValue))
{
item.defaultValue = dt.ToString("HH:mm");
}
}
}
formModel.Items = items;
jm.status = true;
jm.code = 0;
jm.data = formModel;
jm.msg = "获取成功";
return jm;
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<WebApiCallBack> AddSubmit(FmAddSubmit entity)
{
var jm = new WebApiCallBack();
jm.msg = GlobalErrorCodeVars.Code18001;
var formModel = await _dal.QueryByIdAsync(entity.id);
if (formModel == null)
{
jm.msg = GlobalErrorCodeVars.Code18008;
return jm;
}
if (formModel.isLogin && string.IsNullOrEmpty(entity.token))
{
jm.msg = GlobalErrorCodeVars.Code14006;
jm.data = new
{
needLogin = true
};
return jm;
}
var dt = DateTime.Now;
//检查过期时间
if (formModel.endDateTime < dt)
{
jm.msg = GlobalErrorCodeVars.Code18002;
return jm;
}
decimal money = 0;
//todo 金额促销
//付款码
if (formModel.type == (int)GlobalEnumVars.FormTypes.)
{
var items = await _itemRepository.QueryListByClauseAsync(p => p.formId == formModel.id && p.type == GlobalEnumVars.FormFieldTypes.money.ToString());
if (items.Any())
{
items.ForEach(p =>
{
var post = entity.data.Find(o => o.key == p.id);
money += (decimal)(post?.value.ObjectToFloat(0) ?? 0);
});
}
}
var userId = 0;
if (!string.IsNullOrEmpty(entity.token))
{
userId = TokenHelper.GetUserIdBySecurityToken(entity.token);
}
//判断提交次数
if (formModel.times > 0 && !string.IsNullOrEmpty(entity.token))
{
if (userId <= 0)
{
jm.msg = GlobalErrorCodeVars.Code18012;
return jm;
}
var count = await _formSubmitServices.GetCountAsync(p => p.userId == userId && p.formId == formModel.id);
if (count >= formModel.times)
{
jm.msg = GlobalErrorCodeVars.Code18003;
return jm;
}
}
try
{
_unitOfWork.BeginTran();
var formSubmitModel = new CoreCmsFormSubmit();
formSubmitModel.formId = formModel.id;
formSubmitModel.formName = formModel.name;
formSubmitModel.userId = userId;
formSubmitModel.money = money;
formSubmitModel.payStatus = false;
formSubmitModel.status = false;
formSubmitModel.createTime = DateTime.Now;
formSubmitModel.ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1";
var formSubmitId = await _formSubmitServices.InsertReturnIdentityAsync(formSubmitModel);
if (formSubmitId <= 0)
{
_unitOfWork.RollbackTran();
jm.msg = GlobalErrorCodeVars.Code18005;
return jm;
}
if (entity.data.Count > 0)
{
//根据提交的数据取字段列表(已废弃)
//var formitemIds = entity.data.Select(p => p.key).ToList();
//var formItems = await _itemRepository.QueryListByClauseAsync(p => formitemIds.Contains(p.id));
//查询表单展示字段
var formItems = await _itemRepository.QueryListByClauseAsync(p => p.formId == formModel.id, p => p.sort, OrderByType.Asc);
var sDetails = new List<CoreCmsFormSubmitDetail>();
//遍历表单字段项
foreach (var item in formItems)
{
//获取提交的哪些
var postItem = entity.data.Find(p => p.key == item.id);
if (postItem == null)
{
_unitOfWork.RollbackTran();
jm.msg = item.name + GlobalErrorCodeVars.Code18020;
return jm;
}
string value = postItem.value;
//验证数据格式
if (FormHelper.ValidateField(item.validationType, postItem.value))
{
_unitOfWork.RollbackTran();
}
//如果必填但数据为空。
if (item.required && string.IsNullOrEmpty(postItem.value))
{
_unitOfWork.RollbackTran();
jm.msg = GlobalErrorCodeVars.Code18006 + item.name;
return jm;
}
//验证地区
if (item.type == GlobalEnumVars.FormFieldTypes.area.ToString() && !string.IsNullOrEmpty(postItem.value))
{
//var arr = postItem.value.Split(" ");
//var countyName = arr[2];
//var cityName = arr[1];
//var provinceName = arr[0];
//var areaId = await _areaServices.GetThreeAreaId(provinceName, cityName, countyName, "");
//value = areaId.ToString();
value = postItem.value;
}
if (item.type == GlobalEnumVars.FormFieldTypes.goods.ToString() && !string.IsNullOrEmpty(postItem.value))
{
var goods = JsonConvert.DeserializeObject<List<FmAddSubmitItemGoods>>(postItem.value);
if (goods.Any())
{
foreach (var good in goods)
{
var product = await _productsServices.GetProductInfo(good.productId, false, 0);
if (product == null)
{
_unitOfWork.RollbackTran();
jm.msg = GlobalErrorCodeVars.Code12501;
return jm;
}
var formItemName = !string.IsNullOrEmpty(product.spesDesc)
? product.spesDesc + "/" + product.sn
: product.sn;
money += product.price * good.nums;
var sDetail = new CoreCmsFormSubmitDetail();
sDetail.submitId = formSubmitId;
sDetail.formId = formModel.id;
sDetail.formItemId = item.id;
sDetail.formItemName = formItemName;
sDetail.formItemValue = good.nums.ToString();
sDetails.Add(sDetail);
}
}
}
else
{
var sDetail = new CoreCmsFormSubmitDetail();
sDetail.submitId = formSubmitId;
sDetail.formId = formModel.id;
sDetail.formItemId = item.id;
sDetail.formItemName = item.name;
sDetail.formItemValue = value;
sDetails.Add(sDetail);
}
}
var sDetailResult = await _formSubmitDetailServices.InsertAsync(sDetails);
if (sDetailResult <= 0)
{
_unitOfWork.RollbackTran();
jm.msg = GlobalErrorCodeVars.Code18007;
return jm;
}
}
if (formModel.type == (int)GlobalEnumVars.FormTypes.)
{
//订单类型时,更新提交表单金额
await _formSubmitServices.UpdateAsync(p => new CoreCmsFormSubmit() { money = money }, p => p.id == formSubmitId);
}
jm.data = new
{
formSubmitId,
money
};
_unitOfWork.CommitTran();
jm.status = true;
jm.msg = "提交成功";
}
catch (Exception e)
{
_unitOfWork.RollbackTran();
jm.status = false;
jm.msg = "操作异常";
jm.data = e;
}
return jm;
}
}
}

View File

@@ -0,0 +1,39 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2021/1/31 21:45:10
* Description: 暂无
***********************************************************************/
using System;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.UI;
namespace CoreCms.Net.Services
{
/// <summary>
/// 提交表单保存大文本值表 接口实现
/// </summary>
public class CoreCmsFormSubmitDetailServices : BaseServices<CoreCmsFormSubmitDetail>, ICoreCmsFormSubmitDetailServices
{
private readonly ICoreCmsFormSubmitDetailRepository _dal;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsFormSubmitDetailServices(IUnitOfWork unitOfWork, ICoreCmsFormSubmitDetailRepository dal)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
}
}

View File

@@ -0,0 +1,149 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2021/1/31 21:45:10
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Model.ViewModels.DTO;
using SqlSugar;
namespace CoreCms.Net.Services
{
/// <summary>
/// 用户对表的提交记录 接口实现
/// </summary>
public class CoreCmsFormSubmitServices : BaseServices<CoreCmsFormSubmit>, ICoreCmsFormSubmitServices
{
private readonly ICoreCmsFormSubmitRepository _dal;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsFormSubmitServices(IUnitOfWork unitOfWork, ICoreCmsFormSubmitRepository dal)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法并返回自增值
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public async Task<int> InsertReturnIdentityAsync(CoreCmsFormSubmit entity)
{
return await _dal.InsertReturnIdentityAsync(entity);
}
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsFormSubmit entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsFormSubmit entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsFormSubmit> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
public new async Task<IPageList<CoreCmsFormSubmit>> QueryPageAsync(Expression<Func<CoreCmsFormSubmit, bool>> predicate,
Expression<Func<CoreCmsFormSubmit, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
}
#endregion
/// <summary>
/// 表单支付
/// </summary>
/// <param name="id">序列</param>
/// <returns></returns>
public async Task<WebApiCallBack> Pay(int id)
{
return await _dal.Pay(id);
}
/// <summary>
/// 获取表单的统计数据
/// </summary>
/// <param name="formId">表单序列</param>
/// <param name="day">多少天内的数据</param>
/// <returns></returns>
public async Task<FormStatisticsViewDto> GetStatisticsByFormid(int formId, int day)
{
return await _dal.GetStatisticsByFormid(formId, day);
}
}
}