using Model; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; namespace BLL { public static class PMPDataService { //private static readonly string PmpApiUrl = "http://mdm.cwcec.com:8020/"; private static readonly string PmpApiUrl = SysConstSetService.WuHuanPMPPath; /// /// 获取token /// /// 五环PMP系统token有效期48小时 /// public static Model.TokenItem GetToken() { Model.TokenItem tokenItem = new Model.TokenItem(); tokenItem.Token = BLL.SysConstSetService.WuHuanPMPToken; tokenItem.ExpiryTime = BLL.SysConstSetService.WuHuanPMPTokenExTime; if (string.IsNullOrEmpty(tokenItem.Token) || string.IsNullOrEmpty(tokenItem.ExpiryTime)) { tokenItem = GetWuHuanPMPToken(); } else if (DateTime.Now > DateTime.Parse(tokenItem.ExpiryTime)) { tokenItem = GetWuHuanPMPToken(); } return tokenItem; } /// /// 获取五环PMP系统Token /// /// 他们的token有效期48小时 /// public static Model.TokenItem GetWuHuanPMPToken() { string getUrl = PmpApiUrl + "/api/standard/dis/token?appId=v7lm6i30&appSecret=0qnbsy28e1hldzbm7rnyjs4n93s4eu62"; TokenItem tokenItem = new TokenItem(); try { var strJosn = Http(getUrl); if (!string.IsNullOrEmpty(strJosn)) { JObject obj = JObject.Parse(strJosn); if (obj["data"] != null) { string tokenStr = obj["data"].ToString(); tokenItem.Token = tokenStr; tokenItem.ExpiryTime = DateTime.Now.AddHours(40).ToString("yyyy-MM-dd HH:mm:ss"); SysConstSetService.SetWuHuanPMPToken(tokenItem.Token); SysConstSetService.SetWuHuanPMPTokenExpirationTime(tokenItem.ExpiryTime); } } } catch (Exception eee) { ErrLogInfo.WriteLog("获取五环PMP系统Token出错1:" + eee.StackTrace + eee.Message); } return tokenItem; } /// /// 项目档案查询接口 /// public static void GetPMPProjectMasterData() { string url = $"{PmpApiUrl}/api/standard/dis/query_all"; var token = GetToken(); Hashtable newToken = new Hashtable { { "Authorization", token.Token } }; string mess = string.Empty; string total = string.Empty; string code = string.Empty; string data = string.Empty; string rows = string.Empty; List list = new List(); int pageSize = 1000;//一次性最多返回1000条数据 List searchCond = new List(); for (int pageNum = 1; pageNum < 10; pageNum++) { var tempData = new { actRet = 1, pageNumber = pageNum, pageSize = pageSize, sortName = "id", searchDestCode = "", sortOrder = "desc", searchDisStatus = "", menuName = "项目档案", status = 1, //searchCond = new List(), searchCond = searchCond }; string pushContent = JsonConvert.SerializeObject(tempData); var returndata = BLL.APIGetHttpService.OutsideHttp(url, "POST", null, newToken, pushContent); //var returndata = "{\"msg\":\"操作成功\",\"total\":4405,\"code\":1,\"data\":{\"userColumnPermissions\":\"\"},\"rows\":[{\"code\":\"100541\",\"projShortName\":\"内蒙古卓正聚甲醛项目\",\"projectNameEn\":\"\",\"cityCode\":\"150600\",\"stProjectStepVals\":\"3006\",\"realEndDate\":\"\",\"remarkA\":\"\",\"remarkC\":\"\",\"remarkB\":\"\",\"cityName\":\"鄂尔多斯市\",\"countryCode\":\"CHN\",\"id\":6182,\"projStepZxnoVals\":\"20\",\"countyName\":\"乌审旗\",\"realStartDate\":\"2025-03-27T00:00:00\",\"address\":\"纳林河工业园\",\"provinceCode\":\"150000\",\"projStepZxnoCode\":\"20\",\"stProjectTypeVals\":\"30\",\"stNum\":\"24070\",\"disType\":\"\",\"projStepZxnoName\":\"项目实施\",\"countyCode\":\"150626\",\"stProjectPropertyVals\":\"10\",\"name\":\"内蒙古卓正煤化工有限公司甲醇醋酸延链优化深加工与综合利用生产高端化学品及新材料聚甲醛项目\",\"provinceName\":\"内蒙古自治区\",\"countryName\":\"中国\"},{\"code\":\"100540\",\"projShortName\":\"越南富美4万吨/年双氧水项目\",\"projectNameEn\":\"\",\"cityCode\":\"\",\"stProjectStepVals\":\"9909\",\"realEndDate\":\"\",\"remarkA\":\"\",\"remarkC\":\"\",\"remarkB\":\"\",\"cityName\":\"\",\"countryCode\":\"VNM\",\"id\":6180,\"projStepZxnoVals\":\"20\",\"countyName\":\"\",\"realStartDate\":\"2025-03-27T00:00:00\",\"address\":\"头顿\",\"provinceCode\":\"\",\"projStepZxnoCode\":\"20\",\"stProjectTypeVals\":\"99\",\"stNum\":\"25095\",\"disType\":\"\",\"projStepZxnoName\":\"项目实施\",\"countyCode\":\"\",\"stProjectPropertyVals\":\"10\",\"name\":\"越南富美4万吨/年双氧水项目\",\"provinceName\":\"\",\"countryName\":\"越南\"},{\"code\":\"100539\",\"projShortName\":\"新疆年产40亿方煤制天然气项目\",\"projectNameEn\":\"\",\"cityCode\":\"654000\",\"stProjectStepVals\":\"3006\",\"realEndDate\":\"\",\"remarkA\":\"\",\"remarkC\":\"\",\"remarkB\":\"\",\"cityName\":\"伊犁哈萨克自治州\",\"countryCode\":\"CHN\",\"id\":6178,\"projStepZxnoVals\":\"10\",\"countyName\":\"伊宁县\",\"realStartDate\":\"2025-03-27T00:00:00\",\"address\":\"伊宁县工业园区\",\"provinceCode\":\"650000\",\"projStepZxnoCode\":\"10\",\"stProjectTypeVals\":\"30\",\"stNum\":\"25093\",\"disType\":\"\",\"projStepZxnoName\":\"项目投标\",\"countyCode\":\"654021\",\"stProjectPropertyVals\":\"10\",\"name\":\"新疆年产40亿方煤制天然气项目\",\"provinceName\":\"新疆维吾尔自治区\",\"countryName\":\"中国\"},{\"code\":\"100538\",\"projShortName\":\"印尼泗水PET项目\",\"projectNameEn\":\"\",\"cityCode\":\"\",\"stProjectStepVals\":\"2001\",\"realEndDate\":\"\",\"remarkA\":\"\",\"remarkC\":\"\",\"remarkB\":\"\",\"cityName\":\"\",\"countryCode\":\"IDN\",\"id\":6176,\"projStepZxnoVals\":\"20\",\"countyName\":\"\",\"realStartDate\":\"2025-03-27T00:00:00\",\"address\":\"印度尼西亚泗水市\",\"provinceCode\":\"\",\"projStepZxnoCode\":\"20\",\"stProjectTypeVals\":\"20\",\"stNum\":\"25092\",\"disType\":\"\",\"projStepZxnoName\":\"项目实施\",\"countyCode\":\"\",\"stProjectPropertyVals\":\"10\",\"name\":\"印尼泗水PET项目\",\"provinceName\":\"\",\"countryName\":\"印度尼西亚\"}]}"; if (!string.IsNullOrEmpty(returndata)) { //JObject obj = JObject.Parse(returndata); //mess = obj["msg"].ToString(); //total = obj["total"].ToString(); //code = obj["code"].ToString(); //data = obj["data"].ToString(); //rows = obj["rows"].ToString(); PMPResponseData pmpResponseData = PMPResponseData.FromJson(returndata); if (pmpResponseData.code == 1 && pmpResponseData.rows.Any()) { foreach (var item in pmpResponseData.rows) { PMP_Project newItem = new PMP_Project(); newItem.Id = item.id; newItem.Code = item.code; newItem.StNum = item.stNum; newItem.Name = item.name; newItem.ProjectNameEn = item.projectNameEn; newItem.RealStartDate = item.realStartDate; newItem.RealEndDate = item.realEndDate; newItem.PlanStartDate = item.planStartDate; newItem.PlanEndDate = item.planEndDate; newItem.DisType = item.disType; newItem.ProjShortName = item.projShortName; newItem.ProjStepZxnoCode = item.projStepZxnoCode; newItem.ProjStepZxnoName = item.projStepZxnoName; newItem.StProjectTypeVals = item.stProjectTypeVals; newItem.StProjectStepVals = item.stProjectStepVals; newItem.ProjStepZxnoVals = item.projStepZxnoVals; newItem.StProjectPropertyVals = item.stProjectPropertyVals; newItem.RemarkA = item.remarkA; newItem.RemarkB = item.remarkB; newItem.RemarkC = item.remarkC; newItem.StLocationName = item.stLocationName; newItem.Address = item.address; newItem.CityCode = item.cityCode; newItem.CityName = item.cityName; newItem.CountryCode = item.countryCode; newItem.CountryName = item.countryName; newItem.CountyCode = item.countyCode; newItem.CountyName = item.countyName; newItem.ProvinceCode = item.provinceCode; newItem.ProvinceName = item.provinceName; newItem.StClientName = item.stClientName; newItem.ClientContactor = item.clientContactor; newItem.MobileTel = item.mobileTel; newItem.CreateTime = DateTime.Now; list.Add(newItem); } if (pmpResponseData.rows.Count < 1000) {//当本次请求数据小于1000时,说明后续已经没有数据了,不用再请求接口;跳出循环 break; } } else { break; } } else { break; } } if (list.Any()) { DeleteAllPMP_Project(); AddPMP_Project(list); } } /// /// 项目OBS查询接口 /// /// 项目Id public static List GetPMPProjectOBSData(string proId) { string url = $"{PmpApiUrl}/api/standard/dis/query_all"; var token = GetToken(); Hashtable newToken = new Hashtable { { "Authorization", token.Token } }; string mess = string.Empty; string total = string.Empty; string code = string.Empty; string data = string.Empty; string rows = string.Empty; List outlist = new List(); List list = new List(); int pageSize = 1000;//一次性最多返回1000条数据 List searchCond = new List(); searchCond.Add(new PMPSearchCondData { name = "projectId", value = proId, fieldType = "SelectList" }); for (int pageNum = 1; pageNum < 10; pageNum++) { var tempData = new { actRet = 1, pageNumber = pageNum, pageSize = pageSize, sortName = "id", searchDestCode = "", sortOrder = "desc", searchDisStatus = "", menuName = "OBS", status = 1, searchCond = searchCond }; string pushContent = JsonConvert.SerializeObject(tempData); //var returndata = BLL.APIGetHttpService.OutsideHttp(url, "POST", null, newToken, pushContent); var returndata = "{\"msg\":\"操作成功\",\"total\":25,\"code\":1,\"data\":{\"userColumnPermissions\":\"\"},\"rows\":[{\"disType\":\"\",\"obsId\":\"1874790096868347904\",\"code\":\"1874790096868347904\",\"staffCode\":\"\",\"proCode\":\"CP\",\"level\":2,\"staffName\":\"\",\"name\":\"化工工艺设计人员\",\"id\":944768,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"},{\"disType\":\"\",\"obsId\":\"1874790096893513728\",\"code\":\"1874790096893513728\",\"staffCode\":\"722\",\"proCode\":\"CP\",\"level\":3,\"staffName\":\"赵保林\",\"name\":\"1717470687628759040\",\"id\":944766,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874790096868347904\"},{\"disType\":\"\",\"obsId\":\"1874790098684481536\",\"code\":\"1874790098684481536\",\"staffCode\":\"30453\",\"proCode\":\"CP\",\"level\":3,\"staffName\":\"李平\",\"name\":\"1717471296016748544\",\"id\":944764,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874790096868347904\"},{\"disType\":\"\",\"obsId\":\"1874004933423009792\",\"code\":\"1874004933423009792\",\"staffCode\":\"\",\"proCode\":\"MC\",\"level\":1,\"staffName\":\"\",\"name\":\"设计岗位\",\"id\":944642,\"projectId\":\"1857091204378914817\",\"obsPid\":\"0\"},{\"disType\":\"\",\"obsId\":\"1874004946622484480\",\"code\":\"1874004946622484480\",\"staffCode\":\"\",\"proCode\":\"\",\"level\":2,\"staffName\":\"\",\"name\":\"项目经理\",\"id\":944640,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004944894431232\"},{\"disType\":\"\",\"obsId\":\"1874004933448175616\",\"code\":\"1874004933448175616\",\"staffCode\":\"\",\"proCode\":\"PL\",\"level\":2,\"staffName\":\"\",\"name\":\"总图运输专业负责人\",\"id\":944638,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"},{\"disType\":\"\",\"obsId\":\"1874004936635846656\",\"code\":\"1874004936635846656\",\"staffCode\":\"\",\"proCode\":\"ST\",\"level\":2,\"staffName\":\"\",\"name\":\"结构专业负责人\",\"id\":944636,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"},{\"disType\":\"\",\"obsId\":\"1874004941513822208\",\"code\":\"1874004941513822208\",\"staffCode\":\"\",\"proCode\":\"EL\",\"level\":2,\"staffName\":\"\",\"name\":\"电气专业负责人\",\"id\":944634,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"},{\"disType\":\"\",\"obsId\":\"1874004933469147136\",\"code\":\"1874004933469147136\",\"staffCode\":\"2239\",\"proCode\":\"PL\",\"level\":3,\"staffName\":\"夏玉霞\",\"name\":\"1717471200965431296\",\"id\":944632,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933448175616\"},{\"disType\":\"\",\"obsId\":\"1874004935062982656\",\"code\":\"1874004935062982656\",\"staffCode\":\"1610\",\"proCode\":\"IN\",\"level\":3,\"staffName\":\"李伟家\",\"name\":\"1717470915924725760\",\"id\":944630,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004935037816832\"},{\"disType\":\"\",\"obsId\":\"1874004944894431232\",\"code\":\"1874004944894431232\",\"staffCode\":\"\",\"proCode\":\"\",\"level\":1,\"staffName\":\"\",\"name\":\"管理岗位\",\"id\":944628,\"projectId\":\"1857091204378914817\",\"obsPid\":\"0\"},{\"disType\":\"\",\"obsId\":\"1874004948350537728\",\"code\":\"1874004948350537728\",\"staffCode\":\"591\",\"proCode\":\"\",\"level\":3,\"staffName\":\"刘翔\",\"name\":\"1717470662420992000\",\"id\":944626,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004948325371904\"},{\"disType\":\"\",\"obsId\":\"1874004941538988032\",\"code\":\"1874004941538988032\",\"staffCode\":\"387\",\"proCode\":\"EL\",\"level\":3,\"staffName\":\"李婉\",\"name\":\"1717470613658013696\",\"id\":944624,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004941513822208\"},{\"disType\":\"\",\"obsId\":\"1874004943308984320\",\"code\":\"1874004943308984320\",\"staffCode\":\"235\",\"proCode\":\"MC\",\"level\":3,\"staffName\":\"吴菁\",\"name\":\"1717470571836608512\",\"id\":944622,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004943288012800\"},{\"disType\":\"\",\"obsId\":\"1874004944940568576\",\"code\":\"1874004944940568576\",\"staffCode\":\"4\",\"proCode\":\"\",\"level\":3,\"staffName\":\"张锦跃\",\"name\":\"1717470496427216896\",\"id\":944620,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004944919597056\"},{\"disType\":\"\",\"obsId\":\"1874004938250653696\",\"code\":\"1874004938250653696\",\"staffCode\":\"\",\"proCode\":\"CP\",\"level\":2,\"staffName\":\"\",\"name\":\"化工工艺专业负责人\",\"id\":944618,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"},{\"disType\":\"\",\"obsId\":\"1874004948325371904\",\"code\":\"1874004948325371904\",\"staffCode\":\"\",\"proCode\":\"\",\"level\":2,\"staffName\":\"\",\"name\":\"项目技术主管\",\"id\":944616,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004944894431232\"},{\"disType\":\"\",\"obsId\":\"1874004946647650304\",\"code\":\"1874004946647650304\",\"staffCode\":\"890\",\"proCode\":\"\",\"level\":3,\"staffName\":\"金吉\",\"name\":\"1717470730419048448\",\"id\":944614,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004946622484480\"},{\"disType\":\"\",\"obsId\":\"1874004935037816832\",\"code\":\"1874004935037816832\",\"staffCode\":\"\",\"proCode\":\"IN\",\"level\":2,\"staffName\":\"\",\"name\":\"仪表专业负责人\",\"id\":944612,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"},{\"disType\":\"\",\"obsId\":\"1874004944919597056\",\"code\":\"1874004944919597056\",\"staffCode\":\"\",\"proCode\":\"\",\"level\":2,\"staffName\":\"\",\"name\":\"项目主管\",\"id\":944610,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004944894431232\"},{\"disType\":\"\",\"obsId\":\"1874004939882237952\",\"code\":\"1874004939882237952\",\"staffCode\":\"957\",\"proCode\":\"PP\",\"level\":3,\"staffName\":\"黄晓娟\",\"name\":\"1717470773876232192\",\"id\":944608,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004939861266432\"},{\"disType\":\"\",\"obsId\":\"1874004943288012800\",\"code\":\"1874004943288012800\",\"staffCode\":\"\",\"proCode\":\"MC\",\"level\":2,\"staffName\":\"\",\"name\":\"材控应力专业负责人\",\"id\":944606,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"},{\"disType\":\"\",\"obsId\":\"1874004938271625216\",\"code\":\"1874004938271625216\",\"staffCode\":\"1008\",\"proCode\":\"CP\",\"level\":3,\"staffName\":\"王海\",\"name\":\"1717470759519129600\",\"id\":944604,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004938250653696\"},{\"disType\":\"\",\"obsId\":\"1874004936669401088\",\"code\":\"1874004936669401088\",\"staffCode\":\"468\",\"proCode\":\"ST\",\"level\":3,\"staffName\":\"陈宇\",\"name\":\"1717470632112951296\",\"id\":944602,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004936635846656\"},{\"disType\":\"\",\"obsId\":\"1874004939861266432\",\"code\":\"1874004939861266432\",\"staffCode\":\"\",\"proCode\":\"PP\",\"level\":2,\"staffName\":\"\",\"name\":\"管道布置专业负责人\",\"id\":944600,\"projectId\":\"1857091204378914817\",\"obsPid\":\"1874004933423009792\"}]}"; if (!string.IsNullOrEmpty(returndata)) { //JObject obj = JObject.Parse(returndata); //mess = obj["msg"].ToString(); //total = obj["total"].ToString(); //code = obj["code"].ToString(); //data = obj["data"].ToString(); //rows = obj["rows"].ToString(); PMPOBSResponseData pmpOBSResponseData = PMPOBSResponseData.FromJson(returndata); if (pmpOBSResponseData.code == 1 && pmpOBSResponseData.rows.Any()) { list.AddRange(pmpOBSResponseData.rows); if (pmpOBSResponseData.rows.Count < 1000) {//当本次请求数据小于1000时,说明后续已经没有数据了,不用再请求接口;跳出循环 break; } } else { break; } } else { break; } } if (list.Any()) { //获取岗位专业人员 var userlist = list.Where(x => x.level == 3 && !string.IsNullOrWhiteSpace(x.staffName)); foreach (var user in userlist) { //根据obsPid获取对应任职岗位 var work = list.Where(x => x.obsId == user.obsPid).FirstOrDefault(); if (work != null) { outlist.Add(new PMPOBSOutInput { workName = work.name, userName = user.staffName }); } } } return outlist; } public static void AddPMP_Project(List newtables) { Model.SGGLDB db = Funs.DB; db.PMP_Project.InsertAllOnSubmit(newtables); db.SubmitChanges(); } public static void DeleteAllPMP_Project() { Model.SGGLDB db = Funs.DB; if (db.PMP_Project.FirstOrDefault() != null) { db.PMP_Project.DeleteAllOnSubmit(db.PMP_Project); db.SubmitChanges(); } } public static string Http(string url, string method = "GET", string contenttype = "application/json;charset=utf-8", Hashtable header = null, string data = null) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = string.IsNullOrEmpty(method) ? "GET" : method; request.ContentType = string.IsNullOrEmpty(contenttype) ? "application/json;charset=utf-8" : contenttype; if (header != null) { foreach (var i in header.Keys) { request.Headers.Add(i.ToString(), header[i].ToString()); } } else if (method == "POST") { var token = GetToken(); request.Headers.Add("Authorization", token.Token); } request.Timeout = 20000; /// 设置5秒超时 if (!string.IsNullOrEmpty(data)) { Stream RequestStream = request.GetRequestStream(); byte[] bytes = Encoding.UTF8.GetBytes(data); RequestStream.Write(bytes, 0, bytes.Length); RequestStream.Close(); } HttpWebResponse response = null; Stream ResponseStream = null; StreamReader StreamReader = null; try { response = (HttpWebResponse)request.GetResponse(); ResponseStream = response.GetResponseStream(); StreamReader = new StreamReader(ResponseStream, Encoding.GetEncoding("utf-8")); string re = StreamReader.ReadToEnd(); StreamReader.Close(); ResponseStream.Close(); return re; } catch (WebException ex) { response = (HttpWebResponse)ex.Response; ResponseStream = response.GetResponseStream(); StreamReader = new StreamReader(ResponseStream, Encoding.GetEncoding("utf-8")); string re = StreamReader.ReadToEnd(); return re; } finally { if (StreamReader != null) { StreamReader.Close(); } if (ResponseStream != null) { ResponseStream.Close(); } if (response != null) { response.Close(); } } } } }