using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using SuperMap.RealEstate.ServiceModel;
using Business = SuperMap.RealEstate.FrameWork.Platform.Business;
using Newtonsoft.Json.Linq;
using HZQR.Common;
namespace CodeBuilderApi
{
///
/// 公共方法
///
public class CommonHelper
{
///
/// 数字数组
///
public const string charSet = "0,1,2,3,4,5,6,7,8,9";
#region 方法 -> 将DateTime类型转换为long类型
///
/// 将DateTime类型转换为long类型
///
/// 时间
///
public static long ConvertDataTimeLong(DateTime dt)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
TimeSpan toNow = dt.Subtract(dtStart);
long timeStamp = toNow.Ticks;
timeStamp = long.Parse(timeStamp.ToString().Substring(0, timeStamp.ToString().Length - 7));
return timeStamp;
}
#endregion
#region 方法 -> 将Long类型转换为DateTime类型
///
/// 将Long类型转换为DateTime类型
///
/// long
/// s
public static DateTime ConvertLongDateTime(long d)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(d + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
DateTime dtResult = dtStart.Add(toNow);
return dtResult;
}
///
/// 时间戳(毫秒值)String转换为DateTime类型转换
///
/// 毫秒时间戳
///
public static DateTime TicksToDate(string time)
{
return new DateTime((Convert.ToInt64(time) * 10000) + 621355968000000000);
}
#endregion
#region 方法 -> 枚举参数过滤处理
///
/// 枚举参数过滤处理,解决麻烦的SQL拼接
/// (对照数据表给定添加、更新的参数枚举类型ValueType)
///
/// 数据类型
/// 数据值
///
public static string IsArrayType(ValueType _Type, object _String = null)
{
if (_String != null && _String.ToString() != "")
{
switch (_Type)
{
case ValueType.String:
return string.Format("'{0}'", _String.ToString().Replace("'", " "));
case ValueType.Int:
case ValueType.Double:
case ValueType.Boolean:
return _String.ToString();
case ValueType.DateTime:
return string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", _String);
}
}
return "null";
}
///
/// 枚举参数过滤处理,解决麻烦的SQL拼接
/// (对照数据表给定添加、更新的参数枚举类型ValueType)
///
/// 数据类型
/// 是否使用缺省值
///
private static string IsArrayType(ValueType _Type, bool _DefaultValue = false)
{
if (_DefaultValue)
{
switch (_Type)
{
case ValueType.String:
return "''";
case ValueType.Int:
case ValueType.Double:
case ValueType.Boolean:
return "0";
case ValueType.DateTime:
return string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", DateTime.Now.ToString());
}
}
return "null";
}
#endregion
#region 方法 -> 定义5个类型的枚举
///
/// 定义5个类型的枚举
///
public enum ValueType
{
///
/// 字符串
///
String = 0,
///
/// 整型
///
Int = 1,
///
/// 双精度
///
Double = 2,
///
/// true或false
///
Boolean = 3,
///
/// 日期
///
DateTime = 4
}
#endregion
#region 方法 -> SQL语句分页
///
/// SQL语句分页
///
/// SQL语句
/// 开始的行号
/// 结束的行号
///
public static string GetPageSql(string sql, int? rn = null, int? rowNum = null)
{
if (rn != null && rowNum != null)
{
//分页查询
sql = string.Format(@"
SELECT * FROM (
SELECT ROWNUM RN,N.* FROM ({0}) N WHERE ROWNUM<={1}
) M WHERE M.RN>={2}", sql, rowNum, rn);
}
return sql;
}
#endregion
#region 方法 -> 为属性赋值
///
/// 为属性赋值
///
/// 源单类
/// 需要转换的实体类
///
///
public static S EntityConvert(T source)
{
S target = Activator.CreateInstance();
var sType = source.GetType();
var dType = typeof(S);
foreach (PropertyInfo now in sType.GetProperties())
{
var name = dType.GetProperty(now.Name);
if (name == null)
continue;
dType.GetProperty(now.Name).SetValue(target, now.GetValue(source));
}
return target;
}
#endregion
#region 方法 -> 获取指定页码Datatable数据
///
/// 获取指定页码Datatable数据
///
/// 源数据
/// 每页返回的数量
/// 返回第几页数据
/// Datatable数据格式
public static DataTable GetDataTableWithPageSize(DataTable dtOrigin, int pageSize, int pageIndex)
{
if (pageIndex == 0)
{
pageIndex = 1;
}
if (pageSize == 0)
{
pageSize = 10;
}
//克隆数据源
DataTable dtClone = dtOrigin.Clone();
dtClone.Columns.Add("RN", typeof(int));
//开始插入数据源
for (int RowCount = 0; RowCount < pageSize; RowCount++)
{
//获取当前数据源行数
int RN = pageSize * (pageIndex - 1) + RowCount;
//如果行数大于数据源实际数量,则直接跳过
if (RN >= dtOrigin.Rows.Count)
{
break;
}
//获取当前数据源内容
DataRow EndAccountDataRow = dtOrigin.Rows[RN];
//创建一个新 System.Data.DataRow 具有与表相同的架构
DataRow _DataRow = dtClone.NewRow();
//开始插入数据
for (int ColumnsCount = 0; ColumnsCount < dtOrigin.Columns.Count; ColumnsCount++)
{
_DataRow[ColumnsCount] = EndAccountDataRow[ColumnsCount];
}
_DataRow["RN"] = RN + 1;
//将数据加入到克隆的DataTable中
dtClone.Rows.Add(_DataRow);
}
return dtClone;
}
#endregion
#region 方法 -> 合并Datatable中某个字符串的值
///
/// 合并Datatable中某个字符串的值,返回list
///
/// 数据源
/// 字段名称
/// 排序字段
///
public static List JoinListFromDataTable(DataTable dataTable, string FieldName, string SortStr = "")
{
List JoinStr = new List();
foreach (DataRow dataRow in dataTable.DefaultView.ToTable(true, FieldName).Select("", SortStr))
{
if (dataRow[FieldName].ToString() != "")
{
JoinStr.Add(dataRow[FieldName].ToString());
}
}
return JoinStr;
}
///
/// 合并Datatable中某个字符串的值,返回string
///
/// 数据源
/// 字段名称
/// 分隔符,默认为,
/// 排序字段
///
public static string JoinStrFromDataTable(DataTable dataTable, string FieldName,
string SeparateStr = ",", string SortStr = "")
{
string JoinStr = "";
foreach (DataRow dataRow in dataTable.DefaultView.ToTable(true, FieldName).Select("", SortStr))
{
if (dataRow[FieldName].ToString() != "")
{
JoinStr += (JoinStr == "" ? "" : SeparateStr) + dataRow[FieldName];
}
}
return JoinStr;
}
#endregion
//------------------以下是低代码平台的相关方法--------------------------//
#region 方法 -> 获取接口类对象名称 <- GetInterfaceClassName
///
/// 获取接口表相关类名称
///
/// 事务管理器
/// 接口加密内码
///
public static string GetInterfaceClassName(Transaction transaction, int InterfaceId)
{
string ClassName = "";
//根据接口内码查询接口对象
Model.INTERFACEModel interfaceModel = GeneralMethod.INTERFACEHelper.GetINTERFACEDetail(transaction, InterfaceId);
if (interfaceModel != null && interfaceModel.INTERFACE_ID != null)
{
ClassName = GetInterfaceClassName(interfaceModel.INTERFACE_TYPE.Value, interfaceModel.INTERFACE_ROUTE);
}
return ClassName;
}
///
/// 获取接口表相关类名称
///
/// 接口类型:0【标准接口】
/// 接口路由
///
public static string GetInterfaceClassName(int InterfaceType, string InterfaceRoute)
{
string ClassName = "";
//判断是不是标准接口,如果是标准接口,直接返回路由名称(里面存储的就是表的类名称)
if (InterfaceType == 0)
{
ClassName = InterfaceRoute;
}
else
{
//从接口路由中截取类名称,接口路由格式:/XX/GetXX,要取出Get之后的字段
if (InterfaceRoute.Split('/').Length > 0)
{
ClassName = InterfaceRoute.Split('/')[InterfaceRoute.Split('/').Length - 1];
}
}
return ClassName;
}
#endregion
#region 方法 -> 初始化列表【GridViewEx】内容
///
/// 初始化接口列表内容
///
/// 接口参数对象
public static void InitialInterfaceGridViewEx(DataTable dtInterfaceModel)
{
dtInterfaceModel.Columns.Add("ShowParams", typeof(int)); //是否是入参
dtInterfaceModel.Columns.Add("ParamsFormat", typeof(int)); //入参格式
dtInterfaceModel.Columns.Add("ParamsDefaultValue", typeof(string)); //入参默认值
dtInterfaceModel.Columns.Add("ColumnParamsIndex", typeof(int)); //入参顺序
dtInterfaceModel.Columns.Add("ColumnParamsRename", typeof(string)); //重命名入参名字
dtInterfaceModel.Columns.Add("ShowResponse", typeof(int)); //是否是返参
dtInterfaceModel.Columns.Add("ColumnResponseIndex", typeof(int)); //返参顺序
dtInterfaceModel.Columns.Add("ColumnResponseRename", typeof(string)); //重命名返参名字
dtInterfaceModel.Columns.Add("ModelDataType", typeof(int)); //数据类型:1【主表】,2【附表】,3【自定义字段】
dtInterfaceModel.Columns.Add("DateFormat", typeof(int)); //日期字段格式:1【日期】,2【月份】,3【年份】
dtInterfaceModel.Columns.Add("DataSummary", typeof(int)); //合计字段:1【是】,0【否】
dtInterfaceModel.Columns.Add("OrderByType", typeof(string)); //排序选项:1【正序】,2【倒序】
}
#region 方法 -> 初始化前端页面列表
///
/// 初始化前端页面列表
///
/// 接口返参列表字段数据源
/// 接口返参其他对象列表字段数据源
/// 编辑页列表字段数据源
/// 是否添加序号字段
public static void InitialIndexGridViewEx(DataTable dtInterfaceModel,
DataTable dtInterfaceOtherModel, DataTable dtEditModel = null, bool ContainIndex = true)
{
//补充返参数据列表字段
InitialIndexGridViewEx(dtInterfaceModel);
if (ContainIndex)
{
//列表页面布局增加“序号”的设置
DataRow drInterfaceModel = dtInterfaceModel.NewRow();
drInterfaceModel["INTERFACEMODEL_ID"] = 0;
drInterfaceModel["INTERFACEMODEL_NAME"] = "index";
drInterfaceModel["INTERFACEMODEL_COMMENT"] = "序号";
drInterfaceModel["INTERFACEMODEL_FORMAT"] = 1;
drInterfaceModel["INTERFACEMODEL_STATE"] = 1;
drInterfaceModel["MULTI_SEARCH"] = 0;
dtInterfaceModel.Rows.InsertAt(drInterfaceModel, 0);
}
//补充返参其他对象数据列表字段
if (dtInterfaceOtherModel != null)
{
InitialIndexGridViewEx(dtInterfaceOtherModel);
}
//补充编辑列表字段
if (dtEditModel != null)
{
InitialEditGridViewEx(dtEditModel);
}
}
///
/// 补充列表页面字段
///
/// 列表页字段数据源
public static void InitialIndexGridViewEx(DataTable _DataTable)
{
_DataTable.Columns.Add("ShowList", typeof(int)); //是否显示在列表上
_DataTable.Columns.Add("ShowDrawer", typeof(int)); //是否显示在抽屉中
_DataTable.Columns.Add("ColumnWidth", typeof(string)); //列表宽度
_DataTable.Columns.Add("ColumnIndex", typeof(int)); //显示顺序
_DataTable.Columns.Add("OrderByType", typeof(string)); //排序选项
_DataTable.Columns.Add("ContentAlign", typeof(string)); //单元格位置
_DataTable.Columns.Add("DefaultValue", typeof(string)); //默认值
_DataTable.Columns.Add("FieldExplainField", typeof(string)); //枚举字典
_DataTable.Columns.Add("ModelDataType", typeof(int)); //数据类型:1【主表】,2【附表】,3【自定义字段】
_DataTable.Columns.Add("DateFormat", typeof(int)); //日期字段格式:1【日期】,2【月份】,3【年份】
_DataTable.Columns.Add("DataSummary", typeof(int)); //合计字段:1【是】,0【否】
}
///
/// 补充编辑页字段
///
/// 编辑页面字段数据源
public static void InitialEditGridViewEx(DataTable _DataTable)
{
_DataTable.Columns.Add("ControlType", typeof(int)); //控件类型
_DataTable.Columns.Add("ShowColumn", typeof(int)); //是否显示详情中
_DataTable.Columns.Add("ColumnIndex", typeof(int)); //显示顺序
_DataTable.Columns.Add("Required", typeof(int)); //是否必填项
_DataTable.Columns.Add("DefaultValue", typeof(string)); //默认值
_DataTable.Columns.Add("FieldExplainField", typeof(string));//枚举字典
_DataTable.Columns.Add("CBEditable", typeof(int)); //是否编辑:1【是】,0【否】
}
#endregion
#region 方法 -> 初始化小程序详情页列表
///
/// 初始化小程序详情页列表
///
///
public static void InitialMinProGridViewEx(DataTable dtInterfaceModel)
{
dtInterfaceModel.Columns.Add("ShowList", typeof(int)); //是否显示在列表上
dtInterfaceModel.Columns.Add("ColumnIndex", typeof(int)); //显示顺序
dtInterfaceModel.Columns.Add("ContentAlign", typeof(string)); //单元格位置
dtInterfaceModel.Columns.Add("FieldExplainField", typeof(string)); //枚举字典
dtInterfaceModel.Columns.Add("ParamsField", typeof(string)); //详情页面对应的入参字段
}
#endregion
#endregion
#region 方法 -> 文本内容增加空格,数量由入参控制
///
/// 文本内容增加空格,数量由入参控制
///
/// 空格数量
///
public static string GetTabChar(int TabCount)
{
StringBuilder _TabChar = new StringBuilder();
int _Count = TabCount * 4;
for (int i = 0; i < _Count; i++)
{
_TabChar.Append(" ");
}
return _TabChar.ToString(); ;
}
#endregion
#region 方法 -> 增加代码注解
///
/// 增加代码注解
/// 在代码里面生成的中文释义
///
/// 字符串
/// 注解内容
/// 内容缩进格数
/// 方法中的参数注解,可以为空
public static void BuildCodeSummary(StringBuilder stringBuilder, string SummaryContent,
int StartIndex = 0, Dictionary parameters = null)
{
stringBuilder.AppendLine(GetTabChar(StartIndex) + "/// ");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "/// " + SummaryContent);
stringBuilder.AppendLine(GetTabChar(StartIndex) + "/// ");
if (parameters != null)
{
foreach (string key in parameters.Keys)
{
stringBuilder.AppendLine(GetTabChar(2) + "/// " + parameters[key] + "");
}
}
}
#endregion
#region 方法 -> 增加catch方法代码
///
/// 增加catch方法代码
///
/// 字符串
/// 失败命名:例如“查询”失败
/// 日志名称
/// 内容缩进格数
public static void BuildCatchCode(StringBuilder stringBuilder, string FailName, string LogName, int StartIndex = 0)
{
stringBuilder.AppendLine(GetTabChar(StartIndex) + "catch (Exception ex)");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "{");
stringBuilder.AppendLine(GetTabChar(StartIndex + 1) + "//事务回滚");
stringBuilder.AppendLine(GetTabChar(StartIndex + 1) + "transaction.Rollback();");
//记录异常日志
stringBuilder.AppendLine(GetTabChar(StartIndex + 1) + "LogUtil.WriteLog(null, " +
"\"" + FailName + "失败!失败原因:\" + ex.Message + \"\\r\\n\" + Parameter,");
stringBuilder.AppendLine(GetTabChar(StartIndex + 2) + "DateTime.Now.ToString(\"yyyyMMdd\") + \"_" + LogName + "\");");
stringBuilder.AppendLine(GetTabChar(StartIndex + 1) + "return Ok(Method.Common.ReturnJson(999, \"查询失败\" + ex.Message));");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "}");
}
#endregion
#region 方法 -> 获取命名空间简写
///
/// 获取命名空间简写
///
/// 命名空间全称
///
public static string GetNameSpaceShortName(string WholeNameSpace)
{
string ShortName = "";
foreach (string NameSpace in WholeNameSpace.Split('.'))
{
ShortName += NameSpace.Substring(0, 1);
}
return ShortName;
}
#endregion
#region 方法 -> 转换字符串大小写
///
/// 返回首字母大写、其余字符小写的字符串model对象
///
/// 字符串
/// 原字符串CLASS_NAME,返回Class_nameModel
public static string GetClassModelName(string className)
{
return className + "Model";
}
///
/// 返回首字母大写、其余字符小写的字符串
///
/// 字符串
/// 原字符串CLASS_NAME,返回Class_name
public static string GetULClassName(string className)
{
return className.Substring(0, 1).ToUpper() + className.Substring(1, className.Length - 1).ToLower();
}
///
/// 返回小写字符串,如果有_,则_后面的第一个字符大写
///
/// 字符串
/// 原字符串CLASS_NAME,返回class_Name
public static string GetLUName(string className)
{
string resName = className.Split('_')[0].ToLower();
//以_分割字符串,从第一个_之后的字符串开始遍历,每段字符串首字母大写其余字母小写
for (int SplitLength = 1; SplitLength < className.Split('_').Length; SplitLength++)
{
resName += GetULClassName(className.Split('_')[SplitLength]);
}
return resName;
}
///
/// 返回首字母小写的字符串
/// 如原字符串CLASS_NAME,返回cLASS_NAME
///
/// 字符串
///
public static string GetFLName(string name)
{
return name.Substring(0, 1).ToLower() + name.Substring(1, name.Length - 1);
}
#endregion
#region 方法 -> 设置时间参数默认值
///
/// 设置时间参数默认值
///
/// 字符串
/// 时间参数默认值
/// 时间参数格式
/// 是否是时间段选择
public static void SetDateInitialValue(StringBuilder stringBuilder, string DefaultDateValueType, string DateFormat, bool IsDateRange)
{
switch (DefaultDateValueType)
{
case "1": //默认显示最近一天
stringBuilder.AppendLine(GetTabChar(3) + "initialValue: " + (!IsDateRange ?
"moment().add(-1, 'day').format('" + DateFormat + "')" : "[moment().add(-1, 'day').format('" +
DateFormat + "'), moment().add(-1, 'day').format('" + DateFormat + "')],"));
break;
case "2": //默认显示最近一周
stringBuilder.AppendLine(GetTabChar(3) + "initialValue: " + (!IsDateRange ?
"moment().add(-1, 'week').format('" + DateFormat + "')" : "[moment().add(-1, 'week').format('" +
DateFormat + "'), moment().add(-1, 'day').format('" + DateFormat + "')],"));
break;
case "3": //默认显示最近一月
stringBuilder.AppendLine(GetTabChar(3) + "initialValue: " + (!IsDateRange ?
"moment().add(-1, 'month').format('" + DateFormat + "')" : "[moment().add(-1, 'month').format('" +
DateFormat + "'), moment().add(-1, 'day').format('" + DateFormat + "')],"));
break;
case "4": //默认显示最近三月
stringBuilder.AppendLine(GetTabChar(3) + "initialValue: " + (!IsDateRange ?
"moment().add(-3, 'month').format('" + DateFormat + "')" : "[moment().add(-3, 'month').format('" +
DateFormat + "'), moment().add(-1, 'day').format('" + DateFormat + "')],"));
break;
case "5": //默认显示最近半年
stringBuilder.AppendLine(GetTabChar(3) + "initialValue: " + (!IsDateRange ?
"moment().add(-6, 'month').format('" + DateFormat + "')" : "[moment().add(-6, 'month').format('" +
DateFormat + "'), moment().add(-1, 'day').format('" + DateFormat + "')],"));
break;
case "6": //默认显示最近一年
stringBuilder.AppendLine(GetTabChar(3) + "initialValue: " + (!IsDateRange ?
"moment().add(-1, 'year').format('" + DateFormat + "')" : "[moment().add(-1, 'year').format('" +
DateFormat + "'), moment().add(-1, 'day').format('" + DateFormat + "')],"));
break;
}
}
#endregion
#region 方法 -> 设置字段默认排序
///
/// 设置字段默认排序
///
/// 生成代码的字符串
/// 字段数据源
/// 代码缩进格数
public static void SetFieldSort(StringBuilder stringBuilder, DataRow dataRow, int StartIndex = 3)
{
string _INTERFACEMODEL_NAME = dataRow["INTERFACEMODEL_NAME"].ToString();
switch (dataRow["INTERFACEMODEL_FORMAT"].ToString())
{
case "1":
switch (dataRow["OrderByType"].ToString())
{
case "1":
stringBuilder.AppendLine(GetTabChar(StartIndex) + "(a, b) => a." +
_INTERFACEMODEL_NAME + " - b." + _INTERFACEMODEL_NAME + ",");
break;
case "2":
stringBuilder.AppendLine(GetTabChar(StartIndex) + "(a, b) => a." +
_INTERFACEMODEL_NAME + " - b." + _INTERFACEMODEL_NAME + ",");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "defaultSortOrder: 'ascend',");
break;
case "3":
stringBuilder.AppendLine(GetTabChar(StartIndex) + "(a, b) => a." +
_INTERFACEMODEL_NAME + " - b." + _INTERFACEMODEL_NAME + ",");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "defaultSortOrder: 'descend',");
break;
}
break;
default:
switch (dataRow["OrderByType"].ToString())
{
case "1":
stringBuilder.AppendLine(GetTabChar(StartIndex) + "(a, b) => a." +
_INTERFACEMODEL_NAME + ".localeCompare(b." + _INTERFACEMODEL_NAME + "),");
break;
case "2":
stringBuilder.AppendLine(GetTabChar(StartIndex) + "(a, b) => a." +
_INTERFACEMODEL_NAME + ".localeCompare(b." + _INTERFACEMODEL_NAME + "),");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "defaultSortOrder: 'ascend',");
break;
case "3":
stringBuilder.AppendLine(GetTabChar(StartIndex) + "(a, b) => a." +
_INTERFACEMODEL_NAME + ".localeCompare(b." + _INTERFACEMODEL_NAME + "),");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "defaultSortOrder: 'descend',");
break;
}
break;
}
}
///
/// 设置字段默认排序
///
/// 生成代码的字符串
/// 排序方式
/// 代码缩进格数
public static void SetFieldSort(StringBuilder stringBuilder, string OrderByType, int StartIndex = 3)
{
switch (OrderByType)
{
case "1"://增加排序效果,但不设置默认排序
stringBuilder.AppendLine(GetTabChar(StartIndex) + "sorter: true,");
break;
case "2"://增加排序效果,默认按正序显示
stringBuilder.AppendLine(GetTabChar(StartIndex) + "sorter: true,");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "defaultSortOrder: 'ascend',");
break;
case "3"://增加排序效果,默认按倒序显示
stringBuilder.AppendLine(GetTabChar(StartIndex) + "sorter: true,");
stringBuilder.AppendLine(GetTabChar(StartIndex) + "defaultSortOrder: 'descend',");
break;
}
}
#endregion
#region 方法 -> 保存文件至指定路径
///
/// 保存本地文件
///
/// 文件绝对路径
/// 文件内容
public static void SaveFile(string fileName, string fileText)
{
while (File.Exists(fileName))
{
File.Delete(fileName);
}
if (fileName.ToLower().EndsWith(".bat"))
{
File.WriteAllText(fileName, fileText, Encoding.ASCII);
}
else
{
File.WriteAllText(fileName, fileText, new UTF8Encoding(false));
}
}
///
/// 保存文件至指定服务器
///
/// 文件路径
/// 文件名称
/// 文件内容
/// 保存结果
/// 传输地址
public static bool SaveFile(string fileDir, string fileName, string fileText,
ref string resMsg, string postUrl = "http://10.104.1.8:8010/publish/FileUpload.ashx")
{
if (string.IsNullOrWhiteSpace(postUrl))
{
//目标路径文件夹不存在,则先新建文件夹
if (!Directory.Exists(fileDir))
{
Directory.CreateDirectory(fileDir);
}
SaveFile(fileDir + "\\" + fileName, fileText);
return true;
}
else
{
string fileType = "text/plain";
byte[] data = Encoding.UTF8.GetBytes(fileText);
string fileSize = data.Length.ToString();
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(postUrl);
myRequest.Method = "POST";
myRequest.ContentType = fileType;
myRequest.ContentLength = data.Length;
myRequest.Headers.Add("FileName", HttpContext.Current.Server.UrlEncode(fileName));
myRequest.Headers.Add("FileDir", HttpContext.Current.Server.UrlEncode(fileDir));
myRequest.Headers.Add("FileType", HttpContext.Current.Server.UrlEncode(fileType));
myRequest.Headers.Add("FileSize", fileSize);
using (Stream newStream = myRequest.GetRequestStream())
{
newStream.Write(data, 0, data.Length);
newStream.Close();
}
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string res = reader.ReadToEnd();
LogUtil.WriteLog(null, res, DateTime.Now.ToString("yyyyMMdd") + "_SaveFile");
JObject keyValuePairs = JObject.Parse(res);
resMsg = keyValuePairs["Result_Desc"].ToString();
return keyValuePairs["Result_Code"].TryParseToInt() == 100;
}
}
#endregion
#region 方法 -> 复制文件夹
///
/// 复制文件夹
///
/// 原文件夹路径
/// 目标文件夹路径
/// 是否覆盖目标文件
public static void CopyFilesAndDirs(string srcDir, string destDir, bool CoverFile)
{
string newPath;
FileInfo fileInfo;
if (!Directory.Exists(destDir))
{
//若目标文件夹不存在,则创建目标文件夹
Directory.CreateDirectory(destDir);
}
//获取源文件夹中的所有文件完整路径
string[] files = Directory.GetFiles(srcDir);
//遍历文件
foreach (string path in files)
{
fileInfo = new FileInfo(path);
newPath = destDir + fileInfo.Name;
File.Copy(path, newPath, CoverFile);
}
//遍历子文件夹
string[] dirs = Directory.GetDirectories(srcDir);
foreach (string path in dirs)
{
DirectoryInfo directory = new DirectoryInfo(path);
string newDir = destDir + directory.Name;
CopyFilesAndDirs(path + "\\", newDir + "\\", CoverFile);
}
}
#endregion
#region 方法 -> 删除指定路径的文件
///
/// 删除本地文件
///
/// 文件绝对路径
public static void DeleteFile(string fileName)
{
while (File.Exists(fileName))
{
File.Delete(fileName);
}
}
///
/// 删除指定服务器下的文件
///
/// 文件路径
/// 文件名称
/// 文件内容
/// 删除结果
/// 传输地址
public static bool DeleteFile(string fileDir, string fileName, string fileText,
ref string resMsg, string postUrl = "http://10.104.1.8:8010/publish/FileUpload.ashx")
{
if (string.IsNullOrWhiteSpace(postUrl))
{
DeleteFile(fileDir + "\\" + fileName);
return true;
}
else
{
string fileType = "text/plain";
byte[] data = Encoding.UTF8.GetBytes(fileText);
string fileSize = data.Length.ToString();
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(postUrl);
myRequest.Method = "POST";
myRequest.ContentType = fileType;
myRequest.ContentLength = data.Length;
myRequest.Headers.Add("FileName", HttpContext.Current.Server.UrlEncode(fileName));
myRequest.Headers.Add("FileDir", HttpContext.Current.Server.UrlEncode(fileDir));
myRequest.Headers.Add("FileType", HttpContext.Current.Server.UrlEncode(fileType));
myRequest.Headers.Add("FileSize", fileSize);
myRequest.Headers.Add("FileDelete", "1");//请求头删除的标识
using (Stream newStream = myRequest.GetRequestStream())
{
newStream.Write(data, 0, data.Length);
newStream.Close();
}
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string res = reader.ReadToEnd();
LogUtil.WriteLog(null, res, DateTime.Now.ToString("yyyyMMdd") + "_DeleteFile");
JObject keyValuePairs = JObject.Parse(res);
resMsg = keyValuePairs["Result_Desc"].ToString();
return keyValuePairs["Result_Code"].TryParseToInt() == 100;
}
}
#endregion
#region 方法 -> 移动文件夹/文件
///
/// 移动文件夹/文件
///
/// 原文件的名称
/// 目标路径的名称
/// 要移动文件所在目录的绝对路径。
/// 目标路径所在目录的绝对路径
/// 覆盖文件(1:覆盖 0:不覆盖)
/// 移动结果
/// 传输地址
public static bool MoveDirectory(string fileDir, string fileName, string destDir, string destFileName,
string coverDir, ref string resMsg, string postUrl)
{
//传输地址为空则移动本地文件
if (string.IsNullOrEmpty(postUrl))
{
return MoveDirectory(fileDir, fileName, destDir, destFileName, coverDir, ref resMsg);
}
else
{
string fileType = "text/plain";
byte[] data = Encoding.UTF8.GetBytes("");
string fileSize = data.Length.ToString();
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(postUrl);
myRequest.Method = "POST";
myRequest.ContentType = fileType;
myRequest.ContentLength = data.Length;
myRequest.Headers.Add("FileName", HttpContext.Current.Server.UrlEncode(fileName));
myRequest.Headers.Add("DestFileName", HttpContext.Current.Server.UrlEncode(destFileName));
myRequest.Headers.Add("FileDir", HttpContext.Current.Server.UrlEncode(fileDir));
myRequest.Headers.Add("FileType", HttpContext.Current.Server.UrlEncode(fileType));
myRequest.Headers.Add("FileSize", fileSize);
myRequest.Headers.Add("DestDir", HttpContext.Current.Server.UrlEncode(destDir));//
myRequest.Headers.Add("DirMove", "1");//移动文件
myRequest.Headers.Add("coverDir", coverDir);//是否覆盖文件
using (Stream newStream = myRequest.GetRequestStream())
{
newStream.Write(data, 0, data.Length);
newStream.Close();
}
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string res = reader.ReadToEnd();
LogUtil.WriteLog(null, res, DateTime.Now.ToString("yyyyMMdd") + "_MoveDirectory");
JObject keyValuePairs = JObject.Parse(res);
resMsg = keyValuePairs["Result_Desc"].ToString();
return keyValuePairs["Result_Code"].TryParseToInt() == 100;
}
}
///
/// 移动本地文件
///
/// 原文件的名称
/// 目标路径的名称
/// 要移动文件所在目录的绝对路径。
/// 目标路径所在目录的绝对路径
/// 覆盖文件(1:覆盖 0:不覆盖)
/// 移动结果
///
public static bool MoveDirectory(string fileDir, string fileName,
string destDir, string destFileName, string coverDir, ref string resMsg)
{
string destFileAbsUrl = destDir + "\\" + (string.IsNullOrWhiteSpace(destFileName) ? fileName : destFileName);
//文件是否存在
if ((!string.IsNullOrWhiteSpace(fileName) && File.Exists(destFileAbsUrl)) || Directory.Exists(destDir))
{
//覆盖文件
if (coverDir.TryParseToInt() == 1)
{
//目标路径文件夹不存在,则先新建文件夹
if (!Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}
if (!string.IsNullOrWhiteSpace(fileName))//移动文件
{
//目标路径已存在文件,则先删除文件,然后再迁移
if (File.Exists(destFileAbsUrl))
{
File.Delete(destFileAbsUrl);
}
File.Move(fileDir + "\\" + fileName, destFileAbsUrl);
LogUtil.WriteLog(null, "移动文件:" + fileDir + "\\" + fileName + "至" + destFileAbsUrl,
DateTime.Now.ToString("yyyyMMdd") + "_MoveDirectory");
return true;
}
foreach (FileInfo fileInfo in new DirectoryInfo(fileDir).GetFiles())
{
//目标路径已存在文件,则先删除文件,然后再迁移
if (File.Exists(destDir + "\\" + fileInfo.Name))
{
File.Delete(destDir + "\\" + fileInfo.Name);
}
File.Move(fileInfo.FullName, destDir + "\\" + fileInfo.Name);
LogUtil.WriteLog(null, "移动文件:" + fileDir + "\\" + fileName + "至" + destFileAbsUrl,
DateTime.Now.ToString("yyyyMMdd") + "_MoveDirectory");
}
return true;
}
else
{
if (!string.IsNullOrWhiteSpace(fileName))
{
if (File.Exists(destFileAbsUrl))
{
resMsg = "目标路径已存在相同文件,请确认是否覆盖!";
return false;
}
else
{
File.Move(fileDir + "\\" + fileName, destFileAbsUrl);
return true;
}
}
resMsg = "目标路径已存在相同文件,请确认是否覆盖!";
return false;
}
}
else
{
//如果移动的是文件,则直接迁移过去
if (!string.IsNullOrEmpty(fileName))
{
//目标路径文件夹不存在,则先新建文件夹
if (!Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}
File.Move(fileDir + "\\" + fileName, destFileAbsUrl);
}
else
{
//把新文件移动到目标目录下
Directory.Move(fileDir, destDir);
}
return true;
}
}
//public static bool MoveDirectory(string fileDir, string fileName,
// string destDir, string destFileName, string coverDir, ref string resMsg)
//{
//}
#endregion
#region 方法 -> 执行重新生成解决方案
///
/// 执行重新生成解决方案
///
/// msbuild路径
/// 解决方案路径
/// 接口名称
public static void Rebuildsln(string msbuildPath, string slnPath, string InterfaceName)
{
Rebuildsln(msbuildPath, slnPath, "Debug", InterfaceName);
}
///
/// 执行重新生成解决方案
///
/// msbuild路径
/// 解决方案路径
/// 编译方式:Debug/Release
/// 接口名称
public static void Rebuildsln(string msbuildPath, string slnPath, string BuildType, string InterfaceName)
{
//Task task = Task.Factory.StartNew(() =>
//{
//以Debug方式编译解决方案文件
ProcessStartInfo info = new ProcessStartInfo(@msbuildPath, @slnPath + " /t:rebuild /p:configuration=" + BuildType);
//将控制台输出重定向至StandardOutput,如果为false,就无法得到控制台输出结果
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.UseShellExecute = false;
info.CreateNoWindow = true;
Process p = Process.Start(info);
//控制台输出结果
if (string.IsNullOrWhiteSpace(InterfaceName))
{
InterfaceName = DateTime.Now.ToString("yyyyMMddHHmmss") + "_slnDebug";
}
LogUtil.WriteLog(null, p.StandardOutput.ReadToEnd().Replace("\n", "
"), InterfaceName,
Config.AppSettings.CodeBuilderLogAbsUrl);
//记录异常日志
string ErrorLog = p.StandardError.ReadToEnd().Replace("\n", "
");
if (!string.IsNullOrWhiteSpace(ErrorLog))
{
LogUtil.WriteLog(null, ErrorLog, InterfaceName + "Error");
}
p.WaitForExit();
p.Close();
//});
}
///
/// 运行批处理
///
/// 批处理文件路径
public static void RunBat(string batPath)
{
Task task = Task.Factory.StartNew(() =>
{
using (Process process = new Process())
{
FileInfo file = new FileInfo(@batPath);
if (file.Directory != null)
{
process.StartInfo.WorkingDirectory = file.Directory.FullName;
}
process.StartInfo.FileName = @batPath;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
//控制台输出结果
LogUtil.WriteLog(null, process.StandardOutput.ReadToEnd().Replace("\n", "
"),
DateTime.Now.ToString("yyyyMMddHHmmss") + "_RunBat");
//记录异常日志
string ErrorLog = process.StandardError.ReadToEnd().Replace("\n", "
");
if (!string.IsNullOrWhiteSpace(ErrorLog))
{
LogUtil.WriteLog(null, ErrorLog, DateTime.Now.ToString("yyyyMMddHHmmss") + "_RunBatError");
}
process.WaitForExit();
process.Close();
}
});
}
#endregion
#region 方法 -> 获取文件夹下文件的内容
///
/// 获取文件夹内文件内容
///
///
///
public static List GetFileContent(string fliePath)
{
List fileList = new List();
string path = Config.AppSettings.SolutionPath + "\\" + fliePath;
//拿到当前路径下所有文件
string[] files = Directory.GetFiles(path);
foreach (string filePath in files)
{
Model.FilesReturnModel file = new Model.FilesReturnModel();
string[] oldFile = filePath.Split('\\');
file.fileName = oldFile[oldFile.Length - 1];//文件名
file.fileText = File.ReadAllText(filePath, Encoding.UTF8);//文件内容
fileList.Add(file);
}
return fileList;
}
#endregion
#region 方法 -> 重新发布前端页面文件
///
/// 重新发布前端页面文件
///
///
///
public static bool RepublishFiles(Model.FilesParamsModel FileList)
{
bool result = false;
foreach (Model.FilesReturnModel file in FileList.files)
{
//保存文件
string path = Config.AppSettings.SolutionPath + "\\" + FileList.filepath + "\\" + file.fileName;
if (File.Exists(path))
{
DeleteFile(path);
SaveFile(path, file.fileText);
}
else
{
SaveFile(path, file.fileText);
}
result = true;
}
return result;
}
#endregion
#region 方法 -> 根据所在数据库,获取执行SQL语句需要实例化的对象
///
/// 根据所在数据库,获取执行SQL语句需要实例化的对象
///
/// 命名空间
///
public static string GetExcuteClassName(string OwnerNameSpace)
{
string ExcuteClassName = "";
switch (OwnerNameSpace)
{
//合同管理相关数据库
case "SuperMap.RealEstate.Contract.History.Business":
case "SuperMap.RealEstate.Contract.Running.Business":
case "SuperMap.RealEstate.Contract.Storage.Business":
ExcuteClassName = "BUSINESSPROJECT";
break;
//合作商户管理相关数据库
case "SuperMap.RealEstate.Coop.Merchant.Business":
ExcuteClassName = "OWNERUNIT";
break;
//交互数据库
case "SuperMap.RealEstate.ExchangeData.Business":
ExcuteClassName = "ABNORMALITY";
break;
//商业经营基础业务库
case "SuperMap.RealEstate.HighWay.History.Business":
case "SuperMap.RealEstate.HighWay.Running.Business":
case "SuperMap.RealEstate.HighWay.Storage.Business":
ExcuteClassName = "HIGHWAYPROINST";
break;
//商业经营营收数据库
case "SuperMap.RealEstate.HighWay.SellData.Business":
ExcuteClassName = "ENDACCOUNT";
break;
//综合办公相关数据库
case "SuperMap.RealEstate.Finance.History.Business":
case "SuperMap.RealEstate.Finance.Running.Business":
case "SuperMap.RealEstate.Finance.Storage.Business":
ExcuteClassName = "FINANCEPROINST";
break;
//服务区成本管控相关数据库
case "SuperMap.RealEstate.SendRec.History.Business":
case "SuperMap.RealEstate.SendRec.Storage.Business":
ExcuteClassName = "SENDRECPROINST";
break;
//进销存调相关数据库
case "SuperMap.RealEstate.SaleStore.History.Business":
case "SuperMap.RealEstate.SaleStore.Running.Business":
case "SuperMap.RealEstate.SaleStore.Storage.Business":
ExcuteClassName = "SALESTOREPROINST";
break;
//总仓统一配送相关数据库
case "SuperMap.RealEstate.Seller.History.Business":
case "SuperMap.RealEstate.Seller.Running.Business":
case "SuperMap.RealEstate.Seller.Storage.Business":
ExcuteClassName = "SELLERPROINST";
break;
//人力资源相关数据库
case "SuperMap.RealEstate.Personnel.History.Business":
case "SuperMap.RealEstate.Personnel.Storage.Business":
ExcuteClassName = "STAFF";
break;
//综管平台框架库
case "SuperMap.RealEstate.FrameWork.Platform.Business":
ExcuteClassName = "PERMISSIONAPPLY";
break;
//移动业务相关数据库
case "SuperMap.RealEstate.MobileServicePlatform.Business":
ExcuteClassName = "APPMANAGE";
break;
//促销、内部会员相关数据库
case "SuperMap.RealEstate.MemberShip.History.Business":
case "SuperMap.RealEstate.MemberShip.Storage.Business":
ExcuteClassName = "MEMBERSHIP";
break;
//内部会员相关业务运行库
case "SuperMap.RealEstate.MemberShip.Running.Business":
ExcuteClassName = "MEMBERPROINST";
break;
//商业经营仪表盘
case "SuperMap.RealEstate.PlatForm.Dashboard.Business":
ExcuteClassName = "CATERINGGROSSMARGIN";
break;
//测试数据库
case "SuperMap.RealEstate.FrameWork.Test.Business":
ExcuteClassName = "TEST";
break;
}
return ExcuteClassName;
}
#endregion
#region 方法 -> 根据字段的数据类型,获取Datatable中字段对应的属性
///
/// 根据字段的数据类型,获取Datatable中字段对应的属性
///
/// 字段名称
/// 字段所在数据源
///
public static string GetFieldTypeName(string FieldName, DataTable dtModel)
{
string TypeName = "";
if (dtModel.Select("INTERFACEMODEL_NAME = '" + FieldName + "'").Length > 0)
{
DataRow drModel = dtModel.Select("INTERFACEMODEL_NAME = '" + FieldName + "'")[0];
switch (drModel["INTERFACEMODEL_FORMAT"].ToString())
{
//合同管理相关数据库
case "1":
TypeName = "decimal?";
break;
case "2":
TypeName = "DateTime?";
break;
case "3":
TypeName = "bool?";
break;
default:
TypeName = "string";
break;
}
}
return TypeName;
}
#endregion
}
}