using HH.Redis.ReisModel; using HH.WMS.BLL; using HH.WMS.BLL.SysMgr; using HH.WMS.Common; using HH.WMS.Entitys; using HH.WMS.Entitys.Func; using HH.WMS.Entitys.Sys; using HH.WMS.WebApi.Areas.Common.Controllers; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Sockets; using System.Web.Configuration; using System.Web.Http; namespace HH.WMS.WebApi.Areas.Basic { public class StrategyController : BaseController { #region PDA接口:获取策略 /// /// PDA接口:获取策略 /// /// /// [HanHe(xdl)] CREATED 2018/11/13 [HttpGet] public OperateResult GetStrategys() { return ValidateToken(x => { try { //string json = HH.WMS.Common.WebApiManager.HttpAutoBom_Get("api/Configure/GetListByApp?AppCode=WMS"); //json = "[" + json + "]"; //DataTable dt = JsonConvert.DeserializeObject(json); //return JsonConvert.SerializeObject(OperateResult.Succeed("", dt)); if (SysCache.SysStrategy == null || SysCache.SysStrategy.Count == 0) SysCache.SysStrategy = BLLCreator.Create>().GetList(); return OperateResult.Succeed(null, SysCache.SysStrategy); } catch (Exception ex) { return OperateResult.Error("策略获取异常!" + ex.ToString()); } }); } #endregion #region 获取所有策略 /// /// 获取所有策略 /// /// /// /// [HanHe(dbs)] CREATED 2018/11/19 [HttpGet] public OperateResult GetSysSetList() { return ValidateToken(x => { try { List entity = BLLCreator.Create().GetStrategyList(); return OperateResult.Succeed("", entity); } catch (Exception ex) { return OperateResult.Error("查询异常!" + ex.ToString()); } }); } #endregion #region 获取仓库下的策略值 /// /// 获取仓库下的策略值 /// /// /// 仓库编号 /// /// [HanHe(dbs)] CREATED 2018/11/19 [HttpGet] public OperateResult GetOptionValue(string stockCode) { return ValidateToken(x => { try { List entity = BLLCreator.Create>().GetList(new { CN_S_STOCK_CODE = stockCode }); return OperateResult.Succeed("", entity); } catch (Exception ex) { return OperateResult.Error("查询异常!" + ex.ToString()); } }); } #endregion #region 保存更新变更的策略 /// /// 保存更新变更的策略 /// /// tokenID /// 仓库编号 /// 变更项 /// /// [HanHe(dbs)] CREATED 2018/11/19 [HttpGet] public OperateResult Save(string stockCode, string ChangedItems) { return ValidateToken(x => { try { List list = JsonConvert.DeserializeObject>(ChangedItems); list.ForEach(p => { p.CN_S_MODIFY = p.CN_S_CREATOR = x.CN_S_LOGIN; p.CN_S_MODIFY_BY = p.CN_S_CREATOR_BY = x.CN_S_NAME; }); OperateResult result = BLLCreator.Create().UpdateSetValue(stockCode, list); if (result.Status == ResultStatus.Success) { foreach (TN_WM_B_STRATEGY_DEFEntity n in list) { var v = SysCache.SysStrategy.Find(m => m.CN_S_STOCK_CODE.Equals(stockCode) && m.CN_S_CODE.Equals(n.CN_S_CODE)); if (v == null) SysCache.SysStrategy.Add(new TN_WM_B_STRATEGY_VALUEEntity() { CN_S_STOCK_CODE = stockCode, CN_S_CODE = n.CN_S_CODE, CN_S_VALUE = n.CN_S_VALUE }); else { v.CN_S_VALUE = n.CN_S_VALUE; } } } return result; } catch (Exception ex) { return OperateResult.Error("更新异常!" + ex.ToString()); } }); } #endregion #region 获取库区下所有策略 /// /// 获取库区下所有策略 /// /// 库区编码 /// tokenId /// /// [HanHe(xdl)] CREATED 2018/12/05 [HttpGet] public OperateResult GetStrategyList(string areaCode) { return ValidateToken(x => { try { DataTable dt = BLLCreator.Create().GetStrategyList(areaCode); return OperateResult.Succeed(null, dt); } catch (Exception ex) { return OperateResult.Error(ex.Message); } }); } #endregion #region 获取库区所有没设置的策略 /// /// 获取库区所有没设置的策略 /// /// 库区编码 /// tokenId /// public OperateResult GetNoStrategyList(string areaCode) { return ValidateToken(x => { try { DataTable dt = BLLCreator.Create().GetNoStrategyList(areaCode); return OperateResult.Succeed(null, dt); } catch (Exception ex) { return OperateResult.Error(ex.Message); } }); } #endregion #region 更新优先级 /// /// 更新优先级 /// /// 库区编码 /// 仓库编码 /// 策略Guid /// 优先级 /// [HttpGet] public OperateResult UpdatePriority(string areaCode, string stockCode, string strategyGuid, string priority) { return ValidateToken(x => { try { if (string.IsNullOrEmpty(areaCode)) areaCode = ""; OperateResult result = BLLCreator.Create().UpdatePriority(areaCode, stockCode, strategyGuid, priority); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message); } }); } #endregion #region 删除库区策略 /// /// 删除库区策略 /// /// 库区编码 /// 仓库编码 /// 策略Guid /// [HttpGet] public OperateResult DeleteAreaStrategy(string areaCode, string stockCode, string strategyGuid) { return ValidateToken(x => { try { if (string.IsNullOrEmpty(areaCode)) areaCode = ""; OperateResult result = BLLCreator.Create().DeleteAreaStrategy(areaCode, stockCode, strategyGuid); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message); } }); } #endregion #region 保存库区策略关联 /// /// 保存库区策略关联 /// /// 数据集合 /// [HttpPost] public OperateResult SaveStrategyUse(JObject jsonStr) { string tokenId = jsonStr.Value("TokenId"); return ValidateToken(tokenId, x => { try { string strategyGuid = jsonStr.Value("selectValue"); string areaCode = jsonStr.Value("areaCode"); string stockCode = jsonStr.Value("stockCode"); if (string.IsNullOrEmpty(stockCode) && string.IsNullOrEmpty(areaCode)) { return OperateResult.Error("参数缺失!"); } OperateResult result = BLLCreator.Create().SaveStrategyUse(strategyGuid, areaCode, stockCode); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message); } }); } #endregion #region 根据库区编码和策略类型获取策略 /// /// 根据库区编码和策略类型获取策略,策略类型选填(三生物料上架PDA接口) /// /// 库区编码 /// 策略类型 /// tokenId /// [HttpGet] public OperateResult GetStrategyType(string areaCode, string strategyType) { return ValidateToken(x => { try { DataTable dt = BLLCreator.Create().GetStrategyType(areaCode, strategyType); return OperateResult.Succeed(null, dt); } catch (Exception ex) { return OperateResult.Error(ex.Message); } }); } #endregion /// /// /// /// #region 获取配置文件 public OperateResult GetWebConfig() { //return ValidateToken(x => //{ try { //List list = BLLCreator.Create>().GetList(); //foreach (TN_WM_SYS_CONFIGEntity m in list) //{ // if (Constants.config.ContainsKey(m.CN_S_KEY)) // Constants.config[m.CN_S_KEY] = m.CN_S_VALUE; // else // Constants.config.Add(m.CN_S_KEY, m.CN_S_VALUE); //} SysConfigParamEntity v = new SysConfigParamEntity() { DB_TYPE = ConfigurationManager.ConnectionStrings["DataType"].ConnectionString, DB_URL = ConfigurationManager.ConnectionStrings["wmsConnection"].ConnectionString.Replace('\\', '*'), REDIS = Util.ToString(ConfigurationManager.AppSettings["RedisPath"]), REDIS_DB = Util.ToString(ConfigurationManager.AppSettings["DefaultDb"]), MIP = ConfigurationManager.ConnectionStrings["MIP"].ConnectionString, MPORT = ConfigurationManager.ConnectionStrings["MPORT"].ConnectionString, MDB = ConfigurationManager.ConnectionStrings["MDB"].ConnectionString, MUSER = ConfigurationManager.ConnectionStrings["MUSER"].ConnectionString, MPWD = ConfigurationManager.ConnectionStrings["MPWD"].ConnectionString, UI_ROOT_PATH =Util.ToString(ConfigurationManager.AppSettings["UI_ROOT_PATH"]).Replace('\\', '*'), APP_CODE = Util.ToString(ConfigurationManager.AppSettings["AppCode"]), APP_NAME = Util.ToString(ConfigurationManager.AppSettings["AppName"]), AUTOBOM = Util.ToString(ConfigurationManager.AppSettings["autobom_ipAddress"]), KdEID = Util.ToString(ConfigurationManager.AppSettings["KdEID"]), KdEAppKey = Util.ToString(ConfigurationManager.AppSettings["KdEAppKey"]), KdEReqURL = Util.ToString(ConfigurationManager.AppSettings["KdEReqURL"]), PdaServerVersion = Util.ToString(ConfigurationManager.AppSettings["PdaServerVersion"]), PdalastForce = Util.ToString(ConfigurationManager.AppSettings["PdalastForce"]), PdaTitle = Util.ToString(ConfigurationManager.AppSettings["PdaTitle"]), PdaUpdateUrl = Util.ToString(ConfigurationManager.AppSettings["PdaUpdateUrl"]), OMS_API = Util.ToString(ConfigurationManager.AppSettings["OMS_API"]), AMS_API = Util.ToString(ConfigurationManager.AppSettings["ams_ipAddress"]), PROJECT_CODE = Util.ToString(ConfigurationManager.AppSettings["projectCode"]) }; Constants.SysConfig = v; return OperateResult.Succeed("", v); } catch (Exception ex) { return OperateResult.Error(ex.Message); } //}); } #endregion //[HttpPost] //public OperateResult SaveWmsApi(SysConfigParamEntity model) //{ // if (Constants.config.ContainsKey("CN_S_WMS_API")) // Constants.config["CN_S_WMS_API"] = model.WMS_API; // else // Constants.config.Add("CN_S_WMS_API", model.CN_S_WMS_API); // return OperateResult.Succeed(); //} [HttpPost] public OperateResult SaveWebConfig(SysConfigParamEntity model) { config = WebConfigurationManager.OpenWebConfiguration(System.Web.HttpContext.Current.Request.ApplicationPath); SetAppSettingsSection("AppCode", model.APP_CODE); SetAppSettingsSection("AppName", model.APP_NAME); SetAppSettingsSection("autobom_ipAddress", model.AUTOBOM); //SetAppSettingsSection("DB_TYPE", model.DB_TYPE); //SetAppSettingsSection("DB_URL", model.DB_URL.Replace('*', '\\')); SetAppSettingsSection("RedisPath", model.REDIS); SetAppSettingsSection("DefaultDb", model.REDIS_DB); //SetAppSettingsSection("MIP", model.MIP); //SetAppSettingsSection("MPORT", model.MPORT); //SetAppSettingsSection("MPWD", model.MPWD); //SetAppSettingsSection("MUSER", model.MUSER); //SetAppSettingsSection("MDB", model.MDB); SetAppSettingsSection("UI_ROOT_PATH", model.UI_ROOT_PATH.Replace('*', '\\')); SetAppSettingsSection("KdEID", model.KdEID); SetAppSettingsSection("KdEAppKey", model.KdEAppKey); SetAppSettingsSection("KdEReqURL", model.KdEReqURL); SetAppSettingsSection("PdaServerVersion", model.PdaServerVersion); SetAppSettingsSection("PdalastForce", model.PdalastForce); SetAppSettingsSection("PdaUpdateUrl", model.PdaUpdateUrl); SetAppSettingsSection("OMS_API", model.OMS_API); SetAppSettingsSection("ams_ipAddress", model.AMS_API); SetConnectionStringsSection("wmsConnection", model.DB_URL.Replace('*', '\\'), "System.Data.SqlClient"); SetConnectionStringsSection("DataType", model.DB_TYPE, ""); SetConnectionStringsSection("MIP", model.MIP, ""); SetConnectionStringsSection("MPORT", model.MPORT, ""); SetConnectionStringsSection("MDB", model.MDB, ""); SetConnectionStringsSection("MUSER", model.MUSER, ""); SetConnectionStringsSection("MPWD", model.MPWD, ""); Constants.SysConfig = model; return OperateResult.Succeed(); } Configuration config; public void SetConnectionStringsSection(string name, string ConnectionString, string providerName) { ConnectionStringsSection conSection = (ConnectionStringsSection) config.GetSection("connectionStrings"); if (conSection.ConnectionStrings[name] != null) { if (conSection.ConnectionStrings[name].ConnectionString != ConnectionString) { conSection.ConnectionStrings[name].ConnectionString = ConnectionString; if (providerName.Length > 0) conSection.ConnectionStrings[name].ProviderName = providerName; config.Save(); } } else { ConnectionStringSettings conSettings = new ConnectionStringSettings(name, ConnectionString, providerName); conSection.ConnectionStrings.Add(conSettings); config.Save(); } } public void SetAppSettingsSection(string key, string value) { AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings"); if (appSettings.Settings[key] != null) { if (appSettings.Settings[key].Value != value) { appSettings.Settings[key].Value = value; config.Save(); } } else { appSettings.Settings.Add(key, value); config.Save(); } } #region 检测数据库是否连接正常 [HttpGet] public OperateResult TestDb(string dbUrl, string dbType) { dbUrl = System.Web.HttpUtility.UrlDecode(dbUrl); try { switch (dbType) { case "MSSQL": SqlConnection m_myConnection = new SqlConnection(dbUrl); m_myConnection.Open(); //数据库操作...... m_myConnection.Close(); break; case "MYSQL": break; } return OperateResult.Succeed(""); } catch (Exception ex) { return OperateResult.Error(ex.Message); } } #endregion [HttpGet] public OperateResult TestIpPort(string ipPort) { TcpClient client = new TcpClient(); try { var ar = client.BeginConnect(ipPort.Split(':')[0],Convert.ToInt32(ipPort.Split(':')[1]), null, null); ar.AsyncWaitHandle.WaitOne(2000); if (client.Connected) return OperateResult.Succeed(); else return OperateResult.Error(); } catch (Exception e) { return OperateResult.Error(); } finally { client.Close(); } } public OperateResult TestConnection(string host, int port, int millisecondsTimeout) { TcpClient client = new TcpClient(); try { var ar = client.BeginConnect(host, port, null, null); ar.AsyncWaitHandle.WaitOne(millisecondsTimeout); if (client.Connected) return OperateResult.Succeed(); else return OperateResult.Error(); } catch (Exception e) { return OperateResult.Error(); } finally { client.Close(); } } } }