You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1776 lines
70 KiB
C#

5 months ago
using OpenAuth.App.Base;
using OpenAuth.Repository.Domain;
using OpenAuth.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using OpenAuth.App.Request;
using OpenAuth.App.Response;
using Infrastructure;
using OpenAuth.Repository.Core;
using System.Data;
using System.Text.RegularExpressions;
using OpenAuth.App.FormScheme.Response;
using OpenAuth.App.FormScheme.FormHelpers;
using Autofac.Core;
using Infrastructure.Helpers;
using System.Collections;
using Newtonsoft.Json.Linq;
using OpenAuth.App.FormScheme.Request;
using System.Collections.Concurrent;
using ce.autofac.extension;
using OpenAuth.App.DataCodeRule;
using Infrastructure.Extensions;
using OpenAuth.App.BasicQueryService;
using OpenAuth.App.Permission;
using NPOI.SS.Formula.Functions;
using OpenAuth.App.DataSource;
using System.Data.SqlTypes;
using DocumentFormat.OpenXml.Spreadsheet;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using OpenAuth.App.FormModule;
using Microsoft.Extensions.Logging;
using OpenAuth.App.BaseApp.Base;
using Castle.Core.Internal;
namespace OpenAuth.App.FormScheme
{
public class FormSchemeApp : SqlSugarBaseApp<Repository.Domain.FormSchemeInfo, SugarDbContext>
{
private ConcurrentDictionary<string, object> codeDic;
private readonly BaseDataAuthorizeApp _dataAuthorizeApp;
private ILogger<FormSchemeApp> _logger;
public FormSchemeApp(ISugarUnitOfWork<SugarDbContext> unitWork,
ILogger<FormSchemeApp> logger,
ISimpleClient<Repository.Domain.FormSchemeInfo> repository, BaseDataAuthorizeApp dataAuthorizeApp)
: base(unitWork, repository, null)
{
_logger = logger;
_dataAuthorizeApp = dataAuthorizeApp;
}
/// <summary>
/// 查询表单分页信息 custmerform/scheme/page
/// </summary>
/// <param name="keyWord">关键字</param>
/// <param name="category">分类</param>
/// <param name="isEnabled">状态1启用0未启用2草稿3全部</param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="type"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<FormSchemeInfo>>>> LoadFormPage(string keyword, string category,
int pageIndex, int pageSize, int isEnabled = 3)
{
RefAsync<int> totalCount = 0;
var info = await base.Repository.AsQueryable()
.LeftJoin<Repository.Domain.FormScheme>((a, b) => a.SchemeId == b.Id)
.WhereIF(!string.IsNullOrEmpty(keyword), (a, b) => a.Name.Contains(keyword))
.WhereIF(!string.IsNullOrEmpty(category), (a, b) => a.Category == category)
//.WhereIF(isEnabled, (a, b) => a.EnabledMark == 1 && b.Type == 1)
.WhereIF(isEnabled != 3, (a, b) => a.EnabledMark == isEnabled)
.OrderByDescending((a, b) => b.CreateDate)
//.WhereIF(type != 0, (a, b) => b.Type == type)
.Select((a, b) => new FormSchemeInfo()
{
Id = a.Id,
Name = a.Name,
Category = a.Category,
SchemeId = a.SchemeId,
EnabledMark = a.EnabledMark,
FormType = a.FormType,
Description = a.Description,
Type = b.Type,
CreateDate = b.CreateDate,
CreateUserId = b.CreateUserId,
CreateUserName = b.CreateUserName
})
.ToPageListAsync(pageIndex, pageSize, totalCount);
return new Response<PageInfo<List<FormSchemeInfo>>>
{
Result = new PageInfo<List<FormSchemeInfo>>
{
Items = info,
Total = totalCount
}
};
}
#region 添加表单信息
/// <summary>
/// 保存模板信息
/// </summary>
/// <param name="keyValue">主键</param>
/// <param name="schemeInfo">模板基础信息</param>
/// <param name="formScheme">模板信息</param>
public async Task<Response<bool>> AddForm(string keyValue, FormSchemeInfo schemeInfo,
Repository.Domain.FormScheme formScheme)
{
try
{
if (!string.IsNullOrEmpty(schemeInfo.SchemeId))
{
var schemeOldEntity = await GetScheme(schemeInfo.SchemeId);
if (schemeOldEntity == null || schemeOldEntity.Type != formScheme.Type ||
schemeOldEntity.Scheme != formScheme.Scheme)
{
await SaveEntity(keyValue, schemeInfo, formScheme);
}
else
{
await SaveEntity(keyValue, schemeInfo, null);
}
}
else
{
await SaveEntity(keyValue, schemeInfo, formScheme);
}
return new Response<bool> { Result = true };
}
catch (Exception ex)
{
return new Response<bool> { Result = false };
}
}
/// <summary>
/// 获取模板的实体
/// </summary>
/// <param name="keyValue">主键</param>
/// <returns></returns>
public Task<Repository.Domain.FormScheme> GetScheme(string keyValue)
{
return base.Repository.ChangeRepository<SugarRepositiry<Repository.Domain.FormScheme>>()
.GetFirstAsync(r => r.Id == keyValue);
}
/// <summary>
/// 获取模板基础信息的实体
/// </summary>
/// <param name="keyValue">主键</param>
/// <returns></returns>
public Task<FormSchemeInfo> GetSchemeInfo(string keyValue)
{
return base.Repository.GetFirstAsync(r => r.Id == keyValue);
}
/// <summary>
/// 保存模板信息
/// </summary>
/// <param name="keyValue">主键</param>
/// <param name="schemeInfoEntity">模板基础信息</param>
/// <param name="schemeEntity">模板信息</param>
public async Task SaveSchEntity(string keyValue, FormSchemeInfo schemeInfoEntity,
Repository.Domain.FormScheme schemeEntity)
{
if (!string.IsNullOrEmpty(schemeInfoEntity.SchemeId))
{
var schemeOldEntity = await GetScheme(schemeInfoEntity.SchemeId);
if (schemeOldEntity == null || schemeOldEntity.Type != schemeEntity.Type ||
schemeOldEntity.Scheme != schemeEntity.Scheme)
{
await SaveEntity(keyValue, schemeInfoEntity, schemeEntity);
}
else
{
await SaveEntity(keyValue, schemeInfoEntity, null);
}
}
else
{
await SaveEntity(keyValue, schemeInfoEntity, schemeEntity);
}
}
/// <summary>
/// 保存模板信息
/// </summary>
/// <param name="keyValue">主键</param>
/// <param name="schemeInfoEntity">模板基础信息</param>
/// <param name="schemeEntity">模板信息</param>
public async Task<Response<string>> SaveEntity(string keyValue, FormSchemeInfo schemeInfo,
Repository.Domain.FormScheme formScheme)
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
if (string.IsNullOrEmpty(keyValue))
{
schemeInfo.Id = Guid.NewGuid().ToString();
}
else
{
schemeInfo.Id = keyValue;
}
#region 模板信息
//FormSchemeNewModel formSchemeModel = formScheme.Scheme.ToObject<FormSchemeNewModel>();
//formSchemeModel.FormType = schemeInfo.FormType;
if (formScheme != null)
{
//formScheme.Scheme = Json.ToJson(formSchemeModel);
formScheme.SchemeInfoId = schemeInfo.Id;
formScheme.Id = Guid.NewGuid().ToString();
formScheme.CreateDate = DateTime.Now;
formScheme.CreateUserId = schemeInfo.CreateUserId;
formScheme.CreateUserName = schemeInfo.CreateUserName;
await db.Scheme.InsertAsync(formScheme);
schemeInfo.SchemeId = formScheme.Id;
}
#endregion
#region 模板基础信息
if (!string.IsNullOrEmpty(keyValue))
{
await db.SchemeInfo.UpdateAsync(schemeInfo);
}
else
{
await db.SchemeInfo.InsertAsync(schemeInfo);
}
#endregion
var flag = db.Commit();
return new Response<string>
{
Result = schemeInfo.Id,
Message = flag == true ? "添加成功" : "添加失败"
};
}
}
/// <summary>
/// 更新表单模板版本
/// </summary>
/// <param name="schemeInfoId">模板信息主键</param>
/// <param name="schemeId">模板主键</param>
public async Task<Response<bool>> UpdateScheme(string schemeInfoId, string schemeId)
{
Repository.Domain.FormScheme formSchemeEntity = await GetScheme(schemeId);
FormSchemeInfo entity = await base.Repository.GetFirstAsync(r => r.Id == schemeInfoId);
if (formSchemeEntity.Type != 1)
{
entity.EnabledMark = 0;
}
//忽略为空的数据
var flag = true;
if (entity != null)
{
entity.SchemeId = schemeId;
flag = await base.Repository.UpdateAsync(entity);
}
return new Response<bool>
{
Result = flag,
Message = flag == true ? "更新成功" : "更新失败"
};
}
#endregion
/// <summary>
/// 更新自定义表单模板状态
/// </summary>
/// <param name="schemeInfoId">模板信息主键</param>
/// <param name="state">状态1启用0禁用</param>
public async Task<Response<bool>> UpdateState(string schemeInfoId, int state)
{
FormSchemeInfo entity = await base.Repository.GetFirstAsync(r => r.Id == schemeInfoId);
entity.EnabledMark = state;
var flag = await base.Repository.UpdateAsync(entity);
return new Response<bool>
{
Result = flag,
Message = flag == true ? "更新成功" : "更新失败"
};
}
/// <summary>
/// 删除模板信息
/// </summary>
/// <param name="keyValue">主键</param>
public async Task<Response<bool>> Delete(string keyValue)
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
await db.SchemeInfo.DeleteAsync(t => t.Id == keyValue);
await db.Scheme.DeleteAsync(t => t.SchemeInfoId == keyValue);
var flag = db.Commit();
return new Response<bool>
{
Result = flag,
Message = flag == true ? "删除成功" : "删除失败"
};
}
}
/// <summary>
/// 获取模板列表
/// </summary>
/// <param name="pagination">分页参数</param>
/// <param name="schemeInfoId">模板信息主键</param>
/// <returns></returns>
public async Task<Response<PageInfo<List<Repository.Domain.FormScheme>>>> GetSchemePageList(PageReq pagination,
string schemeInfoId)
{
RefAsync<int> totalCount = 0;
var info = await base.Repository.ChangeRepository<SugarRepositiry<Repository.Domain.FormScheme>>()
.AsQueryable()
.Where(t => t.SchemeInfoId == schemeInfoId)
.OrderByDescending(t => t.CreateDate)
.ToPageListAsync(pagination.page, pagination.limit, totalCount);
return new Response<PageInfo<List<Repository.Domain.FormScheme>>>
{
Result = new PageInfo<List<Repository.Domain.FormScheme>>
{
Items = info,
Total = totalCount
}
};
}
#region 扩展方法
/// <summary>
/// 获取sql列
/// </summary>
/// <param name="dbCode"></param>
/// <param name="sql"></param>
/// <returns></returns>
public async Task<List<string>> GetDataColName(string dbCode, string sql, string whereStr = null)
{
sql = this.SqlFilters(sql);
sql = sql.Replace("=@param", " is not null");
sql = sql.Replace("= @param", " is not null");
using (SugarDbContext db = base.UnitWork.CreateContext())
{
DataTable dt = await db.Db.SqlQueryable<object>(sql).Where(whereStr).ToDataTablePageAsync(1, 1);
List<string> res = new List<string>();
foreach (DataColumn item in dt.Columns)
{
res.Add(item.ColumnName.ToLower());
}
return res;
}
}
/// <summary>
///
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public string SqlFilters(string source)
{
if (string.IsNullOrEmpty(source))
{
return source;
}
//去除执行SQL语句的命令关键字
// source = Regex.Replace(source, "select", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " insert ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " update ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " delete ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " drop ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " truncate ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " declare ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " xp_cmdshell ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " /add ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " net user ", "", RegexOptions.IgnoreCase);
//去除执行存储过程的命令关键字
source = Regex.Replace(source, " exec ", "", RegexOptions.IgnoreCase);
source = Regex.Replace(source, " execute ", "", RegexOptions.IgnoreCase);
//去除系统存储过程或扩展存储过程关键字
source = Regex.Replace(source, "xp_", "x p_", RegexOptions.IgnoreCase);
source = Regex.Replace(source, "sp_", "s p_", RegexOptions.IgnoreCase);
//防止16进制注入
source = Regex.Replace(source, "0x", "0 x", RegexOptions.IgnoreCase);
return source;
}
///// <summary>
///// 获取自定义表单数据权限查询条件
///// </summary>
///// <param name="code">自定义表单功能主键</param>
///// <returns></returns>
//public async Task<string> GetWhereSql(string code)
//{
// var numIndex = new string[26] {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
// "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
// // 获取数据权限配置信息
// List<string> objectIds = new List<string>();
// objectIds.Add(userInfo.F_UserId);
// objectIds.AddRange(roleIds);
// var list = await service.GetList(code, objectIds.ToArray());
// var strRes = new StringBuilder();
// int sqlNum = 0;
// foreach (var item in list)
// {
// if (sqlNum > 0)
// {
// strRes.Append(" OR ( ");
// }
// else
// {
// strRes.Append(" ( ");
// }
// string strSql = "";
// var itemFormula = item.F_Formula.ToObject<Formula>();
// if (!string.IsNullOrEmpty(itemFormula.formula))
// {
// strSql = itemFormula.formula;
// for (int i = 1; i < itemFormula.Conditions.Count + 1; i++)
// {
// var conditionItem = itemFormula.Conditions[i - 1];
// conditionItem.index = i;
// strSql = strSql.Replace("" + i, "{@learun" + i + "learun@}");
// }
// if (itemFormula.Formulas != null && itemFormula.Formulas.Count > 0)
// {
// for (int i = 0; i < itemFormula.Formulas.Count; i++)
// {
// strSql = strSql.Replace(numIndex[i], "{@learun" + numIndex[i] + "learun@}");
// }
// }
// }
// else
// {
// // 默认公式
// for (int i = 1; i < itemFormula.Conditions.Count + 1; i++)
// {
// var conditionItem = itemFormula.Conditions[i - 1];
// conditionItem.index = i;
// if (string.IsNullOrEmpty(conditionItem.Group))
// {
// if (strSql != "")
// {
// strSql += " AND ";
// }
// strSql += " {@learun" + i + "learun@} ";
// }
// }
// if (itemFormula.Formulas != null && itemFormula.Formulas.Count > 0)
// {
// for (int i = 0; i < itemFormula.Formulas.Count; i++)
// {
// if (itemFormula.Conditions.FindIndex(t => t.Group == numIndex[i]) != -1)
// {
// if (strSql != "")
// {
// strSql += " AND ";
// }
// strSql += " {@learun" + numIndex[i] + "learun@} ";
// }
// }
// }
// }
// // 分组公式处理
// if (itemFormula.Formulas != null && itemFormula.Formulas.Count > 0)
// {
// for (int i = 0; i < itemFormula.Formulas.Count; i++)
// {
// var groupSql = new StringBuilder();
// var groupList = itemFormula.Conditions.FindAll(t => t.Group == numIndex[i]);
// if (groupList.Count > 0)
// {
// groupSql.Append($" {groupList[0].RelationField} in ( SELECT {groupList[0].Field} FROM {groupList[0].Table} WHERE ");
// // 初始化分组公式
// var groupSqlWhere = "";
// if (string.IsNullOrEmpty(itemFormula.Formulas[i].Value))
// {
// foreach (var groupItem in groupList)
// {
// if (groupSqlWhere != "")
// {
// groupSqlWhere += " AND ";
// }
// groupSqlWhere += " {@learun" + groupItem.index + "learun@} ";
// }
// }
// else
// {
// groupSqlWhere = itemFormula.Formulas[i].Value;
// foreach (var groupItem in groupList)
// {
// groupSqlWhere = groupSqlWhere.Replace("" + groupItem.index, "{@learun" + groupItem.index + "learun@}");
// }
// }
// foreach (var groupItem in groupList)
// {
// var strone = new StringBuilder();
// if (groupItem.F_Symbol == 8)
// {
// strone.Append($" ({groupItem.Cfield} ");
// }
// else
// {
// strone.Append($" {groupItem.Cfield} ");
// }
// string value = await GetValue(groupItem.F_FiledValueType, groupItem.F_FiledValue);
// switch (groupItem.F_Symbol)
// {
// case 1:// 等于
// strone.Append($" = {value}");
// break;
// case 2:// 大于
// strone.Append($" > {value}");
// break;
// case 3:// 大于等于
// strone.Append($" >= {value}");
// break;
// case 4:// 小于
// strone.Append($" < {value}");
// break;
// case 5:// 小于等于
// strone.Append($" <= {value}");
// break;
// case 6:// 包含
// value = value.Replace("'", "");
// strone.Append($" like '%{value}%'");
// break;
// case 7:// 包含于
// value = value.Replace(",", "','");
// strone.Append($" in ({value})");
// break;
// case 8:// 不等于
// strone.Append($" != {value} or {groupItem.Cfield} is null ) ");
// break;
// case 9:// 不包含
// value = value.Replace("'", "");
// strone.Append($" not like '%{value}%'");
// break;
// case 10:// 不包含于
// value = value.Replace(",", "','");
// strone.Append($" not in ({value})");
// break;
// default:
// break;
// }
// groupSqlWhere = groupSqlWhere.Replace("{@learun" + groupItem.index + "learun@}", strone.ToString());
// }
// groupSql.Append(groupSqlWhere);
// groupSql.Append(" ) ");
// strSql = strSql.Replace("{@learun" + numIndex[i] + "learun@}", groupSql.ToString());
// }
// }
// }
// int num = 1;
// foreach (var conditionItem in itemFormula.Conditions)
// {
// if (string.IsNullOrEmpty(conditionItem.Group))
// {
// var strone = new StringBuilder();
// if (conditionItem.Type == "glbd")
// {
// strone.Append($" {conditionItem.RelationField} in ( SELECT {conditionItem.Field} FROM {conditionItem.Table} WHERE {conditionItem.Cfield} ");
// }
// else
// {
// if (conditionItem.F_Symbol == 8)
// {
// strone.Append($" ( {conditionItem.F_FieldId}");
// }
// else
// {
// strone.Append($" {conditionItem.F_FieldId}");
// }
// }
// string value = await GetValue(conditionItem.F_FiledValueType, conditionItem.F_FiledValue);
// switch (conditionItem.F_Symbol)
// {
// case 1:// 等于
// strone.Append($" = {value}");
// break;
// case 2:// 大于
// strone.Append($" > {value}");
// break;
// case 3:// 大于等于
// strone.Append($" >= {value}");
// break;
// case 4:// 小于
// strone.Append($" < {value}");
// break;
// case 5:// 小于等于
// strone.Append($" <= {value}");
// break;
// case 6:// 包含
// value = value.Replace("'", "");
// strone.Append($" like '%{value}%'");
// break;
// case 7:// 包含于
// value = value.Replace(",", "','");
// strone.Append($" in ({value})");
// break;
// case 8:// 不等于
// strone.Append($" != {value}");
// if (conditionItem.Type == "glbd")
// {
// strone.Append($" or {conditionItem.Cfield} is null ");
// }
// else
// {
// strone.Append($" or {conditionItem.F_FieldId} is null ) ");
// }
// break;
// case 9:// 不包含
// value = value.Replace("'", "");
// strone.Append($" not like '%{value}%'");
// break;
// case 10:// 不包含于
// value = value.Replace(",", "','");
// strone.Append($" not in ({value})");
// break;
// default:
// break;
// }
// if (conditionItem.Type == "glbd")
// {
// strone.Append(" ) ");
// }
// else
// {
// strone.Append(" ");
// }
// strSql = strSql.Replace("{@learun" + num + "learun@}", strone.ToString());
// }
// num++;
// }
// strRes.Append(strSql);
// strRes.Append(" ) ");
// sqlNum++;
// }
// return strRes.ToString();
//}
/// <summary>
/// 分页查询方法返回datatable
/// </summary>
/// <param name="sqlStr">sql语句</param>
/// <param name="sqlparam">sql参数</param>
/// <param name="whereStr">查询条件</param>
/// <param name="whereParam">查询参数</param>
/// <param name="pagination">分页参数</param>
/// <returns></returns>
public async Task<DataTable> FindTable(string sqlStr, object sqlparam, PaginationInputDto pagination,
string whereStr = null, object whereParam = null)
{
var (list, total) = await FindTableByPage(sqlStr, sqlparam, whereStr, whereParam, "", pagination.rows,
pagination.page);
pagination.rows = (int)total;
return DBCommonHelper.DtColToLow(list);
}
/// <summary>
/// 分页查询方法返回datatable
/// </summary>
/// <returns>datatable数据</returns>
/// <param name="sqlStr">sql语句</param>
/// <param name="sqlparam">sql参数</param>
/// <param name="whereStr">查询条件</param>
/// <param name="whereParam">查询参数</param>
/// <param name="orderSql">排序字段</param>
/// <param name="pageSize">每页数据条数</param>
/// <param name="pageIndex">页码</param>
/// <returns>list数据,total 总共条数</returns>
private async Task<(DataTable list, long total)> FindTableByPage(string sqlStr, object sqlparam,
string whereStr, object whereParam, string orderSql, int pageSize, int pageIndex)
{
try
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
RefAsync<int> total = 0;
var sqlQueryable = db.Db.SqlQueryable<object>(sqlStr);
if (sqlparam != null)
{
sqlQueryable = sqlQueryable.AddParameters(sqlparam);
}
if (!string.IsNullOrEmpty(whereStr))
{
sqlQueryable = sqlQueryable.Where(whereStr, whereParam);
}
if (!string.IsNullOrEmpty(orderSql))
{
sqlQueryable = sqlQueryable.OrderBy(orderSql);
}
var dt = await sqlQueryable.ToDataTablePageAsync(pageIndex, pageSize, total);
return (dt, total);
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 查询方法返回datatable
/// </summary>
/// <returns>datatable数据</returns>
/// <param name="sql">sql语句</param>
/// <param name="sqlparam">参数</param>
public async Task<DataTable> FindTable(string sql, object sqlparam = null)
{
try
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
var sqlQueryable = db.Db.SqlQueryable<object>(sql);
if (sqlparam != null)
{
sqlQueryable = sqlQueryable.AddParameters(sqlparam);
}
var dt = await sqlQueryable.ToDataTableAsync();
return DBCommonHelper.DtColToLow(dt);
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 查询方法返回datatable
/// </summary>
/// <returns>datatable数据</returns>
/// <param name="sql">sql语句</param>
/// <param name="sqlparam">参数</param>
public async Task<List<dynamic>> FindTableNew(string sql, object sqlparam = null)
{
try
{
List<dynamic> list = new List<dynamic>();
using (SugarDbContext db = base.UnitWork.CreateContext())
{
var sqlQueryable = db.Db.SqlQueryable<object>(sql);
if (sqlparam != null)
{
sqlQueryable = sqlQueryable.AddParameters(sqlparam);
}
var dt = await sqlQueryable.ToDataTableAsync();
// 遍历每一行
foreach (DataRow row in dt.Rows)
{
// 遍历每一列
foreach (DataColumn col in dt.Columns)
{
// 获取当前列的值
var value = row[col];
var colvalue = new { col.ColumnName, value };
list.Add(colvalue);
}
}
//foreach (DataColumn item in dt.Columns)
//{
// item.ColumnName = item.ColumnName.ToLower();
// foreach (DataColumn column in dataTable.Columns)
// {
// var colvalue = new { item.ColumnName, dt.Rows.DefaultValue };
// }
// list.Add(colvalue);
//}
return list;
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 获取编码
/// </summary>
/// <param name="value">字段值</param>
/// <returns></returns>
public async Task<object> GetRuleCodeEx(object value)
{
var code = value;
if (value != null && value.ToString().IndexOf("code_") != -1)
{
if (codeDic == null)
{
codeDic = new ConcurrentDictionary<string, object>();
}
var codeList = value.ToString().Replace("code_", "").Split("|");
if (codeDic.ContainsKey(codeList[1]))
{
codeDic.TryGetValue(codeList[1], out code);
}
else
{
code = await this.GetRuleCode(codeList[0]);
codeDic.TryAdd(codeList[1], code);
}
}
return code;
}
/// <summary>
/// 获取编码
/// </summary>
/// <param name="code">编码规则编码</param>
/// <returns></returns>
public Task<string> GetRuleCode(string code)
{
var codeRuleApp = IocManager.Instance.GetService<CodeRuleApp>();
return codeRuleApp.GetBillCode(code);
}
#endregion
#region 代码发布表单
/// <summary>
/// 获取分页数据
/// </summary>
/// <param name="mid">功能id</param>
/// <param name="desktopParam">桌面参数</param>
/// <param name="schemeId">模板信息主键</param>
/// <param name="pagination">分页参数</param>
/// <param name="queryJson">查询条件</param>
/// <returns></returns>
public async Task<Response<PageInfo<DataTable>>> GetFormDataPage(string mid, string desktopParam,
string schemeId, PaginationInputDto pagination, string queryJson)
{
Repository.Domain.FormScheme schemeEntity = await GetScheme(schemeId);
if (schemeEntity == null)
{
return new Response<PageInfo<DataTable>>
{
Result = new PageInfo<DataTable>
{
}
};
}
FormSchemeModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeModel>();
var query = FormHelper.GetQuerySql(formSchemeModel, queryJson);
query.Sql = query.Sql.Replace("{LEARUN_SASSID}", "");
string sql = "";
if (!string.IsNullOrEmpty(mid))
{
sql = await _dataAuthorizeApp.GetWhereSql(mid);
if (!string.IsNullOrEmpty(sql))
{
query.Sql = $" select * from ({query.Sql})t where {sql} ";
}
}
//if (!string.IsNullOrEmpty(desktopParam))
//{
// var desktopSql = await _iDesktopBLL.GetSql(desktopParam);
// if (string.IsNullOrEmpty(sql))
// {
// query.Sql = $" select * from ({query.Sql})t where {desktopSql} ";
// }
// else
// {
// query.Sql = $" {query.Sql} AND ( {desktopSql} ) ";
// }
//}
var dt = await FindTable(query.Sql, query.DbParameter, pagination);
return new Response<PageInfo<DataTable>>
{
Result = new PageInfo<DataTable>
{
Items = dt,
Total = pagination.rows
}
};
}
//去掉tablist
public async Task<Response<PageInfo<DataTable>>> GetFormDataNewPage(string mid, string desktopParam,
string schemeId, PaginationInputDto pagination, string queryJson)
{
Repository.Domain.FormScheme schemeEntity = await GetScheme(schemeId);
if (schemeEntity == null)
{
return new Response<PageInfo<DataTable>>
{
Result = new PageInfo<DataTable>
{
}
};
}
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
var query = FormHelper.GetQuerySqlNew(formSchemeModel, queryJson);
query.Sql = query.Sql.Replace("{LEARUN_SASSID}", "");
string sql = "";
if (!string.IsNullOrEmpty(mid))
{
sql = await _dataAuthorizeApp.GetWhereSql(mid);
if (!string.IsNullOrEmpty(sql))
{
query.Sql = $" select * from ({query.Sql})t where {sql} ";
}
}
//if (!string.IsNullOrEmpty(desktopParam))
//{
// var desktopSql = await _iDesktopBLL.GetSql(desktopParam);
// if (string.IsNullOrEmpty(sql))
// {
// query.Sql = $" select * from ({query.Sql})t where {desktopSql} ";
// }
// else
// {
// query.Sql = $" {query.Sql} AND ( {desktopSql} ) ";
// }
//}
var dt = new DataTable();
if (pagination != null)
{
dt = await FindTable(query.Sql, query.DbParameter, pagination);
return new Response<PageInfo<DataTable>>
{
Result = new PageInfo<DataTable>
{
Items = dt,
Total = pagination.rows
}
};
}
else
{
dt = await FindTable(query.Sql, query.DbParameter);
return new Response<PageInfo<DataTable>>
{
Result = new PageInfo<DataTable>
{
Items = dt,
}
};
}
}
/// <summary>
/// 获取列表数据
/// </summary>
/// <param name="mid">功能id</param>
/// <param name="desktopParam">桌面参数</param>
/// <param name="schemeId">模板信息主键</param>
/// <param name="queryJson">查询条件</param>
/// <param name="sidx">排序字段</param>
/// <returns></returns>
public async Task<DataTable> GetFormDataList(string mid, string schemeId, string queryJson, string sidx)
{
Repository.Domain.FormScheme schemeEntity = await GetScheme(schemeId);
FormSchemeModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeModel>();
var query = FormHelper.GetQuerySql(formSchemeModel, queryJson);
query.Sql = query.Sql.Replace("{LEARUN_SASSID}", "");
string sql = "";
if (!string.IsNullOrEmpty(mid))
{
//sql = await this.GetDataAuthoritySql(mid);
if (!string.IsNullOrEmpty(sql))
{
query.Sql = $" select * from ({query.Sql})t where {sql} ";
}
}
//if (!string.IsNullOrEmpty(desktopParam))
//{
// var desktopSql = await _iDesktopBLL.GetSql(desktopParam);
// if (string.IsNullOrEmpty(sql))
// {
// query.Sql = $" select * from ({query.Sql})t where {desktopSql} ";
// }
// else
// {
// query.Sql = $" {query.Sql} AND ( {desktopSql} ) ";
// }
//}
// 排序字段
if (!string.IsNullOrEmpty(sidx))
{
query.Sql += $" order by {sidx}";
}
if (formSchemeModel.FormType == 1)
{
Dictionary<string, object> DbParameter = new Dictionary<string, object>();
foreach (var param in query.DbParameter)
{
DbParameter.Add(param.ParameterName, param.Value);
}
return await FindTable(query.Sql, DbParameter);
}
return await FindTable(query.Sql, query.DbParameter);
}
/// <summary>
/// 获取表单数据
/// </summary>
/// <param name="schemeId">模板信息主键</param>
/// <param name="key">主键名</param>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public async Task<Dictionary<string, DataTable>> GetFormData(string schemeId, string key, string keyValue)
{
Repository.Domain.FormScheme schemeEntity = await GetScheme(schemeId);
FormSchemeModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeModel>();
var list = FormHelper.GetQuery(formSchemeModel, key);
var res = new Dictionary<string, DataTable>();
foreach (var item in list)
{
item.Sql = item.Sql.Replace("{LEARUN_SASSID}", "");
if (string.IsNullOrEmpty(item.RelationName))
{
var dt = await FindTable(item.Sql, new { keyValue });
res.Add(item.TableName, dt);
}
else
{
var dt = await FindTable(item.Sql,
new { keyValue = res[item.RelationName].Rows[0][item.RelationField.ToLower()] });
res.Add(item.TableName, dt);
}
}
return res;
}
/// <summary>
/// 获取表单数据
/// </summary>
/// <param name="schemeId">模板信息主键</param>
/// <param name="key">主键名</param>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public async Task<Dictionary<string, DataTable>> GetFormDataNew(string schemeId, string key, string keyValue)
{
// 表单
Repository.Domain.FormScheme schemeEntity = await GetScheme(schemeId);
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
var list = FormHelper.GetQueryNew(formSchemeModel, key);
var res = new Dictionary<string, DataTable>();
foreach (var item in list)
{
item.Sql = item.Sql.Replace("{LEARUN_SASSID}", "");
if (string.IsNullOrEmpty(item.RelationName))
{
var dt = await FindTable(item.Sql, new { keyValue });
res.Add(item.TableName, dt);
}
else
{
//var dt = await FindTable(item.Sql, new { keyValue = res[item.RelationName].Rows[0][item.RelationField.ToLower()] });
var dt = await FindTable(item.Sql, new { keyValue });
res.Add(item.TableName, dt);
}
}
return res;
}
/// <summary>
/// 保存表单数据
/// </summary>
/// <param name="dto">参数</param>
/// <returns></returns>
public async Task<Response<JObject>> SaveFormData(FormDataReq dto)
{
Repository.Domain.FormScheme schemeEntity = await GetScheme(dto.SchemeId);
FormSchemeModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeModel>();
var dataJson = dto.Data.ToJObject();
var list = FormHelper.GetSaveSql(formSchemeModel, dataJson, dto.Pkey, dto.PkeyValue, dto.IsUpdate);
using (SugarDbContext db = base.UnitWork.CreateContext())
{
foreach (var item in list)
{
// 遍历参数
foreach (var p in item.DbParameter)
{
p.Value = await GetRuleCodeEx(p.Value);
}
var properties = dataJson.Properties();
foreach (var item2 in properties)
{
if (item2.Value.ToString() != null && item2.Value.ToString().IndexOf("code_") != -1)
{
dataJson[item2.Name] = (await GetRuleCodeEx(item2.Value.ToString())).ToString();
}
}
switch (item.ExecuteType)
{
case ExecuteType.Insert:
await db.Db.Ado.ExecuteCommandAsync(ExecuteInsert(item.TableName, item.DbParameter),
item.DbParameter);
break;
case ExecuteType.Update:
await db.Db.Ado.ExecuteCommandAsync(
ExecuteUpdate(item.TableName, item.DbParameter, item.Pkey), item.DbParameter);
break;
case ExecuteType.Delete:
await db.Db.Ado.ExecuteCommandAsync(ExecuteDelete(item.TableName, item.DbParameter),
item.DbParameter);
break;
}
}
if (dto.DiffFormData != null)
{
//获取表单更改历史记录信息 add by torres
var difflist = GetSaveHistoryList(dto.DiffFormData, dto.Pkey, dto.PkeyValue, dto.SchemeId,
schemeEntity.SchemeInfoId);
if (difflist.Count > 0)
{
if (formSchemeModel.FormInfo.HistoryType == "2")
{
await db.FormDataHistory.InsertRangeAsync(difflist);
}
else if (formSchemeModel.FormInfo.HistoryType == "1")
{
//await formSchemeService.BaseRepository().Inserts(difflist);
await db.FormDataHistory.InsertRangeAsync(difflist); //待定
}
}
}
var flag = db.Commit();
return new Response<JObject>
{
Result = dataJson,
Message = flag == true ? "提交成功" : "提交失败"
};
}
}
/// <summary>
/// 保存表单数据
/// </summary>
/// <param name="dto">参数</param>
/// <returns></returns>
public async Task<Response<JObject>> SaveFormDataNew(FormDataReq dto)
{
Repository.Domain.FormScheme schemeEntity = await GetScheme(dto.SchemeId);
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
//数据为空时,不执行保存
if (string.IsNullOrEmpty(dto.Data) || dto.Data == "{}")
{
throw new Exception("数据不能为空");
}
var dataJson = dto.Data.ToJObject();
_logger.LogError("保存表单数据接收: " + Newtonsoft.Json.JsonConvert.SerializeObject(dto));
var list = FormHelper.GetSaveSqlNew(formSchemeModel, dataJson, dto.Pkey, dto.PkeyValue, dto.IsUpdate);
using (SugarDbContext db = base.UnitWork.CreateContext())
{
foreach (var item in list)
{
// 遍历参数
foreach (var p in item.DbParameter)
{
p.Value = await GetRuleCodeEx(p.Value);
}
var properties = dataJson.Properties();
foreach (var item2 in properties)
{
if (item2.Value.ToString() != null && item2.Value.ToString().IndexOf("code_") != -1)
{
dataJson[item2.Name] = (await GetRuleCodeEx(item2.Value.ToString())).ToString();
}
}
switch (item.ExecuteType)
{
case ExecuteType.Insert:
await db.Db.Ado.ExecuteCommandAsync(ExecuteInsert(item.TableName, item.DbParameter),
item.DbParameter);
break;
case ExecuteType.Update:
await db.Db.Ado.ExecuteCommandAsync(
ExecuteUpdate(item.TableName, item.DbParameter, item.Pkey), item.DbParameter);
break;
case ExecuteType.Delete:
await db.Db.Ado.ExecuteCommandAsync(ExecuteDelete(item.TableName, item.DbParameter),
item.DbParameter);
break;
}
}
if (dto.DiffFormData != null)
{
//获取表单更改历史记录信息 add by torres
var difflist = GetSaveHistoryList(dto.DiffFormData, dto.Pkey, dto.PkeyValue, dto.SchemeId,
schemeEntity.SchemeInfoId);
if (difflist.Count > 0)
{
await db.FormDataHistory.InsertRangeAsync(difflist);
//if (formSchemeModel.FormInfo.HistoryType == "2")
//{
// await db.FormDataHistory.InsertRangeAsync(difflist);
//}
//else if (formSchemeModel.FormInfo.HistoryType == "1")
//{
// //await formSchemeService.BaseRepository().Inserts(difflist);
// await db.FormDataHistory.InsertRangeAsync(difflist);//待定
//}
}
}
var flag = db.Commit();
return new Response<JObject>
{
Result = dataJson,
Message = flag == true ? "提交成功" : "提交失败"
};
}
}
#region 历史记录实体列表
/// <summary>
/// 获取历史记录实体列表
/// </summary>
/// <param name="historyInfo">更新的字段信息</param>
/// <param name="pkey">主键字段</param>
/// <param name="pkeyValue">主键值</param>
/// <param name="schemeId">表单配置id</param>
/// <param name="f_schemeInfoId">表单信息id</param>
/// <returns></returns>
public List<FormDataHistory> GetSaveHistoryList(List<FormDataHistory> historyInfo, string pkey,
string pkeyValue, string schemeId, string f_schemeInfoId)
{
if (historyInfo != null && historyInfo.Count > 0)
{
foreach (var item in historyInfo)
{
item.Id = Guid.NewGuid().ToString();
item.TablePKey = pkey;
item.TablePKeyValue = pkeyValue;
item.SchemeId = schemeId;
item.SchemeInfoId = f_schemeInfoId;
item.CreaterTime = DateTime.Now;
}
}
return historyInfo;
}
#endregion
#region 拼接字符串
/// <summary>
/// 插入数据
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="dbParameters">参数</param>
/// <returns></returns>
public string ExecuteInsert(string tableName, List<SugarParameter> dbParameters)
{
var sql = new StringBuilder();
var sqlValue = new StringBuilder();
sql.Append($" INSERT INTO {tableName} ( \"");
sqlValue.Append($" ( ");
bool isfirt = true;
foreach (var item in dbParameters)
{
if (!isfirt)
{
sql.Append(",\"");
sqlValue.Append(",");
}
sql.Append($"{item.ParameterName}\"");
sqlValue.Append($"@{item.ParameterName}");
isfirt = false;
}
sql.Append($" ) VALUES {sqlValue} )");
//var strSql = DBCommonHelper.SqlFormat(sql.ToString(), _dataType);
return sql.ToString();
}
/// <summary>
/// 更新数据
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="dbParameters">参数</param>
/// <param name="pkey">主键名</param>
/// <returns></returns>
public string ExecuteUpdate(string tableName, List<SugarParameter> dbParameters, string pkey)
{
var sql = new StringBuilder();
sql.Append($" UPDATE {tableName} SET ");
bool isfirt = true;
foreach (var item in dbParameters)
{
if (item.Value == null)
{
if (!isfirt)
{
sql.Append(",");
}
sql.Append($"\"{item.ParameterName}\" = null ");
isfirt = false;
}
else
{
if (!isfirt)
{
sql.Append(",");
}
sql.Append($"\"{item.ParameterName}\" = @{item.ParameterName} ");
isfirt = false;
}
}
sql.Append($" WHERE \"{pkey}\" = @{pkey} ");
return sql.ToString();
}
/// <summary>
/// 删除表数据
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="dbParameters">参数</param>
/// <returns></returns>
public string ExecuteDelete(string tableName, List<SugarParameter> dbParameters)
{
var sql = new StringBuilder();
sql.Append($" DELETE FROM {tableName} WHERE 1=1 ");
foreach (var item in dbParameters)
{
sql.Append($" AND \"{item.ParameterName}\" = @{item.ParameterName} ");
}
return sql.ToString();
}
#endregion
/// <summary>
/// 删除表单数据
/// </summary>
/// <param name="schemeId">模板信息主键</param>
/// <param name="key">主键名</param>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public async Task<Response<string>> DeleteFormData(string schemeId, string key, string keyValue)
{
Repository.Domain.FormScheme schemeEntity = await GetScheme(schemeId);
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
var list = FormHelper.GetQueryNew(formSchemeModel, key);
var res = new Dictionary<string, DataTable>();
foreach (var item in list)
{
if (string.IsNullOrEmpty(item.RelationName))
{
var dt = await FindTable(item.Sql, new { keyValue });
res.Add(item.TableName, dt);
}
else
{
var dt = await FindTable(item.Sql, new { keyValue });
res.Add(item.TableName, dt);
}
}
var deleteList = FormHelper.GetDeleteSqlNew(formSchemeModel, key);
var flag = false;
using (SugarDbContext db = base.UnitWork.CreateContext())
{
try
{
foreach (var item in deleteList)
{
if (string.IsNullOrEmpty(item.RelationName))
{
await db.Db.Ado.ExecuteCommandAsync(item.Sql, new { keyValue });
}
else
{
await db.Db.Ado.ExecuteCommandAsync(item.Sql, new { keyValue });
}
}
flag = db.Commit();
}
catch
{
flag = false;
}
return new Response<string>
{
Result = flag == true ? "success" : "fail",
Message = flag == true ? "删除成功" : "删除失败"
};
}
}
#endregion
#region 获取矢量切片
/// <summary>
/// 根据表名获取矢量切片
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public byte[] QueryVectorTileByTable(QueryVectorTileByTableReq req)
{
VectorTileSearchModel searchModel = new VectorTileSearchModel
{
x = req.x,
y = req.y,
z = req.z,
field = req.field,
table = req.table,
filter = req.filter,
};
var result = new CommonDataManager(base.UnitWork.CreateContext().Db).VectorTile(searchModel);
return result;
}
#endregion
#region 导入
/// <summary>
///
/// </summary>
/// <param name="id">表单设计id</param>
/// <param name="dt">数据</param>
/// <returns></returns>
public async Task<(DataTable elist, int snum, int fnum)> ImportTable(string id, DataTable dt, string pkey)
{
int snum = 0;
int fnum = 0;
//解析表单
List<ExcelImportFileds> list = new List<ExcelImportFileds>();
Repository.Domain.FormScheme schemeEntity = await GetScheme(id);
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
FormDbTableInfo mainTable = formSchemeModel.Db.Find(t => t.Type == "main");
foreach (var tab in formSchemeModel.FormInfo.TabList)
{
foreach (var component in tab.Schemas)
{
if (component == null || component.ComponentProps == null ||
string.IsNullOrEmpty(component.ComponentProps.DataTable))
{
continue;
}
ExcelImportFileds excelImportFileds = new ExcelImportFileds();
excelImportFileds.ColName = component.Label;
excelImportFileds.Name = component.ComponentProps.FieldName;
excelImportFileds.CsType = component.CsType;
excelImportFileds.RelationType = component.ComponentProps.FieldName == pkey ? 1 : 0;
list.Add(excelImportFileds);
}
}
DataTable failDt = new DataTable();
dt.Columns.Add("导入错误", typeof(string));
foreach (DataColumn dc in dt.Columns)
{
failDt.Columns.Add(dc.ColumnName, dc.DataType);
}
if (dt.Rows.Count > 0)
{
using (SugarDbContext db = base.UnitWork.CreateContext())
{
foreach (DataRow dr in dt.Rows)
{
// 行数据循环
try
{
List<SugarParameter> dbParameters = new List<SugarParameter>();
foreach (var col in list)
{
object paramValue = null;
switch (col.RelationType)
{
case 0: //无关联
paramValue = dr[col.ColName].ToString();
break;
case 1: //GUID
paramValue = Guid.NewGuid().ToString();
break;
case 2: //数据字典
break;
case 3: //数据表
break;
case 4: //固定值
paramValue = col.Value;
break;
case 5: //操作人ID
paramValue = "";
break;
case 6: //操作人名字
paramValue = "";
break;
case 7: //操作时间
paramValue = DateTime.Now;
break;
}
dbParameters.Add(FormHelper.GetMyDbParameter(col.Name, paramValue.ToString(),
col.CsType));
}
await db.Db.Ado.ExecuteCommandAsync(ExecuteInsert(mainTable.Name, dbParameters),
dbParameters);
db.Commit();
snum++;
}
catch (Exception ex)
{
fnum++;
dr["导入错误"] = ex.Message;
failDt.Rows.Add(dr.ItemArray);
}
}
}
}
return (failDt, snum, fnum);
}
//导出模板
public async Task<Response<MemoryStream>> ExportTemplate(string id, DataTable dt, string pkey)
{
Response<MemoryStream> response = new Response<MemoryStream>();
try
{
//解析表单
List<ExcelImportFileds> list = new List<ExcelImportFileds>();
Repository.Domain.FormScheme schemeEntity = await GetScheme(id);
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
FormDbTableInfo mainTable = formSchemeModel.Db.Find(t => t.Type == "main");
foreach (var tab in formSchemeModel.FormInfo.TabList)
{
foreach (var component in tab.Schemas)
{
if (component == null || component.ComponentProps == null ||
string.IsNullOrEmpty(component.ComponentProps.DataTable))
{
continue;
}
ExcelImportFileds excelImportFileds = new ExcelImportFileds();
excelImportFileds.ColName = component.Label;
excelImportFileds.Name = component.ComponentProps.FieldName;
excelImportFileds.CsType = component.CsType;
excelImportFileds.RelationType = component.ComponentProps.FieldName == pkey ? 1 : 0;
list.Add(excelImportFileds);
}
}
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet();
#region 内容样式
IFont font1 = workbook.CreateFont(); //创建一个字体样式对象
font1.FontName = "Microsoft YaHei"; //和excel里面的字体对应
//font1.Boldweight = short.MaxValue;//字体加粗
font1.FontHeightInPoints = 12; //字体大小
ICellStyle style = workbook.CreateCellStyle(); //创建样式对象
style.BorderBottom = BorderStyle.Thin;
style.BorderLeft = BorderStyle.Thin;
style.BorderRight = BorderStyle.Thin;
style.BorderTop = BorderStyle.Thin;
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = VerticalAlignment.Center;
style.SetFont(font1); //将字体样式赋给样式对象
style.WrapText = true;
#endregion
#region 标题样式
IFont font = workbook.CreateFont(); //创建一个字体样式对象
font.FontName = "Microsoft YaHei"; //和excel里面的字体对应
font.Boldweight = (short)FontBoldWeight.Bold; //字体加粗
font.FontHeightInPoints = 12; //字体大小
ICellStyle style1 = workbook.CreateCellStyle(); //创建样式对象
style1.BorderBottom = BorderStyle.Thin;
style1.BorderLeft = BorderStyle.Thin;
style1.BorderRight = BorderStyle.Thin;
style1.BorderTop = BorderStyle.Thin;
style1.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style1.VerticalAlignment = VerticalAlignment.Center;
style1.SetFont(font); //将字体样式赋给样式对象
#endregion
#region 创建表头
IRow rowHeader = sheet.CreateRow(0);
rowHeader.Height = 20 * 30;
int j = 0;
foreach (var i in list)
{
rowHeader.CreateCell(j);
rowHeader.Cells[j].CellStyle = style1;
rowHeader.Cells[j].SetCellValue(i.ColName);
sheet.SetColumnWidth(j, 20 * 350);
j++;
}
#endregion
response.Result = new MemoryStream();
workbook.Write(response.Result);
workbook = null;
response.Result.Close();
response.Result.Dispose();
response.Code = 200;
response.Message = "获取成功";
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message;
}
return response;
}
public async Task<Response<MemoryStream>> ExportTemplateNew(string id, DataTable dt, string pkey)
{
Response<MemoryStream> response = new Response<MemoryStream>();
try
{
//解析表单
List<ExcelImportFileds> list = new List<ExcelImportFileds>();
Repository.Domain.FormScheme schemeEntity = await GetScheme(id);
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
FormDbTableInfo mainTable = formSchemeModel.Db.Find(t => t.Type == "main");
foreach (var tab in formSchemeModel.FormInfo.TabList)
{
foreach (var component in tab.Schemas)
{
if (component == null || component.ComponentProps == null ||
string.IsNullOrEmpty(component.ComponentProps.DataTable))
{
continue;
}
ExcelImportFileds excelImportFileds = new ExcelImportFileds();
excelImportFileds.ColName = component.Label;
excelImportFileds.Name = component.ComponentProps.FieldName;
excelImportFileds.CsType = component.CsType;
excelImportFileds.RelationType = component.ComponentProps.FieldName == pkey ? 1 : 0;
list.Add(excelImportFileds);
}
}
response.Code = 200;
response.Message = "获取成功";
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message;
}
return response;
}
#endregion
}
}