您现在的位置是:网站首页> 过往作品
ASP.NET开发框架
- 过往作品
- 2025-09-08
- 3494人已阅读
ASP.NET开发框架
更快捷创建需要的WEB应用程序
ERR_CONTENT_LENGTH_MISMATCH错误由于使用的代理或VPN问题
百度地图封装使用参考智慧农业模块
框架占位文件:index.aspx 必须
框架客户端调用例子见项目目录下的WinForm测试框架(app登录,SQL直入,框架常用函数)
系统RFID工作流程重要函数根据RFID获得当前RFID操作步骤信息-CoreSYS.SYS flowsXNGet,如物流(BaseOnceRfid)通过函数:getXNFlowStepByRfid调用,上传数据:postXNRfidStep(HttpContext ctx, Object m_Parame)
BaseJsonMode初始工作函数SetEngineInterface
企业部门可以指定角色,便于指定部门及以下只能使用哪些角色
####配置文件Web.config:同级代理在一个企业,放开判断子代理权限,nginx端口映射部署,锁定函数,启用页面缓存,系统SAAS开启,客户端通讯加密,SQL直入返回加密,支持三级营销
框架一些典型使用例子见模版项目(耗时函数等):模块模板项目.rar
****模块之间相互调用****
***C# .NET4.5用 IHttpHandler如何编写SSE服务***
C#自研框架中LayIM使用
同级代理在一个企业,放开判断子代理权限,nginx端口映射部署,锁定函数,启用页面缓存,系统SAAS开启,客户端通讯加密,SQL直入返回加密,支持三级营销
<add key="本站域名" value="www.1xn1.com" />
<add key="默认模块" value="Software" />
<add key="P2P服务名" value="WEB101" />
<!--对应的配置
-->
<!--用户相关服务-->
<add key="ServerNO" value="NO4" />
<!--
用户登录信息存储,和ServerNO相关
UserServerName = System.Configuration.ConfigurationManager.AppSettings["ServerNO"];
public bool SaveCacheSessionLink(HttpContext ctx, SessionLink m_SessionLink)
{
if (XNMemCache.SetOBJ<SessionLink>(ctx, m_SessionLink.sessionID, m_SessionLink))
{
XNMemCache.SetOBJ<SessionLink>(ctx, m_SessionLink.sys_users_nodeuuid + "_"+UserServerName+"_SessionLink", m_SessionLink);
return SaveCookie(ctx, "sessionID", m_SessionLink.sessionID);
}
return false;
}
-->
<add key="分布式库" value="true" />
<add key="平台试测" value="false" />
<!--
当平台试测=true时,设置有CoreSYS.SYS函数NODebug的权限才可登录调用
-->
<add key="采用页面缓存" value="true" />
<!--
BaseJsonMode.VIEWCACHE等于TRUE那么使用页面缓存,要缓存哪个页面函数调用函数:
InsertViewCacheFunction(string ViewCreateFullClassName, string ViewCreateFunctionName, int nDelaySecond, PageCacheType m_PageCacheType = PageCacheType.NoLogin)
public enum PageCacheType
{
NoLogin,
LoginJS,
LoginCompanyJS,
LoginOrgJS,
LoginUser,
NoLogin_JS,
NoLogin_User,
NeedPageModel,
}
-->
<add key="后端任务线程" value="1" />
<!--
后端任务线程数量
通过static protected void AddOneRunWork(DataFromFunction m_DataFromFunction, WorkRunFunction m_WorkRunFunction)添加后端任务
/*
m_InParame:输入数据
m_WorkRunFunctionInParame: 输出执行函数的输入参数
t:需要等待的时间
bOver:是否结束任务
*/
public delegate bool DataFromFunction(Object m_InParame, out Object m_WorkRunFunctionInParame, out DateTime t,out bool bOver);
public delegate void WorkRunFunction(Object m_InParame,out Object m_NextInParame);
-->
<add key="CacheType" value="REDIS" />
<!--
缓存采用redis存储
-->
<add key="支持三级营销" value="true" />
<!--
CoreSYS.SYS
static private bool isDisSellsFunc()
{
string sss = GetConfigKeyString("支持三级营销");
try
{
return Convert.ToBoolean(sss);
}
catch
{
}
return false;
}
参数在CoreSYS.SYS订单函数内用到
static public ReturnJson CreateCartOrder(HttpContext ctx, Object m_Parame)
交易成功通知里使用到
CoreSYS.SYS
static public bool XNNodifyPayCartMessage(string sys_weixinsites_shoppingcart_buyrecords_nodeuuid, string paystatus, string goodsstatustext, string paytype, out string sMsg,out List<OrderMessage> m_OrderMessageList)
-->
<add key="时间服务地址" value="http://127.0.0.1:8081" />
<!--
BaseJsonMode:
string HttpTimeUrl = System.Configuration.ConfigurationManager.AppSettings["时间服务地址"].ToString();
if(NodeMsgEngineSDK.NodeMsgCall.InitSingleSDK(HttpTimeUrl))
-->
<add key="启用WS节点" value="true" />
<!--
WSCoreEngine:
bWSNodeUse = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["启用WS节点"]);
启动WS节点服务
-->
<add key="WS服务节点名" value="WEB101" />
<!--
WSCoreEngine:
string sP2PName = System.Configuration.ConfigurationManager.AppSettings["WS服务节点名"];
WSNodeP2PName = sP2PName;
-->
<add key="WS桥接服务名" />
<!--
WSCoreEngine:
string sP2PName = System.Configuration.ConfigurationManager.AppSettings["WS桥接服务名"];
if (string.IsNullOrEmpty(sP2PName))
{
}
else
{
WSLinkNodeP2PName = sP2PName;
-->
<add key="可发布个人产品" value="true" />
<!--
weixin:控制微信是否可以发个人产品
if(GetConfigKeyString("可发布个人产品").ToUpper()=="TRUE")
{
bGlobalPublishPersonGood=true;
}
-->
<add key="同级代理在一个企业" value="false" />
<!--
CoreSYS.SYS:
bAgintOneCOM = Convert.ToBoolean(GetConfigKeyString("同级代理在一个企业"));
当用户是代理时查询企业
sqlStr = "select c.company,c.sys_companys_nodeuuid from sys_companys c ";
List<Hashtable> m_Array1 = new List<Hashtable>();
if(bAgintOneCOM)
{
sqlStr += " where (c.addusername=@adduername) ";
}
else
sqlStr += " where (c.addusername=@adduername or c.sys_companys_nodeuuid='" + m_SessionLink.sys_companys_nodeuuid + "') ";
m_Array1.Add(NodeDBEngine.VarString("@adduername", m_SessionLink.username));
-->
<add key="放开判断子代理权限" value="false" />
<!--
是否可查看下级代理创建企业基本信息
CoreSYS.SYS:
bCanLookChildAgintCOM = Convert.ToBoolean(GetConfigKeyString("放开判断子代理权限"));
static protected bool CanLookChildAgentCompanyBaseInfo(HttpContext ctx, string sys_js_uuid)
{
if (!bCanLookChildAgintCOM)
return false;
。。。
}
static public ReturnJson HaveHYPowerFromCompanyID_共享函数(HttpContext ctx, Object m_Parame)
{
if (bCanLookChildAgintCOM)
{
return IsMyOrChildAgentCompany_共享函数(ctx, m_Parame);
}
else
{
return IsMyAgentCompany_共享函数(ctx, m_Parame);
}
}
-->
<add key="nginx端口映射部署" value="false" />
<!--
CoreEngine:
BaseJsonMode.bNAT = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["nginx端口映射部署"]);
CoreSYS:
UPFileServicePubURL = GetConfigKeyString("本文件上传服务对外地址");
上传文件后文件赋予的URL地址:
string Url = UPFileServicePubURL;
if (string.IsNullOrEmpty(Url))
{
Url = GetHostUrl(ctx);
if (BaseJsonMode.bNAT)
{
Url = "";
}
}
-->
<add key="本文件上传服务对外地址" value="" />
<!--
CoreEngine:
BaseJsonMode.bNAT = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["nginx端口映射部署"]);
CoreSYS:
UPFileServicePubURL = GetConfigKeyString("本文件上传服务对外地址");
上传文件后文件赋予的URL地址:
string Url = UPFileServicePubURL;
if (string.IsNullOrEmpty(Url))
{
Url = GetHostUrl(ctx);
if (BaseJsonMode.bNAT)
{
Url = "";
}
}
-->
<add key="即时通讯" value="true" />
<!--
CoreSYS mainIM函数
主页面是否启用即时通讯
bool bIM = false;
if(!string.IsNullOrEmpty(GetConfigKeyString("即时通讯")))
{
-->
<add key="客户端通讯加密" value="true" />
<!--
CoreEngine:
bAppJM = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["客户端通讯加密"]);
public void ExeAppAction(HttpContext ctx, InvokeInfo m_InvokeInfo)
{
if (IsAttack(ctx, m_InvokeInfo))
return;
HttpResponse Response = ctx.Response;
bool bZip = false;
bool useAppKey = false;
if (!m_InvokeInfo.bCanClient)
{
ReturnST m_ReturnST = new ReturnST();
m_ReturnST.bOK = false;
m_ReturnST.sMsg = "客户端无权调用该函数";
ReturnPageNet(null, Response, bZip, m_ReturnST, -1, false);
return;
}
if (bAppJM)
{
if (m_InvokeInfo.FunctionName.ToLower().Trim().IndexOf("app_") != 0)
{
useAppKey = true;
}
}
if (!useAppKey)
{
....
}
else
{
string appkey = ctx.Request.Headers["appkey"];
if (string.IsNullOrWhiteSpace(appkey))
{
ReturnST m_ReturnST = new ReturnST();
m_ReturnST.bOK = false;
m_ReturnST.sMsg = "非法调用:" + m_InvokeInfo.ClassFullName + "," + m_InvokeInfo.FunctionName;
ReturnPageNet(null, Response, bZip, m_ReturnST, -1, false);
}
else
{
appkey = "APPKEY_" + appkey;
string rand = "";
if (XNMemCache.GetOBJ<string>(ctx, appkey, out rand, 30))
{
WriteLog("读缓存" + appkey + ",内rand:" + rand);
if (rand.Length == 16)
{
byte[] bytes = new byte[ctx.Request.InputStream.Length];
ctx.Request.InputStream.Read(bytes, 0, bytes.Length);
string sText = System.Text.Encoding.UTF8.GetString(bytes);
WriteLog("解密前sText:" + sText);
if (sText != "")
{
sText = AESJavaASPDotNet.DecodeAES(sText, rand, "1234567890abcdef");
}
sText = sText.Replace("\0", "");
WriteLog("解密后sText:" + sText);
PostJson m_PostJson = new PostJson();
RunModeFunction m_RunModeFunction = new RunModeFunction();
m_PostJson.m_Parame = m_RunModeFunction;
m_RunModeFunction.ClassFullName = m_InvokeInfo.ClassFullName;
m_RunModeFunction.FunctionName = m_InvokeInfo.FunctionName;
Hashtable m_ParameHH = new Hashtable();
if (sText == "")
{
m_RunModeFunction.m_Parame = m_ParameHH;
}
else
{
try
{
m_ParameHH = JsonHelper.JsonStrToOBJ<Hashtable>(sText);
m_RunModeFunction.m_Parame = m_ParameHH;
}
catch
{
m_RunModeFunction.m_Parame = m_ParameHH;
}
}
if (m_ParameHH.ContainsKey("LGKey"))
{
m_PostJson.LGKey = m_ParameHH["LGKey"].ToString();
}
ActPageJson(ctx, m_PostJson, m_InvokeInfo, false, false, "APP");
}
else
{
ReturnST m_ReturnST = new ReturnST();
m_ReturnST.bOK = false;
m_ReturnST.sMsg = "非法appkey";
ReturnPageNet(null, Response, bZip, m_ReturnST, -1, false);
}
}
else
{
ReturnST m_ReturnST = new ReturnST();
m_ReturnST.bOK = false;
m_ReturnST.sMsg = "非法appkey,或已经失效";
ReturnPageNet(null, Response, bZip, m_ReturnST, -1, false);
}
}
}
-->
<add key="LayUIMain" value="false" />
<!--
是否使用LayUI界面
-->
<add key="LayUI商业授权" value="false" />
<!--
layUI是否商业授权,授权使用商业授权代码否则用开源的界面
-->
<add key="SQL直入返回加密" value="true" />
<!--
SQLNode:
bReturnJM = Convert.ToBoolean(GetConfigKeyString("SQL直入返回加密"));
if (bReturnJM)
{
m_ReturnJson.m_ReturnOBJ = PublicDES.Encode(JsonHelper.OBJToJsonStr(m_XNActSQLVar_Out), MyMarkKey);
}
else
{
m_ReturnJson.m_ReturnOBJ = m_XNActSQLVar_Out;
}
string SQLString = "select * from sys_p2pweb";
bool bOK;
DataSet pSet=m_NodeDBEngine.XNGetRecord(SQLString,out bOK);
if (bOK)
{
for (int i = 0; i < pSet.Tables[0].Rows.Count; i++)
{
string server = pSet.Tables[0].Rows[i]["server"].ToString();
oneP2PMark m_oneP2PMark = new oneP2PMark();
m_oneP2PMark.IP = pSet.Tables[0].Rows[i]["ip"].ToString();
m_oneP2PMark.mark = pSet.Tables[0].Rows[i]["markkey"].ToString();
m_NameToP2PMarkDIC[server] = m_oneP2PMark;
if(server==MyP2PName)
{
MyMarkKey = m_oneP2PMark.mark;
}
}
}
-->
<add key="系统SAAS开启" value="true" />
<!--
BaseJsonMode:
enableSystemSAA = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["系统SAAS开启"].ToString());
static public bool useSystemSAAS()
{
return enableSystemSAA ;
}
JsonModeEngineCode:
private bool SAAS_OK20210505(HttpContext ctx, Type t, string FName, Object m_InParame, out Object m_OutParame, out string sMsg)
{
if(BaseJsonMode.useSystemSAAS())
{
return SAAS_OK_systemSAAS(ctx, t, FName, m_InParame, out m_OutParame, out sMsg);
}
private bool getSiteInfoHH(HttpContext ctx, out Hashtable m_outHH)
{
...
if (BaseJsonMode.useSystemSAAS())
{
}
-->
框架服务节点管理包含MSMQ服务
菜单:
列表
新建服务节点
节点库管理
节点IP消息名管理
MQTT HMQ的http认证配置
AuthMQTT_RawJson 一般用户连接验证
AuthALCMQTT_RawJson 用户订阅发布消息验证
AuthSupperMQTT_RawJson 超级用户连接验证
订阅与发布验证
AuthSubFreeMQTT(ctx, topic, username, clientid)
AuthPubFreeMQTT(ctx, topic, username, clientid)
框架后台嵌入个人自己的小站
/userblog/insertInManager.aspx
获得URL前缀
List<string> sitesList = BaseJsonMode.GetUrlDotListString(ctx);
当带前缀时候比如 http://www.test.com/hello/SS/index.aspx
那么得到的是hello在列表里
如是:http://www.test.com/hello/AA/SS/index.aspx
那么得到的是hello,AA在列表里
框架函数调用异步函数
static async private Task<string>AsyncFunc(ManualResetEvent m_T)
{
Task<string> task = Task.Run<string>(() =>
{
Thread.Sleep(10000); //模拟耗时
return "hello world";
});
string str = await task;
m_T.Set();
return str;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson Hello(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
ManualResetEvent m_T = new ManualResetEvent(false);
Task<string> m_TT= AsyncFunc(m_T);
m_T.WaitOne();
m_ReturnJson.sMsg=m_TT.GetAwaiter().GetResult();
m_T = null;
return m_ReturnJson;
}
C# async 函数
public async static void GetInfoAsync()
{
Task<bool> task = Task.Run<bool>(() =>
{
Thread.Sleep(10000); //模拟耗时
return true;
});
//以下两种方式
bool taskResult1 = await task; //内部自己执行了GetAwaiter()
bool taskResult = task.GetAwaiter().GetResult(); //自己手动执行Awaiter(), 但是阻塞UI
Console.WriteLine(taskResult);
}
一个上传文件的例子
async Task<string> UpFile()
{
System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
var content = new MultipartFormDataContent();
//添加字符串参数,参数名为qq
//content.Add(new StringContent("123456"), "qq");
string path = "g:\\1.png";// Path.Combine(System.Environment.CurrentDirectory, "1.png");
//添加文件参数,参数名为files,文件名为123.png
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(path));
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
content.Add(fileContent, "image", "123.png");
content.Add(new StringContent("chaoneng"), "apiType");
content.Add(new StringContent("14ff9ab178c34097ff171964fdb166f4"), "token");
var requestUri = new Uri("https://www.hualigs.cn/api/upload"); //"https://www.hualigs.cn/api/upload";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| (SecurityProtocolType)0x300 //Tls11
| (SecurityProtocolType)0xC00; //Tls12
var response = await client.PostAsync(requestUri, content);
string url = "";
if (response.IsSuccessStatusCode)
{
Console.WriteLine("上传成功!");
var result = response.Content.ReadAsStringAsync().Result;
//MessageBox.Show(result);
try
{
Hashtable m_HH = JsonHelper.JsonStrToOBJ<Hashtable>(result);
if (m_HH.ContainsKey("code"))
{
string code = m_HH["code"].ToString();
if (code == "200")
{
if (m_HH.ContainsKey("data"))
{
Hashtable m_dataHH = JsonHelper.OBJToType<Hashtable>(m_HH["data"]);
if (m_dataHH.ContainsKey("url"))
{
Hashtable m_urlHH = JsonHelper.OBJToType<Hashtable>(m_dataHH["url"]);
if (m_urlHH.ContainsKey("distribute"))
{
Console.WriteLine(m_urlHH["distribute"].ToString());
//MessageBox.Show(m_urlHH["distribute"].ToString());
url = m_urlHH["distribute"].ToString();
}
}
else
{
MessageBox.Show("数据解析异常:" + result);
}
}
else
{
MessageBox.Show("数据解析异常:" + result);
}
}
else
{
string str = "错误码:" + code;
if (m_HH.ContainsKey("msg"))
{
str += "," + m_HH["msg"].ToString();
}
MessageBox.Show(str);
}
}
else
{
MessageBox.Show("数据解析异常:" + result);
}
}
catch
{
}
}
else
{
MessageBox.Show("上传异常");
}
/*
Task<string> task = Task.Run<string >(() =>
{
return url;
});
*/
return url;
}
async private void button29_Click(object sender, EventArgs e)
{
string str = await UpFile();
MessageBox.Show(str);
}
关于资源路径GetResourceUrl
<add key="资源站点" value="" />
<add key="nginx端口映射部署" value="false" />
BaseJsonMode:
static public string GetResourceUrl(HttpContext ctx)
{
if(string.IsNullOrWhiteSpace(sResourceUrl))
{
if (bNAT)
{
return "";
}
else
{
return GetHostUrl(ctx);
}
}
else
{
return sResourceUrl;
}
}
MyBasePageView:
static protected string GetResourceUrl(HttpContext ctx)
{
return BaseJsonMode.GetResourceUrl(ctx);
}
特别注意文件上传配置
配置文件:<add key="本文件上传服务对外地址" value="http://localhost:5441" />
如为空那么取本地地址,否则就取配置地址
企业介绍页
地址:/CoreSYS.SYS/CompanyMain.aspx
用户注册相关函数
canRegister_共享函数
registerUser
registerHYUser
registerSiteUser
RegisterUser_API
RegisterVG
[查询域名是否在行业域名列表(sys_domains)里,没有那么]看行业是否绑定该域名,如有那么看是否有行业默认角色,没有那么查找域名是否为企业站点个人站点的域名(sys_sitemains表),如有那么获得企业,否则获得微信主站的企业作为企业,看企业是否有默认校色,如有默认角色可注册,关于微信注册(注意设置不登录交易,就可以自登陆)
registerUser、registerSpreadUser注册用户企业设置了默认角色的
registerHYUser注册行业账户,参数:(tradeclass,defaultjs),如无那么和registerUser一样
registerSiteUser注册到指定企业postsys_companys_nodeuuid
开通注册也就是开启行业自助注册,设置企业默认角色
关于域名绑定
域名绑定判断函数在XNWebEngine->JsonModeEngine->GetDefaultJsonMode
好站狙击通过域名绑定开多站
域名绑定:
绑定域名,标识码就是URL里的前缀 如 http://126.com/helllo/ss/index.aspx 其中hello就是前缀
这个站群的表示码就是前面的识别码
导航站群选择前边添加的导航站群通标识码这样就绑定到了域名
如为绑定域名可以使用标识前缀访问如标识是Soft,那么可访问为
http://xxx.com/Soft/SS/index.aspx
微站获得用户的微信信息
设置微信菜单认证跳转
wxmain函数最后获得用户信息的处理
会传入code参数
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
if (m_HH.ContainsKey("code"))
{
string CODE = m_HH["code"].ToString();
WriteLog("WXMain2 code:" + CODE);
string sText = "";
string appid = "";
string appsecrt = "";
string weixin_sites_nodeuuid = "";
string token = "";
bool bMainSite;
GetAppIdAndAppsecrt(ctx, out appid, out appsecrt, out token, out weixin_sites_nodeuuid, out bMainSite);
if (!WeiXinEngine.GetUserFromCode(ctx, CODE, out sText, appid, appsecrt))
{
//WriteLog("WXMain2 GetUserFromCode失败");
return main(ctx, m_Parame);
}
Hashtable info = new Hashtable();
JsonHelper.JsonToHashtable(sText, info);
if (!KeyIsOK(info, "openid"))
{
//WriteLog("openid error");
return main(ctx, m_Parame);
}
string openid = info["openid"].ToString();
WeiXinOpenidInfo userinfo = new WeiXinOpenidInfo();
if (!WeiXinEngine.GetOpenIDInfo(ctx, openid, out userinfo, appid, appsecrt))
{
微信系统商户的设置
列表自定义显示
电脑端
myGoodPageOpts = $('.dataContainer').datagrid({
form: '.pageForm',//放置查询条件的表单
url: '/Sale/Getsale_products_RawJson.ajax',
nPageIndex: 1,//当前页
nPageSize: 10,//每页显示数据条数
callbacks: null,
renderItemHTMLFunc: function (row) {
var jsonString = JSON.stringify(row);
jsonString = jsonString.replace(/"/g, "\\'");
var HTMLString = '<div class="productDiv-0" style="margin:2px;">' +
//'<div class="productContent" onclick="productClick(this,\''+row.sale_products_nodeuuid+'\',\''+row.product+'\')"' +
'<div class="productContent" onclick="productClick(this,\'' + jsonString + '\')"' +
'style="background-color:white;">' +
'<div class="productImg" style="text-align: center;">' +
'<img style="margin: 0 auto; max-width: 100%;height:150px" src="' + row.productpic + '">' +
'</div>' +
'<div style="overflow:hidden;white-space: break-word;text-overflow: ellipsis;padding:0 4px;font-size:12px;text-align: center;">' +
row.product +
'</div>' +
'<div style="text-align:center;padding:0 4px;font-size:14px;font-weight:600;position:relative"' +
'class="weixin-textDiv">' +
'产品编号:' +
row.productno+
'<br>' +
'供应商编号:<span style="padding-right:4px;color:#666;">' +
row.supplierno +
'</span>' +
'<br>' +
'供应商:' +
'<span style="color:#666;">' +
row.supplier +
'</span>' +
'<br>' +
'进价:' +
'<span style="color:red;">' +
'¥'+row.buyprice+
'</span>' +
' ' +
'销售价:<span style="padding-right:4px;color:green;">' +
' ¥' + row.saleprice +
'</span>' +
'<br>' +
'最小采购:' +
'<span style="color:#555;">' +
row.mincnt +
'</span>' +
' 递增采购:' +
'<span style="color:#555;">' +
row.stepcnt +
'</span>' +
'<br>' +
'库存预警量:' +
'<span style="color:#666;">' +
row.stockcntwaring +
'</span>' +
'<div style="display:flex;justify-content:space-evenly">' +
/*
'<span class="am-icon-edit" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\'' + row.sale_products_nodeuuid + '\',\'' + row.product + '\')"></span>' +
'<span class="am-icon-trash-o" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\'' + row.sale_products_nodeuuid + '\',\'' + row.product + '\')"></span>' +
'<span class="am-icon-shopping-cart" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\''+row.sale_products_nodeuuid+ '\',\'' + row.product + '\')"></span>'+
*/
'<span class="am-icon-edit" style="cursor:pointer;font-size:24px;" onclick="editProduct(this,\'' + jsonString + '\')"></span>' +
'<span class="am-icon-trash-o" style="cursor:pointer;font-size:24px;" onclick="delProduct(this,\'' + jsonString + '\')"></span>' +
/*
'<span class="am-icon-shopping-cart" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\'' + jsonString + '\')"></span>' +
*/
'</div>' +
'</div>' +
'</div>' +
'</div>';
console.log(HTMLString);
return HTMLString;
}
});
手机端
myGoodPageOpts = $('#mobilelist').mobilelist({
url: '/Sale/Getsale_products_RawJson.ajax',
nPageIndex: 1,//当前页
nPageSize: 10,//每页显示数据条数
callbacks: null,
//translate: translateT,
//dropdownli: dropdownliT,
renderItemHTMLFunc: function (row) {
var jsonString = JSON.stringify(row);
jsonString = jsonString.replace(/"/g, "\\'");
var HTMLString = '<div class="productDiv-0" style="margin:2px;" >' +
//'<div class="productContent" onclick="productClick(this,\'' + row.sale_products_nodeuuid + '\',\'' + row.product + '\')"' +
'<div class="productContent" onclick="productClick(this,\'' + jsonString + '\')"' +
'style="background-color:white;">' +
'<div class="productImg" style="text-align: center;">' +
'<img style="margin: 0 auto; max-width: 100%;height:100px" src="' + row.productpic + '">' +
'</div>' +
'<div style="overflow:hidden;white-space: break-word;text-overflow: ellipsis;padding:0 4px;font-size:12px;text-align: center;">' +
row.product +
'</div>' +
'<div style="text-align:center;padding:0 4px;font-size:14px;font-weight:600;position:relative"' +
'class="weixin-textDiv">' +
'产品编号:' +
row.productno +
'<br>' +
'供应商编号:<span style="padding-right:4px;color:#666;">' +
row.supplierno +
'</span>' +
'<br>' +
'供应商:' +
'<span style="color:#666;">' +
row.supplier +
'</span>' +
'<br>' +
'进价:' +
'<span style="color:red;">' +
'¥' + row.buyprice +
'</span>' +
'<br>销售价:<span style="padding-right:4px;color:green;">' +
' ¥' + row.saleprice +
'</span>' +
'<br>' +
'最小采购:' +
'<span style="color:#555;">' +
row.mincnt +
'</span>' +
'<br>递增采购:' +
'<span style="color:#555;">' +
row.stepcnt +
'</span>' +
'<br>' +
'库存预警量:' +
'<span style="color:#666;">' +
row.stockcntwaring +
'</span>' +
'<div style="display:flex;justify-content:space-evenly">' +
/*
'<span class="am-icon-edit" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\'' + row.sale_products_nodeuuid + '\',\'' + row.product + '\')"></span>' +
'<span class="am-icon-trash-o" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\'' + row.sale_products_nodeuuid + '\',\'' + row.product + '\')"></span>' +
'<span class="am-icon-shopping-cart" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\'' + row.sale_products_nodeuuid + '\',\'' + row.product + '\')"></span>' +
*/
<%if(bCanEdit){%>
'<span class="am-icon-edit" style="cursor:pointer;font-size:24px;" onclick="editProduct(this,\'' + jsonString + '\')"></span>' +
<%}%>
<%if(bCanDel){%>
'<span class="am-icon-trash-o" style="cursor:pointer;font-size:24px;" onclick="delProduct(this,\'' + jsonString + '\')"></span>' +
<%}%>
/*
'<span class="am-icon-shopping-cart" style="cursor:pointer;font-size:24px;" onclick="addCart(this,\'' + jsonString + '\')"></span>' +
*/
'</div>' +
'</div>' +
'</div>' +
'</div>';
return HTMLString;
}
});
页面含Combox弹出窗
$(function(){
//获得combox需要的数据
});
function initCombox()
{
//设置combox,row是否为空
}
LayuUI开源界面
/CoreSYS.SYS/MainMini.aspx
配置LayUI界面
<add key="LayUIMain" value="true" />
<add key="LayUI商业授权" value="true" />
角色绑定UI
LayUI使用妹子UI combox处理方法
在$(function(){...});内获得combox数据并保存,在初始化时和添加删除需要combox的地方重新初始combox
代码例子
var m_Data = [{ "value": true, "text": "显示" }, { "value": false, "text": "不显示" }];
var m_CompanyData = [];
var m_TypeData = [];
var row = null;
function InitCombox() {
content.find("#innew").combox({
url: '',
data: m_Data,
selectDataContainer: content.find("#innew"),
width: 151,
text: 'text',
value: 'value',
onSuccess: function () {
if (row != null) {
content.find('#innew').combox('setValue', row.innew);
}
},
onSelect: function () {
}
});
content.find("#software_types_uuid").combox({
url: '',
data: m_TypeData,
selectDataContainer: content.find("#software_types_uuid"),
width: 151,
text: 'software_type',
value: 'software_types_uuid',
onSuccess: function () {
if (row != null) {
content.find('#software_types_uuid').combox('setValue', row.software_types_uuid);
}
},
onSelect: function () {
}
});
content.find('#doc-form-file').unbind();
content.find('#doc-form-file').on('change', function () {
$.msgprogress({ msg: '正在上传软件图片...' });
updateToken();
var options = {
url: sUrl + '?token=' + token,
dataType: 'json',
type: 'post',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
var codeurl = result.m_ReturnOBJ[0];
content.find("#apppic").val(codeurl);
content.find('#imgEdit')[0].src = codeurl;
} else {
$.alert({ content: result.sMsg });
}
}
}
$(content).ajaxSubmit(options);
});
content.find("#sys_users_nodeuuid").combox({
url: '',
data: [],
selectDataContainer: content.find("#sys_users_nodeuuid"),
width: 151,
text: 'username',
value: 'sys_users_nodeuuid',
});
content.find("#sys_companys_nodeuuidEdit").combox({
url: '',
data: [],
selectDataContainer: content.find("#sys_companys_nodeuuidEdit"),
width: 151,
text: 'company',
value: 'sys_companys_nodeuuid',
});
content.find("#sys_companys_nodeuuidEdit").combox({
url: "",//企业
selectDataContainer: content.find("#sys_companys_nodeuuidEdit"),
data: m_CompanyData,
text: 'company',
value: 'sys_companys_nodeuuid',
onSuccess: function () {
if (row != null) {
content.find("#sys_companys_nodeuuidEdit").combox('setValue', row.sys_companys_nodeuuid);
}
},
onSelect: function () {
content.find("#sys_users_nodeuuid").combox('setValue', '');
$.msgprogress({ msg: '正在加载企业可选用户...' });
$.ajax({
url: "/CoreSYS.SYS/GetSelectUsers.ajax?sys_companys_nodeuuid=" + content.find("#sys_companys_nodeuuidEdit").val(),
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
content.find("#sys_users_nodeuuid").combox({
url: '',
data: result.m_ReturnOBJ,
selectDataContainer: content.find("#sys_users_nodeuuid"),
width: 151,
text: 'username',
value: 'sys_users_nodeuuid',
});
if (row != null)
content.find('#sys_users_nodeuuid').combox('setValue', row.sys_users_nodeuuid);
} else {
content.find("#sys_users_nodeuuid").combox({
url: '',
data: [],
selectDataContainer: content.find("#sys_users_nodeuuid"),
width: 151,
text: 'username',
value: 'sys_users_nodeuuid',
});
}
}
});
},
});
}
$(document).ready(function () {
contentAbout.find('#doc-form-file').on('change', function () {
$.msgprogress({ msg: '正在上传软件图片...' });
updateToken();
var options = {
url: sUrl + '?token=' + token,
dataType: 'json',
type: 'post',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
var codeurl = result.m_ReturnOBJ[0];
contentAbout.find("#wxpic").val(codeurl);
contentAbout.find('#imgEdit')[0].src = codeurl;
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentAbout).ajaxSubmit(options);
});
$.ajax({
url: "/Software/GetSoftwareTypes_RawJson.ajax?rows=9999",
dataType: 'json',
success: function (result) {
if (result.rows != null && result.rows != undefined) {
m_TypeData = result.rows;
$("#software_types_uuid").combox({
url: '',
data: result.rows,
selectDataContainer: $("#software_types_uuid"),
width: 151,
text: 'software_type',
value: 'software_types_uuid',
});
} else {
}
}
});
$.ajax({
url: "/CoreSYS.SYS/GetSelectCompany_RawJson.ajax",
dataType: 'json',
success: function (result) {
m_CompanyData = result;
}
});
InitCombox();
});
行业微站微站模板注册账户等信息
行业管理里有行业微站,注册的行业企业的微站模板,服务角色,客户角色
注册行业客户函数
CoreSYS.SYS
static public ReturnJson registerHYUser(HttpContext ctx, Object m_Parame)
参数:
regmail:注册账户email
regpassword:注册口令
sCodeValue:验证码
comefrom:推荐注册人 可选
tradeclass:行业类名 可选,用于注册行业扩展用户
defaultjs:当有 tradeclass时 赋该参数 行业角色
注册企业用户
CoreSYS.SYS
static public ReturnJson registerSiteUser(HttpContext ctx, Object m_Parame)
参数:
regmail:注册账户email
regpassword:注册口令
sCodeValue:验证码
comefrom:推荐注册人 可选
postsys_companys_nodeuuid:要注册到的企业id
注册用户接口
CoreSYS.SYS
static public ReturnJson registerUser_API(HttpContext ctx, Object m_Parame)
参数:
regmail:注册账户email
regpassword:注册口令
sCodeValue:邀请码或验证码
class_table:注册系统的表名,需要邀请码时
class_nodeuuid:注册系统的id
fullclassname:缺少注册系统类名
iscustomer:是否一般客户
comefrom: 推荐注册人 可选
管理邀请码
关于整个框架各类资金的说明
主要分为
1.企业表用户表自己的资金管理
2.微站站用户的资金管理
3.系统框架统一配置的资金管理(其中平台收款资金是入微信主站在的企业)
关于微站资金问题
商品、新闻信息支付、账户的充值是以支付形式进行
信息栏的打赏是以支付形式进行
其他信息栏自定义栏的资金交易是以用户在站点的余额做交易
sys_accsitemoneyflows 虚拟资金流水
sys_useraccmoneyflows 现金流水
清空微站资金数据
delete from sys_myaccountsitemoney
delete from sys_mygettips2018
delete from sys_personbatchoutmoney201711
delete from sys_personbatchoutmoney201712
delete from sys_personbatchoutmoney201801
delete from sys_personbatchoutmoney201802
delete from sys_personbatchoutmoney201803
delete from sys_personbatchoutmoney201804
delete from sys_personbatchoutmoney201805
delete from sys_personsites_selloutrecords
delete from sys_persontransfer
delete from sys_personwxredpackets
delete from sys_recordtips201801
delete from sys_recordtips201802
delete from sys_recordtips201803
delete from sys_recordtips201804
delete from sys_recordtips201805
delete from sys_refunddata
delete from sys_sites_selloutrecords
delete from sys_tips201710
delete from sys_tips201712
delete from sys_tips201801
delete from sys_tips201802
delete from sys_tips201803
delete from sys_tips201804
delete from sys_transfer201710
delete from sys_transfer201711
delete from sys_transfer201712
delete from sys_transfer201801
delete from sys_transfer201802
delete from sys_transfer201803
delete from sys_transfer201804
delete from sys_transfer201805
delete from sys_payrecords
delete from sys_weixinsites_shoppingcart_buygoods
delete from sys_weixinsites_shoppingcart_buyrecords
delete from sys_weixinsites_shoppingcart_goods
更改企业名称
update sys_companys set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_products set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_buyers set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productindetail set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productinflow set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productinhouselog set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productoutdetail set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productoutflow set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productouthouselog set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_stockhouse set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_stocktype set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_supplier set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update software_apps set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_companyads set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_companyaccmoneyflows set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_companyaccountinmoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accountsitemoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accountsitemoneyout set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accountsitesaasmoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accsitemoneyflows set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_hards set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_companys set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_products set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_buyers set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productindetail set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productinflow set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productinhouselog set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productoutdetail set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productoutflow set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_productouthouselog set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_stockhouse set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_stocktype set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sale_supplier set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update software_apps set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_companyads set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_companyaccmoneyflows set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_companyaccountinmoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accountsitemoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accountsitemoneyout set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accountsitesaasmoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_accsitemoneyflows set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_hards set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_loginrecord set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_logisticsflows set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_mqttmsgpubs_users set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_mqttmsgsubs_users set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_myaccountsitemoney set company='通用开发平台' where sys_companys_crossnodeuuid=14488934049460000003000
update sys_myaccountsitesaasmoney set company='通用开发平台' where sys_companys_crossnodeuuid=14488934049460000003000
update sys_mysaasattempt set company='通用开发平台' where sys_companys_crossnodeuuid=14488934049460000003000
update sys_mysaasservice set company='通用开发平台' where sys_companys_crossnodeuuid=14488934049460000003000
update sys_myuseraccountinmoney set company='通用开发平台' where sys_companys_crossnodeuuid=14488934049460000003000
update sys_useraccmoneyflows set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_useraccountinmoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update sys_uservisitcompanyrecords set company='通用开发平台' where sys_companys_crossnodeuuid=14488934049460000003000
update sys_weixinsites_shoppingcart set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update aeaa_centers set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update aeaa_devs set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update aeaa_discenters set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update aeaa_mqttmsgs set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update blog_siteads set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update blog_sites set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update code_adcodes set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update code_sqls set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update code_usertables set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update a set a.company='通用开发平台' from im_users a,sys_users b where a.sys_users_nodeuuid=b.sys_users_nodeuuid and b.sys_companys_nodeuuid=14488934049460000003000
update looklook_opensites set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update looklook_sitemovies set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update nfclock_locks set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update nfclock_userecord set companyname='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update oncerfid_linkgoodrecord set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update oncerfid_rfidgoods set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_accmoneyoutrecords set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_accountinmoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_accountoutmoney set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_accounts set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_inmoneyaccs set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_leftmoneyoffs set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_moneys set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_payrecords set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_qrcodes set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update pay_systemaccount set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update power_rfids set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update ss_userbars set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update ss_usersites set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update temperature_boxlink set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update temperature_locks set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update temperature_rfidgoods set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update weixin_accmoneyouts set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update weixin_accpayrecords set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update weixin_buyservices set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update weixin_siteads set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update weixin_sites_vstips set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
update weixin_usergrades set company='通用开发平台' where sys_companys_nodeuuid=14488934049460000003000
清空数据库日志
USE [master]
GO
ALTER DATABASE [DBCenter] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [DBCenter] SET RECOVERY SIMPLE --简单模式
GO
USE [DBCenter]
GO
DBCC SHRINKFILE (N'DBCenter_Log' , 11, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE DBCenter SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DBCenter SET RECOVERY FULL --还原为完全模式
GO
USE [master]
GO
ALTER DATABASE [nodedb_003] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [nodedb_003] SET RECOVERY SIMPLE --简单模式
GO
USE [nodedb_003]
GO
DBCC SHRINKFILE (N'nodedb_003_Log' , 11, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE nodedb_003 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE nodedb_003 SET RECOVERY FULL --还原为完全模式
GO
USE [master]
GO
ALTER DATABASE [nodedbslv_003] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [nodedbslv_003] SET RECOVERY SIMPLE --简单模式
GO
USE [nodedbslv_003]
GO
DBCC SHRINKFILE (N'nodedbslv_003_Log' , 11, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE nodedbslv_003 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE nodedbslv_003 SET RECOVERY FULL --还原为完全模式
GO
USE [master]
GO
ALTER DATABASE [nodedb_111] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [nodedb_111] SET RECOVERY SIMPLE --简单模式
GO
USE [nodedb_111]
GO
DBCC SHRINKFILE (N'nodedb_111_Log' , 11, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE nodedb_111 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE nodedb_111 SET RECOVERY FULL --还原为完全模式
GO
USE [master]
GO
ALTER DATABASE [onedb] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [onedb] SET RECOVERY SIMPLE --简单模式
GO
USE [onedb]
GO
DBCC SHRINKFILE (N'onedb_Log' , 11, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE onedb SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE onedb SET RECOVERY FULL --还原为完全模式
GO
删除SAAS记录
delete from sys_mysaasattempt
delete from sys_mysaasattemptloopappcallrecord
delete from sys_mysaasattemptrecord
delete from sys_mysaasserviceloopappcallrecord
delete from sys_mysaasservice
delete from sys_mysaasservicerecord
删除一个指定账户
delete from center_userids where username='463516000@qq.com'
delete a from sys_companyorgs a,sys_companys b where a.sys_companys_nodeuuid=b.sys_companys_nodeuuid and b.company='463516000@qq.com'
delete a from weixin_mainpageshowindexs a,weixin_sites b,sys_companys c where a.weixin_sites_nodeuuid=b.weixin_sites_nodeuuid and b.sys_companys_nodeuuid=c.sys_companys_nodeuuid and c.company='463516000@qq.com'
delete a from weixin_activityconfig a,weixin_sites b,sys_companys c where a.weixin_sites_nodeuuid=b.weixin_sites_nodeuuid and b.sys_companys_nodeuuid=c.sys_companys_nodeuuid and c.company='463516000@qq.com'
delete a from weixin_producttypes a,weixin_sites b,sys_companys c where b.sys_companys_nodeuuid=c.sys_companys_nodeuuid and c.company='463516000@qq.com' and a.weixin_sites_nodeuuid=b.weixin_sites_nodeuuid
delete a from weixin_users a,weixin_sites b,sys_companys c where b.sys_companys_nodeuuid=c.sys_companys_nodeuuid and c.company='463516000@qq.com' and a.weixin_sites_nodeuuid=b.weixin_sites_nodeuuid
delete a from weixin_sites a,weixin_sites b,sys_companys c where b.sys_companys_nodeuuid=c.sys_companys_nodeuuid and c.company='463516000@qq.com' and a.weixin_sites_nodeuuid=b.weixin_sites_nodeuuid
delete from sys_companys where company='463516000@qq.com'
delete a from pay_accounts a,sys_users b where a.sys_users_nodeuuid=b.sys_users_nodeuuid and b.username='463516000@qq.com'
delete sys_users where username='463516000@qq.com'
delete from sys_weixinsites_shoppingcart where buyer_username='463516000@qq.com'
上传文件路径错误设置
D:\2016又一年\2015分布式web框架\新UIXNCrmManager\XNCrmManager\public\share\plugin\utf8-net\net\config.json
修改
"imageUrlPrefix": "http://localhost:3664/public/share/plugin/utf8-net/net/"
框架支付原始通知地址
支付宝:
/CoreSYS.SYS/WebALPayReturn.aspx
/CoreSYS.SYS/WebALPayNotify.aspx
/CoreSYS.SYS/OPHALPayReturn.aspx
/CoreSYS.SYS/OPHALPayNotify.aspx
微信:
/CoreSYS.SYS/WeiXinPayResultNotify.aspx
个人支付:
/CoreSYS.SYS/returnPersonPayPage.aspx
/CoreSYS.SYS/nodifyPersonPayPage.aspx
添加新的支付类型
添加新的支付类型参考
参看CoreSYS.SYS函数PayCartOrderPage 或 NewsPay 支付前将要支付的信息添加入缓存那m_GoodHH然后返回goodkey,goodkey对应m_GoodHH
m_GoodHH["openid"] = m_SessionLink.openid;
m_GoodHH.Add("inperson", ismerchant);
if (ismerchant && usepersonpay)
{
m_GoodHH.Add("appid", appid);
m_GoodHH.Add("appkey", appkey);
m_GoodHH.Add("payurl", payurl);
}
m_GoodHH.Add("returnurl", returnurl);//返回url
m_GoodHH.Add("good", good);//产品名称
m_GoodHH.Add("goodmemo", goodmemo);
m_GoodHH.Add("goodtag", sys_weixinsites_shoppingcart_buyrecords_nodeuuid);
m_GoodHH.Add("paymoney", NeedPayMoney);
m_GoodHH.Add("iswxsite", true);
m_GoodHH.Add("site_crossnodeuuid", site_crossnodeuuid);
m_GoodHH.Add("paytable", "sys_weixinsites_shoppingcart_buyrecords");
m_GoodHH.Add("paytablefieldnodeuuidvalue", sys_weixinsites_shoppingcart_buyrecords_nodeuuid);
m_GoodHH.Add("paytablefieldnodeuuidname", "sys_weixinsites_shoppingcart_buyrecords_nodeuuid");
m_GoodHH.Add("paynotifyfullclassname", "CoreSYS.SYS");
m_GoodHH.Add("paynotifyfunctionname", "PayOver");
m_GoodHH.Add("payparame", "");
m_GoodHH.Add("usepersonpay", usepersonpay);
if (ismerchant && usepersonpay)
{
m_GoodHH.Add("appid", appid);
m_GoodHH.Add("appkey", appkey);
m_GoodHH.Add("payurl", payurl);
}
if (SaveUserCache<Hashtable>(ctx, "m_GoodHH", m_GoodHH, new TimeSpan(0, 5, 0), false))
NewsPay使用:
string goodkey = "SITEACCINMOENY_" + NodeDBEngine.createGlobalUUID();
SaveCache<Hashtable>(ctx, goodkey, m_GoodHH);
// m_HH["returnurl"] = returnurl;
// m_ReturnJson.bOK = m_JsonModeEngine.CallModeFunction(ctx, "", "", "CoreSYS.SYS", "PayMoneyAjax", m_HH, true, out m_ReturnJson.m_ReturnOBJ, out m_ReturnJson.sMsg);
m_ReturnJson.bOK = true;
Hashtable m_ReturnHH = new Hashtable();
m_ReturnHH["goodkey"] = goodkey;
m_ReturnHH["usepersonpay"] = usepersonpay;
m_ReturnJson.m_ReturnOBJ = m_ReturnHH;
显示要购买的商品信息,同时让用户选择支付类型,PayCartOrderPage 然后调用CoreSYS.SYS/PayMoneyAjax.ajax
2.选择支付方式调用CoreSYS.SYS函数PayMoneyAjax最终调用PayPersonMoneyAjax20200901 修改该函数代码添加其他支付生成预支付订单,提示交支付接口等待直接接口引导支付结果
参数:
paytype
[goodkey]
通过goodkey获得m_GoodHH获得m_GoodHH信息,然后将参数赋m_GoodHH同时将paytype加入
[m_payconfigHHJson]
iswxsite
payfullclassname为空时:
paytablefieldnodeuuidvalue
paytablefieldnodeuuidname
paytable
payfullclassname不为空时:
payfunction
payparame
good
goodmemo
goodtag
paymoney
[paylinkdata]
[paynotifyfullclassname]
[paynotifyfunctionname]
[paytable]
3.加入支付结果通知页面可参考 CoreSYS.SYS 函数WeiXinPayResultNotify 和CoreSYS.SYS nodifyPersonPayPage returnPersonPayPage
添加支付特别注意
除修改PayOver函数 需要修改 ReturnPayPage
PayOver参数
[paylinkdata]
[paytable]
[paytablefieldnodeuuidname]
[paytablefieldnodeuuidvalue]
[paystatus]
[sign]
[paytype]
switch (paystatus)
{
case "payclose":
{
goodsstatustext = "支付已经关闭";
}
break;
case "payrefund":
{
goodsstatustext = "支付转入退款";
}
break;
case "payrevoked":
{
goodsstatustext = "支付已经撤销";
}
break;
case "payerror":
{
goodsstatustext = "支付失败";
}
break;
case "paysuccess":
{
goodsstatustext = "支付成功";
}
break;
default:
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "支付结果参数错误";
return m_ReturnJson;
break;
}
ReturnPayPage参数
[returnpage]
[bOK]
[paytype]
微信支付带证书调用问题
已解决
处理方法:
IIS 应用程序池--选中你网站的所配置的应用程序池--右键 选择 “高级配置” --将“加载用户配置文件” 设置为True 。问题解决
证书放置位置
1270946501为商户号
域名变更更换图片
update weixin_activityrecords set fieldsjson=REPLACE(cast(fieldsjson as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_activitys set picurl=REPLACE(picurl,'www.minicti.com','www.1xn1.com'),contenturl=REPLACE(contenturl,'www.minicti.com','www.1xn1.com'),activityurl=REPLACE(activityurl,'www.minicti.com','www.1xn1.com')
update weixin_diyclass_datarecords set fieldsjson=REPLACE(cast(fieldsjson as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_diyclass set picurl=REPLACE(picurl,'www.minicti.com','www.1xn1.com')
update weixin_infoclass set infopicurl=REPLACE(infopicurl,'www.minicti.com','www.1xn1.com')
update weixin_inforecords set fieldsjson=REPLACE(cast(fieldsjson as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_inforequestactrecords set infieldjson=REPLACE(cast(infieldjson as varchar(max)),'www.minicti.com','www.1xn1.com'),retfieldjson=REPLACE(cast(retfieldjson as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_inforetrecords set fieldsjson=REPLACE(cast(fieldsjson as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_news set extjsonpicurls=REPLACE(cast(extjsonpicurls as varchar(max)),'www.minicti.com','www.1xn1.com'),newscontent=REPLACE(cast(newscontent as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_modeclass set picurl=REPLACE(picurl,'www.minicti.com','www.1xn1.com')
update weixin_newsclass set picurl=REPLACE(picurl,'www.minicti.com','www.1xn1.com')
update weixin_products set picurl=REPLACE(picurl,'www.minicti.com','www.1xn1.com'),productcontent=REPLACE(cast(productcontent as varchar(max)),'www.minicti.com','www.1xn1.com'),extendfieldsdata=REPLACE(cast(extendfieldsdata as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_producttypes set picurl=REPLACE(picurl,'www.minicti.com','www.1xn1.com'),extendfields=REPLACE(cast(extendfields as varchar(max)),'www.minicti.com','www.1xn1.com')
update weixin_siteslidepics set pic=REPLACE(pic,'www.minicti.com','www.1xn1.com'),pcpic=REPLACE(pcpic,'www.minicti.com','www.1xn1.com')
update weixin_sites set headpic=REPLACE(cast(headpic as varchar(max)),'www.minicti.com','www.1xn1.com')
update blog_news set newscontent=REPLACE(cast(newscontent as varchar(max)),'www.minicti.com','www.1xn1.com'), extjsonpicurls=REPLACE(cast(extjsonpicurls as varchar(max)),'
www.minicti.com','www.1xn1.com')
支付过程
支付过程
/CoreSYS.SYS/CreateCartOrder.ajax
data: { "goodsowner_realname": goodsowner_realname, "goodsowner_phoneno": goodsowner_phoneno, "goodsowner_address": goodsowner_address, "sys_weixinsites_shoppingcart_goods_nodeuuid": sys_weixinsites_shoppingcart_goods_nodeuuid, logicsname: logicsname, tstype: tstype, goodsowner_province: goodsowner_province, goodsowner_city: goodsowner_city, goodsowner_village: goodsowner_village },
返回
var id = result.m_ReturnOBJ;
/CoreSYS.SYS/PayCartOrderPage.aspx?sys_weixinsites_shoppingcart_buyrecords_nodeuuid=' + id + '&returnurl='+returnurl;//<%=GetUrlBefore(HttpContext.Current)%>/weixin/api_PayOver.aspx';
发起支付
/CoreSYS.SYS/PayMoneyAjax.ajax
支付宝支付屏蔽
<div class="zfb" 将type="diaplay:none"去掉
新渲染引擎模板JNTemplate内置函数
SessionLink engine.GetSessionLink()
bool engine.HavePower(string FullClassName, string FunctionName)
bool engine.SaveCookie(string name, string value)
string engine.ReadCookie(string name)
void engine.ClearCookie(string name)
ReturnJson engine.CallJsonModeFunction(string ClassFullName, string FunctionName, Object m_InParame)
string engine.RenderModeHTML(string classfullname, string functionname, object m_InParame)
string engine.GetResourceUrl()
OneUpFileWEB engine.GetUpFileURL()
bool engine.HaveCrossPower(string sClassFullName, string sFunctionName, string sys_companys_nodeuuid)
string engine.GetUrlHead()
string engine.GetModeUrl()
bool engine.IsPCClient()
bool engine.isHTTPS()
Hashtable engine.OBJToHashTable(Object m_Parame)
List<Hashtable> engine.OBJToListHashtable(Object m_Parame)
Hashtable engine.JsonToHashtable(string jsonString)
使用例子CodeFactory模块里的函数uniappCode和uniappTestPage
static public ReturnJson uniappTestPage(HttpContext ctx, Object m_Parame)
{
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
ReturnJson m_ReturnJson = new ReturnJson();
try
{
string type = "";
if (KeyIsOK(m_HH, "type"))
{
type = m_HH["type"].ToString();
}
m_ReturnJson.bOK = true;
oneData m_oneData = new oneData();
m_oneData.m_HH = new Hashtable();
m_oneData.A = "1";
m_oneData.B = 2;
m_oneData.m_HH["A"] = type;
m_oneData.m_oneData = new oneData();
m_oneData.m_oneData.m_HH = new Hashtable();
m_oneData.m_oneData.A = "11";
m_oneData.m_oneData.B = 22;
m_oneData.m_oneData.m_HH["A"] = "下级测试数据";
oneData m_oneData0 = new oneData();
m_oneData0.A = "c1";
m_oneData.m_HH["m_oneData"] = m_oneData0;//错误Hashtable内只能包含基本数据类型如int string float double 不能包含对象否则模板访问失败
int i;
List<Hashtable> m_HHList = new List<Hashtable>();
for (i = 0; i < 10; i++)
{
Hashtable m_oneHH = new Hashtable();
m_oneHH["pos"] = i;
m_HHList.Add(m_oneHH);
}
m_oneData.m_oneData.m_HHList = m_HHList;
List<oneRow> m_RowArray = new List<oneRow>();
for (i = 0; i < 10; i++)
{
oneRow m_oneRow = new oneRow();
m_oneRow.pos = i;
m_RowArray.Add(m_oneRow);
}
m_oneData.m_oneData.m_HH["array"] = m_RowArray.ToArray();
m_oneData.m_oneData.m_HH["array2"] = m_HHList;
m_oneData.m_oneData.m_RowArray = m_RowArray;
m_ReturnJson.m_ReturnOBJ = RenderPageView(ctx, m_JsonModePath, "uniappTestPage.shtml", m_oneData,typeof(menuClass));
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "渲染uniappTestPage失败";
}
return m_ReturnJson;
}
uniappTestPage.shtml
m_oneData.A:${model.A},m_oneData.B:${model.B},m_oneData.m_HH["A"]:${model.m_HH["A"]},m_oneData.m_oneData.A:${model.m_oneData.A},m_oneData.m_oneData.B:${model.m_oneData.B},m_oneData.m_oneData.m_HH["A"]:${model.m_oneData.m_HH["A"]},m_SessionLink.username:${engine.GetSessionLink().username}
权限判断:CoreSYS.SYS/AddCompany:${if(engine.HavePower("CoreSYS.SYS","AddCompany"))}有权限执行${else}无权限执行${end}
对象列表数据:${foreach(one in model.m_oneData.m_RowArray)}序号-${one.pos} ${end}<br />
Hashtable的List列表数据:${foreach(one in model.m_oneData.m_HHList)}序号-${one["pos"]} ${end}</br>
Hashtable中对象${model.m_HH["m_oneData"]}</br>
引号内</br>
Hashtable的List列表数据:"${foreach(one in model.m_oneData.m_HHList)}序号-${one["pos"]} ${end}"</br>
模板页内变量使用<br />
${set(a=123)}<br />
输出:${a}
<br />
<ul>
定义ii变量
${set(ii=0)}
${for(ii=1;ii<4;ii++)}
<li>${ii}</li>
${end}
</ul>
</br>
复杂语法测试<br />
${set(m_SessionLink=engine.GetSessionLink())}
${if(model.m_oneData.m_HH.ContainsKey("BB"))}
有BB
${else}
无BB
${end}
<br />
复杂测试
Hashtable对象${set(m_oneData=model.m_HH["m_oneData"])}
${set(hh=engine.OBJToHashTable(m_oneData))}
${hh["A"]}
<br />
Hashtable对象
${engine.OBJToHashTable(model.m_HH["m_oneData"])["A"]}
<br />
Hashtable包含Hashtable数组
${set(m_List=model.m_oneData.m_HH["array2"])}
${set(m_HHList=engine.OBJToListHashtable(m_List))}
${foreach(rr in m_HHList)}
${rr["pos"]},
${end}
<br />
Hashtable包含Hashtable数组
${foreach(rr2 in engine.OBJToListHashtable(model.m_oneData.m_HH["array2"]))}
${rr2["pos"]},
${end}
APP登录调用
例子代码:
app登录代码
当web.config配置为
<add key="客户端通讯加密" value="true" />
string LGKey = "";
string rand = "";
string appkey = "";
string url = "http://www.1xn1.com";
private void button18_Click(object sender, EventArgs e)
{
XNWindowHttpClient m_XNWindowHttpClient = new XNWindowHttpClient();
bool bOK;
Hashtable m_HH = new Hashtable();
m_HH["appid"] = "7566";
string sData = JsonHelper.OBJToJsonStr(m_HH);
//url = "http://localhost:3664";
sData = m_XNWindowHttpClient.PostJson(url+"/CoreSYS.SYS/app_Hander.app", sData, out bOK);
Hashtable m_ReturnJson = new Hashtable();
JsonHelper.JsonToHashtable(sData, m_ReturnJson);
if((bool)m_ReturnJson["bOK"])
{
Hashtable m_ReturnOBJHH = (Hashtable)m_ReturnJson["m_ReturnOBJ"];
appkey = m_ReturnOBJHH["appkey"].ToString();
rand = m_ReturnOBJHH["rand"].ToString();
rand=RESJavaHelper.PublicKeyStringDecrypt(publicString, rand);
Hashtable m_ParameHH = new Hashtable();
m_ParameHH["username"] = "xn";
m_ParameHH["password"] = "123wasd";
m_XNWindowHttpClient.ClearPostHeader();
m_XNWindowHttpClient.AddHeader("appkey", appkey);
string sText=JsonHelper.OBJToJsonStr(m_ParameHH);
sData=AESJavaASPDotNet.EncodeAES(sText, rand, "1234567890abcdef");
sData=m_XNWindowHttpClient.PostJson(url+"/CoreSYS.SYS/LoginApp.app", sData, out bOK);
m_ReturnJson = JsonHelper.JsonStrToOBJ<Hashtable>(sData);
if ((bool)m_ReturnJson["bOK"])
{
m_ReturnOBJHH = JsonHelper.OBJToType<Hashtable>(m_ReturnJson["m_ReturnOBJ"]);
Hashtable m_UserInfoHH = JsonHelper.OBJToType<Hashtable>(m_ReturnOBJHH["m_UserInfo"]);
LGKey = m_UserInfoHH["LGKey"].ToString();
MessageBox.Show("登录成功:" + LGKey);
}
else
{
MessageBox.Show("登录失败");
}
}
else
{
MessageBox.Show(m_ReturnJson["sMsg"].ToString());
}
}
private void button19_Click(object sender, EventArgs e)
{
XNWindowHttpClient m_XNWindowHttpClient = new XNWindowHttpClient();
bool bOK;
Hashtable m_HHH = new Hashtable();
m_HHH["中华"] = "中华";
m_HHH["LGKey"] = LGKey;
string sText = JsonHelper.OBJToJsonStr(m_HHH);
m_XNWindowHttpClient.ClearPostHeader();
m_XNWindowHttpClient.AddHeader("appkey", appkey);
string sData = AESJavaASPDotNet.EncodeAES(sText, rand, "1234567890abcdef");
sData = m_XNWindowHttpClient.PostJson(url + "/PY/HelloAPP.app", sData, out bOK);
MessageBox.Show(sData);
}
微站账户余额提现
所在的菜单
平台基本信息管理
财务相关管理
站点资金输出
转账记录管理
接口跨域调用
[ModeMethod("{CanNoLogin:true,CanEnable:true,CanCrossDomain:true}")]
static public ReturnJson NULLLink(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
try
{
//BaseJsonMode.CanSPCross(ctx);
SessionLink m_SessionLink = GetSessionLink(ctx);
if(m_SessionLink!=null)
{
m_ReturnJson.bOK = true;
}
}
catch
{
m_ReturnJson.bOK = false;
}
return m_ReturnJson;
}
调用端
var m_Data = {};
$.ajax({
url: imurl + '/IMessage/NULLLink.ajax?LGKey=' + lgkey,
type: 'POST',
dataType: 'json',
xhrFields: {
withCredentials: true
},
// 允许跨域
crossDomain: true,
data: m_Data,
cache: false,
success: function (result) {
try {
}
catch (r) {
}
}
});
获得调用接口的域
ctx.Request.Headers["Origin"].ToString();
通过jsonp跨域调用
$.ajax({
url: "http://www.1xn1.com/IMessage/InitIM_RawJson.jsonp",
dataType:"jsonp",
type: "GET",
data: {
"teacher": "BNTang",
"age": 34
},
jsonp:"jscallback", //Jquery生成验证参数的名称 //callback要与后台对应
success: function (msg) {
console.log(msg);
}
});
跨域上传文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>跨域上传文件</title>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<input type="file" id="file_upload"/>
<input type="button" value="上传图片" id="upload"/>
</body>
<script type="text/javascript">
var token;
var sUrl;
var fileArray = new Array();
function updateToken() {//维护文件传输签名
$.ajax({
url: "http://www.1xn1.com/CoreSYS.SYS/GetUpFileService.ajax",
dataType: 'json',
type: 'post',
async: false,
xhrFields: {
withCredentials: true
},
// 允许跨域
crossDomain: true,
success: function (res) {
if (res.bOK) {
token = res.m_ReturnOBJ.token;
sUrl = jQuery.parseJSON(res.m_ReturnOBJ.configjson).上传地址;
}
}
});
}
updateToken();
$(function() {
function ajaxFileUpload(){
var formData = new FormData();
formData.append('file',$("#file_upload")[0].files[0]); //将文件转成二进制形式
$.ajax({
type:"post",
url:sUrl + '?token=' + token,
async:false,
contentType: false, //这个一定要写
processData: false, //这个也一定要写,不然会报错
data:formData,
dataType:'text', //返回类型,有json,text,HTML。这里并没有jsonp格式
success:function(data){
console.log(data);
},
error:function(XMLHttpRequest, textStatus, errorThrown, data){
console.log(errorThrown);
}
});
}
$("#upload").click(function(){
ajaxFileUpload();
});
});
</script>
</html>
Saas关系表图
电子锁
电子锁离线表关系
分权的几张表关系图
燃气水务电力表
物流关系图
自定义栏目表
Web框架使用说明
A.让IIS支持
实现对.ajax,.api,.p2p支持
B.WebConfig配置红色为框架使用部分
<?xml version="1.0"?>
<configuration> <appSettings>
<add key="UpdateURL" value="http://localhost:2584"/>
<add key="FunctionName" value="true"/>
<add key="CheckSQL" value="true"/>
<add key="DEBUG" value="false"/>
<add key="手机页面" value="false"/>
<add key="USER" value="xn"/>
<add key="V8" value="true"/>
<add key="PoolAjax" value="false"/>
<add key="'线程池个数" value="50"/>
<add key="调用WCF" value="false"/>
<add key="ID生成服务" value="false"/>
<add key="资源站点" value=""/>
<add key="本文件上传服务对外地址" value="http://localhost:3664"/> <!--作为文件上传服务对外的服务地址-->
<add key="默认模块" value="CoreSYS.SYS"/>
<add key="使用统一认证" value="false"/>
<add key ="中心认证KEY" value=""/>
<add key ="中心授权KEY" value=""/>
<!--认证中心-->
<add key="ssocenter" value="http://www.center.minicti.com/WebSSO"/>
<!--主域-->
<add key ="共享Cookie主域名" value=""/>
<!--特别注意共享Cookie后要将所有服务器的ServerNO设置一致-->
<add key="分布式库" value="true"/>
<add key="中心库连接" value="Data Source=.;initial catalog=DBCenter;uid=hello;pwd=123abc;"/>
<add key="中心库类型" value="MSSQL"/>
<!--用户相关服务-->
<add key="ServerNO" value="NO4"/>
<!--认证中心的配置信息-->
<add key="站点认证受限" value="false"/>
<add key="站点数量" value="3"/>
<add key="WEB1" value="http://163.com"/>
<add key="WEB2" value="http://163.com"/>
<add key="WEB3" value="http://163.com"/>
<add key="WEBApplication" value="true"/>
<add key="平台试测" value="false"/>
<!--缓存机制-->
<!--
<add key="CacheType" value="WEB"/>
-->
<add key="CacheType" value="REDIS" />
<!-- REDIS-->
<add key="CacheTimeOut" value="30"/>
<add key="WriteCacheRedisIP" value="127.0.0.1"/>
<add key="WriteCacheRedisPort" value="1234"/>
<add key="WriteCacheRedisPassWord" value="test1234"/><!-- -->
<add key="ReadCacheRedisCnt" value="0"/>
<add key="ReadCacheRedisIP1" value="127.0.0.1"/>
<add key="ReadCacheRedisPort1" value="1234"/>
<add key="ReadCacheRedisPassWord1" value="test1234"/>
<add key="ReadCacheRedisIP2" value="127.0.0.1"/>
<add key="ReadCacheRedisPort2" value="1234"/>
<add key="ReadCacheRedisPassWord2" value="test1234"/>
<add key="linktimeover" value="-1"/>
<add key="hearttime" value="10"/>
<add key="gctime" value="30"/>
<!--测试微信号码-->
<add key="weixinToken" value="" />
<add key="appID" value="" />
<add key="appsecret" value="" />
<add key="独立语言视" value="true"/>
<add key="后端任务线程" value="0"/>
<add key="SYSDBType" value="MSSQL"/>
<add key="APPDBType" value="MSSQL"/>
<add key="单库编号" value="003"/>
<add key="sysconn" value="Data Source=.;initial catalog=nodedb_003;uid=hello;pwd=123abc;"/>
<add key="appconn" value="Data Source=.;initial catalog=nodedb_003;uid=hello;pwd=123abc;"/>
<add key="直接SQL" value="true"/>
<add key="调试信息" value="true"/>
<add key="邮箱服务器" value="smtp.163.com"/>
<add key="邮箱地址" value="hello@qq.com"/>
<add key="邮箱名字" value="ASP.NET基础框架"/>
<add key="邮箱账户" value="hello@163.com"/>
<add key="邮箱口令" value="hello123"/>
<add key="邮件任务方式" value="REDIS"/>
<add key="P2P服务名" value="WEB101"/>
<add key="P2P任务消息启动" value="true"/>
<add key="P2P是否处理系统任务" value="true"/>
<add key="P2P任务消息REDIS地址" value="127.0.0.1"/>
<add key="P2P任务消息端口" value="1234"/>
<add key="P2P任务消息秘钥" value="test1234"/>
<add key="检测输入项" value="false"/>
<add key="可上传文件类型" value=".zip;.rar;.txt;.jpg;.jpeg;.png;.gif" />
<add key="不外调特型函数" value="_Action;_共享函数;"/>
<!--
<add key="默认模块" value="SitCDN"/>
<add key="分流站点" value="true"/>-->
</appSettings>
<connectionStrings>
</connectionStrings>
<!--
有关 .NET 4.5 的 web.config 更改的说明,请参见 http://go.microsoft.com/fwlink/?LinkId=235367。
可在 <httpRuntime> 标记上设置以下特性。
<system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
-->
<system.web>
<!--
设置 compilation debug="true" 将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为 true。
-->
<!--"StateServer,InProc" -->
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" cookieless="false" timeout="20"/>
<!--
<sessionState mode="Custom" customProvider="RedisSessionStateProvider">
<providers>
<clear/>
<add name="RedisSessionStateProvider" type="RedisSession.RedisSessionStateStore.RedisSessionStateStoreProvider" host="test123@localhost:6379" clientType="pooled"/>
</providers>
</sessionState>
-->
<!--
<trust level="Full" originUrl="" />
-->
<compilation debug="true" targetFramework="4.5">
<assemblies>
<!--
<add assembly="ReportMode" />
-->
</assemblies>
</compilation>
<!--
通过 <authentication> 节可以配置 ASP.NET 使用的
安全身份验证模式,
以标识传入的用户。
-->
<authentication mode="Windows"/>
<!--
如果在执行请求的过程中出现未处理的错误,
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
开发人员通过该节可以配置
要显示的 html 错误页
以代替错误堆栈跟踪。
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
<customErrors mode="Off"/>
-->
<customErrors mode="Off"/>
<httpModules>
<!-- 接管Http请求-->
<add name="XNHttpSwitchEngine" type="XNWebEngine.XNHttpSwitchEngine.XNWebApplication,XNHttpSwitchEngine"/>
</httpModules>
<httpHandlers>
<!-- 接管特定请求-->
<add verb="*" path="*.ajax" type="XNWebEngine.XNHttpSwitchEngine.XNAjaxHandlerFactory, XNHttpSwitchEngine" validate="true"/>
<add verb="*" path="*.aspx" type="XNWebEngine.XNHttpSwitchEngine.XNPageHandlerFactory,XNHttpSwitchEngine" validate="true"/>
<add verb="*" path="*.api" type="XNWebEngine.XNHttpSwitchEngine.XNAsyncHandlerFactory,XNHttpSwitchEngine" validate="true"/>
<add verb="*" path="*.p2p" type="XNWebEngine.XNHttpSwitchEngine.XNAsyncHandlerFactory,XNHttpSwitchEngine" validate="true"/>
<add verb="*" path="*.wait" type="XNWebEngine.XNHttpSwitchEngine.XNAsyncHandlerFactory,XNHttpSwitchEngine" validate="true"/>
</httpHandlers>
<!--
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
-->
<!-- 可使用页面数据泛型-->
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" pageParserFilterType="XNWebEngine.JsonBase.ViewTypeParserFilter, JsonBase" />
<httpRuntime maxRequestLength="40960" useFullyQualifiedRedirectUrl="true" requestValidationMode="2.0"/>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="XNHttpSwitchEngine"/>
<add name="XNHttpSwitchEngine" type="XNWebEngine.XNHttpSwitchEngine.XNWebApplication"/>
</modules>
<handlers>
<remove name="do64"/>
<remove name="XNAjaxHandlerFactory"/>
<remove name="XNPageHandlerFactory"/>
<remove name="XNThirdHandlerFactory"/>
<remove name="XNP2PHandlerFactory"/>
<remove name="XNWaitHandlerFactory"/>
<add name="XNAjaxHandlerFactory" path="*.ajax" verb="GET,HEAD,POST,DEBUG" type="XNWebEngine.XNHttpSwitchEngine.XNAjaxHandlerFactory, XNHttpSwitchEngine" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode"/>
<add name="XNPageHandlerFactory" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="XNWebEngine.XNHttpSwitchEngine.XNPageHandlerFactory,XNHttpSwitchEngine" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode"/>
<add name="XNThirdHandlerFactory" path="*.api" verb="GET,HEAD,POST,DEBUG" type="XNWebEngine.XNHttpSwitchEngine.XNAsyncHandlerFactory, XNHttpSwitchEngine" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode"/>
<add name="XNP2PHandlerFactory" path="*.p2p" verb="GET,HEAD,POST,DEBUG" type="XNWebEngine.XNHttpSwitchEngine.XNAsyncHandlerFactory,XNHttpSwitchEngine" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode"/>
<add name="XNWaitHandlerFactory" path="*.wait" verb="GET,HEAD,POST,DEBUG" type="XNWebEngine.XNHttpSwitchEngine.XNAsyncHandlerFactory,XNHttpSwitchEngine" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode"/>
<add name="do64" path="*.ajax" verb="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv2.0,bitness64"/>
</handlers>
<staticContent>
<remove fileExtension=".apk" />
<mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive"/>
</staticContent>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1B03E6ACF1164F73" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-0.86.0.518" newVersion="0.86.0.518"/>
</dependentAssembly>
<!---
配置dll依赖探索
-->
<probing privatePath="JsonMode/ShareDll;JsonMode/动态表模块;JsonMode/核心模块;JsonMode/四川应用;JsonMode/P2P模块;JsonMode/微信;JsonMode/Third模块;JsonMode/网页事件;JsonMode/数据分析模块;JsonMode/电子锁;JsonMode/统一认证;JsonMode/任务消息模块;JsonMode/JavaScript模块;JsonMode/Web接口调用;JsonMode/数据库操作;/JsonMode/耗时模块;/JsonMode/高级示例模块;/JsonMode/框架辅助代码生成器;/JsonMode/模板;JsonMode/高级微信;JsonMode/手机店铺;JsonMode/性能测试;JsonMode/站点分流;JsonMode/分布式主模块;JsonMode/应用级缓存;JsonMode/哇省我赚;JsonMode/微信吸粉器;JsonMode/手机商城;JsonMode/手机餐厅;"/>
</assemblyBinding>
</runtime>
</configuration>C.扩展模块派生于BaseJsonMode 并且必须是public 公开类,注意所有扩展模块采用.NET4.5工程
所有对外提供接口的函数为静态函数输入参数和输出参数固定
例
Static public ReturnJson TestPageView(HttpContext ctx, Object O)
输入参数
ctx 上下文的HttpContext
O 输入对象
输入类型
public class ReturnJson
{
public bool bOK;//执行是否成功
public object m_ReturnOBJ;//返回数据对象
public string sMsg;//错误信息
|
生成的模块dll位于站点下的 JsonMode+模块名+生成的dll
目录结构如下
JsonMode\模块名\生成的dll
模块目录下的 View目录为要渲染的该模块的视图文件目录
JsonMode\模块名\View
特别注意:
1.模块的生成dll直接输出到站点的 JsonMode\模块目录下
2.关于模块的框架的依赖dll在引入工程后将属性复制到本地设置为false
3.模块的其他依赖在引入后同样将属性复制到本地设置为false
4.模块的其他依赖dll直接输出到JsonMode\ShareDll\dll文件
如模块名为 Hello 模块的dll为 HelloA.dll 同时HelloA.dll依赖于 AB.dll
那么整个JsonMode目录的ShareDll下将看到
HelloA.dll 文件
AB,dll
5.关于和其他模块共享的dll如模型之类
将这类dll放入JsonMode的ShareDll目录下
6.关于模块的 View的编写
直接在项目下建立 View文件夹将生成的aspx放入将属性复制到输出目录改为始终复制
派生类必须实现的方法和静态变量
位于JsonMode.dll
命名空间
using XNWebEngine.JsonBase
public partial class weixin : BaseJsonMode
{
static private string m_JsonModePath, m_JsonModeName, sDBKey;
static private bool bCheckOver = false;
//
//
static public void SetJsonMode(string sPath, string sName)
{
m_JsonModePath = sPath;
m_JsonModeName = sName;
sDBKey = "sysconn";//连接串Key
}
//
派生类常用到的基类方法
1.写日志
void WriteLog(string sText)
2.渲染视图,整页输出HTML 串
string RenderRealPage(HttpContext m_ctx, string m_ModePath, string m_TamplateCTL, Object m_Model)
输入参数:
m_ModePath:模块所在路径及JsonModePath
TamplateCTL:视图文件 该文件位于模块下的View目录下
m_Model:模型对象
3. 渲染视图,整页输出HTML 串
string RenderPageView(HttpContext m_ctx, string m_ModePath, string m_TamplateCTL, Object m_Model)
输入参数:
m_ModePath:模块所在路径及JsonModePath
TamplateCTL:视图文件 该文件位于模块下的View目录下
m_Model:模型对象
4. 自定义控件视图的HTML输出
string RenderControlView(HttpContext m_ctx,string m_ModePath,string m_TamplateCTL, Object m_Model)
输入参数:
m_ModePath:模块所在路径及JsonModePath
TamplateCTL:视图文件 该文件位于模块下的View目录下
m_Model:模型对象
5 保存一个Cookie
bool SaveCookie ((HttpContext ctx, string name, string value)
输入
name:键名
value:保存的串值
输出
成功 失败
6.获得一个Cookie
string ReadCookie(HttpContext ctx, string name)
输入
sKey:键名
返回:键值
7.判断是否有执行权限
ReturnJson CanRun(HttpContext ctx, Object m_O)
输入 m_O为Json对象{ ClassFullName =, FunctionName =}
输出 ReturnJson.bOK 调用成功否
ReturnJson.m_ReturnOBJ:true 可以执行 false 不可执行
8. 判断是否有执行权限
ReturnJson HavePower(HttpContext ctx, string sClassFullName, string sFunctionName, bool bClient)
输入
sClassFullName:模块类全名
sFunctionName:函数名
bClient:是否浏览器调用
输出 ReturnJson.bOK 调用成功否
ReturnJson.m_ReturnOBJ:true 可以执行 false 不可执行
9.调用其他模块功能
bool CallJsonModeFunction(HttpContext ctx,string ClassFullName, string FunctionName, Object m_InParame,bool bClient, out Object m_OutParame, out string sError)
输入参数:
ClassFullName:调用的模块类全称
FunctionName:要调用的函数
m_InParame:函数输入参数
bClient:是否为浏览器调用
m_OutParame:输出参数(为ReturnJson中的m_ReturnOBJ)
sError:输出参数错误信息
返回值:
成功调用true 调用失败返回false
10 Hashtable深度复制
Hashtable CopyHashtable(Hashtable t)
11.跳转到指定的模块函数页面
bool Redirect(HttpContext ctx, string classfullname, string functionname, object m_InParame, string sUrlParame)
输入参数:
classfullname:调用模块类全称
functionname:调用函数
m_InParame:输入参数
sUrlParame:Url其他参数
返回
成功 true 失败 false
12. 跳转到指定的模块函数页面
bool Redirect(HttpContext ctx, string classfullname, string functionname, object m_InParame, string sUrlParame bool endRespons)
输入参数:
classfullname:调用模块类全称
functionname:调用函数
m_InParame:输入参数
sUrlParame:Url其他参数
endReponse:是否终结输出
返回
成功 true 失败 false
13.获得登陆者的信息
SessionLink GetSessionLink(HttpContext ctx)
返回SessionLink
public class SessionLink
{
public string addusername;//企业添加人账户
public string company;//企业名
public string companyid;//企业id
public string jsid;//角色id
public Hashtable m_TempData;//数据
public string orgna_id;//所在的部门id
public string realname;//真实姓名
public string sessionID;//sessionID
public string userid;//用户id
public string username;//用户名
}
未登陆那么返回null
14.复制对象
Object Clone(Object m_T)
15.获得记录集
DataSet GetSQLDataRecord(string sDBKey,string SQLStr, out bool bOK)
16获得记录对象集
List<T> GetSQLDataRecord<T>(string sDBKey, string SQLStr, out bool bOK) where T : class, new()
17 DataTable转对象集
List<T>DataTable2List<T>(DataTable m_Table) where T : class, new()
18. 对象集转DataTable
DataTable List2DataTable<T>(List<T> list)
19对象转Hashtable
void Object2Hashtable(Object m_OO,Hashtable m_HH)
输入参数
m_OO:要转换的对象
m_HH:转换后的Hashtable对象
20.获得数据库连接相关信息
bool GetDBLink(string sDBKey, Object m_InOBJ, out string strOutConn, out DBType m_OutDBType,out Object m_OutOBJ)
参数:
sDBKey:及自身模块的上 sDBKey 连接库Key
m_InOBJ:必要参数 目前为空
strOutConn:返回连接串
m_OutDBTyep:返回数据库类型
主要有(
DBType.MSSQL:SQLServer数据库
DBTye.ACCESS: ACCSESS数据库
DBType:MYSQL:MYSQL数据库
DBType.ORACLE:ORACLE数据库
DBType.PGSQL:PGSQL数据库
DBType.SQLITE:SQLITE数据库
21.保存用户Cache数据 注意m_T必须是可以序列化的
static bool SaveUserCache<T>(HttpContext ctx, string sKey, T m_T)
输入参数
sKey:为键名
22. 保存用户Cache数据加滑动失效时间 注意m_T必须是可以序列化的
Static bool SaveUserCache<T>(HttpContext ctx,string sKey, T m_T, TimeSpan m_nOverTime)
输入参数
sKey:为键名
m_nOverTime:失效时间
23.读取用户指定的 Cache
Static bool ReadUserCache<T>(HttpContext ctx,string sKey, out T m_T)
输入参数
sKey:为键名
24.清除用户指定的键值
Static bool ClearUserCache<T>(HttpContext ctx, string sKey)
输入参数
sKey:为键名
25.保存全局Cache
static protected bool SaveCache<T>(HttpContext ctx, string sKey, T m_T)
输入参数:
sKey:键名
m_T:数据
26 保存全局Cache
static protected bool SaveCache<T>(HttpContext ctx, string sKey, T m_T, TimeSpan m_nOverTime)
输入参数
sKey:值名
m_nOverTime:超时
27 读取全局Cache
static protected bool ReadCache<T>(HttpContext ctx, string sKey, out T m_T)
输入参数
sKey:键名
m_T:获得的数据
28.保存用户共享Cache数据 注意m_T必须是可以序列化的
static bool SaveUserShareCache<T>(HttpContext ctx, string sKey, T m_T)
输入参数
sKey:为键名
29. 保存用户共享Cache数据加滑动失效时间 注意m_T必须是可以序列化的
Static bool SaveUserShareCache<T>(HttpContext ctx,string sKey, T m_T, TimeSpan m_nOverTime)
输入参数
sKey:为键名
m_nOverTime:失效时间
30.读取用户共享指定的 Cache
Static bool ReadUserShareCache<T>(HttpContext ctx,string sKey, out T m_T)
输入参数
sKey:为键名
31.清除用户共享指定的键值
Static bool ClearUserShareCache<T>(HttpContext ctx, string sKey)
输入参数
sKey:为键名
32.清除Cookie
static protected void ClearCookie(HttpContext ctx, string sKey)
输入参数
sKey:键名
33.P2P服务之间调用
static protected bool CallP2PModeFunction(HttpContext ctx, string ServerName, string ClassFullName, string FunctionName, Object m_InParame, out Object m_OutParame, out string sError)
输入参数
ServerName:调用的P2P服务名
ClassFullName:类名
FunctionName:函数名
m_InParame:输入参数
m_OutParame:输出参数
34 获得二级域名
protected static string GetSLD(HttpContext ctx)
返回二级域名
35获得多个模块的调用权限
static protected ReturnJson HaveManyPower(HttpContext ctx, string[] sClassFullNameArray, string[] sFunctionNameArray, bool bClient)
输出参数
返回的m_ReturnOBJ为Hashtable
Key为:ClassFullName.FunctionName
Value:可使用为true,不可使用为false
36获得P2P调用权限
static public ReturnJson HaveP2PPower(HttpContext ctx, Object m_Parame)
输入 m_Parame为Json对象{ ClassFullName =, FunctionName =}
37. 使用框架消息
static protected void BindP2PMessage(string MessageType, Action<string, object> m_MessageCallBack)
输入参数
MessageType:消息类型
m_MessageCallBack:消息回调函数
38.使用框架任务
static protected void BindP2PWork(string WorkType, Action<string, object> m_WorkCallBack)
输入参数
m_WorkType:任务名
m_WorkCallBack::任务回调函数
39.发送P2P消息
static protected bool PostP2PMessage(string ActionP2PServerName, string MsgType, Object m_MsgData)
输入参数:
ActionP2PServerName:消息到达的P2P服务名
MsgType:消息类型
m_MsgData:消息数据
40.给自己发P2P消息
static protected bool PostSelfP2PMessage( string MsgType, Object m_MsgData)
输入参数
MsgType:消息类型
m_MsgData:消息数据
41.添加任务
static protected bool AddP2PWork(string ActionP2PServerName, string WorkType, Object m_WorkData)
输入参数
ActionP2PServerName:要执行任务的P2P服务名
WorkType:任务类型
m_WorkData:任务数据
42.添加自身执行的任务
static protected bool AddSelfP2PWork(string WorkType, Object m_WorkData)
输入参数
WorkType:任务类型
m_WorkData:任务数据
43.添加系统任务
static protected bool AddSYSWork(string WorkType, Object m_WorkData)
输入参数
WorkType:任务类型
m_WorkData:数据类型
等于任务每个P2P服务都派发
44.添加循环任务
protected static void AddOneRunWork(DataFromFunction m_DataFromFunction, WorkRunFunction m_WorkRunFunction)
输入参数
public delegate bool DataFromFunction(object m_InParame, out object m_WorkRunFunctionInParame, out DateTime t, out bool bOver)
获得数据回调
m_InParme:输入数据项
m_WorkRunFunctionInParame:获得输出的数据
t:执行的时间
bOver: 是否执行完毕( 当bOver=true时那么循环任务结束)
45.执行任务
public delegate void WorkRunFunction(object m_InParame, out object m_NextInParame);
输入参数:m_InParame 执行任务的数据参数
m_NextInParame:获得任务完毕后的输出参数
46.发送邮件
static protected void SendMail(string recieveMail, string subject, string mailbody)
输入参数:
receiveMail:接收邮件地址
subject:主题
mailbody:邮件内容
47.发邮件
static protected bool SendMailState(string recieveMail, string subject, string mailbody, int nWait)
输入参数:
receiveMail:接收邮件地址
subject:主题
mailbody:邮件内容
iWait:等待的毫秒数
返回发送成败
48.发送邮件
static protected bool SendMailState(string recieveMail, string subject, string mailbody, string[] m_FileNameArray, int nWait)
输入参数:
receiveMail:接收邮件地址
subject:主题
mailbody:邮件内容
m_FileNameArray:要发送的文件数组
iWait:等待的毫秒数
返回发送成败
50.发送邮件
static protected void SendMail(string recieveMail, string subject, string mailbody, string[] m_FileNameArray)
输入参数:
receiveMail:接收邮件地址
subject:主题
mailbody:邮件内容
m_FileNameArray:要发送的文件
51.发送邮件
static protected bool SendMailState(string recieveMail, string subject, string mailbody, string FName, int nWait)
输入参数:
receiveMail:接收邮件地址
subject:主题
mailbody:邮件内容
m_FName:要发送的文件
iWait:等待的毫秒数
返回发送成败
52.发送邮件
static protected void SendMail(string recieveMail, string subject, string mailbody, string FName)
输入参数:
receiveMail:接收邮件地址
subject:主题
mailbody:邮件内容
m_FName:要发送的文件
53.读取Key值
static protected string GetConfigKeyString(string sKeyName)
54.获得模块的页面地址
static protected string GetModePageUrl(string ClassFullName,string FunctionName)
55.获得模块的执行地址
static protected string GetModeAjaxUrl(string ClassFullName, string FunctionName)
56.发送系统消息
static protected bool PublicSystemMessage(HttpContext ctx, string modename, string msgtype, string msg)
输入参数
modename:模块
msgtype:消息类型msgtype != "email" && msgtype != "warning" && msgtype != "personmsg"
msg:消息类型
57.获得用户的组织结构
static protected string GetUserOrg(string userid)
返回组织结构id
58.获得用户的组织结构
static protected string GetUserOrgFromUserName(string username)
返回组织结构id
59.获得用户所在的企业
static protected string GetUserCompany(string userid)
返回企业id
60.返回用户所在的企业
static protected string GetUserCompanyFromUserName(string username)
61.获得模块名
static protected string GetModeName(string JsonModePath)
62.直接调用P2P
static protected bool CallP2PModeFunction(HttpContext ctx, string ServerName, string ClassFullName, string FunctionName, Object m_InParame, out Object m_OutParame, out string sError)
输入参数:
ServerName:要调用的服务名
ClassFullName:类名
FunctionName:函数名
m_InParame:输入参数
m_OutParame:输出数据
sError:错误信息
返回:
是否有错误
重点介绍关于P2P调用
调用关键参数
自身的IP,登陆名,服务方的MarkKey
服务验证关键参数
来自那个IP,调用账户,自己的MarkKey
自动P2P路由可以调用 CallJsonModeFunction
63.获得模块的页面URL路径
static protected string GetModePageUrl(string ClassFullName,string FunctionName)
64.获得模块的ajax URL路径
static protected string GetModeAjaxUrl(string ClassFullName, string FunctionName)
65.添加函数说明
static protected void AddFunctionDescription(string ClassFullName,string FunctionName,string FunctionDescription,string InParameDescription,string OutParameDescription)
输入参数
ClassFullName:类名
FunctionName:函数名
FunctionDescription:函数功能描述
InParameDescription:输入参数描述
OutParameDescription:输出参数描述
关于函数属性的权限修饰
权限修饰为一个json例
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson ModeFunction(HttpContext ctx, Object m_Parame)
其中对于函数的属性的json KEY主要为以下几种
CanNoLogin: true表示未登陆状态下可以使用,false为必须登陆调用 默认登陆状态可调用
CanClient:浏览器是否可以直接调用 true为可以调用 false 为不可调用 默认客户端可调用
CanThird:第三方是否可以调用,true时可以调用 false 不可以调用 默认第三方不可调用
CanEnable:当为false时禁止所用调用 默认为都可调用
SessionMode: nosupport support readonly 默认nosupport
CanPost:true可以Post false 不能Post 默认可以
CanGet:true 可以Get false 不能 Get 默认可以
CanP2P:true可以平台互调 false 不可调用 默认可调用
默认可以不加修饰 表示登陆状态可调用,浏览器可调用,第三方不能调用 运行权限打开
重要类介绍
数据库操作类 BaseEngineDB 引用XNDBEngine.dll
using XNWebEngine. XNDBEngine
m_DBType:获得链接库的类型
public enum DBType
{
MSSQL = 0,
ORACLE = 1,
ACCESS = 2,
MYSQL = 3,
PGSQL = 4,
SQLITE = 5,
}
1.设置连接Key
public void SetDBKey(string sDBKey,Object m_OBJ)
2.写数据库日志
static public void WriteDBLog(string SQLStr)
3. 获得数据库连接串和数据库类型
public bool GetDBLink(out string strOutConn,out DBType m_OutDBType)
4.写模块日志
static public void WriteJsonModeLog(string SQLStr)
5.获得串参数
static public Hashtable VarString(string sVarName,string sVarValue)
6.获得时间参数
static public Hashtable VarDateTime(string sVarName,string sVarValue)
7.获得int64参数
static public Hashtable VarInt64(string sVarName, string sVarValue)
8.获得in32参数
static public Hashtable VarInt32(string sVarName,string sVarValue)
9.获得int16参数
static public Hashtable VarInt16(string sVarName, string sVarValue)
10.获得Decimal参数
static public Hashtable VarDecimal(string sVarName, string sVarValue)
11.获得float参数
static public Hashtable VarFloat(string sVarName, string sVarValue)
12.获得Bool参数
static public Hashtable VarBool(string sVarName, string sVarValue)
13.获得所有表
public ArrayList XNGetTables()
14.获得表的字段信息
public ArrayList XNGetTableFields(string sName)
15.执行sql
public bool XNActSQL(string SQLStr, out int m_ActCnt)
public bool XNActSQL(ArrayList m_SQLArray, out ArrayList m_ActCntArray)
public bool XNActSQL(string[] m_SQLArray, out int[] m_ActCntArray)
带参数的
public bool XNActSQLVar(string SQLString, out int nCnt, List<Hashtable> list)
list<Hashtable>表示参数Hashtable的list Hashtable为参数见5-12参数函数
public bool XNActSQLVar(string SQLString, out int nCnt,params Hashtable[] list)
public bool XNActSQLVar(ArrayList m_SQLArray, out ArrayList m_nActCntArray, List<Hashtable[]> m_VarArrayList)
public bool XNActSQLVar(ArrayList m_SQLArray, out ArrayList m_nActCntArray, List<List<Hashtable>> m_VarArrayList)
16获得数据
public DataSet XNGetRecord(string SQLStr, out bool bOK)
public DataSet XNGetRecord(ArrayList m_SQLArray, out bool bOK)
public DataSet XNGetRecord(ArrayList m_TSQLArray, out bool bOK)
参数化的
public DataSet XNGetRecordVar(string SQLString, out bool bOK, List<Hashtable> list)
public DataSet XNGetRecordVar(ArrayList m_SQLArray, out bool bOK, List<List<Hashtable>> m_VarArrayList)
public DataSet XNGetRecordVar(ArrayList m_SQLArray, out bool bOK, List<Hashtable[]> m_VarArrayList)
翻页函数
public Object XNGetPageRecord(string sBeforeFrom, string sAfterFrom, int nPageSize, int nCurPage, string sSumField, string id,bool bDESC, out bool bOK)
输入参数:
sBeforeFrom: from之前的SQL串不包括select 的
sAfterFrom: from之后的SQL串
nPageSize:页大小
nCurPage:当前页
sSumField:汇总字段,没有汇总赋值空串
id:排序字段
bDESC:顺序
返回 RecordReturn
public class RecordReturn
{
public bool bOK;
public object data;
public object m_OBJ;
public int nPageCount;
public int nPageIndex;
public int nPageSize;
public double nSumData;
public int RecordCnt;
public string sError;
}
public Object XNGetPageRecordVar(string sBeforeFrom, string sAfterFrom, int nPageSize, int nCurPage, string sSumField, string id, bool bDESC,out bool bOK,params Hashtable[] list)
输入参数:
sBeforeFrom: from之前的SQL串不包括select 的
sAfterFrom: from之后的SQL串
nPageSize:页大小
nCurPage:当前页
sSumField:汇总字段,没有汇总赋值空串
id:排序字段
bDESC:顺序
Hashtable[]:为参数数组,参数见5-12函数
返回 RecordReturn
public Object XNGetSQLPageRecord(string SQLStr, int nPageSize, int nPageIndex,out bool bOK)
返回 RecordReturn
public Object XNGetSQLPageRecord(string SQLStr, string sSumField, int nPageSize, int nPageIndex,out bool bOK)
返回 RecordReturn
public Object XNGetSQLPageRecordVar(string SQLStr, int nPageSize, int nPageIndex, out bool bOK,params Hashtable[] list)
Hashtable[]:为参数数组,参数见5-12函数
返回 RecordReturn
public DataSet XNRunProcedureVar(string storedProcName, params Hashtable[] list)
D.关于视图生成函数的进一步说明
RenderPageView 输出视图数据
所有视图都派生于XNWebEngine.JsonBase.MyBasePageView"
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="ReportMode" %><!—自身模块→
<%@ Assembly Name="ActionModel"%> <!-- 加入Model-->
<%@ Import Namespace="XNWebEngine.JsonBase" %> <!—固定加入→
<%@ Import Namespace="System" %> <!—固定加入→
<%@ Import Namespace="ReportMode" %> <!—自身命名空间→
<%@ Import Namespace="System.Collections.Generic"%>
<%@ Import Namespace="XNWebEngine.MicroJson"%><!—固定加入→
<%@ Import Namespace="ActionModel"%><!—加入模型→
<%@ Import Namespace="XNWebEngine.IServerPort" %> <!---加入接口->
使用Model,Model为该页面里的变量为Model的变量
<%
使用例子
将Nodel转为自己的类型
List<userModel> m_ListData = Model as List<userModel>;
for(int i=0;i<m_ListData.Count;i++)
{
userModel m_User = m_ListData[i];
%>
<tr>
<td>
<%=m_User.username %>
</td>
<td>
</td>
</tr>
<%
}%>
RenderControlView输出控件视图数据
所有控件视图都派生于XNWebEngine.JsonBase. BaseUserControlView
<%@ Control Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.BaseUserControlView" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %><!—固定加入→
<div style="background-color:Menu">
<%
Response.Write(Model);
if(Session["A"]!=null)
{
Response.Write(Session["A"]);
}
string sError;
if(HavePower("ReportExMode.BookEx","TestFunction",false,out sError))
{
Response.Write("可以执行ReportExMode.BookEx的函数TestFunction");
}
else
{
Response.Write("不可以执行ReportExMode.BookEx的函数TestFunction");
}
%>
</div>
<p>
<img alt="" src="/img/pic.jpg" /></p>
使用Model,Model为该控件视图里的变量为Model的变量
视图的功能辅助函数
1.判断是否有指定模块的函数的执行权限
bool HavePower(string ClassFullName,string FunctionName,bool bClient,out string sError)
//ClassFullName:类全名
//FunctionName:函数名
//bClient:是否为浏览器调用
//sError:输出错误信息
//返回:是否有指向权限
2.执行指定模块下的函数
Bool CallModeFunction(string classfullname, string functionname, object m_InParame, out object m_OutParame, out string sError)
//ClassFullName:类全名
//FunctionName:函数名
//m_InParame:输出参数
//m_OutParamete:输出
//sError:错误信息
//返回是否执行成功
3. 执行指定模块的函数返回HTML
public string RenderModeHTML(string classfullname, string functionname, object m_InParame)
//ClassFullName:类全名
//FunctionName:函数名
//m_InParame:输出参数
//返回HTML串
4.获得当前用户信息
SessionLink GetSessionLink()
5.保存用户Cache数据 注意m_T必须是可以序列化的
bool SaveUserCache<T>( string sKey, T m_T)
输入参数
sKey:为键值
6. 保存用户Cache数据加滑动失效时间 注意m_T必须是可以序列化的
bool SaveUserCache<T>(string sKey, T m_T, TimeSpan m_nOverTime)
输入参数
sKey:为键值
m_nOverTime:失效时间
7.读取用户指定的 Cache
bool ReadUserCache<T>(string sKey, out T m_T)
输入参数
sKey:为键值
8.清除用户指定的键值
bool ClearUserCache<T>( string sKey)
输入参数
sKey:为键值
9.保存Cookie
protected bool SaveCookie(string name, string value)
protected bool SaveCookie(string name, string value, TimeSpan m_T)
10.读取Cookie
protected string ReadCookie( string name)
11.清除Cookie
protected void ClearCookie(string sKey)
12.读写Cache
protected bool SaveCache<T>(string sKey, T m_T)
protected bool ReadCache<T>(string sKey, out T m_T)
protected bool SaveCache<T>(string sKey, T m_T, TimeSpan m_nOverTime)
protected bool ClearCache(string sKey)
13.读写用户Cache
protected bool SaveUserCache<T>(string sKey, T m_T)
protected bool ReadUserCache<T>(string sKey, out T m_T)
protected bool SaveUserCache<T>(string sKey, T m_T, TimeSpan m_nOverTime)
protected bool ClearUserCache(string sKey)
14.读写用户级共享Cache
protected bool SaveUserShareCache<T>(string sKey, T m_T)
protected bool ReadUserShareCache<T>(string sKey, out T m_T)
protected bool SaveUserShareCache<T>(string sKey, T m_T, TimeSpan m_nOverTime)
protected bool ClearUserShareCache(string sKey)
15.获得登陆信息
protected SessionLink GetSessionLink()
E:视图页面辅助函数
1.生成链接
//sText:生成的文本
//sID:生成的链接id;
//classfullname:执行类的完整名
//functionname:函数名
//m_InParame:输入参数
//sUrlParame:url参数
string Html. ActionLink(string sText,string sID,string classfullname, string functionname, object m_InParame,string sUrlParame)
2.生成链接
//sText:生成的文本
//sID:生成的链接id;
//classfullname:执行类的完整名
//functionname:函数名
//m_InParame:输入参数
string Html.ActionLink(string sText,string sID,string classfullname, string functionname, object m_InParame)
3. 生成新窗口打开链接
//sText:生成的文本
//sID:生成的链接id;
//classfullname:执行类的完整名
//functionname:函数名
//m_InParame:输入参数
string Html.ActionOpenLink(string sText, string sID, string classfullname, string functionname, object m_InParame)
4.生成输入框
//Name:输入框名
//Value:输入内容
//style:样式风格
string Html.TextBox(string Name,string Value,string style)
5.生成文本域
//Name:输入框名
//Value:输入内容
//sCol:列
//sRow:行
//style:样式风格
string Html.TextArea(string Name,string Value,string sCol,string sRow,string style)
6.Form开始函数
//classfullname:类全名称
//functionname:函数名
//sID:元素ID
//bNewOpen:是否打开新窗口
string Html.BeginForm(string classfullname,string functionname,string sID,bool bNewOpen)
7.Form结束函数
string Html.EndForm()
页面上使用例子
<%=Html.ActionOpenLink("新窗口生成链接","1","ReportMode.Book","LinkFunction",m_Var)%>
<%=Html.BeginForm("ReportMode.Book","UpFile","1234",false)%>
<input name="file1" type="file" />
<input name="file2" type="file" />
<input type="submit" name="button" id="button" value="提交" />
<%=Html.EndForm()%>
F.通用 WebForm开方式页面派生于FullPage
1.是否可调用
bool HavePower(string ClassFullName, string FunctionName, out string sError)
参数输入
ClassFullName:调用模块的类全称
FunctionName:调用的函数
sError:输出不能调用原因
返回 可以调用true 不能调用false
2.多权判断
public bool[] HavePowers(string[] ClassFullNameArray, string[] FunctionNameArray, out string[] sErrorArray)
输入参数:ClassFullNameArray 类数组
FunctionNamearray 函数数组
返回:是否运行的数组
3.调用模块函数
bool CallModeFunction(string ClassFullName, string FunctionName, Object m_InParame, out Object m_OutParame, out string sError)
输入参数
ClassFullName:调用模块的类全称
FunctionName:调用的函数
m_InParame:输入参数
m_OutParame:输出数据 及模块 ReturnJson中的 m_ReturnOBJ;
sError:调用失败的错误原因
返回:调用成功 true 调用失败 false
3.获得登陆用户信息
SessionLink GetSessionLink()
返回SessionLink
public class SessionLink
{
public string companyid;//所在企业id
public string jsid;//角色
public Hashtable m_TempData;//临时存储数据
public string orgna_id;//分支结构id
public string userid;//用户id
public string username;//登陆账户
}
4.直接登陆
bool DirectLogin(string username, string password, bool bEvent, string sCodeName, string sCodeValue, out string sLGKey, out string sMsg)
输入参数
Username:登陆账户
Password:口令
bEvent:是否支持事件目前赋false
sCodeName:验证码的名字
sCodeValue:验证码值
sLGKey:输出登陆Key目前无用
sMsg:登陆失败消息
返回:成功登陆true 登陆失败false
5. 登出系统
public void LoginOut(string sUrl)
参数:
sUrl:登出系统后跳转的页面
6.保存Cookie
protected bool SaveCookie(string name, string value)
protected bool SaveCookie(string name, string value, TimeSpan m_T)
7.读取Cookie
protected string ReadCookie( string name)
8.清除Cookie
protected void ClearCookie(string sKey)
9.读写Cache
protected bool SaveCache<T>(string sKey, T m_T)
protected bool ReadCache<T>(string sKey, out T m_T)
protected bool SaveCache<T>(string sKey, T m_T, TimeSpan m_nOverTime)
protected bool ClearCache(string sKey)
10.读写用户Cache
protected bool SaveUserCache<T>(string sKey, T m_T)
protected bool ReadUserCache<T>(string sKey, out T m_T)
protected bool SaveUserCache<T>(string sKey, T m_T, TimeSpan m_nOverTime)
protected bool ClearUserCache(string sKey)
11.读写用户级共享Cache
protected bool SaveUserShareCache<T>(string sKey, T m_T)
protected bool ReadUserShareCache<T>(string sKey, out T m_T)
protected bool SaveUserShareCache<T>(string sKey, T m_T, TimeSpan m_nOverTime)
protected bool ClearUserShareCache(string sKey)
G.辅助Json类
位于MicroJson.dll
命名空间
using XNWebEngine.MicroJson;
using XNWebEngine. MicroJson
public class JsonHelper{
static public T OBJToType<T>(Object m_JsonObj)//将json的OBJ对象转为指定类型
static public string OBJToJsonStr(Object O)//将OBJ对象转为Json串
static public T JsonStrToOBJ<T>(string jsonStr)//将json串转为指定类型
static public Object DataTable2Object(DataTable dt)//DataTable转符合json的object
static public Dictionary<string, object> JsonToDictionary(string jsonData)
static public void DicToHashtable(Dictionary<string, object> m, Hashtable h)
static public void JsonToHashtable(string jsonData, Hashtable h)
static public void OBJToHashTable(Object O, Hashtable h)
static public Hashtable[] JsonArrayToHash(Hashtable m_JsonArrayHash, string Key)
static public Hashtable[] JsonHashDotArray(Hashtable m_JsonHashData, string name, out int nSize)
关于客户端ajax调用介绍封装函数如下
所有公用javascript位于站点下public\javascript
文件为
在页面中引入
<head runat="server">
<script src="/public/script/xncore.js" type="text/javascript"></script>
<script src="/public/script/json2.js" type="text/javascript"></script>
<title>无标题页</title>
</head>
Xncore.js
1.登陆函数
function LG(m_LGName, m_Pwd, m_CodeName, m_CodeValue, m_ReturnLG)
参数
m_LGName:登陆账户
m_Pwd:口令
m_CodeName:验证码名
m_CodeValue:验证码值
m_ReturnLG登陆回调
回调函数类型
function ReturnLGPage(bOK, m_OBJ)
参数
bOK 调用成功 m_OBJ调用返回信息
2. 调用模块函数
CallFunction(m_ClassFullName,m_FunctionName,m_Json,ReturnRunFunction)
参数
m_ClassFullName:要调用的模块全称
m_FunctionName:函数名
ReturnRunFunction:回调用函数
回调说明
Function ReturnRunFunction(bOK,m_ReturnOBJ)
bOK:是否成功调用 成功 true 失败false 当为失败时候,m_ReturnOBJ为失败的文本信息
m_ReturnOBJ:为模块函数ReturnJson返回的m_ReturnOBJ对象
跨域可调用函数
[ModeMethod("{CanNoLogin:true,CanEnable:true,CanCrossDomain:true}")]
static public ReturnJson NULLLink(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
try
{
//BaseJsonMode.CanSPCross(ctx);
SessionLink m_SessionLink = GetSessionLink(ctx);
if(m_SessionLink!=null)
{
m_ReturnJson.bOK = true;
}
}
catch
{
m_ReturnJson.bOK = false;
}
return m_ReturnJson;
}
js端跨域调用
var m_Data = {};
$.ajax({
url: imurl + '/IMessage/NULLLink.ajax?LGKey=' + lgkey,
type: 'POST',
dataType: 'json',
xhrFields: {
withCredentials: true
},
// 允许跨域
crossDomain: true,
data: m_Data,
cache: false,
success: function (result) {
try {
}
catch (r) {
}
}
});
添加系统函数
static private bool MyMode(Object m_Parame,out Object m_outParame)
{
m_outParame = null;
Hashtable m_HH = new Hashtable();
m_HH["m_Parame"] = m_Parame;
m_HH["A"] = 123;
m_outParame=m_HH;
return true;
}
m_JsonModeEngine.SetSYSCallModeFunctionPTR("IMessage", "MyMode", MyMode);
IJsonModeInterface接口调用
bool CallModeFunctionPTR(string ClassName, string FName, object m_Parame, out object m_outParame);
拦截模块函数
ICoreInterface接口
void HookAPI(string ClassFullName, string FunctionName, HookFunctionPTR m_HookFunctionPTR);
void ClearAllHookAPI();
void ClearHookAPI(string ClassFullName, string FunctionName);
public delegate TReturnJson HookFunctionPTR(HttpContext ctx, object m_Parame, out bool bNext);
Windows MSMQ消息队列相关
Windows消息指定库执行SQL
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
List<string> m_SQLList = new List<string>();
string SQLString = "update sys_users set password='123' where username=@username";
m_SQLList.Add(SQLString);
List<List<Hashtable>> m_varListList = new List<List<Hashtable>>();
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarString("@username", "xn"));
m_varListList.Add(m_varList);
NodeDBEngine.MSMQXNActSQLVar("003", m_SQLList, m_varListList);
Windows消息执行一个node函数
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
Hashtable m_HHH = new Hashtable();
m_HHH["A"] = "徐能";
m_HHH["B"] = 123;
NodeMSMQParame m_NodeMSMQParame = new NodeMSMQParame();
m_NodeMSMQParame.fullclassname = "TemplateMode";
m_NodeMSMQParame.functionname = "MyWebAPI";
m_NodeMSMQParame.m_Parame = m_HHH;
m_NodeMSMQParame.MaxRunCnt = 0;
m_NodeMSMQParame.GroupKey = P2PServerName;
m_NodeMSMQParame.nWaitRunSecond = 60 * 60 * 24;
if (CallNodeMSMQNodeWebFunction(null, m_NodeMSMQParame))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用失败";
return m_ReturnJson;
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用成功";
return m_ReturnJson;
}
return m_ReturnJson;
Windows消息执行一个url
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
Hashtable m_HHH = new Hashtable();
m_HHH["name"] = "阿里22222";
CallNodeMSMQWebAPIFunction("http://www.163.com", m_HHH);
return m_ReturnJson;
Windows消息执行服务的NodeAPI
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
Hashtable m_HH = new Hashtable();
m_HH.Add("hh", "你好");
CallNodeMSMQNodeAPIFunction("NodeCoreDLL.CoreDLL", "HelloWorld", m_HH, "http://localhost:3664/MessageAndWork.MWMemo/Hello_RawJson.ajax");
return m_ReturnJson;
调用别webservice
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
m_ReturnJson.m_ReturnOBJ = WebServiceHelper.InvokeWebService("http://localhost:25423/API.asmx", "Service1", "HelloOBJ");
MyData m_MyData=JsonHelper.OBJToType<MyData>(m_ReturnJson.m_ReturnOBJ);
m_ReturnJson.m_ReturnOBJ = m_MyData;
return m_ReturnJson;
调用javascript
static private string AA(int A, int B, string str)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
str = HttpUtility.UrlDecode(str);
m_ReturnJson.sMsg = "获得个人资料失败";
return "乘以:" + (A * B).ToString() + ",车牌号码:川A 88888,传入的str:" + str;
}
static private string HelloWorld(int A, int B, string str)
{
return AA(A, B, str);
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson HelloJS(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
object m_V8 = LoadJSCode("");
object result = "1";
result = RunJSCode(m_V8, "MyJS(5,6,'" + HttpUtility.UrlEncode("English&Chinese你好啊") + "')");
result = HttpUtility.UrlDecode(result.ToString()).Replace("\u0026", "&");
string allstr = "MyJS:" + result + "\r\n";
result = RunJSCode(m_V8, "RunFrameFunction(5,6,'" + HttpUtility.UrlEncode("English&Chinese你好啊") + "')");
result = HttpUtility.UrlDecode(result.ToString()).Replace("\u0026", "&");
allstr += "RunFrameFunction:" + result;
m_ReturnJson.m_ReturnOBJ = allstr;
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson HelloCHNJS(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
object m_V8 = LoadJSCode("");
object result = "1";
result = CHNRunJSCode(m_V8, "MyJS", 5, 6, "English&Chinese你好啊");
string allstr = "MyJS:" + result.ToString() + "\r\n";
result = CHNRunJSCode(m_V8, "RunFrameFunction", 5, 6, "English&Chinese你好啊");
allstr += "RunFrameFunction:" + result.ToString();
m_ReturnJson.m_ReturnOBJ = allstr;
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson HelloJson(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
object m_V8 = LoadJSFile(m_JsonModePath, "js\\hellojson.js");
object result = "1";
Hashtable m_HH = new Hashtable();
m_HH.Add("A", 1);
m_HH.Add("B", 2);
m_HH.Add("C", "中华");
string str = JsonHelper.OBJToJsonStr(m_HH);
result = CHNRunJSCode(m_V8, "hello", str);
m_ReturnJson.m_ReturnOBJ = result;
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
// //特别注意由JS返回带中文的串一定要用函数encodeURI(),在C#中使用 HttpUtility.UrlDecode提取
static public ReturnJson RunApplicationJS(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
// object m_V8=LoadJSCode(@"function Welcome(m_o){
//m_o=m_o.replace('%25','%');
//var str=decodeURI(m_o);
//var A={};
//A.a=encodeURI(str).replace('%25','%');
// return A;
// }
//function Hello()
//{
//
// var str= HelloWorld(7,8);
//
//
//return encodeURI(str).replace('%25','%');
//}
//
//
//");
object m_V8 = LoadJSCode("");
//string str = JsonHelper.OBJToJsonStr(new { name = "徐能" });
//str = HttpUtility.UrlEncode(str);
//object result = RunJSCode(m_V8,"Welcome('" + str + "')");
//Hashtable m_HH = new Hashtable();
//JsonHelper.OBJToHashTable(result, m_HH);
//str = m_HH["a"].ToString();
//str = HttpUtility.UrlDecode(str);
//m_ReturnJson.sMsg = str;
//result = RunJSCode(m_V8,"Hello()");
//result = HttpUtility.UrlDecode(result.ToString());
//m_ReturnJson.sMsg += " " + result.ToString();
object result = "1";
result = RunJSCode(m_V8, "getFlatternDistance(31.14,121.29,43.45,87.36)");
m_ReturnJson.sMsg += " 距离:" + result.ToString();
return m_ReturnJson;
}
hellojson.js内容:
function hello(str)
{ str = str.replace('%25', '%');
str = decodeURI(str);
var obj = eval('(' + str + ')'); //由JSON字符串转换为JSON对象
obj.A = obj.A + 1;
obj.C = obj.C + "人民共和国";
str = obj2str(obj);
return encodeURI(str).replace('%25', '%');
}
消息与任务
BindP2PMessage("HelloMyMessage",ReturnHelloMyMessage);
BindP2PWork("HelloMyWork", ReturnHelloMyWork);
static private void ReturnHelloMyMessage(string sFromServer,string message,Object m_MsgData)
{
WriteLog("收到消息:" + message + ",数据:" + m_MsgData.ToString());
}
static private void ReturnHelloMyWork(string sFromServer,string workName, Object m_WorkData)
{
WriteLog("收到任务:" + workName + ",数据:" + m_WorkData.ToString());
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson PostSelfMessage(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = PostSelfP2PMessage("HelloMyMessage", "自己消息数据");
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson PostSelfWork(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = AddSelfP2PWork("HelloMyWork", "自己任务数据");
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson PostToMessage(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = PostP2PMessage("服务调用22", "HelloMyMessage", "特指向消息数据");
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson PostToWork(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = AddP2PWork("服务调用22", "HelloMyWork", "特指向任务数据");
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson PostAllMessage(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = PostPublicMessage("HelloMyMessage", "公共消息数据");
/*
Hashtable m_HH = new Hashtable();
m_HH.Add("ViewCreateFullClassName", "rrr");
m_HH.Add("ViewCreateFunctionName", "rrrrr");
PostPublicMessage("VIEWCACHE", m_HH);
*/
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson PostAllWork(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = AddSYSWork("HelloMyWork", "公共任务数据");
return m_ReturnJson;
}
发邮件
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
Hashtable m_HH = new Hashtable();
m_HH.Add("hh", "你好");
SendMail("463516000@qq.com", "你还", "与偶见内同");
return m_ReturnJson;
MQTT相关
static public void SetJsonMode(string sPath, string sName)
{
m_JsonModePath = sPath;
m_JsonModeName = sName;
sDBKey = "sysconn";
//描述使用
AddFunctionDescription("Aeaa", "SetJsonMode", "设置模块路径和名", "sPath:模块路径,sName:模块名", "无");
BindP2PMessage("modeReady", onModeReady);
}
static private void onModeReady(string sFromServer, string message, Object m_MsgData)
{
try
{
Hashtable m_inHH = new Hashtable();
m_inHH["topic"] = "/+/upAeaa";
m_inHH["modeClass"] = "Aeaa";
m_inHH["qos"] = "最少一次";
m_inHH["authFunc"] = "upAeaa_authFunc_Action";
m_inHH["pubAuthFunc"] = "upAeaa_pubAuthFunc_Action";
m_inHH["subAuthFunc"] = "upAeaa_subAuthFunc_Action";
m_inHH["actionFunc"] = "upAeaa_actionFunc_Action";
m_inHH["linkFunc"] = "upAeaa_linkFunc_Action";
Object m_outOBJ;
RunShareFunction(null, "CoreSYS.SYS", "InitOneFreeMQTT_共享函数", out m_outOBJ, m_inHH);
m_inHH.Clear();
m_inHH["topic"] = "/+/downAeaa";
m_inHH["modeClass"] = "Aeaa";
m_inHH["qos"] = "最少一次";
RunShareFunction(null, "CoreSYS.SYS", "InitOneFreeMQTT_共享函数", out m_outOBJ, m_inHH);
}
catch
{
}
}
static public ReturnJson upAeaa_authFunc_Action(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_authFunc_Action:"+JsonHelper.OBJToJsonStr(m_Parame));
//m_ReturnJson.bOK = false;
}
catch
{
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_pubAuthFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_pubAuthFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
}
catch
{
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_subAuthFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_subAuthFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
}
catch
{
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_actionFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_actionFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
}
catch
{
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_linkFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_linkFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
}
catch
{
}
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson getMQTT(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
try
{
using(BaseEngineDB m_BaseEngineDB=NodeDBEngine.GetBaseEngineDB())
{
string SQLString = "select * from sys_mqttservices where isuse=1 order by newid()";
DataSet pSet = m_BaseEngineDB.XNGetRecord(SQLString, out m_ReturnJson.bOK);
if(!m_ReturnJson.bOK)
{
m_ReturnJson.sMsg = "查询MQTT信息失败";
return m_ReturnJson;
}
if(pSet.Tables[0].Rows.Count==0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "未有MQQ服务启用";
return m_ReturnJson;
}
m_ReturnJson.bOK=true;
Hashtable m_ReturnHH = new Hashtable();
m_ReturnHH["ip"] = pSet.Tables[0].Rows[0]["ip"].ToString();
m_ReturnHH["port"] = pSet.Tables[0].Rows[0]["port"].ToString();
m_ReturnHH["wsport"] = pSet.Tables[0].Rows[0]["port"].ToString();
m_ReturnHH["wspath"] = "/mqtt";
List<Hashtable> m_subTopicHHList = new List<Hashtable>();
Hashtable m_oneSubHH = new Hashtable();
m_oneSubHH["topic"] = "/+/downAeaa";
m_oneSubHH["qos"] = 1;
m_subTopicHHList.Add(m_oneSubHH);
m_ReturnHH["subs"] = m_subTopicHHList;
List<Hashtable> m_pubTopicHHList = new List<Hashtable>();
Hashtable m_onePubHH = new Hashtable();
m_onePubHH["topic"] = "/+/upAeaa";
m_onePubHH["qos"] = 1;
m_pubTopicHHList.Add(m_onePubHH);
m_ReturnHH["pubs"] = m_pubTopicHHList;
m_ReturnJson.m_ReturnOBJ = m_ReturnHH;
return m_ReturnJson;
}
}
catch(Exception e)
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="getMQTT error:"+e.ToString();
}
return m_ReturnJson;
}
行业账户资金管理统一接口
配置行业的支付接口
具体行业配置例子/CoreSYS.SYS/configTradeAccountPayPage.aspx?fullclassname=userblog&nodeuuid_nodeuuid=16038823397660000003000
信息存储在sys_trade的ext字段
payconfig:
{
"m_personpayHH": {
"appkey": "5fee0440519842909ba9929c40d8926c",
"appid": "7443e9ea7b7e40b0ad46920ee93456a4003",
"payurl": "/"
},
"m_weixinpayHH": {
"APPID": "支付宝公钥",
"SSLCERT_PASSWORD": "",
"MCHID": "商户号",
"KEY": "api密码",
"APPSECRET": "appsecrt"
},
"m_cardHH": {
"cardurl": "充值地址"
},
"nowpaytype": "personpay",
"m_vipHH": {
"clickcnt": "5",
"vipyear": "0.03",
"vip": true,
"vipmonth": "0.01",
"vipseason": "0.02"
},
"m_alipayHH": {
"partner": "合作身份者ID",
"alipay_public_key": "支付宝公钥",
"seller_id": "收款支付宝账号",
"private_key": "商户私钥"
}
}
比如blog_sites的支付配置
行业账户余额/CoreSYS.SYS/accountMoneyPage.aspx?fullclassname=userblog&nodeuuid_nodeuuid=16038823397660000003000
行业个人积分所在表sys_tradeaccountmoneys,积分流水表sys_tradeaccountmoneyflows
行业账户余额充值页面/CoreSYS.SYS/TradeAccountInMoneyPage.aspx?fullclassname=userblog&nodeuuid_nodeuuid=16038823397660000003000&returnurl=/userblog/default.aspx
共享接口
冻结行业账户资金
FreezeTradeAccountMoney_共享函数
参数
fullclassname
nodeuuid_nodeuid
money
sys_users_crossnodeuuid
memo
fromtable,
fromtableshowname
fromtable_nodeuuid
ctx.items["m_SQLList"],ctx.items["m_varListList"]
解冻行业账户资金
UnFreezeTradeAccountMoney_共享函数
参数
fullclassname
nodeuuid_nodeuid
money
sys_users_crossnodeuuid
memo
fromtable,
fromtableshowname
fromtable_nodeuuid
ctx.items["m_SQLList"],ctx.items["m_varListList"]
直接行业账户资金加减
ActionTradeAccountMoney_共享函数
参数
fullclassname
nodeuuid_nodeuid
money
sys_users_crossnodeuuid
memo
fromtable,
fromtableshowname
fromtable_nodeuuid
ctx.items["m_SQLList"],ctx.items["m_varListList"]
MQTT自定义消息使用
公有消息是指级别后不再有级别标识值 如企业公有消息 .../company
私有消息是指级别后带有级别标识值 如企业私有消息 .../company/14488934049460000003000 其中14488934049460000003000为企业标识耶就是企业id
典型代码
初始
static public void SetJsonMode(string sPath, string sName)
{
m_JsonModePath = sPath;
m_JsonModeName = sName;
sDBKey = "sysconn";
//描述使用
AddFunctionDescription("Aeaa", "SetJsonMode", "设置模块路径和名", "sPath:模块路径,sName:模块名", "无");
//事件消息
#if TEST
BindP2PMessage("HelloMyMessage",ReturnHelloMyMessage);
BindP2PWork("HelloMyWork", ReturnHelloMyWork);
#endif
PayServiceUrl = GetConfigKeyString("生活缴费地址").ToString();
LoadCDMode("智慧农业", "智慧农业管理"); //装载子功能块
LoadCDMode("智慧农业", "智慧农业功能");
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
string SQLString = "update sys_hards set isonline=0 where fullclassname='Aeaa'";
int nActCnt;
m_NodeDBEngine.XNActSQL(SQLString, out nActCnt);
}
//绑定模块所有都准备好的事件
BindP2PMessage("modeReady", onModeReady);
try
{
bAgintOneCOM = Convert.ToBoolean(GetConfigKeyString("同级代理在一个企业"));
}
catch
{
bAgintOneCOM = false;
}
try
{
bCanLookChildAgintCOM = Convert.ToBoolean(GetConfigKeyString("放开判断子代理权限"));
}
catch
{
bCanLookChildAgintCOM = true;
}
}
static private void onModeReady(string sFromServer, string message, Object m_MsgData)
{
try
{
//初始发送
InitMQTTSend();
//定义一个自己的MQTT消息
Hashtable m_inHH = new Hashtable();
m_inHH["topic"] = "/+/upAeaa";
m_inHH["modeClass"] = "Aeaa";
m_inHH["qos"] = "最少一次";
m_inHH["authFunc"] = "upAeaa_authFunc_Action"; //认证函数
m_inHH["pubAuthFunc"] = "upAeaa_pubAuthFunc_Action";//发送认证函数
m_inHH["subAuthFunc"] = "upAeaa_subAuthFunc_Action";//订阅认证函数
m_inHH["actionFunc"] = "upAeaa_actionFunc_Action";//处理消息函数
m_inHH["linkFunc"] = "upAeaa_linkFunc_Action";//连接函数
Object m_outOBJ;
RunShareFunction(null, "CoreSYS.SYS", "InitOneFreeMQTT_共享函数", out m_outOBJ, m_inHH); //添加一个自己的MQTT消息
m_inHH.Clear();
m_inHH["topic"] = "/+/downAeaa";
m_inHH["modeClass"] = "Aeaa";
m_inHH["qos"] = "最少一次";
RunShareFunction(null, "CoreSYS.SYS", "InitOneFreeMQTT_共享函数", out m_outOBJ, m_inHH);
}
catch
{
}
}
//发送关键代码
static private void InitMQTTSend()
{
try
{
Thread m_MQTTSendThread = new Thread(MQTTSendThread);
m_MQTTSendThread.Start();
WriteLog("Aeaa启动InitMQTTSend成功");
}
catch (Exception e)
{
WriteLog("Aeaa启动InitMQTTSend异常:" + e.ToString());
}
}
static private void MQTTSendThread()
{
oneSendMQTTMessage m_oneSendMQTTMessage = null;
while (true)
{
try
{
m_oneSendMQTTMessage = null;
m_MQTTSendEvent.WaitOne();
lock (m_MQTTMessageLK)
{
if (m_SendMQTTMessageList.Count > 0)
{
m_oneSendMQTTMessage = m_SendMQTTMessageList[0];
m_SendMQTTMessageList.RemoveAt(0);
}
if (m_SendMQTTMessageList.Count == 0)
{
m_MQTTSendEvent.Reset();
}
}
if (m_oneSendMQTTMessage != null)
{
Hashtable m_inHH = new Hashtable();
m_inHH["topic"] = m_oneSendMQTTMessage.topic;
m_inHH["text"] = m_oneSendMQTTMessage.msgstring;
Object m_outOBJ;
lock(m_oneSendMQTTMessage.m_LK)
{
m_oneSendMQTTMessage.tSendTime = DateTime.Now;
}
if(m_oneSendMQTTMessage.bHaveReturn)
{
continue;
}
//WriteLog("调用PostOneFreeMQTT_共享函数");
if (RunShareFunction(null, "CoreSYS.SYS", "PostOneFreeMQTT_共享函数", out m_outOBJ, m_inHH))
{
try
{
ReturnJson m_TReturnJson = (ReturnJson)m_outOBJ;
//WriteLog("PostOneFreeMQTT_共享函数 返回:" + JsonHelper.OBJToJsonStr(m_TReturnJson));
if (!m_TReturnJson.bOK)
{
lock (m_MQTTMessageLK)
{
m_oneSendMQTTMessage.nSendCnt++;
if (m_oneSendMQTTMessage.nSendCnt >= m_oneSendMQTTMessage.nMaxSendCnt)
{
m_oneSendMQTTMessage.bReturnOK = false;
if (m_oneSendMQTTMessage.m_RecvEvent != null)
{
try
{
m_SendMQTTMessageDIC.Remove(m_oneSendMQTTMessage.msgno);
}
catch
{
}
m_oneSendMQTTMessage.bHaveReturn = true;
m_oneSendMQTTMessage.m_RecvEvent.Set();
}
}
else
{
lock (m_oneSendMQTTMessage.m_LK)
{
m_oneSendMQTTMessage.inSendCache = true;
m_oneSendMQTTMessage.tSendTime = DateTime.Now.AddHours(5);
m_SendMQTTMessageList.Add(m_oneSendMQTTMessage);
if (m_SendMQTTMessageList.Count == 1)
{
m_MQTTSendEvent.Set();
}
}
}
}
}
else
{
lock (m_oneSendMQTTMessage.m_LK)
{
m_oneSendMQTTMessage.inSendCache = false;
}
}
}
catch
{
}
}
else
{
lock (m_MQTTMessageLK)
{
m_oneSendMQTTMessage.nSendCnt++;
if (m_oneSendMQTTMessage.nSendCnt >= m_oneSendMQTTMessage.nMaxSendCnt)
{
m_oneSendMQTTMessage.bReturnOK = false;
if (m_oneSendMQTTMessage.m_RecvEvent != null)
{
try
{
m_SendMQTTMessageDIC.Remove(m_oneSendMQTTMessage.msgno);
}
catch
{
}
m_oneSendMQTTMessage.bHaveReturn = true;
m_oneSendMQTTMessage.m_RecvEvent.Set();
}
}
else
{
lock (m_oneSendMQTTMessage.m_LK)
{
m_oneSendMQTTMessage.inSendCache = true;
m_oneSendMQTTMessage.tSendTime = DateTime.Now.AddHours(5);
m_SendMQTTMessageList.Add(m_oneSendMQTTMessage);
if (m_SendMQTTMessageList.Count == 1)
{
m_MQTTSendEvent.Set();
}
}
}
}
}
}
}
catch
{
}
Thread.Sleep(10);
}
}
static private bool PostMQTTMessage(string aeaa_mqttmsgs_nodeuuid,string topic, Object m_MsgOBJ, out Object m_outOBJ, int nOneSendWaitRecvSecond = 0, int nMaxSendCnt = 0, bool bNeedReturn = true)
{
m_outOBJ = null;
oneSendMQTTMessage m_oneSendMQTTMessage = new oneSendMQTTMessage();
if (nMaxSendCnt == 0)
{
nMaxSendCnt = 5;
}
m_oneSendMQTTMessage.topic = topic;
m_oneSendMQTTMessage.m_LK = new Object();
m_oneSendMQTTMessage.nMaxSendCnt = nMaxSendCnt;
m_oneSendMQTTMessage.nSendCnt = 0;
m_oneSendMQTTMessage.bNeedReturn = bNeedReturn;
m_oneSendMQTTMessage.bReturnOK = false;
m_oneSendMQTTMessage.recvOBJ = null;
m_oneSendMQTTMessage.bHaveReturn = false;
string msgno;
msgno = DateTime.Now.Ticks.ToString();
m_oneSendMQTTMessage.msgno = msgno;
if (bNeedReturn)
{
m_oneSendMQTTMessage.m_RecvEvent = new ManualResetEvent(false);
m_SendMQTTMessageDIC[msgno] = m_oneSendMQTTMessage;
if (nOneSendWaitRecvSecond == 0)
{
nOneSendWaitRecvSecond = 5 * 1000;
}
m_oneSendMQTTMessage.nOneSendWaitRecvSecond = nOneSendWaitRecvSecond;
}
else
{
m_oneSendMQTTMessage.m_RecvEvent = null;
m_oneSendMQTTMessage.nOneSendWaitRecvSecond = 0;
}
Hashtable m_DataHH = new Hashtable();
m_DataHH["msgno"] = msgno;
m_DataHH["data"] = m_MsgOBJ;
m_oneSendMQTTMessage.msgstring = JsonHelper.OBJToJsonStr(m_DataHH);
WriteLog("topic:" + topic + ",text:" + m_oneSendMQTTMessage.msgstring);
if (!string.IsNullOrEmpty(aeaa_mqttmsgs_nodeuuid))
{
using(NodeDBEngine m_NodeDBEngine=new NodeDBEngine())
{
string SQLString = "update aeaa_mqttmsgs set msgno=@msgno,text=@text where aeaa_mqttmsgs_nodeuuid=@aeaa_mqttmsgs_nodeuuid";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarString("@msgno", msgno));
m_varList.Add(NodeDBEngine.VarString("@text", m_oneSendMQTTMessage.msgstring));
m_varList.Add(NodeDBEngine.VarDecimal("@aeaa_mqttmsgs_nodeuuid", aeaa_mqttmsgs_nodeuuid));
int nActCnt;
if(!m_NodeDBEngine.XNActSQLVar(SQLString, out nActCnt, m_varList))
{
return false;
}
}
}
lock (m_MQTTMessageLK)
{
m_oneSendMQTTMessage.tSendTime = DateTime.Now.AddHours(5);
m_oneSendMQTTMessage.inSendCache = true;
m_SendMQTTMessageList.Add(m_oneSendMQTTMessage);
if (m_SendMQTTMessageList.Count == 1)
{
m_MQTTSendEvent.Set();
}
}
if (m_oneSendMQTTMessage.bNeedReturn)
{
while (true)
{
if (m_oneSendMQTTMessage.m_RecvEvent.WaitOne(1000))
{
break;
}
else
{
bool bInCache = false;
lock (m_oneSendMQTTMessage.m_LK)
{
if(!m_oneSendMQTTMessage.inSendCache)
{
if((DateTime.Now-m_oneSendMQTTMessage.tSendTime).TotalSeconds>m_oneSendMQTTMessage.nOneSendWaitRecvSecond)
{
if(m_oneSendMQTTMessage.nSendCnt+1<=m_oneSendMQTTMessage.nMaxSendCnt)
{
bInCache = true;
}
else
{
try
{
m_SendMQTTMessageDIC.Remove(msgno);
}
catch
{
}
m_oneSendMQTTMessage.bReturnOK = false;
m_oneSendMQTTMessage.bHaveReturn = true;
break;
}
}
}
}
if(bInCache)
{
lock (m_MQTTMessageLK)
{
m_oneSendMQTTMessage.nSendCnt += 1;
m_oneSendMQTTMessage.tSendTime = DateTime.Now.AddHours(5);
m_oneSendMQTTMessage.inSendCache = true;
m_SendMQTTMessageList.Add(m_oneSendMQTTMessage);
if (m_SendMQTTMessageList.Count == 1)
{
m_MQTTSendEvent.Set();
}
}
}
}
}
}
if (bNeedReturn)
{
m_outOBJ = m_oneSendMQTTMessage.recvOBJ;
if (!string.IsNullOrEmpty(aeaa_mqttmsgs_nodeuuid))
{
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
string SQLString = "update aeaa_mqttmsgs set returntext=@returntext,returntime="+m_NodeDBEngine.GetDBNowDate()+" where aeaa_mqttmsgs_nodeuuid=@aeaa_mqttmsgs_nodeuuid";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarString("@returntext", JsonHelper.OBJToJsonStr(m_outOBJ)));
m_varList.Add(NodeDBEngine.VarDecimal("@aeaa_mqttmsgs_nodeuuid", aeaa_mqttmsgs_nodeuuid));
int nActCnt;
if (!m_NodeDBEngine.XNActSQLVar(SQLString, out nActCnt, m_varList))
{
}
}
}
return m_oneSendMQTTMessage.bReturnOK;
}
else
{
return true;
}
}
四个关键处理函数
static public ReturnJson upAeaa_authFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
WriteLog("upAeaa_authFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
//m_ReturnJson.bOK = false;
if (!KeyIsOK(m_HH, "clientid"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "upAeaa_authFunc_Action 缺少参数:clientid";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "password"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "upAeaa_authFunc_Action 缺少参数:password";
return m_ReturnJson;
}
string clientid = m_HH["clientid"].ToString();
string password = m_HH["password"].ToString();
if (password.Length != 32)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "upAeaa_authFunc_Action 密码长度不对";
WriteLog(m_ReturnJson.sMsg + "," + password);
return m_ReturnJson;
}
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
int nPos = clientid.IndexOf("_");
if (nPos == -1)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "clinetid有误:" + clientid;
WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
string nodeuuid = DecimaConvert.MinStr2DecimalString(clientid.Substring(0, nPos));
string SQLString = "select pwds,outmark from sys_hards where sys_hards_nodeuuid=@sys_hards_nodeuuid and deviceid=@deviceid";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarDecimal("@sys_hards_nodeuuid", nodeuuid));
m_varList.Add(NodeDBEngine.VarString("@deviceid", clientid));
DataSet pSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out m_ReturnJson.bOK, m_varList);
if (!m_ReturnJson.bOK)
{
m_ReturnJson.sMsg = "upAeaa_authFunc_Action查询绑定设备失败";
WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
if (pSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "upAeaa_authFunc_Action未能查询到绑定设备";
WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
string pwds = pSet.Tables[0].Rows[0]["pwds"].ToString();
string outmark = pSet.Tables[0].Rows[0]["outmark"].ToString();
if (pwds.IndexOf(password) != -1)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "upAeaa_authFunc_Action密码已经失效";
WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
List<string> m_pwdList = null;
try
{
m_pwdList = JsonHelper.JsonStrToOBJ<List<string>>(pwds);
if (m_pwdList == null)
{
m_pwdList = new List<string>();
}
}
catch
{
m_pwdList = new List<string>();
}
if (m_pwdList.Count >= 5)
{
m_pwdList.RemoveAt(0);
}
int Base = 65;
int WPos = password[30] - Base;
int DPos = password[31] - Base;
string WStr = password.Substring(WPos, 4);
string DStr = password.Substring(DPos, 4);
int A = WStr[0] - Base;
int B = WStr[1] - Base;
int C = WStr[2] - Base;
int D = WStr[3] - Base;
string RDStr = "";
RDStr += outmark[A].ToString();
RDStr += outmark[B].ToString(); ;
RDStr += outmark[C].ToString();
RDStr += outmark[D].ToString();
if (DStr != RDStr)
{
WriteLog("upAeaa_authFunc_Action DStr:" + DStr + ",RDStr:" + RDStr);
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "upAeaa_authFunc_Action验证失败";
return m_ReturnJson;
}
m_pwdList.Add(password);
SQLString = "update sys_hards set pwds=@pwds where sys_hards_nodeuuid=@sys_hards_nodeuuid";
m_varList.Clear();
m_varList.Add(NodeDBEngine.VarDecimal("@sys_hards_nodeuuid", nodeuuid));
m_varList.Add(NodeDBEngine.VarString("@pwds", JsonHelper.OBJToJsonStr(m_pwdList)));
int nActCnt;
m_NodeDBEngine.XNActSQLVar(SQLString, out nActCnt, m_varList);
m_ReturnJson.bOK = true;
m_ReturnJson.sMsg = "验证通过";
}
}
catch (Exception e)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "验证异常:" + e.ToString();
WriteLog(m_ReturnJson.sMsg);
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_pubAuthFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_pubAuthFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
}
catch
{
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_subAuthFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_subAuthFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
}
catch
{
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_actionFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_actionFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
string topic, clientid, text;
if(!KeyIsOK(m_HH, "topic"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少参数topic";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "text"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少参数text";
return m_ReturnJson;
}
topic = m_HH["topic"].ToString();
text = m_HH["text"].ToString();
clientid = topic.Substring(1);
int nIndex = clientid.IndexOf("/");
if(nIndex!=-1)
{
clientid = clientid.Substring(0, nIndex);
}
if(clientid==md5(BaseJsonMode.P2PServerName, 16))
{
//超级管理员
}
else
{
int nPos = clientid.IndexOf("_");
if(nPos==-1)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "clientid有误";
return m_ReturnJson;
}
string nodeuuid = clientid.Substring(0, nPos);
nodeuuid = DecimaConvert.MinStr2DecimalString(nodeuuid);
Hashtable m_returnHH =JsonHelper.JsonStrToOBJ<Hashtable>(text);
if (m_returnHH != null)
{
string msgno;
Object recvOBJ = null;
if(!KeyIsOK(m_returnHH,"msgno"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "数据格式有误缺少msgno";
return m_ReturnJson;
}
msgno = m_returnHH["msgno"].ToString();
if (KeyIsOK(m_returnHH, "data"))
{
try
{
recvOBJ = JsonHelper.OBJToType<Hashtable>(m_returnHH["data"]);
if(recvOBJ==null)
{
recvOBJ = m_returnHH["data"];
}
}
catch
{
recvOBJ = m_returnHH["data"];
}
}
else
{
recvOBJ = new Hashtable();
}
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
string SQLString = "select * from sys_hards where sys_hards_nodeuuid=@sys_hards_nodeuuid and deviceid=@deviceid";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarDecimal("@sys_hards_nodeuuid", nodeuuid));
m_varList.Add(NodeDBEngine.VarString("@deviceid", clientid));
DataSet pSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out m_ReturnJson.bOK, m_varList);
if (m_ReturnJson.bOK)
{
lock(m_MQTTMessageLK)
{
if(m_SendMQTTMessageDIC.ContainsKey(msgno))
{
oneSendMQTTMessage m_oneSendMQTTMessage= m_SendMQTTMessageDIC[msgno];
m_SendMQTTMessageDIC.Remove(msgno);
m_oneSendMQTTMessage.bHaveReturn = true;
m_oneSendMQTTMessage.bReturnOK = true;
m_oneSendMQTTMessage.recvOBJ = recvOBJ;
if(m_oneSendMQTTMessage.m_RecvEvent!=null)
{
m_oneSendMQTTMessage.m_RecvEvent.Set();
}
}
}
}
else
{
lock (m_MQTTMessageLK)
{
if (m_SendMQTTMessageDIC.ContainsKey(msgno))
{
m_SendMQTTMessageDIC.Remove(msgno);
oneSendMQTTMessage m_oneSendMQTTMessage = m_SendMQTTMessageDIC[msgno];
m_oneSendMQTTMessage.bHaveReturn = true;
m_oneSendMQTTMessage.bReturnOK = true;
m_oneSendMQTTMessage.recvOBJ = recvOBJ;
if (m_oneSendMQTTMessage.m_RecvEvent != null)
{
m_oneSendMQTTMessage.m_RecvEvent.Set();
}
}
}
m_ReturnJson.sMsg = "查询硬件绑定失败";
WriteLog("upAeaa_actionFunc_Action:" + m_ReturnJson.sMsg);
}
}
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "返回数据格式有误";
}
}
}
catch
{
}
return m_ReturnJson;
}
static public ReturnJson upAeaa_linkFunc_Action(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = true;
try
{
WriteLog("upAeaa_linkFunc_Action:" + JsonHelper.OBJToJsonStr(m_Parame));
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
if (!KeyIsOK(m_HH, "link"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少link";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "clientid"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少clientid";
return m_ReturnJson;
}
string link = m_HH["link"].ToString();
string clientid = m_HH["clientid"].ToString();
int nPos = clientid.IndexOf("_");
if (nPos != -1)
{
string nodeuuid = clientid.Substring(0, nPos);
nodeuuid = DecimaConvert.MinStr2DecimalString(nodeuuid);
//WriteLog("nodeuuid:" + nodeuuid+"link:"+link);
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
string SQLString = "update sys_hards set isonline=@link where sys_hards_nodeuuid=@sys_hards_nodeuuid";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarBool("@link", link));
m_varList.Add(NodeDBEngine.VarDecimal("@sys_hards_nodeuuid", nodeuuid));
int nActCnt;
m_ReturnJson.bOK = m_NodeDBEngine.XNActSQLVar(SQLString, out nActCnt, m_varList);
if (m_ReturnJson.bOK)
{
m_ReturnJson.sMsg = "更改状态成功";
}
else
{
m_ReturnJson.sMsg = "更改状态失败";
}
}
}
else
{
m_ReturnJson.bOK = true;
}
}
catch (Exception e)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "更改状态异常:" + e.ToString();
}
return m_ReturnJson;
}
企业表直接资金管理
企业资金管理页
/CoreSYS.SYS/ManagerCompanyAccountMoneyPage.aspx?sys_companys_nodeuuid=16599138007940000003000
企业账户[企业自身账户非企业内个人账户]直充
/CoreSYS.SYS/HandInCompanyAccountMoney.ajax?sys_companys_nodeuuid=16588349004050000003000&money=0.01&_=1671772095411
企业账户[企业自身账户非企业内个人账户]充值
/CoreSYS.SYS/CompanyAccountInMoneyPage.aspx?sys_companys_nodeuuid=16588349004050000003000
创建企业账户[企业自身账户非企业内个人账户]充值订单
/CoreSYS.SYS/CreateCompanyAccInMoneyAjax.do?sys_companys_nodeuuid=16588349004050000003000&money=0.01
采用微信主站的支付配置
static private bool GetMainPaySite( out Hashtable m_ReturnHH)
企业表直接资金流水表
CREATE TABLE [dbo].[sys_companyaccmoneyflows](
[sys_companyaccmoneyflows_nodeuuid] [numeric](38, 0) NOT NULL,
[sys_companys_nodeuuid] [numeric](38, 0) NULL,//要充值的企业id
[company] [nvarchar](50) NULL,//要充值的企业名
[comaddusername] [nvarchar](50) NULL,//要充值企业的代理
[sys_users_crossnodeuuid] [numeric](38, 0) NULL,//充值人id
[username] [nvarchar](50) NULL,//充值人账户
[flowtype] [nvarchar](50) NULL,
[moneytablename] [nvarchar](50) NULL,
[moneyuuid] [numeric](38, 0) NULL,
[lastmoney] [numeric](18, 2) NULL,
[money] [numeric](18, 2) NULL,
[moneymemo] [nvarchar](200) NULL,
[createtime] [datetime] NULL,
CONSTRAINT [PK_sys_companyaccmoneyflows] PRIMARY KEY CLUSTERED
(
[sys_companyaccmoneyflows_nodeuuid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
企业表直接资金变化表
CREATE TABLE [dbo].[sys_companyaccountinmoney](
[sys_companyaccountinmoney_nodeuuid] [numeric](38, 0) NOT NULL,
[pay_sys_companys_crossnodeuuid] [numeric](38, 0) NULL,//要充值的企业id
[pay_company] [nvarchar](50) NULL,//要充值的企业名
[sys_users_crossnodeuuid] [numeric](38, 0) NULL,//充值人id
[username] [nvarchar](50) NULL,//充值人账户
[sys_companys_nodeuuid] [numeric](38, 0) NULL,////框架微主站的企业id
[company] [nvarchar](50) NULL,//充框架微主站的企业名
[comaddusername] [nvarchar](50) NULL,//框架微主站的企业代理
[money] [numeric](18, 2) NULL,
[paytype] [nvarchar](50) NULL,
[paystatus] [nvarchar](50) NULL,
[weixin_sites_nodeuuid] [numeric](38, 0) NULL,//微主站的id
[sitename] [nvarchar](50) NULL,//微主站名称
[createtime] [datetime] NULL,
[handusername] [nvarchar](50) NULL,
[sys_handusers_crossnodeuuid] [numeric](38, 0) NULL,
CONSTRAINT [PK_sys_companyaccountinmoney] PRIMARY KEY CLUSTERED
(
[sys_companyaccountinmoney_nodeuuid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
共享函数直接操作企业资金
/// <summary>
/// 共享函数操作企业账户费用
/// </summary>
/// <param name="ctx"></param>
/// <param name="m_Parame"></param>
/// <returns></returns>
static public ReturnJson OPTCompanyAccountMoney_共享函数(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
try
{
Hashtable m_HH = (Hashtable)m_Parame;
if (!KeyIsOK(m_HH, "m_SQLList"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少参数m_SQLList";
return m_ReturnJson;
}
List<string> m_SQLList = null;
try
{
m_SQLList = (List<string>)m_HH["m_SQLList"];
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "参数m_SQLList异常";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "m_varListList"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少参数m_varListList";
return m_ReturnJson;
}
List<List<Hashtable>> m_varListList = null;
try
{
m_varListList = (List<List<Hashtable>>)m_HH["m_varListList"];
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "参数m_varListList异常";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "sys_companys_nodeuuid"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少要操作账户id";
return m_ReturnJson;
}
string pay_sys_companys_nodeuuid = m_HH["sys_companys_nodeuuid"].ToString();
if (!KeyIsOK(m_HH, "money"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少要操作金额";
return m_ReturnJson;
}
string money = m_HH["money"].ToString();
string flowtype = "out";
try
{
double fMoney = Convert.ToDouble(money);
if (fMoney >= 0)
{
flowtype = "in";
}
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "操作金额有错";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "moneymemo"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少资金操作说明";
return m_ReturnJson;
}
string moneymemo = m_HH["moneymemo"].ToString();
if (!KeyIsOK(m_HH, "tablename"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少影响的表名";
return m_ReturnJson;
}
string tablename = m_HH["tablename"].ToString();
if (!KeyIsOK(m_HH, "tablenameuuid"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少影响的表的记录id";
return m_ReturnJson;
}
string tablenameuuid = m_HH["tablenameuuid"].ToString();
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
SessionLink m_SessionLink=GetSessionLink(ctx);
string lastmoney = "", company = "", comaddusername = "",SQLString="",leftmoney="";
{
bool bOK;
List<Hashtable> m_TVarList = new List<Hashtable>();
m_TVarList.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", pay_sys_companys_nodeuuid));
SQLString = "select leftmoney,addusername,company from sys_companys where sys_companys_nodeuuid=@sys_companys_nodeuuid";
DataSet pTSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out bOK, m_TVarList);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "查询充值账户信息失败";
//WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
if (pTSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "未能查询到充值账户信息";
//WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
company = pTSet.Tables[0].Rows[0]["company"].ToString();
comaddusername = pTSet.Tables[0].Rows[0]["addusername"].ToString();
lastmoney = pTSet.Tables[0].Rows[0]["leftmoney"].ToString();
leftmoney = pTSet.Tables[0].Rows[0]["leftmoney"].ToString();
if (lastmoney == "")
{
lastmoney = "0";
}
}
SQLString = @"insert into sys_companyaccmoneyflows(
[sys_companyaccmoneyflows_nodeuuid]
,[sys_companys_nodeuuid]
,[company]
,[comaddusername]
,[sys_users_crossnodeuuid]
,[username]
,[flowtype]
,[moneytablename]
,[moneyuuid]
,[lastmoney]
,[money]
,[moneymemo]
,[createtime])values(
@sys_companyaccmoneyflows_nodeuuid
,@sys_companys_nodeuuid
,@company
,@comaddusername
,@sys_users_crossnodeuuid
,@username
,@flowtype
,@moneytablename
,@moneyuuid
,@lastmoney
,@money
,@moneymemo
," + m_NodeDBEngine.GetDBNowDate() + ")";
string dbno;
string sys_companyaccmoneyflows_nodeuuid = XNCoreNodeDB.createNewIDFromParentID(pay_sys_companys_nodeuuid, "SYS", out dbno);
List<Hashtable> m_varList3 = new List<Hashtable>();
m_varList3.Add(NodeDBEngine.VarDecimal("@sys_companyaccmoneyflows_nodeuuid", sys_companyaccmoneyflows_nodeuuid));
m_varList3.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", pay_sys_companys_nodeuuid));
m_varList3.Add(NodeDBEngine.VarString("@company", company));
m_varList3.Add(NodeDBEngine.VarString("@comaddusername", comaddusername));
m_varList3.Add(NodeDBEngine.VarDecimal("@sys_users_crossnodeuuid", m_SessionLink.sys_users_nodeuuid));
m_varList3.Add(NodeDBEngine.VarString("@username", m_SessionLink.username));
m_varList3.Add(NodeDBEngine.VarString("@flowtype", "in"));
m_varList3.Add(NodeDBEngine.VarString("@moneytablename", tablename));
m_varList3.Add(NodeDBEngine.VarDecimal("@moneyuuid", tablenameuuid));
m_varList3.Add(NodeDBEngine.VarDecimal("@lastmoney", lastmoney));
m_varList3.Add(NodeDBEngine.VarDecimal("@money", money));
m_varList3.Add(NodeDBEngine.VarString("@moneymemo", moneymemo));
m_SQLList.Add(SQLString);
m_varListList.Add(m_varList3);
SQLString = "update sys_companys set leftmoney=leftmoney+" + money + ",allleftmoney=allleftmoney+" + money + " where sys_companys_nodeuuid=@sys_companys_nodeuuid";
if (leftmoney == "")
{
SQLString = "update sys_companys set leftmoney=" + money + ",allleftmoney=" + money + " where sys_companys_nodeuuid=@sys_companys_nodeuuid";
}
List<Hashtable> m_varList1 = new List<Hashtable>();
m_varList1.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", pay_sys_companys_nodeuuid));
m_SQLList.Add(SQLString);
m_varListList.Add(m_varList1);
List<int> m_ActCntList;
m_ReturnJson.bOK = m_NodeDBEngine.XNActBusinessSQLVar(m_SQLList, out m_ActCntList, m_varListList);
if (m_ReturnJson.bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用操作企业账户余额成功";
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用操作企业账户余额失败";
}
}
}
catch (Exception e)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用操作企业账户余额异常";
}
return m_ReturnJson;
}
个人表直接资金管理
个人表直接资金管理页
/CoreSYS.SYS/ManagerUserMoneyPag?s?sys_users_nodeuuid=14488934049460000003000
个人表直接资金直充
/CoreSYS.SYS/HandInUserAccountMoney.ajax?sys_users_nodeuuid=14488934049460000003000&money=0.01&_=1671768928176
个人表直接资金充值
/CoreSYS.SYS/UserAccountInMoneyPage.aspx?sys_users_nodeuuid=14488934049460000003000
创建个人表账户充值订单
/CoreSYS.SYS/CreateUserAccInMoneyAjax.do?sys_users_nodeuuid=14488934049460000003000&money=0.01
个人表直接资金流水表
CREATE TABLE [dbo].[sys_useraccmoneyflows](
[sys_useraccmoneyflows_nodeuuid] [numeric](38, 0) NOT NULL,
[sys_companys_nodeuuid] [numeric](38, 0) NULL,
[company] [nvarchar](50) NULL,
[comaddusername] [nvarchar](50) NULL,
[sys_companyorgs_nodeuuid] [numeric](38, 0) NULL,
[orgname] [nvarchar](50) NULL,
[sys_users_nodeuuid] [numeric](38, 0) NULL,
[username] [nvarchar](50) NULL,
[flowtype] [nvarchar](50) NULL,
[moneytablename] [nvarchar](50) NULL,
[moneyuuid] [numeric](38, 0) NULL,
[lastmoney] [numeric](18, 2) NULL,
[money] [numeric](18, 2) NULL,
[moneymemo] [nvarchar](200) NULL,
[createtime] [datetime] NULL,
CONSTRAINT [PK_sys_useraccmoneyflows] PRIMARY KEY CLUSTERED
(
[sys_useraccmoneyflows_nodeuuid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
个人表直接资金变化表
CREATE TABLE [dbo].[sys_useraccountinmoney](
[sys_useraccountinmoney_nodeuuid] [numeric](38, 0) NOT NULL,
[sys_users_crossnodeuuid] [numeric](38, 0) NULL,
[username] [nvarchar](50) NULL,
[sys_companys_nodeuuid] [numeric](38, 0) NULL,
[company] [nvarchar](50) NULL,
[comaddusername] [nvarchar](50) NULL,
[money] [numeric](18, 2) NULL,
[paytype] [nvarchar](50) NULL,
[paystatus] [nvarchar](50) NULL,
[weixin_sites_nodeuuid] [numeric](38, 0) NULL,
[sitename] [nvarchar](50) NULL,
[createtime] [datetime] NULL,
[handusername] [nvarchar](50) NULL,
[sys_handusers_crossnodeuuid] [numeric](38, 0) NULL,
CONSTRAINT [PK_sys_useraccountinmoney] PRIMARY KEY CLUSTERED
(
[sys_useraccountinmoney_nodeuuid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
共享函数直接操作个人资金
static public ReturnJson OPTUserAccountMoney_共享函数(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
try
{
Hashtable m_HH = (Hashtable)m_Parame;
if(!KeyIsOK(m_HH,"m_SQLList"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少参数m_SQLList";
return m_ReturnJson;
}
List<string> m_SQLList = null;
try
{
m_SQLList = (List<string>)m_HH["m_SQLList"];
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "参数m_SQLList异常";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "m_varListList"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少参数m_varListList";
return m_ReturnJson;
}
List<List<Hashtable>> m_varListList = null;
try
{
m_varListList = (List<List<Hashtable>>)m_HH["m_varListList"];
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "参数m_varListList异常";
return m_ReturnJson;
}
if(!KeyIsOK(m_HH,"sys_users_nodeuuid"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少要操作账户id";
return m_ReturnJson;
}
string sys_users_nodeuuid = m_HH["sys_users_nodeuuid"].ToString();
if (!KeyIsOK(m_HH, "money"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少要操作金额";
return m_ReturnJson;
}
string money = m_HH["money"].ToString();
string flowtype = "out";
try
{
double fMoney=Convert.ToDouble(money);
if(fMoney>=0)
{
flowtype = "in";
}
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "操作金额有错";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "moneymemo"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少资金操作说明";
return m_ReturnJson;
}
if (!KeyIsOK(m_HH, "tablename"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少影响的表名";
return m_ReturnJson;
}
string tablename = m_HH["tablename"].ToString();
if (!KeyIsOK(m_HH, "tablenameuuid"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少影响的表的记录id";
return m_ReturnJson;
}
string tablenameuuid = m_HH["tablenameuuid"].ToString();
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
string user_username = "", user_sys_companys_nodeuuid = "", user_company = "", user_comaddusername = "", user_sys_companyorgs_nodeuuid = "", user_orgname = "", lastmoney = "0";
string SQLString = "", leftmoney = "";
{
bool bOK;
List<Hashtable> m_TVarList = new List<Hashtable>();
m_TVarList.Add(NodeDBEngine.VarDecimal("@sys_users_nodeuuid", sys_users_nodeuuid));
SQLString = "select username,sys_companys_nodeuuid,sys_companyorgs_nodeuuid,leftmoney from sys_users where sys_users_nodeuuid=@sys_users_nodeuuid";
DataSet pTSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out bOK, m_TVarList);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "查询操作账户信息失败";
//WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
if (pTSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "未能查询到操作账户信息";
//WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
user_username = pTSet.Tables[0].Rows[0]["username"].ToString();
user_sys_companys_nodeuuid = pTSet.Tables[0].Rows[0]["sys_companys_nodeuuid"].ToString();
user_sys_companyorgs_nodeuuid = pTSet.Tables[0].Rows[0]["sys_companyorgs_nodeuuid"].ToString();
lastmoney = pTSet.Tables[0].Rows[0]["leftmoney"].ToString();
leftmoney = pTSet.Tables[0].Rows[0]["leftmoney"].ToString();
if (lastmoney == "")
{
lastmoney = "0";
}
SQLString = "select company,addusername from sys_companys where sys_companys_nodeuuid=@sys_companys_nodeuuid";
m_TVarList.Clear();
m_TVarList.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", user_sys_companys_nodeuuid));
pTSet.Clear();
pTSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out bOK, m_TVarList);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "查询操作账户企业信息失败";
// WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
if (pTSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "未能查询到操作账户企业信息";
//WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
user_company = pTSet.Tables[0].Rows[0]["company"].ToString();
user_comaddusername = pTSet.Tables[0].Rows[0]["addusername"].ToString();
SQLString = "select companyorg_name from sys_companyorgs where sys_companyorgs_nodeuuid=@sys_companyorgs_nodeuuid";
m_TVarList.Clear();
m_TVarList.Add(NodeDBEngine.VarDecimal("@sys_companyorgs_nodeuuid", user_sys_companyorgs_nodeuuid));
pTSet.Clear();
pTSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out bOK, m_TVarList);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "查询操作账户企业部门信息失败";
//WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
if (pTSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "未能查询到操作账户企业部门信息";
//WriteLog(m_ReturnJson.sMsg);
return m_ReturnJson;
}
user_orgname = pTSet.Tables[0].Rows[0]["companyorg_name"].ToString();
}
SQLString = @"insert into sys_useraccmoneyflows(
[sys_useraccmoneyflows_nodeuuid]
,[sys_companys_nodeuuid]
,[company]
,[comaddusername]
,[sys_companyorgs_nodeuuid]
,[orgname]
,[sys_users_nodeuuid]
,[username]
,[flowtype]
,[moneytablename]
,[moneyuuid]
,[lastmoney]
,[money]
,[moneymemo]
,[createtime])values(
@sys_useraccmoneyflows_nodeuuid
,@sys_companys_nodeuuid
,@company
,@comaddusername
,@sys_companyorgs_nodeuuid
,@orgname
,@sys_users_nodeuuid
,@username
,@flowtype
,@moneytablename
,@moneyuuid
,@lastmoney
,@money
,@moneymemo
," + m_NodeDBEngine.GetDBNowDate() + ")";
string dbno;
string sys_useraccmoneyflows_nodeuuid = XNCoreNodeDB.createNewIDFromParentID(sys_users_nodeuuid, "SYS", out dbno);
List<Hashtable> m_varList3 = new List<Hashtable>();
string moneymemo = m_HH["moneymemo"].ToString();
m_varList3.Add(NodeDBEngine.VarDecimal("@sys_useraccmoneyflows_nodeuuid", sys_useraccmoneyflows_nodeuuid));
m_varList3.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", user_sys_companys_nodeuuid));
m_varList3.Add(NodeDBEngine.VarString("@company", user_company));
m_varList3.Add(NodeDBEngine.VarString("@comaddusername", user_comaddusername));
m_varList3.Add(NodeDBEngine.VarDecimal("@sys_companyorgs_nodeuuid", user_sys_companyorgs_nodeuuid));
m_varList3.Add(NodeDBEngine.VarString("@orgname", user_orgname));
m_varList3.Add(NodeDBEngine.VarDecimal("@sys_users_nodeuuid", sys_users_nodeuuid));
m_varList3.Add(NodeDBEngine.VarString("@username", user_username));
m_varList3.Add(NodeDBEngine.VarString("@flowtype", flowtype));
m_varList3.Add(NodeDBEngine.VarString("@moneytablename", tablename));
m_varList3.Add(NodeDBEngine.VarDecimal("@moneyuuid", tablenameuuid));
m_varList3.Add(NodeDBEngine.VarDecimal("@lastmoney", lastmoney));
m_varList3.Add(NodeDBEngine.VarDecimal("@money", money));
m_varList3.Add(NodeDBEngine.VarString("@moneymemo", moneymemo));
m_SQLList.Add(SQLString);
m_varListList.Add(m_varList3);
SQLString = "update sys_users set leftmoney=leftmoney+" + money + ",allleftmoney=allleftmoney+" + money + " where sys_users_nodeuuid=@sys_users_nodeuuid";
if (leftmoney == "")
{
SQLString = "update sys_users set leftmoney=" + money + ",allleftmoney=" + money + " where sys_users_nodeuuid=@sys_users_nodeuuid";
}
List<Hashtable> m_varList1 = new List<Hashtable>();
m_varList1.Add(NodeDBEngine.VarDecimal("@sys_users_nodeuuid", sys_users_nodeuuid));
m_SQLList.Add(SQLString);
m_varListList.Add(m_varList1);
List<int> m_ActCntList;
m_ReturnJson.bOK=m_NodeDBEngine.XNActBusinessSQLVar(m_SQLList, out m_ActCntList, m_varListList);
if(m_ReturnJson.bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用操作账户余额成功";
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用操作账户余额失败";
}
}
}
catch (Exception e)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用操作账户余额异常";
}
return m_ReturnJson;
}
按时间分表查询数据
public enum TimeType { Year, Month, Day };
表形式:
年:table2008
月:table200810
日:table20081001
**SQLString中时间表用table***
public DataSet XNGetTimeTableRecord(string SQLString, DateTime tB, DateTime tE, TimeType m_TimeType, out bool bOK, List<OneDB> m_CallDBList = null)
public DataSet XNGetTimeTableRecordVar(string SQLString, DateTime tB,DateTime tE,TimeType m_TimeType,out bool bOK, List<Hashtable> list, List<OneDB> m_CallDBList = null)
public Object XNGetTimeTableSQLPageRecord(string SQLString,DateTime tB,DateTime tE,TimeType m_TimeType, int nPageSize, int nPageIndex, out bool bOK, List<OneDB> m_CallDBList = null)
public Object XNGetTimeTableSQLPageRecord(string SQLString, DateTime tB, DateTime tE, TimeType m_TimeType, string sSumField, int nPageSize, int nPageIndex, out bool bOK, List<OneDB> m_CallDBList = null)
public Object XNGetTimeTableSQLPageRecordVar(string SQLString,DateTime tB,DateTime tE,TimeType m_TimeType, int nPageSize, int nPageIndex, out bool bOK, List<Hashtable> list, List<OneDB> m_CallDBList = null)
public Object XNGetTimeTableSQLPageRecordVar(string SQLString, DateTime tB,DateTime tE,TimeType m_TimeType,int nPageSize, int nPageIndex, out bool bOK, Hashtable[] list, List<OneDB> m_CallDBList = null)
public Object XNGetTimeTableSQLPageRecordVar(string SQLString,DateTime tB,DateTime tE,TimeType m_TimeType, string sSumField, int nPageSize, int nPageIndex, out bool bOK, List<Hashtable> list, List<OneDB> m_CallDBList = null)
public Object XNGetTimeTableSQLPageRecordVar(string SQLString,DateTime tB,DateTime tE,TimeType m_TimeType, string sSumField, int nPageSize, int nPageIndex, out bool bOK, Hashtable[] list, List<OneDB> m_CallDBList = null)
public bool XNActTimeTableSQL(string SQLString, DateTime tB, DateTime tE, TimeType m_TimeType, out int nCnt, bool bTransaction = true, List<OneDB> m_CallDBList = null)
public bool XNActTimeTableSQLVar(string SQLString, DateTime tB,DateTime tE,TimeType m_TimeType,out int nCnt, List<Hashtable>list, bool bTransaction = true, List<OneDB> m_CallDBList = null)
public bool XNActTimeTableSQLVar(string SQLString,DateTime tB,DateTime tE,TimeType m_TimeType, out int nCnt, Hashtable[] list, bool bTransaction = true, List<OneDB> m_CallDBList = null)
public bool XNActTimeTableSQLVarAll(string SQLCommand, DateTime tB,DateTime tE,TimeType m_TimeType,string MainTable, string SQLString, out int nCnt, Hashtable[] list, bool bTransaction = true, List<OneDB> m_ServerNOList = null, bool bHaveCenter = false)
行业账户积分赚取配置
管理地址如:/CoreSYS.SYS/Managesys_tradeaccountmakemoneysPage.aspx?fullclassname=userblog&nodeuuid_nodeuuid=16038823397660000003000
如调用签到代码获取积分:
Hashtable m_inHH=new Hashtable();
m_inHH["fullclassname"] = "userblog";
m_inHH["nodeuuid_nodeuuid"] = m_blogInfo.blog_sites_nodeuuid;
m_inHH["channel"] = "签到";
Object m_outParame;
if(!RunShareFunction(ctx, "CoreSYS.SYS", "actionAccountMakeInMoney_共享函数", out m_outParame, m_inHH))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "actionAccountMakeInMoney_共享函数-失败";
return m_ReturnJson;
}
else
{
m_ReturnJson = (ReturnJson)m_outParame;
}
websocket-sharp使用HTTPS
服务端:
public bool InitServiceHttpWS2(IBaseWS m_IBaseWS, string url, string nodename, string DocumentRootPath, bool bNeedApplicationLink = true, OnOpenCallBack m_TOnOpenCallBack = null, OnMessageCallBack m_TOnMessageCallBack = null, OnErrorCallBack m_TOnErrorCallBack = null, OnCloseCallBack m_TOnCloseCallBack = null)
{
try
{
bHTTPService = true;
if (m_OnOpenCallBack == null)
m_OnOpenCallBack = m_TOnOpenCallBack;
if (m_OnMessageCallBack == null)
m_OnMessageCallBack = m_TOnMessageCallBack;
if (m_OnErrorCallBack == null)
m_OnErrorCallBack = m_TOnErrorCallBack;
if (m_OnCloseCallBack == null)
m_OnCloseCallBack = m_TOnCloseCallBack;
string domain = getDomain(url);
//BaseClientLinkHttpWS.Init(m_IBaseWS, domain, bNeedApplicationLink, m_OnOpenCallBack, m_OnMessageCallBack, m_OnErrorCallBack, m_OnCloseCallBack);
int nIndex = url.IndexOf(":", 10);
if (nIndex == -1)
{
return false;
}
if (url.IndexOf("ws://") != -1)
{
url = url.Replace("ws://", "http://");
}
else
{
if (url.IndexOf("wss://") != -1)
{
url = url.Replace("wss://", "https://");
}
else
{
return false;
}
}
wshttp = new HttpServer(url);
if (url.IndexOf("https://") == 0 || url.IndexOf("wss://") == 0)
{
try
{
if (System.Configuration.ConfigurationManager.AppSettings["WSCertFile"] != null)
{
if (System.Configuration.ConfigurationManager.AppSettings["WSCertFile"].ToString().Trim() != "")
{
// 根据自己的需要设置协议
wshttp.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;
var cert = System.Configuration.ConfigurationManager.AppSettings["WSCertFile"];
var passwd = System.Configuration.ConfigurationManager.AppSettings["WSCertFilePassword"];
//wshttp.SslConfiguration.ServerCertificate = new X509Certificate2(cert, passwd);
// 解码器
X509Certificate2 cypher = new X509Certificate2(cert, passwd);
// 给服务器加载解码器
wshttp.SslConfiguration.ServerCertificate = cypher;
}
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
}
wshttp.DocumentRootPath = DocumentRootPath;
// Set the HTTP GET request event.
wshttp.OnGet += (sender, e) =>
{
var req = e.Request;
var res = e.Response;
string ClassFullName = "", FunctionName = "";
bool bPage = false;
bool bASPNET = false;
var path = req.RawUrl;
if (path == "/")
{
//path += "index.html";
#if ASPX
ClassFullName = defaultClass;
FunctionName = "index";
bPage = true;
bASPNET = true;
#else
path += "index.html";
#endif
}
else
{
int nPos = path.IndexOf("?");
if (nPos != -1)
{
path = path.Substring(0, nPos);
}
#if ASPX
if(path.EndsWith(".aspx"))
{
bASPNET = true;
bPage = true;
path=path.Trim();
path = path.Replace(".aspx", "");
string[] m_strArray=path.Split('/');
if(m_strArray.Length>=3)
{
ClassFullName = m_strArray[m_strArray.Length-2];
FunctionName = m_strArray[m_strArray.Length-1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
else
#endif
{
if (path.EndsWith(".ajax"))
{
bASPNET = true;
path = path.Trim();
path = path.Replace(".ajax", "");
string[] m_strArray = path.Split('/');
if (m_strArray.Length >= 3)
{
ClassFullName = m_strArray[m_strArray.Length - 2];
FunctionName = m_strArray[m_strArray.Length - 1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
}
}
byte[] contents;
if (!bASPNET)
{
if (!e.TryReadFile(path, out contents))
{
res.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
if (path.EndsWith(".html") || path.EndsWith(".htm"))
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
}
else if (path.EndsWith(".js"))
{
res.ContentType = "application/javascript";
res.ContentEncoding = Encoding.UTF8;
}
}
else
{
Hashtable m_HH = new Hashtable();
for (int i = 0; i < req.QueryString.AllKeys.Length; i++)
{
string name = req.QueryString.AllKeys[i].ToString();
m_HH[name] = req.QueryString[name];
}
if (m_WSCallFunction != null)
{
#if ASPX
WSReturnJson m_WSReturnJson=m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
#else
WSReturnJson m_WSReturnJson = new WSReturnJson();
if (!bPage)
{
m_WSReturnJson = m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr("暂不支持访问ASPX页面"));
res.WriteContent(contents);
return;
}
#endif
if (bPage)
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
if (m_WSReturnJson.bOK)
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.m_ReturnOBJ.ToString());
}
else
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.sMsg.ToString());
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr(m_WSReturnJson));
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes("没有调用函数");
}
}
res.WriteContent(contents);
};
wshttp.OnPost += (sender, e) =>
{
var req = e.Request;
var res = e.Response;
string ClassFullName = "", FunctionName = "";
bool bPage = false;
bool bASPNET = false;
var path = req.RawUrl;
if (path == "/")
{
//path += "index.html";
ClassFullName = defaultClass;
FunctionName = "index";
bPage = true;
bASPNET = true;
}
else
{
int nPos = path.IndexOf("?");
if (nPos != -1)
{
path = path.Substring(0, nPos);
}
if (path.EndsWith(".aspx"))
{
bASPNET = true;
bPage = true;
path = path.Trim();
path = path.Replace(".aspx", "");
string[] m_strArray = path.Split('/');
if (m_strArray.Length >= 3)
{
ClassFullName = m_strArray[m_strArray.Length - 2];
FunctionName = m_strArray[m_strArray.Length - 1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
else
{
if (path.EndsWith(".ajax"))
{
bASPNET = true;
path = path.Trim();
path = path.Replace(".ajax", "");
string[] m_strArray = path.Split('/');
if (m_strArray.Length >= 3)
{
ClassFullName = m_strArray[m_strArray.Length - 2];
FunctionName = m_strArray[m_strArray.Length - 1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
}
}
byte[] contents;
if (!bASPNET)
{
if (!e.TryReadFile(path, out contents))
{
res.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
if (path.EndsWith(".html"))
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
}
else if (path.EndsWith(".js"))
{
res.ContentType = "application/javascript";
res.ContentEncoding = Encoding.UTF8;
}
else if (path.EndsWith(".css"))
{
res.ContentType = "text/css";
res.ContentEncoding = Encoding.UTF8;
}
}
else
{
Hashtable m_HH = new Hashtable();
for (int i = 0; i < req.QueryString.AllKeys.Length; i++)
{
string name = req.QueryString.AllKeys[i].ToString();
m_HH[name] = req.QueryString[name];
}
byte[] bytes = new byte[req.InputStream.Length];
req.InputStream.Read(bytes, 0, bytes.Length);
string sText = System.Text.Encoding.UTF8.GetString(bytes);
bytes = null;
if (m_WSCallFunction != null)
{
#if ASPX
WSReturnJson m_WSReturnJson=m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
#else
WSReturnJson m_WSReturnJson = new WSReturnJson();
if (!bPage)
{
m_WSReturnJson = m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr("暂不支持访问ASPX页面"));
res.WriteContent(contents);
return;
}
#endif
if (bPage)
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
if (m_WSReturnJson.bOK)
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.m_ReturnOBJ.ToString());
}
else
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.sMsg.ToString());
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr(m_WSReturnJson));
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes("没有调用函数");
}
}
res.WriteContent(contents);
};
// Add the WebSocket services.
wshttp.AddWebSocketService<BaseClientLinkHttpWS>("/" + nodename, () => new BaseClientLinkHttpWS(m_IBaseWS, domain, bNeedApplicationLink, m_OnOpenCallBack, m_OnMessageCallBack, m_OnErrorCallBack, m_OnCloseCallBack));
wshttp.Start();
if (wshttp.IsListening)
{
return true;
}
return false;
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
}
}
public bool InitServiceHttpWS2(IBaseWS m_IBaseWS, string url, string nodename, string DocumentRootPath, bool bNeedApplicationLink = true, string defaultClass = "CoreSYS.SYS", WSCallFunctionPTR m_TWSCallFunction = null, OnOpenCallBack m_TOnOpenCallBack = null, OnMessageCallBack m_TOnMessageCallBack = null, OnErrorCallBack m_TOnErrorCallBack = null, OnCloseCallBack m_TOnCloseCallBack = null)
{
try
{
m_WSCallFunction = m_TWSCallFunction;
bHTTPService = true;
if (m_OnOpenCallBack == null)
m_OnOpenCallBack = m_TOnOpenCallBack;
if (m_OnMessageCallBack == null)
m_OnMessageCallBack = m_TOnMessageCallBack;
if (m_OnErrorCallBack == null)
m_OnErrorCallBack = m_TOnErrorCallBack;
if (m_OnCloseCallBack == null)
m_OnCloseCallBack = m_TOnCloseCallBack;
string domain = getDomain(url);
//BaseClientLinkHttpWS.Init(m_IBaseWS, domain, bNeedApplicationLink, m_OnOpenCallBack, m_OnMessageCallBack, m_OnErrorCallBack, m_OnCloseCallBack);
int nIndex = url.IndexOf(":", 10);
if (nIndex == -1)
{
return false;
}
if (url.IndexOf("ws://") != -1)
{
url = url.Replace("ws://", "http://");
}
else
{
if (url.IndexOf("wss://") != -1)
{
url = url.Replace("wss://", "https://");
}
else
{
return false;
}
}
wshttp = new HttpServer(url);
if (url.IndexOf("https://") == 0 || url.IndexOf("wss://") == 0)
{
try
{
if (System.Configuration.ConfigurationManager.AppSettings["WSCertFile"] != null)
{
if (System.Configuration.ConfigurationManager.AppSettings["WSCertFile"].ToString().Trim() != "")
{
var cert = System.Configuration.ConfigurationManager.AppSettings["WSCertFile"];
var passwd = System.Configuration.ConfigurationManager.AppSettings["WSCertFilePassword"];
wshttp.SslConfiguration.ServerCertificate = new X509Certificate2(cert, passwd);
}
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
}
wshttp.DocumentRootPath = DocumentRootPath;
// Set the HTTP GET request event.
wshttp.OnGet += (sender, e) =>
{
var req = e.Request;
var res = e.Response;
string ClassFullName = "", FunctionName = "";
bool bPage = false;
bool bASPNET = false;
var path = req.RawUrl;
if (path == "/")
{
//path += "index.html";
#if ASPX
ClassFullName = defaultClass;
FunctionName = "index";
bPage = true;
bASPNET = true;
#else
path += "index.html";
#endif
}
else
{
int nPos = path.IndexOf("?");
if (nPos != -1)
{
path = path.Substring(0, nPos);
}
#if ASPX
if(path.EndsWith(".aspx"))
{
bASPNET = true;
bPage = true;
path=path.Trim();
path = path.Replace(".aspx", "");
string[] m_strArray=path.Split('/');
if(m_strArray.Length>=3)
{
ClassFullName = m_strArray[m_strArray.Length-2];
FunctionName = m_strArray[m_strArray.Length-1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
else
#endif
{
if (path.EndsWith(".ajax"))
{
bASPNET = true;
path = path.Trim();
path = path.Replace(".ajax", "");
string[] m_strArray = path.Split('/');
if (m_strArray.Length >= 3)
{
ClassFullName = m_strArray[m_strArray.Length - 2];
FunctionName = m_strArray[m_strArray.Length - 1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
}
}
byte[] contents;
if (!bASPNET)
{
if (!e.TryReadFile(path, out contents))
{
res.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
if (path.EndsWith(".html") || path.EndsWith(".htm"))
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
}
else if (path.EndsWith(".js"))
{
res.ContentType = "application/javascript";
res.ContentEncoding = Encoding.UTF8;
}
}
else
{
Hashtable m_HH = new Hashtable();
for (int i = 0; i < req.QueryString.AllKeys.Length; i++)
{
string name = req.QueryString.AllKeys[i].ToString();
m_HH[name] = req.QueryString[name];
}
if (m_WSCallFunction != null)
{
#if ASPX
WSReturnJson m_WSReturnJson=m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
#else
WSReturnJson m_WSReturnJson = new WSReturnJson();
if (!bPage)
{
m_WSReturnJson = m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr("暂不支持访问ASPX页面"));
res.WriteContent(contents);
return;
}
#endif
if (bPage)
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
if (m_WSReturnJson.bOK)
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.m_ReturnOBJ.ToString());
}
else
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.sMsg.ToString());
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr(m_WSReturnJson));
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes("没有调用函数");
}
}
res.WriteContent(contents);
};
wshttp.OnPost += (sender, e) =>
{
var req = e.Request;
var res = e.Response;
string ClassFullName = "", FunctionName = "";
bool bPage = false;
bool bASPNET = false;
var path = req.RawUrl;
if (path == "/")
{
//path += "index.html";
ClassFullName = defaultClass;
FunctionName = "index";
bPage = true;
bASPNET = true;
}
else
{
int nPos = path.IndexOf("?");
if (nPos != -1)
{
path = path.Substring(0, nPos);
}
if (path.EndsWith(".aspx"))
{
bASPNET = true;
bPage = true;
path = path.Trim();
path = path.Replace(".aspx", "");
string[] m_strArray = path.Split('/');
if (m_strArray.Length >= 3)
{
ClassFullName = m_strArray[m_strArray.Length - 2];
FunctionName = m_strArray[m_strArray.Length - 1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
else
{
if (path.EndsWith(".ajax"))
{
bASPNET = true;
path = path.Trim();
path = path.Replace(".ajax", "");
string[] m_strArray = path.Split('/');
if (m_strArray.Length >= 3)
{
ClassFullName = m_strArray[m_strArray.Length - 2];
FunctionName = m_strArray[m_strArray.Length - 1];
}
else
{
ClassFullName = defaultClass;
FunctionName = m_strArray[1];
}
}
}
}
byte[] contents;
if (!bASPNET)
{
if (!e.TryReadFile(path, out contents))
{
res.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
if (path.EndsWith(".html"))
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
}
else if (path.EndsWith(".js"))
{
res.ContentType = "application/javascript";
res.ContentEncoding = Encoding.UTF8;
}
else if (path.EndsWith(".css"))
{
res.ContentType = "text/css";
res.ContentEncoding = Encoding.UTF8;
}
}
else
{
Hashtable m_HH = new Hashtable();
for (int i = 0; i < req.QueryString.AllKeys.Length; i++)
{
string name = req.QueryString.AllKeys[i].ToString();
m_HH[name] = req.QueryString[name];
}
byte[] bytes = new byte[req.InputStream.Length];
req.InputStream.Read(bytes, 0, bytes.Length);
string sText = System.Text.Encoding.UTF8.GetString(bytes);
bytes = null;
if (m_WSCallFunction != null)
{
#if ASPX
WSReturnJson m_WSReturnJson=m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
#else
WSReturnJson m_WSReturnJson = new WSReturnJson();
if (!bPage)
{
m_WSReturnJson = m_WSCallFunction(ClassFullName, FunctionName, m_HH, req, res);
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr("暂不支持访问ASPX页面"));
res.WriteContent(contents);
return;
}
#endif
if (bPage)
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
if (m_WSReturnJson.bOK)
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.m_ReturnOBJ.ToString());
}
else
{
contents = System.Text.Encoding.UTF8.GetBytes(m_WSReturnJson.sMsg.ToString());
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes(JsonHelper.OBJToJsonStr(m_WSReturnJson));
}
}
else
{
res.ContentType = "text/html";
res.ContentEncoding = Encoding.UTF8;
contents = System.Text.Encoding.UTF8.GetBytes("没有调用函数");
}
}
res.WriteContent(contents);
};
// Add the WebSocket services.
wshttp.AddWebSocketService<BaseClientLinkHttpWS>("/" + nodename, () => new BaseClientLinkHttpWS(m_IBaseWS, domain, bNeedApplicationLink, m_OnOpenCallBack, m_OnMessageCallBack, m_OnErrorCallBack, m_OnCloseCallBack));
wshttp.Start();
if (wshttp.IsListening)
{
return true;
}
return false;
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
}
}
客户端代码
public void InitWS(string url, string tdomain,bool bTNeedApplicationLink=true,int nTMaxRLKCnt = 10, OutputMessage m_TOutputMessage = null)
{
domain = tdomain;
myurl = url;
bNeedApplicationLink = bTNeedApplicationLink;
m_BaseClientWS = this;
if (nTMaxRLKCnt <= 0)
{
nMaxRLKCnt = 999999999;
}
else
{
nMaxRLKCnt = nTMaxRLKCnt;
}
if (m_OutputMessage == null)
m_OutputMessage = m_TOutputMessage;
m_ExitCNEvent.Reset();
ws = new WebSocket(url);
{
if (url.IndexOf("https://") == 0 || url.IndexOf("wss://") == 0)
{
try
{
if (System.Configuration.ConfigurationManager.AppSettings["WSCertFile"] != null)
{
if (System.Configuration.ConfigurationManager.AppSettings["WSCertFile"].ToString().Trim() != "")
{
// 根据自己的需要设置协议
ws.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;
var cert = System.Configuration.ConfigurationManager.AppSettings["WSCertFile"];
var passwd = System.Configuration.ConfigurationManager.AppSettings["WSCertFilePassword"];
//wshttp.SslConfiguration.ServerCertificate = new X509Certificate2(cert, passwd);
// 解码器
X509Certificate2 cypher = new X509Certificate2(cert, passwd);
// 给服务器加载解码器
ws.SslConfiguration.ClientCertificates = new X509CertificateCollection();// cypher;
ws.SslConfiguration.ClientCertificates.Add(cypher);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
// Set the WebSocket events.
ws.OnOpen += (sender, e) =>
{
bWSLink = true;
m_WSCNEvent.Set();
if (m_OutputMessage != null)
{
m_OutputMessage("连接服务:"+url+",成功");
}
if (OnOpen != null)
OnOpen(this, e);
if (m_OnOpenCallBack != null)
{
m_OnOpenCallBack(m_BaseClientWS);
}
};
ws.OnMessage += (sender, e) =>
{
/*
if (e.IsText)
{
string ss = e.Data.ToString();
}
else
{
if (e.IsBinary)
{
}
}
*/
if (OnMessage != null)
{
OnMessage(this, e);
}
if(bApplicationLinkOK)
{
SetPackTime();
}
if (m_OnMessageCallBack != null)
{
using (outWSData m_outWSData = new outWSData())
{
m_outWSData.IsText = e.IsText;
m_outWSData.IsPing = e.IsPing;
m_outWSData.IsBinary = e.IsBinary;
m_outWSData.text = e.Data;
m_outWSData.m_Data = e.RawData;
m_OnMessageCallBack(m_BaseClientWS, m_outWSData);
}
}
};
ws.OnError += (sender, e) =>
{
if (OnError != null)
{
OnError(this, e);
}
if (m_OnErrorCallBack != null)
{
m_OnErrorCallBack(m_BaseClientWS, e.Message);
}
};
ws.OnClose += (sender, e) =>
{
bWSLink = false;
m_WSCNEvent.Set();
if (m_OutputMessage != null)
{
m_OutputMessage("连接服务:" + url + ",丢失");
}
if (OnClose != null)
{
OnClose(this, e);
}
if (!bWSLinkTask)
{
Task.Factory.StartNew(() => AutoLinkWS());
}
if (m_OnCloseCallBack != null)
{
m_OnCloseCallBack(m_BaseClientWS);
}
if (bApplicationLinkOK)
{
packTime = DateTime.Now.AddDays(-20);
}
};
nRLinkCnt = 0;
Task.Factory.StartNew(() => AutoLinkWS());
}
}
各语言互动的加解密算法
生成公钥和私钥
RESJavaHelper.GeneratePublicAndPrivateKeyInfo(out privateKey, out publicKey);
outPublicJMString = RESJavaHelper.EncrytByPublicString(publicKey, "122233中华");
string ss=RESJavaHelper.DecryptByPrivateString(privateKey, outPublicJMString);
MessageBox.Show(ss);
outPrivateJMString = RESJavaHelper.PrivateKeyStringEncrypt(privateKey, "222222中户人名共和国");
string ss = RESJavaHelper.PublicKeyStringDecrypt(publicKey, outPrivateJMString);
MessageBox.Show(ss);
#region 各语言加解密
/*
在完成一个大项目时候,我们要用到多语言来开发接口,每个模块可能分配到各小组中,各小组成员用到语言往往不一样,在向接口传递参数的时候,就要用到加密与解密。
在网上找了一些,这篇文章中有通用的写法,《PHP、JAVA、C#、Object-C 通用的DES加密》。
我只对PHP和Golang加密与解密进行了修改,其它语言并没有修改!
PHP:
*/
/**
* @desc DES加密码与解密
*/
/*
class Des {
//密钥8位
public $key = '256&#@$M';
// @desc 加密返回大写十六进制字符串
// @param string $str
// @return string
//
public function encrypt($str) {
$size = mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC);
$str = $this->pkcs5Pad($str, $size);
return strtoupper(bin2hex( mcrypt_encrypt(MCRYPT_DES, $this->key, $str, MCRYPT_MODE_CBC, $this->key)));
}
// @desc 解密
// @param string $str
//@return string
public function decrypt($str) {
$strBin = $this->hex2bin(strtolower($str));
$str = mcrypt_decrypt(MCRYPT_DES, $this->key, $strBin, MCRYPT_MODE_CBC, $this->key);
$str = $this->pkcs5Unpad($str);
return $str;
}
public function hex2bin($hexData) {
$binData = '';
for($i = 0; $i < strlen ($hexData ); $i += 2) {
$binData .= chr(hexdec(substr($hexData, $i, 2)));
}
return $binData;
}
public function pkcs5Pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
public function pkcs5Unpad($text) {
$pad = ord ($text{strlen($text) - 1});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
return false;
}
return substr($text, 0, -1 * $pad);
}
}
$obj = new DES();
echo '<pre>';
echo $str = $obj->encrypt('123456');
echo '<br/>========================================<br/>';
echo $obj->decrypt($str);
*/
/*
下面再介绍一下Golang的,这里有篇文章详细的介绍了《Go加密解密之AES》,并附有代码。
Golang:
package main
import (
"bytes"
"crypto/cipher"
"crypto/des"
"encoding/base64"
"fmt"
)
func main() {
// DES 加解密
testDes()
// 3DES加解密
test3Des()
}
func testDes() {
key := []byte("256&#@$M")
result, err := DesEncrypt([]byte("123456"), key)
if err != nil {
panic(err)
}
fmt.Println(base64.StdEncoding.EncodeToString(result))
hexstr := fmt.Sprintf("%X", result)
fmt.Println(hexstr)
origData, err := DesDecrypt(result, key)
if err != nil {
panic(err)
}
fmt.Println("=======")
fmt.Println(string(origData))
}
func test3Des() {
key := []byte("256&#@$Msefiel#fi32lf3e!")
result, err := TripleDesEncrypt([]byte("123456"), key)
if err != nil {
panic(err)
}
fmt.Println(base64.StdEncoding.EncodeToString(result))
origData, err := TripleDesDecrypt(result, key)
if err != nil {
panic(err)
}
fmt.Println(string(origData))
}
func DesEncrypt(origData, key []byte) ([]byte, error) {
block, err := des.NewCipher(key)
if err != nil {
return nil, err
}
origData = PKCS5Padding(origData, block.BlockSize())
// origData = ZeroPadding(origData, block.BlockSize())
blockMode := cipher.NewCBCEncrypter(block, key)
crypted := make([]byte, len(origData))
// 根据CryptBlocks方法的说明,如下方式初始化crypted也可以
// crypted := origData
blockMode.CryptBlocks(crypted, origData)
return crypted, nil
}
func DesDecrypt(crypted, key []byte) ([]byte, error) {
block, err := des.NewCipher(key)
if err != nil {
return nil, err
}
blockMode := cipher.NewCBCDecrypter(block, key)
origData := make([]byte, len(crypted))
// origData := crypted
blockMode.CryptBlocks(origData, crypted)
origData = PKCS5UnPadding(origData)
// origData = ZeroUnPadding(origData)
return origData, nil
}
// 3DES加密
func TripleDesEncrypt(origData, key []byte) ([]byte, error) {
block, err := des.NewTripleDESCipher(key)
if err != nil {
return nil, err
}
origData = PKCS5Padding(origData, block.BlockSize())
// origData = ZeroPadding(origData, block.BlockSize())
blockMode := cipher.NewCBCEncrypter(block, key[:8])
crypted := make([]byte, len(origData))
blockMode.CryptBlocks(crypted, origData)
return crypted, nil
}
// 3DES解密
func TripleDesDecrypt(crypted, key []byte) ([]byte, error) {
block, err := des.NewTripleDESCipher(key)
if err != nil {
return nil, err
}
blockMode := cipher.NewCBCDecrypter(block, key[:8])
origData := make([]byte, len(crypted))
// origData := crypted
blockMode.CryptBlocks(origData, crypted)
origData = PKCS5UnPadding(origData)
// origData = ZeroUnPadding(origData)
return origData, nil
}
func ZeroPadding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{0}, padding)
return append(ciphertext, padtext...)
}
func ZeroUnPadding(origData []byte) []byte {
return bytes.TrimRightFunc(origData, func(r rune) bool {
return r == rune(0)
})
}
func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
// 去掉最后一个字节 unpadding 次
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
其它几个版本的可以看一下《PHP、JAVA、C#、Object-C 通用的DES加密》
这里也顺便Copy一下过来~
*/
/*
C#:
public class MyDes
{
/// <summary>
/// DES加密方法
/// </summary>
/// <param name="strPlain">明文</param>
/// <param name="strDESKey">密钥</param>
/// <param name="strDESIV">向量</param>
/// <returns>密文</returns>
public static string Encode(string source, string _DESKey)
{
StringBuilder sb = new StringBuilder();
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
byte[] key = ASCIIEncoding.ASCII.GetBytes(_DESKey);
byte[] iv = ASCIIEncoding.ASCII.GetBytes(_DESKey);
byte[] dataByteArray = Encoding.UTF8.GetBytes(source);
des.Mode = System.Security.Cryptography.CipherMode.CBC;
des.Key = key;
des.IV = iv;
string encrypt = "";
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
encrypt = Convert.ToBase64String(ms.ToArray());
}
return encrypt;
}
}
/// <summary>
/// 进行DES解密。
/// </summary>
/// <param name="pToDecrypt">要解密的base64串</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>已解密的字符串。</returns>
public static string Decode(string source, string sKey)
{
byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return str;
}
}
}
*/
/*
Object C:
//JoDes.h
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
@interface JoDes : NSObject
+ (NSString *) encode:(NSString *)str key:(NSString *)key;
+ (NSString *) decode:(NSString *)str key:(NSString *)key;
@end
//JoDes.m
//
// XLEncrytHelper.m
// NewHoldGold
//
// Created by 梁鑫磊 on 13-12-27.
// Copyright (c) 2013年 zsgjs. All rights reserved.
//
#import "JoDes.h"
@interface JoDes()
+ (NSString *) encodeBase64WithString:(NSString *)strData;
+ (NSString *) encodeBase64WithData:(NSData *)objData;
+ (NSData *) decodeBase64WithString:(NSString *)strBase64;
+ (NSString *)doCipher:(NSString *)sTextIn key:(NSString *)sKey
context:(CCOperation)encryptOrDecrypt;
@end
@implementation JoDes
+ (NSString *) encode:(NSString *)str key:(NSString *)key
{
// doCipher 不能编汉字,所以要进行 url encode
NSMutableString* str1 = [JoDes urlEncode:str];
NSMutableString* encode = [NSMutableString stringWithString:[JoDes doCipher:str1 key:key context:kCCEncrypt]];
[JoDes formatSpecialCharacters:encode];
return encode;
}
+ (NSString *) decode:(NSString *)str key:(NSString *)key
{
NSMutableString *str1 = [NSMutableString stringWithString:str];
[JoDes reformatSpecialCharacters:str1];
NSString *rt = [JoDes doCipher:str1 key:key context:kCCDecrypt];
return rt;
}
+ (NSMutableString *)urlEncode:(NSString*)str
{
NSMutableString* encodeStr = [NSMutableString stringWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[encodeStr replaceOccurrencesOfString:@"+" withString:@"%2B" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [encodeStr length])];
[encodeStr replaceOccurrencesOfString:@"/" withString:@"%2F" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [encodeStr length])];
return encodeStr;
}
+ (void)formatSpecialCharacters:(NSMutableString *)str
{
[str replaceOccurrencesOfString:@"+" withString:@"$$" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])];
[str replaceOccurrencesOfString:@"/" withString:@"@@" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])];
}
+ (void)reformatSpecialCharacters:(NSMutableString *)str
{
[str replaceOccurrencesOfString:@"$$" withString:@"+" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])];
[str replaceOccurrencesOfString:@"@@" withString:@"/" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])];
}
+ (NSString *)encodeBase64WithString:(NSString *)strData {
return [JoDes encodeBase64WithData:[strData dataUsingEncoding:NSUTF8StringEncoding]];
}
+ (NSString *)encodeBase64WithData:(NSData *)objData {
NSString *encoding = nil;
unsigned char *encodingBytes = NULL;
@try {
static char encodingTable[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static NSUInteger paddingTable[] = {0,2,1};
NSUInteger dataLength = [objData length];
NSUInteger encodedBlocks = (dataLength * 8) / 24;
NSUInteger padding = paddingTable[dataLength % 3];
if( padding > 0 ) encodedBlocks++;
NSUInteger encodedLength = encodedBlocks * 4;
encodingBytes = malloc(encodedLength);
if( encodingBytes != NULL ) {
NSUInteger rawBytesToProcess = dataLength;
NSUInteger rawBaseIndex = 0;
NSUInteger encodingBaseIndex = 0;
unsigned char *rawBytes = (unsigned char *)[objData bytes];
unsigned char rawByte1, rawByte2, rawByte3;
while( rawBytesToProcess >= 3 ) {
rawByte1 = rawBytes[rawBaseIndex];
rawByte2 = rawBytes[rawBaseIndex+1];
rawByte3 = rawBytes[rawBaseIndex+2];
encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)];
encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ];
encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) | ((rawByte3 >> 6) & 0x03) ];
encodingBytes[encodingBaseIndex+3] = encodingTable[(rawByte3 & 0x3F)];
rawBaseIndex += 3;
encodingBaseIndex += 4;
rawBytesToProcess -= 3;
}
rawByte2 = 0;
switch (dataLength-rawBaseIndex) {
case 2:
rawByte2 = rawBytes[rawBaseIndex+1];
case 1:
rawByte1 = rawBytes[rawBaseIndex];
encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)];
encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ];
encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) ];
// we can skip rawByte3 since we have a partial block it would always be 0
break;
}
// compute location from where to begin inserting padding, it may overwrite some bytes from the partial block encoding
// if their value was 0 (cases 1-2).
encodingBaseIndex = encodedLength - padding;
while( padding-- > 0 ) {
encodingBytes[encodingBaseIndex++] = '=';
}
encoding = [[NSString alloc] initWithBytes:encodingBytes length:encodedLength encoding:NSASCIIStringEncoding];
}
}
@catch (NSException *exception) {
encoding = nil;
NSLog(@"WARNING: error occured while tring to encode base 32 data: %@", exception);
}
@finally {
if( encodingBytes != NULL ) {
free( encodingBytes );
}
}
return encoding;
}
+ (NSData *)decodeBase64WithString:(NSString *)strBase64 {
NSData *data = nil;
unsigned char *decodedBytes = NULL;
@try {
#define __ 255
static char decodingTable[256] = {
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x00 - 0x0F
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x10 - 0x1F
__,__,__,__, __,__,__,__, __,__,__,62, __,__,__,63, // 0x20 - 0x2F
52,53,54,55, 56,57,58,59, 60,61,__,__, __, 0,__,__, // 0x30 - 0x3F
__, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, // 0x40 - 0x4F
15,16,17,18, 19,20,21,22, 23,24,25,__, __,__,__,__, // 0x50 - 0x5F
__,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, // 0x60 - 0x6F
41,42,43,44, 45,46,47,48, 49,50,51,__, __,__,__,__, // 0x70 - 0x7F
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x80 - 0x8F
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x90 - 0x9F
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xA0 - 0xAF
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xB0 - 0xBF
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xC0 - 0xCF
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xD0 - 0xDF
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xE0 - 0xEF
__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xF0 - 0xFF
};
strBase64 = [strBase64 stringByReplacingOccurrencesOfString:@"=" withString:@""];
NSData *encodedData = [strBase64 dataUsingEncoding:NSASCIIStringEncoding];
unsigned char *encodedBytes = (unsigned char *)[encodedData bytes];
NSUInteger encodedLength = [encodedData length];
NSUInteger encodedBlocks = (encodedLength+3) >> 2;
NSUInteger expectedDataLength = encodedBlocks * 3;
unsigned char decodingBlock[4];
decodedBytes = malloc(expectedDataLength);
if( decodedBytes != NULL ) {
NSUInteger i = 0;
NSUInteger j = 0;
NSUInteger k = 0;
unsigned char c;
while( i < encodedLength ) {
c = decodingTable[encodedBytes[i]];
i++;
if( c != __ ) {
decodingBlock[j] = c;
j++;
if( j == 4 ) {
decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4);
decodedBytes[k+1] = (decodingBlock[1] << 4) | (decodingBlock[2] >> 2);
decodedBytes[k+2] = (decodingBlock[2] << 6) | (decodingBlock[3]);
j = 0;
k += 3;
}
}
}
// Process left over bytes, if any
if( j == 3 ) {
decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4);
decodedBytes[k+1] = (decodingBlock[1] << 4) | (decodingBlock[2] >> 2);
k += 2;
} else if( j == 2 ) {
decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4);
k += 1;
}
data = [[NSData alloc] initWithBytes:decodedBytes length:k];
}
}
@catch (NSException *exception) {
data = nil;
NSLog(@"WARNING: error occured while decoding base 32 string: %@", exception);
}
@finally {
if( decodedBytes != NULL ) {
free( decodedBytes );
}
}
return data;
}
+ (NSString *)doCipher:(NSString *)sTextIn key:(NSString *)sKey
context:(CCOperation)encryptOrDecrypt {
NSStringEncoding EnC = NSUTF8StringEncoding;
NSMutableData *dTextIn;
if (encryptOrDecrypt == kCCDecrypt) {
dTextIn = [[JoDes decodeBase64WithString:sTextIn] mutableCopy];
}
else{
dTextIn = [[sTextIn dataUsingEncoding: EnC] mutableCopy];
}
NSMutableData * dKey = [[sKey dataUsingEncoding:EnC] mutableCopy];
[dKey setLength:kCCBlockSizeDES];
uint8_t *bufferPtr1 = NULL;
size_t bufferPtrSize1 = 0;
size_t movedBytes1 = 0;
//uint8_t iv[kCCBlockSizeDES];
//memset((void *) iv, 0x0, (size_t) sizeof(iv));
// Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
bufferPtrSize1 = ([sTextIn length] + kCCKeySizeDES) & ~(kCCKeySizeDES -1);
bufferPtr1 = malloc(bufferPtrSize1 * sizeof(uint8_t));
memset((void *)bufferPtr1, 0x00, bufferPtrSize1);
CCCrypt(encryptOrDecrypt, // CCOperation op
kCCAlgorithmDES, // CCAlgorithm alg
kCCOptionPKCS7Padding, // CCOptions options
[dKey bytes], // const void *key
[dKey length], // size_t keyLength //
[dKey bytes], // const void *iv
[dTextIn bytes], // const void *dataIn
[dTextIn length], // size_t dataInLength
(void *)bufferPtr1, // void *dataOut
bufferPtrSize1, // size_t dataOutAvailable
&movedBytes1);
//[dTextIn release];
//[dKey release];
NSString * sResult;
if (encryptOrDecrypt == kCCDecrypt){
sResult = [[NSString alloc] initWithData:[NSData dataWithBytes:bufferPtr1 length:movedBytes1] encoding:EnC];
free(bufferPtr1);
}
else {
NSData *dResult = [NSData dataWithBytes:bufferPtr1 length:movedBytes1];
free(bufferPtr1);
sResult = [JoDes encodeBase64WithData:dResult];
}
return sResult;
}
*/
/*
Java:
package com.example.aric.test;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import android.util.Base64;
public class DES {
public final static String DES_KEY_STRING = "ABSujsuu";
public static String encrypt(String message, String key) throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
return encodeBase64(cipher.doFinal(message.getBytes("UTF-8")));
}
public static String decrypt(String message, String key) throws Exception {
byte[] bytesrc = decodeBase64(message);//convertHexString(message);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
byte[] retByte = cipher.doFinal(bytesrc);
return new String(retByte);
}
public static byte[] convertHexString(String ss) {
byte digest[] = new byte[ss.length() / 2];
for (int i = 0; i < digest.length; i++) {
String byteString = ss.substring(2 * i, 2 * i + 2);
int byteValue = Integer.parseInt(byteString, 16);
digest[i] = (byte) byteValue;
}
return digest;
}
public static String toHexString(byte b[]) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String plainText = Integer.toHexString(0xff & b[i]);
if (plainText.length() < 2)
plainText = "0" + plainText;
hexString.append(plainText);
}
return hexString.toString();
}
public static String encodeBase64(byte[] b) {
return Base64.encodeToString(b, Base64.DEFAULT);
}
public static byte[] decodeBase64(String base64String) {
return Base64.decode(base64String, Base64.DEFAULT);
}
}
*/
#endregion
public class PublicDES
{
/// <summary>
/// DES加密方法
/// </summary>
/// <param name="strPlain">明文</param>
/// <param name="strDESKey">密钥</param>
/// <param name="strDESIV">向量</param>
/// <returns>密文</returns>
public static string Encode(string source, string _DESKey)
{
if(_DESKey.Length!=8)
{
if(_DESKey.Length>=8)
{
_DESKey = _DESKey.Substring(0, 8);
}
else
{
int L = 8 - _DESKey.Length;
for(int i=0;i<L;i++)
{
_DESKey += "0";
}
}
}
StringBuilder sb = new StringBuilder();
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
byte[] key = ASCIIEncoding.ASCII.GetBytes(_DESKey);
byte[] iv = ASCIIEncoding.ASCII.GetBytes(_DESKey);
byte[] dataByteArray = Encoding.UTF8.GetBytes(source);
des.Mode = System.Security.Cryptography.CipherMode.CBC;
des.Key = key;
des.IV = iv;
string encrypt = "";
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
encrypt = Convert.ToBase64String(ms.ToArray());
}
return encrypt;
}
}
/// <summary>
/// 进行DES解密。
/// </summary>
/// <param name="pToDecrypt">要解密的base64串</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>已解密的字符串。</returns>
public static string Decode(string source, string sKey)
{
if (sKey.Length != 8)
{
if (sKey.Length >= 8)
{
sKey = sKey.Substring(0, 8);
}
else
{
int L = 8 - sKey.Length;
for (int i = 0; i < L; i++)
{
sKey += "0";
}
}
}
byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return str;
}
}
}
}
客户端加密访问
例子代码:
app登录代码
当web.config配置为
<add key="客户端通讯加密" value="true" />
XNWindowHttpClient m_XNWindowHttpClient = new XNWindowHttpClient();
bool bOK;
Hashtable m_HH = new Hashtable();
m_HH["appid"] = "7566";//代理池服务行业的应用id,可在行业应用管理里查看app信息
string sData = JsonHelper.OBJToJsonStr(m_HH);
//url = "http://localhost:3664";
sData = m_XNWindowHttpClient.PostJson(url+"/CoreSYS.SYS/app_Hander.app", sData, out bOK);
Hashtable m_ReturnJson = new Hashtable();
JsonHelper.JsonToHashtable(sData, m_ReturnJson);
if((bool)m_ReturnJson["bOK"])
{
Hashtable m_ReturnOBJHH = (Hashtable)m_ReturnJson["m_ReturnOBJ"];
appkey = m_ReturnOBJHH["appkey"].ToString();
rand = m_ReturnOBJHH["rand"].ToString();
rand=RESJavaHelper.PublicKeyStringDecrypt(publicString, rand);
Hashtable m_ParameHH = new Hashtable();
m_ParameHH["username"] = "xn";
m_ParameHH["password"] = "123wasd";
m_XNWindowHttpClient.ClearPostHeader();
m_XNWindowHttpClient.AddHeader("appkey", appkey);
string sText=JsonHelper.OBJToJsonStr(m_ParameHH);
sData=AESJavaASPDotNet.EncodeAES(sText, rand, "1234567890abcdef");
sData=m_XNWindowHttpClient.PostJson(url+"/CoreSYS.SYS/LoginApp.app", sData, out bOK);
m_ReturnJson = JsonHelper.JsonStrToOBJ<Hashtable>(sData);
if ((bool)m_ReturnJson["bOK"])
{
m_ReturnOBJHH = JsonHelper.OBJToType<Hashtable>(m_ReturnJson["m_ReturnOBJ"]);
Hashtable m_UserInfoHH = JsonHelper.OBJToType<Hashtable>(m_ReturnOBJHH["m_UserInfo"]);
LGKey = m_UserInfoHH["LGKey"].ToString();
MessageBox.Show("登录成功:" + LGKey);
}
else
{
MessageBox.Show("登录失败");
}
}
else
{
MessageBox.Show(m_ReturnJson["sMsg"].ToString());
}
app调用登录后函数
XNWindowHttpClient m_XNWindowHttpClient = new XNWindowHttpClient();
bool bOK;
Hashtable m_HHH = new Hashtable();
m_HHH["中华"] = "中华";
m_HHH["LGKey"] = LGKey;
string sText = JsonHelper.OBJToJsonStr(m_HHH);
m_XNWindowHttpClient.ClearPostHeader();
m_XNWindowHttpClient.AddHeader("appkey", appkey);
string sData = AESJavaASPDotNet.EncodeAES(sText, rand, "1234567890abcdef");
sData = m_XNWindowHttpClient.PostJson(url + "/PY/HelloAPP.app", sData, out bOK);
MessageBox.Show(sData);
当web.config的配置为<add key="客户端通讯加密" value="false" />
调用客户端SDK NETDeviceSDK
public partial class DeviceAction
{
static private string LGKey = "";
public void InitHttp(string turl)
{
url = turl;
}
#region 获得最新版本
/// <summary>
///
/// </summary>
/// <param name="appname">应用名</param>
/// <param name="apptype">类型:windows,android</param>
/// <param name="appmark">应用区分特征码</param>
/// <param name="ver">版本</param>
/// <param name="appexe">输出主程序</param>
/// <param name="DownUrlOrMsg">输出下载地址</param>
/// <param name="sNowVer">输出现在版本</param>
/// <returns></returns>
public bool GetNewAppVer(string appname, string apptype, string appmark, string ver, out string appexe, out string DownUrlOrMsg, out string sNowVer)
{
DownUrlOrMsg = "";
appexe = "";
sNowVer = ver;
try
{
Hashtable m_HH = new Hashtable();
m_HH["appname"] = appname;
m_HH["apptype"] = apptype;
m_HH["appmark"] = appmark;
m_HH["ver"] = ver;
string jsonString = JsonHelper.OBJToJsonStr(m_HH);
bool bOK;
jsonString = m_Http.PostJson(url + "/CoreSYS.SYS/GetNewAppVer.ajax", jsonString, out bOK);
if (!bOK)
{
DownUrlOrMsg = "网络调用异常";
return false;
}
ReturnJson m_ReturnJson = JsonHelper.JsonStrToOBJ<ReturnJson>(jsonString);
if (m_ReturnJson.bOK)
{
Hashtable m_ReturnHH = new Hashtable();
JsonHelper.OBJToHashTable(m_ReturnJson.m_ReturnOBJ, m_ReturnHH);
if (m_ReturnHH.ContainsKey("DownUrl"))
{
DownUrlOrMsg = m_ReturnHH["DownUrl"].ToString();
if (DownUrlOrMsg.IndexOf("http") != 0)
{
DownUrlOrMsg = url + DownUrlOrMsg;
}
if (m_ReturnHH.ContainsKey("appexe"))
{
appexe = m_ReturnHH["appexe"].ToString();
}
if (m_ReturnHH.ContainsKey("ver"))
{
sNowVer = m_ReturnHH["ver"].ToString();
}
}
return true;
}
else
{
DownUrlOrMsg = m_ReturnJson.sMsg;
}
return m_ReturnJson.bOK;
}
catch (Exception e)
{
return false;
}
}
#endregion
#region 激活客户端
/// <summary>
///
/// </summary>
/// <param name="appname">应用名</param>
/// <param name="apptype">类型:windows,android</param>
/// <param name="appmark">应用区分特征码</param>
/// <param name="deviceid">设备ID</param>
/// <param name="reguser">激活账户</param>
/// <param name="m_ReturnHH">返回信息</param>
/// <returns></returns>
public bool ActiveApplication(string appname, string apptype, string appmark, string deviceid, string reguser, out Hashtable m_ReturnHH)
{
bool bOK = false;
m_ReturnHH = null;
try
{
Hashtable m_HH = new Hashtable();
m_HH["appname"] = appname;
m_HH["apptype"] = apptype;
m_HH["appmark"] = appmark;
m_HH["deviceid"] = deviceid;
m_HH["reguser"] = reguser;
string jsonString = JsonHelper.OBJToJsonStr(m_HH);
jsonString = m_Http.PostJson(url + "/CoreSYS.SYS/appregOffline.ajax", jsonString, out bOK);
if(!bOK)
{
return false;
}
ReturnJson m_ReturnJson = JsonHelper.JsonStrToOBJ<ReturnJson>(jsonString);
if (m_ReturnJson.bOK)
{
m_ReturnHH = new Hashtable();
JsonHelper.OBJToHashTable(m_ReturnJson.m_ReturnOBJ, m_ReturnHH);
return true;
}
else
{
}
return m_ReturnJson.bOK;
}
catch
{
}
return bOK;
}
#endregion
#region 更新下载并运行
/// <summary>
///
/// </summary>
/// <param name="appname">应用名</param>
/// <param name="apptype">类型:windows,android</param>
/// <param name="appmark">应用区分特征码</param>
/// <param name="sMsg">错误信息</param>
/// <returns></returns>
public bool DownSoft(string appname, string apptype, string appmark, out string sMsg)
{
sMsg = "";
bool bOK = false;
string ver = "0";
string appexe, DownUrl, sNowVer;
if (!GetNewAppVer(appname, apptype, appmark, ver, out appexe, out DownUrl, out sNowVer))
{
sMsg = DownUrl;
return false;
}
try
{
int nPos = DownUrl.LastIndexOf("/");
string FName = "";
if (nPos != -1)
{
FName = DownUrl.Substring(nPos + 1);
}
if (FName == "")
{
sMsg = "查找文件名失败";
return false;
}
string PathFile = GetPathEXE() + "\\DownFile\\" + FName;
if (!Directory.Exists(GetPathEXE() + "\\DownFile"))
{
Directory.CreateDirectory(GetPathEXE() + "\\DownFile");
}
string UnZipPath = GetPathEXE() + "\\" + sNowVer;
DeleteDir(UnZipPath);
Directory.CreateDirectory(UnZipPath);
if (m_Http.GetFile(DownUrl, PathFile))
{
if (PathFile.IndexOf(".zip") != -1)
{
string sTMsg = "";
if (!unZipFile(PathFile, UnZipPath, ref sTMsg))
{
sMsg = sTMsg;
return false;
}
CopyDirectory(UnZipPath, GetPathEXE(), true);
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = GetPathEXE() + "\\" + appexe;
info.Arguments = "";
info.WindowStyle = ProcessWindowStyle.Maximized;
Process pro = Process.Start(info);
return true;
}
return false;
}
else
{
return false;
}
}
catch (Exception e)
{
sMsg = "下载错误:" + e.ToString();
bOK = false;
}
return bOK;
}
#endregion
#region 登录平台
/// <summary>
///
/// </summary>
/// <param name="username">账户</param>
/// <param name="password">口令</param>
/// <returns></returns>
public ReturnJson LoginApp(string username,string password)
{
ReturnJson m_ReturnJson = new ReturnJson();
try
{
Hashtable m_HH = new Hashtable();
m_HH["username"] = username;
m_HH["password"] = password;
string jsonString = JsonHelper.OBJToJsonStr(m_HH);
bool bOK;
jsonString = m_Http.PostJson(url + "/CoreSYS.SYS/LoginApp.ajax", jsonString, out bOK);
if (!bOK)
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="网络调用异常";
return m_ReturnJson;
}
m_ReturnJson = JsonHelper.JsonStrToOBJ<ReturnJson>(jsonString);
if (m_ReturnJson.bOK)
{
Hashtable m_ReturnHH = new Hashtable();
JsonHelper.OBJToHashTable(m_ReturnJson.m_ReturnOBJ, m_ReturnHH);
if(m_ReturnHH.ContainsKey("m_UserInfo"))
{
Hashtable m_UserInfoHH = (Hashtable)m_ReturnHH["m_UserInfo"];
if (m_UserInfoHH.ContainsKey("LGKey"))
{
m_ReturnJson.m_ReturnOBJ = m_UserInfoHH;
LGKey = m_UserInfoHH["LGKey"].ToString();
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "返回数据异常";
}
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "返回数据异常";
}
}
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "登录失败";
}
return m_ReturnJson;
}
#endregion
public ReturnJson APIAjax(string ClassName,string FunctionName,Object m_OBJ)
{
ReturnJson m_ReturnJson = new ReturnJson();
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
bool bOK;
string turl=url + "/"+ClassName+"/"+FunctionName+".ajax?LGKey="+LGKey;
jsonString = m_Http.PostJson(turl, jsonString, out bOK);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg="网络调用异常";
return m_ReturnJson;
}
m_ReturnJson = JsonHelper.JsonStrToOBJ<ReturnJson>(jsonString);
return m_ReturnJson;
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用异常";
}
return m_ReturnJson;
}
public bool APIAjaxDownFile(string ClassName, string FunctionName, Object m_OBJ,string FilePath)
{
bool bOK;
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
string turl = url + "/" + ClassName + "/" + FunctionName + ".ajax?LGKey=" + LGKey;
bOK=m_Http.PostJsonDownFile(turl, jsonString,FilePath);
}
catch
{
bOK = false;
}
return bOK;
}
public bool APIAjax<T>(string ClassName, string FunctionName, Object m_OBJ,out string sMsg,out T m_T)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_T = default(T);
bool bOK=false;
sMsg = "";
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
string turl = url + "/" + ClassName + "/" + FunctionName + ".ajax?LGKey=" + LGKey;
jsonString = m_Http.PostJson(turl, jsonString, out bOK);
if (bOK)
{
m_ReturnJson = JsonHelper.JsonStrToOBJ<ReturnJson>(jsonString);
if(m_ReturnJson.bOK)
{
m_T = JsonHelper.OBJToType<T>(m_ReturnJson.m_ReturnOBJ);
bOK = true;
}
else
{
bOK = false;
sMsg = m_ReturnJson.sMsg;
return false;
}
}
else
{
sMsg = "网络调用异常";
return false;
}
}
catch
{
sMsg = "调用异常";
}
return bOK;
}
public bool APIAjax_RawJson <T>(string ClassName, string FunctionName, Object m_OBJ, out T m_ReturnT)
{
m_ReturnT = default(T);
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
bool bOK;
string turl = url + "/" + ClassName + "/" + FunctionName + ".ajax?LGKey=" + LGKey;
jsonString = m_Http.PostJson(turl, jsonString, out bOK);
if (!bOK)
{
return false;
}
m_ReturnT = JsonHelper.JsonStrToOBJ<T>(jsonString);
return true;
}
catch
{
}
return false;
}
private string md5(string str, int code)
{
if (code == 16) //16位MD5加密(取32位加密的9~25字符)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);
}
else//32位加密
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
}
}
public ReturnJson APIApp(string ClassName, string FunctionName, Object m_OBJ)
{
ReturnJson m_ReturnJson = new ReturnJson();
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
bool bOK;
string turl=url + "/" + ClassName + "/" + FunctionName + ".app?LGKey=" + LGKey;
if (!string.IsNullOrEmpty(LGKey))
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds;
string timestamp = timeStamp.ToString();
string sign = LGKey.Substring(0, 5) + LGKey.Substring(10, 5) + LGKey.Substring(20, 7) + timestamp;
sign = md5(sign, 32);
turl += "×tamp=" + timestamp + "&sign=" + sign;
}
jsonString = m_Http.PostJson(turl, jsonString, out bOK);
if (!bOK)
{
m_ReturnJson.sMsg = "网络调用异常";
m_ReturnJson.bOK = false;
return m_ReturnJson;
}
m_ReturnJson = JsonHelper.JsonStrToOBJ<ReturnJson>(jsonString);
return m_ReturnJson;
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调动异常";
}
return m_ReturnJson;
}
public bool APIAppDownFile(string ClassName, string FunctionName, Object m_OBJ, string FilePath)
{
bool bOK = false;
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
string turl = url + "/" + ClassName + "/" + FunctionName + ".app?LGKey=" + LGKey;
if (!string.IsNullOrEmpty(LGKey))
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds;
string timestamp = timeStamp.ToString();
string sign = LGKey.Substring(0, 5) + LGKey.Substring(10, 5) + LGKey.Substring(20, 7) + timestamp;
sign = md5(sign, 32);
turl += "×tamp=" + timestamp + "&sign=" + sign;
}
bOK = m_Http.PostJsonDownFile(turl, jsonString, FilePath);
}
catch
{
bOK = false;
}
return bOK;
}
public bool APIApp<T>(string ClassName, string FunctionName, Object m_OBJ,out string sMsg,out T m_T)
{
ReturnJson m_ReturnJson = new ReturnJson();
sMsg = "";
m_T = default(T);
bool bOK = false;
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
string turl = url + "/" + ClassName + "/" + FunctionName + ".app?LGKey=" + LGKey;
if (!string.IsNullOrEmpty(LGKey))
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds;
string timestamp = timeStamp.ToString();
string sign = LGKey.Substring(0, 5) + LGKey.Substring(10, 5) + LGKey.Substring(20, 7) + timestamp;
sign = md5(sign, 32);
turl += "×tamp=" + timestamp + "&sign=" + sign;
}
jsonString = m_Http.PostJson(turl, jsonString, out bOK);
if (bOK)
{
m_ReturnJson = JsonHelper.JsonStrToOBJ<ReturnJson>(jsonString);
if(m_ReturnJson.bOK)
{
m_T = JsonHelper.OBJToType<T>(m_ReturnJson.m_ReturnOBJ);
return true;
}
else
{
sMsg = m_ReturnJson.sMsg;
return false;
}
}
else
{
sMsg = "网络调用失败";
return false;
}
}
catch
{
bOK = false;
sMsg = "调动异常";
}
return bOK;
}
public bool APIApp_RawJson<T>(string ClassName, string FunctionName, Object m_OBJ, out T m_ReturnT)
{
m_ReturnT = default(T);
try
{
string jsonString = JsonHelper.OBJToJsonStr(m_OBJ);
bool bOK;
string turl = url + "/" + ClassName + "/" + FunctionName + ".app?LGKey=" + LGKey;
if (!string.IsNullOrEmpty(LGKey))
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds;
string timestamp = timeStamp.ToString();
string sign = LGKey.Substring(0, 5) + LGKey.Substring(10, 5) + LGKey.Substring(20, 7) + timestamp;
sign = md5(sign, 32);
turl += "×tamp=" + timestamp + "&sign=" + sign;
}
jsonString = m_Http.PostJson(turl, jsonString, out bOK);
if (!bOK)
{
return false;
}
m_ReturnT = JsonHelper.JsonStrToOBJ<T>(jsonString);
return true;
}
catch
{
}
return false;
}
public bool DownFile(string downurl,string PathFile)
{
return m_Http.GetFile(downurl, PathFile);
}
public bool UploadFile(string FilePath, out string sFileUrlOrMsg,ProgressBar progressBar=null)
{
sFileUrlOrMsg = "";
ReturnJson m_ReturnJson=APIAjax("CoreSYS.SYS", "GetUpFileService", null);
try
{
if(m_ReturnJson.bOK)
{
Hashtable m_ReturnHH = new Hashtable();
JsonHelper.OBJToHashTable(m_ReturnJson.m_ReturnOBJ, m_ReturnHH);
if (m_ReturnHH.ContainsKey("token") && m_ReturnHH.ContainsKey("configjson"))
{
string token = m_ReturnHH["token"].ToString();
string configjson = m_ReturnHH["configjson"].ToString();
Hashtable m_configHH = new Hashtable();
JsonHelper.JsonToHashtable(configjson, m_configHH);
if(m_configHH.ContainsKey("上传地址"))
{
string sUpFileUrl = m_configHH["上传地址"].ToString();
string saveName = "";
int nPos = FilePath.LastIndexOf("\\");
if(nPos!=-1)
{
saveName = FilePath.Substring(nPos + 1);
}
sUpFileUrl += "?token=" + token;
string outString;
if (m_Http.UploadFile(sUpFileUrl, FilePath, saveName,out outString, progressBar))
{
Hashtable m_ReturnFileHH = new Hashtable();
try
{
JsonHelper.JsonToHashtable(outString, m_ReturnFileHH);
ArrayList m_ArrayList=(ArrayList)m_ReturnFileHH["m_ReturnOBJ"];
if (m_ArrayList.Count > 0)
{
sFileUrlOrMsg = m_ArrayList[0].ToString();
return true;
}
else
{
sFileUrlOrMsg = "获得上传返回文件URL出错";
return false;
}
}
catch
{
sFileUrlOrMsg = "获得上传返回文件URL出错";
return false;
}
}
else
{
sFileUrlOrMsg = "调用上传出错";
return false;
}
}
else
{
sFileUrlOrMsg = "返回上传凭证信息有误";
return false;
}
}
else
{
sFileUrlOrMsg = "调用获得上传凭证失败";
return false;
}
}
else
{
sFileUrlOrMsg = "调用获得上传凭证失败";
return false;
}
}
catch(Exception e)
{
sFileUrlOrMsg = "上传错误:"+e.ToString();
return false;
}
}
}
public class rowList
{
public int total;
public List<Hashtable> rows;
public int nPageSize;
}
public partial class DeviceAction
{
private WindowHttpClient m_Http = new WindowHttpClient();
private string url = "";
private string GetPathEXE()
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
}
#region 直接删除指定目录下的所有文件及文件夹(保留目录)
public static void DeleteDir(string file)
{
try
{
//去除文件夹和子文件的只读属性
//去除文件夹的只读属性
System.IO.DirectoryInfo fileInfo = new DirectoryInfo(file);
fileInfo.Attributes = FileAttributes.Normal & FileAttributes.Directory;
//去除文件的只读属性
System.IO.File.SetAttributes(file, System.IO.FileAttributes.Normal);
//判断文件夹是否还存在
if (Directory.Exists(file))
{
foreach (string f in Directory.GetFileSystemEntries(file))
{
if (File.Exists(f))
{
//如果有子文件删除文件
File.Delete(f);
Console.WriteLine(f);
}
else
{
//循环递归删除子文件夹
DeleteDir(f);
}
}
//删除空文件夹
Directory.Delete(file);
Console.WriteLine(file);
}
}
catch (Exception ex) // 异常处理
{
Console.WriteLine(ex.Message.ToString());// 异常信息
}
}
#endregion
private static bool CopyDirectory(string SourcePath, string DestinationPath, bool overwriteexisting)
{
bool ret = false;
try
{
SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\";
DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\";
if (Directory.Exists(SourcePath))
{
if (Directory.Exists(DestinationPath) == false)
Directory.CreateDirectory(DestinationPath);
foreach (string fls in Directory.GetFiles(SourcePath))
{
FileInfo flinfo = new FileInfo(fls);
flinfo.CopyTo(DestinationPath + flinfo.Name, overwriteexisting);
}
foreach (string drs in Directory.GetDirectories(SourcePath))
{
DirectoryInfo drinfo = new DirectoryInfo(drs);
if (CopyDirectory(drs, DestinationPath + drinfo.Name, overwriteexisting) == false)
ret = false;
}
}
ret = true;
}
catch (Exception ex)
{
ret = false;
}
return ret;
}
static private string getActivationCode(string deviceid)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(deviceid));
string theCode = null;
for (int i = 0; i < result.Length; i++)
{
theCode += result[i].ToString("X2"); //转换MD5字节数据为16进制添加到字符串中 x为8进制小写(x2类同),X为大写(X2类同),
}
string[] md5Code = new string[4];
md5Code[0] = theCode.Substring(0, 8);
md5Code[1] = theCode.Substring(8, 8);
md5Code[2] = theCode.Substring(16, 8);
md5Code[3] = theCode.Substring(24, 8);
List<int> positionInt = new List<int>();
while (true)
{//生成验证md5存储的位置
Random r = new Random();
List<int> rInt = new List<int>();
for (int i = 0; i < 4; i++)
{
rInt.Add(r.Next(15, 190));
}
for (int i = 0; i < rInt.Count(); i++)
{
for (int j = i; j < rInt.Count(); j++)
{
if (rInt[i] > rInt[j])
{
int temp = rInt[i];
rInt[i] = rInt[j];
rInt[j] = temp;
}
}
}
if (rInt[0] + 8 > rInt[1])
{
continue;
}
if (rInt[1] + 8 > rInt[2])
{
continue;
}
if (rInt[2] + 8 > rInt[3])
{
continue;
}
positionInt.Clear();
positionInt.AddRange(rInt);
break;
}
char[] Chars = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'R', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
StringBuilder sb = new StringBuilder();
Random rd = new Random();
for (int j = 0; j < 4; j++)
{
sb.Append(Chars[rd.Next(0, Chars.Length)]);
}
sb.Append(Convert.ToString(positionInt[0], 16));
sb.Append(Convert.ToString(positionInt[1], 16));
sb.Append(Convert.ToString(positionInt[2], 16));
sb.Append(Convert.ToString(positionInt[3], 16));
for (int j = 0; j < positionInt[0] - 12; j++)
{
sb.Append(Chars[rd.Next(0, Chars.Length)]);
}
sb.Append(md5Code[0].ToString());
for (int j = 0; j < positionInt[1] - positionInt[0] - 8; j++)
{
sb.Append(Chars[rd.Next(0, Chars.Length)]);
}
sb.Append(md5Code[1].ToString());
for (int j = 0; j < positionInt[2] - positionInt[1] - 8; j++)
{
sb.Append(Chars[rd.Next(0, Chars.Length)]);
}
sb.Append(md5Code[2].ToString());
for (int j = 0; j < positionInt[3] - positionInt[2] - 8; j++)
{
sb.Append(Chars[rd.Next(0, Chars.Length)]);
}
sb.Append(md5Code[3].ToString());
for (int j = 0; j < 200 - positionInt[3] - 8; j++)
{
sb.Append(Chars[rd.Next(0, Chars.Length)]);
}
return sb.ToString();
}
public void ZipFile(string strFile, string strZip)
{
var len = strFile.Length;
var strlen = strFile[len - 1];
if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
{
strFile += Path.DirectorySeparatorChar;
}
ZipOutputStream outstream = new ZipOutputStream(File.Create(strZip));
outstream.SetLevel(6);
zip(strFile, outstream, strFile);
outstream.Finish();
outstream.Close();
}
private void zip(string strFile, ZipOutputStream outstream, string staticFile)
{
if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
{
strFile += Path.DirectorySeparatorChar;
}
Crc32 crc = new Crc32();
//获取指定目录下所有文件和子目录文件名称
string[] filenames = Directory.GetFileSystemEntries(strFile);
//遍历文件
foreach (string file in filenames)
{
if (Directory.Exists(file))
{
zip(file, outstream, staticFile);
}
//否则,直接压缩文件
else
{
//打开文件
FileStream fs = File.OpenRead(file);
//定义缓存区对象
byte[] buffer = new byte[fs.Length];
//通过字符流,读取文件
fs.Read(buffer, 0, buffer.Length);
//得到目录下的文件(比如:D:\Debug1\test),test
string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
ZipEntry entry = new ZipEntry(tempfile);
entry.DateTime = DateTime.Now;
entry.Size = fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
outstream.PutNextEntry(entry);
//写文件
outstream.Write(buffer, 0, buffer.Length);
}
}
}
public bool unZipFile(string TargetFile, string fileDir, ref string msg)
{
string rootFile = "";
msg = "";
try
{
//读取压缩文件(zip文件),准备解压缩
ZipInputStream inputstream = new ZipInputStream(File.OpenRead(TargetFile.Trim()));
ZipEntry entry;
string path = fileDir;
//解压出来的文件保存路径
string rootDir = "";
//根目录下的第一个子文件夹的名称
while ((entry = inputstream.GetNextEntry()) != null)
{
rootDir = Path.GetDirectoryName(entry.Name);
//得到根目录下的第一级子文件夹的名称
if (rootDir.IndexOf("\\") >= 0)
{
rootDir = rootDir.Substring(0, rootDir.IndexOf("\\") + 1);
}
string dir = Path.GetDirectoryName(entry.Name);
//得到根目录下的第一级子文件夹下的子文件夹名称
string fileName = Path.GetFileName(entry.Name);
//根目录下的文件名称
if (dir != "")
{
//创建根目录下的子文件夹,不限制级别
if (!Directory.Exists(fileDir + "\\" + dir))
{
path = fileDir + "\\" + dir;
//在指定的路径创建文件夹
Directory.CreateDirectory(path);
}
}
else if (dir == "" && fileName != "")
{
//根目录下的文件
path = fileDir;
rootFile = fileName;
}
else if (dir != "" && fileName != "")
{
//根目录下的第一级子文件夹下的文件
if (dir.IndexOf("\\") > 0)
{
//指定文件保存路径
path = fileDir + "\\" + dir;
}
}
if (dir == rootDir)
{
//判断是不是需要保存在根目录下的文件
path = fileDir + "\\" + rootDir;
}
//以下为解压zip文件的基本步骤
//基本思路:遍历压缩文件里的所有文件,创建一个相同的文件
if (fileName != String.Empty)
{
FileStream fs = File.Create(path + "\\" + fileName);
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = inputstream.Read(data, 0, data.Length);
if (size > 0)
{
fs.Write(data, 0, size);
}
else
{
break;
}
}
fs.Close();
}
}
inputstream.Close();
msg = "解压成功!";
//return rootFile;
return true;
}
catch (Exception ex)
{
msg = "解压失败,原因:" + ex.Message;
//return "1;" + ex.Message;
return false;
}
}
}
public class ReturnJson
{
public bool bOK;
public string sMsg;
public Object m_ReturnOBJ;
}
ASP.NET服务与Go服务互通配置
ASP.NET框架端配置
ASP.NET 的配置文件web.config
P2P服务对应配置的WEB101
Go服务端的配置
Go端调用代码
/*调用ASP.NET函数*/
func (c *BaseJsonMode) AdminCallASPNET(ClassFullName, FunctionName, UserName string, m_Data interface{}) *ReturnJson {
m_ReturnJson := new(ReturnJson)
sToMarkKey := c.ASPMarkKey + "$" + c.MyNodeMarkKey
KeyString := c.MyNodeIP + UserName + sToMarkKey
fmt.Println(KeyString)
SendMarkKey := Share.GetMd5String(KeyString)
sUrl := c.ASPWebUrl + "/" + ClassFullName + "/" + FunctionName + ".p2p"
paramString := "sendmarkkey=" + SendMarkKey + "&username=" + UserName + "&fromservername=" + c.MyNodeName
if m_Data != nil {
paramString += "&" + m_Data.(string)
}
client := &http.Client{}
reqclient, err := http.NewRequest("POST", sUrl, strings.NewReader(paramString))
reqclient.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(reqclient)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
fmt.Println(string(body))
err = json.Unmarshal(body, m_ReturnJson)
if err != nil {
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = "反序列化失败"
return m_ReturnJson
} else {
return m_ReturnJson
}
}
func (c *BaseJsonMode) CallASPNET(ClassFullName, FunctionName string, m_SessionLink *SessionLink, m_Data interface{}) *ReturnJson {
UserName := ""
if m_SessionLink != nil {
UserName = m_SessionLink.Username
}
m_ReturnJson := new(ReturnJson)
sToMarkKey := c.ASPMarkKey + "$" + c.MyNodeMarkKey
KeyString := c.MyNodeIP + UserName + sToMarkKey
fmt.Println(KeyString)
SendMarkKey := Share.GetMd5String(KeyString)
sUrl := c.ASPWebUrl + "/" + ClassFullName + "/" + FunctionName + ".p2p"
paramString := "sendmarkkey=" + SendMarkKey + "&username=" + UserName + "&fromservername=" + c.MyNodeName
if m_Data != nil {
paramString += "&" + m_Data.(string)
}
client := &http.Client{}
reqclient, err := http.NewRequest("POST", sUrl, strings.NewReader(paramString))
reqclient.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(reqclient)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
fmt.Println(string(body))
err = json.Unmarshal(body, m_ReturnJson)
if err != nil {
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = "反序列化失败"
return m_ReturnJson
} else {
return m_ReturnJson
}
}
func (c *BaseJsonMode) AdminRunASPNETFunction(ClassFullName, FunctionName, UserName string, m_Data interface{}) *ReturnJson {
m_ReturnJson := new(ReturnJson)
sToMarkKey := c.ASPMarkKey + "$" + c.MyNodeMarkKey
KeyString := c.MyNodeIP + UserName + sToMarkKey
SendMarkKey := Share.GetMd5String(KeyString)
sUrl := c.ASPWebUrl + "/" + ClassFullName + "/" + FunctionName + ".p2p"
paramString := "sendmarkkey=" + SendMarkKey + "&username=" + UserName + "&fromservername=" + c.MyNodeName
if m_Data != nil {
paramString += "&" + m_Data.(string)
}
client := &http.Client{}
reqclient, err := http.NewRequest("POST", sUrl, strings.NewReader(paramString))
reqclient.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(reqclient)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
fmt.Println("body:", string(body))
err = json.Unmarshal(body, m_ReturnJson)
if err != nil {
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = "反序列化失败"
return m_ReturnJson
} else {
return m_ReturnJson
}
}
func (c *BaseJsonMode) RunASPNETFunction(ClassFullName, FunctionName string, m_SessioLink *SessionLink, m_Data interface{}) *ReturnJson {
UserName := ""
if m_SessioLink != nil {
UserName = m_SessioLink.Username
}
m_ReturnJson := new(ReturnJson)
sToMarkKey := c.ASPMarkKey + "$" + c.MyNodeMarkKey
KeyString := c.MyNodeIP + UserName + sToMarkKey
SendMarkKey := Share.GetMd5String(KeyString)
sUrl := c.ASPWebUrl + "/" + ClassFullName + "/" + FunctionName + ".p2p"
paramString := "sendmarkkey=" + SendMarkKey + "&username=" + UserName + "&fromservername=" + c.MyNodeName
if m_Data != nil {
paramString += "&" + m_Data.(string)
}
client := &http.Client{}
reqclient, err := http.NewRequest("POST", sUrl, strings.NewReader(paramString))
reqclient.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(reqclient)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = err.Error()
return m_ReturnJson
}
fmt.Println("body:", string(body))
err = json.Unmarshal(body, m_ReturnJson)
if err != nil {
m_ReturnJson.BOK = false
m_ReturnJson.SMsg = "反序列化失败"
return m_ReturnJson
} else {
return m_ReturnJson
}
}
func (c *BaseJsonMode) HaveASPPower(ClassName, FunctionName string, m_SessionLink *SessionLink) (bool, string) {
username := ""
if m_SessionLink != nil {
username = m_SessionLink.Username
}
var ss = "ClassName=" + ClassName + "&FunctionName=" + FunctionName
m_ReturnJson := c.AdminRunASPNETFunction("CoreSYS.SYS", "P22P_HavePower", username, ss)
fmt.Println(m_ReturnJson)
if m_ReturnJson.BOK {
m_HH := m_ReturnJson.M_ReturnOBJ.(map[string]interface{})
if m_HH != nil {
havepower, bOK := m_HH["havepower"]
if !bOK {
return false, "返回数据异常"
} else {
if havepower.(bool) {
return true, "有权限"
} else {
return false, "无权"
}
}
} else {
return false, "返回数据异常"
}
} else {
return false, "获得权限失败:" + m_ReturnJson.SMsg
}
return true, "有权限"
}
func (c *BaseJsonMode) AdminHaveASPPower(ClassName, FunctionName, username string) (bool, string) {
var ss = "ClassName=" + ClassName + "&FunctionName=" + FunctionName
m_ReturnJson := c.AdminRunASPNETFunction("CoreSYS.SYS", "P22P_HavePower", username, ss)
fmt.Println(m_ReturnJson)
if m_ReturnJson.BOK {
m_HH := m_ReturnJson.M_ReturnOBJ.(map[string]interface{})
if m_HH != nil {
havepower, bOK := m_HH["havepower"]
if !bOK {
return false, "返回数据异常"
} else {
if havepower.(bool) {
return true, "有权限"
} else {
return false, "无权"
}
}
} else {
return false, "返回数据异常"
}
} else {
return false, "获得权限失败:" + m_ReturnJson.SMsg
}
return true, "有权限"
}
购买客户端应用激活账户
/CoreSYS.SYS/buyMyAppAccountPage.aspx?appname=Aeaa_diy&apptype=diy
appname:应用名称
apptype:应用类型
客户端应用激活
/// <summary>
/// 授权激活验证 接口
/// </summary>
/// <param name="ctx">HttpContext</param>
/// <param name="m_Params">deviceid设备id,appname应用名称,reguser激活账户</param>
/// <returns></returns>
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson appregOffline(HttpContext ctx, Object m_Params)
{
ReturnJson m_ReturnJson = new ReturnJson();
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "授权激活验证失败";
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Params, m_HH);
if (!KeyIsOK(m_HH, "deviceid") || !KeyIsOK(m_HH, "appname") || !KeyIsOK(m_HH, "reguser"))
{
m_ReturnJson.sMsg = "授权激活验证失败:参数错误";
return m_ReturnJson;
}
string deviceid = m_HH["deviceid"].ToString();
string appname = m_HH["appname"].ToString();
string apptype="";
if (KeyIsOK(m_HH, "apptype"))
{
appname += "_" + m_HH["apptype"].ToString();
apptype=m_HH["apptype"].ToString();
}
if (KeyIsOK(m_HH, "appmark"))
{
appname += "_" + m_HH["appmark"].ToString();
}
string reguser = m_HH["reguser"].ToString();
string new_sys_offlineappreglogs_uuid = XNCoreNodeDB.createGlobalTimeUUID();
string sys_users_nodeuuid = "";
bool update = true, insert = false;
using (NodeDBEngine m_BaseDB = new NodeDBEngine())
{
try
{
m_BaseDB.SetDBKey(sDBKey, null);
bool bOK = false;
string activefunc = "",tradeclass="",sys_apps_uuid="";
bool issvrdeviceid = false;
{
string SQLString = "select activefunc ,tradecode,issvrdeviceid,sys_apps_uuid from sys_apps where appname=@appname";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarString("@appname", appname));
DataSet pSet = m_BaseDB.XNGetRecordVar(SQLString, out bOK, m_varList);
if(!bOK)
{
m_ReturnJson.sMsg = "查询客户端应用失败";
m_ReturnJson.bOK = false;
return m_ReturnJson;
}
if(pSet.Tables[0].Rows.Count==0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "未能查询到客户端应用";
return m_ReturnJson;
}
try
{
issvrdeviceid = Convert.ToBoolean(pSet.Tables[0].Rows[0]["issvrdeviceid"].ToString());
}
catch
{
issvrdeviceid = false;
}
sys_apps_uuid=pSet.Tables[0].Rows[0]["sys_apps_uuid"].ToString();
activefunc = pSet.Tables[0].Rows[0]["activefunc"].ToString();
string tradecode = pSet.Tables[0].Rows[0]["tradecode"].ToString();
SQLString = "select fullclassname from sys_trades where tradecode=@tradecode ";
m_varList.Clear();
m_varList.Add(NodeDBEngine.VarString("@tradecode", tradecode));
pSet = null;
pSet = m_BaseDB.XNGetRecordVar(SQLString, out bOK, m_varList);
if (!bOK)
{
m_ReturnJson.sMsg = "查讯行业应用失败";
m_ReturnJson.bOK = false;
return m_ReturnJson;
}
if (pSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "未能查询到行业应用";
return m_ReturnJson;
}
tradeclass = pSet.Tables[0].Rows[0]["fullclassname"].ToString();
}
string sqlStr = "select * from sys_offlineappregrecord where deviceid=@deviceid and appname=@appname and reguser=@reguser and devicecanchange=0";
Hashtable[] m_RecordArray = { NodeDBEngine.VarString("@deviceid", deviceid), NodeDBEngine.VarString("@appname", appname), NodeDBEngine.VarString("@reguser", reguser) };
DataTable dt = m_BaseDB.XNGetRecord(sqlStr, out bOK, m_RecordArray).Tables[0];
if (bOK)
{
if (dt.Rows.Count > 0)
{
m_ReturnJson.bOK = true;
Hashtable returndata=JsonHelper.JsonStrToOBJ<Hashtable>(dt.Rows[0]["returndata"].ToString());
sys_users_nodeuuid = dt.Rows[0]["sys_users_nodeuuid"].ToString();
string sys_companys_nodeuuid = dt.Rows[0]["sys_companys_nodeuuid"].ToString();
string sDBNO,TradeCode;
DateTime t;
NodeDBEngine.getIdInfo(sys_users_nodeuuid, out sDBNO, out TradeCode, out t);
string SQLString = "select apppic,pic,company,[expand],addusername from sys_companys where sys_companys_nodeuuid=@sys_companys_nodeuuid";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", sys_companys_nodeuuid));
DataSet pSet = m_BaseDB.XNGetRecordVar(SQLString, out bOK, m_varList);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "查询app头图片失败";
return m_ReturnJson;
}
string company = "", addusername = "";
returndata["sys_companys_nodeuuid"] = DecimaConvert.DecimalString2MinStr(sys_companys_nodeuuid);
if (pSet.Tables[0].Rows.Count > 0)
{
returndata["apppic"]= pSet.Tables[0].Rows[0]["apppic"].ToString();
returndata["logo"]= pSet.Tables[0].Rows[0]["pic"].ToString();
returndata["company"]=pSet.Tables[0].Rows[0]["company"].ToString();
company = pSet.Tables[0].Rows[0]["company"].ToString();
addusername = pSet.Tables[0].Rows[0]["addusername"].ToString();
}
returndata["dbno"] = sDBNO;
List<string> m_SQLList = new List<string>();
List<List<Hashtable>> m_varListList = new List<List<Hashtable>>();
sqlStr = "update sys_offlineappregrecord set devicecanchange=@devicecanchange,updatetime=@updatetime where deviceid=@deviceid and appname=@appname and reguser=@reguser";
//Hashtable[] updateArray = { NodeDBEngine.VarString("@deviceid", deviceid), NodeDBEngine.VarString("@appname", appname), NodeDBEngine.VarString("@reguser", reguser), NodeDBEngine.VarBool("@devicecanchange", false.ToString()), NodeDBEngine.VarDateTime("@updatetime", DateTime.Now.ToString()) };
m_SQLList.Add(sqlStr);
List<Hashtable> m_varList1 = new List<Hashtable>();
m_varList1.Add(NodeDBEngine.VarString("@deviceid", deviceid));
m_varList1.Add(NodeDBEngine.VarString("@appname", appname));
m_varList1.Add(NodeDBEngine.VarString("@reguser", reguser));
m_varList1.Add(NodeDBEngine.VarBool("@devicecanchange", false.ToString()));
m_varList1.Add(NodeDBEngine.VarDateTime("@updatetime", DateTime.Now.ToString()));
m_varListList.Add(m_varList1);
string sys_hards_nodeuuid = "";
{
if (issvrdeviceid)
{
string TSQLString = "select deviceid,sys_hards_nodeuuid,outmark from sys_hards where sys_companys_nodeuuid=@sys_companys_nodeuuid and sys_apps_uuid=@sys_apps_uuid and deviceid=@deviceid";
List<Hashtable> m_varListT = new List<Hashtable>();
m_varListT.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", sys_companys_nodeuuid));
m_varListT.Add(NodeDBEngine.VarDecimal("@sys_apps_uuid", sys_apps_uuid));
m_varListT.Add(NodeDBEngine.VarString("@deviceid", deviceid));
DataSet pTSet = m_BaseDB.XNGetRecordVar(TSQLString, out bOK, m_varListT);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "获得设备id失败";
return m_ReturnJson;
}
if (pTSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "设备id非法不能注册";
return m_ReturnJson;
}
sys_hards_nodeuuid = pTSet.Tables[0].Rows[0]["sys_hards_nodeuuid"].ToString();
if(apptype=="")
{
apptype = "android";
}
string bindnodeuuid = "", bindtablename = "";
if (!string.IsNullOrEmpty(activefunc))
{
string toutmark = pTSet.Tables[0].Rows[0]["outmark"].ToString();
if(!KeyIsOK(m_HH,"outmark"))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少outmark";
return m_ReturnJson;
}
if(toutmark!=m_HH["outmark"].ToString())
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "outmark验证失败";
return m_ReturnJson;
}
Object m_ReturnOBJ;
Hashtable m_inHH = new Hashtable();
JsonHelper.OBJToHashTable(m_Params, m_inHH);
m_inHH["apppname"] = appname;
m_inHH["deviceid"] = deviceid;
m_inHH["reguser"] = reguser;
m_inHH["sys_users_nodeuuid"] = sys_users_nodeuuid;
m_inHH["sys_companys_nodeuuid"] = sys_companys_nodeuuid;
m_inHH["apptype"] = apptype;
m_inHH["sys_apps_uuid"] = sys_apps_uuid;
m_inHH["reactive"] = true;
m_inHH["sys_hards_nodeuuid"] = sys_hards_nodeuuid;
if (!RunShareFunction(null, tradeclass, activefunc, out m_ReturnOBJ, m_inHH))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用激活绑定函数失败";
return m_ReturnJson;
}
else
{
ReturnJson m_TReturnJson = (ReturnJson)m_ReturnOBJ;
if (!m_TReturnJson.bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = m_TReturnJson.sMsg;
return m_ReturnJson;
}
else
{
Hashtable m_ReturnHH = (Hashtable)JsonHelper.OBJToType<Hashtable>(m_TReturnJson.m_ReturnOBJ);
bindnodeuuid = m_ReturnHH["bindnodeuuid"].ToString();
bindtablename = m_ReturnHH["bindtablename"].ToString();
}
}
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少激活绑定函数";
return m_ReturnJson;
}
TSQLString = "update sys_hards set isbind=1,devtype=@devtype,bindtablename=@bindtablename,bindnodeuuid=@bindnodeuuid where sys_hards_nodeuuid=@sys_hards_nodeuuid";
List<Hashtable> m_varList2 = new List<Hashtable>();
m_varList2.Add(NodeDBEngine.VarDecimal("@sys_hards_nodeuuid", sys_hards_nodeuuid));
m_varList2.Add(NodeDBEngine.VarString("@devtype", apptype));
m_varList2.Add(NodeDBEngine.VarString("@bindtablename", bindtablename));
m_varList2.Add(NodeDBEngine.VarDecimal("@bindnodeuuid", bindnodeuuid));
m_varListList.Add(m_varList2);
m_SQLList.Add(TSQLString);
}
}
List<int> m_nActCntList;
bOK = m_BaseDB.XNActSQLVar(m_SQLList, out m_nActCntList, m_varListList);
//if (nActCnt <= 0)
if (!bOK)
{
m_ReturnJson.sMsg = "激活失败";
m_ReturnJson.bOK = false;
m_ReturnJson.m_ReturnOBJ = null;
return m_ReturnJson;
}
switch (apptype)
{
case "diy":
{
if (returndata.ContainsKey("code"))
{
returndata.Remove("code");
}
if (returndata.ContainsKey("ActivationCode"))
{
returndata.Remove("ActivationCode");
}
if (returndata.ContainsKey("dbno"))
{
returndata.Remove("dbno");
}
if (returndata.ContainsKey("admin"))
{
returndata.Remove("admin");
}
if (returndata.ContainsKey("pwd"))
{
returndata.Remove("pwd");
}
if (returndata.ContainsKey("express"))
{
returndata.Remove("express");
}
}
break;
}
m_ReturnJson.m_ReturnOBJ = returndata;
}
else
{
sqlStr = "select * from sys_offlineappregrecord where appname=@appname and reguser=@reguser and devicecanchange=1";
Hashtable[] m_RecordArray1 = { NodeDBEngine.VarString("@appname", appname), NodeDBEngine.VarString("@reguser", reguser) };
DataTable dt1 = m_BaseDB.XNGetRecord(sqlStr, out bOK, m_RecordArray1).Tables[0];
if (bOK)
{
if (dt1.Rows.Count <= 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "授权激活验证失败:未找到授权信息";
return m_ReturnJson;
}
else
{
sys_users_nodeuuid = dt1.Rows[0]["sys_users_nodeuuid"].ToString();
string sDBNO, TradeCode;
DateTime t;
NodeDBEngine.getIdInfo(sys_users_nodeuuid, out sDBNO, out TradeCode, out t);
string returndataString = dt1.Rows[0]["returndata"].ToString();
string sys_companys_nodeuuid = dt1.Rows[0]["sys_companys_nodeuuid"].ToString();
string SQLString = "select apppic,pic,company,[expand],addusername from sys_companys where sys_companys_nodeuuid=@sys_companys_nodeuuid";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", sys_companys_nodeuuid));
DataSet pSet = m_BaseDB.XNGetRecordVar(SQLString, out bOK, m_varList);
Hashtable returndata =JsonHelper.JsonStrToOBJ<Hashtable>(returndataString);
if(returndata==null)
{
returndata = new Hashtable();
}
if(!returndata.ContainsKey("limittype"))
{
}
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "查询app头图片失败";
return m_ReturnJson;
}
string company = "", addusername = "";
returndata["sys_companys_nodeuuid"] = DecimaConvert.DecimalString2MinStr(sys_companys_nodeuuid);
if (pSet.Tables[0].Rows.Count > 0)
{
returndata["apppic"]= pSet.Tables[0].Rows[0]["apppic"].ToString();
returndata["logo"]= pSet.Tables[0].Rows[0]["pic"].ToString();
returndata["company"] = pSet.Tables[0].Rows[0]["company"].ToString();
company = pSet.Tables[0].Rows[0]["company"].ToString();
addusername = pSet.Tables[0].Rows[0]["addusername"].ToString();
}
returndata["dbno"] = sDBNO;
returndata["admin"]= "admin";
returndata["pwd"]= "12345678";
returndata["expression"]= CreateExpression();
//JsonHelper.JsonToHashtable(dt1.Rows[0]["returndata"].ToString(), returndata);
if (returndata.ContainsKey("ActivationCode"))
{
returndata.Remove("ActivationCode");
}
string limittype="none";
string limitdata="";
if (returndata.ContainsKey("limittype"))
{
limittype = returndata["limittype"].ToString();
}
switch(limittype)
{
case "cnt":
{
limitdata = returndata["limitnum"].ToString();
}
break;
case "date":
{
limitdata = returndata["limitdate"].ToString();
}
break;
}
returndata.Add("ActivationCode", getActivationCode(deviceid));
string uid = DecimaConvert.DecimalString2MinStr(sys_users_nodeuuid);
m_ReturnJson.bOK = true;
m_ReturnJson.m_ReturnOBJ = returndata;
List<string> m_SQLList = new List<string>();
List<List<Hashtable>> m_varListList = new List<List<Hashtable>>();
string updateSqlStr = "update sys_offlineappregrecord set deviceid=@deviceid,devicecanchange=@devicecanchange,returndata=@returndata,updatetime=@updatetime where sys_offlineappregrecord_uuid=@sys_offlineappregrecord_uuid";
//Hashtable[] updateArray = { NodeDBEngine.VarString("@deviceid", deviceid), NodeDBEngine.VarBool("@devicecanchange", (!m_ReturnJson.bOK).ToString()), NodeDBEngine.VarString("@returndata", JsonHelper.OBJToJsonStr(returndata)), NodeDBEngine.VarDateTime("@updatetime", DateTime.Now.ToString()), NodeDBEngine.VarString("@sys_offlineappregrecord_uuid", dt1.Rows[0]["sys_offlineappregrecord_uuid"].ToString()) };
m_SQLList.Add(updateSqlStr);
List<Hashtable> m_varList1 = new List<Hashtable>();
m_varList1.Add(NodeDBEngine.VarString("@deviceid", deviceid));
m_varList1.Add(NodeDBEngine.VarBool("@devicecanchange", (!m_ReturnJson.bOK).ToString()));
m_varList1.Add(NodeDBEngine.VarDateTime("@updatetime", DateTime.Now.ToString()));
m_varList1.Add(NodeDBEngine.VarString("@sys_offlineappregrecord_uuid", dt1.Rows[0]["sys_offlineappregrecord_uuid"].ToString()));
m_varListList.Add(m_varList1);
string sys_hards_nodeuuid = "";
if (issvrdeviceid)
{
string TSQLString = "select deviceid,sys_hards_nodeuuid from sys_hards where sys_companys_nodeuuid=@sys_companys_nodeuuid and sys_apps_uuid=@sys_apps_uuid and deviceid=@deviceid";
List<Hashtable> m_varListT = new List<Hashtable>();
m_varListT.Add(NodeDBEngine.VarDecimal("@sys_companys_nodeuuid", sys_companys_nodeuuid));
m_varListT.Add(NodeDBEngine.VarDecimal("@sys_apps_uuid", sys_apps_uuid));
m_varListT.Add(NodeDBEngine.VarString("@deviceid", deviceid));
DataSet pTSet = m_BaseDB.XNGetRecordVar(TSQLString, out bOK, m_varListT);
if (!bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "获得设备id失败";
return m_ReturnJson;
}
if (pTSet.Tables[0].Rows.Count == 0)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "设备id非法不能注册";
return m_ReturnJson;
}
sys_hards_nodeuuid = pTSet.Tables[0].Rows[0]["sys_hards_nodeuuid"].ToString();
if (apptype == "")
{
apptype = "android";
}
string bindnodeuuid = "", bindtablename = "";
if (!string.IsNullOrEmpty(activefunc))
{
Object m_ReturnOBJ;
Hashtable m_inHH = new Hashtable();
JsonHelper.OBJToHashTable(m_Params, m_inHH);
m_inHH["apppname"] = appname;
m_inHH["deviceid"] = deviceid;
m_inHH["reguser"] = reguser;
m_inHH["sys_users_nodeuuid"] = sys_users_nodeuuid;
m_inHH["sys_companys_nodeuuid"] = sys_companys_nodeuuid;
m_inHH["apptype"] = apptype;
m_inHH["sys_apps_uuid"] = sys_apps_uuid;
m_inHH["sys_hards_nodeuuid"] = sys_hards_nodeuuid;
if (!RunShareFunction(null, tradeclass, activefunc, out m_ReturnOBJ, m_inHH))
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用激活绑定函数失败";
return m_ReturnJson;
}
else
{
ReturnJson m_TReturnJson = (ReturnJson)m_ReturnOBJ;
if (!m_TReturnJson.bOK)
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = m_TReturnJson.sMsg;
return m_ReturnJson;
}
else
{
Hashtable m_ReturnHH = (Hashtable)JsonHelper.OBJToType<Hashtable>(m_TReturnJson.m_ReturnOBJ);
bindnodeuuid = m_ReturnHH["bindnodeuuid"].ToString();
bindtablename = m_ReturnHH["bindtablename"].ToString();
}
}
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "缺少激活绑定函数";
return m_ReturnJson;
}
string outmark = System.Guid.NewGuid().ToString("N");
if (apptype == "diy")
{
returndata["outmark"] = outmark;
}
returndata["code"] = GetCode(appname, deviceid, limittype, limitdata, uid, outmark);
TSQLString = "update sys_hards set isbind=1,devtype=@devtype,bindtablename=@bindtablename,bindnodeuuid=@bindnodeuuid,outmark=@outmark where sys_hards_nodeuuid=@sys_hards_nodeuuid";
List<Hashtable> m_varList2 = new List<Hashtable>();
m_varList2.Add(NodeDBEngine.VarDecimal("@sys_hards_nodeuuid", sys_hards_nodeuuid));
m_varList2.Add(NodeDBEngine.VarString("@devtype", apptype));
m_varList2.Add(NodeDBEngine.VarString("@bindtablename", bindtablename));
m_varList2.Add(NodeDBEngine.VarDecimal("@bindnodeuuid", bindnodeuuid));
m_varList2.Add(NodeDBEngine.VarString("@outmark", outmark));
m_varListList.Add(m_varList2);
m_SQLList.Add(TSQLString);
}
m_varList1.Add(NodeDBEngine.VarString("@returndata", JsonHelper.OBJToJsonStr(returndata)));
List<int> m_nActCntList;
bOK = m_BaseDB.XNActSQLVar(m_SQLList, out m_nActCntList, m_varListList);
if (!bOK)
{
m_ReturnJson.sMsg = "激活失败";
m_ReturnJson.bOK = false;
m_ReturnJson.m_ReturnOBJ = null;
update = false;
return m_ReturnJson;
}
else
{
switch(apptype)
{
case "diy":
{
if(returndata.ContainsKey("code"))
{
returndata.Remove("code");
}
if (returndata.ContainsKey("ActivationCode"))
{
returndata.Remove("ActivationCode");
}
if (returndata.ContainsKey("dbno"))
{
returndata.Remove("dbno");
}
if (returndata.ContainsKey("admin"))
{
returndata.Remove("admin");
}
if (returndata.ContainsKey("pwd"))
{
returndata.Remove("pwd");
}
if (returndata.ContainsKey("express"))
{
returndata.Remove("express");
}
}
break;
}
}
}
}
}
}
string InsertSqlStr = " insert into sys_offlineappreglogs (sys_offlineappreglogs_uuid,sys_users_nodeuuid,appname,bok,createtime,deviceid,reguser,errormsg) values(@sys_offlineappreglogs_uuid,@sys_users_nodeuuid,@appname,@bok,@createtime,@deviceid,@reguser,@errormsg)";
Hashtable[] insertArray = { NodeDBEngine.VarDecimal("@sys_offlineappreglogs_uuid", new_sys_offlineappreglogs_uuid), NodeDBEngine.VarDecimal("@sys_users_nodeuuid", sys_users_nodeuuid), NodeDBEngine.VarString("@appname", appname), NodeDBEngine.VarBool("@bok", m_ReturnJson.bOK.ToString()), NodeDBEngine.VarDateTime("@createtime", DateTime.Now.ToString()), NodeDBEngine.VarString("@deviceid", deviceid), NodeDBEngine.VarString("@reguser", reguser), NodeDBEngine.VarString("@errormsg", m_ReturnJson.bOK ? "" : m_ReturnJson.sMsg) };
int nActCnt1;
bOK = m_BaseDB.XNActSQLVar(InsertSqlStr, out nActCnt1, insertArray);
if (nActCnt1 > 0)
{
insert = true;
}
else
{
m_ReturnJson.sMsg = "记录激活日志失败: 记录出错";
insert = false;
}
if (update && insert && m_ReturnJson.bOK)
{
m_ReturnJson.sMsg = "授权激活验证成功";
m_ReturnJson.bOK = true;
}
else
{
m_ReturnJson.bOK = false;
}
}
catch (Exception e)
{
WriteLog(e.ToString());
m_ReturnJson.sMsg = "授权激活验证失败:操作失败";
}
}
return m_ReturnJson;
}
APP登录访问函数调用
例子代码:
app登录代码
当web.config配置为
<add key="客户端通讯加密" value="true" />
登录:
string LGKey = "";
string rand = "";
string appkey = "";
string url = "http://www.1xn1.com";
private void button18_Click(object sender, EventArgs e)
{
XNWindowHttpClient m_XNWindowHttpClient = new XNWindowHttpClient();
bool bOK;
Hashtable m_HH = new Hashtable();
m_HH["appid"] = "hello7566";
string sData = JsonHelper.OBJToJsonStr(m_HH);
//url = "http://localhost:3664";
sData = m_XNWindowHttpClient.PostJson(url+"/CoreSYS.SYS/app_Hander.app", sData, out bOK);
Hashtable m_ReturnJson = new Hashtable();
JsonHelper.JsonToHashtable(sData, m_ReturnJson);
if((bool)m_ReturnJson["bOK"])
{
Hashtable m_ReturnOBJHH = (Hashtable)m_ReturnJson["m_ReturnOBJ"];
appkey = m_ReturnOBJHH["appkey"].ToString();
rand = m_ReturnOBJHH["rand"].ToString();
rand=RESJavaHelper.PublicKeyStringDecrypt(publicString, rand);
Hashtable m_ParameHH = new Hashtable();
m_ParameHH["username"] = "hi";
m_ParameHH["password"] = "123";
m_XNWindowHttpClient.ClearPostHeader();
m_XNWindowHttpClient.AddHeader("appkey", appkey);
string sText=JsonHelper.OBJToJsonStr(m_ParameHH);
sData=AESJavaASPDotNet.EncodeAES(sText, rand, "1234567890abcdef");
sData=m_XNWindowHttpClient.PostJson(url+"/CoreSYS.SYS/LoginApp.app", sData, out bOK);
m_ReturnJson = JsonHelper.JsonStrToOBJ<Hashtable>(sData);
if ((bool)m_ReturnJson["bOK"])
{
m_ReturnOBJHH = JsonHelper.OBJToType<Hashtable>(m_ReturnJson["m_ReturnOBJ"]);
Hashtable m_UserInfoHH = JsonHelper.OBJToType<Hashtable>(m_ReturnOBJHH["m_UserInfo"]);
LGKey = m_UserInfoHH["LGKey"].ToString();
MessageBox.Show("登录成功:" + LGKey);
}
else
{
MessageBox.Show("登录失败");
}
}
else
{
MessageBox.Show(m_ReturnJson["sMsg"].ToString());
}
}
调用:
XNWindowHttpClient m_XNWindowHttpClient = new XNWindowHttpClient();
bool bOK;
Hashtable m_HHH = new Hashtable();
m_HHH["中华"] = "中华";
m_HHH["LGKey"] = LGKey;
string sText = JsonHelper.OBJToJsonStr(m_HHH);
m_XNWindowHttpClient.ClearPostHeader();
m_XNWindowHttpClient.AddHeader("appkey", appkey);
string sData = AESJavaASPDotNet.EncodeAES(sText, rand, "1234567890abcdef");
sData = m_XNWindowHttpClient.PostJson(url + "/PY/HelloAPP.app", sData, out bOK);
MessageBox.Show(sData);
激活独立部署平台注意(激活目前针对的是2020虚拟主机迷你服务器)
购买独立部署激活码,查看独立部署平台
查看独立平台列表
配置独立部署行业的需要费用
激活配置
查看激活码
独立部署系统激活
客户端模块使用
客户端模块的管理
角色绑定客户端模块
函数的调用
1.登录
参数
username:
password:
请求地址
/CoreSYS.SYS/LGKeyLoginEX.ajax
返回
m_UserInfo.LGKey
2.获得本地模块
参数
LGKey:
opsystem:windows
language:VC
请求地址
/CoreSYS.SYS/GetMyLocalMode.ajax
返回
模块名数组
3.开始加载模块
参数
LGKey:
opsystem:windows
language:VC
modename:
请求地址
/CoreSYS.SYS/DownLocalMode.ajax
返回
数组
[0].mainzip
[0].pic
[0].staydays
依赖数组 [0].depands
[0].depands[i].extendpath
[0].depands[i].filename
[0].depands[i].fileurl
[0].depands[i].installpath
VC登录并获得客户端模块实例代码
void LoginDlg::Login()
{
HANDLE hParameJson=CreateJson();
AddOneStr(hParameJson,"username",(char *)(const char *)m_UserName);
AddOneStr(hParameJson,"password",(char *)(const char *)m_PassWord);
HANDLE hOutParameJson;
CString sMsg;
int nPos,k,m;
bNETOK=false;
if(XNFrameNETCall::RunFunction("CoreSYS.SYS","LGKeyLoginEX",hParameJson,sMsg,hOutParameJson))
{
bNETOK=true;
m_TiShi.SetWindowText("开始获得本地模块");
//CString TStr=MFCJsonToText(hOutParameJson);
//AfxMessageBox(TStr);
CString sName,sValue,sType;
sName="m_UserInfo.LGKey";
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
m_NETFrame.LGKey=sValue;
CloseJson(hOutParameJson);
hParameJson=CreateJson();
AddOneStr(hParameJson,"LGKey",(char *)(const char *)m_NETFrame.LGKey);
AddOneStr(hParameJson,"opsystem","windows");
AddOneStr(hParameJson,"language","VC");
if(XNFrameNETCall::RunFunction("CoreSYS.SYS","GetMyLocalMode",hParameJson,sMsg,hOutParameJson))
{
CString TStr=MFCJsonToText(hOutParameJson);
//AfxMessageBox(TStr);
int iSize=GetJsonArraySize(hOutParameJson,"");
m_TiShi.SetWindowText("开始加载本地模块...");
CStringArray m_ModeArray;
int i;
for(i=0;i<iSize;i++)
{
sName.Format("[%d]",i);
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
//m_TiShi.SetWindowText("开始加载模块:"+sValue+"...");
m_ModeArray.Add(sValue);
}
}
CloseJson(hOutParameJson);
hOutParameJson=NULL;
for(i=0;i<m_ModeArray.GetSize();i++)
{
m_TiShi.SetWindowText("开始加载模块:"+m_ModeArray.GetAt(i)+"...");
hParameJson=CreateJson();
AddOneStr(hParameJson,"LGKey",(char *)(const char *)m_NETFrame.LGKey);
AddOneStr(hParameJson,"opsystem","windows");
AddOneStr(hParameJson,"language","VC");
AddOneStr(hParameJson,"modename",(char *)(const char *)m_ModeArray.GetAt(i));
if(XNFrameNETCall::RunFunction("CoreSYS.SYS","DownLocalMode",hParameJson,sMsg,hOutParameJson))
{
TStr=MFCJsonToText(hOutParameJson);
//AfxMessageBox(TStr);
iSize=GetJsonArraySize(hOutParameJson,"");
if(iSize==0)
{
continue;
}
CHttpClient m_HttpClient;
sName="[0].mainzip";
CString mainzip="",pic="",staydays="0";
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
mainzip=sValue;
}
sName="[0].pic";
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
pic=sValue;
}
sName="[0].staydays";
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
staydays=sValue;
}
iSize=GetJsonArraySize(hOutParameJson,"[0].depands");
CPtrList m_DepandPtr;
for(k=0;k<iSize;k++)
{
OneDepand *pOneDepand=new OneDepand();
sName.Format("[0].depands[%d].extendpath",k);
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
pOneDepand->extendpath=sValue;
}
sName.Format("[0].depands[%d].filename",k);
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
pOneDepand->filename=sValue;
}
sName.Format("[0].depands[%d].fileurl",k);
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
pOneDepand->fileurl=sValue;
}
sName.Format("[0].depands[%d].installpath",k);
if(GetMFCJsonVar(hOutParameJson,sName,sValue,sType))
{
pOneDepand->installpath=sValue;
}
m_DepandPtr.AddTail(pOneDepand);
}
/*开始处理depands*/
bool bContinue=false;
for(k=0;k<m_DepandPtr.GetCount();k++)
{
OneDepand *pOneDepand=(OneDepand *)m_DepandPtr.GetAt(m_DepandPtr.FindIndex(k));
pOneDepand->filename.MakeLower();
if(pOneDepand->filename.Find(".zip")!=-1)
{
CString DownFileZip=EXEPath+"DownFile\\"+pOneDepand->filename;
if(!m_HttpClient.DownFile(pOneDepand->fileurl,DownFileZip))
{
bContinue=true;
break;
}
CString unZipPath="";
if(pOneDepand->installpath=="app")
{
unZipPath=EXEPath;
if(pOneDepand->extendpath!="")
{
unZipPath+=pOneDepand->extendpath;
}
}
else
{
if(pOneDepand->installpath=="install")
{
unZipPath=EXEPath+"LocalMode\\"+m_ModeArray.GetAt(i);
if(pOneDepand->extendpath!="")
{
unZipPath+="\\"+pOneDepand->extendpath;
}
}
else
{
if(pOneDepand->installpath=="system")
{
char Buffer[MAX_PATH];
GetWindowsDirectory(Buffer,MAX_PATH);
unZipPath.Format("%s\\system32",Buffer);
}
else
{
}
}
}
if(unZipPath!="")
{
FilesFromZip((char *)(const char *)DownFileZip,(char *)(const char *)unZipPath);
}
::DeleteFile((char *)(const char *)DownFileZip);
}
else
{
CString sDownFile="";
CStringArray m_VarSpliteArray;
if(pOneDepand->installpath=="app")
{
sDownFile=EXEPath;
}
else
{
if(pOneDepand->installpath=="install")
{
sDownFile=EXEPath+"LocalMode\\"+m_ModeArray.GetAt(i);
try
{
::CreateDirectory((char *)(const char *)sDownFile,NULL);
}
catch(CException * e)
{
}
sDownFile+="\\";
}
else
{
if(pOneDepand->installpath=="system")
{
char Buffer[MAX_PATH];
GetWindowsDirectory(Buffer,MAX_PATH);
sDownFile.Format("%s\\system32\\",Buffer);
}
else
{
}
}
}
if(pOneDepand->extendpath!="")
{
SplitString((char *)(const char *)pOneDepand->extendpath,"\\",m_VarSpliteArray);
for(m=0;m<m_VarSpliteArray.GetSize();m++)
{
sDownFile+=m_VarSpliteArray.GetAt(m);
try
{
::CreateDirectory((char *)(const char *)sDownFile,NULL);
}
catch(CException * e)
{
}
sDownFile+="\\";
}
sDownFile+=pOneDepand->filename;
}
else
{
sDownFile+=pOneDepand->filename;
}
if(!m_HttpClient.DownFile(pOneDepand->fileurl,sDownFile))
{
bContinue=true;
break;
}
}
delete pOneDepand;
}
if(bContinue)
{
ClearPTR(m_DepandPtr,k);
continue;
}
m_DepandPtr.RemoveAll();
if(hOutParameJson!=NULL)
{
CloseJson(hOutParameJson);
hOutParameJson=NULL;
}
if(mainzip!="")
{
CString DownMainZip=m_ModeArray.GetAt(i)+".zip";//mainzip.Mid(nPos+1);
DownMainZip=EXEPath+"DownFile\\"+DownMainZip;
if(!m_HttpClient.DownFile(mainzip,DownMainZip))
{
continue;
}
CString MainUnZipPath=EXEPath+"LocalMode";
FilesFromZip((char *)(const char *)DownMainZip,(char *)(const char *)MainUnZipPath);
::DeleteFile((char *)(const char *)DownMainZip);
}
int nMemL;
CURLEncode m_URLEncode;
CString sName;
sName=CHttpClient::ConverToUTF8(m_ModeArray.GetAt(i));
m_URLEncode.URLEncode(sName,sName);
CString Url=m_NETFrame.m_Config.Url+"/CoreSYS.SYS/DownLocalModeMain.ajax?opsystem=windows&language=VC&modename="+sName+"&LGKey="+m_NETFrame.LGKey;
BYTE *pData=m_HttpClient.GetMemUrlFile((char *)(const char *)Url,1024*10,nMemL);
if(pData==NULL)
{
continue;
}
BYTE *pOutData=(BYTE *)GlobalAlloc(GPTR,nMemL);
for(int j=0;j<nMemL;j++)
{
pOutData[j]=pData[nMemL-j-1];
}
GlobalFree(pData);
BYTE *pDLLData=new BYTE[nMemL*15];
int nDLLLength;
UnCompressMem(pOutData,nMemL,pDLLData,nDLLLength);
OneModeDLL *pOneModeDLL=new OneModeDLL();
pOneModeDLL->ModeName=m_ModeArray.GetAt(i);
pOneModeDLL->pDLLData=pDLLData;
pOneModeDLL->nDataLength=nDLLLength;
pOneModeDLL->staydays=atoi(staydays);
m_AllDLLPtr.AddTail(pOneModeDLL);
//AfxMessageBox("ok");
// TStr=MFCJsonToText(hOutParameJson);
// AfxMessageBox(TStr);
}
else
{
//AfxMessageBox(sMsg);
}
}
GetDlgItem(IDLG)->EnableWindow(true);
CDialog::OnOK();
return;
}
else
{
m_TiShi.SetWindowText("");
MessageBox(sMsg,"提示",MB_OK|MB_ICONSTOP);
}
}
else
{
CloseJson(hOutParameJson);
}
}
else
{
m_TiShi.SetWindowText("");
if(sMsg=="连接错误" || sMsg=="数据格式错误" ||sMsg=="客户端缓存")
{
CFile MyFile;
if(MyFile.Open(EXEPath+"cache\\frame.cache",CFile::modeRead))
{
int nL=MyFile.GetLength();
BYTE *pFileData=(BYTE *)GlobalAlloc(GPTR,nL);
MyFile.ReadHuge(pFileData,nL);
MyFile.Close();
BYTE *pZipData=(BYTE *)GlobalAlloc(GPTR,nL);
for(k=0;k<nL;k++)
{
pZipData[k]=pFileData[nL-k-1];
}
pCacheData=(BYTE *)GlobalAlloc(GPTR,nL*15);
int nOutL;
if(UnCompressMem(pZipData,nL,pCacheData,nOutL))
{
GlobalFree(pFileData);
GlobalFree(pZipData);
int nIndex=0;
int nCnt=pCacheData[nIndex];
nIndex+=1;
CString TUserName,TPassWord;
TUserName.Format("%s",pCacheData+nIndex);
nIndex+=20;
TPassWord.Format("%s",pCacheData+nIndex);
nIndex+=20;
//printf("username:%s,password:%s\r\n",(char *)(const char *)TUserName,(char *)(const char *)TPassWord);
TUserName.MakeLower();
TPassWord.MakeLower();
m_UserName.MakeLower();
m_PassWord.MakeLower();
if(m_UserName==TUserName && m_PassWord==TPassWord)
{
for(k=0;k<nCnt;k++)
{
char name[50];
memset(name,0,50);
int nDataL;
char ymd[9];
memset(ymd,0,9);
memcpy(name,pCacheData+nIndex,50);
nIndex+=50;
memcpy(&nDataL,pCacheData+nIndex,sizeof(int));
nIndex+=sizeof(int);
memcpy(ymd,pCacheData+nIndex,8);
nIndex+=8;
CString sTime;
sTime.Format("%s",ymd);
CString sYear,sMonth,sDay;
sYear=sTime.Mid(0,4);
sMonth=sTime.Mid(4,2);
sDay=sTime.Mid(6,2);
CTime tTime(atoi(sYear),atoi(sMonth),atoi(sDay),0,0,0);
if(CTime::GetCurrentTime()<tTime)
{
CTime tNow=CTime::GetCurrentTime();
CTime ttTime=CTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),0,0,0);
OneModeDLL *pOneModeDLL=new OneModeDLL();
pOneModeDLL->ModeName.Format("%s",name);
pOneModeDLL->nDataLength=nDataL;
pOneModeDLL->staydays=(tTime-ttTime).GetDays();
pOneModeDLL->pDLLData=pCacheData+nIndex;
pOneModeDLL->nDataLength=nDataL;
m_AllDLLPtr.AddTail(pOneModeDLL);
}
nIndex+=nDataL;
}
GetDlgItem(IDLG)->EnableWindow(true);
CDialog::OnOK();
return;
}
}
else
{
GlobalFree(pFileData);
GlobalFree(pZipData);
GlobalFree(pCacheData);
pCacheData=NULL;
}
}
}
MessageBox(sMsg,"提示",MB_OK|MB_ICONSTOP);
}
KillTimer(0x100);
GetDlgItem(IDLG)->EnableWindow(true);
}
关于SAAS服务的配置和使用
关于SAAS服务的配置和使用
系统SAAS是否与普通SAAS处理一致,默认是处理一致,如要和普通SAAS处理差别,当真正的平台级SAAS处理那么需要配置web.config
<add key="系统SAAS开启" value="true" />,当设置为TRUE除收款是由微信主站配置的支付信息收款,其他处理一致
获得SAAS套餐
/CoreSYS.SYS/GetSaaSServiceMoney.ajax
支付实际到账为
1.生成订单前函数
/CoreSYS.SYS/共享方法_PreSAASBuy.ajax
功能:
获得套餐信息,生成支付必须参数
参数:
sys_saaspowersneedmoney_uuid:SAAS套餐类型
返回:
Hashtable m_ReturnHH = new Hashtable();
m_ReturnHH["title"] = "购买SAAS服务";
m_ReturnHH["pic"] = "/public/images/paypic.jpg";
m_ReturnHH["itemtitle"] = "套餐金额";
m_ReturnHH["itemtips"] = "请输入套餐金额";
m_ReturnHH["money"] = needmoney;
m_ReturnHH["sys_saaspowersneedmoney_uuid"] = sys_saaspowersneedmoney_uuid;
m_ReturnHH["ok"] = "点击购买";
m_ReturnHH["createorderClassName"] = "CoreSYS.SYS";
m_ReturnHH["createorderFunctionName"] = "CreateSAASOrder";//生成SAAS订单函数
m_ReturnHH["orderpayClassName"] = "CoreSYS.SYS";
m_ReturnHH["orderpayFunction"] = "SAASOrderPay";//支付SAAS订单函数
m_ReturnHH["moneymemo"] = moneymemo;
2.调用生成SAAS订单函数
/CoreSYS.SYS/CreateSAASOrder.ajax
功能:
生成SAAS支付订单
参数
m_ReturnHH["title"] = "购买SAAS服务";
m_ReturnHH["pic"] = "/public/images/paypic.jpg";
m_ReturnHH["itemtitle"] = "套餐金额";
m_ReturnHH["itemtips"] = "请输入套餐金额";
m_ReturnHH["money"] = needmoney;
m_ReturnHH["sys_saaspowersneedmoney_uuid"] = sys_saaspowersneedmoney_uuid;
m_ReturnHH["ok"] = "点击购买";
m_ReturnHH["createorderClassName"] = "CoreSYS.SYS";
m_ReturnHH["createorderFunctionName"] = "CreateSAASOrder";
m_ReturnHH["orderpayClassName"] = "CoreSYS.SYS";
m_ReturnHH["orderpayFunction"] = "SAASOrderPay";
m_ReturnHH["moneymemo"] = moneymemo;
m_ReturnHH["buycnt"] = buycnt;//购买
返回:
插入数据进表:sys_accountsitesaasmoney,sys_myaccountsitesaasmoney
Hashtable m_ReturnHH = new Hashtable();
m_ReturnHH["money"] = money;
m_ReturnHH["nodeuuidvalue"] = sys_accountsitesaasoney_nodeuuid;
m_ReturnHH["nodeuuidname"] = "sys_accountsitesaasmoney_nodeuuid";
m_ReturnHH["pic"] = "/public/images/paypic.jpg";
3.调用支付SAAS订单函数
/CoreSYS.SYS/SAASOrderPay.ajax
功能:
支付SAAS订单
参数:
paytype:支付类型
sys_accountsitesaasmoney_nodeuuid:SAAS购买记录
SQL直入调用
使用SQLSdk 开发包
类P2P方式调用
static public void InitNET(string url, string myp2pname, string top2pname, string mymarkkey, string tomarkkey, bool bReturnJM = false)
NETSQL.InitNET("http://www.1xn1.com", "FW002", "WEB101", "1123", "515",true);
string SQLString = "select * from sys_users where username like @username order by createtime desc";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(VarClass.VarString("@username", "%xn%"));
bool bOK;
PageReturn m_PageReturn = NETSQL.XNGetSQLPageRecordVar(SQLString, 10, 1, out bOK, m_varList, null);
if(bOK)
{
MessageBox.Show(JsonHelper.OBJToJsonStr(m_PageReturn));
}
else
{
MessageBox.Show(m_PageReturn.sError);
}
测试访问企业站点:/CoreSYS.SYS/BrowseQYSite.aspx?sys_companys_nodeuuid=16421967849850000003000
企业站点模板编辑
需修改dom添加名为'editpage'的class,添加uid属性为dom元素名标识
当dom为img时,添加属性imgname,该属性值与uid属性值保持一致
当dom要设置背景图片时候,添加属性backgroundimgname,该属性值与uid属性值保持一致
添加客服系统
<!--客服系统头文件开始-->
<link rel="stylesheet" href="【客服系统地址】/JsonMode/即时通讯/View/public/js/layui/css/layui.css"/>
<link rel="stylesheet" href="【客服系统地址】/JsonMode/即时通讯/View/public/css/laykefu.css"/><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/jquery.min.js"></script><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/layui/layui.js"></script><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/reconnecting-websocket.js"></script><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/laykefu.js"></script><!--客服系统头文件结束-->
头文件结束标识
<!--文档头插入结束处【</head><body>】--><!-- mian-content -->
登录HTML样本
<li>
<a href="javascript:void(0)" class="mr-lg-4 mr-3 scroll" onclick="openLogin(this)" id="loginA"><!--登录状态开始区域-->登录-注册<!--登录状态结束区域--></a>
</li><!--退出按钮开始区域-->
<li>
<a id="exitA" href="javascript:void(0)" class="mr-lg-4 mr-3 scroll" onclick="exitLogin(this)" exitbutton="exit">退出</a>
</li><!--退出按钮结束区域--><!--访问微站开始区域-->
<li>
<a href="javascript:void(0)" onclick="gowxsite()" class="mr-lg-4 mr-3 scroll">访问微站</a>
</li><!--访问微站结束区域-->
尾部添加HTML和 JS代码具体可参考现有的模板
***页面模板中嵌入的代码***
客服系统在页面头的代码:
<!--客服系统头文件开始-->
<link rel="stylesheet" href="【客服系统地址】/JsonMode/即时通讯/View/public/js/layui/css/layui.css"/>
<link rel="stylesheet" href="【客服系统地址】/JsonMode/即时通讯/View/public/css/laykefu.css"/><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/jquery.min.js"></script><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/layui/layui.js"></script><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/reconnecting-websocket.js"></script><script src="【客服系统地址】/JsonMode/即时通讯/View/public/js/laykefu.js"></script><!--客服系统头文件结束-->
客服系统在页面模板里的代码:
/*客服系统JS开始地址*/
var domain = "【客服系统地址】";
var lgkey = "";
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) { return pair[1]; }
}
return "";
}
function InitCustomerCC(m_ReturnOBJ) {
var wsaddress = m_ReturnOBJ.wsaddress;
var uid = '';
var name = '';
var avatar = '';
if (m_ReturnOBJ.uid != undefined) {
uid = m_ReturnOBJ.uid;
}
if (m_ReturnOBJ.name != undefined) {
name = m_ReturnOBJ.name;
}
if (m_ReturnOBJ.avatar != undefined) {
avatar = m_ReturnOBJ.avatar;
}
$(".laykefu-min").click(function () {
var group = $(this).attr('data-group');
var customersvrkey = $(this).attr('data-customersvrkey');
var ss = $(this).attr('product');
var m_initShowData = null;
/*
if (ss != "" && ss != undefined) {
m_initShowData = {};
m_initShowData.showtype = "product";
m_initShowData.data = {};
m_initShowData.data.url = "http://qq.com";
m_initShowData.data.pic = "http://www.1xn1.com/upfiles/images/202009/872ece4b838140148cbf2199d8dcca1b.jpg";
m_initShowData.data.memo = "白鸭绒羽绒服女士中长款外套时尚真大毛领黑色2019年新款冬季爆款";
m_initShowData.data.money = "100";
m_initShowData.data.dismoney = "100";
}
*/
laykefu.init({
group: group,//客服分组
customersvrkey: customersvrkey,
lgkey: lgkey,
uid: uid,
name: name,
avatar: avatar,
//socket: document.domain + ':7272',//聊天服务器地址,其实socket可以设置为ip:7272或者域名:7272,然后nginx做反向代理可以设置为 域名/wss
socket: wsaddress,//'112.74.17.122:9999/wsnode',
face_path: domain + '/JsonMode/即时通讯/View/public/images/face',//表情包路径
uploadUrl: domain + '/IMessage/UpNodeFile_RawJson.ajax',//图片上传路径
heartUrl: domain + '/IMessage/NULLLink.ajax',
defaultFace: domain + '/JsonMode/即时通讯/View/public/images/user.png',
initShowData: m_initShowData
});
});
}
$(function () {
var m_Data = {};
m_Data.customerkey = '【客服系统key】';
$.ajax({
url: domain + '/IMessage/InitCustomerCC.ajax',
type: 'POST',
dataType: 'json',
xhrFields: {
withCredentials: true
},
// 允许跨域
crossDomain: true,
data: m_Data,
cache: false,
success: function (result) {
try {
if (result.bOK) {
var b = 50;
var i = 0;
var domString = "";
for (i = 0; i < result.m_ReturnOBJ.m_KFTypeList.length; i++) {
domString = '<div class="laykefu-min" data-group="' + result.m_ReturnOBJ.m_KFTypeList[i] + '" data-customersvrkey="' + result.m_ReturnOBJ.customerkey + '">' + result.m_ReturnOBJ.m_KFTypeList[i] + '</div>';
if (i > 0) {
domString = '<div class="laykefu-min" data-group="' + result.m_ReturnOBJ.m_KFTypeList[i] + '" data-customersvrkey="' + result.m_ReturnOBJ.customerkey + '" style="margin-bottom:' + b + 'px;">' + result.m_ReturnOBJ.m_KFTypeList[i] + '</div>';
b += 50;
}
$("body").append(domString);
}
/*
if (i > 0) {
i = result.m_ReturnOBJ.m_KFTypeList.length - 1;
b = 150;
domString = '<div class="laykefu-min" data-group="' + result.m_ReturnOBJ.m_KFTypeList[i] + '" data-customersvrkey="' + result.m_ReturnOBJ.customerkey + '" style="margin-bottom:' + b + 'px;" product="true">产品咨询</div>';
$("body").append(domString);
}
*/
InitCustomerCC(result.m_ReturnOBJ);
}
else {
return layer.msg(res.sMsg, { icon: 2, anim: 6 });
}
}
catch (r) {
return layer.msg('网络访问异常', { icon: 2, anim: 6 });
}
}
});
});
/*客服系统JS结束地址*/</script><!--文档尾插入结束处--><!--!doctype-->
页面缓存经验总结
按角色按个人信息缓存,个性化信息通过异步ajax对页面更新
框架的页面缓存使用
public enum PageCacheType
{
NoLogin,
LoginJS,
LoginCompanyJS,
LoginOrgJS,
LoginUser,
NoLogin_JS,
NoLogin_User,
NeedPageModel,
}
添加页面缓存函数
static protected void InsertViewCacheFunction(string ViewCreateFullClassName, string ViewCreateFunctionName, int nDelaySecond, PageCacheType m_PageCacheType = PageCacheType.NoLogin)
数据变化引发的页面缓存变动添加
static protected void InsertViewChangeFunction(string CHFullClassName, string CHFunctionName, string ViewCreateFullClassName, string ViewCreateFunctionName)
数据变化更新缓存并通知其他服务
static public void RFViewCache(HttpContext ctx, string FullClassName, string FunctionName)
该函数由框架调用不需要用户调用
m_ReturnJson = t.InvokeMember(FName,
BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.Static | BindingFlags.InvokeMethod,
null,
null,
new Object[] { ctx, m_InParame }) as ReturnJson;
if (!m_ReturnJson.bOK)
{
SAAS_FAL(ctx);
}
}
try
{
if (m_ReturnJson.bOK)
{
if (BaseJsonMode.VIEWCACHE)
BaseJsonMode.RFViewCache(ctx, t.FullName, FName);
}
}
catch
{
}
return m_ReturnJson;
数据变化更新自己缓存不发送通知
static private void RFMyViewCache(HttpContext ctx, string FullClassName, string FunctionName)
nginx部署注意
<add key="nginx端口映射部署" value="false" />
<add key="本文件上传服务对外地址" value="http://www.1xn1.com"/>
当“nginx端口映射部署”为true 时候,本文件上传服务对外地址有效,服务端redirect跳转或上传文件的域名地址为所赋值
nginx.conf文件例子
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 81;
server_name www.hello.bslzg.com;
location / {
proxy_pass http://127.0.0.1:9800;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 81;
server_name www.1xn1.com;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header Host $host:$server_port; #$proxy_port; web获得的端口
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
杀死nginx
taskkill /im nginx.exe /f
微站的模版管理
模版在以下目录
\JsonMode\微信\View\amazeui\zh-CN\UITemplate
HiPrint打印例子
function PrintData() {
var m_Data = $.serializeObject($('#pageForm'));
m_Data.rows = 999999;
$.msgprogress({ msg: '正在获得要打印数据...' });
$.ajax(
{
url: '/Sale/Getsale_productindetail_RawJson.ajax?sale_productinflow_nodeuuid=<%=sale_productinflow_nodeuuid%>',
type: 'POST',
data: m_Data,
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
console.log(result);
// 创建打印模板对象
hiprint.init();
var m_tmpJsonOBJ = {
"panels": [
{
"index": 0,
"height": 297,
"width": 210,
"paperHeader": 45,
"paperFooter": 780,
"printElements": [
{
"options": {
"left": 165,
"top": 10.5,
"height": 21,
"width": 225,
"title": "库房商品入库清单",
"fontSize": 16,
",fontWeight": "700",
"textAlign": "center",
"lineHeight": 16
},
"printElementType": {
"title": "文本",
"type": "text"
}
},
{
"options": {
"left": 16.5,
"top": 57,
"height": 38,
"width": 562.5,
"textAlign": "center",
"columns": [
{
"columns": [
{
"title": "产品名称",
"field": "product",
"width": 99.87127733295982,
"colspan": 1,
"rowspan": 1
},
{
"title": "产品编号",
"field": "productno",
"width": 95.65764630289445,
"colspan": 1,
"rowspan": 1
},
{
"title": "进货价",
"field": "realbuyprice",
"width": 60,
"colspan": 1,
"rowspan": 1
},
{
"title": "采购量",
"field": "cnt",
"width": 70,
"colspan": 1,
"rowspan": 1
},
{
"title": "已入库量",
"field": "incnt",
"width": 70,
"colspan": 1,
"rowspan": 1
},
{
"title": "采购者",
"field": "addusername",
"width": 81.6409089895988,
"colspan": 1,
"rowspan": 1
},
{
"title": "采购时间",
"field": "createtime",
"width": 81.6409089895988,
"colspan": 1,
"rowspan": 1,
"formatter": function (value, options, target, templateData) { return formatDataTimeString(value, 'datehhmm'); },
}
]
}
]
},
"printElementType": {
"title": "表格",
"type": "tableCustom",
"field": "table"
}
},
{
"options": {
"left": 28.5,
"top": 795,
"height": 9.75,
"width": 120,
"field": "company",
"title": ""
},
"printElementType": {
"title": "",
"type": "text"
}
}
],
"paperNumberLeft": 565.5,
"paperNumberTop": 819
}
]
};
var hiprintTemplate = new hiprint.PrintTemplate({
template: m_tmpJsonOBJ,
});
var printData = {
company:result.rows[0].company,
table:result.rows
};
hiprintTemplate.print(printData);
}
});
}
拦截模块函数执行
通过JsonBase的接口ICoreInterface接口 static public ICoreInterface m_ICoreInterFace = null;的HookAPI实现函数拦截等操作
接口函数包括
void HookAPI(string ClassFullName, string FunctionName, HookFunctionPTR m_HookFunctionPTR);
void ClearAllHookAPI();
void ClearHookAPI(string ClassFullName, string FunctionName);
托管函数定义
public delegate TReturnJson HookFunctionPTR(HttpContext ctx, object m_Parame, out bool bNext);
微信公众号个性关键字
用发规则说明:1.直接关键字如(协议),2.关键字加冒号加关键字携带数据如(查人:xn),3.带验证的其实就是关键字冒号加验证码
自定义框架破解图片盗链等不能正常访问的资源
自定义框架破解图片盗链,可能是由于内容开始是网络地址(http://...)完整的英文词截取后不能换行造成 为避免代码造成手机端排版的混乱,可适当增加文字描述,将代码往后推移
http://www.1xn1.com/XNHotlink/HotlinkImage.aspx?url=后面跟图片地址
文件:
http://www.1xn1.com/XNHotlink/HotlinkFile.aspx?url=后面跟文件地址
原始:
http://www.1xn1.com/XNHotlink/HotlinkRaw.aspx?url=后面跟地址&contenttype=....
contentype值为:application/octet-stream等
视频:
http://www.1xn1.com/XNHotlink/HotlinkVideo.aspx?url=后面跟视频地址&videotype=...
videtype默认:video/mp4
行业个人注册邀请码
邀请码管理页面:
http://www.1xn1.com/CoreSYS.SYS/Managesys_invitcodesPage.aspx?fullclassname=userblog&codetype=reg&class_table=blog_sites&class_nodeuuid=16038823397660000003000&sysname=%E6%95%A3%E8%A3%85%E7%A0%81%E5%86%9C
参数:
fullclassname 行业类名
codetype 邀请码类型
class_table 邀请码所在行业具体落地归属,如站点 如小站表blog_sites
class_nodeuuid 落地的归宿id
sysname 归宿class_nodeuuid的名称
是否需要邀请码和邀请码的价格是由class_nodeuuid自己控制如blog_sites有字段invitreg,invitcodemoney
sys_invitcodes 邀请码表
重要字段
fullclassname 所在行业 如小站userblog
class_table 邀请码所在行业具体落地归属,如站点 如小站表blog_sites
class_nodeuuid 落地的归宿id
buyer_crossnodeuuid 购买者的用户id:sys_users_nodeuuid
buy_time 购买时间
user_crossnodeuuid 使用者的用户id:sys_users_nodeuuid
use_time 使用时间
codetype 码类型
邀请码交易流水页面:
http://www.1xn1.com/CoreSYS.SYS/invitCodePayRecordPage.aspx?class_table=blog_sites&class_nodeuuid=16038823397660000003000
sys_invitcodepays 邀请码交易流水表
购买邀请码的页面:
/userblog/invitCodePage.aspx
行业个人购买VIP
行业购买vip页面例子:
/CoreSYS.SYS/BuyAccountVIPPage.aspx?fullclassname=userblog&nodeuuid_nodeuuid=16038823397660000003000&returnurl=/userblog/default.aspx
fullclassname 行业类名
nodeuuid_uuid 行业支付里配置里的表内的nodeuuid 如userblog行业的blog_sites的blog_sites_nodeuuid,也就是sys_trades下的ext
vip具体的价格配置在支付信息里的所在表的所在字段如blog_sites下的payconfig
实际购买函数:/CoreSYS.SYS/BuyAccountVIP.ajax
实际账务是从行业积分扣除也就是表:sys_tradeaccountmoneys
VIP也就是在sys_tradeaccountmoneys表的vipendtime表示vip服务结束时间
行业账户余额表sys_tradeaccountmoneys
fullclassname:行业类名
leftmoney:剩余金额
freezemoney:冻结资金
sys_users_crossnodeuuid 用户id
username 用户账户
nodeuuid_table 资金所在行业的归宿表如blog_sites
nodeuuid_nodeuuid 个人资金所在行业归宿的具体单位 如:站点散装码农 站点的id
nodeuid_name 个人资金所在行业归宿的具体单位名称
vipendtime vip服务结束时间
关于广告投放
系统广告
企业自己的广告
还有小站自己的广告
邮件群发
根据条件得到用户的账户和扩展信息,如账户为email那么就以账户的email发,如不是,那么查看扩展的联系信息里的QQ为email,群发邮件
独立平台部署说明
管理独立平台:/CoreSYS.SYS/Managesys_standsysPage.aspx
查看及机或独立平台:/CoreSYS.SYS/lookPower.aspx
设置可调用函数CoreSYS:m_JsonModeEngine.SetSYSCallModeFunctionPTR("CoreSYS.SYS", "getbasePowerHH", getbasePowerHH);
XNWebEngine.JsonModeEngine:m_AuthDIC独立部署权限
XNWebEngine.JsonModeEngine判断:public bool CanCall(string type, HttpContext ctx, InvokeInfo m_InvokeInfo)
获得本地授权 CoreSYS.SYS/getBaseAuth_RawJson
激活本地部署 CoreSYS.SYS/activeCode
P2P调用
管理页面:/CoreSYS.SYS/p2pwebManager.aspx
调用说明:计算sendmarkkey:sToMarkKey=被调用方MarkKey+"$"+我的markKey;KeyString=我的IP+调用username+sToMarkKey,最后sendmarkkey=md5(KeyString),最后必提交参数: "sendmarkkey=" + sendmarkkey + "&username=" + username + "&fromservername=" + 我的节点名,调用:sUrl= p2purl + "/" + ClassFullName + "/" + FunctionName + ".p2p"
API调用
获得token:CoreSYS.SYS/GetApiToken.api 参数:servername,markkey
对外接口管理页:/CoreSYS.SYS/interfaceManager.aspx
框架的手机端管理页面编写
***手机每个管理页面通过linktophone函数通过ajax请求返回m_ReturnOBJ,m_ReturnOBJ为Hashtable数据类型,包含js和menu***
典型的一个页面例子如ctlList页面
手机端管理主页main.aspx渲染:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="CoreSYS" %>
<%@ Assembly Name="JsonBase" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="CoreSYS" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<%string sError; %>
<%
string urlBefore = GetResourceUrl(HttpContext.Current);
string ModeUrl = urlBefore + MainViewPath;
Hashtable m_HH = new Hashtable();
if (Model != null)
{
JsonHelper.OBJToHashTable(Model, m_HH);
}
%>
<%=RenderModeHTML("CoreSYS.SYS", "CoreSYSHeader", m_HH)%>
<%=RenderModeHTML("CoreSYS.SYS", "NULLContent", m_HH)%>
<%=RenderModeHTML("CoreSYS.SYS", "CoreSYSFooter", m_HH)%>
CoreSYSHeader.aspx
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="CoreSYS" %>
<%@ Assembly Name="JsonBase" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="CoreSYS" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<%string sError; %>
<%
string urlBefore = GetResourceUrl(HttpContext.Current);
string ModeUrl = urlBefore + MainViewPath;
%>
<!doctype html>
<html class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<%
SessionLink m_SessionLink = GetSessionLink();
Hashtable m_HH = new Hashtable();
Hashtable[] m_erweima = null;
Hashtable menuHash = null;
string mainPage = "";// "/weixin/main.aspx";
bool bIM = false;
string lgkey = "";
string wsurl = "";
string HeadUrl = "";
string topbkcolor = "#053148";
if (Model != null)
{
JsonHelper.OBJToHashTable(Model, m_HH);
JsonHelper.OBJToHashTable(m_HH["menuHash"], menuHash);
try
{
bIM = (bool)m_HH["bIM"];
}
catch
{
bIM = false;
}
try
{
m_erweima = (Hashtable[])m_HH["erweima"];
}
catch
{
m_erweima = null;
}
if (m_HH.ContainsKey("HeadUrl"))
{
HeadUrl = m_HH["HeadUrl"].ToString();
}
if (m_HH.ContainsKey("mainPage"))
{
mainPage = m_HH["mainPage"].ToString();
}
mainPage = "";
if (m_HH.ContainsKey("im") && bIM)
{
Hashtable m_IMHH = (Hashtable)m_HH["im"];
if (m_IMHH.ContainsKey("lgkey"))
{
lgkey = m_IMHH["lgkey"].ToString();
bIM = true;
}
if (m_IMHH.ContainsKey("wsurl"))
{
wsurl = m_IMHH["wsurl"].ToString();
}
}
if (m_HH.ContainsKey("topbkcolor"))
{
topbkcolor = m_HH["topbkcolor"].ToString();
}
}
%>
<title><%=m_HH["company"].ToString() %></title>
<script>
var str = '<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/css/easyui.css?' + Math.random() + '" rel="stylesheet" type="text/css"/>';
var str1 = '<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/css/amazeui.css?' + Math.random() + '" rel="stylesheet" type="text/css"/>';
var str2 = '<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/css/ant.css?' + Math.random() + '" rel="stylesheet" type="text/css"/>';
<%--var str3 = '<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/css/templateCommon.css?' + Math.random() + '" rel="stylesheet" type="text/css"/>';--%>
var str4 = '<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/ant/ant/css/antd.css?' + Math.random() + '" rel="stylesheet" type="text/css"/>';
var str5 = '<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/css/amazeui.css?' + Math.random() + '" rel="stylesheet" type="text/css"/>';
var str6 = '<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/css/default.css?' + Math.random() + '" rel="stylesheet" type="text/css"/>';
document.write(str);
document.write(str1);
document.write(str2);
//document.write(str3);
document.write(str4);
document.write(str5);
document.write(str6);
var nDlgWidth = 350;
</script>
<meta name="keywords" content="index">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="renderer" content="webkit">
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link rel="icon" type="image/png" href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/i/favicon.png">
<link rel="apple-touch-icon-precomposed" href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/i/app-icon72x72@2x.png">
<meta name="apple-mobile-web-app-title" content="Amaze UI" />
<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<link rel="stylesheet" href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/css/amazeui.min.css" />
<link rel="stylesheet" href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/css/admin.css">
<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/wdScrollTab/TabPanel.css" rel="stylesheet" type="text/css" />
<!--[if (gte IE 9)|!(IE)]><!-->
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/js/jquery.min.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/js/amazeui.js"></script>
<!--<![endif]-->
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui/js/app.js"></script>
<script type="text/javascript" src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/wdScrollTab/TabPanel.js"></script>
<script type="text/javascript" src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/wdScrollTab/Math.uuid.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/zTree_v3/jquery.ztree.all-3.5.js"></script>
<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/zTree_v3/css/zTreeStyle.css" rel="stylesheet" />
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/script/jquery.form.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/script/iscroll.js"></script>
<link rel="stylesheet" href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/amazeuiChosen/css/amazeui.chosen.css" />
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/amazeuiChosen/js/amazeui.chosen.min.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/script/amazeui.common.xn.js?ver=1"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/script/amazeui.mobile.xn.js?ver=1"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/script/amazeui.goodpage.lyq.js?ver=1"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/script/formattime.js"></script>
<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/umeditor1_2_2-utf8-net/themes/default/css/umeditor.css" type="text/css" rel="stylesheet">
<%if (bIM)
{%>
<!--
<link rel="stylesheet" href="<%=GetResourceUrl(HttpContext.Current)%>/public/layim/src/css/layui.css" media="all">
-->
<%}%>
<script type="text/javascript" charset="utf-8" src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/umeditor1_2_2-utf8-net/umeditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/umeditor1_2_2-utf8-net/umeditor.min.js"></script>
<script type="text/javascript" src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/umeditor1_2_2-utf8-net/lang/zh-cn/zh-cn.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/plugin/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="<%=urlBefore%>/public/share/script/paho-mqtt.js" language="zh-CN"></script>
<script type="text/javascript" src="<%=urlBefore%>/public/share/script/FrameMQTT.js?ver=123" language="zh-CN"></script>
<link rel="stylesheet" href="<%=urlBefore%>/public/amazeui/amazeui_Defined/plugin/deviceModal/device.css">
<script type="text/javascript" src="<%=GetResourceUrl(HttpContext.Current)%>/public/layer/layer.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/echarts_v3.7.1/echarts.common.min.js"></script>
<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/css/hiprint.css" rel="stylesheet">
<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/css/print-lock.css" rel="stylesheet">
<link href="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/css/print-lock.css" media="print" rel="stylesheet">
<%if (bIM)
{%>
<style>
.am-list > li > a {
color: #3C3C3C;
font-size: 16px;
padding: 13px 0;
padding-left: 15px;
}
</style>
<%}%>
<style>
.admin-header {
background-color: #053148;
}
.shopcarlogo {
height: 70px;
width: 70px;
line-height: 70px;
font-size: 40px;
cursor: pointer;
box-shadow: 0 3px 8px #666;
}
.cartProCnt {
position: absolute;
display: block;
top: 0;
right: 0;
width: 25px;
height: 25px;
background-color: red;
line-height: 25px;
border-radius: 20px;
font-size: 15px;
}
</style>
<%
OneUpFileWEB m_OneUpFileWEB = MyBasePageView.GetUpFileURL(HttpContext.Current);
Hashtable m_UrlHH = new Hashtable();
JsonHelper.JsonToHashtable(m_OneUpFileWEB.configjson, m_UrlHH);
string sUrl = m_UrlHH["上传地址"].ToString();
%>
<!--百度map -->
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=WHGkiXlqiceHzTOdrIDcfVYOg767X8oQ"></script>
<script type="text/javascript">
//2011-7-25
(function () { //闭包
function load_script(xyUrl, callback) {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = xyUrl;
//借鉴了jQuery的script跨域方法
script.onload = script.onreadystatechange = function () {
if ((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
callback && callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if (head && script.parentNode) {
head.removeChild(script);
}
}
};
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
head.insertBefore(script, head.firstChild);
}
function translate(point, type, callback) {
var callbackName = 'cbk_' + Math.round(Math.random() * 10000); //随机函数名
var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from=" + type + "&to=4&x=" + point.lng + "&y=" + point.lat + "&callback=BMap.Convertor." + callbackName;
//动态创建script标签
load_script(xyUrl);
BMap.Convertor[callbackName] = function (xyResult) {
delete BMap.Convertor[callbackName]; //调用完需要删除改函数
var point = new BMap.Point(xyResult.x, xyResult.y);
callback && callback(point);
}
}
window.BMap = window.BMap || {};
BMap.Convertor = {};
BMap.Convertor.translate = translate;
})();
</script>
<script language="C# " runat="server">
static public string getTreeMenu(Hashtable[] itemChild)
{
string childHtml = "";
foreach (var item in itemChild)
{
string title = item["itemtext"].ToString().Replace("|", "").Replace("_", "");
string icon = item["leftclassorpic"].ToString();
string righticon = item["rightclassorpic"].ToString();
string itemdata = item["itemdata"].ToString();
string id = item["sys_menuitems_uuid"].ToString();
string itemtype = item["itemtype"].ToString();
if (itemtype == "组")
{
childHtml += "<li class=\"admin-parent\"><a class=\"am-cf\" data-am-collapse=\"{target: '#collapse-nav" + id + "'}\"><span class=\"" + icon + "\"></span>" + title + "<span class=\"" + righticon + " am-icon-angle-right am-fr am-margin-right\"></span></a> <ul class=\"am-list am-collapse admin-sidebar-sub\" id=\"collapse-nav" + id + "\">";
try
{
var child = (Hashtable[])item["m_childMenuList"];
if (child.Length > 0)
{
childHtml += getTreeMenu(child);
}
}
catch
{
}
childHtml += "</ul></li>";
}
else
{
childHtml += " <li ids=\"" + id + "\" href=\"" + itemdata + "\" onclick=\"linkto(this)\" titles=\"" + title + "\"><a href=\"javascript:void(0)\" class=\"am-cf\"><span class=\"" + icon + "\" ></span>" + title + "<span class=\"" + righticon + " am-fr am-margin-right\"></span></a></li>";
}
}
return childHtml;
}
/// <summary>
/// 获取菜单
/// </summary>
/// <param name="menu">菜单hash</param>
/// <returns></returns>
static public string getMenu(Object menu)
{
Hashtable menuHash = new Hashtable();
JsonHelper.OBJToHashTable(menu, menuHash);
List<Object> menuList = JsonHelper.OBJToType<List<Object>>(menuHash["menu"]);
string menuHtml = "<ul class=\"am-list admin-sidebar-list\" >";
List<Hashtable> tmp = new List<Hashtable>();
foreach (var item in menuList)
{
Hashtable itemHash = new Hashtable();
JsonHelper.OBJToHashTable(item, itemHash);
tmp.Add(itemHash);
}
menuHtml += getTreeMenu(tmp.ToArray());
menuHtml += "</ul>";
return menuHtml;
}
</script>
<style type="text/css">
.ztree span {
font-family: '"Segoe UI","Lucida Grande",Helvetica,Arial,"Microsoft YaHei",FreeSans,Arimo,"Droid Sans","wenquanyi micro hei","Hiragino Sans GB","Hiragino Sans GB W3",FontAwesome,sans-serif' !important;
font-size: 1.4rem !important;
font-weight: 400 !important;
color: #5c5c5c !important;
}
label {
font-size: initial;
}
</style>
<script type="text/javascript">
var myGoodPageOpts = null;
var sUrl = '<%=sUrl %>';
var token = '<%=m_OneUpFileWEB.token %>';
function updateToken() {//维护文件传输签名
$.ajax({
url: "/CoreSYS.SYS/GetUpFileService.ajax",
dataType: 'json',
type: 'post',
async: false,
success: function (res) {
if (res.bOK) {
token = res.m_ReturnOBJ.token;
sUrl = jQuery.parseJSON(res.m_ReturnOBJ.configjson).上传地址;
}
}
});
}
<%
bool isAdmin = false;
bool isHY = false;
bool isHYAdmin = false;
if (HavePower("CoreSYS.SYS", "GetCompanys_Any", false, out sError))
{
isAdmin = true;
}
else
{
if (HavePower("CoreSYS.SYS", "GetCompanys_HY", false, out sError))
{
isHY = true;
if (HavePower("CoreSYS.SYS", "IsHYAdministrator", false, out sError))
{
isHY = false;
isHYAdmin = true;
}
}
}
%>
function formatDateTime(val) {
try {
if (val.indexOf('/Date') != -1) {
var tDay = new Date(parseInt(val.substr(6)));
str = tDay.format();
return str;
}
else
return val;
}
catch (e) {
return "";
}
}
/**
* 格式化日期时间
*
* @param format
* @returns
*/
Date.prototype.format = function (format) {
if (isNaN(this.getMonth())) {
return '';
}
if (!format) {
format = "yyyy-MM-dd hh:mm:ss";
}
var o = {
/* month */
"M+": this.getMonth() + 1,
/* day */
"d+": this.getDate(),
/* hour */
"h+": this.getHours(),
/* minute */
"m+": this.getMinutes(),
/* second */
"s+": this.getSeconds(),
/* quarter */
"q+": Math.floor((this.getMonth() + 3) / 3),
/* millisecond */
"S": this.getMilliseconds()
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return format;
};
// 百度地图API功能
var map = null; // 创建Map实例
var marker = null;// 标记
var cityName = null;
var cityCenterPoint = null;
var geoc = null;// 创建地址解析器实例
var myCity = null;//获得所在城市
var opts = {
enableMessage: false,//设置不允许信息窗发送短息
}
//加载百度地图
function loadBMap(mapId) {
map = new BMap.Map(mapId); // 创建Map实例
geoc = new BMap.Geocoder();// 创建地址解析器实例
myCity = new BMap.LocalCity();//获得所在城市
myCity.get(myFun);
}
function myFun(result) {
cityName = result.name;
map.centerAndZoom(cityName, 12);
map.enableScrollWheelZoom();
cityCenterPoint = new BMap.Point(result.center.lng, result.center.lat);
}
var pointText;
//启动百度地图
function setAddBaidu() {
if (marker != null) {
map.removeOverlay(marker);
}
if ($('#address').val() != "") {
geoc.getPoint($('#address').val(), function (point) {
if (point) {
geoc.getLocation(point, function (rs) {//获取百度文字地址
pointText = rs.address;
map.centerAndZoom(point, 16);
marker = new BMap.Marker(point);
map.addOverlay(marker);
marker.setLabel(new BMap.Label(pointText, { offset: new BMap.Size(20, -10) }));
});
} else {
$.alert({ content: "您输入的地址没有解析到结果! 正在定位所在城市中心点" });
geoc.getLocation(cityCenterPoint, function (rs) {//获取百度文字地址
pointText = rs.address;
marker = new BMap.Marker(cityCenterPoint);// 创建标注
map.addOverlay(marker); // 将标注新增到地图中
var label = new BMap.Label(pointText, { offset: new BMap.Size(20, -10) });
marker.setLabel(label); //新增百度label
map.setCenter(cityCenterPoint);
});
}
});
} else {
//初始化城市中心地点
geoc.getLocation(cityCenterPoint, function (rs) {//获取百度文字地址
pointText = rs.address;
});
setTimeout(function () {
marker = new BMap.Marker(cityCenterPoint);// 创建标注
map.addOverlay(marker); // 将标注新增到地图中
var label = new BMap.Label(pointText, { offset: new BMap.Size(20, -10) });
marker.setLabel(label); //新增百度label
map.setCenter(cityCenterPoint);
}, 500)
}
map.addEventListener("click", function (e) {
if (marker != null) {
map.removeOverlay(marker);
}
Point = e.point;
geoc.getLocation(Point, function (rs) {//获取百度文字地址
pointText = rs.address;
var label = new BMap.Label(pointText, { offset: new BMap.Size(20, -10) });
marker.setLabel(label); //新增百度label
});
marker = new BMap.Marker(Point);// 创建标注
map.addOverlay(marker); // 将标注新增到地图中
map.setCenter(Point);
});
}
//启动百度地图
function setAddBaiduByDOM(dom) {
if (marker != null) {
map.removeOverlay(marker);
}
if (dom.find('#address').val() != "") {
geoc.getPoint(dom.find('#address').val(), function (point) {
if (point) {
geoc.getLocation(point, function (rs) {//获取百度文字地址
pointText = rs.address;
map.centerAndZoom(point, 16);
marker = new BMap.Marker(point);
map.addOverlay(marker);
marker.setLabel(new BMap.Label(pointText, { offset: new BMap.Size(20, -10) }));
});
} else {
$.alert({ content: "您输入的地址没有解析到结果! 正在定位所在城市中心点" });
geoc.getLocation(cityCenterPoint, function (rs) {//获取百度文字地址
pointText = rs.address;
marker = new BMap.Marker(cityCenterPoint);// 创建标注
map.addOverlay(marker); // 将标注新增到地图中
var label = new BMap.Label(pointText, { offset: new BMap.Size(20, -10) });
marker.setLabel(label); //新增百度label
map.setCenter(cityCenterPoint);
});
}
});
} else {
//初始化城市中心地点
geoc.getLocation(cityCenterPoint, function (rs) {//获取百度文字地址
pointText = rs.address;
});
setTimeout(function () {
marker = new BMap.Marker(cityCenterPoint);// 创建标注
map.addOverlay(marker); // 将标注新增到地图中
var label = new BMap.Label(pointText, { offset: new BMap.Size(20, -10) });
marker.setLabel(label); //新增百度label
map.setCenter(cityCenterPoint);
}, 500)
}
map.addEventListener("click", function (e) {
if (marker != null) {
map.removeOverlay(marker);
}
Point = e.point;
geoc.getLocation(Point, function (rs) {//获取百度文字地址
pointText = rs.address;
var label = new BMap.Label(pointText, { offset: new BMap.Size(20, -10) });
marker.setLabel(label); //新增百度label
});
marker = new BMap.Marker(Point);// 创建标注
map.addOverlay(marker); // 将标注新增到地图中
map.setCenter(Point);
});
}
//百度地图地址确认方法
function saveBaiduAdd() {
var x1 = marker.getPosition().lng;
var y1 = marker.getPosition().lat;
var gpsPoint = new BMap.Point(x1, y1);//经纬度
BMap.Convertor.translate(gpsPoint, 0, function (point) {
var x2 = point.lng;
var y2 = point.lat;
var x = 2 * x1 - x2;
var y = 2 * y1 - y2;
$("#latitude").val(y);
$("#longitude").val(x);
});
$("#address").val(pointText);
}
function saveBaiduAddByDOM(dom) {
var x1 = marker.getPosition().lng;
var y1 = marker.getPosition().lat;
var gpsPoint = new BMap.Point(x1, y1);//经纬度
BMap.Convertor.translate(gpsPoint, 0, function (point) {
var x2 = point.lng;
var y2 = point.lat;
var x = 2 * x1 - x2;
var y = 2 * y1 - y2;
dom.find("#latitude").val(y);
dom.find("#longitude").val(x);
});
dom.find("#address").val(pointText);
}
var lockMarker = null;
var openMarker = null;
//地址对比
function setBaidu(rows) {
var points = [];
var lockPoint = null;
setTimeout(function () {
var xx = rows[0].beginlat;
var yy = rows[0].beginlng;
map.clearOverlays();
lockPoint = new BMap.Point(yy, xx);
setTimeout(function () {
BMap.Convertor.translate(lockPoint, 0, translateCallback); //真实经纬度转成百度坐标
}, 100);
translateCallback = function (point) {
lockMarker = new BMap.Marker(point);
points.push(point);
map.addOverlay(lockMarker);
var label = new BMap.Label("施封地址: " + rows[0].beginaddr, { offset: new BMap.Size(20, -10) });
lockMarker.setLabel(label); //新增百度label
var content = "施封人: " + rows[0].beginuser + "(" + rows[0].beginusername + ")<br/>施封地址: " + rows[0].beginaddr + "<br/>施封时间: " + formatDateTime(rows[0].begintime);
lockMarker.addEventListener("click", openInfo.bind(null, content));
}
if (rows[0].enduser) {//结束标记
var xx1 = rows[0].endlat;
var yy1 = rows[0].endlng;
var openPoint = new BMap.Point(yy1, xx1);
setTimeout(function () {
BMap.Convertor.translate(openPoint, 0, translateCallback1); //真实经纬度转成百度坐标
}, 100);
translateCallback1 = function (point) {
openMarker = new BMap.Marker(point);
points.push(point);
map.addOverlay(openMarker);
var label1 = new BMap.Label("拆封地址: " + rows[0].endaddr, { offset: new BMap.Size(20, -10) });
openMarker.setLabel(label1); //新增百度label
var content = "拆封人: " + rows[0].enduser + "(" + rows[0].endusername + ")<br/>拆封地址: " + rows[0].endaddr + "<br/>拆封时间: " + formatDateTime(rows[0].endtime);
openMarker.addEventListener("click", openInfo.bind(null, content));
}
}
setTimeout(function () {
setTimeout(function () { map.setViewport(points); if (!(rows[0].enduser)) { map.setZoom(14); } }, 500);
}, 200);
}, 200);
}
function openInfo(content, e) {
var p = e.target;
var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
var infoWindow = new BMap.InfoWindow(content, opts); // 创建信息窗口对象
map.openInfoWindow(infoWindow, point); //开启信息窗口
}
function closeTsnrgl() {
$('.am-modal').modal('close');
$('.tsnrgl').click();
}
var tabpanel;
var jcTabs = [
'<iframe src="<%=mainPage%>"style="width:100%; height:100%" frameborder="0" id="indexFrame"></iframe>',
];
function closeHynrgl() {
//$('.am-dimmer').removeClass('am-active').css('display', 'none');
$('.am-modal').modal('close');
$('.hynrgl').click();
}
function closeGgnrgl() {
//$('.am-dimmer').removeClass('am-active').css('display', 'none');
$('.am-modal').modal('close');
$('.ggnrgl').click();
}
//更改邮件状态
function updatemsgstate() {
$.ajax({
type: "GET",
url: "/CoreSYS.SYS/Updatebpost.ajax",
dataType: 'json',
success: function (result) {
if (result.bOK == false) {
$.alert({ content: result.sMsg });
} else {
$('#count').text(0);
$('#msgCount').text(0);
linkajaxpage("/CoreSYS.SYS/MsgManager.ajax", "查看消息");
}
}
});
}
function resizeMain() {
if (($('#header>.am-topbar-brand').width() + $('#topbar-collapse>ul').width() + 30) > $('body').width()) {
$('#header').css('background', '#fff');
$('#header>.am-topbar-brand').css('position', 'relative');
$('#header>.am-topbar-brand strong').css('color', '#5e5e5e');
$('#topbar-collapse').css({
'clear': 'both',
'background':'<%=topbkcolor%>'// '#053148'
});
$('.sjdiv').css('display', 'none');
$('#topbar-collapse>ul').css({
'margin-top': '0px',
'margin-bottom': '0px'
})
} else {
$('#header').css('background', '#00000');
$('#header>.am-topbar-brand').css('position', 'absolute');
$('#header>.am-topbar-brand strong').css('color', '#fff');
$('#topbar-collapse').css({
'clear': 'none',
'background':'<%=topbkcolor%>'// '#053148'
});
$('.sjdiv').css('display', 'block');
if ($('#header>.am-topbar-brand').children('strong').length) {
$('#topbar-collapse>ul').css({
'margin-top': '0px',
'margin-bottom': '0px'
})
} else {
$('#topbar-collapse>ul').css({
'margin-top': '25px',
'margin-bottom': '25px'
})
}
}
var tabpanelContent_width = '100%';
$(".tabpanel_move_content").css('width', tabpanelContent_width);
$(".tabpanel_tab_content").css('width', tabpanelContent_width);
$(".tabpanel_content").css('width', tabpanelContent_width);
$(".tabpanel").css('width', tabpanelContent_width);
$(".admin-content").css('width', '');
var header_footer_height = $('#header').height() + $('#footer').height();
$(".tabpanel_content").css('height', $(window).height() - header_footer_height - $('.tabpanel_move_content').height());
$(".admin-content").css('height', $(window).height() - header_footer_height);
$(".tabpanel").css('height', $(window).height() - header_footer_height - $('.tabpanel_move_content').height());
$(".amazeuiLeft").css('height', $(window).height()).css('maxHeight', $(window).height());
}
function vibrate() {
try {
navigator.vibrate([3000, 2000, 1000]);
}
catch (r) {
}
}
var bMainUI = false;
function initMainUI()
{
if (!bMainUI)
{
bMainUI = true;
}
else {
return;
}
navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;
if (navigator.vibrate) {
console.log("支持设备震动!");
//alert("支持设备震动");
}
$.ajax({
type: "GET",
url: "/CoreSYS.SYS/GetSelfInfoEx.ajax",
dataType: 'json',
success: function (result) {
if (result.bOK == false) {
} else {
if (result.m_ReturnOBJ.faceimg && result.m_ReturnOBJ.faceimg != '') {
$(".faceImg").attr('src', result.m_ReturnOBJ.faceimg);
}
}
},
});
resizeMain();
$(window).resize(function () {
resizeMain();
});
setTimeout(function () {
initMenuScroll();
vibrate();
}, 200);
$('#msgRong').click(function () {
updatemsgstate();
linkajaxpage("<%=urlBefore%>/CoreSYS.SYS/MsgManager.ajax", "消息查看");
});
}
setTimeout(initMainUI, 1000);
$(document).ready(function () {
initMainUI();
});
function initMenuScroll() {
var leftMenuRong = "admin-offcanvas";//"menuMainRong";// "admin-offcanvas";
var leftMenuRongDom = document.getElementById(leftMenuRong);
console.log(leftMenuRongDom);
}
function showHeader()
{
$('#m_Header').show();
}
function hideHeader()
{
$('#m_Header').hide();
}
function reiframe(src, thisid) {
return '<iframe src=' + src + ' name=' + src.replace(/\//g, '').replace(/\./g, '') + ' style="width:100%; height:100%" frameborder="0" id="' + thisid + 'Frame"></iframe>'
}
var oldpageurl = '';
function linkajaxpage(pageurl, title) {
if (pageurl == oldpageurl) {
return;
}
oldpageurl = pageurl;
$.msgprogress({ msg: '正在获得页面-' + title + '...' });
//var index = layer.load(1, { shade: false }); //0代表加载的风格,支持0-2
$.ajax({
url: pageurl,//"/CoreSYS.SYS/managearticle.ajax",
dataType: 'json',
type: 'post',
success: function (res, textStatus, request) {
$.msgprogress('close');
//layer.close(index);
try {
var sessionstatus = request.getResponseHeader("sessionStatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
if (sessionstatus == "clear") {
//$.alert({ content: "未登录,禁止充值,2秒后登录" });
setTimeout(function () {
window.location.href = "<%=urlBefore%>/index.aspx";
}, 1200);
return;
}
if (res.bOK) {
$('#m_Header').show();
$('#firstPageRong').remove();
$('#mobilelist').empty();
myGoodPageOpts = null;
$('#amz-toolbar-plus').show();
$('#m_HeaderName').text(title);
$('#m_serchForm').empty();
if (res.m_ReturnOBJ.menu != undefined) {
$('#menuRong').show();
$('#m_serchForm').append(res.m_ReturnOBJ.menu);
}
else {
$('#menuRong').hide();
}
if (res.m_ReturnOBJ.html != undefined) {
$('#mobilelist').html(res.m_ReturnOBJ.html);
}
$("#pageScript").remove();
var newScript = document.createElement('script');
$(newScript).attr("id", "pageScript");
newScript.type = 'text/javascript';
if (res.m_ReturnOBJ.js != undefined) {
newScript.innerHTML = res.m_ReturnOBJ.js;
if (res.m_ReturnOBJ.js.indexOf("InitList()") != -1) {
$('#m_addToolBT').hide();
$('#m_importToolBT').hide();
$('#m_downImportFileToolBT').hide();
$('#m_exportToolBT').hide();
}
else {
$('#mobilelist').empty();
}
}
else {
$('#mobilelist').empty();
}
document.body.appendChild(newScript);
}
else {
$.alert({ content: '加载失败:' + res.sMsg });
}
}
catch (r) {
}
}
});
}
function linktophone(val) {
var thisDom = arguments[0];
var thisId = thisDom.name;
var thisTxt = $(thisDom).attr('titles');
var thishref = $(thisDom).attr("href");
$('#admin-offcanvas').offCanvas('close');
if (thishref.indexOf("indexAfterLogin") != -1) {
window.location = "/index.aspx";
return;
}
thishref = thishref.replace(".aspx", ".ajax");
if (thishref == oldpageurl) {
return;
}
oldpageurl = thishref;
$.msgprogress({ msg: '正在获得页面-' + thisTxt + '...' });
//var index = layer.load(1, { shade: false }); //0代表加载的风格,支持0-2
$.ajax({
url: thishref,//"/CoreSYS.SYS/managearticle.ajax",
dataType: 'json',
type: 'post',
success: function (res, textStatus, request) {
$.msgprogress('close');
//layer.close(index);
try {
var sessionstatus = request.getResponseHeader("sessionStatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
if (sessionstatus == "clear") {
//$.alert({ content: "未登录,禁止充值,2秒后登录" });
setTimeout(function () {
window.location.href = "<%=urlBefore%>/index.aspx";
}, 1200);
return;
}
if (res.bOK) {
$('#m_Header').show();
$('#firstPageRong').remove();
$('#mobilelist').empty();
myGoodPageOpts = null;
$('#amz-toolbar-plus').show();
$('#m_HeaderName').text(thisTxt);
$('#m_serchForm').empty();
if (res.m_ReturnOBJ.menu != undefined) {
$('#menuRong').show();
$('#m_serchForm').append(res.m_ReturnOBJ.menu);
}
else {
$('#menuRong').hide();
}
if (res.m_ReturnOBJ.html != undefined) {
$('#mobilelist').html(res.m_ReturnOBJ.html);
}
$("#pageScript").remove();
var newScript = document.createElement('script');
$(newScript).attr("id", "pageScript");
newScript.type = 'text/javascript';
if (res.m_ReturnOBJ.js != undefined) {
newScript.innerHTML = res.m_ReturnOBJ.js;
if (res.m_ReturnOBJ.js.indexOf("InitList()") != -1) {
$('#m_addToolBT').hide();
$('#m_importToolBT').hide();
$('#m_downImportFileToolBT').hide();
$('#m_exportToolBT').hide();
}
else {
//$('#mobilelist').empty();
}
}
else {
//$('#mobilelist').empty();
}
document.body.appendChild(newScript);
}
else {
$.alert({ content: '加载失败:' + res.sMsg });
}
}
catch (r) {
}
}
});
return;
}
function linkto(val) {
return linktophone(val);
var thisDom = arguments[0];
var thisId = thisDom.name;
var thisTxt = $(thisDom).attr('titles');
var thishref = $(thisDom).attr("href");
$('#admin-offcanvas').offCanvas('close');
if (thisTxt == "主页") {
window.document.location.href = "/CoreSYS.SYS/index.aspx";
return false;
}
switch (thisTxt) {
case "菜单设置":
{
$("#syssz").dropdown('close');
}
break;
}
if (thisId == "" || thisId == undefined) {
thisId = Math.uuid();
val.name = thisId;
}
tabpanel.addTab({
height: $(window).height(),
id: thisId,
title: thisTxt,
html: reiframe(thishref, thisId),
closable: true,
disabled: false,
icon: "image/new.gif"
});
resizeMain();
}
function deleteSelfFaceImage(e) {
$.msgprogress({ msg: '正在删除个人头像...' });
$.ajax({
type: "GET",
url: "/CoreSYS.SYS/DeleteSelfFaceImage.ajax",
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK == false) {
$.alert({ content: result.sMsg });
} else {
$.alert({ content: "删除个人头像成功" });
var parents = $(e).parents('#form');
$(parents[parents.length - 1]).find('#faceimgEdit').val('');
$(parents[parents.length - 1]).find('#imgEdit').attr('src', '');
$('.faceImg').attr('src', '/public/amazeui/amazeui_Defined/pic/defaultFaceImg.png');
$(e).remove();
}
}
});
}
function showMyInfoFun() {//个人信息
var contentMyInfo = $('<form class="am-form am-form-horizontal" id="form">' +
'<input type="hidden" name="faceimg" id="faceimgEdit"/>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">头像<br/><span class="deleteSelfFaceImage" style="display:none;"onclick="deleteSelfFaceImage(this);"><i class="am-icon-trash-o"></i>删除</span></label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<div class="am-form-group am-form-file"><img id="imgEdit" width="50" height="50" accept="image/*" src=""><i class="am-icon-cloud-upload"></i> 选择封面<input accept="image/*" id="doc-form-file" type="file" name="F1" ></div>' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">真实姓名(可更改)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="realname" id="realname" placeholder="请输入账户名称" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">性别(可更改)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="sex" id="sex" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">角色</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="powername" id="powername" readonly="readonly" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">所在公司</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="company" id="company" readonly="readonly"/>' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">所在部门</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="conpanyorg_name" id="orgna_name" readonly="readonly" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">地址(可更改)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="addr" id="addr" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">电话</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="phoneno" id="phoneno" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">QQ</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="QQ" id="QQ" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">QQ昵称</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="qqnickname" id="qqnickname" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">微信</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="weixin" id="weixin" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">微信昵称</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="weixinnickname" id="weixinnickname" />' +
'</div>' +
'</div>' +
'</form>'
);
contentMyInfo.find('#doc-form-file').on('change', function () {
$.msgprogress({ msg: '正在上传头像...' });
updateToken();
var options = {
url: sUrl + '?token=' + token,
dataType: 'json',
type: 'post',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
var codeurl = result.m_ReturnOBJ[0];
contentMyInfo.find("#faceimgEdit").val(codeurl);
contentMyInfo.find('#imgEdit')[0].src = codeurl;
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentMyInfo).ajaxSubmit(options);
});
$.ajax({
type: "GET",
url: "/CoreSYS.SYS/GetSelfInfoEx.ajax",
dataType: 'json',
success: function (result) {
if (result.bOK == false) {
//$.messager.alert("提示", result.sMsg);
//ajaxLoadEnd();
} else {
contentMyInfo.find('#realname').val(result.m_ReturnOBJ.realname);
contentMyInfo.find('#powername').val(result.m_ReturnOBJ.powername);
contentMyInfo.find('#company').val(result.m_ReturnOBJ.company);
contentMyInfo.find('#orgna_name').val(result.m_ReturnOBJ.companyorg_name);
contentMyInfo.find('#addr').val(result.m_ReturnOBJ.addr);
contentMyInfo.find("#faceimgEdit").val(result.m_ReturnOBJ.faceimg);
contentMyInfo.find('#imgEdit')[0].src = result.m_ReturnOBJ.faceimg;
contentMyInfo.find('#sex').val(result.m_ReturnOBJ.sex);
contentMyInfo.find('#phoneno').val(result.m_ReturnOBJ.phoneno);
contentMyInfo.find('#QQ').val(result.m_ReturnOBJ.QQ);
contentMyInfo.find('#weixin').val(result.m_ReturnOBJ.weixin);
contentMyInfo.find('#qqnickname').val(result.m_ReturnOBJ.qqnickname);
contentMyInfo.find('#weixinnickname').val(result.m_ReturnOBJ.weixinnickname);
if (result.m_ReturnOBJ.faceimg && result.m_ReturnOBJ.faceimg != '') {
contentMyInfo.find('.deleteSelfFaceImage').css('display', '');
}
}
},
});
$("#windows").window({
title: '用户信息',//窗口标题
content: contentMyInfo,
width: nDlgWidth,//弹出框宽度
onSuccess: function () {
$.msgprogress({ msg: '正在编辑用户信息...' });
var options = {
url: '/CoreSYS.SYS/ChangeSelfInfo.ajax',
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
$("#windows").window('close');
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentMyInfo).ajaxSubmit(options);
},
onLoaded: function (guidID) {
setTimeout(function () {
var id = guidID + "my-content";
var dom = document.getElementById(id);
console.log(dom);
var myPersonScroll = new IScroll(dom, { mouseWheel: true, scrollY: true, scrollbars: true, freeScroll: true, /*click: true,*/ tap: true });
}, 200);
},
});
}
function logoutFun() {//退出
window.location = "/CoreSYS.SYS/LoginOut.aspx";
}
function ChangePWD() {//编辑密码
var contentPWD = $('<form class="am-form am-form-horizontal" id="form">' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">旧密码</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="password" name="pwd" id="pwd" placeholder="请输入旧密码" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">新密码</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="password" name="newpwd" id="newpwd" placeholder="请输入新密码" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">重复新密码</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="password" name="repwd" id="repwd" placeholder="请输入再次输入密码" />' +
'</div>' +
'</div>' +
'</form>'
);
$("#windows").window({
title: '编辑密码',//窗口标题
content: contentPWD,
width: nDlgWidth,//弹出框宽度
onSuccess: function () {
if (contentPWD.find('#newpwd').val() != contentPWD.find('#repwd').val()) {
$.alert({ content: "两次输入的新密码不一致" });
return false;
}
$.msgprogress({ msg: '正在编辑密码...' });
var options = {
url: '/CoreSYS.SYS/ChangePwd.ajax',
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
$("#windows").window('close');
$.alert({ content: "密码编辑成功" });
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentPWD).ajaxSubmit(options);
},
});
}
//绑定Email
var contentEmail = $('<form class="am-form am-form-horizontal" id="form">' +
'<div class="am-form-group" id="emailDiv">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">邮 箱</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="email" id="email" placeholder="请输入邮箱" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;"> </label>' +
'<div class="am-u-sm-10" style="width: 72%;" id="emailCodeDiv">' +
'<span style="color: gray; margin: 3px 0 20px 50px;"><a style="text-decoration: none; color: gray;" href="javascript:void(0);" onclick="getEmailCode()">获取邮箱验证码</a></span>' +
'</div>' +
'</div>' +
'<div class="am-form-group" id="YZCodeDiv">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">验证码</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" placeholder="请输入验证码" id="YZCode"/>' +
'</div>' +
'</div>' +
'</form>'
);
function bindEmail() {
$.msgprogress({ msg: '正在加载绑定的邮箱...' });
$.ajax({
url: '/CoreSYS.SYS/getBindEmail.ajax',
dataType: 'json',
success: function (r) {
$.msgprogress('close');
if (r.bOK) {//获取成功
contentEmail.find('#email').val(r.m_ReturnOBJ);
contentEmail.find('#emailCodeDiv span').html('<a style="text-decoration: none;color:gray;" href="javascript:void(0);" onclick="getEmailCode()">获取邮箱验证码</a>')
$("#windows").window({
title: '绑定邮箱',//窗口标题
content: contentEmail,
//width: 700,//弹出框宽度
onSuccess: function () {
var YZCode = contentEmail.find('#YZCode').val();
if (YZCode.length < 4) {
$.alert({ content: '请输入正确的邮箱验证码' });
return false;
}
var email = contentEmail.find('#email').val();
var pattern = /^([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
if (!pattern.test(email)) {
$.alert({ content: '请输入正确的邮箱地址 例: 666666@qq.com' });
return false;
}
var data = { email: email, YZCode: YZCode };
$.msgprogress({ msg: '正在绑定邮箱...' });
$.ajax({
url: '/CoreSYS.SYS/bindEmail.ajax',
data: data,
dataType: 'json',
success: function (r) {
$.msgprogress('close');
if (r.bOK) {
$("#windows").window('close');
$.alert({ content: "绑定邮箱成功" });
}
else {
$.alert({ content: r.sMsg });
}
}
});
},
onClose: function () {
clearInterval(time);
timel = 60;
contentEmail.find('#emailCheckDiv span').html('');
contentEmail.find('#YZCode').val('');
contentEmail.find('#email').val('');
contentEmail.find('#emailCodeDiv span').html('<a style="text-decoration: none;color:gray;" href="javascript:void(0);" onclick="getEmailCode()">获取邮箱验证码</a>')
return true;
}
});
}
else {
$.alert({ content: r.sMsg });
}
}
});
}
function clearPageCache()
{
$.msgprogress({ msg: '正在清除页面缓存...' });
$.ajax({
url: '/CoreSYS.SYS/clearPageCache.ajax',
data: [],
dataType: 'json',
success: function (r) {
$.msgprogress('close');
if (r.bOK) {
$.alert({ content: "清除页面缓存成功" });
setTimeout(function () {
top.location.reload();
}, 300);
}
else {
$.alert({ content: r.sMsg });
}
}
});
}
//获取邮箱验证码
var timel = 60;
var time = null;
function getEmailCode() {
var email = contentEmail.find('#email').val();;
var pattern = /^([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
if (!pattern.test(email)) {
$.alert({ content: '请输入正确的邮箱地址 例: 666666@qq.com' });
return false;
}
$('#emailCodeDiv span').html('正在发送邮件,请稍候...');
var data = { email: email };
$.ajax({
url: '/CoreSYS.SYS/getEmailCode.ajax',
data: data,
dataType: 'json',
success: function (r) {
if (r.bOK) {
time = setInterval(function () {
if (timel == 1) {
clearInterval(time);
timel = 60;
$('#emailCodeDiv span').html('<a style="text-decoration: none;color:gray;" href="javascript:void(0);" onclick="getEmailCode()">重新获取验证码</a>');
return false;
}
timel--;
$('#emailCodeDiv span').html('(' + timel + ')重新获取验证码');
}, 1000);
}
else {
$.alert({ content: r.sMsg });
$('#emailCodeDiv span').html('<a style="text-decoration: none;color:gray;" href="javascript:void(0);" onclick="getEmailCode()">获取邮箱验证码</a>')
}
}
});
}
function showLicense() {
var licenseIf = $('<iframe src="AgentlicenseRecord.aspx" width="100%" height="500px;" frameborder="0"></iframe>');
$('#windows').window({
content: licenseIf,
title: '剩余授权查看',
width: nDlgWidth,
noButton: true,
});
}
function initOneFilter(DOMName) {
$('.menuContent').click(function (event) {
event.stopPropagation(); // 阻止事件冒泡
});
if (DOMName == "")
return;
var nname = DOMName + "_Select";
var nname = "select[name='" + nname + "']";
$(nname).click(function (ee) {
ee.stopPropagation(); // 阻止事件冒泡
});
}
function readyFilter() {
$('.menuContent').click(function (event) {
event.stopPropagation(); // 阻止事件冒泡
});
$('.noupevent').click(function (event) {
event.stopPropagation(); // 阻止事件冒泡
});
$('#menu').find('.am-parent').unbind('click');
$('#menu').find('.am-parent').bind('click', function () {
var _this = this;
setTimeout(function () {
var isShow = !$(_this).find('.am-menu-sub').is(':hidden');
if (isShow) {
// $(_this).siblings().hide();
$(_this).find('.am-menu-sub').hide();
} else {
//$(_this).siblings().show();
$(_this).find('.am-menu-sub').show();
//alert($(_this).find('.am-menu-sub').html());
}
}, 300);
});
}
function initFilter(m_FilterCOMArray) {
$('.noupevent').click(function (event) {
event.stopPropagation(); // 阻止事件冒泡
});
if (m_FilterCOMArray != null && m_FilterCOMArray != undefined) {
try {
for (var i = 0; i < m_FilterCOMArray.length; i++) {
var nname = m_FilterCOMArray[i] + "_Select";
var nname = "select[name='" + nname + "']";
$(nname).click(function (ee) {
ee.stopPropagation(); // 阻止事件冒泡
});
}
}
catch (r) {
}
}
$('#menu').find('.am-parent').bind('click', function () {
var _this = this;
setTimeout(function () {
var isShow = !$(_this).find('.am-menu-sub').is(':hidden');
if (isShow) {
$(_this).find('.am-menu-sub').hide();
} else {
$(_this).find('.am-menu-sub').show();
}
}, 300);
});
}
//点击备选框和输入框之外,会隐藏备选框
setTimeout(function () {
$(document).click(function (e) {
var target = e ? e.target : window.event.srcElement;
if (target.id != "admin-offcanvas" && !target.hasAttribute("data-am-offcanvas") && !target.hasAttribute("data-am-collapse")) {
$('#admin-offcanvas').offCanvas('close');
var id = $(target).attr('id');
if (id == "msgCount" || id == "msgRongP") {
updatemsgstate();
linkajaxpage("<%=urlBefore%>/CoreSYS.SYS/MsgManager.ajax", "消息查看");
}
}
});
}, 1000);
var myChart = null;
var m_DOMArray = [];
function uuid() {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = "-";
var uuid = s.join("");
return uuid;
}
function insertDOM(parentDOM,childDOM)
{
var uid=uuid();
childDOM.attr('id', uid);
parentDOM.append(childDOM);
m_DOMArray.push(childDOM);
return uid;
}
function clearDOM()
{
try
{
for(var i=0;i<m_DOMArray.length;i++)
{
try
{
m_DOMArray[i].remove();
}
catch(r2)
{
}
}
m_DOMArray = [];
}
catch(r1)
{
}
}
var m_CSSArray = [];
// 动态添加css文件
function insertCss(filename) {
var creatHead = $('head');
var oneCSS = $('<link rel="stylesheet" href="' + filename + '">'); v
creatHead.append(oneCSS);
m_CSSArray.push(filename);
}
function clearCSS() {
try {
for (var i = 0; i < m_CSSArray.length; i++) {
try {
removejscssfile(m_CSSArray[i], "css");
}
catch (r2) {
}
}
m_CSSArray = [];
}
catch (r1) {
}
}
var m_JSArray = [];
function insertJS(filename) {
var script = document.createElement("script");
script.type = "text/javacript";
script.src = filename;
document.body.appendChild(script);
m_JSArray.push(filename);
}
function clearJS() {
try {
for (var i = 0; i < m_JSArray.length; i++) {
try {
removejscssfile(m_JSArray[i], "js");
}
catch (r2) {
}
}
m_JSArray = [];
}
catch (r1) {
}
}
// 移除css/js文件
function removejscssfile(filename, filetype) {
var targetelement = (filetype == "js") ? "script" : (filetype == "css") ? "link" : "none"
var targetattr = (filetype == "js") ? "src" : (filetype == "css") ? "href" : "none"
var allsuspects = document.getElementsByTagName(targetelement)
for (var i = allsuspects.length; i >= 0; i--) {
if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) != null && allsuspects[i].getAttribute(targetattr).indexOf(filename) != -1)
allsuspects[i].parentNode.removeChild(allsuspects[i])
}
}
function initUI() {
console.log('initUI');
try{
if (myChart != null) {
myChart.clear();
}
}
catch (r) {
}
clearDOM();
clearCSS();
clearJS();
var length = arguments.length;
for (var i = 0; i < length; i++) {
console.log(arguments[i]);
}
if (i > 0) {
var varObj = arguments[0];
try {
for (var i = 0; i < varObj.hideArray.length; i++) {
$(varObj.hideArray[i]).hide();
}
}
catch (r1) {
}
try {
for (var i = 0; i < varObj.showArray.length; i++) {
$(varObj.showArray[i]).show();
}
}
catch (r2) {
}
}
else {
showHeader();
}
$('#mobilelist').css("margin-top", "0px");
$('#mobilelist').css("background-color", "rgb(255,255,255");
}
</script>
<script language="C# " runat="server">
public Object getModel()
{
return this.Model;
}
</script>
<%
Object m_OO = getModel();
Hashtable m_ModelHH = null;
ArrayList views = null;
if (m_OO != null)
{
m_ModelHH = new Hashtable();
JsonHelper.OBJToHashTable(m_OO, m_ModelHH);
views = (ArrayList)m_ModelHH["Views"];
}
string errormsg = null;
if (m_ModelHH != null)
{
if (m_ModelHH.ContainsKey("error"))
{
errormsg = m_ModelHH["error"].ToString();
}
}
%>
<%
string src = null;
string personSrc = "/public/amazeui/amazeui_Defined/pic/defaultFaceImg.png";
bool havelogo = false;
string am_topbar_brand_style = "";
string admin_header_list_style = "";
if (m_HH["pic"].ToString() == "" || m_HH["pic"] == null)
{
}
else
{
havelogo = true;
am_topbar_brand_style = "height:100px;overflow:hidden;position:absolute;";
admin_header_list_style = "margin-top:25px;margin-bottom:25px;";
src = m_HH["pic"].ToString();
}
havelogo = false;
%>
</head>
<body style="height: 100%; width: 100%; margin: 0; padding: 0; border: 0; overflow: hidden;" class="auto">
<!--[if lte IE 9]>
<p class="browsehappy">你正在使用<strong>过时</strong>的浏览器,Amaze UI 暂不支持。 请 <a href="http://browsehappy.com/" target="_blank">升级浏览器</a>
以获得更好的体验!</p>
<![endif]-->
<header class="am-topbar admin-header" id="header" style="background-color:<%=topbkcolor%>">
<div id="windows" style="display: none;"></div>
<div class="am-topbar-brand" style="<%=am_topbar_brand_style %>">
<%if (havelogo)
{%>
<!--
<div style="height: 90px; margin-left: -10px; float: left; background-color: #053148;">
-->
<div style="height: 45px; margin-left: -10px; float: left; background-color:<%=topbkcolor%>;">
<img src="<%=src %>" style="max-height: 45px;" />
</div>
<%}
else
{%>
<div style="display: inline;">
<img src="/public/amazeui/amazeui_Defined/plugin/indexC/pic/defaultLogo.png" style="border-radius: 5px; margin-top: -4px; display: none;" />
</div>
<strong><%=m_HH["company"].ToString() %></strong> <%--<small>RFID云管理平台</small>--%>
<% } %>
</div>
<button class="am-topbar-btn am-topbar-toggle am-btn am-btn-sm am-btn-success am-show-sm-only" data-am-collapse="{target: '#topbar-collapse'}"><span class="am-sr-only">导航切换</span> <span class="am-icon-bars"></span></button>
<div class="am-collapse am-topbar-collapse" id="topbar-collapse" style="background-color=<%=topbkcolor%>">
<ul class="am-nav am-nav-pills am-topbar-nav am-topbar-right admin-header-list" style="<%=admin_header_list_style %>">
<li class="am-dropdown" data-am-dropdown>
<a class="am-dropdown-toggle" data-am-dropdown-toggle href="javascript: void(0);">
<div style="width: 38px; height: 38px; display: inline;">
<img src="<%=personSrc %>" style="width: 38px; height: 38px; border-radius: 19px; margin-top: -4px;" class="faceImg" />
</div>
个人中心<span class="am-icon-caret-down"></span>
</a>
<ul class="am-dropdown-content">
<li><a href="#" style="cursor: default; color: #333; background-color: #ccc; font-size: 16px; font-weight: 600;"><%=m_HH["JSName"].ToString()%></a><div style="border: 1px solid #c3c3c3"></div>
</li>
<li onclick="showMyInfoFun()"><a href="javascript: void(0);"><span class="am-icon-user"></span>个人资料</a></li>
<li onclick="ChangePWD()"><a href="javascript: void(0);"><span class="am-icon-cog"></span>编辑密码</a></li>
<li onclick="bindEmail()"><a href="javascript: void(0);"><span class="am-icon-cog"></span>绑定邮箱</a></li>
<li onclick="clearPageCache()"><a href="javascript: void(0);"><span class="am-icon-fire"></span>清除缓存</a></li>
<%
if (isHY)
{
%>
<li onclick="showLicense()"><a href="javascript: void(0);"><span class="am-icon-cog"></span>剩余授权</a></li>
<% }%>
<li onclick="logoutFun()"><a href="javascript: void(0);"><span class="am-icon-power-off"></span>退出系统</a></li>
</ul>
</li>
<li><a href="javascript:void(0)" onclick="updatemsgstate()"><span class="am-icon-envelope-o" titles="查看消息">收件箱</span> <span id="count" class="am-badge am-badge-warning"></span></a></li>
<%
if (isAdmin)
{
%>
<li class="am-dropdown" data-am-dropdown id="syssz" style="display: none;">
<a class="am-dropdown-toggle" data-am-dropdown-toggle href="javascript:;">
<span class="am-icon-cog"></span>系统设置<span class="am-icon-caret-down"></span>
</a>
<ul class="am-dropdown-content">
<li><a href="#"><span class="am-icon-cog"></span><span href="/CoreSYS.SYS/sysConfig.aspx" onclick="linkto(this)" titles="菜单设置">菜单设置</span></a></li>
</ul>
</li>
<% }%>
<li class="am-dropdown" data-am-dropdown style="display: none;">
<a class="am-dropdown-toggle" data-am-dropdown-toggle href="javascript:;">
<span class="am-icon-cog"></span>模板更换<span class="am-icon-caret-down"></span>
</a>
<ul class="am-dropdown-content">
<%
if (views != null)
{
foreach (var item in views)
{
if (item.ToString() != m_ModelHH["CurView"].ToString())
{
%>
<li onclick="change('<%=item %>');"><a href="#"><span class="am-icon-cog"></span><%=item %></a></li>
<%}
}
}%>
</ul>
</li>
<li class="am-hide-sm-only"><a href="javascript:;" onclick="openApp();"><span class="am-icon-android"></span><span>客户端下载</span></a></li>
<li class="am-hide-sm-only"><a href="javascript:;" onclick="openDocument();"><span class="am-icon-book"></span><span>用户手册下载</span></a></li>
<li class="am-hide-sm-only"><a href="javascript:;" id="admin-fullscreen"><span class="am-icon-arrows-alt"></span><span class="admin-fullText">开启全屏</span></a></li>
</ul>
</div>
</header>
<div class="am-cf admin-main">
<!-- sidebar start -->
<div class="admin-sidebar am-offcanvas" id="admin-offcanvas" style="width: 280px; background-color: #ffffff;">
<div class="am-offcanvas-bar admin-offcanvas-bar amazeuiLeft" style="overflow-y: auto; position: relative; width: 100%;" >
<%=getMenu(m_HH["menuHash"]) %>
<div class="am-u-sm-12" style="padding: 0px; bottom: 0px; position: absolute; z-index: -1; width: 280px;">
<img class="am-u-sm-12" style="padding: 0px;" src="<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/pic/企业文化.png">
</div>
</div>
</div>
<!-- sidebar end -->
<style type="text/css">
.admin-content .tabpanel_move_content {
padding-left: 134px;
}
.admin-content {
margin-left: -134px;
}
.admin-sidebar-list {
width: 280px;
}
.am-topbar-nav > li.am-active > a, .am-topbar-nav > li.am-active > a:focus, .am-topbar-nav > li.am-active > a:hover {
color: #fff;
}
.am-dropdown-content {
z-index: 9999;
}
</style>
CoreSYSFooter.aspx
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="CoreSYS" %>
<%@ Assembly Name="JsonBase" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="CoreSYS" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<%string sError; %>
<%
string urlBefore = GetResourceUrl(HttpContext.Current);
string ModeUrl = urlBefore + MainViewPath;
Hashtable m_HH = new Hashtable();
string HeadUrl = "";
bool bIM = false;
Hashtable[] m_erweima = null;
string linkto = "", title = "";
if (Model != null)
{
JsonHelper.OBJToHashTable(Model, m_HH);
try
{
m_erweima = (Hashtable[])m_HH["erweima"];
}
catch
{
m_erweima = null;
}
if (m_HH.ContainsKey("linkto"))
{
linkto = m_HH["linkto"].ToString();
linkto = linkto.Replace(".aspx", ".ajax");
}
if (m_HH.ContainsKey("title"))
{
title = m_HH["title"].ToString();
}
if(m_HH.ContainsKey("HeadUrl"))
{
HeadUrl = m_HH["HeadUrl"].ToString();
}
}
%>
</div>
<!-- content end -->
<a class="am-icon-btn am-icon-th-list am-show-sm-only admin-menu" data-am-offcanvas="{target: '#admin-offcanvas'}" style="bottom:100px;background: #0e90d2;color: white;
}"></a>
<!--
<div style="position: fixed; bottom: 0px; width: 100%;" id="footer">
<div style="border-top: 1px solid #ddd; padding: 10px; margin-top: 2px; text-align: right;">© 2014 AllMobilize, Inc. Licensed under MIT license.</div>
</div>
-->
<div id="doc-oc-demo3" class="am-offcanvas">
<div class="am-offcanvas-bar am-offcanvas-bar-flip" style="background-color: #eee; border: 1px; width: 240px;">
<div class="am-offcanvas-content">
<h2>客户端应用下载</h2>
<% if (m_erweima != null)
{
foreach (var item in m_erweima)
{
%>
<div style="float: right; text-align: center;">
<img title="<%=item["appmemo"] %>" src='<%=item["codeurl"] %>' style="width: 220px;">
<br />
<br />
请扫描以上二维码或<br />
<a href='/CoreSYS.SYS/DownApplication.ajax?appname=<%=item["appname"] %>' style="text-decoration: none; color: red;">点击下载</a><%=item["appmemo"] %>
</div>
<br />
<%}
} %>
</div>
</div>
</div>
<div id="doc-oc-document" class="am-offcanvas">
<div class="am-offcanvas-bar am-offcanvas-bar-flip" style="background-color: #eee; border: 1px; width: 240px;">
<div class="am-offcanvas-content">
<h2>用户手册下载</h2>
<% if (HavePower("NFCLock.BaseNFCLock", "*", false, out sError))
{
%>
<div style="float: right; text-align: center;">
<i class="am-icon-lock"></i>
<a href='<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/document/电子锁(PC)指南amazeui.docx' style="text-decoration: none; color: red;">点击此处</a>下载电子锁(PC)帮助文档
</div>
<div style="float: right; text-align: center;">
<i class="am-icon-lock"></i>
<a href='<%=GetResourceUrl(HttpContext.Current)%>/public/amazeui/amazeui_Defined/document/电子锁(手持端)指南.doc' style="text-decoration: none; color: red;">点击此处</a>下载电子锁(手持端)帮助文档
</div>
<br />
<%
} %>
</div>
</div>
</div>
<div style="position: fixed;top: 15rem; width:260px;height:3rem; background-color:#5e5e5e;
line-height:3rem;display:none; z-index:99999;" id="m_PushTips">
<p style="font-size:14px;color:#fff;">
<img id="msgPic" src="" style="width:2em;height:2em; float:left;border-radius:10px;margin-top:1px;"><span id="msgText"></span></p></div>
<div style="position: fixed;display:none;top: 4.2rem; width:100%;background-color:#efefef;
line-height:1.8rem; z-index:99998;" id="m_notifyRong">
<p style="font-size:14px;color:#000;">
<img id="notifyPic" src="" style="width:2em;height:2em; float:left;border-radius:10px;margin-top:1px;"><span id="notifyText"></span></p></div>
<div style="position: fixed; bottom: 20px; right: 18px;" id="msgRong">
<p class="am-icon-bell-o am-icon-btn am-primary shopcarlogo myCart" style="margin: 0; color:#e7f515;background-color: #029292;" id="msgRongP"><span class="cartProCnt" id="msgCount">0</span></p>
</div>
<script>
function openApp() {
$('#doc-oc-demo3').offCanvas('open');
}
function closeApp() {
$('#doc-oc-demo3').offCanvas('close');
}
function openDocument() {
$('#doc-oc-document').offCanvas('open');
}
</script>
<!--[if lt IE 9]>
<script src="<%=GetResourceUrl(HttpContext.Current)%>http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>http://cdn.staticfile.org/modernizr/2.8.3/modernizr.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>amazeui/js/polyfill/rem.min.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>amazeui/js/polyfill/respond.min.js"></script>
<script src="<%=GetResourceUrl(HttpContext.Current)%>amazeui/js/amazeui.legacy.js"></script>
<![endif]-->
</body>
<script>
function change(s) {
var m_OBJ = {};
var m_Parame = {};
m_OBJ.m_Parame = {};
m_Parame.tmpview = s;
m_OBJ.m_Parame.m_Parame = m_Parame;
var str = JSON.stringify(m_OBJ);
$.post("/CoreSYS.SYS/chTmpView.ajax", str, ReturnFace, "json");
}
function changelanguage(s) {
var m_OBJ = {};
var m_Parame = {};
m_OBJ.m_Parame = {};
m_Parame.语言 = s;
m_OBJ.m_Parame.m_Parame = m_Parame;
var str = JSON.stringify(m_OBJ);
$.post("/CoreSYS.SYS/ChangeFace.ajax", str, ReturnFace, "json");
}
function ReturnFace(m_Return) {
if (m_Return.bOK) {
window.location.href = "/CoreSYS.SYS/main.aspx";
}
}
function backFrame() {
//$('#indexFrame')[0].history.go(-1);
//document.frames('indexFrame').history.back()
//console.log(document.frames['indexFrame']);
var m_NowTab = tabpanel.getActiveTab();
var iframes = m_NowTab.content.find('iframe');
//console.log("id:" + id);
//var _iframe1 = document.getElementById('indexFrame');
//_iframe1.contentWindow.history.back();
iframes[0].contentWindow.history.back();
}
function outFrame() {
var m_NowTab = tabpanel.getActiveTab();
var iframes = m_NowTab.content.find('iframe');
//console.log("id:" + id);
//var _iframe1 = document.getElementById('indexFrame');
//_iframe1.contentWindow.history.back();
window.open(iframes[0].src);
}
//生成从minNum到maxNum的随机数
function randomNum(minNum, maxNum) {
switch (arguments.length) {
case 1:
return parseInt(Math.random() * minNum + 1, 10);
break;
case 2:
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
break;
default:
return 0;
break;
}
}
function ShowMessage(msg) {
try{
var m_Data = JSON.parse(msg);
if (m_Data.html != undefined && m_Data.html != "") {
var html = m_Data.html;
var nB = html.indexOf("?LGKey");
var nE = html.indexOf("&title=");
if (nB != -1 && nE != -1) {
html = m_Data.html.substr(0, nB + 1) + m_Data.html.substr(nE + 1);
}
$("#m_notifyRong").html(html);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#m_notifyRong').html("");
}, m_Data.delay * 1000);
}
else {
var HTMLString = '<p style="font-size:14px;color:#000;"><img id="notifyPic" src="" style="width:2em;height:2em; float:left;border-radius:10px;margin-top:1px;"><span id="notifyText"></span></p>';
$("#m_notifyRong").html(HTMLString);
$('#notifyPic')[0].src = m_Data.picurl;
$('#notifyText').html(m_Data.memo);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#notifyPic')[0].src = "";
$('#notifyText').html("");
}, m_Data.delay * 1000);
}
}
catch(r)
{
$("#m_notifyRong").html(msg);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#m_notifyRong').html("");
},2 * 1000);
}
}
function ShowCnt() {
if ($('#count').text() == "") {
$('#count').text(1);
$('#msgCount').text(1);
return;
}
var nn = parseInt($('#count').text()) + 1;
$('#count').text(nn);
$('#msgCount').text(nn);
}
function ClearCnt()
{
$('#count').text("0");
$('#msgCount').text("0");
}
function StartMQTT() {
<%
if (GetSessionLink() != null)
{
%>
var m_FrameMQTT = new FrameMQTT("<%=HeadUrl%>", function (message) {
console.log("onMessageArrived Data:" + message.payloadString);
console.log("onMessageArrived destinationName:" + message.destinationName);
var msgName = message.destinationName;
var msgArray = msgName.split("/");
var fromName = "",msgMqttType="";
if (msgArray.length >= 5) {
msgName = "/" + msgArray[1] + "/" + msgArray[2] + "/" + msgArray[4];
fromName = msgArray[3];
msgMqttType = msgArray[1];
}
switch (message.destinationName) {
case "/s2p/neworder/all":
{
var m_Data = JSON.parse(message.payloadString)
var top = randomNum(4, 16) + "rem";
var left = randomNum(0, 12) + "rem";
$("#m_PushTips").css({ "top": top, "left": left });
$('#msgPic')[0].src = m_Data.picurl;
$('#msgText').html(m_Data.memo);
$("#m_PushTips").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_PushTips").hide(100);
$('#msgPic')[0].src = "";
$('#msgText').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
break;
case "/s2p/notify/all":
{
var m_Data = JSON.parse(message.payloadString);
if (m_Data.html != undefined && m_Data.html != "") {
$("#m_notifyRong").html(m_Data.html);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#m_notifyRong').html("");
}, m_Data.delay * 1000);
}
else {
var HTMLString = '<p style="font-size:14px;color:#000;"><img id="notifyPic" src="" style="width:2em;height:2em; float:left;border-radius:10px;margin-top:1px;"><span id="notifyText"></span></p>';
$("#m_notifyRong").html(HTMLString);
$('#notifyPic')[0].src = m_Data.picurl;
$('#notifyText').html(m_Data.memo);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#notifyPic')[0].src = "";
$('#notifyText').html("");
}, m_Data.delay * 1000);
}
ShowCnt();
}
break;
default:
{
if (message.destinationName.indexOf("/s2p/neworder/site") != -1) {
var m_Data = JSON.parse(message.payloadString)
var top = randomNum(4, 16) + "rem";
var left = randomNum(0, 12) + "rem";
$("#m_PushTips").css({ "top": top, "left": left });
$('#msgPic')[0].src = m_Data.picurl;
$('#msgText').html(m_Data.memo);
$("#m_PushTips").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_PushTips").hide(100);
$('#msgPic')[0].src = "";
$('#msgText').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
if (message.destinationName.indexOf("/s2p/notify/site") != -1) {
var m_Data = JSON.parse(message.payloadString);
if (m_Data.html != undefined && m_Data.html != "") {
$("#m_notifyRong").html(m_Data.html);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#m_notifyRong').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
else {
var HTMLString = '<p style="font-size:14px;color:#000;"><img id="notifyPic" src="" style="width:2em;height:2em; float:left;border-radius:10px;margin-top:1px;"><span id="notifyText"></span></p>';
$("#m_notifyRong").html(HTMLString);
$('#notifyPic')[0].src = m_Data.picurl;
$('#notifyText').html(m_Data.memo);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#notifyPic')[0].src = "";
$('#notifyText').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
}
if (message.destinationName.indexOf("/s2p/notify/person") != -1) {
var m_Data = JSON.parse(message.payloadString);
if (m_Data.html != undefined && m_Data.html != "") {
$("#m_notifyRong").html(m_Data.html);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#m_notifyRong').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
else {
var HTMLString = '<p style="font-size:14px;color:#000;"><img id="notifyPic" src="" style="width:2em;height:2em; float:left;border-radius:10px;margin-top:1px;"><span id="notifyText"></span></p>';
$("#m_notifyRong").html(HTMLString);
$('#notifyPic')[0].src = m_Data.picurl;
$('#notifyText').html(m_Data.memo);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#notifyPic')[0].src = "";
$('#notifyText').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
}
else
{
switch (msgMqttType) {
case "s2p":
{
var m_Data = JSON.parse(message.payloadString);
var top = "50px";// randomNum(4, 16) + "rem";
var left = ($('body').width() - 360) / 2 + "px"; //randomNum(0, 12) + "rem";
$("#m_notifyRong").css({ "top": top, "left": left });
if (m_Data.html != undefined && m_Data.html != "") {
$("#m_notifyRong").html(m_Data.html);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#m_notifyRong').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
else {
var HTMLString = '<p style="font-size:14px;color:#000;"><img id="notifyPic" src="" style="width:2em;height:2em; float:left;border-radius:10px;margin-top:1px;"><span id="notifyText"></span></p>';
$("#m_notifyRong").html(HTMLString);
$('#notifyPic')[0].src = m_Data.picurl;
$('#notifyText').html(m_Data.memo);
$("#m_notifyRong").show(200); //如果元素为隐藏,则将它显现
setTimeout(function () {
$("#m_notifyRong").hide(100);
$('#notifyPic')[0].src = "";
$('#notifyText').html("");
}, m_Data.delay * 1000);
ShowCnt();
}
}
break;
}
}
}
break;
}
});
m_FrameMQTT.initMQTT(function (bok, sMsg) {
Console.log(sMsg);
});
setInterval(function () {
var m_MsgOBJ = {};
m_MsgOBJ.time = new Date().getTime();
m_FrameMQTT.sendMessage("/p2s/gpsdata/all", JSON.stringify(m_MsgOBJ));
}, 60000);
<%
}
%>
}
function InitWeb()
{
$.ajax({
type: "GET",
url: "/CoreSYS.SYS/GetRecvMessage_RawJson.ajax?bpost=False",
dataType: 'json',
success: function (result) {
if (result.bOK == false) {
$.alert({ content: result.sMsg });
} else {
$('#count').text(result.total);
$('#msgCount').text(result.total);
}
}
});
<%if(!string.IsNullOrEmpty(linkto))
{%>
try {
$('#admin-offcanvas').offCanvas('close');
$.msgprogress({ msg: '正在获得页面-<%=title%>...' });
$.ajax({
url: "<%=linkto%>",//"/CoreSYS.SYS/managearticle.ajax",
dataType: 'json',
type: 'post',
success: function (res) {
$.msgprogress('close');
try {
if (res.bOK) {
$('#m_Header').show();
$('#firstPageRong').remove();
myGoodPageOpts = null;
$('#amz-toolbar-plus').show();
$('#m_HeaderName').text('<%=title%>');
$('#m_serchForm').empty();
$('#m_serchForm').append(res.m_ReturnOBJ.menu);
$("#pageScript").remove();
var newScript = document.createElement('script');
$(newScript).attr("id", "pageScript");
newScript.type = 'text/javascript';
newScript.innerHTML = res.m_ReturnOBJ.js;
document.body.appendChild(newScript);
if (res.m_ReturnOBJ.html != "" && res.m_ReturnOBJ.html != null && res.m_ReturnOBJ.html != undefined) {
$('#edit').html(res.m_ReturnOBJ.html);
}
else {
$('#edit').html('');
}
}
else {
$.alert({ content: '加载失败:' + res.sMsg });
}
}
catch (r) {
}
}
});
}
catch (ex) {
alert(ex);
}
<%
} %>
StartMQTT();
}
var u = navigator.userAgent;
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
$(function () {
if(!isiOS)
InitWeb();
});
if(isiOS)
{
setTimeout(function () {
//alert('<%=linkto%>');
InitWeb();
}, 1000);
}
</script>
<%if (bIM)
{
Hashtable m_nullHH = new Hashtable();
m_nullHH["bIM"] = true;
%>
<%=RenderModeHTML("IMessage","IMFragment",m_nullHH)%>
<%
}%>
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/polyfill.min.js"></script>
<!-- hiprint 核心js-->
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/hiprint.bundle.js"></script>
<!-- 条形码生成组件-->
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/plugins/JsBarcode.all.min.js"></script>
<!-- 二维码生成组件-->
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/plugins/qrcode.js"></script>
<!-- 调用浏览器打印窗口helper类,可自行替换-->
<script src="<%=GetResourceUrl(HttpContext.Current)%>/public/share/plugin/hiprint/plugins/jquery.hiwprint.js"></script>
</html>
NULLContent.aspx
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="CoreSYS" %>
<%@ Assembly Name="JsonBase" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="CoreSYS" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<%string sError; %>
<%
string urlBefore = GetResourceUrl(HttpContext.Current);
string ModeUrl = urlBefore + MainViewPath;
string HeadUrl = "";
Hashtable m_HH = (Hashtable)Model;
string MainClass=m_HH["MainClass"].ToString();
string MainFunction=m_HH["MainFunction"].ToString();
%>
<!-- content start -->
<div class="admin-content" id="content" style="height: 100%; position: relative; margin-left: 0px;">
<!--HTML管理嵌入开始-->
<!--嵌入mobileList区域开始-->
<header class="am-header am-header-default" style="background-color: #f3f3f3;display:none;" id="m_Header" >
<div class="am-header-left am-header-nav">
</div>
<h1 class="am-header-title huiwu">
<a id="m_HeaderName">手机端后台管理
</a>
</h1>
</header>
<div id="menuRong">
<nav data-am-widget="menu" id="menu" class="am-menu am-menu-offcanvas1" data-am-menu-offcanvas>
<a href="javascript: void(0)" class="am-menu-toggle" style="color: #666">
<i class="am-menu-toggle-icon am-icon-filter"></i>
</a>
<div class="am-offcanvas">
<div class="am-offcanvas-bar am-offcanvas-bar-flip">
<form class="serchForm" id="m_serchForm">
</form>
<div class="am-avg-sm-2 am-u-sm-12" style="bottom: 0px; position: fixed; text-align: center; line-height: 50px;">
<div class="am-u-sm-6" style="background-color: #e6e6e6; color: #555" onclick="clearSearch()">重置</div>
<div class="am-u-sm-6" style="background-color: #c69000; color: #ffffff" onclick="search()">确定</div>
</div>
</div>
</div>
</nav>
</div>
<div id="firstPageRong">
<%=RenderModeHTML(MainClass, MainFunction, null)%>
</div>
<div id="mobileltop"></div>
<div id="mobilelist"></div>
<div id="edit"></div>
<div id="popWindow"></div>
<div id="popWindowIn"></div>
<!--嵌入mobilelist区域结束-->
</div>
<!--添加按钮区域开始-->
<div class="amz-toolbar" id="amz-toolbar-plus" style="position: fixed; bottom: 100px; left: 1rem; display: none;" >
<a href="javascript:void(0);" onclick="add();" style="background-color: #0e90d2; color: white; display:none;" class="am-icon-plus am-icon-btn" id="m_addToolBT"></a>
<a href="javascript:void(0);" onclick="DownImportFile();" style="background-color: rgb(220, 17, 115); color: white;display:none;" class="am-icon-file-text-o am-icon-btn" id="m_downImportFileToolBT"></a>
<a href="javascript:void(0);" onclick="Import();" style="background-color: #0ed25a; color: white;display:none;" class="am-icon-cloud-upload am-icon-btn" id="m_importToolBT"></a>
<a href="javascript:void(0);" onclick="Export();" style="background-color: #F37B1D; color: white;display:none;" class="am-icon-download am-icon-btn" id="m_exportToolBT""></a>
</div>
<!--添加按钮区域结束-->
<!--HTML管理嵌入结束-->
<!--后续javascript代码开始-->
<script>
var myGoodPageOpts = null;
function search() {
try {
$('#menu').find('.am-offcanvas').offCanvas('close');
$('#menu').find('.am-menu-sub.am-in').removeClass('am-in');
$('#menu').find('.am-parent').show();
if (myGoodPageOpts!=null)
myGoodPageOpts.mobilelist('load', $.serializeObject($('.serchForm')));
} catch (r) {
}
}
function clearSearch() {
try {
$('#menu').find('.am-offcanvas').offCanvas('close');
$('#menu').find('.am-menu-sub.am-in').removeClass('am-in');
$('#menu').find('.am-parent').show();
$('#menu').mobileSearch('clear');
if (myGoodPageOpts != null)
myGoodPageOpts.mobilelist('load');
}
catch (r) {
}
}
function add() {
}
function InitList() {
$('#menu').find('.am-parent').bind('click', function () {
var _this = this;
setTimeout(function () {
var isShow = $(_this).find('.am-menu-sub').hasClass('am-in');
if (isShow) {
$(_this).siblings().hide();
} else {
$(_this).siblings().show();
}
}, 300);
});
return;
try {
myGoodPageOpts = $('#mobilelist').mobilelist({
url: '',
nPageIndex: 1,
nPageSize: 10,
translate: []
});
}
catch (r) {
}
}
setTimeout(InitList, 200);
</script>
<!--后续javascript代码结束-->
PhoneMain.aspx
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="CoreSYS" %>
<%@ Assembly Name="JsonBase" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="CoreSYS" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<%string sError; %>
<%
string urlBefore = GetResourceUrl(HttpContext.Current);
string ModeUrl = urlBefore + MainViewPath;
string HeadUrl = "";
%>
<div class="banner" style="margin: 0px auto;">
<img src="/JsonMode/软件服务/View/amazeui/public/images/about.jpg" style="width:100%;">
</div>
<div class="content_1">
<div class="header" style="width: 80%;
font-size: 2rem;
padding-top: 35px;
padding-bottom: 15px;
margin: 0px auto;
border: 1px solid #c1c1c1;
border-right-width: 0px;
border-left-width: 0px;
border-top-width: 0px;
text-align: center;">
<h4>关于作者</h4>
</div>
<div class="content-text" style="width: 80%; margin: 10px auto;
margin-bottom: 15px;
overflow: hidden;
text-align: left;">
<p>
一个在一线开发摸爬滚动多年的非科班老码农,曾主导开发校园一卡通、远程监控、电信数字语音信箱开发平台、医疗信息化集成、RFID防伪防盗等行业软件,2003-2008年曾开发一款十字绣图制作共享软件,现重拾共享软件领域期待您的支持!
</p>
</div>
</div>
ctlList.js
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="CoreSYS" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="CoreSYS" %>
<%@ Import Namespace="SaleData" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<script language="C# " runat="server">
public Object getModel()
{
return this.Model;
}
</script>
<script>
<%
Hashtable m_ModuleHH = (Hashtable)getModel();
string aeaa_discenters_nodeuuid = "";
string sys_companys_nodeuuid = "";
string company = "";
string sError;
string pageName = "phonePage";
try
{
if (m_ModuleHH.ContainsKey("aeaa_discenters_nodeuuid"))
{
aeaa_discenters_nodeuuid = m_ModuleHH["aeaa_discenters_nodeuuid"].ToString();
}
if (m_ModuleHH.ContainsKey("sys_companys_nodeuuid"))
{
sys_companys_nodeuuid = m_ModuleHH["sys_companys_nodeuuid"].ToString();
}
if (m_ModuleHH.ContainsKey("company"))
{
company = m_ModuleHH["company"].ToString();
}
if (m_ModuleHH.ContainsKey("pageName"))
{
pageName = m_ModuleHH["pageName"].ToString();// "AeaaCTLPageaspx_ctlListTab";
}
}
catch (Exception eee)
{
}
string urlBefore = GetResourceUrl(HttpContext.Current);
SessionLink m_SessionLink = GetSessionLink();
bool bCanAdd = false, bCanEdit = false, bCanDel = false, bCanExport = false, bCanImport = false;
bool bHaveFile = false;
string nowurl = "";
OneUpFileWEB m_OneUpFileWEB = new OneUpFileWEB();
string sUpFileUrl = "";
Hashtable m_ModeHH = null;
try
{
m_ModeHH = (Hashtable)getModel();
if (m_ModeHH.ContainsKey("nowurl"))
{
nowurl = m_ModeHH["nowurl"].ToString();
}
}
catch (Exception ee)
{
}
if (HavePower("Aeaa", "AddDev", false, out sError))
{
if (HavePower("Aeaa", "AddDev_Any", false, out sError))
{
bCanAdd = true;
}
else
{
if (HavePower("Aeaa", "AddDev_HY", true, out sError))
{
bCanAdd = true;
}
else
{
if (HavePower("Aeaa", "AddDev_Company", true, out sError))
{
bCanAdd = true;
}
else
{
if (HavePower("Aeaa", "AddDev_Org", true, out sError))
{
bCanAdd = true;
}
else
{
}
}
}
}
}
if (HavePower("Aeaa", "EditDev", false, out sError))
{
if (HavePower("Aeaa", "EditDev_Any", false, out sError))
{
bCanEdit = true;
}
else
{
if (HavePower("Aeaa", "EditDev_HY", true, out sError))
{
bCanEdit = true;
}
else
{
if (HavePower("Aeaa", "EditDev_Company", true, out sError))
{
bCanEdit = true;
}
else
{
if (HavePower("Aeaa", "EditDev_Org", true, out sError))
{
bCanEdit = true;
}
else
{
}
}
}
}
}
if (HavePower("Aeaa", "DelDev", false, out sError))
{
if (HavePower("Aeaa", "DelDev_Any", false, out sError))
{
bCanDel = true;
}
else
{
if (HavePower("Aeaa", "DelDev_HY", true, out sError))
{
bCanDel = true;
}
else
{
if (HavePower("Aeaa", "DelDev_Company", true, out sError))
{
bCanDel = true;
}
else
{
if (HavePower("Aeaa", "DelDev_Org", true, out sError))
{
bCanDel = true;
}
else
{
}
}
}
}
}
%>
var myGoodPageOpts;
var m_CompanyData = [];
var m_ynData = [{ "value": true, "text": "是" }, { "value": false, "text": "否" }];
var m_comTypeData = [{ "value": 'LORA', "text": "LOAR" }, { "value": "TCP", "text": "TCP" }];
var row = null;
//totip提示框处理 val数据 len toTip数据的最小长度
function formatVal(val, len) {
if (val == null) return '';
if (val.length > len) {
return '<span title="' + val + '" class="easyui-tooltip" style="text-decoration:none; color:default; cursor:default ;">' + val + '</span>'
} else {
return val;
}
}
function getDateString() {
var oDate = new Date(); //实例一个时间对象;
var nYear = oDate.getFullYear(); //获取系统的年;
var nMonth = oDate.getMonth() + 1; //获取系统月份,由于月份是从0开始计算,所以要加1
var nDay = oDate.getDate(); // 获取系统日
var sYear = nYear + "-";
if (nMonth < 10) sYear += "0";
sYear += nMonth + "-";
if (nDay < 10) sYear += "0";
sYear += nDay;
return sYear;
}
var row = null;
var content = $('<form class="am-form am-form-horizontal" style="width:100%" id="form">' +
'<input class="am-modal-prompt-input" type="hidden" name="type" id="type" placeholder="" />' +
'<input class="am-modal-prompt-input" type="hidden" name="aeaa_devs_nodeuuid" id="aeaa_devs_nodeuuid" placeholder="设备id" />' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">企业名</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" placeholder="请输入企业名" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">分中心编号</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="aeaa_discenters_nodeuuid" id="aeaa_discenters_nodeuuid" placeholder="请输入分中心编号" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">编号(最长6个字符)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="devno" id="devno" placeholder="请输入控制器编号" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">描述</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="devmemo" id="devmemo" placeholder="请输入控制器描述" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">通讯方式</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="comtype" id="comtype" placeholder="请输入控制器位置" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">位置</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="address" id="address" placeholder="请输入控制器位置" />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">经度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="lng" id="lng" readonly />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">纬度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="text" name="lat" id="lat" readonly />' +
'</div>' +
'</div>' +
'<div class="am-form-group">' +
'<label for="tradename" class="am-u-sm-12 am-form-label" style="width: 100%;" id="m_pointBT">点击设置坐标</label>' +
'</div>' +
'</form>'
);
function HideContent(bAdd) {
if (bAdd) {
content.find('#type').val('add');
}
else {
content.find('#type').val('edit');
}
}
function setPoint(lng, lat) {
content.find('#lng').val(lng);
content.find('#lat').val(lat);
}
<%if(bCanAdd){%>
function add() {
content.find("input,select").val("");
content.find("#comtype").combox({
url: '',
selectDataContainer: content.find('#comtype'),
data: m_comTypeData,
text: 'text',
value: 'value',
onSelect: function () {
},
onSuccess: function () {
},
});
content.find("#sys_companys_nodeuuid").next().removeAttr('disabled');
content.find("#aeaa_discenters_nodeuuid").next().removeAttr('disabled');
content.find("input,select").val("");
initContent();
HideContent(true);
confirm('新增控制器记录');
}
<%}%>
<%if(bCanEdit){%>
function edit(data) {
row = data;
content.find("input,select").val("");
content.find("#comtype").combox({
url: '',
selectDataContainer: content.find('#comtype'),
data: m_comTypeData,
text: 'text',
value: 'value',
onSelect: function () {
},
onSuccess: function () {
},
});
content.find("#sys_companys_nodeuuid").next().removeAttr('disabled');
content.find("#aeaa_discenters_nodeuuid").next().removeAttr('disabled');
content.find("input,select").val("");
content.find("#sys_companys_nodeuuid").next().attr('disabled', true);
initContent();
HideContent(false);
confirm('编辑控制器记录');
}
<%}%>
function initContent() {
if (row != null) {
content.find("#sys_companys_nodeuuid").next().removeAttr('disabled');
content.find("#aeaa_discenters_nodeuuid").next().removeAttr('disabled');
content.find("input,select").val("");
content.find("#aeaa_devs_nodeuuid").val(row.aeaa_devs_nodeuuid);
content.find('#devno').val(row.devno);
content.find('#devmemo').val(row.devmemo);
content.find('#lng').val(row.lng);
content.find('#lat').val(row.lat);
content.find('#address').val(row.address);
content.find('#comtype').combox('setValue', row.comtype);
content.find('#m_pointBT').unbind("click");
content.find('#m_pointBT').click(function () {
var iframeMode = $('<iframe src="/Aeaa/selectMap.aspx?city=乌鲁木齐&callback=setPoint&iframename=<%=pageName%>&aeaa_devs_nodeuuid=' + row.aeaa_devs_nodeuuid + '" width="100%" height="460px;" frameborder="0" name="selectMAP"></iframe>');
$('#modeWindow').window({
content: iframeMode,
title: '设置经纬度',
width: document.body.clientWidth - 10,
noButton: true,
});
});
content.find("#aeaa_discenters_nodeuuid").combox({
url: "",
selectDataContainer: content.find("#aeaa_discenters_nodeuuid"),
text: 'disname',
value: 'aeaa_discenters_nodeuuid',
data: [],
});
content.find("#sys_companys_nodeuuid").combox(
{
url: "",
selectDataContainer: content.find("#sys_companys_nodeuuid"),
text: 'company',
value: 'sys_companys_nodeuuid',
data: m_CompanyData,
onSelect: function () {
content.find("#aeaa_discenters_nodeuuid").combox({
url: "/Aeaa/GetSelectDisName_RawJson.ajax?sys_companys_nodeuuid=" + content.find('#sys_companys_nodeuuid').val(),//企业
selectDataContainer: content.find("#aeaa_discenters_nodeuuid"),
text: 'disname',
value: 'aeaa_discenters_nodeuuid',
width: 143,
onSuccess: function () {
content.find("#aeaa_discenters_nodeuuid").combox('setValue', row.aeaa_discenters_nodeuuid);
content.find("#sys_companys_nodeuuid").next().attr('disabled', true);
//contentDev.find("#aeaa_discenters_nodeuuid").next().attr('disabled', true);
},
});
},
});
content.find("#sys_companys_nodeuuid").combox('setValue', row.sys_companys_nodeuuid);
}
else
{
content.find('#m_pointBT').unbind("click");
content.find('#m_pointBT').click(function () {
var iframeMode = $('<iframe src="/Aeaa/selectMap.aspx?city=乌鲁木齐&callback=setPoint&iframename=<%=pageName%>&aeaa_discenters_nodeuuid=' + content.find("#aeaa_discenters_nodeuuid").val() + '" width="100%" height="460px;" frameborder="0" name="selectMAP"></iframe>');
$('#modeWindow').window({
content: iframeMode,
title: '设置经纬度',
//width: 1000,
width: document.body.clientWidth - 10,
noButton: true,
});
});
content.find("#aeaa_discenters_nodeuuid").combox({
url: "",
selectDataContainer: content.find("#aeaa_discenters_nodeuuid"),
text: 'disname',
value: 'aeaa_discenters_nodeuuid',
data: [],
});
content.find("#sys_companys_nodeuuid").combox(
{
url: "",
selectDataContainer: content.find("#sys_companys_nodeuuid"),
text: 'company',
value: 'sys_companys_nodeuuid',
data: m_CompanyData,
onSelect: function () {
content.find("#aeaa_discenters_nodeuuid").combox({
url: "/Aeaa/GetSelectDisName_RawJson.ajax?sys_companys_nodeuuid=" + content.find('#sys_companys_nodeuuid').val(),//企业
selectDataContainer: content.find("#aeaa_discenters_nodeuuid"),
text: 'disname',
value: 'aeaa_discenters_nodeuuid',
width: 143,
onSuccess: function () {
<%
if (!string.IsNullOrEmpty(aeaa_discenters_nodeuuid))
{%>
content.find("#aeaa_discenters_nodeuuid").combox('setValue', '<%=aeaa_discenters_nodeuuid%>');
content.find("#sys_companys_nodeuuid").next().attr('disabled', true);
content.find("#aeaa_discenters_nodeuuid").next().attr('disabled', true);
<%}%>
},
});
},
});
<%
if (!string.IsNullOrEmpty(sys_companys_nodeuuid))
{%>
content.find("#sys_companys_nodeuuid").combox('setValue', '<%=sys_companys_nodeuuid%>');
<%
}
%>
}
}
function confirm(title) {
$('#popWindow').window({
title: title,//窗口标题
content: content,
//width: 700,//弹出框宽度
width: document.body.clientWidth - 10,
onSuccess: function () {
var type = content.find('#type').val();
var url = '';
if (type == 'add') {
url = '<%=urlBefore%>/Aeaa/AddDev.ajax';
} else {
url = '<%=urlBefore%>/Aeaa/EditDev.ajax';
}
$.msgprogress({ msg: '正在' + title + '...' });
var options = {
url: url,
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
$('#popWindow').window('close');
myGoodPageOpts.mobilelist('reload');
} else {
$.alert({ content: result.sMsg });
}
}
}
$(content).ajaxSubmit(options);
},
onClose: function () {
},
onLoaded: function (guidID) {
setTimeout(function () {
var id = guidID + 'my-content';
var dom = document.getElementById(id);
console.log(dom);
var myScroll = new IScroll(dom, { mouseWheel: true, scrollY: true, scrollbars: true, freeScroll: true, /*click: true,*/ tap: true });
}, 200);
},
});
}
function InitList() {
initUI();
var sYear = getDateString();
$('#starttime').val(sYear);
$('#endtime').val(sYear);
$.ajax({
url: "/Aeaa/GetSelectCompany_RawJson.ajax",
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
m_CompanyData = result;
$('#sys_companys_nodeuuid').combox({
url: '',//企业
selectDataContainer: $('#sys_companys_nodeuuid'),
data: m_CompanyData,
text: 'company',
value: 'sys_companys_nodeuuid',
width: 143,
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
try {
if (typeof initOneFilter === 'function') {
initOneFilter('sys_companys_nodeuuid');
}
}
catch (r) {
}
}
});
}
})
var translateT = [{
name: "devno", displayName: "控制器编号", enabled: true, width: 70, headShow: true
}
, {
name: "devmemo", displayName: "控制器描述", enabled: true, width: 70
}
, { name: "comtype", displayName: "通讯方式", enabled: true, width: 70 }
, { name: "company", displayName: "所在企业", enabled: true, width: 70 }
, {
name: "isuse", displayName: "控制器启用状态", enabled: true, width: 100, format: "func", func: function (row) {
if (row.isuse) {
return "启用";
}
else {
return "禁用";
}
}
}
, { name: "createtime", displayName: "指令创建时间", enabled: true, format: "JsonDate", width: 100 }
];
var dropdownliT = [
<%if(bCanEdit){%>
{
displayName: "查询操作记录", func: function (row) {
DevActionRecord(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "打开控制阀门", func: function (row) {
OpenDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "关闭控制阀门", func: function (row) {
CloseDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "查询控制器状态", func: function (row) {
AskDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "重置控制器", func: function (row) {
ResetDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "重启控制器", func: function (row) {
RestartDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "控制器休眠", func: function (row) {
SleepDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "唤醒控制器", func: function (row) {
WakeUpDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "编辑", func: function (row) {
edit(row)
}
, hidemenu: function (row) {
return false;
}
}
,
{
displayName: "配置IO口", func: function (row) {
ConfigIO(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "禁用控制器", func: function (row) {
NoUseDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return false;
}
else {
return true;
}
}
}
,
{
displayName: "启用控制器", func: function (row) {
UseDev(row)
}
, hidemenu: function (row) {
if (row.isuse) {
return true;
}
else {
return false;
}
}
}
,
<%}%>
<%if(bCanDel){%>
{
displayName: "删除", func: function (row) {
$.confirm({
title: '提示',
content: '您确定要删除吗?<br/><span style="color:red;"> 删除后不可恢复.</span>',
onSuccess: function () {
$.msgprogress({ msg: '正在删除...' });
$.ajax({
url: '/Aeaa/DelDev.ajax?aeaa_devs_nodeuuid=' + row.aeaa_devs_nodeuuid + '',
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK == false) {
alert(result.sMsg);
} else {
myGoodPageOpts.mobilelist('reload');
}
}
})
},
});
}
, hidemenu: function (row) {
return false;
}
}
<%}%>
];
myGoodPageOpts = $('#mobilelist').mobilelist({
url: '/Aeaa/GetDevs_RawJson.ajax?aeaa_discenters_nodeuuid=<%=aeaa_discenters_nodeuuid%>',
nPageIndex: 1,//当前页
nPageSize: 10,//每页显示数据条数
callbacks: null,
translate: translateT,
dropdownli: dropdownliT,
});
readyFilter();
<%if (bCanAdd)
{
%>
$('#m_addToolBT').show();
<%
}%>
<%if (bCanImport)
{
%>
$('#m_importToolBT').show();
$('#m_downImportFileToolBT').show();
<%
}
else
{%>
$('#m_importToolBT').hide();
$('#m_downImportFileToolBT').hide();
<%}%>
<%if (bCanExport)
{
%>
$('#m_exportToolBT').show();
<%
}
else
{%>
$('#m_exportToolBT').hide();
<%}%>
var m_openCompanyDevDOM = $('<a href="javascript:void(0);" style="background-color: #0ed25b; color: white;font-size:24px;" class="am-icon-unlock am-icon-btn" id="m_orderToolBT""></a>');
var uid = insertDOM($('#amz-toolbar-plus'), m_openCompanyDevDOM);
$('#' + uid).click(function () {
/*
$.confirm({
title: '提示',//窗口标题
content: '确定要打开企业所有阀门吗?',//内容
onSuccess: function () {
}
});
*/
openCompanyDev();
});
var m_closeCompanyDevDOM = $('<a href="javascript:void(0);" style="background-color: #ff197d; color: white;font-size:24px;" class="am-icon-lock am-icon-btn" id="m_orderToolBT""></a>');
uid = insertDOM($('#amz-toolbar-plus'), m_closeCompanyDevDOM);
$('#' + uid).click(function () {
/*
$.confirm({
title: '提示',//窗口标题
content: '确定要关闭企业所有阀门吗?',//内容
onSuccess: function () {
}
});
*/
closeCompanyDev();
});
var m_BrCOM = $('<br>');
insertDOM($('#amz-toolbar-plus'), m_BrCOM);
var m_openCompanySelDevDOM = $('<a href="javascript:void(0);" style="background-color: #0ed25b; color: white;font-size:24px;" class="am-icon-hand-pointer-o am-icon-btn" id="m_orderToolBT""></a>');
var uid = insertDOM($('#amz-toolbar-plus'), m_openCompanySelDevDOM);
$('#' + uid).click(function () {
/*
$.confirm({
title: '提示',//窗口标题
content: '确定要打开企业所有阀门吗?',//内容
onSuccess: function () {
}
});
*/
openCompanySelDev();
});
var m_closeCompanySelDevDOM = $('<a href="javascript:void(0);" style="background-color: #ff197d; color: white;font-size:24px;" class="am-icon-hand-stop-o am-icon-btn" id="m_orderToolBT""></a>');
uid = insertDOM($('#amz-toolbar-plus'), m_closeCompanySelDevDOM);
$('#' + uid).click(function () {
/*
$.confirm({
title: '提示',//窗口标题
content: '确定要关闭企业所有阀门吗?',//内容
onSuccess: function () {
}
});
*/
closeCompanySelDev();
});
var m_openCompanyNoSelDevDOM = $('<a href="javascript:void(0);" style="background-color: #0ed25b; color: white;font-size:24px;" class="am-icon-hand-lizard-o am-icon-btn" id="m_orderToolBT""></a>');
var uid = insertDOM($('#amz-toolbar-plus'), m_openCompanyNoSelDevDOM);
$('#' + uid).click(function () {
/*
$.confirm({
title: '提示',//窗口标题
content: '确定要打开企业所有阀门吗?',//内容
onSuccess: function () {
}
});
*/
openCompanyNoSelDev();
});
var m_closeCompanyNoSelDevDOM = $('<a href="javascript:void(0);" style="background-color: #ff197d; color: white;font-size:24px;" class="am-icon-hand-rock-o am-icon-btn" id="m_orderToolBT""></a>');
uid = insertDOM($('#amz-toolbar-plus'), m_closeCompanyNoSelDevDOM);
$('#' + uid).click(function () {
/*
$.confirm({
title: '提示',//窗口标题
content: '确定要关闭企业所有阀门吗?',//内容
onSuccess: function () {
}
});
*/
closeCompanyNoSelDev();
});
}
var rowdata = null;
function getRow(pkName, pkValue) {
rowdata = null;
var rows = myGoodPageOpts.datagrid('getRows');
for (var i = 0; rows.length; i++) {
if (rows[i][pkName] == pkValue) {
rowdata = rows[i];
break;
}
}
return rowdata;
}
function search() {
myGoodPageOpts.mobilelist('load', $.serializeObject($('.serchForm')));
$('#menu').find('.am-offcanvas').offCanvas('close');
$('#menu').find('.am-menu-sub.am-in').removeClass('am-in');
$('#menu').find('.am-parent').show();
}
function clearSearch() {
$('#menu').mobileSearch('clear');
myGoodPageOpts.mobilelist('load');
}
function DevActionRecord(data)
{
var row = data;
var iframeMode = $('<iframe src="/Aeaa/PhoneIFrameDevActionRecord.aspx?aeaa_devs_nodeuuid=' + row.aeaa_devs_nodeuuid + '" width="100%" height="460px;" frameborder="0" ></iframe>');
$('#modeWindow').window({
content: iframeMode,
title: '获得设备-' + row.devno + '的操作记录',
width: document.body.clientWidth - 10,
noButton: true,
});
}
function ConfigIO(data)
{
var row = data;
var iframeMode = $('<iframe src="/Aeaa/PhoneIFrameConfigIO.aspx?aeaa_devs_nodeuuid=' + row.aeaa_devs_nodeuuid + '" width="100%" height="460px;" frameborder="0" ></iframe>');
$('#modeWindow').window({
content: iframeMode,
title: '设置设备-' + row.devno + '的IO',
width: document.body.clientWidth - 10,
noButton: true,
});
}
var contentDevSteer = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="aeaa_devs_nodeuuid" id="aeaa_devs_nodeuuid"/>' +
'<input type="hidden" name="open" id="open" value="true"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开时长(分钟,0表示手动控制关闭)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="opensecond" id="opensecond" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开角度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="angle" id="angle" placeholder="请输入打开角度" value="0" />' +
'</div>' +
'</div>' +
'</form>'
);
function OpenDev(data) {
var row = data;
var name = row.devno;
var aeaa_devs_nodeuuid = row.aeaa_devs_nodeuuid;
var title = '开控制器 - ' + name + ' - 所有阀门';
$(contentDevSteer).find('#aeaa_devs_nodeuuid').val(aeaa_devs_nodeuuid);
$(contentDevSteer).find('#opensecond').val('0');
$(contentDevSteer).find('#angle').val('90');
$('#windows').window({
title: title,//窗口标题
content: contentDevSteer,
//width: 700,//弹出框宽度
width:document.body.clientWidth - 10,
onSuccess: function () {
$.msgprogress({ msg: '正在打开控制器-' + name + '-所有阀门...' });
var options = {
url: "/Aeaa/ActionDevSteer.do",
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
$('#windows').window('close');
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentDevSteer).ajaxSubmit(options);
}
});
}
function CloseDev(data) {
var row = data;
var name = row.devno;
var aeaa_devs_nodeuuid = row.aeaa_devs_nodeuuid;
$.confirm({
title: '提示',
content: '确定要关闭控制器-' + name + "所有阀门吗?",
onSuccess: function () {
$.msgprogress({ msg: '正在关闭控制器-' + name + '-所有阀门...' });
$.ajax({
url: "/Aeaa/ActionDevSteer.do?aeaa_devs_nodeuuid=" + aeaa_devs_nodeuuid + "&open=false",
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
});
}
});
}
function AskDev(data) {
var row = data;
var aeaa_devs_nodeuuid = row.aeaa_devs_nodeuuid;
var devno = row.devno;
$.msgprogress({ msg: '正在查询控制器-' + devno + '-状态...' });
$.ajax({
url: "/Aeaa/askDevStatus.do?aeaa_devs_nodeuuid=" + aeaa_devs_nodeuuid,
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = "";
for (var i = 0; i < m_OBJ.djs.length ; i++) {
result.sMsg += "阀门序号:" + m_OBJ.djs[i].i + "<br>";
if (m_OBJ.djs[i].jd == 0) {
result.sMsg += "状态:关闭<br>";
result.sMsg += "<br>";
}
else {
result.sMsg += "状态:打开,角度:" + m_OBJ.djs[i].jd + "<br>";
if (m_OBJ.djs[i].sc != 0) {
result.sMsg += "阀门将在" + parseInt(m_OBJ.djs[i].sc / 60) + "分" + m_OBJ.djs[i].sc % 60 + "秒后自动关闭<br>";
if (m_OBJ.djs[i].lls.length > 0 || m_OBJ.djs[i].sds.length > 0 || m_OBJ.djs[i].wds.length > 0 || m_OBJ.djs[i].wsds.length > 0) {
result.sMsg += "其他自动关闭条件<br>";
}
}
else {
if (m_OBJ.djs[i].lls.length > 0 || m_OBJ.djs[i].sds.length > 0 || m_OBJ.djs[i].wds.length > 0 || m_OBJ.djs[i].wsds.length > 0) {
result.sMsg += "自动关闭条件<br>";
}
}
if (m_OBJ.djs[i].lls.length > 0) {
result.sMsg += "流量满足:" + m_OBJ.djs[i].lls.length + "个<br>";
for (var j = 0; j < m_OBJ.djs[i].lls.length; j++) {
result.sMsg += "流量" + j + ":" + m_OBJ.djs[i].lls[j].ll + "<br>";
}
}
if (m_OBJ.djs[i].sds.length > 0) {
result.sMsg += "湿度满足:" + m_OBJ.djs[i].sds.length + "个<br>";
for (var j = 0; j < m_OBJ.djs[i].sds.length; j++) {
result.sMsg += "湿度" + j + ":" + m_OBJ.djs[i].sds[j].sd + "<br>";
}
}
if (m_OBJ.djs[i].wds.length > 0) {
result.sMsg += "温度满足:" + m_OBJ.djs[i].wds.length + "个<br>";
for (var j = 0; j < m_OBJ.djs[i].wds.length; j++) {
result.sMsg += "温度" + j + ":" + m_OBJ.djs[i].wds[j].wd + "<br>";
}
}
if (m_OBJ.djs[i].wsds.length > 0) {
result.sMsg += "温湿度满足:" + m_OBJ.djs[i].wsds.length + "个<br>";
for (var j = 0; j < m_OBJ.djs[i].wsds.length; j++) {
result.sMsg += "温度" + j + ":" + m_OBJ.djs[i].wsds[j].wd + "<br>";
result.sMsg += "湿度" + j + ":" + m_OBJ.djs[i].wsds[j].sd + "<br>";
}
}
}
result.sMsg += "<br>";
}
if (m_OBJ.lls.length > 0 || m_OBJ.sds.length > 0 || m_OBJ.wds.length > 0 || m_OBJ.wsds.length > 0) {
result.sMsg += "<br>";
}
if (m_OBJ.lls.length > 0) {
result.sMsg += "流量传感器个数:" + m_OBJ.lls.length + "<br>";
for (var i = 0; i < m_OBJ.lls.length ; i++) {
result.sMsg += "流量传感器" + m_OBJ.lls[i].i + "-当前流量:" + m_OBJ.lls[i].ll + "<br>";
}
result.sMsg += "<br>";
}
if (m_OBJ.sds.length > 0) {
result.sMsg += "湿度传感器个数:" + m_OBJ.sds.length + "<br>";
for (var i = 0; i < m_OBJ.sds.length ; i++) {
result.sMsg += "湿度传感器" + m_OBJ.sds[i].i + "-当前湿度:" + m_OBJ.sds[i].sd + "<br>";
}
result.sMsg += "<br>";
}
if (m_OBJ.wds.length > 0) {
result.sMsg += "温度传感器个数:" + m_OBJ.wds.length + "<br>";
for (var i = 0; i < m_OBJ.wds.length ; i++) {
result.sMsg += "温度传感器" + m_OBJ.wds[i].i + "-当前温度:" + m_OBJ.wds[i].wd + "<br>";
}
result.sMsg += "<br>";
}
if (m_OBJ.wsds.length > 0) {
result.sMsg += "温湿度传感器个数:" + m_OBJ.wsds.length + "<br>";
for (var i = 0; i < m_OBJ.wsds.length ; i++) {
result.sMsg += "温湿度传感器" + m_OBJ.wsds[i].i + "-当前温度:" + m_OBJ.wsds[i].wd + ",当前湿度:" + m_OBJ.wsds[i].sd + "<br>";
}
result.sMsg += "<br>";
}
}
else {
if (m_OBJ.sMsg != "" && m_OBJ.sMsg != undefined)
result.sMsg = m_OBJ.sMsg;
else {
result.sMsg = "查询状态失败";
}
}
}
}
catch (r) {
console.log(r);
}
}
$.alert({ content: result.sMsg });
} else {
if (result.sMsg != "" && result.sMsg != undefined) {
$.alert({ content: result.sMsg });
}
else {
$.alert({ content: "命令执行返回异常" });
}
}
}
});
}
function ResetDev(data) {
var row = data;
var devno = row.devno;
var aeaa_devs_nodeuuid = row.aeaa_devs_nodeuuid;
$.confirm({
title: '提示',
content: '确定要重置控制器-' + devno + "吗?",
onSuccess: function () {
$.msgprogress({ msg: '正在重置控制器-' + devno + '-状态...' });
$.ajax({
url: "/Aeaa/resetDev.do?aeaa_devs_nodeuuid=" + aeaa_devs_nodeuuid,
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
});
},
});
}
function RestartDev(data) {
var row = data;
var devno = row.devno;
var aeaa_devs_nodeuuid = row.aeaa_devs_nodeuuid;
$.confirm({
title: '提示',
content: '确定要重启控制器-' + devno + "吗?",
onSuccess: function () {
$.msgprogress({ msg: '正在重启控制器-' + devno + '-状态...' });
$.ajax({
url: "/Aeaa/restartDev.do?aeaa_devs_nodeuuid=" + aeaa_devs_nodeuuid,
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
alert(result.sMsg);
} else {
alert(result.sMsg);
}
}
});
},
});
}
var contentDevSleep = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="aeaa_devs_nodeuuid" id="aeaa_devs_nodeuuid"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">休眠时长(秒)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="sleeps" id="sleeps" placeholder="输入休眠时长" value="5" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">活动时长(秒)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="lives" id="lives" placeholder="请输入活动时长" value="0" />' +
'</div>' +
'</div>' +
'</form>'
);
function SleepDev(data)
{
var title = '控制器 - ' + data.devno + ' - 休眠';
$(contentDevSleep).find('#aeaa_devs_nodeuuid').val(data.aeaa_devs_nodeuuid);
$(contentDevSleep).find('#sleeps').val('10');
$(contentDevSleep).find('#lives').val('15');
$('#windows').window({
title: title,//窗口标题
content: contentDevSleep,
//width: 700,//弹出框宽度
onSuccess: function () {
$.msgprogress({ msg: '正在控制控制器-' + data.devno + '-休眠...' });
var options = {
url: "/Aeaa/sleepDev.do",
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
$('#windows').window('close');
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
alert( result.sMsg );
} else {
alert(result.sMsg);
}
}
}
$(contentDevSleep).ajaxSubmit(options);
}
});
}
var wakeupBTime = new Date();
function realWakeUpDev(aeaa_devs_nodeuuid, devno) {
$.ajax({
url: "/Aeaa/wakeupDev.do?aeaa_devs_nodeuuid=" + aeaa_devs_nodeuuid,
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
$.msgprogress('close');
result.sMsg = m_OBJ.sMsg;
}
else {
if (new Date().getTime() - wakeupBTime.getTime() > 1000 * 60 * 15)//时间差的毫秒)
{
$.msgprogress('close');
alert(result.sMsg);
}
else {
setTimeout(function () {
realWakeUpDev(aeaa_devs_nodeuuid, devno);
}, 500);
}
}
}
}
catch (r) {
}
}
alert(result.sMsg);
} else {
//$.alert({ content: result.sMsg });
if (new Date().getTime() - wakeupBTime.getTime() > 1000 * 60 * 15)//时间差的毫秒)
{
$.msgprogress('close');
alert(result.sMsg );
}
else {
setTimeout(function () {
realWakeUpDev(aeaa_devs_nodeuuid, devno);
}, 500);
}
}
}
});
}
function WakeUpDev(data)
{
$.confirm({
title: '提示',
content: '确定要唤醒控制器-' + data.devno + "吗?",
onSuccess: function () {
wakeupBTime = new Date()
$.msgprogress({ msg: '正在唤醒控制器-' + data.devno + '...' });
realWakeUpDev(data.aeaa_devs_nodeuuid, data.devno);
},
});
}
function NoUseDev(data)
{
row = data;
var devno = row.devno;
var aeaa_devs_nodeuuid = row.aeaa_devs_nodeuuid;
var isuse = false;
var title = "确定要启用控制器-" + devno + "吗?";
var isuseString = "true";
if (isuse == false) {
title = "确定要禁用控制器-" + devno + "吗?";
isuseString = "false";
}
$.confirm({
title: '提示',
content: title,
onSuccess: function () {
$.msgprogress({ msg: '正在操作控制器-' + devno + '-状态...' });
$.ajax({
url: "/Aeaa/ActionDev.ajax?aeaa_devs_nodeuuid=" + aeaa_devs_nodeuuid + "&isuse=" + isuseString,
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK == false) {
$.alert({ content: result.sMsg });
} else {
myGoodPageOpts.mobilelist('reload');
}
}
})
},
});
}
function UseDev(data) {
row = data;
row = data;
var devno = row.devno;
var aeaa_devs_nodeuuid = row.aeaa_devs_nodeuuid;
var isuse = true;
var title = "确定要启用控制器-" + devno + "吗?";
var isuseString = "true";
if (isuse == false) {
title = "确定要禁用控制器-" + devno + "吗?";
isuseString = "false";
}
$.confirm({
title: '提示',
content: title,
onSuccess: function () {
$.msgprogress({ msg: '正在操作控制器-' + devno + '-状态...' });
$.ajax({
url: "/Aeaa/ActionDev.ajax?aeaa_devs_nodeuuid=" + aeaa_devs_nodeuuid + "&isuse=" + isuseString,
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK == false) {
$.alert({ content: result.sMsg });
} else {
myGoodPageOpts.mobilelist('reload');
}
}
})
},
});
}
var contentCompanyDevSteer = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="open" id="open" value="true"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" id="m_QYRong">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择企业</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div id=m_parameRong>'+
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开时长(分钟,0表示手动控制关闭)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="opensecond" id="opensecond" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开角度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="angle" id="angle" placeholder="请输入打开角度" value="0" />' +
'</div>' +
'</div>' +
'</div>' +
'</form>'
);
function openCompanyDev() {
<%if(HavePower("Aeaa", "GetSelectCompany_HY", false, out sError))
{%>
$(contentCompanyDevSteer).find('#m_QYRong').show();
$(contentCompanyDevSteer).find('#sys_companys_nodeuuid').combox({
url: '/Aeaa/GetSelectCompany_RawJson.ajax',//企业
selectDataContainer: $(contentCompanyDevSteer).find('#sys_companys_nodeuuid'),
text: 'company',
value: 'sys_companys_nodeuuid',
width: 143,
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
$(contentCompanyDevSteer).find('#sys_companys_nodeuuid').combox('setValue','<%=m_SessionLink.sys_companys_nodeuuid%>');
}
});
<%}else{
%>
$(contentCompanyDevSteer).find('#m_QYRong').hide();
$(contentCompanyDevSteer).find('#sys_companys_nodeuuid').val(m_SessionLink.sys_companys_nodeuuid);
<%}%>
var title = '打开企业所有阀门';
$(contentCompanyDevSteer).find('#m_parameRong').show();
$(contentCompanyDevSteer).find('#opensecond').val('0');
$(contentCompanyDevSteer).find('#angle').val('90');
$('#windows').window({
title: title,//窗口标题
content: contentCompanyDevSteer,
//width: 700,//弹出框宽度
width: document.body.clientWidth - 10,
onSuccess: function () {
$.msgprogress({ msg: '正在打开企业-所有阀门...' });
var options = {
url: "/Aeaa/ActionCompanyDevSteer.do",
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
$('#windows').window('close');
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentCompanyDevSteer).ajaxSubmit(options);
}
});
}
function closeCompanyDev() {
<%if(HavePower("Aeaa", "GetSelectCompany_HY", false, out sError))
{%>
$(contentCompanyDevSteer).find('#m_parameRong').hide();
$(contentCompanyDevSteer).find('#m_QYRong').show();
$(contentCompanyDevSteer).find('#sys_companys_nodeuuid').combox({
url: '/Aeaa/GetSelectCompany_RawJson.ajax',//企业
selectDataContainer: $(contentCompanyDevSteer).find('#sys_companys_nodeuuid'),
text: 'company',
value: 'sys_companys_nodeuuid',
width: 143,
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
$(contentCompanyDevSteer).find('#sys_companys_nodeuuid').combox('setValue','<%=m_SessionLink.sys_companys_nodeuuid%>');
}
});
$('#windows').window({
title: '关闭企业所有阀门',//窗口标题
content: contentCompanyDevSteer,
//width: 700,//弹出框宽度
width: document.body.clientWidth - 10,
onSuccess: function () {
var name = $(contentCompanyDevSteer).find('[name="sys_companys_nodeuuid_Select"]').find("option:selected").text();
var sys_companys_nodeuuid = $(contentCompanyDevSteer).find('#sys_companys_nodeuuid').val();
$('#windows').window('close');
$.msgprogress({ msg: '正在关闭企业-' + name + '-所有阀门...' });
$.ajax({
url: "/Aeaa/ActionCompanyDevSteer.do?sys_companys_nodeuuid="+sys_companys_nodeuuid+"&open=false",
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
});
}
});
<%}else{%>
$.confirm({
title: '提示',
content: '确定要关闭企业-<%=m_SessionLink.company%>所有阀门吗?',
onSuccess: function () {
$.msgprogress({ msg: '正在关闭企业-<%=m_SessionLink.company%>-所有阀门...' });
$.ajax({
url: "/Aeaa/ActionCompanyDevSteer.do?sys_companys_nodeuuid=<%=m_SessionLink.sys_companys_nodeuuid%>&open=false",
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
});
}
});
<%}%>
}
var contentCompanySelDevSteer = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="open" id="open" value="true"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" id="m_QYRong">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择企业</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" >' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择设备控制器</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="ins" id="ins" placeholder="输入打开时长" value="0" />' +
'<input class="am-modal-prompt-input" type="hidden" name="outs" id="outs" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div id=m_parameRong>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开时长(分钟,0表示手动控制关闭)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="opensecond" id="opensecond" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开角度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="angle" id="angle" placeholder="请输入打开角度" value="0" />' +
'</div>' +
'</div>' +
'</div>' +
'</form>'
);
function openCompanySelDev() {
contentCompanySelDevSteer = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="open" id="open" value="true"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" id="m_QYRong">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择企业</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" >' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择设备控制器</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="ins" id="ins" placeholder="输入打开时长" value="0" />' +
'<input class="am-modal-prompt-input" type="hidden" name="outs" id="outs" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div id=m_parameRong>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开时长(分钟,0表示手动控制关闭)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="opensecond" id="opensecond" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开角度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="angle" id="angle" placeholder="请输入打开角度" value="0" />' +
'</div>' +
'</div>' +
'</div>' +
'</form>'
);
var sys_companys_nodeuuid = "";
var name="";
$(contentCompanySelDevSteer).find('#m_QYRong').show();
$(contentCompanySelDevSteer).find('#m_parameRong').show();
$(contentCompanySelDevSteer).find('#outs').val('');
$(contentCompanySelDevSteer).find('#open').val('true');
$(contentCompanySelDevSteer).find('#angle').val('90');
$(contentCompanySelDevSteer).find('#opensecond').val('0');
$(contentCompanySelDevSteer).find('#ins').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#ins'),
text: 'devno',
value: 'devno',
width: 143,
multiple:true,
data:[],
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
}
});
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox({
url: '/Aeaa/GetSelectCompany_RawJson.ajax',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid'),
text: 'company',
value: 'sys_companys_nodeuuid',
width: 143,
multiple:false,
//width: '100%',
onSelect: function () {
$.msgprogress({ msg: '正在获得控制器...' });
$.ajax({
url: "/Aeaa/GetDevs_RawJson.ajax?page=1&rows=9999&sys_companys_nodeuuid=" + $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').val(),
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$(contentCompanySelDevSteer).find('#ins').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#ins'),
text: 'devno',
value: 'devno',
width: 143,
multiple: true,
data:result.rows,
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
$.msgprogress('close');
}
});
}
})
},
onSuccess: function () {
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox('setValue', '<%=m_SessionLink.sys_companys_nodeuuid%>');
}
});
$('#windows').window({
title: '打开选择的控制器',//窗口标题
content: contentCompanySelDevSteer,
//width: 700,//弹出框宽度
width: document.body.clientWidth - 10,
onSuccess: function () {
var url = '';
url = '/Aeaa/ActionCompanyDevSteer.do';
$.msgprogress({ msg: '正在打开选择的控制器...' });
var options = {
url: url,
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
$('#windows').window('close');
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentCompanySelDevSteer).ajaxSubmit(options);
}
});
}
function closeCompanySelDev() {
contentCompanySelDevSteer = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="open" id="open" value="true"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" id="m_QYRong">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择企业</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" >' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择设备控制器</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="ins" id="ins" placeholder="输入打开时长" value="0" />' +
'<input class="am-modal-prompt-input" type="hidden" name="outs" id="outs" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div id=m_parameRong>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开时长(分钟,0表示手动控制关闭)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="opensecond" id="opensecond" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开角度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="angle" id="angle" placeholder="请输入打开角度" value="0" />' +
'</div>' +
'</div>' +
'</div>' +
'</form>'
);
var sys_companys_nodeuuid = "";
var name="";
$(contentCompanySelDevSteer).find('#m_parameRong').hide();
$(contentCompanySelDevSteer).find('#outs').val('');
$(contentCompanySelDevSteer).find('#open').val('false');
$(contentCompanySelDevSteer).find('#angle').val('90');
$(contentCompanySelDevSteer).find('#opensecond').val('0');
$(contentCompanySelDevSteer).find('#ins').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#ins'),
text: 'devno',
value: 'devno',
width: 143,
multiple:true,
data:[],
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
}
});
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox({
url: '/Aeaa/GetSelectCompany_RawJson.ajax',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid'),
text: 'company',
value: 'sys_companys_nodeuuid',
width: 143,
multiple:false,
//width: '100%',
onSelect: function () {
$.msgprogress({ msg: '正在获得控制器...' });
$.ajax({
url: "/Aeaa/GetDevs_RawJson.ajax?page=1&rows=9999&sys_companys_nodeuuid=" + $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').val(),
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$(contentCompanySelDevSteer).find('#ins').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#ins'),
text: 'devno',
value: 'devno',
width: 143,
multiple: true,
data:result.rows,
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
$.msgprogress('close');
}
});
}
})
},
onSuccess: function () {
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox('setValue', '<%=m_SessionLink.sys_companys_nodeuuid%>');
}
});
$('#windows').window({
title: '关闭选择的控制器',//窗口标题
content: contentCompanySelDevSteer,
//width: 700,//弹出框宽度
width: document.body.clientWidth - 10,
onSuccess: function () {
var url = '';
url = '/Aeaa/ActionCompanyDevSteer.do';
$.msgprogress({ msg: '正在关闭选择的控制器...' });
var options = {
url: url,
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
$('#windows').window('close');
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentCompanySelDevSteer).ajaxSubmit(options);
}
});
}
function openCompanyNoSelDev() {
contentCompanySelDevSteer = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="open" id="open" value="true"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" id="m_QYRong">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择企业</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" >' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择设备控制器</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="ins" id="ins" placeholder="输入打开时长" value="0" />' +
'<input class="am-modal-prompt-input" type="hidden" name="outs" id="outs" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div id=m_parameRong>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开时长(分钟,0表示手动控制关闭)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="opensecond" id="opensecond" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开角度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="angle" id="angle" placeholder="请输入打开角度" value="0" />' +
'</div>' +
'</div>' +
'</div>' +
'</form>'
);
var sys_companys_nodeuuid = "";
var name="";
$(contentCompanySelDevSteer).find('#m_QYRong').show();
$(contentCompanySelDevSteer).find('#m_parameRong').show();
$(contentCompanySelDevSteer).find('#ins').val('');
$(contentCompanySelDevSteer).find('#open').val('true');
$(contentCompanySelDevSteer).find('#angle').val('90');
$(contentCompanySelDevSteer).find('#opensecond').val('0');
$(contentCompanySelDevSteer).find('#outs').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#outs'),
text: 'devno',
value: 'devno',
width: 143,
multiple:true,
data:[],
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
}
});
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox({
url: '/Aeaa/GetSelectCompany_RawJson.ajax',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid'),
text: 'company',
value: 'sys_companys_nodeuuid',
width: 143,
multiple:false,
//width: '100%',
onSelect: function () {
$.msgprogress({ msg: '正在获得控制器...' });
$.ajax({
url: "/Aeaa/GetDevs_RawJson.ajax?page=1&rows=9999&sys_companys_nodeuuid=" + $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').val(),
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$(contentCompanySelDevSteer).find('#outs').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#outs'),
text: 'devno',
value: 'devno',
width: 143,
multiple: true,
data:result.rows,
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
$.msgprogress('close');
}
});
}
})
},
onSuccess: function () {
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox('setValue', '<%=m_SessionLink.sys_companys_nodeuuid%>');
}
});
$('#windows').window({
title: '打开未选择的控制器',//窗口标题
content: contentCompanySelDevSteer,
//width: 700,//弹出框宽度
width: document.body.clientWidth - 10,
onSuccess: function () {
var url = '';
url = '/Aeaa/ActionCompanyDevSteer.do';
$.msgprogress({ msg: '正在打开未选择的控制器...' });
var options = {
url: url,
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
$('#windows').window('close');
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentCompanySelDevSteer).ajaxSubmit(options);
}
});
}
function closeCompanyNoSelDev() {
contentCompanySelDevSteer = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
'<input type="hidden" name="open" id="open" value="true"/>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" id="m_QYRong">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择企业</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem;margin-top:5px;" >' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">选择设备控制器</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="hidden" name="ins" id="ins" placeholder="输入打开时长" value="0" />' +
'<input class="am-modal-prompt-input" type="hidden" name="outs" id="outs" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div id=m_parameRong>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开时长(分钟,0表示手动控制关闭)</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="opensecond" id="opensecond" placeholder="输入打开时长" value="0" />' +
'</div>' +
'</div>' +
'<div class="am-form-group" style="margin-bottom:0.5rem">' +
'<label for="tradename" class="am-u-sm-2 am-form-label" style="width: 28%;">打开角度</label>' +
'<div class="am-u-sm-10" style="width: 72%;">' +
'<input class="am-modal-prompt-input" type="number" name="angle" id="angle" placeholder="请输入打开角度" value="0" />' +
'</div>' +
'</div>' +
'</div>' +
'</form>'
);
var sys_companys_nodeuuid = "";
var name="";
$(contentCompanySelDevSteer).find('#m_parameRong').hide();
$(contentCompanySelDevSteer).find('#ins').val('');
$(contentCompanySelDevSteer).find('#open').val('false');
$(contentCompanySelDevSteer).find('#angle').val('90');
$(contentCompanySelDevSteer).find('#opensecond').val('0');
$(contentCompanySelDevSteer).find('#outs').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#outs'),
text: 'devno',
value: 'devno',
width: 143,
multiple:true,
data:[],
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
}
});
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox({
url: '/Aeaa/GetSelectCompany_RawJson.ajax',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid'),
text: 'company',
value: 'sys_companys_nodeuuid',
width: 143,
multiple:false,
//width: '100%',
onSelect: function () {
$.msgprogress({ msg: '正在获得控制器...' });
$.ajax({
url: "/Aeaa/GetDevs_RawJson.ajax?page=1&rows=9999&sys_companys_nodeuuid=" + $(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').val(),
type: 'post',
dataType: 'json',
cache: false,
success: function (result) {
$(contentCompanySelDevSteer).find('#outs').combox({
url: '',//企业
selectDataContainer: $(contentCompanySelDevSteer).find('#outs'),
text: 'devno',
value: 'devno',
width: 143,
multiple: true,
data:result.rows,
//width: '100%',
onSelect: function () {
},
onSuccess: function () {
$.msgprogress('close');
}
});
}
})
},
onSuccess: function () {
$(contentCompanySelDevSteer).find('#sys_companys_nodeuuid').combox('setValue', '<%=m_SessionLink.sys_companys_nodeuuid%>');
}
});
$('#windows').window({
title: '关闭选择的控制器',//窗口标题
content: contentCompanySelDevSteer,
//width: 700,//弹出框宽度
width: document.body.clientWidth - 10,
onSuccess: function () {
var url = '';
url = '/Aeaa/ActionCompanyDevSteer.do';
$.msgprogress({ msg: '正在关闭未选择的控制器...' });
var options = {
url: url,
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
if (result.sMsg.indexOf("返回数据处理:") != -1) {
result.sMsg = result.sMsg.replace("返回数据处理:", "");
try {
var m_OBJ = JSON.parse(result.sMsg);
if (m_OBJ != null && m_OBJ != undefined) {
if (m_OBJ.bRet) {
result.sMsg = m_OBJ.sMsg;
$('#windows').window('close');
}
else {
result.sMsg = m_OBJ.sMsg;
}
}
}
catch (r) {
}
}
$.alert({ content: result.sMsg });
} else {
$.alert({ content: result.sMsg });
}
}
}
$(contentCompanySelDevSteer).ajaxSubmit(options);
}
});
}
setTimeout(InitList, 200);
</script>
ctlList.menu
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Assembly Name="CoreSYS" %>
<%@ Assembly Name="SaleData" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="CoreSYS" %>
<%@ Import Namespace="SaleData" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<script language="C# " runat="server">
public Object getModel()
{
return this.Model;
}
</script>
<%
Hashtable m_ModuleHH = (Hashtable)getModel();
string aeaa_discenters_nodeuuid = "";
string sys_companys_nodeuuid = "";
string company = "";
string sError;
string pageName = "ctlListPage";
try
{
if (m_ModuleHH.ContainsKey("aeaa_discenters_nodeuuid"))
{
aeaa_discenters_nodeuuid = m_ModuleHH["aeaa_discenters_nodeuuid"].ToString();
}
if (m_ModuleHH.ContainsKey("sys_companys_nodeuuid"))
{
sys_companys_nodeuuid = m_ModuleHH["sys_companys_nodeuuid"].ToString();
}
if (m_ModuleHH.ContainsKey("company"))
{
company = m_ModuleHH["company"].ToString();
}
if (m_ModuleHH.ContainsKey("pageName"))
{
pageName = m_ModuleHH["pageName"].ToString();// "AeaaCTLPageaspx_ctlListTab";
}
}
catch (Exception eee)
{
}
%>
<ul class="am-menu-nav am-avg-sm-1">
<%
if (string.IsNullOrEmpty(aeaa_discenters_nodeuuid))
{%>
<li class="am-parent">
<a href="javascript:void(0)" class="">企业</a>
<ul class="am-menu-sub am-collapse am-avg-sm-1">
<li class="am-u-lg-12 huiwu-tab-input">
<div class="am-input-group am-u-sm-12">
<input type="hidden" name="sys_companys_nodeuuid" id="sys_companys_nodeuuid" class="am-form-field huiwu-tab-input-in noupevent" />
</div>
</li>
</ul>
</li>
<li class="am-parent">
<a href="javascript:void(0)" class="">控制编号</a>
<ul class="am-menu-sub am-collapse am-avg-sm-1">
<li class="am-u-lg-12 huiwu-tab-input">
<div class="am-input-group am-u-sm-12">
<input type="text" name="devno" id="devno" class="am-form-field huiwu-tab-input-in noupevent" />
</div>
</li>
</ul>
</li>
<%}%>
</ul>
即时通讯与客服系统
个人站点
个人站点的广告是随机抽取站点两个广告展示
个人站点一些配置
框架使用SSE
调用:TemplateMode/SSEPage.aspx
服务端:
public partial class TemplateMode : BaseJsonMode
{
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson SSEPage(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
try
{
m_ReturnJson.bOK = true;
m_ReturnJson.m_ReturnOBJ = RenderPageView(ctx, m_JsonModePath, "SSEPage", null);
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "渲染失败";
}
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true,isSSEFunction:true}")]
static public ReturnJson SSEEvent(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
DateTime tB = DateTime.Now;
try
{
Hashtable m_HH = new Hashtable();
while(true)
{
m_HH.Clear();
m_HH["time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
m_HH["message"] = "私人消息";
if(!PushSSEMessage(ctx, m_HH))
{
break;
}
Thread.Sleep(1000);
}
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用异常";
}
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true,isSSEFunction:true}")]
static public ReturnJson AllSSEEvent(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
DateTime tB = DateTime.Now;
try
{
Hashtable m_HH = new Hashtable();
while (true)
{
m_HH.Clear();
m_HH["time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
m_HH["message"] = "公共消息";
PushAllSSEMessage(ctx, m_HH);
Thread.Sleep(1000);
}
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用异常";
}
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true,isSSEFunction:true}")]
static public ReturnJson OneSSEEvent(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
DateTime tB = DateTime.Now;
try
{
Hashtable m_HH = new Hashtable();
{
m_HH.Clear();
m_HH["time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
m_HH["message"] = "私人消息";
if(!PushSSEMessage(ctx, m_HH))
{
}
}
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用异常";
}
finally
{
ClearSSECtx(ctx);
}
return m_ReturnJson;
}
[ModeMethod("{CanNoLogin:true,CanEnable:true,isSSEFunction:true}")]
static public ReturnJson OneAllSSEEvent(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
DateTime tB = DateTime.Now;
try
{
WriteLog("执行OneAllSSEEvent");
Hashtable m_HH = new Hashtable();
{
m_HH.Clear();
m_HH["time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
m_HH["message"] = "公共消息";
PushAllSSEMessage(ctx, m_HH);
}
}
catch
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "调用异常";
}
finally
{
ClearSSECtx(ctx);
}
return m_ReturnJson;
}
}
页面端:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="XNWebEngine.JsonBase.MyBasePageView" %>
<%@ Import Namespace="XNWebEngine.JsonBase" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="XNWebEngine" %>
<script language="C# " runat="server">
public Object getModel()
{
return this.Model;
}
public string DateToString(Object t)
{
try
{
DateTime tDate = (DateTime)t;
return tDate.Year.ToString() + "-" + tDate.Month.ToString() + "-" + tDate.Day.ToString() + " " + tDate.Hour.ToString() + ":" + tDate.Minute.ToString() + ":" + tDate.Second.ToString();
}
catch
{
return "";
}
}
</script>
<%
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SSE 示例</title>
</head>
<body>
<h1>服务器发送事件示例</h1>
<div><button onclick="PostPublicSSE()">连续发送公共消息</button></div>
<div><button onclick="PostPrivateSSE()">连续发送私人消息</button></div>
<div><button onclick="OnePostPublicSSE()">一次发送公共消息</button></div>
<div><button onclick="OnePostPrivateSSE()">一次发送私人消息</button></div>
<div id="events"></div>
<script>
function PostPrivateSSE() {
// 创建 EventSource 对象连接到服务器
const eventSource = new EventSource('/TemplateMode/SSEEvent.sse');
/*
// 监听消息事件
eventSource.onmessage = function(event) {
const data = JSON.parse(event.data);
const eventsDiv = document.getElementById('events');
// 将收到的消息添加到页面中
eventsDiv.innerHTML += `<p>时间: ${data.time}, 内容: ${data.message}</p>`;
};
// 监听连接打开事件
eventSource.onopen = function() {
console.log('连接已打开');
};
// 监听错误事件
eventSource.onerror = function(error) {
console.error('发生错误:', error);
};
*/
/*
* open:订阅成功(和后端连接成功)
*/
eventSource.addEventListener("open", function (e) {
console.log('open successfully')
})
/*
* message:后端返回信息,格式可以和后端协商
*/
eventSource.addEventListener("message", function (e) {
console.log(e.data)
const data = JSON.parse(e.data);
const eventsDiv = document.getElementById('events');
// 将收到的消息添加到页面中
eventsDiv.innerHTML += "<p>时间: " + data.time + ", 内容: " + data.message + "</p>";
})
/*
* error:错误(可能是断开,可能是后端返回的信息)
*/
eventSource.addEventListener("error", function (err) {
console.log(err)
// 类似的返回信息验证,这里是实例
err && err.status === 401 && console.log('not authorized')
})
}
function PostPublicSSE()
{
const eventPSource = new EventSource('/TemplateMode/AllSSEEvent.sse');
eventPSource.addEventListener("open", function (e) {
console.log('open successfully')
})
eventPSource.addEventListener("message", function (e) {
console.log(e.data)
const data = JSON.parse(e.data);
const eventsDiv = document.getElementById('events');
// 将收到的消息添加到页面中
eventsDiv.innerHTML += "<p>时间: " + data.time + ", 内容: " + data.message + "</p>";
})
eventPSource.addEventListener("error", function (err) {
console.log(err)
// 类似的返回信息验证,这里是实例
err && err.status === 401 && console.log('not authorized')
})
}
function OnePostPrivateSSE() {
// 创建 EventSource 对象连接到服务器
const OneeventSource = new EventSource('/TemplateMode/OneSSEEvent.sse');
/*
// 监听消息事件
eventSource.onmessage = function(event) {
const data = JSON.parse(event.data);
const eventsDiv = document.getElementById('events');
// 将收到的消息添加到页面中
eventsDiv.innerHTML += `<p>时间: ${data.time}, 内容: ${data.message}</p>`;
};
// 监听连接打开事件
eventSource.onopen = function() {
console.log('连接已打开');
};
// 监听错误事件
eventSource.onerror = function(error) {
console.error('发生错误:', error);
};
*/
/*
* open:订阅成功(和后端连接成功)
*/
OneeventSource.addEventListener("open", function (e) {
console.log('open successfully')
})
/*
* message:后端返回信息,格式可以和后端协商
*/
OneeventSource.addEventListener("message", function (e) {
console.log(e.data)
const data = JSON.parse(e.data);
const eventsDiv = document.getElementById('events');
// 将收到的消息添加到页面中
eventsDiv.innerHTML += "<p>时间: " + data.time + ", 内容: " + data.message + "</p>";
//OneeventSource.close();
})
/*
* error:错误(可能是断开,可能是后端返回的信息)
*/
OneeventSource.addEventListener("error", function (err) {
console.log(err)
// 类似的返回信息验证,这里是实例
err && err.status === 401 && console.log('not authorized')
})
}
function OnePostPublicSSE() {
const OneeventPSource = new EventSource('/TemplateMode/OneAllSSEEvent.sse');
OneeventPSource.addEventListener("open", function (e) {
console.log('open successfully')
})
OneeventPSource.addEventListener("message", function (e) {
console.log(e.data)
const data = JSON.parse(e.data);
const eventsDiv = document.getElementById('events');
// 将收到的消息添加到页面中
eventsDiv.innerHTML += "<p>时间: " + data.time + ", 内容: " + data.message + "</p>";
//OneeventPSource.close();
})
OneeventPSource.addEventListener("error", function (err) {
console.log(err)
// 类似的返回信息验证,这里是实例
err && err.status === 401 && console.log('not authorized')
})
}
</script>
</body>
</html>
模块之间相互调用
bool CallJsonModeFunction(HttpContext ctx, string ClassFullName, string FunctionName, object m_InParame, bool bClient, out object m_OutParame, out string sError);
m_OutParame:返回的是ReturnJson中的m_ReturnOBJ;
返回值为ReturnJson.bOK
sError为ReturnJson.sMsg
***可设置企业和用户账户的服务时间从而控制登录***
CoreSYS.SYS
设置企业服务时间
static public ReturnJson SetCompanyTime(HttpContext ctx,Object m_Parame)
参数:
sys_companys_nodeuuid:企业id
overtime:失效时间
设置账户服务时间
static public ReturnJson SetUserTime(HttpContext ctx,Object m_Parame)
参数:
sys_users_nodeuuid:账户id
losttime:失效时间
打开指定用户对话界面
console.log("menuChat");
/*发送即时消息*/
var mineId = $(this).parent().data('id');
var moldId = $(this).parent().data('mold');
var mineName = $(this).parent().attr('imname');
var mineFace = $(this).parent().attr('imface');
console.log(mineId);
layim.chat({
type: moldId == 1 ? "friend" : "group",
name: mineName,
avatar: mineFace,
id: mineId
//status: '好友当前离线状态'
});
框架中打开指定对话框
try
{
var m_IMPack={};
m_IMPack.msgtype="talk";
m_IMPack.user={};
m_IMPack.user.id="15954448597820000003000";
m_IMPack.user.name="xzt";
m_IMPack.user.avatar="http://www.1xn1.com/upfiles/images/202007/0c28e37988cd4119b6a77653c1ef847b.jpg";
window.parent.postMessage(JSON.stringify(m_IMPack),'*');//IM 所在的window获得ifame的window,默认im位于顶级窗口
}
catch(err){
//在此处理错误
console.log(err);
}
框架LayIM嵌入页面
http://www.1xn1.com/IMessage/index.aspx?mainurl=http://www.1xn1.com/userblog/sysMain.aspx?bIM=false
LayIM与外部通讯采用浏览器自带的message
IMessage模块:JsonMode\即时通讯\View\public\js\impc.js和JsonMode\即时通讯\View\public\js\imphone.js
内部处理外部发送的消息
var savemine = res.mine;
window.addEventListener('message', function (e) {
//console.log(e);
//console.log(savemine);
try {
m_IMPack = JSON.parse(e.data);
if (m_IMPack.msgtype == "talk") {
layim.chat({
id: m_IMPack.user.id
, name: m_IMPack.user.name
, type: 'friend' //friend、group等字符,如果是group,则创建的是群聊
, avatar: m_IMPack.user.avatar
});
}
}
catch (err) {
}
return;
if (e.data == "hello") {
layim.chat({
id: "15954448597820000003000"
, name: 'xzt'
, type: 'friend' //friend、group等字符,如果是group,则创建的是群聊
, avatar: 'http://www.test.bslzg.com/upfiles/images/202007/0c28e37988cd4119b6a77653c1ef847b.jpg'
});
}
});
下一篇:个人收款接口解决方案