Commit 79e87eba authored by 吴春's avatar 吴春

提交代码,支付修改

parent 23e386af
......@@ -117,6 +117,32 @@ namespace Mall.Model.Entity.User
get;
set;
}
/// <summary>
/// 订单来源(平台) 枚举
/// </summary>
public UserSourceEnum? OrderSource
{
get;
set;
}
/// <summary>
/// 订单号
/// </summary>
public string Out_Trade_No
{
get;
set;
}
/// <summary>
/// 微信支付订单号
/// </summary>
public string Transaction_Id
{
get;
set;
}
}
}
......@@ -26,5 +26,11 @@ namespace Mall.Model.Extend.User
/// 结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 导出选项
/// </summary>
public List<int> ExcelEnumIds { get; set; }
}
}
......@@ -132,7 +132,10 @@ namespace Mall.Module.User
/// 不可开发票商品信息记录表
///</summary>
private readonly RB_Invoice_RecordDetailRepository invoiceRecordDetailRepository = new RB_Invoice_RecordDetailRepository();
/// <summary>
/// 会员购买仓储层
/// </summary>
private readonly RB_Member_BuyRepository memberBuyRepository = new RB_Member_BuyRepository();
//private Repository.MarketingCenter.RB_DiscountCouponRepository discountCouponRepository = new Repository.MarketingCenter.RB_DiscountCouponRepository();
//private Repository.User.RB_Member_CouponRepository memberCouponRepository = new Repository.User.RB_Member_CouponRepository();
......@@ -1961,5 +1964,78 @@ namespace Mall.Module.User
}
}
#endregion
#region 普通分销模式会员购买
/// <summary>
/// 修改会员购买
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool UpdateMemberBuy(int UserId, int OrderId, string Out_Trade_No, string Transaction_Id, Common.Enum.Goods.OrderPayTypeEnum PayWay, decimal Money, DateTime Time_End)
{
var umodel = member_UserRepository.GetEntity(UserId);
if (umodel == null)
{
return false;
}
//判断订单状态是否是待支付 2020-06-16 Add By:W
var model = memberBuyRepository.GetEntity(OrderId);
if (model == null)
{
return false;
}
if (model.PayState != 0)
{
return false;
}
if (model.Money != Money)
{
return false;
}
var trans = memberBuyRepository.DbTransaction;
bool flag;
try
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Member_Buy.PayTime),Time_End},
{ nameof(RB_Member_Buy.PayState),1},
{ nameof(RB_Member_Buy.Out_Trade_No),Out_Trade_No},
{ nameof(RB_Member_Buy.Transaction_Id),Transaction_Id}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper{
FiledName=nameof(RB_Member_Buy.Id),
FiledValue=OrderId,
OperatorEnum=OperatorEnum.Equal
}
};
flag = memberBuyRepository.Update(keyValues, wheres, trans);//更新会员购买记录
Dictionary<string, object> keyValuesMember = new Dictionary<string, object>() {
{ nameof(RB_Member_User.MemberGrade),model.GradeId}
};
List<WhereHelper> wheresMember = new List<WhereHelper>() {
new WhereHelper{
FiledName=nameof(RB_Member_User.Id),
FiledValue=model.UserId,
OperatorEnum=OperatorEnum.Equal
}
};
flag = member_UserRepository.Update(keyValuesMember, wheresMember, trans);//更新会员购买记录
memberBuyRepository.DBSession.Commit();
}
catch (Exception ex)
{
LogHelper.Write(ex, "UpdateMemberBuy");
memberBuyRepository.DBSession.Rollback("UpdateMemberBuy");
return false;
}
return flag;
}
#endregion
}
}
......@@ -797,7 +797,8 @@ namespace Mall.Module.User
IsCanBuyVip = (umodel.MemberGrade ?? 0) > 0 ? 2 : 1,
gradeModel.MemberSpecification,
//获取权益列表
EquityList = qlist.Select(x=>new {
EquityList = qlist.Select(x => new
{
x.Id,
x.Title,
x.ImagePath,
......@@ -6413,90 +6414,41 @@ namespace Mall.Module.User
}
/// <summary>
/// 新增会员购买记录
/// 分页列表
/// </summary>
/// <param name="model"></param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">每页显示条数</param>
/// <param name="rowCount">总条数</param>
/// <param name="dmodel">查询条件</param>
/// <returns></returns>
public int AddMemberBuy(RB_Member_Buy_Extend model)
public List<RB_Member_Buy_Extend> GetMemberBuyList(RB_Member_Buy_Extend dmodel)
{
int id = 0;
if (model.Id == 0)
{
id = memberBuyRepository.Insert(model);
}
return id;
return memberBuyRepository.GetList(dmodel);
}
/// <summary>
/// 修改会员购买
/// 新增会员购买记录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool UpdateMemberBuy(int UserId, int OrderId, string Out_Trade_No, string Transaction_Id, Common.Enum.Goods.OrderPayTypeEnum PayWay, decimal Money, DateTime Time_End)
public int AddMemberBuy(RB_Member_Buy_Extend model)
{
var umodel = member_UserRepository.GetEntity(UserId);
if (umodel == null)
{
return false;
}
//判断订单状态是否是待支付 2020-06-16 Add By:W
var model = memberBuyRepository.GetEntity(OrderId);
if (model == null)
{
return false;
}
if (model.PayState != 0)
{
return false;
}
if (model.Money != Money)
int id = 0;
if (model.Id == 0)
{
return false;
id = memberBuyRepository.Insert(model);
}
return id;
}
var trans = memberBuyRepository.DbTransaction;
bool flag;
try
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Member_Buy.PayTime),Time_End},
{ nameof(RB_Member_Buy.PayState),1}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper{
FiledName=nameof(RB_Member_Footmark.Id),
FiledValue=OrderId,
OperatorEnum=OperatorEnum.Equal
}
};
flag = memberBuyRepository.Update(keyValues, wheres, trans);//更新会员购买记录
Dictionary<string, object> keyValuesMember = new Dictionary<string, object>() {
{ nameof(RB_Member_User.MemberGrade),model.GradeId}
};
List<WhereHelper> wheresMember = new List<WhereHelper>() {
new WhereHelper{
FiledName=nameof(RB_Member_User.Id),
FiledValue=model.UserId,
OperatorEnum=OperatorEnum.Equal
}
};
flag = member_UserRepository.Update(keyValuesMember, wheresMember, trans);//更新会员购买记录
memberBuyRepository.DBSession.Commit();
}
catch (Exception ex)
{
LogHelper.Write(ex, "UpdateMemberBuy");
memberBuyRepository.DBSession.Rollback("UpdateMemberBuy");
return false;
}
return flag;
}
#endregion
......
......@@ -47,6 +47,10 @@ namespace Mall.Repository.User
{
where += $@" and u.{nameof(RB_Member_User.Name)} like '%{dmodel.UserName}%'";
}
if (!string.IsNullOrEmpty(dmodel.OrderNo))
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.OrderNo)} like '%{dmodel.OrderNo}%'";
}
if (!string.IsNullOrEmpty(dmodel.StartTime))
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.PayTime)} >= '{dmodel.StartTime}'";
......@@ -62,5 +66,63 @@ where {where} order by b.Id desc";
return GetPage<RB_Member_Buy_Extend>(pageIndex, pageSize, out rowCount, sql).ToList();
}
/// <summary>
/// 分页列表
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">每页显示条数</param>
/// <param name="rowCount">总条数</param>
/// <param name="dmodel">查询条件</param>
/// <returns></returns>
public List<RB_Member_Buy_Extend> GetList(RB_Member_Buy_Extend dmodel)
{
string where = " 1=1 ";
if (dmodel.TenantId > 0)
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.TenantId)}={dmodel.TenantId}";
}
if (dmodel.MallBaseId > 0)
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.MallBaseId)}={dmodel.MallBaseId}";
}
if (dmodel.Id > 0)
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.Id)}={dmodel.Id}";
}
if (dmodel.PayState > -1)
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.PayState)}={dmodel.PayState}";
}
if (dmodel.UserId > 0)
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.UserId)}={dmodel.UserId}";
}
if (!string.IsNullOrEmpty(dmodel.UserName))
{
where += $@" and u.{nameof(RB_Member_User.Name)} like '%{dmodel.UserName}%'";
}
if (!string.IsNullOrEmpty(dmodel.OrderNo))
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.OrderNo)} like '%{dmodel.OrderNo}%'";
}
if (!string.IsNullOrEmpty(dmodel.StartTime))
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.PayTime)} >= '{dmodel.StartTime}'";
}
if (!string.IsNullOrEmpty(dmodel.EndTime))
{
where += $@" and b.{nameof(RB_Member_Buy_Extend.PayTime)} <= '{dmodel.EndTime} 23:59:59'";
}
string sql = $@"select b.*,u.Name as UserName from RB_Member_Buy b
inner join rb_member_user u on b.UserId= u.Id
where {where} order by b.Id desc";
return Get<RB_Member_Buy_Extend>(sql).ToList();
}
}
}
......@@ -39,7 +39,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
_accessor = accessor;
}
/// <summary>
/// 订单支付回调
/// 订单支付回调 作废
/// </summary>
/// <returns></returns>
[HttpGet]
......@@ -159,11 +159,11 @@ namespace Mall.WebApi.Controllers.AppletWeChat
/// <returns></returns>
[HttpGet]
[HttpPost]
public string PointNotify()
public string PointNotify(int MallBaseId, int TenantId)
{
var req = new RequestHandler();
App_Code.PayUtil PayUtil = new App_Code.PayUtil();
var result = PayUtil.Notify(_accessor);
var result = PayUtil.AllNotify(_accessor, MallBaseId, TenantId);
if (result.IsSuccess)
{
var dic = ((Dictionary<string, string>)result.Data);
......@@ -208,9 +208,9 @@ namespace Mall.WebApi.Controllers.AppletWeChat
/// <summary>
/// 订单支付回调
/// 订单支付回调 作废
/// </summary>
/// <returns></returns>
/// <returns></returns>
[HttpGet]
[HttpPost]
public string NotifyZhouTian()
......@@ -269,11 +269,11 @@ namespace Mall.WebApi.Controllers.AppletWeChat
/// <returns></returns>
[HttpGet]
[HttpPost]
public string RechargeNotify()
public string RechargeNotify(int MallBaseId, int TenantId)
{
var req = new RequestHandler();
App_Code.PayUtil PayUtil = new App_Code.PayUtil();
var result = PayUtil.Notify(_accessor);
var result = PayUtil.AllNotify(_accessor, MallBaseId, TenantId);
if (result.IsSuccess)
{
var dic = ((Dictionary<string, string>)result.Data);
......@@ -323,12 +323,12 @@ namespace Mall.WebApi.Controllers.AppletWeChat
/// <returns></returns>
[HttpGet]
[HttpPost]
public string VipBuyNotify()
public string VipBuyNotify(int MallBaseId, int TenantId)
{
LogHelper.Write(null, "VipBuyNotify返回信息进来了");
var req = new RequestHandler();
App_Code.PayUtil PayUtil = new App_Code.PayUtil();
var result = PayUtil.Notify(_accessor);
var result = PayUtil.AllNotify(_accessor, MallBaseId, TenantId);
if (result.IsSuccess)
{
var dic = ((Dictionary<string, string>)result.Data);
......@@ -370,54 +370,53 @@ namespace Mall.WebApi.Controllers.AppletWeChat
///// <summary>
///// 会员购买支付回调
///// </summary>
///// <returns></returns>
//[HttpGet]
//[HttpPost]
//public string MemberBuyNotify()
//{
// var req = new RequestHandler();
// App_Code.PayUtil PayUtil = new App_Code.PayUtil();
// var result = PayUtil.Notify(_accessor);
// if (result.IsSuccess)
// {
// var dic = ((Dictionary<string, string>)result.Data);
// //开始回写订单状态
// lock (_lock)
// {
// string sOrderNo = dic["sOrderNo"];//订单号 时间挫+OrderId
// int OrderId = Convert.ToInt32(sOrderNo[17..]);
// decimal dPaid = Convert.ToDecimal(dic["dPrice"]) / 100;
// string sPayerOpenID = dic["sPayerOpenID"];
// int UserId = Convert.ToInt32(dic["bIsRecharge"]);
// string TransactionId = dic["sTradeNo"];
// string PayType = dic["OrderPayType"];
// DateTime PayDate = DateTime.ParseExact(dic["PayDate"], "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);//转换时间
// #region 修改会员购买支付信息
// userModule.UpdateMemberBuy(UserId, OrderId, sOrderNo, TransactionId, Common.Enum.Goods.OrderPayTypeEnum.WeChatPay, dPaid, PayDate);
// #endregion
// }
// //告诉微信我们已经处理成功,不需要再调用我们的接口了
// req.SetParameter("return_code", "SUCCESS");
// req.SetParameter("return_msg", "OK");
// var reqXml = req.ParseXml();
// return reqXml;
// // return ApiResult.Success("", reqXml);
// }
// else
// {
// req.SetParameter("return_code", "FAIL");
// req.SetParameter("return_msg", "订单失败");
// var reqXmlFAIL = req.ParseXml();
// LogHelper.Write(null, "Notify返回信息:" + reqXmlFAIL);
// return reqXmlFAIL;
// // return ApiResult.Failed("", reqXmlFAIL);
// }
//}
/// <summary>
/// 会员购买支付回调
/// </summary>
/// <returns></returns>
[HttpGet]
[HttpPost]
public string MemberBuyNotify(int MallBaseId, int TenantId)
{
var req = new RequestHandler();
App_Code.PayUtil PayUtil = new App_Code.PayUtil();
var result = PayUtil.AllNotify(_accessor, MallBaseId, TenantId);
if (result.IsSuccess)
{
var dic = ((Dictionary<string, string>)result.Data);
//开始回写订单状态
lock (_lock)
{
string sOrderNo = dic["sOrderNo"];//订单号 时间挫+OrderId
int OrderId = Convert.ToInt32(sOrderNo[17..]);
decimal dPaid = Convert.ToDecimal(dic["dPrice"]) / 100;
string sPayerOpenID = dic["sPayerOpenID"];
int UserId = Convert.ToInt32(dic["bIsRecharge"]);
string TransactionId = dic["sTradeNo"];
string PayType = dic["OrderPayType"];
DateTime PayDate = DateTime.ParseExact(dic["PayDate"], "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);//转换时间
#region 修改会员购买支付信息
userCommonModule.UpdateMemberBuy(UserId, OrderId, sOrderNo, TransactionId, Common.Enum.Goods.OrderPayTypeEnum.WeChatPay, dPaid, PayDate);
#endregion
}
//告诉微信我们已经处理成功,不需要再调用我们的接口了
req.SetParameter("return_code", "SUCCESS");
req.SetParameter("return_msg", "OK");
var reqXml = req.ParseXml();
return reqXml;
// return ApiResult.Success("", reqXml);
}
else
{
req.SetParameter("return_code", "FAIL");
req.SetParameter("return_msg", "订单失败");
var reqXmlFAIL = req.ParseXml();
LogHelper.Write(null, "Notify返回信息:" + reqXmlFAIL);
return reqXmlFAIL;
// return ApiResult.Failed("", reqXmlFAIL);
}
}
}
}
\ No newline at end of file
......@@ -189,7 +189,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
switch ((int)demodel.PayWay)
{
case 1://微信支付
sPayInfo = App_Code.PayUtil.GetMinUnifiedOrder(sOrderNo, payGoodsName, Convert.ToDecimal(rechargeRulesModel.Money), userInfo.UserId.ToString(), userModel.OpenId, Config.sTenpayRechargeNotify, miniProgram, _accessor, System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString());
sPayInfo = App_Code.PayUtil.GetMinUnifiedOrder(sOrderNo, payGoodsName, Convert.ToDecimal(rechargeRulesModel.Money), userInfo.UserId.ToString(), userModel.OpenId, (Config.sTenpayRechargeNotify + "/" + demodel.MallBaseId + "/" + demodel.TenantId) , miniProgram, _accessor, System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString());
break;
default:
break;
......@@ -357,6 +357,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
demodel.TenantId = userInfo.TenantId;
demodel.PayState = 0;
demodel.Status = 0;
demodel.OrderSource = Common.Enum.User.UserSourceEnum.WeiXin;
demodel.CreateDate = DateTime.Now;
//新增充值记录
int memberBuyId = userModule.AddMemberBuy(demodel);
......@@ -372,7 +373,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
switch ((int)demodel.PayWay)
{
case 1://微信支付
sPayInfo = App_Code.PayUtil.GetMinUnifiedOrder(sOrderNo, payGoodsName, Convert.ToDecimal(rechargeRulesModel.MemberBuyMoney), userInfo.UserId.ToString(), userModel.OpenId, Config.sTenpayMemberBuyNotify, miniProgram, _accessor, System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString());
sPayInfo = App_Code.PayUtil.GetMinUnifiedOrder(sOrderNo, payGoodsName, Convert.ToDecimal(rechargeRulesModel.MemberBuyMoney), userInfo.UserId.ToString(), userModel.OpenId, (Config.sTenpayMemberBuyNotify + "/" + demodel.MallBaseId + "/" + demodel.TenantId), miniProgram, _accessor, System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString());
break;
default:
break;
......@@ -485,7 +486,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
switch ((int)demodel.PayWay)
{
case 1://微信支付
sPayInfo = App_Code.PayUtil.GetMinUnifiedOrder(sOrderNo, payGoodsName, Convert.ToDecimal(rechargeRulesModel.BuyMoney), userInfo.UserId.ToString(), userModel.OpenId, Config.sTenpayVipBuyNotify, miniProgram, _accessor, System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString());
sPayInfo = App_Code.PayUtil.GetMinUnifiedOrder(sOrderNo, payGoodsName, Convert.ToDecimal(rechargeRulesModel.BuyMoney), userInfo.UserId.ToString(), userModel.OpenId, (Config.sTenpayVipBuyNotify + "/" + demodel.MallBaseId + "/" + demodel.TenantId) , miniProgram, _accessor, System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString());
break;
default:
break;
......
......@@ -771,6 +771,107 @@ namespace Mall.WebApi.Controllers.User
});
return ApiResult.Success("", pagelist);
}
/// <summary>
/// 获取会员购买导出选项列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMembersToBuyExportEnumList()
{
var list = EnumHelper.GetEnumList(typeof(Common.Enum.Goods.MembersToBuyExportEnum));
return ApiResult.Success("", list.Select(x => new
{
Name = x.Key,
Id = Convert.ToInt32(x.Value)
}));
}
/// <summary>
/// 会员购买Excel下载
/// </summary>
[HttpPost]
public FileContentResult GetMembersToBuyToExcel()
{
var parms = RequestParm;
RB_Member_Buy_Extend demodel = JsonConvert.DeserializeObject<RB_Member_Buy_Extend>(parms.msg.ToString());
string ExcelName = "会员购买" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
List<ExcelDataSource> slist = new List<ExcelDataSource>();
if (demodel.ExcelEnumIds == null || !demodel.ExcelEnumIds.Any())
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
var Enumlist = EnumHelper.GetEnumList(typeof(Common.Enum.Goods.MembersToBuyExportEnum));
ExcelDataSource header = new ExcelDataSource()
{
ExcelRows = new List<ExcelColumn>(30) {
new ExcelColumn(value: "序号") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER }
}
};
foreach (var item in demodel.ExcelEnumIds)
{
var Name = Enumlist.Where(x => x.Value == item.ToString()).FirstOrDefault().Key ?? "";
header.ExcelRows.Add(new ExcelColumn(value: Name) { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER });
}
slist.Add(header);
try
{
demodel.TenantId = Convert.ToInt32(parms.uid);
demodel.MallBaseId = parms.MallBaseId;
demodel.PayState = 1;
var list = userModule.GetMemberBuyList(demodel);
#region 组装数据
int Num = 0;
foreach (var item in list)
{
Num++;
ExcelDataSource datarow = new ExcelDataSource()
{
ExcelRows = new List<ExcelColumn>(30) {
new ExcelColumn(value:Num.ToString()){ },
}
};
foreach (var qitem in demodel.ExcelEnumIds)
{
switch (qitem)
{
case 1:
datarow.ExcelRows.Add(new ExcelColumn(value: item.OrderSource.GetEnumName()) { }); break;
case 2:
datarow.ExcelRows.Add(new ExcelColumn(value: item.OrderNo) { }); break;
case 3:
datarow.ExcelRows.Add(new ExcelColumn(value: item.UserName) { }); break;
case 4:
datarow.ExcelRows.Add(new ExcelColumn(value: (item.Money ?? 0).ToString()) { }); break;
case 5:
datarow.ExcelRows.Add(new ExcelColumn(value: item.PayTime.Value.ToString("yyyy-MM-dd HH:mm:ss")) { }); break;
case 6:
datarow.ExcelRows.Add(new ExcelColumn(value: item.PayState == 0 ? "未支付" : "已支付") { }); break;
}
}
slist.Add(datarow);
}
#endregion
var byteData = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData, "application/octet-stream", ExcelName);
}
catch (Exception ex)
{
LogHelper.Write(ex, string.Format("GetFileFromWebApi_requestData: {0}", JsonHelper.Serialize(RequestParm)));
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
}
#endregion
#region 分销商基础
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment