613 lines
34 KiB
C#
613 lines
34 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Configuration;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using SuperMap.RealEstate.ServiceModel;
|
||
using HWSB = SuperMap.RealEstate.HighWay.Storage.Business;
|
||
using HCC = HZQR.Common.Common;
|
||
using Newtonsoft.Json.Linq;
|
||
using HZQR.Common;
|
||
|
||
namespace ZJZCGCMemberClient.Method
|
||
{
|
||
/// <summary>
|
||
/// 基础信息传输相关方法
|
||
/// </summary>
|
||
public class BaseInfoHelper
|
||
{
|
||
protected static string WholeServerpartId = ConfigurationManager.AppSettings["WholeServerpartId"];
|
||
protected static string TransmissionShop = ConfigurationManager.AppSettings["TransmissionShop"];
|
||
|
||
#region 同步门店数据
|
||
public static void SynchroShopInfo(Transaction transaction, string LastDateTime)
|
||
{
|
||
string NowTime = DateTime.Now.ToString();
|
||
|
||
//查询所有门店信息
|
||
string SQLString = string.Format(@"SELECT
|
||
A.*,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,B.ISVALID,B.BUSINESS_STATE,
|
||
B.SHOPTRADE,C.SERVERPART_X,C.SERVERPART_Y
|
||
FROM
|
||
HIGHWAY_STORAGE.T_ZJHYSPCRT A,
|
||
HIGHWAY_STORAGE.T_SERVERPARTSHOP B,
|
||
HIGHWAY_STORAGE.T_SERVERPART C
|
||
WHERE
|
||
A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPREGION = B.SHOPREGION AND
|
||
A.ZONAL_CODING IS NOT NULL AND B.SHOPCODE IS NOT NULL AND
|
||
B.SERVERPART_ID = C.SERVERPART_ID AND B.SHOPTRADE NOT IN ('9032','9999') AND
|
||
NVL(B.STATISTICS_TYPE,'0') NOT LIKE '1020%'{0} AND
|
||
B.OPERATE_DATE <= TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS')",
|
||
string.IsNullOrWhiteSpace(LastDateTime) ? "" : " AND B.OPERATE_DATE > TO_DATE('" +
|
||
LastDateTime + "','YYYY/MM/DD HH24:MI:SS')", NowTime);
|
||
DataTable dtStore = new HWSB.SERVERPARTSHOP(transaction).ExecuteDataTable(SQLString);
|
||
if (dtStore.Rows.Count > 0)
|
||
{
|
||
foreach (Model.StoreModel storeModel in GetStoreList(transaction, dtStore))
|
||
{
|
||
//开始同步门店数据
|
||
if (dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode).Length > 0)
|
||
{
|
||
DataRow drStore = dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode)[0];
|
||
LogUtil.WriteLog("开始同步门店:" + drStore["SECOND_DEP"] + drStore["SHOPNAME"]);
|
||
}
|
||
else
|
||
{
|
||
LogUtil.WriteLog("开始同步门店:" + storeModel.storeName);
|
||
}
|
||
if (dtStore.Select("ISVALID = 0 and SERVERPARTSHOP_ID = " + storeModel.storeCode).Length > 0)
|
||
{
|
||
CommonHelper.PostDataToZJHY(storeModel, 2,
|
||
ZJZCGCMemberHelper.ApiURL + "/merchant/storeSync");
|
||
}
|
||
else
|
||
{
|
||
CommonHelper.PostDataToZJHY(storeModel, 1,
|
||
ZJZCGCMemberHelper.ApiURL + "/merchant/storeSync");
|
||
}
|
||
}
|
||
}
|
||
//更新门店表数据同步时间
|
||
HCC.Common.AddUpdateAppSettings("LastDateTimeStore", NowTime);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 同步全部门店数据
|
||
/// </summary>
|
||
/// <param name="transaction"></param>
|
||
public static void SynchroWholeShop(Transaction transaction)
|
||
{
|
||
string NowTime = DateTime.Now.ToString();
|
||
HWSB.SERVERPARTSHOP _SERVERPARTSHOP = new HWSB.SERVERPARTSHOP(transaction);
|
||
|
||
//查询所有门店信息
|
||
string SQLString = string.Format(@"SELECT
|
||
A.*,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,B.SHOPTRADE,B.BUSINESS_STATE,
|
||
C.SERVERPART_X,C.SERVERPART_Y
|
||
FROM
|
||
HIGHWAY_STORAGE.T_ZJHYSPCRT A,
|
||
HIGHWAY_STORAGE.T_SERVERPARTSHOP B,
|
||
HIGHWAY_STORAGE.T_SERVERPART C
|
||
WHERE
|
||
A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPREGION = B.SHOPREGION AND
|
||
A.ZONAL_CODING IS NOT NULL AND B.SHOPCODE IS NOT NULL AND
|
||
B.ISVALID = 1 AND B.SHOPTRADE NOT IN ('9032','9999') AND
|
||
NVL(B.STATISTICS_TYPE,'0') NOT LIKE '1020%' AND
|
||
B.SERVERPART_ID = C.SERVERPART_ID AND A.SERVERPART_ID = 104");
|
||
DataTable dtStore = _SERVERPARTSHOP.ExecuteDataTable(SQLString);
|
||
|
||
//同步商品分类菜单数据
|
||
SQLString = string.Format(@"SELECT
|
||
A.*,B.COMMODITYTYPE_ID,B.COMMODITYTYPE_NAME,
|
||
B.COMMODITYTYPE_PID,B.COMMODITYTYPE_CODE,C.SERVERPARTSHOP_ID
|
||
FROM
|
||
HIGHWAY_STORAGE.T_COMMODITY A,
|
||
HIGHWAY_STORAGE.T_COMMODITYTYPE B,
|
||
HIGHWAY_STORAGE.T_SERVERPARTSHOP C
|
||
WHERE
|
||
A.COMMODITY_TYPE = TO_CHAR(B.COMMODITYTYPE_ID) AND
|
||
A.SERVERPART_ID IN (C.SERVERPART_ID,{0}) AND A.BUSINESSTYPE = C.SHOPTRADE AND
|
||
EXISTS (SELECT 1 FROM HIGHWAY_STORAGE.T_ZJHYSPCRT B
|
||
WHERE A.SERVERPART_ID IN (B.SERVERPART_ID,{0})) AND
|
||
C.ISVALID = 1 AND NVL(C.STATISTICS_TYPE,'0') NOT LIKE '1020%' AND
|
||
A.COMMODITY_STATE = 1 AND C.SERVERPART_ID = 104", WholeServerpartId);
|
||
DataTable dtGoods = _SERVERPARTSHOP.ExecuteDataTable(SQLString);
|
||
|
||
foreach (Model.StoreModel storeModel in GetStoreList(transaction, dtStore,
|
||
dtGoods.DefaultView.ToTable(true, "COMMODITY_TYPE", "SERVERPART_ID", "BUSINESSTYPE")))
|
||
{
|
||
//开始同步门店数据
|
||
if (dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode).Length > 0)
|
||
{
|
||
DataRow drStore = dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode)[0];
|
||
LogUtil.WriteLog("开始同步门店:" + drStore["SECOND_DEP"] + drStore["SHOPNAME"]);
|
||
}
|
||
else
|
||
{
|
||
LogUtil.WriteLog("开始同步门店:" + storeModel.storeName);
|
||
}
|
||
CommonHelper.PostDataToZJHY(storeModel, 0, ZJZCGCMemberHelper.ApiURL + "/merchant/storeSync");
|
||
}
|
||
//获取本次商品更新涉及的分类
|
||
DataTable dtClassify = dtGoods.DefaultView.ToTable(true, "SERVERPARTSHOP_ID", "BUSINESSTYPE",
|
||
"COMMODITYTYPE_ID", "COMMODITYTYPE_PID", "COMMODITYTYPE_NAME", "COMMODITYTYPE_CODE", "SERVERPART_ID");
|
||
foreach (Model.ClassifyModel classifyModel in GetClassifyList(transaction, dtClassify,
|
||
dtGoods.DefaultView.ToTable(true, "COMMODITY_CODE", "COMMODITYTYPE_ID", "SERVERPART_ID", "BUSINESSTYPE")))
|
||
{
|
||
LogUtil.WriteLog("开始同步商品分类菜单:[" + classifyModel.sort + "]" + classifyModel.classifyName);
|
||
CommonHelper.PostDataToZJHY(classifyModel, 0, ZJZCGCMemberHelper.ApiURL + "/merchant/storeClassifySync");
|
||
}
|
||
//遍历商品数据并进行同步
|
||
foreach (DataRow drGoods in dtGoods.DefaultView.ToTable(true, "COMMODITY_TYPE", "COMMODITY_CODE",
|
||
"COMMODITY_NAME", "COMMODITY_UNIT", "COMMODITY_RETAILPRICE").Select("", "COMMODITY_CODE"))
|
||
{
|
||
//绑定商品对象
|
||
Model.GoodsModel goodsModel = new Model.GoodsModel()
|
||
{
|
||
timestamp = HCC.Common.ConvertDataTimeLong(DateTime.Now),
|
||
goodsCode = drGoods["COMMODITY_CODE"].ToString(),
|
||
goodsName = drGoods["COMMODITY_NAME"].ToString(),
|
||
img = "",
|
||
unit = drGoods["COMMODITY_UNIT"].ToString(),
|
||
nowPrice = drGoods["COMMODITY_RETAILPRICE"].ToString()
|
||
};
|
||
//同步商品数据
|
||
LogUtil.WriteLog("开始同步商品:[" + drGoods["COMMODITY_CODE"] + "]" + goodsModel.goodsName);
|
||
CommonHelper.PostDataToZJHY(goodsModel, 0, ZJZCGCMemberHelper.ApiURL + "/merchant/goodsSync");
|
||
}
|
||
//更新门店表数据同步时间
|
||
HCC.Common.AddUpdateAppSettings("LastDateTimeStore", NowTime);
|
||
HCC.Common.AddUpdateAppSettings("LastDateTimeGoods", NowTime);
|
||
}
|
||
#endregion
|
||
|
||
#region 同步商品数据
|
||
public static void SynchroGoodsInfo(Transaction transaction, string LastDateTime)
|
||
{
|
||
List<string> ShopIdList = new List<string>();
|
||
List<string> ClassifyCodeList = new List<string>();
|
||
|
||
string NowTime = DateTime.Now.ToString();
|
||
HWSB.SERVERPARTSHOP _SERVERPARTSHOP = new HWSB.SERVERPARTSHOP(transaction);
|
||
|
||
//查询所有门店信息
|
||
string SQLString = string.Format(@"SELECT
|
||
A.*,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,B.SHOPTRADE,B.ISVALID,B.BUSINESS_STATE,
|
||
C.SERVERPART_X,C.SERVERPART_Y
|
||
FROM
|
||
HIGHWAY_STORAGE.T_ZJHYSPCRT A,
|
||
HIGHWAY_STORAGE.T_SERVERPARTSHOP B,
|
||
HIGHWAY_STORAGE.T_SERVERPART C
|
||
WHERE
|
||
A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPREGION = B.SHOPREGION AND
|
||
A.ZONAL_CODING IS NOT NULL AND B.SHOPCODE IS NOT NULL AND
|
||
B.SERVERPART_ID = C.SERVERPART_ID AND B.SHOPTRADE NOT IN ('9032','9999') AND
|
||
B.ISVALID = 1 AND NVL(B.STATISTICS_TYPE,'0') NOT LIKE '1020%'");
|
||
DataTable dtShop = _SERVERPARTSHOP.ExecuteDataTable(SQLString);
|
||
//查询发生变更的商品数据
|
||
string whereSQL = string.IsNullOrWhiteSpace(LastDateTime) ? "" :
|
||
" AND A.OPERATE_DATE > TO_DATE('" + LastDateTime + "','YYYY/MM/DD HH24:MI:SS')";
|
||
SQLString = string.Format(@"SELECT
|
||
COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_NAME,COMMODITY_UNIT,COMMODITY_RETAILPRICE,
|
||
SERVERPART_ID,BUSINESSTYPE,COMMODITY_STATE,ADDTIME,OPERATE_DATE
|
||
FROM
|
||
HIGHWAY_STORAGE.T_COMMODITY A
|
||
WHERE
|
||
EXISTS (SELECT 1 FROM HIGHWAY_STORAGE.T_ZJHYSPCRT B
|
||
WHERE A.SERVERPART_ID IN (B.SERVERPART_ID,{0})) AND
|
||
A.PROVINCE_CODE = 6618 AND A.BUSINESSTYPE NOT IN (9032){1} AND
|
||
A.OPERATE_DATE <= TO_DATE('{2}','YYYY/MM/DD HH24:MI:SS')",
|
||
WholeServerpartId, whereSQL, NowTime);
|
||
DataTable dtGoods = _SERVERPARTSHOP.ExecuteDataTable(SQLString);
|
||
|
||
if (dtGoods.Rows.Count > 0)
|
||
{
|
||
//同步服务区商品数据
|
||
if (dtGoods.Select("SERVERPART_ID <> " + WholeServerpartId).Length > 0)
|
||
{
|
||
GoodsSync(dtShop, dtGoods.Select("SERVERPART_ID <> " +
|
||
WholeServerpartId).CopyToDataTable(), ShopIdList, ClassifyCodeList);
|
||
}
|
||
//同步统一定价商品数据
|
||
if (dtGoods.Select("SERVERPART_ID = " + WholeServerpartId).Length > 0)
|
||
{
|
||
GoodsSync(dtShop, dtGoods.Select("SERVERPART_ID = " +
|
||
WholeServerpartId).CopyToDataTable(), ShopIdList, ClassifyCodeList);
|
||
}
|
||
}
|
||
|
||
Thread.Sleep(1000);
|
||
|
||
string classifyCodes = HCC.Common.GetInString("COMMODITYTYPE_ID", ClassifyCodeList);
|
||
string ShopIds = HCC.Common.GetInString("SERVERPARTSHOP_ID", ShopIdList);
|
||
|
||
//同步商品分类菜单数据
|
||
SQLString = string.Format(@"SELECT
|
||
A.COMMODITY_TYPE,A.COMMODITY_CODE,A.SERVERPART_ID,A.BUSINESSTYPE,
|
||
B.*,C.SERVERPARTSHOP_ID
|
||
FROM
|
||
HIGHWAY_STORAGE.T_COMMODITY A,
|
||
HIGHWAY_STORAGE.T_COMMODITYTYPE B,
|
||
HIGHWAY_STORAGE.T_SERVERPARTSHOP C
|
||
WHERE
|
||
A.COMMODITY_TYPE = TO_CHAR(B.COMMODITYTYPE_ID) AND
|
||
A.COMMODITY_RETAILPRICE IS NOT NULL AND A.COMMODITY_STATE = 1 AND
|
||
A.SERVERPART_ID IN (C.SERVERPART_ID,{0}) AND
|
||
A.BUSINESSTYPE = C.SHOPTRADE AND C.ISVALID = 1 AND {1}",
|
||
WholeServerpartId, ShopIds.Replace("SERVERPARTSHOP_ID", "C.SERVERPARTSHOP_ID"));
|
||
DataTable dtGoodsCode = _SERVERPARTSHOP.ExecuteDataTable(SQLString);
|
||
//获取本次商品更新涉及的分类
|
||
dtGoodsCode.DefaultView.RowFilter = classifyCodes;
|
||
DataTable dtClassify = dtGoodsCode.DefaultView.ToTable(true, "SERVERPARTSHOP_ID", "BUSINESSTYPE",
|
||
"COMMODITYTYPE_ID", "COMMODITYTYPE_PID", "COMMODITYTYPE_NAME", "COMMODITYTYPE_CODE", "SERVERPART_ID");
|
||
foreach (Model.ClassifyModel classifyModel in GetClassifyList(transaction, dtClassify,
|
||
dtGoodsCode.DefaultView.ToTable(true, "COMMODITY_CODE", "COMMODITYTYPE_ID", "SERVERPART_ID", "BUSINESSTYPE")))
|
||
{
|
||
LogUtil.WriteLog("开始同步商品分类菜单:[" + classifyModel.sort + "]" + classifyModel.classifyName);
|
||
CommonHelper.PostDataToZJHY(classifyModel, 1, ZJZCGCMemberHelper.ApiURL + "/merchant/storeClassifySync");
|
||
}
|
||
|
||
Thread.Sleep(1000);
|
||
|
||
//同步门店数据
|
||
dtShop.DefaultView.RowFilter = ShopIds;
|
||
DataTable dtStore = dtShop.DefaultView.ToTable();
|
||
foreach (Model.StoreModel storeModel in GetStoreList(transaction, dtStore,
|
||
dtGoodsCode.DefaultView.ToTable(true, "COMMODITY_TYPE", "SERVERPART_ID", "BUSINESSTYPE")))
|
||
{
|
||
//开始同步门店数据
|
||
if (dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode).Length > 0)
|
||
{
|
||
DataRow drStore = dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode)[0];
|
||
LogUtil.WriteLog("开始同步门店:" + drStore["SECOND_DEP"] + drStore["SHOPNAME"]);
|
||
}
|
||
else
|
||
{
|
||
LogUtil.WriteLog("开始同步门店:" + storeModel.storeName);
|
||
}
|
||
CommonHelper.PostDataToZJHY(storeModel, 1,
|
||
ZJZCGCMemberHelper.ApiURL + "/merchant/storeSync");
|
||
}
|
||
//更新商品表数据同步时间
|
||
HCC.Common.AddUpdateAppSettings("LastDateTimeGoods", NowTime);
|
||
}
|
||
|
||
#region 同步商品数据
|
||
public static void GoodsSync(DataTable dtShop, DataTable dtGoods, List<string> ShopIdList, List<string> ClassifyCodeList)
|
||
{
|
||
//遍历商品数据并进行同步
|
||
foreach (DataRow drGoods in dtGoods.Rows)
|
||
{
|
||
foreach (DataRow drShop in dtShop.Select("SHOPTRADE = '" + drGoods["BUSINESSTYPE"] + "'" +
|
||
(drGoods["SERVERPART_ID"].ToString() == "109" ? "" : " and SERVERPART_ID = " + drGoods["SERVERPART_ID"])))
|
||
{
|
||
//获取本次商品更新后涉及到的门店
|
||
if (!ShopIdList.Contains(drShop["SERVERPARTSHOP_ID"].ToString()))
|
||
{
|
||
ShopIdList.Add(drShop["SERVERPARTSHOP_ID"].ToString());
|
||
}
|
||
}
|
||
|
||
//如果商品无效了,则下发删除指令;若添加时间和更新时间相差在2s之内,数据认定为新增,否则是更新操作
|
||
int operation = drGoods["COMMODITY_STATE"].ToString() == "0" ? 2 :
|
||
Math.Abs((DateTime.Parse(drGoods["OPERATE_DATE"].ToString()) -
|
||
DateTime.Parse(drGoods["ADDTIME"].ToString())).TotalSeconds) < 3 ? 0 : 1;
|
||
//获取本次商品更新后涉及到的分类
|
||
if (drGoods["COMMODITY_TYPE"].TryParseToInt() != 0 &&
|
||
!ClassifyCodeList.Contains(drGoods["COMMODITY_TYPE"].ToString()))
|
||
{
|
||
ClassifyCodeList.Add(drGoods["COMMODITY_TYPE"].ToString());
|
||
}
|
||
//绑定商品对象
|
||
Model.GoodsModel goodsModel = new Model.GoodsModel()
|
||
{
|
||
timestamp = HCC.Common.ConvertDataTimeLong(DateTime.Now),
|
||
goodsCode = drGoods["COMMODITY_CODE"].ToString(),
|
||
goodsName = drGoods["COMMODITY_NAME"].ToString(),
|
||
img = "",
|
||
unit = drGoods["COMMODITY_UNIT"].ToString(),
|
||
nowPrice = drGoods["COMMODITY_RETAILPRICE"].ToString()
|
||
};
|
||
//同步商品数据
|
||
LogUtil.WriteLog("开始同步商品:[" + drGoods["COMMODITY_CODE"] + "]" + goodsModel.goodsName);
|
||
CommonHelper.PostDataToZJHY(goodsModel, operation, ZJZCGCMemberHelper.ApiURL + "/merchant/goodsSync");
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#endregion
|
||
|
||
#region 同步全部商品
|
||
public static void SynchroWholeGoods(Transaction transaction, string LastDateTime)
|
||
{
|
||
bool ShopUpdate;
|
||
string NowTime = DateTime.Now.ToString();
|
||
|
||
HWSB.SERVERPARTSHOP _SERVERPARTSHOP = new HWSB.SERVERPARTSHOP(transaction);
|
||
//查询所有门店信息
|
||
string SQLString = string.Format(@"SELECT
|
||
A.*,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,B.SHOPTRADE,B.ISVALID,B.BUSINESS_STATE,
|
||
C.SERVERPART_CODE,C.SERVERPART_X,C.SERVERPART_Y
|
||
FROM
|
||
HIGHWAY_STORAGE.T_ZJHYSPCRT A,
|
||
HIGHWAY_STORAGE.T_SERVERPARTSHOP B,
|
||
HIGHWAY_STORAGE.T_SERVERPART C
|
||
WHERE
|
||
A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPREGION = B.SHOPREGION AND
|
||
A.SERVERPART_HYCODE > '0' AND B.SHOPCODE IS NOT NULL AND
|
||
B.SERVERPART_ID = C.SERVERPART_ID AND BUSINESS_STATE = 1000 AND
|
||
B.ISVALID = 1 AND B.SHOPTRADE NOT IN ('9032','9999') AND
|
||
NVL(B.STATISTICS_TYPE,'0') NOT LIKE '%1020%'");
|
||
DataTable dtShop = _SERVERPARTSHOP.ExecuteDataTable(SQLString);
|
||
|
||
foreach (DataRow drServerpart in dtShop.DefaultView.ToTable(true, "SERVERPART_ID", "SERVERPART_CODE",
|
||
"SERVERPART_HYCODE", "SECOND_DEP", "SHOPTRADE").Select("", "SERVERPART_HYCODE,SHOPTRADE"))
|
||
{
|
||
LogUtil.WriteLog(null, "开始同步" + drServerpart["SECOND_DEP"] + drServerpart["SHOPTRADE"],
|
||
DateTime.Now.ToString("yyyyMMdd") + "_ServerpartTrade");
|
||
try
|
||
{
|
||
ShopUpdate = true;
|
||
List<string> ShopIdList = new List<string>();
|
||
List<string> ClassifyCodeList = new List<string>();
|
||
|
||
SQLString = string.Format(@"SELECT
|
||
A.COMMODITY_TYPE,A.COMMODITY_CODE,A.COMMODITY_NAME,
|
||
NVL(A.COMMODITY_UNIT,'*') AS COMMODITY_UNIT,A.COMMODITY_RETAILPRICE,
|
||
A.SERVERPART_ID,A.BUSINESSTYPE,A.COMMODITY_STATE,A.ADDTIME,A.OPERATE_DATE,
|
||
B.*,C.SERVERPARTSHOP_ID
|
||
FROM
|
||
HIGHWAY_STORAGE.T_COMMODITY A,
|
||
HIGHWAY_STORAGE.T_COMMODITYTYPE B,
|
||
HIGHWAY_STORAGE.T_SERVERPARTSHOP C
|
||
WHERE
|
||
A.COMMODITY_TYPE = TO_CHAR(B.COMMODITYTYPE_ID) AND
|
||
A.SERVERPART_ID IN (C.SERVERPART_ID,{0}) AND
|
||
A.COMMODITY_RETAILPRICE IS NOT NULL AND
|
||
A.BUSINESSTYPE = C.SHOPTRADE AND C.ISVALID = 1 AND
|
||
C.SERVERPART_ID = {1} AND A.BUSINESSTYPE = {2}",
|
||
WholeServerpartId, drServerpart["SERVERPART_ID"], drServerpart["SHOPTRADE"]);
|
||
DataTable dtGoods = _SERVERPARTSHOP.ExecuteDataTable(SQLString);
|
||
if (dtGoods.Rows.Count == 0)
|
||
{
|
||
continue;
|
||
}
|
||
LogUtil.WriteLog(null, "开始同步商品共" + dtGoods.Rows.Count + "条",
|
||
DateTime.Now.ToString("yyyyMMdd") + "_ServerpartTrade");
|
||
|
||
//遍历商品数据并进行同步
|
||
foreach (DataRow drGoods in dtGoods.DefaultView.ToTable(true, "COMMODITY_TYPE",
|
||
"COMMODITY_CODE", "COMMODITY_NAME", "COMMODITY_UNIT", "COMMODITY_RETAILPRICE",
|
||
"SERVERPART_ID", "BUSINESSTYPE", "COMMODITY_STATE", "ADDTIME", "OPERATE_DATE").Rows)
|
||
{
|
||
//判断当前门店是不是已经传输过了,如果传过了,要根据商品更新时间传输数据;否则传输全部商品数据
|
||
if (TransmissionShop.Contains(drServerpart["SERVERPART_CODE"].ToString() + drServerpart["SHOPTRADE"]))
|
||
{
|
||
//判断商品的更新时间是否发生变化,若小于上次更新时间则跳过,否则上传更新
|
||
if (!string.IsNullOrWhiteSpace(LastDateTime) &&
|
||
drGoods["OPERATE_DATE"].TryParseToDateTime() <= DateTime.Parse(LastDateTime))
|
||
{
|
||
continue;
|
||
}
|
||
}
|
||
|
||
foreach (DataRow drShop in dtShop.Select("SHOPTRADE = '" + drGoods["BUSINESSTYPE"] + "'" +
|
||
(drGoods["SERVERPART_ID"].ToString() == "109" ? "" : " and SERVERPART_ID = " + drGoods["SERVERPART_ID"])))
|
||
{
|
||
//获取本次商品更新后涉及到的门店
|
||
if (!ShopIdList.Contains(drShop["SERVERPARTSHOP_ID"].ToString()))
|
||
{
|
||
ShopIdList.Add(drShop["SERVERPARTSHOP_ID"].ToString());
|
||
}
|
||
}
|
||
|
||
//如果商品无效了,则下发删除指令;若添加时间和更新时间相差在2s之内,数据认定为新增,否则是更新操作
|
||
int operation = drGoods["COMMODITY_STATE"].ToString() == "0" ? 2 :
|
||
Math.Abs((DateTime.Parse(drGoods["OPERATE_DATE"].ToString()) -
|
||
DateTime.Parse(drGoods["ADDTIME"].ToString())).TotalSeconds) < 3 ? 0 : 1;
|
||
//获取本次商品更新后涉及到的分类
|
||
if (drGoods["COMMODITY_TYPE"].TryParseToInt() != 0 &&
|
||
!ClassifyCodeList.Contains(drGoods["COMMODITY_TYPE"].ToString()))
|
||
{
|
||
ClassifyCodeList.Add(drGoods["COMMODITY_TYPE"].ToString());
|
||
}
|
||
//continue;
|
||
//绑定商品对象
|
||
Model.GoodsModel goodsModel = new Model.GoodsModel()
|
||
{
|
||
timestamp = HCC.Common.ConvertDataTimeLong(DateTime.Now),
|
||
goodsCode = drGoods["COMMODITY_CODE"].ToString(),
|
||
goodsName = drGoods["COMMODITY_NAME"].ToString(),
|
||
img = "",
|
||
unit = drGoods["COMMODITY_UNIT"].ToString(),
|
||
nowPrice = drGoods["COMMODITY_RETAILPRICE"].ToString()
|
||
};
|
||
//同步商品数据
|
||
LogUtil.WriteLog("开始同步商品:[" + drGoods["COMMODITY_CODE"] + "]" + goodsModel.goodsName);
|
||
CommonHelper.PostDataToZJHY(goodsModel, operation, ZJZCGCMemberHelper.ApiURL + "/merchant/goodsSync");
|
||
}
|
||
|
||
if (ClassifyCodeList.Count > 0)
|
||
{
|
||
Thread.Sleep(1000);
|
||
|
||
dtGoods.DefaultView.RowFilter = "COMMODITY_STATE = 1";
|
||
//获取本次商品更新涉及的分类
|
||
string classifyCodes = HCC.Common.GetInString("COMMODITYTYPE_ID", ClassifyCodeList);
|
||
DataTable dtClassify = dtGoods.DefaultView.ToTable(true, "SERVERPARTSHOP_ID", "BUSINESSTYPE",
|
||
"COMMODITYTYPE_ID", "COMMODITYTYPE_PID", "COMMODITYTYPE_NAME", "COMMODITYTYPE_CODE", "SERVERPART_ID");
|
||
foreach (Model.ClassifyModel classifyModel in GetClassifyList(transaction, dtClassify,
|
||
dtGoods.DefaultView.ToTable(true, "COMMODITY_CODE", "COMMODITYTYPE_ID", "SERVERPART_ID", "BUSINESSTYPE")))
|
||
{
|
||
LogUtil.WriteLog("开始同步商品分类菜单:[" + classifyModel.sort + "]" + classifyModel.classifyName +
|
||
",classifyCode:" + classifyModel.classifyCode);
|
||
string result = CommonHelper.PostDataToZJHY(classifyModel, 1,
|
||
ZJZCGCMemberHelper.ApiURL + "/merchant/storeClassifySync");
|
||
try
|
||
{
|
||
//解析接口返回报文内容
|
||
JObject keyValuePairs = JObject.Parse(result);
|
||
if (keyValuePairs["code"].ToString() != "200")
|
||
{
|
||
ShopUpdate = false;
|
||
}
|
||
}
|
||
catch { }
|
||
}
|
||
|
||
//同步门店数据
|
||
if (ShopIdList.Count > 0)
|
||
{
|
||
Thread.Sleep(1000);
|
||
|
||
string ShopIds = HCC.Common.GetInString("SERVERPARTSHOP_ID", ShopIdList);
|
||
dtShop.DefaultView.RowFilter = ShopIds;
|
||
DataTable dtStore = dtShop.DefaultView.ToTable();
|
||
foreach (Model.StoreModel storeModel in GetStoreList(transaction, dtStore,
|
||
dtGoods.DefaultView.ToTable(true, "COMMODITY_TYPE", "SERVERPART_ID", "BUSINESSTYPE")))
|
||
{
|
||
//开始同步门店数据
|
||
if (dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode).Length > 0)
|
||
{
|
||
DataRow drStore = dtStore.Select("SERVERPARTSHOP_ID = " + storeModel.storeCode)[0];
|
||
LogUtil.WriteLog("开始同步门店:" + drStore["SECOND_DEP"] + drStore["SHOPNAME"]);
|
||
}
|
||
else
|
||
{
|
||
LogUtil.WriteLog("开始同步门店:" + storeModel.storeName);
|
||
}
|
||
string result = CommonHelper.PostDataToZJHY(storeModel, 1,
|
||
ZJZCGCMemberHelper.ApiURL + "/merchant/storeSync");
|
||
try
|
||
{
|
||
//解析接口返回报文内容
|
||
JObject keyValuePairs = JObject.Parse(result);
|
||
if (keyValuePairs["code"].ToString() != "200")
|
||
{
|
||
ShopUpdate = false;
|
||
}
|
||
}
|
||
catch { }
|
||
}
|
||
}
|
||
}
|
||
|
||
if (ShopUpdate)
|
||
{
|
||
if (!TransmissionShop.Contains(drServerpart["SERVERPART_CODE"].ToString() + drServerpart["SHOPTRADE"]))
|
||
{
|
||
TransmissionShop += "," + drServerpart["SERVERPART_CODE"] + drServerpart["SHOPTRADE"];
|
||
}
|
||
}
|
||
|
||
LogUtil.WriteLog(null, "开始同步完成", DateTime.Now.ToString("yyyyMMdd") + "_ServerpartTrade");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogUtil.WriteLog(ex, "", DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog");
|
||
}
|
||
}
|
||
//更新商品表数据同步时间
|
||
HCC.Common.AddUpdateAppSettings("LastDateTimeGoods", NowTime);
|
||
//重新写入已经同步的门店数据
|
||
HCC.Common.AddUpdateAppSettings("TransmissionShop", TransmissionShop);
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 获取门店集合
|
||
public static List<Model.StoreModel> GetStoreList(Transaction transaction, DataTable dtStore, DataTable dtclassifyCode = null)
|
||
{
|
||
List<Model.StoreModel> StoreList = new List<Model.StoreModel>();
|
||
|
||
foreach (DataRow drStore in dtStore.Rows)
|
||
{
|
||
Model.StoreModel storeModel = new Model.StoreModel()
|
||
{
|
||
timestamp = HCC.Common.ConvertDataTimeLong(DateTime.Now),
|
||
storeCode = drStore["SERVERPARTSHOP_ID"].ToString(),
|
||
storeName = drStore["SHOPNAME"].ToString(),
|
||
logo = "",
|
||
storeImg = "",
|
||
serviceAreaChildCode = drStore["ZONAL_CODING"].ToString(),
|
||
merchantCode = drStore["SHOPCODE"].ToString(),
|
||
openType = 0,
|
||
lng = drStore["SERVERPART_X"].ToString(),
|
||
lat = drStore["SERVERPART_Y"].ToString(),
|
||
storeClassify = new List<string>()
|
||
};
|
||
//查询当前分类下的商品编码数据
|
||
if (dtclassifyCode == null || dtclassifyCode.Rows.Count == 0)
|
||
{
|
||
string SQLString = string.Format(@"SELECT
|
||
COMMODITY_TYPE,SERVERPART_ID,BUSINESSTYPE
|
||
FROM
|
||
HIGHWAY_STORAGE.T_COMMODITY
|
||
WHERE
|
||
COMMODITY_STATE = 1 AND COMMODITY_RETAILPRICE IS NOT NULL AND
|
||
SERVERPART_ID IN ({0},{1}) AND BUSINESSTYPE = {2}
|
||
GROUP BY COMMODITY_TYPE,SERVERPART_ID,BUSINESSTYPE",
|
||
drStore["SERVERPART_ID"], WholeServerpartId, drStore["SHOPTRADE"]);
|
||
dtclassifyCode = new HWSB.COMMODITY(transaction).ExecuteDataTable(SQLString);
|
||
}
|
||
foreach (DataRow drclassifyCode in dtclassifyCode.Select("SERVERPART_ID = '" + drStore["SERVERPART_ID"] +
|
||
"' AND BUSINESSTYPE = " + drStore["SHOPTRADE"], "COMMODITY_TYPE"))
|
||
{
|
||
storeModel.storeClassify.Add(drStore["SERVERPARTSHOP_ID"].ToString() + drclassifyCode["COMMODITY_TYPE"]);
|
||
}
|
||
//添加商品分类菜单至集合对象中
|
||
StoreList.Add(storeModel);
|
||
}
|
||
|
||
return StoreList;
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 获取商品分类菜单集合
|
||
public static List<Model.ClassifyModel> GetClassifyList(Transaction transaction,
|
||
DataTable dtClassify, DataTable dtGoodsCode)
|
||
{
|
||
List<Model.ClassifyModel> ClassifyList = new List<Model.ClassifyModel>();
|
||
|
||
foreach (DataRow drClassify in dtClassify.Rows)
|
||
{
|
||
Model.ClassifyModel classifyModel = new Model.ClassifyModel()
|
||
{
|
||
timestamp = HCC.Common.ConvertDataTimeLong(DateTime.Now),
|
||
classifyCode = drClassify["SERVERPARTSHOP_ID"] + drClassify["COMMODITYTYPE_ID"].ToString(),
|
||
//parentCode = drClassify["SERVERPARTSHOP_ID"] + drClassify["COMMODITYTYPE_PID"].ToString(),
|
||
classifyName = drClassify["COMMODITYTYPE_NAME"].ToString(),
|
||
sort = drClassify["COMMODITYTYPE_CODE"].TryParseToInt(),
|
||
goodsCodeList = new List<string>()
|
||
};
|
||
//查询当前分类下的商品编码数据
|
||
if (dtGoodsCode == null || dtGoodsCode.Rows.Count == 0)
|
||
{
|
||
string SQLString = string.Format(@"SELECT
|
||
COMMODITY_CODE,SERVERPART_ID,BUSINESSTYPE
|
||
FROM
|
||
HIGHWAY_STORAGE.T_COMMODITY
|
||
WHERE
|
||
COMMODITY_RETAILPRICE IS NOT NULL AND
|
||
COMMODITY_STATE = 1 AND PROVINCE_CODE = 6618 AND
|
||
COMMODITY_TYPE = '{0}' AND SERVERPART_ID IN ({1},{2}) AND BUSINESSTYPE = {3}",
|
||
drClassify["COMMODITYTYPE_ID"], drClassify["SERVERPART_ID"], WholeServerpartId, drClassify["BUSINESSTYPE"]);
|
||
dtGoodsCode = new HWSB.COMMODITY(transaction).ExecuteDataTable(SQLString);
|
||
}
|
||
foreach (DataRow drGoodsCode in dtGoodsCode.Select("SERVERPART_ID = " + drClassify["SERVERPART_ID"] +
|
||
" and BUSINESSTYPE = " + drClassify["BUSINESSTYPE"] + " and COMMODITYTYPE_ID = " +
|
||
drClassify["COMMODITYTYPE_ID"], "COMMODITY_CODE"))
|
||
{
|
||
classifyModel.goodsCodeList.Add(drGoodsCode["COMMODITY_CODE"].ToString());
|
||
}
|
||
//添加商品分类菜单至集合对象中
|
||
ClassifyList.Add(classifyModel);
|
||
}
|
||
|
||
return ClassifyList;
|
||
}
|
||
#endregion
|
||
}
|
||
}
|