123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693 |
- using DbCommon.BusinessCore.BaseCore;
- using DbCommon.Enties.DbModels;
- using ProjectManagementSystem.Common.Config;
- using ProjectManagementSystem.Common.Extenions;
- using ProjectManagementSystem.Common.Function;
- using ProjectManagementSystem.Common.Logger;
- using ProjectManagementSystem.Common.Models.Crms;
- using ProjectManagementSystem.Common.Service;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml.Serialization;
- namespace ProjectManagementSystem.Common.Core
- {
- public class SystemInitialize
- {
- public static ConcurrentDictionary<int, Station> MapStationDictionary { get; set; } = new ConcurrentDictionary<int, Station>();
- public static void SystemStarted()
- {
- var firstLoop = true;
- while (true)
- {
- try
- {
- var result = Crms.PmsApi.GetPmsBehavior();
- if (result != null)
- {
- if (!firstLoop)
- {
- System.Threading.Thread.Sleep(5000);
- }
- break;
- }
- firstLoop = false;
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteExceptionCaller(ex);
- }
- System.Threading.Thread.Sleep(5000);
- }
- }
- public static bool InitDataSource()
- {
- try
- {
- AsyncBehaviorManager asyncBehaviorManager = new AsyncBehaviorManager();
- asyncBehaviorManager.Init();
- WareHouseManager wareHouseManager = new WareHouseManager();
- wareHouseManager.Init();
- LocationPropertyManager locationPropertyManager = new LocationPropertyManager();
- locationPropertyManager.Init();
- MaterialDetailManager materialDetailManager = new MaterialDetailManager();
- materialDetailManager.Init();
- //CallTaskManager callTaskManager = new CallTaskManager();
- //callTaskManager.Init();
- //callTaskManager.DeleteOldData();
- MaterialBindingManager materialBindingManager = new MaterialBindingManager();
- materialBindingManager.Init();
- PmsTaskInfoManager pmsTaskInfoManger = new PmsTaskInfoManager();
- pmsTaskInfoManger.Init();
- pmsTaskInfoManger.DeleteOldData();
- //AgvMaterialBindingManager agvMaterialBindingManager = new AgvMaterialBindingManager();
- //agvMaterialBindingManager.Init();
- AreaTrafficManager areaTrafficManager = new AreaTrafficManager();
- areaTrafficManager.Init();
- return true;
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteExceptionCaller(ex);
- }
- return false;
- }
- public static bool InitWMS()
- {
- try
- {
- CLog.Instance.SystemLog.WriteInfo("同步WMS信息...");
- LocationPropertyManager locationManager = new LocationPropertyManager();
- WareHouseManager wareHouseManager = new WareHouseManager();
- //从基础配置表里获取库位信息
- var wHouses = ExcelConfig.Instance.RouteConfigList
- .Where(d => !string.IsNullOrEmpty(d.WareHouseCode))
- .Select(d => d.WareHouseCode)
- .Distinct()
- .ToList();
- var wHousesInsertList = new List<WareHouse>();
- var wHouseList = wareHouseManager.GetList();
- foreach (var item in wHouses)
- {
- var data = wHouseList.FirstOrDefault(d => d.WareHouseCode == item);
- if (data == null)
- {
- var data2 = new WareHouse();
- data2.WareHouseCode = item;
- data2.WareHouseName = item;
- wHousesInsertList.Add(data2);
- }
- }
- if (wHousesInsertList.Count > 0)
- {
- wareHouseManager.Insert(wHousesInsertList);
- }
- //仓位
- var configs = ExcelConfig.Instance.RouteConfigList
- .Where(d => !string.IsNullOrEmpty(d.WareHouseCode) && !string.IsNullOrEmpty(d.LocationCode) && d.StationID > 0);
- var insertList = new List<LocationProperty>();
- var updateList = new List<LocationProperty>();
- var locationList = locationManager.GetList();
- foreach (var item in configs)
- {
- if (string.IsNullOrWhiteSpace(item.Area))
- {
- item.Area = item.WareHouseCode;
- }
- var data = locationList.FirstOrDefault(d => d.LocationCode == item.LocationCode);
- if (data == null)
- {
- var data2 = new LocationProperty();
- data2.WareHouseCode = item.WareHouseCode;
- data2.LocationCode = item.LocationCode;
- data2.Mark = item.StationID;
- data2.Active = "N";
- data2.ModifyUser = "xjh";
- data2.ModifyTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- data2.Area = item.Area;
- data2.RowIndex = item.RowIndex;
- data2.ColumnIndex = item.ColumnIndex;
- insertList.Add(data2);
- }
- else
- {
- if (data.Mark != item.StationID
- || data.WareHouseCode != item.WareHouseCode
- || data.Area != item.Area
- || data.RowIndex != item.RowIndex
- || data.ColumnIndex != item.ColumnIndex)
- {
- data.Mark = item.StationID;
- data.WareHouseCode = item.WareHouseCode;
- data.Area = item.Area;
- data.RowIndex = item.RowIndex;
- data.ColumnIndex = item.ColumnIndex;
- updateList.Add(data);
- }
- }
- }
- if (insertList.Count > 0)
- {
- locationManager.Insert(insertList);
- }
- if (updateList.Count > 0)
- {
- locationManager.Update(updateList);
- }
- CLog.Instance.SystemLog.WriteInfo("同步WMS信息完毕");
- return true;
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteExceptionCaller(ex);
- }
- return false;
- }
- public static bool InitSWMS()
- {
- try
- {
- CLog.Instance.SystemLog.WriteInfo("同步SWMS信息...");
- //仓库
- var wHouseList = Crms.SWmsApi.GetAllWarehouse();
- var wHouses = ExcelConfig.Instance.RouteConfigList
- .Where(d => !string.IsNullOrEmpty(d.WareHouseCode))
- .Select(d => d.WareHouseCode)
- .Distinct()
- .ToList();
- foreach (var item in wHouses)
- {
- var data = wHouseList.FirstOrDefault(d => d.warehouseId == item);
- if (data == null)
- {
- var data2 = new SWmsWarehouse();
- data2.warehouseId = item;
- data2.warehouseName = item;
- var result = Crms.SWmsApi.AddWarehouse(data2, out var content);
- if (!result)
- {
- CLog.Instance.SystemLog.WriteInfo($"添加仓库配置失败 {content}");
- }
- }
- }
- //区域
- var areaList = Crms.SWmsApi.GetAllArea();
- var areas = ExcelConfig.Instance.RouteConfigList
- .Where(d => !string.IsNullOrEmpty(d.Area))
- .Select(d => d.Area)
- .Distinct()
- .ToList();
- foreach (var item in areas)
- {
- var data = areaList.FirstOrDefault(d => d.areaId == item);
- if (data == null)
- {
- var data2 = new SWmsArea();
- data2.areaId = item;
- data2.areaName = item;
- var result = Crms.SWmsApi.AddArea(data2, out var content);
- if (!result)
- {
- CLog.Instance.SystemLog.WriteInfo($"添加区域配置失败 {content}");
- }
- }
- }
- //库位状态
- var statusList = Crms.SWmsApi.GetAllLocationStatus();
- //var statusArray = typeof(LocationStatus).GetEnumValues();
- var statusArray = new LocationStatus[] { LocationStatus.None };
- foreach (var item in statusArray)
- {
- var statusCode = item.ToValue<int>().ToString();
- var data = statusList.FirstOrDefault(d => d.statusCode == statusCode);
- if (data == null)
- {
- var data2 = new SWmsLocationStatus();
- data2.statusCode = statusCode;
- data2.zh_CN = item.ToStatusString();
- data2.zh_HK = "";
- data2.en_US = "";
- data2.active = true;
- var result = Crms.SWmsApi.AddLocationStatus(data2, out var content);
- if (!result)
- {
- CLog.Instance.SystemLog.WriteInfo($"添加库位状态配置失败 {content}");
- }
- }
- }
- #region 8723屏蔽
- //货物模型
- //var freightShapeList = Crms.SWmsApi.GetAllFreightShape();
- //var goodsArray = new string[] { "默认货物", "空料车", "满料车" };
- //foreach (var item in goodsArray)
- //{
- // var data = freightShapeList.FirstOrDefault(d => d.shapeName == item);
- // if (data == null)
- // {
- // var data2 = new SWmsFreightShape();
- // data2.shapeName = item;
- // data2.shapeType = 1;
- // data2.freightIcon = 3;
- // data2.maxLength = 1000;
- // data2.maxWidth = 1000;
- // data2.rotateWithCarrier = true;
- // data2.viewRatio = 100;
- // var result = Crms.SWmsApi.AddFreightShape(data2, out var content);
- // if (!result)
- // {
- // CLog.Instance.SystemLog.WriteInfo($"添加货物模型失败 {content}");
- // }
- // }
- //}
- //freightShapeList = Crms.SWmsApi.GetAllFreightShape();
- //var goodsList = Crms.SWmsApi.GetAllGoods();
- //foreach (var item in goodsArray)
- //{
- // var data = goodsList.FirstOrDefault(d => d.goodsCode == item);
- // if (data == null)
- // {
- // var data2 = new SWmsGoods();
- // data2.goodsCode = item;
- // data2.goodsName = item;
- // data2.goodsShape = freightShapeList.FirstOrDefault(d => d.shapeName == item)?.id ?? 0;
- // var result = Crms.SWmsApi.AddGoods(data2, out var content);
- // if (!result)
- // {
- // CLog.Instance.SystemLog.WriteInfo($"添加货物失败 {content}");
- // }
- // }
- //}
- #endregion
- //库位
- var locationList = Crms.SWmsApi.GetAllLocation();
- var configs = ExcelConfig.Instance.RouteConfigList
- .Where(d => !string.IsNullOrEmpty(d.WareHouseCode) && !string.IsNullOrEmpty(d.LocationCode) && d.StationID > 0);
- foreach (var item in configs)
- {
- if (string.IsNullOrWhiteSpace(item.Area))
- {
- item.Area = item.WareHouseCode;
- }
- var rowText = item.RowIndex > 0 ? item.RowIndex.ToString("D4") : string.Empty;
- var colText = item.ColumnIndex > 0 ? item.ColumnIndex.ToString("D4") : string.Empty;
- var data = locationList.FirstOrDefault(d => d.locationId == item.LocationCode);
- if (data == null)
- {
- var data2 = new SWmsLocation();
- data2.warehouseId = item.WareHouseCode;
- data2.areaId = item.Area;
- data2.locationId = item.LocationCode;
- data2.locationName = item.LocationCode;
- data2.enable = true;
- data2.row = rowText;
- data2.column = colText;
- var result = Crms.SWmsApi.AddLocation(data2, out var content);
- if (!result)
- {
- CLog.Instance.SystemLog.WriteInfo($"添加库位失败 {content}");
- }
- }
- else if (data.warehouseId != item.WareHouseCode
- || data.areaId != item.Area
- || data.row != rowText
- || data.column != colText)
- {
- data.warehouseId = item.WareHouseCode;
- data.areaId = item.Area;
- data.row = rowText;
- data.column = colText;
- var result = Crms.SWmsApi.UpdateLocation(data, out var content);
- if (!result)
- {
- CLog.Instance.SystemLog.WriteInfo($"更新库位失败 {content}");
- }
- }
- }
- CLog.Instance.SystemLog.WriteInfo("同步SWMS信息完毕");
- return true;
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteExceptionCaller(ex);
- }
- return false;
- }
- public static bool InitWareHouse()
- {
- try
- {
- CLog.Instance.SystemLog.WriteInfo("同步任务点信息...");
- var whouseInfoList = Crms.PmsApi.GetWarehouseListInfo(string.Empty);
- if (whouseInfoList == null)
- {
- CLog.Instance.SystemLog.WriteError("获取库位活动点失败,请检查CRMS是否启动");
- return false;
- }
- var whouseGroupTypeList = Crms.PmsApi.GetwarehouseGroupType();
- if (whouseGroupTypeList == null)
- {
- CLog.Instance.SystemLog.WriteError("获取库位组信息失败,请检查CRMS是否启动");
- return false;
- }
- //WarehouseType -> GroupId
- Dictionary<string, string> whouseTypeGroupIdDict = new Dictionary<string, string>();
- for (int i = 0; i < whouseGroupTypeList.Count; i++)
- {
- var whouseGroupType = whouseGroupTypeList[i];
- if (!whouseTypeGroupIdDict.ContainsKey(whouseGroupType.WareHouseType))
- {
- whouseTypeGroupIdDict.Add(whouseGroupType.WareHouseType, whouseGroupType.GroupId);
- }
- }
- //仓位
- var configs = ExcelConfig.Instance.RouteConfigList
- .Where(d => /*!string.IsNullOrEmpty(d.WareHouseCode) &&*/ !string.IsNullOrEmpty(d.LocationCode) && d.StationID > 0);
- foreach (var item in configs)
- {
- if (item.StationID <= 0)
- {
- continue;
- }
- string groupId = !string.IsNullOrEmpty(item.WarehouseGroupType) && whouseTypeGroupIdDict.TryGetValue(item.WarehouseGroupType, out var info) ?
- info : string.Empty;
- int findIndex = whouseInfoList.FindIndex(d => d.WareHouseID == item.LocationCode);
- if (findIndex < 0)
- {
- //添加
- Crms.PmsApi.AddWarehouse(
- item.LocationCode,
- item.StationID,
- item.RelationStationID1,
- item.RelationStationID2,
- item.RelationStationID3,
- groupId);
- }
- else
- {
- //更新
- var requestInfo = whouseInfoList[findIndex];
- if (requestInfo.StationID != item.StationID
- || (requestInfo.RelationStationID1 ?? 0) != item.RelationStationID1
- || (requestInfo.RelationStationID2 ?? 0) != item.RelationStationID2
- || (requestInfo.RelationStationID3 ?? 0) != item.RelationStationID3
- || (requestInfo.GroupId ?? "") != groupId)
- {
- var result = Crms.PmsApi.UpdateWarehouse(
- item.LocationCode,
- item.StationID,
- item.RelationStationID1,
- item.RelationStationID2,
- item.RelationStationID3,
- groupId);
- if (!result)
- {
- CLog.Instance.SystemLog.WriteInfo($"更新库位信息失败 {requestInfo.WareHouseID}");
- }
- }
- }
- }
- CLog.Instance.SystemLog.WriteInfo("同步任务点信息完毕");
- return true;
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteExceptionCaller(ex);
- }
- return false;
- }
- public static void InitOperate()
- {
- try
- {
- var operateInfoList = Crms.PmsApi.GetOperateList(string.Empty);
- if (operateInfoList == null)
- {
- CLog.Instance.SystemLog.WriteError("获取操作码列表失败,请检查CRMS是否启动");
- return;
- }
- var vaules = TaskBehavior.BehaviorDict.Values.OrderBy(d => d.Behavior);
- foreach (var item in vaules)
- {
- //添加或更新到PMS行为码动作列表(WEB)
- AddOrUpdateOperate(item, operateInfoList);
- }
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteException("TaskBookRegister", ex);
- }
- }
- private static void AddOrUpdateOperate(BaseTaskBookBehaviorV2 item, List<OperateInfo> operateInfoList)
- {
- var name = string.IsNullOrWhiteSpace(item.Name) ? item.Behavior.ToString() : item.Name;
- var behavior = item.Behavior;
- var remark = item.Remark;
- int findIndex = operateInfoList.FindIndex(d => d.Name == name);
- if (findIndex < 0)
- {
- //添加
- Crms.PmsApi.AddOperate(name, behavior, remark);
- }
- else
- {
- //更新
- var operateInfo = operateInfoList[findIndex];
- if (operateInfo.Code != behavior
- || operateInfo.Remark != remark)
- {
- operateInfo.Code = behavior;
- operateInfo.Remark = remark;
- Crms.PmsApi.UpdateOperate(operateInfo);
- }
- }
- }
- public static void InitAsyncBehavior()
- {
- try
- {
- CLog.Instance.SystemLog.WriteInfo("初始化异步行为码...");
- AsyncBehaviorManager asyncBehaviorManager = new AsyncBehaviorManager();
- var dataList = asyncBehaviorManager.GetList();
- foreach (var item in dataList)
- {
- var asyncBehavior = InstanceConstructor.GetInstance<AsyncBehavior>(item.AssemblyString, item.FullClassName);
- if (asyncBehavior == null)
- {
- CLog.Instance.SystemLog.WriteInfo($"创建异步行为码实例为空 {item.FullClassName}");
- continue;
- }
- asyncBehavior.Id = item.Id;
- asyncBehavior.TaskID = item.TaskID;
- asyncBehavior.AgvId = item.AgvId;
- asyncBehavior.Behavior = item.Behavior;
- asyncBehavior.Interval = item.Interval;
- asyncBehavior.MaxStepId = item.MaxStepId;
- asyncBehavior.FirstStart = item.FirstStart;
- asyncBehavior.Start();
- }
- CLog.Instance.SystemLog.WriteInfo("初始化异步行为码完毕");
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteExceptionCaller(ex);
- }
- }
- public static bool InitLocationXY()
- {
- var RouteConfigList = ExcelConfig.Instance.RouteConfigList;
- while (true)
- {
- try
- {
- var mapData = Crms.PmsApi.GetMapData();
- if (mapData != null)
- {
- foreach (var item in mapData.Stations)
- {
- MapStationDictionary.AddOrUpdate(item.Index, item, (k, v) => item);
- }
- for (int i = 0; i < RouteConfigList.Count; i++)
- {
- var item = RouteConfigList[i];
- if (MapStationDictionary.TryGetValue(item.StationID, out var mapStationInfo) && mapStationInfo != null)
- {
- item.X = mapStationInfo.Vertex.X;
- item.Y = mapStationInfo.Vertex.Y;
- item.GraphVertex = mapStationInfo.Vertex.Number;
- }
- else
- {
- CLog.Instance.SystemLog.WriteInfo($"从地图数据中找不到活动站点 {item.LocationCode} {item.StationID}");
- }
- }
- break;
- }
- else
- {
- CLog.Instance.SystemLog.WriteInfo("获取地图数据失败");
- }
- }
- catch (Exception ex)
- {
- CLog.Instance.SystemLog.WriteExceptionCaller(ex);
- }
- System.Threading.Thread.Sleep(5000);
- }
- CLog.Instance.SystemLog.WriteInfo("获取地图数据完毕");
- return true;
- }
- public static void InitPmsAutoupdateXml()
- {
- try
- {
- string s = System.Reflection.Assembly.GetExecutingAssembly().Location;
- FileInfo finfo = new FileInfo(s);
- string currPath = finfo.DirectoryName;
- string configFile = Path.Combine(currPath, "pms.xml");
- var PmsConfig = new PmsAutoupdateConfig();
- PmsConfig.Version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
- PmsConfig.Url = AppSetting.GetAutoUpdateUrl().Replace("xml", "zip");
- string xml = XmlTools.XmlSerialize(PmsConfig);
- using (TextWriter tw = new StreamWriter(configFile))
- {
- tw.Write(xml);
- }
- string dataFile = Path.Combine(currPath, "pms.zip");
- if (File.Exists(dataFile))
- {
- File.Delete(dataFile);
- }
- List<string> fileList = new List<string>();
- DirectoryInfo theFolder = new DirectoryInfo(currPath);
- FileInfo[] fileInfos = theFolder.GetFiles();
- //遍历文件
- foreach (FileInfo fileInfo in fileInfos)
- {
- if (fileInfo.Extension == ".config"
- || fileInfo.Name.Contains("vshost"))
- {
- continue;
- }
- if (fileInfo.Name.StartsWith("ProjectManagementSystem")
- || fileInfo.Name.StartsWith("DbCommon"))
- {
- fileList.Add(fileInfo.FullName);
- }
- }
- ZipUtility zipUtility = new ZipUtility();
- zipUtility.ZipFileFromFiles(currPath, fileList, dataFile, 9);
- }
- catch (Exception)
- {
- }
- }
- [XmlRoot("item")]
- public class PmsAutoupdateConfig
- {
- [XmlElement("version")]
- public string Version { get; set; }
- [XmlElement("url")]
- public string Url { get; set; }
- }
- }
- }
|