You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

827 lines
35 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Web;
using BP.DA;
using BP.Sys;
using BP.Web;
using BP.En;
using BP.WF.Template;
using System.Net.Http;
using System.Collections;
using LitJson;
using System.Net;
using BP.Tools;
using System.Drawing;
using BP.Difference;
using Aliyun.OSS;
namespace BP.WF.HttpHandler
{
/// <summary>
/// 表单
/// </summary>
public class CCMobile_CCForm : DirectoryPageBase
{
/// <summary>
/// 构造函数
/// </summary>
public CCMobile_CCForm()
{
BP.Web.WebUser.SheBei = "Mobile";
}
public string HandlerMapExt()
{
WF_CCForm en = new WF_CCForm();
return en.HandlerMapExt();
}
public string AttachmentUpload_Down()
{
WF_CCForm ccform = new WF_CCForm();
return ccform.AttachmentUpload_Down();
}
/// <summary>
/// 表单初始化.
/// </summary>
/// <returns></returns>
public string Frm_Init()
{
WF_CCForm ccform = new WF_CCForm();
return ccform.Frm_Init();
}
public string FrmGener_Init()
{
WF_CCForm ccform = new WF_CCForm();
return ccform.FrmGener_Init();
}
public string Dtl_Init()
{
WF_CCForm ccform = new WF_CCForm();
return ccform.Dtl_Init();
}
//保存从表数据
public string Dtl_SaveRow()
{
#region 查询出来从表数据.
GEDtls dtls = new GEDtls(this.EnsName);
GEDtl dtl = dtls.GetNewEntity as GEDtl;
dtls.Retrieve("RefPK", this.GetRequestVal("RefPKVal"));
MapDtl mdtl = new MapDtl(this.EnsName);
Map map = dtl.EnMap;
foreach (GEDtl item in dtls)
{
string pkval = item.GetValStringByKey(dtl.PK);
foreach (Attr attr in map.Attrs)
{
if (attr.ItIsRefAttr == true)
continue;
if (attr.MyDataType == DataType.AppDateTime || attr.MyDataType == DataType.AppDate)
{
if (attr.UIIsReadonly == true)
continue;
string val = this.GetValFromFrmByKey("TB_" + attr.Key + "_" + pkval, null);
item.SetValByKey(attr.Key, HttpUtility.UrlDecode(val, Encoding.UTF8));
continue;
}
if (attr.UIContralType == UIContralType.TB)
{
string val = this.GetValFromFrmByKey("TB_" + attr.Key + "_" + pkval, null);
item.SetValByKey(attr.Key, HttpUtility.UrlDecode(val, Encoding.UTF8));
continue;
}
if (attr.UIContralType == UIContralType.DDL)
{
string val = this.GetValFromFrmByKey("DDL_" + attr.Key + "_" + pkval);
item.SetValByKey(attr.Key, HttpUtility.UrlDecode(val, Encoding.UTF8));
continue;
}
if (attr.UIContralType == UIContralType.CheckBok)
{
string val = this.GetValFromFrmByKey("CB_" + attr.Key + "_" + pkval, "-1");
if (val == "0")
item.SetValByKey(attr.Key, 0);
else
item.SetValByKey(attr.Key, 1);
continue;
}
}
item.SetValByKey("OID",pkval);
//关联主赋值.
item.RefPK = this.RefPKVal;
switch (mdtl.DtlOpenType)
{
case DtlOpenType.ForEmp: // 按人员来控制.
item.RefPK = this.RefPKVal;
break;
case DtlOpenType.ForWorkID: // 按工作ID来控制
item.RefPK = this.RefPKVal;
item.FID = this.FID;
break;
case DtlOpenType.ForFID: // 按流程ID来控制.
item.RefPK = this.RefPKVal;
item.FID = this.FID;
break;
}
item.Rec = WebUser.No;
item.Update(); //执行更新.
}
return "保存成功.";
#endregion 查询出来从表数据.
}
//多附件上传方法
public string UploadIOSAttach()
{
string uploadFileM = ""; //上传附件数据的MyPK,用逗号分开
string pkVal = this.GetRequestVal("PKVal");
string attachPk = this.GetRequestVal("FK_FrmAttachment");
string sort = this.GetRequestVal("Sort");
string fileSoruce = this.GetRequestVal("fileSource");
string fileName = this.GetRequestVal("fileName");
string ext = this.GetRequestVal("Ext");
// 多附件描述.
BP.Sys.FrmAttachment athDesc = new BP.Sys.FrmAttachment(attachPk);
MapData mapData = new MapData(athDesc.FrmID);
string msg = "";
//求出来实体记录,方便执行事件.
GEEntity en = new GEEntity(athDesc.FrmID);
en.PKVal = pkVal;
if (en.RetrieveFromDBSources() == 0)
{
en.PKVal = this.FID;
if (en.RetrieveFromDBSources() == 0)
{
en.PKVal = this.PWorkID;
en.RetrieveFromDBSources();
}
}
//求主键. 如果该表单挂接到流程上.
if (this.NodeID != 0)
{
//判断表单方案。
FrmNode fn = new FrmNode(this.NodeID, this.FrmID);
if (fn.FrmSln == FrmSln.Self)
{
BP.Sys.FrmAttachment myathDesc = new FrmAttachment();
myathDesc.setMyPK(attachPk + "_" + this.NodeID);
if (myathDesc.RetrieveFromDBSources() != 0)
athDesc.HisCtrlWay = myathDesc.HisCtrlWay;
}
pkVal = BP.WF.Dev2Interface.GetAthRefPKVal(this.WorkID, this.PWorkID, this.FID, this.NodeID, this.FrmID, athDesc);
}
//获取上传文件是否需要加密
bool fileEncrypt = BP.Difference.SystemConfig.isEnableAthEncrypt;
#region 文件上传的iis服务器上 or db数据库里.
if (athDesc.AthSaveWay == AthSaveWay.IISServer || athDesc.AthSaveWay == AthSaveWay.DB)
{
string savePath = athDesc.SaveTo;
if (savePath.Contains("@") == true || savePath.Contains("*") == true)
{
/*如果有变量*/
savePath = savePath.Replace("*", "@");
if (savePath.Contains("@") && this.NodeID != 0)
{
/*如果包含 @ */
BP.WF.Flow flow = new BP.WF.Flow(this.FlowNo);
BP.WF.GERpt myen = flow.HisGERpt;
myen.OID = this.WorkID;
myen.RetrieveFromDBSources();
savePath = BP.WF.Glo.DealExp(savePath, myen, null);
}
if (savePath.Contains("@") == true)
throw new Exception("@路径配置错误,变量没有被正确的替换下来." + savePath);
}
else
{
savePath = athDesc.SaveTo + "/" + pkVal;
}
//替换关键的字串.
savePath = savePath.Replace("\\\\", "/");
try
{
if (savePath.Contains(BP.Difference.SystemConfig.PathOfWebApp) == false)
savePath = BP.Difference.SystemConfig.PathOfWebApp + savePath;
}
catch (Exception ex)
{
savePath = BP.Difference.SystemConfig.PathOfDataUser + "UploadFile/" + mapData.No + "/";
//return "err@获取路径错误" + ex.Message + ",配置的路径是:" + savePath + ",您需要在附件属性上修改该附件的存储路径.";
}
try
{
if (System.IO.Directory.Exists(savePath) == false)
System.IO.Directory.CreateDirectory(savePath);
}
catch (Exception ex)
{
throw new Exception("err@创建路径出现错误,可能是没有权限或者路径配置有问题:" + savePath + "@异常信息:" + ex.Message);
}
string guid = DBAccess.GenerGUID();
string realSaveTo = savePath + "/" + guid + "." + fileName;
realSaveTo = realSaveTo.Replace("~", "-");
realSaveTo = realSaveTo.Replace("'", "-");
realSaveTo = realSaveTo.Replace("*", "-");
if (fileEncrypt == true)
{
string strtmp = realSaveTo + ".tmp";
Base64StrToImage(fileSoruce, strtmp);
EncHelper.EncryptDES(strtmp, strtmp.Replace(".tmp", ""));//加密
File.Delete(strtmp);//删除临时文件
}
else
{
//文件保存的路径
Base64StrToImage(fileSoruce, realSaveTo);
}
//执行附件上传前事件added by liuxc,2017-7-15
msg = ExecEvent.DoFrm(mapData, EventListFrm.AthUploadeBefore, en, "@FK_FrmAttachment=" + athDesc.MyPK + "@FileFullName=" + realSaveTo);
if (!DataType.IsNullOrEmpty(msg))
{
BP.Sys.Base.Glo.WriteLineError("@AthUploadeBefore事件返回信息文件" + fileName + "" + msg);
File.Delete(realSaveTo);
}
FileInfo info = new FileInfo(realSaveTo);
FrmAttachmentDB dbUpload = new FrmAttachmentDB();
dbUpload.setMyPK(guid);
dbUpload.NodeID = this.NodeID;
dbUpload.Sort = sort;
dbUpload.FrmID= athDesc.FrmID ;
dbUpload.FK_FrmAttachment = attachPk;
dbUpload.FileExts = info.Extension;
dbUpload.FID = this.FID;
if (fileEncrypt == true)
dbUpload.SetPara("IsEncrypt", 1);
dbUpload.FileFullName = realSaveTo;
dbUpload.FileName = fileName;
dbUpload.FileSize = (float)info.Length;
dbUpload.RDT = DataType.CurrentDateTimess;
dbUpload.Rec = BP.Web.WebUser.No;
dbUpload.RecName = BP.Web.WebUser.Name;
dbUpload.DeptNo = WebUser.DeptNo;
dbUpload.DeptName = WebUser.DeptName;
dbUpload.RefPKVal = pkVal;
dbUpload.FID = this.FID;
dbUpload.UploadGUID = guid;
dbUpload.Insert();
//执行附件上传后事件added by liuxc,2017-7-15
msg = ExecEvent.DoFrm(mapData, EventListFrm.AthUploadeAfter, en, "@FK_FrmAttachment=" + dbUpload.FK_FrmAttachment + "@FK_FrmAttachmentDB=" + dbUpload.MyPK + "@FileFullName=" + dbUpload.FileFullName);
if (!DataType.IsNullOrEmpty(msg))
BP.Sys.Base.Glo.WriteLineError("@AthUploadeAfter事件返回信息文件" + dbUpload.FileName + "" + msg);
}
#endregion 文件上传的iis服务器上 or db数据库里.
#region 保存到数据库 / FTP服务器上 / OSS服务器上.
if (athDesc.AthSaveWay == AthSaveWay.FTPServer || athDesc.AthSaveWay == AthSaveWay.OSS)
{
string guid = DBAccess.GenerGUID();
//把文件临时保存到一个位置.
string temp = BP.Difference.SystemConfig.PathOfTemp + "" + guid + ".tmp";
if (fileEncrypt == true)
{
string strtmp = BP.Difference.SystemConfig.PathOfTemp + "" + guid + "_Desc" + ".tmp";
Base64StrToImage(fileSoruce, strtmp);
EncHelper.EncryptDES(strtmp, temp);//加密
File.Delete(strtmp);//删除临时文件
}
else
{
//文件保存的路径
Base64StrToImage(fileSoruce, temp);
}
//执行附件上传前事件added by liuxc,2017-7-15
msg = ExecEvent.DoFrm(mapData, EventListFrm.AthUploadeBefore, en, "@FK_FrmAttachment=" + athDesc.MyPK + "@FileFullName=" + temp);
if (DataType.IsNullOrEmpty(msg) == false)
{
BP.Sys.Base.Glo.WriteLineError("@AthUploadeBefore事件返回信息文件" +fileName + "" + msg);
File.Delete(temp);
throw new Exception("err@上传附件错误:" + msg);
}
FileInfo info = new FileInfo(temp);
FrmAttachmentDB dbUpload = new FrmAttachmentDB();
dbUpload.setMyPK(DBAccess.GenerGUID());
dbUpload.Sort = sort;
dbUpload.NodeID = this.NodeID;
dbUpload.FrmID= athDesc.FrmID;
dbUpload.FK_FrmAttachment = athDesc.MyPK;
dbUpload.FID = this.FID; //流程id.
if (fileEncrypt == true)
dbUpload.SetPara("IsEncrypt", 1);
dbUpload.RefPKVal = pkVal.ToString();
dbUpload.FrmID= athDesc.FrmID;
dbUpload.FK_FrmAttachment = athDesc.MyPK;
dbUpload.FileName = fileName;
dbUpload.FileSize = (float)info.Length;
dbUpload.RDT = DataType.CurrentDateTimess;
dbUpload.Rec = BP.Web.WebUser.No;
dbUpload.RecName = BP.Web.WebUser.Name;
dbUpload.DeptNo = WebUser.DeptNo;
dbUpload.DeptName = WebUser.DeptName;
dbUpload.UploadGUID = guid;
if (athDesc.AthSaveWay == AthSaveWay.FTPServer)
{
/*保存到fpt服务器上.*/
BP.FtpConnection ftpconn = new BP.FtpConnection(BP.Difference.SystemConfig.FTPServerIP,
SystemConfig.FTPServerPort,
SystemConfig.FTPUserNo, BP.Difference.SystemConfig.FTPUserPassword);
string ny = DateTime.Now.ToString("yyyy_MM");
//判断目录年月是否存在.
if (ftpconn.DirectoryExist(ny) == false)
ftpconn.CreateDirectory(ny);
ftpconn.SetCurrentDirectory(ny);
//判断目录是否存在.
if (ftpconn.DirectoryExist(athDesc.FrmID) == false)
ftpconn.CreateDirectory(athDesc.FrmID);
//设置当前目录,为操作的目录。
ftpconn.SetCurrentDirectory(athDesc.FrmID);
//把文件放上去.
try
{
ftpconn.PutFile(temp, guid + "." + dbUpload.FileExts);
}
catch
{
throw new Exception("err@FTP端口号受限或者防火墙未关闭");
}
ftpconn.Close();
//设置路径.
dbUpload.FileFullName = ny + "//" + athDesc.FrmID + "//" + guid + "." + dbUpload.FileExts;
dbUpload.Insert();
File.Delete(temp);
}
#region 文件上传到OSS服务器上
if (athDesc.AthSaveWay == AthSaveWay.OSS)
{
string subDir = "";
//判断是否有子目录路径
if (DataType.IsNullOrEmpty(BP.Difference.SystemConfig.BucketSubPath) == false && "/".Equals(BP.Difference.SystemConfig.BucketSubPath) == false)
{
subDir = BP.Difference.SystemConfig.BucketSubPath + "/";
}
string ny = DataType.CurrentYearMonth;
// 填写Object完整路径完整路径中不能包含Bucket名称例如exampledir/exampleobject.txt。
var objectName = subDir + ny + "/" + athDesc.FrmID + "/" + guid + "." + dbUpload.FileExts;
OSSUtil.doUpload(objectName, temp);
//设置路径.
dbUpload.FileFullName = ny + "//" + athDesc.FrmID + "//" + guid + "." + dbUpload.FileExts;
dbUpload.Insert();
File.Delete(temp);
}
#endregion 文件上传到OSS服务器上
//执行附件上传后事件added by liuxc,2017-7-15
msg = ExecEvent.DoFrm(mapData, EventListFrm.AthUploadeAfter, en, "@FK_FrmAttachment=" + dbUpload.FK_FrmAttachment + "@FK_FrmAttachmentDB=" + dbUpload.MyPK + "@FileFullName=" + temp);
if (DataType.IsNullOrEmpty(msg) == false)
BP.Sys.Base.Glo.WriteLineError("@AthUploadeAfter事件返回信息文件" + dbUpload.FileName + "" + msg);
}
#endregion 保存到数据库.
return "上传成功";
}
public void Base64StrToImage(string base64Str, string savePath)
{
var ret = true;
base64Str = base64Str.Replace(" ", "+");
string[] str = base64Str.Split(','); //base64Str为base64完整的字符串先处理一下得到我们所需要的字符串
byte[] imageBytes = Convert.FromBase64String(str[1]);
//读入MemoryStream对象
MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
memoryStream.Write(imageBytes, 0, imageBytes.Length);
// 转成图片
Image image = Image.FromStream(memoryStream);
// 图片名称
string iname = DateTime.Now.ToString("yyMMddhhmmss");
image.Save(savePath); // 将图片存到本地
}
/// <summary>
/// 获取百度云token
/// </summary>
/// <returns></returns>
public string getAccessToken()
{
string ak = BP.Difference.SystemConfig.APIKey;
string sk = BP.Difference.SystemConfig.SecretKey;
//百度云应用获取token
String authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair<string, string>("client_id", ak));
paraList.Add(new KeyValuePair<string, string>("client_secret", sk));
HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
String result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
return result;
}
public string GetAccessTokenImgs()
{
//获取 AccessToken
return BP.GPM.WeiXin.WeiXinEntity.getAccessToken();
}
/// <summary>
/// 下载微信服务器图片,上传到应用服务器
/// </summary>
/// <param name="mideaid"></param>
public string MyFlowGener_SaveUploadeImg()
{
try
{
string media_id = this.GetRequestVal("IDs");
string athMyPK = this.GetRequestVal("AthMyPK"); //图片组件.
FrmAttachment athDesc = new FrmAttachment(athMyPK);
if (string.IsNullOrEmpty(media_id))
{
return "media_id为空";
}
string accessToken = GetAccessTokenImgs();
//BP.DA.Log.DebugWriteError("accessToken:" + accessToken);
Bitmap img = null;
HttpWebRequest req;
HttpWebResponse res = null;
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}", accessToken, media_id);
System.Uri httpUrl = new System.Uri(url);
req = (HttpWebRequest)(WebRequest.Create(httpUrl));
req.Timeout = 180000; //设置超时值10秒
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
req.Method = "GET";
res = (HttpWebResponse)(req.GetResponse());
img = new Bitmap(res.GetResponseStream());//获取图片流
//BP.DA.Log.DebugWriteError(res.GetResponseHeader("Content-Type"));
string fileName = res.GetResponseHeader("Content-Disposition").Replace("attachment; filename=", "").Replace("\"", "");
img.Save(BP.Difference.SystemConfig.PathOfTemp + fileName);
BP.DA.Log.DebugWriteError(this.NodeID+":"+this.FlowNo + ":" + this.WorkID + ":" +
athDesc.NoOfObj + ":" + athDesc.FrmID + ":" + BP.Difference.SystemConfig.PathOfTemp + fileName + ":" + fileName);
BP.WF.CCFormAPI.CCForm_AddAth(this.NodeID,this.FlowNo, this.WorkID,
athMyPK, athDesc.FrmID, BP.Difference.SystemConfig.PathOfTemp + fileName, fileName);
return "执行成功";
}
catch (Exception ex)
{
string msg = "err@GetMedia:" + ex.Message + " -- " + ex.StackTrace;
BP.DA.Log.DebugWriteError(msg);
return msg;
}
}
public static byte[] BitmapToBytes(Bitmap Bitmap)
{
MemoryStream ms = null;
try
{
ms = new MemoryStream();
Bitmap.Save(ms, Bitmap.RawFormat);
byte[] byteImage = new Byte[ms.Length];
byteImage = ms.ToArray();
return byteImage;
}
catch (ArgumentNullException ex)
{
throw ex;
}
finally
{
ms.Close();
}
}
/// <summary>
/// 调用企业号获取地理位置
/// </summary>
/// <returns></returns>
public string GetWXConfigSetting()
{
string htmlPage = this.GetRequestVal("htmlPage");
Hashtable ht = new Hashtable();
//生成签名的时间戳
string timestamp = DateTime.Now.ToString("yyyyMMDDHHddss");
//生成签名的随机串
string nonceStr = BP.DA.DBAccess.GenerGUID();
//企业号jsapi_ticket
string jsapi_ticket = "";
string url1 = htmlPage;
//获取 AccessToken
string accessToken = BP.GPM.WeiXin.WeiXinEntity.getAccessToken();
string url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=" + accessToken;
string str = DataType.ReadURLContext(url);
//权限签名算法
BP.GPM.WeiXin.Ticket ticket = new BP.GPM.WeiXin.Ticket();
ticket = FormatToJson.ParseFromJson<BP.GPM.WeiXin.Ticket>(str);
if (ticket.errcode == "0")
jsapi_ticket = ticket.ticket;
else
return "err:@获取jsapi_ticket失败+accessToken=" + accessToken;
ht.Add("timestamp", timestamp);
ht.Add("nonceStr", nonceStr);
//企业微信的corpID
ht.Add("AppID", BP.Difference.SystemConfig.WX_CorpID);
//生成签名算法
string str1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url1 + "";
string Signature = BP.WF.Difference.Glo.Sha1Signature(str1);
ht.Add("signature", Signature);
return BP.Tools.Json.ToJson(ht);
}
public string GetIDCardInfo()
{
string token = getAccessToken();
JsonData jd = JsonMapper.ToObject(token);
string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token=" + jd["access_token"].ToString();
Encoding encoding = Encoding.Default;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.KeepAlive = true;
// 图片的base64编码
if (HttpContextHelper.RequestFilesCount == 0)
return "err@请选择要上传的身份证件。";
Stream stream = HttpContextHelper.RequestFiles(0).InputStream;//new MemoryStream();
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
string base64 = Convert.ToBase64String(bytes);
stream.Close();
String str = "id_card_side=" + "front" + "&image=" + HttpUtility.UrlEncode(base64);
byte[] buffer = encoding.GetBytes(str);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = reader.ReadToEnd();
return result;
}
/// <summary>
/// 获取微信公众号的签名
/// </summary>
/// <returns></returns>
public string GetWXGZHConfigSetting()
{
string htmlPage = this.GetRequestVal("htmlPage");
Hashtable ht = new Hashtable();
//生成签名的时间戳
string timestamp = DateTime.Now.ToString("yyyyMMDDHHddss");
//生成签名的随机串
string nonceStr = BP.DA.DBAccess.GenerGUID();
//企业号jsapi_ticket
string jsapi_ticket = "";
string url1 = htmlPage;
//获取 AccessToken
BP.WF.WeiXin.GZH.WeiXinGZHModel.AccessToken accessToken = BP.WF.WeiXin.WeiXinGZHEntity.getAccessToken();
if (accessToken.errcode!= "0"&& DataType.IsNullOrEmpty(accessToken.errcode)==false)
return "err@获取网页授权失败errcode" + accessToken.errcode;
string token = accessToken.access_token;
string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token+ "&type=jsapi";
string str = BP.Tools.PubGlo.HttpGet(url);
//权限签名算法
BP.GPM.WeiXin.Ticket ticket = new BP.GPM.WeiXin.Ticket();
ticket = FormatToJson.ParseFromJson<BP.GPM.WeiXin.Ticket>(str);
if (ticket.errcode == "0")
jsapi_ticket = ticket.ticket;
else
return "err@获取jsapi_ticket失败+accessToken=" + token;
ht.Add("timestamp", timestamp);
ht.Add("nonceStr", nonceStr);
//企业微信的corpID
ht.Add("AppID", BP.Difference.SystemConfig.WXGZH_Appid);
//生成签名算法
string str1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url1 + "";
string Signature = BP.WF.Difference.Glo.Sha1Signature(str1);
ht.Add("signature", Signature);
return BP.Tools.Json.ToJson(ht);
}
public string WXGZH_AthUpload()
{
//HttpPostedFile file = HttpContextHelper.RequestFiles(0);
if(HttpContextHelper.RequestFiles(0) == null)
{
return "err@请选择文件";
}
//string imageData = this.GetRequestVal("ImageData");
//if (DataType.IsNullOrEmpty(imageData) == true)
// return "";
//Log.DebugWriteInfo("上传附件信息ImageData:" + imageData);
// 多附件描述.
string pkVal = this.GetRequestVal("PKVal");
string attachPk = this.GetRequestVal("AttachPK");
BP.Sys.FrmAttachment athDesc = new BP.Sys.FrmAttachment(attachPk);
MapData mapData = new MapData(athDesc.FrmID);
string msg = "";
//求出来实体记录,方便执行事件.
GEEntity en = new GEEntity(athDesc.FrmID);
en.PKVal = pkVal;
if (en.RetrieveFromDBSources() == 0)
{
en.PKVal = this.FID;
if (en.RetrieveFromDBSources() == 0)
{
en.PKVal = this.PWorkID;
en.RetrieveFromDBSources();
}
}
//求主键. 如果该表单挂接到流程上.
if (this.NodeID != 0 && athDesc.NoOfObj.Contains("AthMDtl") == false)
{
//判断表单方案。
FrmNode fn = new FrmNode(this.NodeID, this.FrmID);
if (fn.FrmSln == FrmSln.Self)
{
BP.Sys.FrmAttachment myathDesc = new FrmAttachment();
myathDesc.setMyPK(attachPk + "_" + this.NodeID);
if (myathDesc.RetrieveFromDBSources() != 0)
athDesc.HisCtrlWay = myathDesc.HisCtrlWay;
}
pkVal = BP.WF.Dev2Interface.GetAthRefPKVal(this.WorkID, this.PWorkID, this.FID, this.NodeID, this.FrmID, athDesc);
}
string savePath = "";
string fileName = DBAccess.GenerGUID();
if (athDesc.AthSaveWay == AthSaveWay.IISServer)
{
savePath = athDesc.SaveTo + "/" + pkVal;
if (System.IO.Directory.Exists(savePath) == false)
System.IO.Directory.CreateDirectory(savePath);
savePath = savePath + "/" + fileName + ".png";
}
if (athDesc.AthSaveWay == AthSaveWay.FTPServer || athDesc.AthSaveWay == AthSaveWay.OSS)
{
savePath = BP.Difference.SystemConfig.PathOfTemp +fileName + ".tmp";
}
HttpContextHelper.RequestFiles(0).SaveAs(savePath);
//using (System.IO.FileStream fs = new FileStream(savePath, FileMode.Create))
//{
// using (BinaryWriter bw = new BinaryWriter(fs))
// {
// byte[] data = Convert.FromBase64String(imageData);
// bw.Write(data);
// bw.Close();
// }
//}
string ny = DateTime.Now.ToString("yyyy_MM");
if (athDesc.AthSaveWay == AthSaveWay.FTPServer)
{
/*保存到fpt服务器上.*/
BP.FtpConnection ftpconn = null;
try
{
ftpconn = new BP.FtpConnection(BP.Difference.SystemConfig.FTPServerIP,
SystemConfig.FTPServerPort,
SystemConfig.FTPUserNo, BP.Difference.SystemConfig.FTPUserPassword);
}
catch
{
throw new Exception("err@FTP连接失败请检查账号,密码,端口号是否正确");
}
//判断目录年月是否存在.
if (ftpconn.DirectoryExist(ny) == false)
ftpconn.CreateDirectory(ny);
ftpconn.SetCurrentDirectory(ny);
//判断目录是否存在.
if (ftpconn.DirectoryExist(athDesc.FrmID) == false)
ftpconn.CreateDirectory(athDesc.FrmID);
//设置当前目录,为操作的目录。
ftpconn.SetCurrentDirectory(athDesc.FrmID);
//把文件放上去.
try
{
ftpconn.PutFile(savePath, fileName + ".png");
}
catch
{
throw new Exception("err@FTP端口号受限或者防火墙未关闭");
}
ftpconn.Close();
}
#region 文件上传到OSS服务器上
if (athDesc.AthSaveWay == AthSaveWay.OSS)
{
string subDir = "";
//判断是否有子目录路径
if (DataType.IsNullOrEmpty(BP.Difference.SystemConfig.BucketSubPath) == false && "/".Equals(BP.Difference.SystemConfig.BucketSubPath) == false)
{
subDir = BP.Difference.SystemConfig.BucketSubPath + "/";
}
// 填写Object完整路径完整路径中不能包含Bucket名称例如exampledir/exampleobject.txt。
var objectName = subDir + ny + "/" + athDesc.FrmID + "/" + fileName + ".png";
OSSUtil.doUpload(objectName, savePath);
}
#endregion 文件上传到OSS服务器上
FileInfo info = new FileInfo(savePath);
FrmAttachmentDB dbUpload = new FrmAttachmentDB();
dbUpload.setMyPK(DBAccess.GenerGUID());
dbUpload.Sort = "";
dbUpload.NodeID = this.NodeID;
dbUpload.FrmID= athDesc.FrmID;
dbUpload.FK_FrmAttachment = athDesc.MyPK;
dbUpload.FID = this.FID; //流程id.
dbUpload.RefPKVal = pkVal.ToString();
dbUpload.FrmID= athDesc.FrmID;
dbUpload.FK_FrmAttachment = athDesc.MyPK;
dbUpload.FileName = fileName+".png";
dbUpload.FileSize = (float)info.Length;
dbUpload.RDT = DataType.CurrentDateTimess;
dbUpload.Rec = BP.Web.WebUser.No;
dbUpload.RecName = BP.Web.WebUser.Name;
dbUpload.DeptNo = WebUser.DeptNo;
dbUpload.DeptName = WebUser.DeptName;
dbUpload.FileExts = "png";
if (athDesc.AthSaveWay == AthSaveWay.IISServer)
//文件方式保存
dbUpload.FileFullName = savePath;
if (athDesc.AthSaveWay == AthSaveWay.FTPServer || athDesc.AthSaveWay == AthSaveWay.OSS)
dbUpload.FileFullName = ny + "//" + athDesc.FrmID + "//" + fileName + ".png";
dbUpload.Insert();
return "上传成功";
}
}
}