using HZQR.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MSPB = SuperMap.RealEstate.MobileServicePlatform.Business;
using CMB = SuperMap.RealEstate.Coop.Merchant.Business;
using SuperMap.RealEstate.ServiceModel;
using HWSB = SuperMap.RealEstate.HighWay.Storage.Business;
using Model = EShang.Common.Model;
using RedisHelp;
using System.Data;
using System.Configuration;
using System.Web;
using Newtonsoft.Json.Linq;
using System.IO;
namespace EShang.Common
{
///
/// 基本信息(小程序信息、业主单位信息、图库等)
///
public class Base
{
///
/// 合作商户平台Url,用于上传的图片线上url用
///
protected static string _CoopMerchantUrl = ConfigurationManager.AppSettings["CoopMerchantUrls"].ToString();
///
/// EShangPlatformApi站点Url
///
protected static string _EShangPlatformApiUrls = ConfigurationManager.AppSettings["EShangPlatformApiUrls"];
#region 方法 -> 获取业主单位信息
///
/// 获取业主单位信息
///
///
///
///
public static Model.OwnerUnit GetOwnerUnitInfo(Transaction transaction, int ownerUnitId)
{
//从Redis中获取业主单位
string key = ownerUnitId.ToString();
Model.OwnerUnit ownerUnitModel = Redis.HashGet(5, "OwnerUnit", key);
if (ownerUnitModel == null)
{
ownerUnitModel = new Model.OwnerUnit();
//Redis中不存在则查询数据库
CMB.OWNERUNIT ownerUnit = new CMB.OWNERUNIT(transaction);
ownerUnit.OWNERUNIT_ID = ownerUnitId;
if (ownerUnit.Select())
{
ownerUnitModel.ownerUnitId = ownerUnit.OWNERUNIT_ID.TryParseToInt();
ownerUnitModel.ownerName = ownerUnit.OWNERUNIT_NAME;
ownerUnitModel.provinceCode = ownerUnit.PROVINCE_CODE.TryParseToInt();
ownerUnitModel.isSupportPoint = ownerUnit.ISSUPPORTPOINT.TryParseToInt();
//写入Redis的db5数据库
Redis.HashSet(5, "OwnerUnit", key, ownerUnitModel);
}
}
return ownerUnitModel;
}
#endregion
#region 方法 -> 获取小程序信息
///
/// 获取小程序信息
///
///
///
///
public static Model.WeChatAppSign GetWechatAppSignInfo(Transaction transaction, string wechatAppAppId)
{
//从Redis中获取小程序信息
string key = wechatAppAppId;
Model.WeChatAppSign weChatAppSignModel = Redis.HashGet(5, "WechatApp", key);
if (weChatAppSignModel == null)
{
weChatAppSignModel = new Model.WeChatAppSign();
MSPB.WECHATAPPSIGN wechatAppSign = new MSPB.WECHATAPPSIGN(transaction);
//Redis中不存在则查询数据库
wechatAppSign.AddSearchParameter("WECHATAPP_APPID", wechatAppAppId);
if (wechatAppSign.Search())
{
//写入Redis的db6数据库
weChatAppSignModel.weChatAppSignId = wechatAppSign.WECHATAPPSIGN_ID.TryParseToInt();
weChatAppSignModel.weChatAppSignName = wechatAppSign.WECHATAPPSIGN_NAME;
weChatAppSignModel.weChatAppSignAppId = wechatAppSign.WECHATAPP_APPID;
weChatAppSignModel.wechatAppAppSecret = wechatAppSign.WECHATAPP_APPSECRET;
weChatAppSignModel.ownerUnitId = wechatAppSign.OWNERUNIT_ID.TryParseToInt();
weChatAppSignModel.weChatPublicSignId = wechatAppSign.WECHATPUBLICSIGN_ID.TryParseToInt();
//写入Redis的db5数据库
Redis.HashSet(5, "WechatApp", key, weChatAppSignModel);
}
}
return weChatAppSignModel;
}
#endregion
#region 方法 -> 获取服务区商户列表
///
/// 获取服务区商户列表
///
/// 事务
/// 总数
/// 省份编码,可为空
/// 服务区Id,可为空
/// 是否支持在线,可为空
/// 是否显示在小程序发现页
/// 排序字段,默认按排序索引+商户名称
/// 数据开始开始行
/// 数据行数
///
public static DataTable SellerList(Transaction transaction, ref int totalCount,
string provinceCode = "", int? serverpartId = null, int? scancodeOrder = null,
int? isShow = null, string sorts = "SELLER_INDEX ASC,SELLER_NAME ASC",
int? rn = null, int? rowNum = null)
{
#region 查询条件
string sqlWhere = "";
if (!string.IsNullOrEmpty(provinceCode))
{
sqlWhere += " AND A.PROVINCE_CODE = '" + provinceCode + "'";//省份编码
}
if (serverpartId != null)
{
sqlWhere += " AND A.SERVERPART_ID = " + serverpartId;//服务区Id
}
if (scancodeOrder != null)
{
sqlWhere += " AND B.SCANCODE_ORDER = " + scancodeOrder;//是否支持在线
}
if (isShow != null)
{
sqlWhere += " AND B.ISSHOW = " + isShow;//是否显示在小程序发现页
}
#endregion
//总记录数
string sqlCount = string.Format(@"
SELECT
Count(0) AS Count
FROM MOBILESERVICE_PLATFORM.T_SERVERPARTSELLER A
WHERE A.ISVALID= 1 AND A.ISSHOW = 1 {0}", sqlWhere);
totalCount = new MSPB.SERVERPARTSHOP(transaction).ExecuteDataTable(sqlCount).Rows[0]["Count"].TryParseToInt();
//查询服务区商户信息
string sql = string.Format(@"
SELECT
A.SELLER_ID,A.SELLER_NAME,A.SELLER_TELEPHONE,SELLER_INDEX,
Round(NVL(SELLER_SCORE, 5), 1) AS SELLER_SCORE,
A.SERVERPART_ID,A.PROVINCE_CODE,SERVERPARTSHOP_IDS,
A.COMMENT_COUNT,A.SHOPTRADE,
MAX(B.SCANCODE_ORDER) AS SCANCODE_ORDER,
A.MONTHLYSALES,A.CASHPAY,A.PERCAPITA,ISSHOW,SELF_COMMENT
FROM MOBILESERVICE_PLATFORM.T_SERVERPARTSELLER A,MOBILESERVICE_PLATFORM.T_SERVERPARTSHOP B
WHERE A.PROVINCE_CODE = B.PROVINCE_CODE AND A.SERVERPART_ID = B.SERVERPART_ID AND
A.SELLER_ID = B.SELLER_ID AND A.ISVALID= 1 AND A.ISSHOW = 1 {0}
GROUP BY SHOW_HOME,SHOW_HOME_INDEX,SELLER_INDEX,
A.SELLER_ID,A.SELLER_NAME,A.SELLER_TELEPHONE,
A.SELLER_ADDRESS,SELLER_DESC,A.BUS_STARTDATE,SELLER_SCORE,
A.SERVERPART_ID,A.PROVINCE_CODE,SERVERPARTSHOP_IDS,A.COMMENT_COUNT,A.SHOPTRADE,
A.MONTHLYSALES,A.CASHPAY,A.PERCAPITA,ISSHOW,SELF_COMMENT
ORDER BY {1}", sqlWhere, sorts);
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);
}
DataTable dt = new MSPB.SERVERPARTSHOP(transaction).ExecuteDataTable(sql);
return dt;
}
#endregion
#region 方法 -> 获取服务区商户详情
///
/// 获取服务区商户详情
///
/// 事务
/// 商户Id
///
public static MSPB.SERVERPARTSELLER SellerDetail(Transaction transaction, int sellerId)
{
//查询服务区商户详情
MSPB.SERVERPARTSELLER _SERVERPARTSELLER = new MSPB.SERVERPARTSELLER(transaction);
_SERVERPARTSELLER.SELLER_ID = sellerId;//服务区商户Id
_SERVERPARTSELLER.Select();
return _SERVERPARTSELLER;
}
#endregion
#region 方法 -> 查询服务区编码对应业主单位
///
/// 查询服务区编码对应业主单位
///
/// 事务
/// 服务区门店编码
///
public static int GetOwnerUnitId(Transaction transaction, string serverparCode)
{
int ownerUnitId = 0;
try
{
string sql = string.Format(@"
SELECT
A.OWNERUNIT_ID
FROM
MOBILESERVICE_PLATFORM.T_OWNERSERVERPART A,COOP_MERCHANT.T_OWNERUNIT@CM B
WHERE
A.OWNERUNIT_ID = B.OWNERUNIT_ID AND B.OWNERUNIT_NATURE = 1000 AND
A.SERVERPART_CODE='{0}'", serverparCode);
DataTable dt = new MSPB.OWNERSERVERPART(transaction).ExecuteDataTable(sql);
if (dt.Rows.Count > 0 && dt.Rows[0][0] != DBNull.Value)
{
ownerUnitId = dt.Rows[0]["OWNERUNIT_ID"].TryParseToInt();
}
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "Base", "查询服务区编码对应业主单位" + serverparCode);
}
return ownerUnitId;
}
#endregion
#region 方法 -> 根据业主单位编码获取服务区编码集合
///
/// 根据业主单位编码获取服务区编码集合
///
/// 事务管理器
/// 业主单位编码
///
public static List GetServerpartCodebyProvinceCode(Transaction transaction, string ProvinceCode)
{
List ServerpartCodeList = new List();
//从服务区表查询服务区集合
DataTable dtServerpart = new MSPB.SERVERPART(transaction).FillDataTable("WHERE PROVINCE_CODE = " + ProvinceCode);
foreach (DataRow dataRow in dtServerpart.Rows)
{
ServerpartCodeList.Add(dataRow["SERVERPART_CODE"].ToString());
}
return ServerpartCodeList;
}
#endregion
#region 方法 -> 获取图库图片
///
/// 根据业务表查询图库
///
/// 事务
/// 表名
///
public static DataTable ImageList(Transaction transaction, string tableName)
{
//根据业务表查询图库
DataTable dtImage = new CMB.IMAGE(transaction).FillDataTable(
"WHERE TABLE_NAME = '" + tableName + "'");
return dtImage;
}
///
/// 获取图片路径
///
/// 图库DataTable
/// 业务表ID
/// 图片类型(1000:商户Logo,2000:商户门头图)
///
public static string GetImgUrl(DataTable dt, int tableId, int imageType)
{
string imgUrl = "";
DataRow[] drs = dt.Select("TABLE_ID = " + tableId +
" AND IMAGE_TYPE = " + imageType);
if (drs.Length > 0)
{
imgUrl = _CoopMerchantUrl + drs[0]["IMAGE_PATH"].TryParseToString();
}
return imgUrl;
}
///
/// 获取图片路径
///
/// 事务
/// 业务表名
/// 业务表ID
///
public static string GetImgUrl(Transaction transaction, string tableName, int tableId)
{
//查询图片路劲
string ImagePath = "";
DataTable ImageTable = new CMB.IMAGE(transaction).FillDataTable(
"WHERE TABLE_ID = " + tableId + " AND TABLE_NAME = '" + tableName + "'");
if (ImageTable.Rows.Count > 0)
{
ImagePath = _CoopMerchantUrl + ImageTable.Rows[0]["IMAGE_PATH"];
}
return ImagePath;
}
///
/// 获取图片集合
///
/// 图片数据源
/// 业务ID
/// 图片类型
///
public static List GetImgUrls(DataTable dt, int tableId, int? imageType = null)
{
string where = "TABLE_ID = " + tableId;
if (imageType != null)
{
where += " AND IMAGE_TYPE = " + imageType;//图片类型
}
DataRow[] drs = dt.Select(where);
List ImageList = new List();
foreach (DataRow dr in drs)
{
Model.ImagePath imagePath = new Model.ImagePath();
imagePath.ImagPath = dr["IMAGE_URL"].ToString();
ImageList.Add(imagePath);
}
return ImageList;
}
#endregion
#region 方法 -> 人保接口请求
///
/// 人保接口请求
///
/// 接口请求名称
/// 参数
///
public static Result PiccAction(string ActionName, string parameters)
{
string url = HttpContext.Current.Request.Url.ToString();
string urlHost = HttpContext.Current.Request.Url.Host.ToString();
string port = HttpContext.Current.Request.Url.Port.ToString();
string httpUrl = url.Substring(0, url.IndexOf(":"));
//string parameters = ActionName + "?orderNo=" + orderNo +
//"&cuponNo=" + cuponNo + "&username=" + username + "&outerOrderId=" + outerOrderId;
//string _BaseUrl = httpUrl + "://" + urlHost +
//(!string.IsNullOrEmpty(port) ? ":" + port : "") + "/" + ActionName;
string _BaseUrl = httpUrl + "://" + urlHost + ":" + port + "/" + ActionName;
string RequestUrl = _BaseUrl;
string jsonStr = HttpUtil.HttpUrlPost(parameters, RequestUrl + parameters);
Result result = new Result();
JObject jObj = new JObject();
try
{
jObj = JObject.Parse(jsonStr);
result.Result_Code = jObj["Result_Code"].TryParseToInt();
result.Result_Desc = jObj["Result_Desc"].TryParseToString();
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【PiccAction】",
"请求参数:" + parameters + "||" + jsonStr);
}
return result;
}
#endregion
#region 方法 -> 获取服务区业态品牌营收
///
/// 获取服务区业态品牌营收
/// 修改记录:
/// 2021.10.29显示0营收的门店
///
/// 事务
/// 统计时间
/// 服务区Id,可为空
/// 门店业态,可为空
/// 门店品牌,可为空
///
public static DataTable GetBusinessBrandList(Transaction transaction, DateTime staticticsTime,
int? serverpartId = null, string businessType = null, string bussinessBrand = null)
{
#region 查询条件
string sqlWhere = "";
string sqlWhere2 = "";
//过滤统计日期
if (staticticsTime != DateTime.MinValue)
{
sqlWhere2 += " AND B.ENDACCOUNT_DATE >= TO_DATE('" + staticticsTime.ToString("yyyy/MM/dd") +
"','YYYY/MM/DD') AND B.ENDACCOUNT_DATE < TO_DATE('" + staticticsTime.ToString("yyyy/MM/dd") + "','YYYY/MM/DD') + 1";
}
if (serverpartId != null)
{
sqlWhere += " AND A.SERVERPART_ID = " + serverpartId;//服务区Id
}
if (businessType != null)
{
sqlWhere += " AND NVL(A.BUSINESS_TRADE,-1) IN ('" + businessType.Replace(",", "','") + "')";//门店业态
}
if (bussinessBrand != null)
{
sqlWhere += " AND NVL(A.BUSINESS_BRAND,-1) = " + bussinessBrand;//门店品牌
}
#endregion
//查询服务区商户信息
DataTable dataTable = new HWSB.SERVERPARTSHOP(transaction).ExecuteDataTable($@"
SELECT
NVL(A.BUSINESS_TRADE,-1) AS BUSINESS_TRADE,
NVL(A.BUSINESS_BRAND,-1) AS BUSINESS_BRAND,
NVL(A.BRAND_NAME,'其他') AS BRAND_NAME,
NVL(A.BUSINESS_TRADENAME,'其他') AS BUSINESS_TRADENAME,
SUM(NVL(B.CASHPAY,0)) AS FACTAMOUNT,A.SERVERPART_ID,A.SERVERPART_NAME
FROM
HIGHWAY_STORAGE.T_SERVERPARTSHOP A,
HIGHWAY_SELLDATA.T_ENDACCOUNT_TEMP B
WHERE
A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPCODE = B.SHOPCODE AND
A.STATISTIC_TYPE = 1000 AND A.ISVALID = 1 AND B.VALID = 1 AND
A.SHOPTRADE IS NOT NULL {sqlWhere2} {sqlWhere}
GROUP BY
NVL(A.BUSINESS_TRADE,-1),NVL(A.BUSINESS_BRAND,-1),NVL(A.BRAND_NAME,'其他'),
NVL(A.BUSINESS_TRADENAME,'其他'),A.SERVERPART_ID,A.SERVERPART_NAME");
return dataTable;
}
#endregion
#region 方法 -> 获取服务区业态营收
///
/// 获取经营业态营收额
///
/// 经营品牌营收额数据
/// 经营业态列表数据
///
public static DataTable GetBusinessList(DataTable BrandTable, DataTable BusinessDetilsTable)
{
DataTable BusinessTable = new DataTable();
BusinessTable.Columns.Add("BUSINESS_TRADE", typeof(string)); //当前品牌所属业态
BusinessTable.Columns.Add("BUSINESS_TRADENAME", typeof(string)); //当前品牌所属业态名称
BusinessTable.Columns.Add("BUSINESS_TRADE_PID", typeof(int)); //当前品牌所属父级业态
BusinessTable.Columns.Add("BUSINESS_TRADENAME_P", typeof(string)); //当前品牌所属父级业态名称
BusinessTable.Columns.Add("FACTAMOUNT", typeof(decimal)); //当前品牌所属业态合计销售额
#region 统计经营业态营收额
var query = from t in BrandTable.AsEnumerable()
group t by new
{
t1 = t.Field("BUSINESS_TRADE")
} into m
select new
{
BUSINESS_TRADE = m.Key.t1,
BUSINESS_TRADENAME = "",
BUSINESS_TRADE_PID = 0,
BUSINESS_TRADENAME_P = "",
FACTAMOUNT = m.Sum(n => n.Field("FACTAMOUNT"))
};
if (query.ToList().Count > 0)
{
query.ToList().ForEach(q =>
{
DataRow _DataRow = BusinessTable.NewRow();
_DataRow["BUSINESS_TRADE"] = q.BUSINESS_TRADE;
if (!string.IsNullOrWhiteSpace(q.BUSINESS_TRADE) &&
BusinessDetilsTable.Select("AUTOSTATISTICS_ID = " + q.BUSINESS_TRADE).Length > 0)
{
//当前品牌所属经营业态数据
DataRow drBusinessTrade = BusinessDetilsTable.Select("AUTOSTATISTICS_ID = " + q.BUSINESS_TRADE)[0];
_DataRow["BUSINESS_TRADENAME"] = drBusinessTrade["AUTOSTATISTICS_NAME"];
//父级经营业态数据
if (drBusinessTrade["AUTOSTATISTICS_PID"].ToString() != "-1" && BusinessDetilsTable.Select(
"AUTOSTATISTICS_ID = " + drBusinessTrade["AUTOSTATISTICS_PID"]).Length > 0)
{
DataRow drBusinessTrade_P = BusinessDetilsTable.Select(
"AUTOSTATISTICS_ID = " + drBusinessTrade["AUTOSTATISTICS_PID"])[0];
_DataRow["BUSINESS_TRADE_PID"] = drBusinessTrade_P["AUTOSTATISTICS_ID"];
_DataRow["BUSINESS_TRADENAME_P"] = drBusinessTrade_P["AUTOSTATISTICS_NAME"];
}
}
_DataRow["FACTAMOUNT"] = q.FACTAMOUNT;
BusinessTable.Rows.Add(_DataRow);
});
}
#endregion
return BusinessTable;
}
///
/// 获取父级经营业态营收
///
/// 经营业态营收额
///
public static DataTable GetBusinessList(DataTable BusinessTable)
{
DataTable BusinessTable_P = new DataTable();
BusinessTable_P.Columns.Add("BUSINESS_TRADE", typeof(int)); //当前品牌所属父级业态
BusinessTable_P.Columns.Add("BUSINESS_TRADENAME", typeof(string)); //当前品牌所属父级业态名称
BusinessTable_P.Columns.Add("BUSINESS_TRADE_LIST", typeof(string)); //当前品牌所属业态内码集合
BusinessTable_P.Columns.Add("FACTAMOUNT", typeof(decimal)); //当前品牌所属父级业态合计销售额
#region 统计经营业态营收额
var query = from t in BusinessTable.AsEnumerable()
group t by new
{
t1 = t.Field("BUSINESS_TRADE_PID"),
t2 = t.Field("BUSINESS_TRADENAME_P")
} into m
select new
{
BUSINESS_TRADE = m.Key.t1 == null ? -1 : m.Key.t1,
BUSINESS_TRADENAME = string.IsNullOrWhiteSpace(m.Key.t2) ? "其他" : m.Key.t2,
BUSINESS_TRADE_LIST = string.Join(",", m.Select(n => n.Field("BUSINESS_TRADE")).ToArray()),
FACTAMOUNT = m.Sum(n => n.Field("FACTAMOUNT"))
};
if (query.ToList().Count > 0)
{
query.ToList().ForEach(q =>
{
DataRow _DataRow = BusinessTable_P.NewRow();
_DataRow["BUSINESS_TRADE"] = q.BUSINESS_TRADE;
_DataRow["BUSINESS_TRADENAME"] = q.BUSINESS_TRADENAME;
_DataRow["BUSINESS_TRADE_LIST"] = q.BUSINESS_TRADE_LIST;
_DataRow["FACTAMOUNT"] = q.FACTAMOUNT;
BusinessTable_P.Rows.Add(_DataRow);
});
}
#endregion
return BusinessTable_P;
}
#endregion
#region 方法 -> 获取门店营收信息
///
/// 获取门店营收信息
///
///
/// 统计时间
/// 服务区内码
/// 门店业态
/// 门店品牌
///
public static List GetBrandShopRevenue(Transaction transaction, DateTime staticticsTime,
int? serverpartId = null, string businessType = null, string bussinessBrand = null)
{
List listModel = new List();
string SQLString = " AND B.SERVERPART_ID = " + serverpartId;
if (!string.IsNullOrWhiteSpace(businessType))
{
SQLString += " AND NVL(B.BUSINESS_TRADE,-1) IN ('" + businessType.Replace(",", "','") + "')";
}
if (!string.IsNullOrWhiteSpace(bussinessBrand))
{
SQLString += " AND NVL(B.BUSINESS_BRAND,-1) = " + bussinessBrand;
}
if (staticticsTime != DateTime.MinValue)
{
SQLString += " AND A.ENDACCOUNT_DATE >= TO_DATE('" + staticticsTime.ToString("yyyy/MM/dd") +
"','YYYY/MM/DD') AND A.ENDACCOUNT_DATE < TO_DATE('" + staticticsTime.ToString("yyyy/MM/dd") + "','YYYY/MM/DD') + 1";
}
DataTable _DataTable = new HWSB.SERVERPART(transaction).ExecuteDataTable($@"
SELECT
B.SERVERPARTSHOP_ID,A.ENDACCOUNT_DATE,A.SERVERPART_ID,A.SERVERPART_NAME,
A.SHOPNAME,B.BUSINESS_TYPE,A.WORKER_NAME,A.DESCRIPTION_STAFF,B.STATISTICS_TYPE,
A.ENDACCOUNT_STARTDATE,A.DIFFERENCE_REASON,A.APPROVE_STAFF,A.APPROVE_DATE,
A.APPROVED_INFO,A.FACTAMOUNT_SALE,A.FACTAMOUNT_CIGARETTE,A.CHECK_COUNT,
A.DIFFERENT_PRICE,A.CASHPAY_DOWNLORD,A.MOBILEPAYMENT,A.CASHPAY,A.TOTALSELLAMOUNT,
B.SHOPREGION,B.SHOPTRADE,B.SHOPCODE,A.EXCEPTION_COUNT,A.ENDACCOUNT_ID,A.DESCRIPTION_DATE
FROM
HIGHWAY_SELLDATA.V_ENDACCOUNT_TEMP_REVENUE A,
HIGHWAY_STORAGE.T_SERVERPARTSHOP B
WHERE
A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPCODE = B.SHOPCODE AND
B.ISVALID = 1 AND B.STATISTIC_TYPE = 1000 AND B.SHOPTRADE IS NOT NULL {SQLString}");
if (_DataTable.Rows.Count > 0)
{
#region 绑定门店结账清单
//按照服务区、门店方位、门店业态、门店编码、结账时间排序
_DataTable.DefaultView.Sort = "SERVERPART_NAME,SHOPREGION,SHOPTRADE,SHOPCODE,ENDACCOUNT_DATE";
_DataTable = _DataTable.DefaultView.ToTable();
Model.BrandShopModel _ShopEndaccount = new Model.BrandShopModel();
string _SERVERPARTSHOP_ID = "";
foreach (DataRow _DataRow in _DataTable.Rows)
{
bool ChangeFlag = false; //门店信息变化标识
if (string.IsNullOrWhiteSpace(_SERVERPARTSHOP_ID))
{
listModel.Add(_ShopEndaccount);
ChangeFlag = true;
}
else if (_SERVERPARTSHOP_ID != _DataRow["SERVERPARTSHOP_ID"].ToString())
{
_ShopEndaccount = new Model.BrandShopModel();
listModel.Add(_ShopEndaccount);
ChangeFlag = true;
}
if (ChangeFlag)
{
_SERVERPARTSHOP_ID = _DataRow["SERVERPARTSHOP_ID"].ToString();
#region 绑定门店信息
_ShopEndaccount.ENDACCOUNT_DATE = _DataRow["ENDACCOUNT_DATE"].ToString();
_ShopEndaccount.SERVERPART_ID = _DataRow["SERVERPART_ID"].TryParseToInt();
_ShopEndaccount.SERVERPART_NAME = _DataRow["SERVERPART_NAME"].ToString();
_ShopEndaccount.SERVERPARTSHOP_ID = _DataRow["SERVERPARTSHOP_ID"].TryParseToInt();
_ShopEndaccount.SHOPNAME = _DataRow["SHOPNAME"].ToString();
_ShopEndaccount.BUSINESS_TYPE = _DataRow["BUSINESS_TYPE"].TryParseToInt();
switch (_ShopEndaccount.BUSINESS_TYPE)
{
case 1000:
_ShopEndaccount.BUSINESS_TYPENAME = "自营";
_ShopEndaccount.SHOPNAME += "【自】";
break;
case 2000:
_ShopEndaccount.BUSINESS_TYPENAME = "合作经营";
_ShopEndaccount.SHOPNAME += "【合】";
break;
case 3000:
_ShopEndaccount.BUSINESS_TYPENAME = "固定租金";
_ShopEndaccount.SHOPNAME += "【固】";
break;
case 4000:
_ShopEndaccount.BUSINESS_TYPENAME = "展销";
_ShopEndaccount.SHOPNAME += "【展】";
break;
}
_ShopEndaccount.CASHPAY_TOTAL = 0;
_ShopEndaccount.ShopEndAccountList = new List();
#endregion
if (_DataTable.Select("SERVERPARTSHOP_ID = " + _SERVERPARTSHOP_ID + " AND ENDACCOUNT_ID <> 0").Length == 0)
{
_ShopEndaccount.UNACCOUNT_SIGN = 0;
_ShopEndaccount.SHOWSCAN_SIGN = 0;
_ShopEndaccount.SHOWLESS_SIGN = 0;
_ShopEndaccount.SHOWMORE_SIGN = 0;
_ShopEndaccount.SHOWABNORMAL_SIGN = 0;
_ShopEndaccount.INTERFACE_SIGN = 0;
_ShopEndaccount.SHOWSSUPPLY_SIGN = 0;
_ShopEndaccount.SHOWCHECK_SIGN = 0;
_ShopEndaccount.SHOWDEAL_SIGN = 0;
}
else
{
_ShopEndaccount.UNACCOUNT_SIGN = 1;
if (_DataTable.Select("SERVERPARTSHOP_ID = " + _SERVERPARTSHOP_ID + " AND EXCEPTION_COUNT > 0").Length > 0)
{
_ShopEndaccount.SHOWABNORMAL_SIGN = 1;
}
if (_DataTable.Select("SERVERPARTSHOP_ID = " + _SERVERPARTSHOP_ID +
" AND (WORKER_NAME LIKE '%【扫】%' OR WORKER_NAME LIKE '%【扫码】%')").Length > 0)
{
_ShopEndaccount.SHOWSCAN_SIGN = 1;
_ShopEndaccount.INTERFACE_SIGN = 0;
}
else
{
if (_DataTable.Select("SERVERPARTSHOP_ID = " + _SERVERPARTSHOP_ID + " AND STATISTICS_TYPE LIKE '%1020%'").Length > 0)
{
_ShopEndaccount.SHOWSCAN_SIGN = 0;
_ShopEndaccount.INTERFACE_SIGN = 1;
}
else
{
_ShopEndaccount.SHOWSCAN_SIGN = 0;
_ShopEndaccount.INTERFACE_SIGN = 0;
}
}
if (_DataTable.Select("SERVERPARTSHOP_ID = " + _SERVERPARTSHOP_ID +
" AND DESCRIPTION_STAFF LIKE '%【补】%'").Length > 0)
{
_ShopEndaccount.SHOWSSUPPLY_SIGN = 1;
}
if (_DataTable.Select("SERVERPARTSHOP_ID = " + _SERVERPARTSHOP_ID + " AND CHECK_COUNT > 0").Length > 0)
{
_ShopEndaccount.SHOWCHECK_SIGN = 1;
}
if (_DataTable.Select("SERVERPARTSHOP_ID = " + _SERVERPARTSHOP_ID + " AND CHECK_COUNT IS NOT NULL").Length > 0)
{
_ShopEndaccount.SHOWDEAL_SIGN = 1;
}
}
}
Model.WPDShopEndAccountList _WPDShopEndAccountList = new Model.WPDShopEndAccountList();
if (_DataRow["WORKER_NAME"].ToString().Contains("【扫】"))
{
_WPDShopEndAccountList.TRANSFER_TYPE = 1;
}
else if (_DataRow["DESCRIPTION_STAFF"].ToString().Contains("【补】"))
{
_WPDShopEndAccountList.TRANSFER_TYPE = 2;
}
else if (!string.IsNullOrWhiteSpace(_DataRow["STATISTICS_TYPE"].ToString()) &&
_DataRow["STATISTICS_TYPE"].ToString().Contains("1020"))
{
_WPDShopEndAccountList.TRANSFER_TYPE = 3;
}
_WPDShopEndAccountList.ENDACCOUNT_STARTDATE = _DataRow["ENDACCOUNT_STARTDATE"].ToString();
_WPDShopEndAccountList.ENDACCOUNT_DATE = _DataRow["ENDACCOUNT_DATE"].ToString();
_WPDShopEndAccountList.DESCRIPTION_STAFF = _DataRow["DESCRIPTION_STAFF"].ToString();
_WPDShopEndAccountList.DIFFERENCE_REASON = _DataRow["DIFFERENCE_REASON"].ToString();
_WPDShopEndAccountList.DESCRIPTION_DATE = _DataRow["DESCRIPTION_DATE"].ToString();
_WPDShopEndAccountList.APPROVE_STAFF = _DataRow["APPROVE_STAFF"].ToString();
_WPDShopEndAccountList.APPROVED_INFO = _DataRow["APPROVED_INFO"].ToString();
_WPDShopEndAccountList.APPROVE_DATE = _DataRow["APPROVE_DATE"].ToString();
if (!string.IsNullOrWhiteSpace(_DataRow["FACTAMOUNT_SALE"].ToString()))
{
_WPDShopEndAccountList.FACTAMOUNT_SALE = _DataRow["FACTAMOUNT_SALE"].ToString().TryParseToDecimal();
}
if (!string.IsNullOrWhiteSpace(_DataRow["FACTAMOUNT_CIGARETTE"].ToString()))
{
_WPDShopEndAccountList.FACTAMOUNT_CIGARETTE = _DataRow["FACTAMOUNT_CIGARETTE"].ToString().TryParseToDecimal();
}
if (!string.IsNullOrWhiteSpace(_DataRow["CHECK_COUNT"].ToString()))
{
_WPDShopEndAccountList.CHECK_COUNT = _DataRow["CHECK_COUNT"].ToString().TryParseToDecimal();
}
_WPDShopEndAccountList.DIFFERENT_PRICE = _DataRow["DIFFERENT_PRICE"].ToString().TryParseToDecimal();
_WPDShopEndAccountList.CASHPAY_DOWNLORD = _DataRow["CASHPAY_DOWNLORD"].ToString().TryParseToDecimal();//现金缴款金额
_WPDShopEndAccountList.MOBILEPAYMENT = _DataRow["MOBILEPAYMENT"].ToString().TryParseToDecimal();
_WPDShopEndAccountList.CASHPAY = _DataRow["CASHPAY"].ToString().TryParseToDecimal();
_ShopEndaccount.CASHPAY_TOTAL += _WPDShopEndAccountList.CASHPAY;
bool AbnormalState = Math.Abs(_DataRow["DIFFERENT_PRICE"].ToString().TryParseToDouble() /
_DataRow["TOTALSELLAMOUNT"].ToString().TryParseToDouble()) > 0.003;
if (AbnormalState)
{
if (_WPDShopEndAccountList.DIFFERENT_PRICE > 0)
{
_ShopEndaccount.SHOWMORE_SIGN = 2;
}
else if (_WPDShopEndAccountList.DIFFERENT_PRICE < 0)
{
_ShopEndaccount.SHOWLESS_SIGN = 2;
}
}
else if (_ShopEndaccount.SHOWMORE_SIGN == 0)
{
if (_WPDShopEndAccountList.DIFFERENT_PRICE > 0)
{
_ShopEndaccount.SHOWMORE_SIGN = 1;
}
else if (_WPDShopEndAccountList.DIFFERENT_PRICE < 0)
{
_ShopEndaccount.SHOWLESS_SIGN = 1;
}
}
if (_ShopEndaccount.ShopEndAccountList == null)
{
_ShopEndaccount.ShopEndAccountList = new List();
}
_ShopEndaccount.ShopEndAccountList.Add(_WPDShopEndAccountList);
}
#endregion
}
return listModel;
}
#endregion
#region 方法 -> 获取服务区营收信息
///
/// 获取服务区营收信息
///
/// 事务
/// 统计时间
/// 服务区Id,可为空
///
public static DataTable GetServerpartRevenue(Transaction transaction, DateTime staticticsTime, int? serverpartId = null)
{
#region 查询条件
string sqlWhere = "";
string sqlWhere2 = "";
if (serverpartId != null)
{
sqlWhere += " AND A.SERVERPART_ID = " + serverpartId;//服务区Id
}
if (staticticsTime != DateTime.MinValue)
{
sqlWhere2 += " AND TRUNC(C.ENDACCOUNT_DATE) = TRUNC(TO_DATE('" + staticticsTime + "','YYYY/MM/DD HH24:MI:SS'))";//结账时间
}
#endregion
//查询服务区商户信息
DataTable dataTable = new HWSB.SERVERPARTSHOP(transaction).ExecuteDataTable($@"
SELECT
SUM(FACTAMOUNT) AS FACTAMOUNT,SERVERPART_ID,SERVERPART_NAME
FROM
(
SELECT
A.SERVERPART_ID,A.SERVERPART_NAME,NVL(C.CASHPAY,0) AS FACTAMOUNT
FROM
HIGHWAY_STORAGE.T_SERVERPART A,
HIGHWAY_STORAGE.T_SERVERPARTSHOP B
LEFT JOIN
HIGHWAY_SELLDATA.T_ENDACCOUNT_TEMP C
ON
B.SERVERPART_ID = C.SERVERPART_ID AND C.VALID = 1 AND
B.SHOPCODE = C.SHOPCODE {sqlWhere2}
WHERE
A.SERVERPART_ID = B.SERVERPART_ID AND B.ISVALID = 1 AND B.BUSINESS_STATE = 1000 AND
B.STATISTIC_TYPE = 1000 AND B.SHOPTRADE IS NOT NULL {sqlWhere}
UNION ALL
SELECT
A.SERVERPART_ID,A.SERVERPART_NAME,NVL(C.CASHPAY,0) AS FACTAMOUNT
FROM
HIGHWAY_STORAGE.T_SERVERPART A,
HIGHWAY_STORAGE.T_SERVERPARTSHOP B,
HIGHWAY_SELLDATA.T_ENDACCOUNT_TEMP C
WHERE
A.SERVERPART_ID = B.SERVERPART_ID AND B.ISVALID = 1 AND B.STATISTIC_TYPE = 1000 AND
B.SERVERPART_ID = C.SERVERPART_ID AND C.VALID = 1 AND B.SHOPCODE = C.SHOPCODE AND
B.BUSINESS_STATE != 1000 AND B.SHOPTRADE IS NOT NULL AND NVL(C.CASHPAY,0)> 0
{sqlWhere2} {sqlWhere}
)
GROUP BY
SERVERPART_ID,SERVERPART_NAME");
return dataTable;
}
///
/// 统计服务区营收信息
///
/// 经营品牌营收额数据
///
public static DataTable GetServerpartRevenue(DataTable BrandTable)
{
DataTable ServerpartTable = new DataTable();
ServerpartTable.Columns.Add("SERVERPART_ID", typeof(decimal)); //当前服务区内码
ServerpartTable.Columns.Add("SERVERPART_NAME", typeof(string)); //当前服务区名称
ServerpartTable.Columns.Add("FACTAMOUNT", typeof(decimal)); //当前服务区营收信息
#region 统计经营业态营收额
var query = from t in BrandTable.AsEnumerable()
group t by new
{
t1 = t.Field("SERVERPART_ID"),
t2 = t.Field("SERVERPART_NAME")
} into m
select new
{
SERVERPART_ID = m.Key.t1,
SERVERPART_NAME = m.Key.t2,
FACTAMOUNT = m.Sum(n => n.Field("FACTAMOUNT"))
};
if (query.ToList().Count > 0)
{
query.ToList().ForEach(q =>
{
DataRow _DataRow = ServerpartTable.NewRow();
_DataRow["SERVERPART_ID"] = q.SERVERPART_ID;
_DataRow["SERVERPART_NAME"] = q.SERVERPART_NAME;
_DataRow["FACTAMOUNT"] = q.FACTAMOUNT;
ServerpartTable.Rows.Add(_DataRow);
});
}
#endregion
return ServerpartTable;
}
#endregion
#region 方法 -> 获取服务区业态品牌列表
///
/// 获取服务区业态品牌列表
///
/// 事务
/// 省份编码
///
public static DataTable GetBrandList(Transaction transaction, string pushProvinceCode = "")
{
//查询服务区商户信息
DataTable dataTable = new CMB.BRAND(transaction).FillDataTable("WHERE BRAND_STATE = 1" +
(string.IsNullOrWhiteSpace(pushProvinceCode) ? "" : " AND PROVINCE_CODE = " + pushProvinceCode));
return dataTable;
}
#endregion
#region 方法 -> 获取服务区经营业态列表
///
/// 获取服务区业态品牌列表
///
/// 事务
/// 省份编码
///
public static DataTable GetBusinessList(Transaction transaction, string pushProvinceCode = "")
{
//查询服务区商户信息
DataTable dataTable = new CMB.AUTOSTATISTICS(transaction).FillDataTable("WHERE AUTOSTATISTICS_TYPE = 2000" +
(string.IsNullOrWhiteSpace(pushProvinceCode) ? "" : " AND PROVINCE_CODE = " + pushProvinceCode));
return dataTable;
}
#endregion
#region 方法 -> 获取服务区上级业态信息
///
/// 获取服务区上级业态信息
///
/// 事务
/// 业态等级
/// 省份
///
public static DataTable GetBusinessInfo(Transaction transaction, int businessTypeLevel, string pushProvinceCode)
{
DataTable businessTypeTable = new DataTable();
businessTypeTable.Columns.Add("AUTOSTATISTICS_NAME");
businessTypeTable.Columns.Add("AUTOSTATISTICS_ID");
businessTypeTable.Columns.Add("AUTOSTATISTICS_IDS");
//查询服务区业态信息
DataTable dataTable = new CMB.AUTOSTATISTICS(transaction).ExecuteDataTable($@"
SELECT
A.AUTOSTATISTICS_NAME,A.AUTOSTATISTICS_ID,A.AUTOSTATISTICS_PID,
WM_CONCAT(B.AUTOSTATISTICS_ID) AS AUTOSTATISTICS_IDS
FROM
COOP_MERCHANT.T_AUTOSTATISTICS A
LEFT JOIN
COOP_MERCHANT.T_AUTOSTATISTICS B
ON
A.AUTOSTATISTICS_ID = B.AUTOSTATISTICS_PID
WHERE
A.PROVINCE_CODE = {pushProvinceCode} AND A.AUTOSTATISTICS_TYPE = 2000
GROUP BY
A.AUTOSTATISTICS_NAME,A.AUTOSTATISTICS_ID,A.AUTOSTATISTICS_PID");
string Pid = "-1";
for (int i = 0; i < businessTypeLevel; i++)
{
DataRow[] _Row = dataTable.Select("AUTOSTATISTICS_PID IN (" + Pid + ") ");
if (_Row.Length > 0)
{
Pid = "";
foreach (DataRow _DataRow in _Row)
{
Pid += (Pid == "" ? "" : ",") + _DataRow["AUTOSTATISTICS_ID"];
}
}
}
foreach (string _AUTOSTATISTICS_ID in Pid.Split(','))
{
DataRow dataRow = businessTypeTable.NewRow();
DataRow[] _Row = dataTable.Select("AUTOSTATISTICS_ID = " + _AUTOSTATISTICS_ID);
dataRow["AUTOSTATISTICS_NAME"] = _Row[0]["AUTOSTATISTICS_NAME"];
dataRow["AUTOSTATISTICS_ID"] = _Row[0]["AUTOSTATISTICS_ID"];
dataRow["AUTOSTATISTICS_IDS"] = _Row[0]["AUTOSTATISTICS_IDS"].ToString() == "" ?
_Row[0]["AUTOSTATISTICS_ID"] : _Row[0]["AUTOSTATISTICS_IDS"];
businessTypeTable.Rows.Add(dataRow);
}
DataRow NewRowS = businessTypeTable.NewRow();
NewRowS["AUTOSTATISTICS_NAME"] = "其他类";
NewRowS["AUTOSTATISTICS_ID"] = -1;
NewRowS["AUTOSTATISTICS_IDS"] = "-1";
businessTypeTable.Rows.Add(NewRowS);
return businessTypeTable;
}
#endregion
#region 方法 -> 上传HighWay图片数据
///
/// 上传HighWay图片数据
///
/// 事务管理器
/// base64位码字符串
/// 表内码
/// 表名
/// 文件存储路径
public static void UploadHWSImage(Transaction _Transaction,
string Base64Str, int Table_Id, string Table_Name, string FilePath)
{
#region 上传图片
if (!string.IsNullOrEmpty(Base64Str))
{
try
{
//解析传入的base64位码,并存储图片于服务器
foreach (string _base64str in Base64Str.Split('|'))
{
string ImgStr = _base64str;
HWSB.IMAGE _IMAGE = new HWSB.IMAGE(_Transaction);
_IMAGE.IMAGE_TYPE = 1000;
//获取当前接口url地址
Uri URLAddress = HttpContext.Current.Request.Url;
if (ImgStr.Split(";base64,").Length > 1)
{
ImgStr = ImgStr.Split(";base64,")[1];
}
//去除base64码中特殊字符(【%->空】【,->空】【 ->+】)
ImgStr = ImgStr.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
//以当前时间戳命名文件名称,防止文件出现重名导致保存失败
string FileName = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss_ffff");
byte[] _byte = Convert.FromBase64String(ImgStr);
if (!Directory.Exists(HttpContext.Current.Server.MapPath("~" + FilePath)))
{
Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~" + FilePath));
}
//将图片保存至服务器本地
bool flag = UploadImg(_byte, HttpContext.Current.Server.MapPath("~" + FilePath), FileName);
//图片路径
_IMAGE.IMAGE_PATH = FilePath + FileName + ".jpg";
//图片完整地址
_IMAGE.IMAGE_URL = URLAddress.Scheme + "://" + URLAddress.Authority + _IMAGE.IMAGE_PATH;
if (flag)
{
//图片地址:补充图片名称
_IMAGE.IMAGE_PATH = FilePath + FileName + ".jpg";
//图片完整路径:补充图片名称
_IMAGE.IMAGE_URL = _EShangPlatformApiUrls + _IMAGE.IMAGE_PATH;
//图片名称
_IMAGE.IMAGE_TITLE = FileName;
//存储结账单内码
_IMAGE.Table_ID = Table_Id;
//存储结账单表名
_IMAGE.Table_Name = Table_Name;
//图片上传时间
_IMAGE.IMAGE_DATE = DateTime.Now;
_IMAGE.ISVALID = 1;
_IMAGE.Insert();
}
else
{
_Transaction.Rollback();
}
}
}
catch { }
}
#endregion
}
#region 方法 -> 存储图片文件
///
/// 存储图片文件
///
///
///
///
///
public static bool UploadImg(byte[] fileBytes, string FilePath, string FileName)
{
bool flag = false;
try
{
string filePath = FilePath + FileName + ".jpg"; //图片要保存的路径及文件名
using (MemoryStream memoryStream = new MemoryStream(fileBytes))//1.定义并实例化一个内存流,以存放提交上来的字节数组。
{
using (FileStream fileUpload = new FileStream(filePath, FileMode.Create))//2.定义实际文件对象,保存上载的文件。
{
memoryStream.WriteTo(fileUpload); //3.把内存流里的数据写入物理文件
flag = true;
}
}
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex);
}
return flag;
}
#endregion
#endregion
#region 方法 -> 上传小程序商品详情图片数据
///
/// 上传HighWay图片数据
///
/// 事务管理器
/// base64位码字符串
/// 表内码
/// 表名
/// 路径
public static void AppletUploadImage(Transaction _Transaction,
string Base64Str, int Table_Id, string Table_Name, string FilePath)
{
#region 上传图片
if (!string.IsNullOrEmpty(Base64Str))
{
try
{
//解析传入的base64位码,并存储图片于服务器
foreach (string _base64str in Base64Str.Split('|'))
{
string ImgStr = _base64str;
CMB.IMAGE _IMAGE = new CMB.IMAGE(_Transaction);
_IMAGE.IMAGE_TYPE = 2000;
//获取当前接口url地址
Uri URLAddress = HttpContext.Current.Request.Url;
if (ImgStr.Split(";base64,").Length > 1)
{
ImgStr = ImgStr.Split(";base64,")[1];
}
//去除base64码中特殊字符(【%->空】【,->空】【 ->+】)
ImgStr = ImgStr.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
//以当前时间戳命名文件名称,防止文件出现重名导致保存失败
string FileName = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss_ffff");
byte[] _byte = Convert.FromBase64String(ImgStr);
if (!Directory.Exists(HttpContext.Current.Server.MapPath("~" + FilePath)))
{
Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~" + FilePath));
}
//将图片保存至服务器本地
bool flag = AppletUploadImg(_byte, HttpContext.Current.Server.MapPath("~" + FilePath), FileName);
//图片路径
_IMAGE.IMAGE_PATH = FilePath + FileName + ".jpg";
//图片完整地址
_IMAGE.IMAGE_URL = URLAddress.Scheme + "://" + URLAddress.Authority + _IMAGE.IMAGE_PATH;
if (flag)
{
//图片地址:补充图片名称
_IMAGE.IMAGE_PATH = FilePath + FileName + ".jpg";
//图片完整路径:补充图片名称
_IMAGE.IMAGE_URL = _EShangPlatformApiUrls + _IMAGE.IMAGE_PATH;
//图片名称
_IMAGE.IMAGE_TITLE = FileName;
//存储商品ID
_IMAGE.TABLE_ID = Table_Id;
//存储商品表名
_IMAGE.TABLE_NAME = Table_Name;
//图片上传时间
_IMAGE.IMAGE_DATE = DateTime.Now;
_IMAGE.ISVALID = 1;
_IMAGE.Insert();
}
else
{
_Transaction.Rollback();
}
}
}
catch { }
}
#endregion
}
#region 方法 -> 存储图片文件
///
/// 存储图片文件
///
///
///
///
///
public static bool AppletUploadImg(byte[] fileBytes, string FilePath, string FileName)
{
bool flag = false;
try
{
string filePath = FilePath + FileName + ".jpg"; //图片要保存的路径及文件名
using (MemoryStream memoryStream = new MemoryStream(fileBytes))//1.定义并实例化一个内存流,以存放提交上来的字节数组。
{
using (FileStream fileUpload = new FileStream(filePath, FileMode.Create))//2.定义实际文件对象,保存上载的文件。
{
memoryStream.WriteTo(fileUpload); ///3.把内存流里的数据写入物理文件
flag = true;
}
}
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex);
}
return flag;
}
#endregion
#endregion
}
}