418 lines
16 KiB
C#
418 lines
16 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using HCC = HZQR.Common.Common;
|
||
|
||
namespace DataTransmission.Method
|
||
{
|
||
public static class CommonHelper
|
||
{
|
||
#region 方法 -> 存储数字型数据至oracle数据库
|
||
public static string GetNumberIntoOra(this object OriValue)
|
||
{
|
||
if (OriValue == null)
|
||
{
|
||
return "NULL";
|
||
}
|
||
else
|
||
{
|
||
return GetNumberIntoOra(OriValue.ToString());
|
||
}
|
||
}
|
||
|
||
public static string GetNumberIntoOra(this string OriValue)
|
||
{
|
||
if (string.IsNullOrWhiteSpace(OriValue))
|
||
{
|
||
return "NULL";
|
||
}
|
||
else
|
||
{
|
||
return OriValue;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 方法 -> 存储日期格式型数据至oracle数据库
|
||
public static string GetDateTimeIntoOra(string OriValue)
|
||
{
|
||
string SQLValue = "";
|
||
|
||
if (string.IsNullOrWhiteSpace(OriValue))
|
||
{
|
||
SQLValue = "NULL";
|
||
}
|
||
else
|
||
{
|
||
SQLValue = "TO_DATE('" + OriValue + "', 'YYYY/MM/DD HH24:MI:SS')";
|
||
}
|
||
|
||
return SQLValue;
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 获取当月的第一天
|
||
/// <summary>
|
||
/// 获取当月的第一天
|
||
/// </summary>
|
||
/// <param name="Month">月份,格式yyyyMM</param>
|
||
/// <returns>返回结果:日期字符串,格式yyyy-MM-dd</returns>
|
||
public static string GetFirstDayOfMonth(string Month)
|
||
{
|
||
return Month.Substring(0, 4) + "-" + Month.Substring(4, 2) + "-01";
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 获取当月的最后一天
|
||
/// <summary>
|
||
/// 获取当月的最后一天
|
||
/// </summary>
|
||
/// <param name="Month">月份,格式yyyyMM</param>
|
||
/// <param name="ContainToday">最后一天是否包含今天,如果是则返回今天,否则返回昨天</param>
|
||
/// <returns>返回结果:日期字符串,格式yyyy-MM-dd</returns>
|
||
public static string GetLastDayOfMonth(string Month, bool ContainToday = true)
|
||
{
|
||
//获取当月的第一天
|
||
string FirstDay = GetFirstDayOfMonth(Month);
|
||
//当月最后一天=当月第一天+1个月-1天
|
||
DateTime LastDay = DateTime.Parse(FirstDay).AddMonths(1).AddDays(-1);
|
||
//如果最后一天比今天大,则按今天的日期返回,否则返回最后一天的日期
|
||
if (LastDay >= DateTime.Now.Date)
|
||
{
|
||
if (ContainToday)
|
||
{
|
||
return DateTime.Now.ToString("yyyy-MM-dd");
|
||
}
|
||
else
|
||
{
|
||
return DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
return LastDay.ToString("yyyy-MM-dd");
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 获取上一个月
|
||
/// <summary>
|
||
/// 获取上一个月
|
||
/// </summary>
|
||
/// <param name="Month">月份,格式yyyyMM</param>
|
||
/// <returns>返回结果:日期字符串,格式yyyyMM</returns>
|
||
public static string GetLastMonth(string Month)
|
||
{
|
||
if (Month.EndsWith("01"))
|
||
{
|
||
return (int.Parse(Month.Substring(0, 4)) - 1) + "12";
|
||
}
|
||
|
||
return Month.Substring(0, 4) + (int.Parse(Month.Substring(4, 2)) - 1).ToString("00");
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 解析枚举字典数据
|
||
/// <summary>
|
||
/// 解析枚举字典数据
|
||
/// </summary>
|
||
/// <param name="oracleHelper">数据字典数据库链接</param>
|
||
/// <param name="FieldName">枚举字段名称</param>
|
||
/// <param name="FieldValue">枚举值(多个用,隔开)</param>
|
||
/// <returns></returns>
|
||
public static string GetFieldEnumName(OracleHelper oracleHelper, string FieldName, string FieldValue)
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(FieldValue))
|
||
{
|
||
//从数据字典表查询枚举信息,将查询结果拼接到一起返回
|
||
//枚举字段表【PLATFORM_DICTIONARY.T_FIELDEXPLAIN】、字段枚举表【PLATFORM_DICTIONARY.T_FIELDENUM】
|
||
string SQLString = string.Format(@"SELECT
|
||
B.FIELDENUM_NAME
|
||
FROM
|
||
PLATFORM_DICTIONARY.T_FIELDEXPLAIN A,
|
||
PLATFORM_DICTIONARY.T_FIELDENUM B
|
||
WHERE
|
||
A.FIELDEXPLAIN_ID = B.FIELDEXPLAIN_ID AND
|
||
A.FIELDEXPLAIN_FIELD = '{0}' AND
|
||
B.FIELDENUM_VALUE IN ('{1}')", FieldName, FieldValue.Replace(",", "','"));
|
||
DataTable dtFieldEnum = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
if (dtFieldEnum.Rows.Count > 0)
|
||
{
|
||
return EShang.Common.CommonHelper.JoinStrFromDataTable(dtFieldEnum, "FIELDENUM_NAME");
|
||
}
|
||
}
|
||
|
||
return FieldValue;
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 合并Datatable中某个字符串的值
|
||
/// <summary>
|
||
/// 合并Datatable中某个字符串的值,返回list
|
||
/// </summary>
|
||
/// <param name="dataTable">数据源</param>
|
||
/// <param name="FieldName">字段名称</param>
|
||
/// <param name="SortStr">排序字段</param>
|
||
/// <returns></returns>
|
||
public static List<string> JoinListFromDataTable(DataTable dataTable, string FieldName, string SortStr = "")
|
||
{
|
||
List<string> JoinStr = new List<string>();
|
||
|
||
foreach (DataRow dataRow in dataTable.DefaultView.ToTable(true, FieldName).Select("", SortStr))
|
||
{
|
||
if (dataRow[FieldName].ToString() != "")
|
||
{
|
||
JoinStr.Add(dataRow[FieldName].ToString());
|
||
}
|
||
}
|
||
|
||
return JoinStr;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 合并Datatable中某个字符串的值,返回string
|
||
/// </summary>
|
||
/// <param name="dataTable">数据源</param>
|
||
/// <param name="FieldName">字段名称</param>
|
||
/// <param name="SeparateStr">分隔符,默认为,</param>
|
||
/// <param name="SortStr">排序字段</param>
|
||
/// <returns></returns>
|
||
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 方法 -> 判断当前日期是否为假日
|
||
/// <summary>
|
||
/// 判断当前日期是否为假日
|
||
/// </summary>
|
||
/// <param name="oracleHelper"></param>
|
||
/// <param name="HolidayType">
|
||
/// 节日类型:<br/>
|
||
/// 1【元旦】<br/>2【春运】<br/>3【清明】<br/>4【五一】<br/>5【端午】<br/>6【暑期】<br/>7【中秋】<br/>8【国庆】
|
||
/// </param>
|
||
/// <param name="StatisticsDate">统计日期,格式yyyyMMdd</param>
|
||
/// <returns></returns>
|
||
public static bool IsHoliday(OracleHelper oracleHelper, int HolidayType,
|
||
string StatisticsDate, DataTable dtHoliday = null)
|
||
{
|
||
if (dtHoliday == null)
|
||
{
|
||
dtHoliday = GetHolidayData(oracleHelper, HolidayType.ToString());
|
||
}
|
||
return dtHoliday.Select("HOLIDAY_DATE = " + StatisticsDate).Length > 0;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断当前日期是否为假日
|
||
/// </summary>
|
||
/// <param name="oracleHelper"></param>
|
||
/// <param name="StatisticsDate">统计日期,格式yyyyMMdd</param>
|
||
/// <returns></returns>
|
||
public static int? GetHolidayType(OracleHelper oracleHelper, string StatisticsDate, DataTable dtHoliday = null)
|
||
{
|
||
//判断当前月份是不是暑期
|
||
int curMonth = int.Parse(StatisticsDate.Substring(4, 2));
|
||
if (curMonth >= 7 && curMonth <= 8) return 6;
|
||
|
||
if (dtHoliday == null)
|
||
{
|
||
dtHoliday = GetHolidayData(oracleHelper);
|
||
}
|
||
if (dtHoliday.Select("HOLIDAY_DATE = " + StatisticsDate).Length > 0)
|
||
{
|
||
DataRow drHoliday = dtHoliday.Select("HOLIDAY_DATE = " + StatisticsDate)[0];
|
||
GetHolidayType(drHoliday["HOLIDAY_NAME"].ToString());
|
||
//switch (drHoliday["HOLIDAY_NAME"].ToString())
|
||
//{
|
||
// case "元旦":
|
||
// return 1;
|
||
// case "春运":
|
||
// return 2;
|
||
// case "清明节":
|
||
// return 3;
|
||
// case "劳动节":
|
||
// return 4;
|
||
// case "端午节":
|
||
// return 5;
|
||
// case "暑期":
|
||
// return 6;
|
||
// case "中秋节":
|
||
// return 7;
|
||
// case "国庆节":
|
||
// return 8;
|
||
//}
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
public static int GetHolidayType(string HOLIDAY_NAME)
|
||
{
|
||
switch (HOLIDAY_NAME)
|
||
{
|
||
case "元旦":
|
||
return 1;
|
||
case "春运":
|
||
return 2;
|
||
case "清明节":
|
||
return 3;
|
||
case "劳动节":
|
||
return 4;
|
||
case "端午节":
|
||
return 5;
|
||
case "暑期":
|
||
return 6;
|
||
case "中秋节":
|
||
return 7;
|
||
case "国庆节":
|
||
return 8;
|
||
default:
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
public static DataTable GetHolidayData(OracleHelper oracleHelper, string HolidayType = "")
|
||
{
|
||
string SQLString = @"SELECT
|
||
HOLIDAY_NAME,HOLIDAY_DESC,
|
||
TO_CHAR(HOLIDAY_DATE,'YYYYMMDD') AS HOLIDAY_DATE
|
||
FROM WORKFLOW_SUPPORT.T_HOLIDAY";
|
||
DataTable dtHoliday = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
if (!string.IsNullOrWhiteSpace(HolidayType))
|
||
{
|
||
string actHolidayType = "";
|
||
foreach (string typeNum in HolidayType.Split(','))
|
||
{
|
||
switch (typeNum)
|
||
{
|
||
case "1":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "元旦";
|
||
break;
|
||
case "2":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "春运";
|
||
break;
|
||
case "3":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "清明节";
|
||
break;
|
||
case "4":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "劳动节";
|
||
break;
|
||
case "5":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "端午节";
|
||
break;
|
||
case "6":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "暑期";
|
||
break;
|
||
case "7":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "中秋节";
|
||
break;
|
||
case "8":
|
||
actHolidayType += (actHolidayType == "" ? "" : "','") + "国庆节";
|
||
break;
|
||
}
|
||
}
|
||
if (actHolidayType != "")
|
||
{
|
||
dtHoliday.DefaultView.RowFilter = "HOLIDAY_NAME in ('" + actHolidayType + "')";
|
||
dtHoliday = dtHoliday.DefaultView.ToTable();
|
||
}
|
||
else
|
||
{
|
||
return dtHoliday.Clone();
|
||
}
|
||
}
|
||
|
||
return dtHoliday;
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 根据开始结束时间计算月数
|
||
/// <summary>
|
||
/// 根据开始结束时间计算月数
|
||
/// </summary>
|
||
/// <param name="StartDate">开始日期</param>
|
||
/// <param name="EndDate">结束日期</param>
|
||
/// <returns></returns>
|
||
public static decimal calcMonthCount(DateTime StartDate, DateTime EndDate)
|
||
{
|
||
//计算第一个月的月数,1-10计算为1个月,11-20计算为0.5个月,20之后不计算
|
||
decimal startCount = StartDate.Day < 11 ? 1 : StartDate.Day < 21 ? (decimal)0.5 : 0;
|
||
startCount -= EndDate.Day < 11 ? 1 : EndDate.Day < 21 ? (decimal)0.5 : 0;
|
||
|
||
return (EndDate.Year - StartDate.Year) * 12 + EndDate.Month - StartDate.Month + startCount;
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 获取门店开始营业日期
|
||
/// <summary>
|
||
/// 获取门店开始营业日期
|
||
/// </summary>
|
||
/// <param name="transaction"></param>
|
||
/// <param name="ServerpartIds">服务区内码集合</param>
|
||
/// <param name="ServerpartShopIds">门店内码集合</param>
|
||
/// <returns></returns>
|
||
public static Model.CommonModel GetBusinessStartDate(OracleHelper oracleHelper,
|
||
string ServerpartIds, string ServerpartShopIds)
|
||
{
|
||
Model.CommonModel commonModel = new Model.CommonModel();
|
||
|
||
string SQLString, whereSQL = "", selectedSQL = "";
|
||
|
||
//查询服务区内码
|
||
if (!string.IsNullOrWhiteSpace(ServerpartIds))
|
||
{
|
||
whereSQL += " AND A.SERVERPART_ID IN (" + ServerpartIds + ")";
|
||
}
|
||
//查询门店内码
|
||
if (!string.IsNullOrWhiteSpace(ServerpartShopIds))
|
||
{
|
||
whereSQL += string.Format(@" AND EXISTS (SELECT 1 FROM HIGHWAY_STORAGE.T_SERVERPARTSHOP B
|
||
WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPTRADE = B.SHOPTRADE AND
|
||
B.SERVERPARTSHOP_ID IN ({0}))", ServerpartShopIds);
|
||
|
||
foreach (string shopId in ServerpartShopIds.Split(','))
|
||
{
|
||
selectedSQL += (selectedSQL == "" ? "" : " or ") + "SERVERPARTSHOP_ID like '%," + shopId + ",%'";
|
||
}
|
||
}
|
||
SQLString = string.Format(@"SELECT
|
||
MIN(STATISTICS_DATE) AS START_DATE,
|
||
MAX(STATISTICS_DATE) AS END_DATE,
|
||
',' || A.SERVERPARTSHOP_ID || ',' AS SERVERPARTSHOP_ID
|
||
FROM
|
||
PLATFORM_DASHBOARD.T_REVENUEDAILY A
|
||
WHERE
|
||
REVENUEDAILY_STATE = 1 AND STATISTICS_DATE <= {1}{0}
|
||
GROUP BY
|
||
A.SERVERPARTSHOP_ID", whereSQL, DateTime.Now.ToString("yyyyMMdd"));
|
||
DataTable dtEndaccountDate = oracleHelper.ExcuteSqlGetDataTable(SQLString);
|
||
if (dtEndaccountDate.Rows.Count > 0 && dtEndaccountDate.Select(selectedSQL).Length > 0)
|
||
{
|
||
commonModel.label = HCC.Common.TranslateDateTime(dtEndaccountDate.Compute(
|
||
"min(START_DATE)", selectedSQL).ToString()).Split(' ')[0];
|
||
commonModel.value = HCC.Common.TranslateDateTime(dtEndaccountDate.Compute(
|
||
"max(END_DATE)", selectedSQL).ToString()).Split(' ')[0];
|
||
}
|
||
|
||
return commonModel;
|
||
}
|
||
#endregion
|
||
}
|
||
}
|