using Hanhe.iWCS.Common; using Hanhe.iWCS.MData; using Hanhe.iWCS.Model; using Hanhe.iWCS.Model.AMS; using HH.AMS.BLL; using HH.AMS.BLL.AdminUI.Basic; using HH.AMS.BLL.AdminUI.Device; using HH.AMS.BLL.AdminUI.Equipment; using HH.AMS.BLL.AdminUI.Task; using HH.AMS.Common; using HH.AMS.Entitys.AdminUI.Basic; using HH.AMS.Entitys.AdminUI.Device; using HH.AMS.Entitys.AdminUI.Equipment; using HH.AMS.Entitys.AdminUI.Task; using HH.AMS.Entitys.Common; using HH.AMS.WebApi.Models; using MongoDB.Driver.Builders; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Web.Http; namespace HH.AMS.WebApi.Controllers { [RoutePrefix("api/WCSApi")] public class WCSApiController : ApiController { /// /// 扫码完成,工位完成,分档机下线请求接口 /// /// /// [Route("SaveWCSInfo")] [HttpPost] public HttpResponseMessage SaveWCSInfo([FromBody] WCSApiModels mode)//dynamic JsonData { Result_ result = new Result_(); ResultObject resultObject = new ResultObject() { success = false }; HttpResponseMessage resultMsg; SqlExecuteResult result_ = new SqlExecuteResult(); string resultValue; try { string parm = JsonConvert.SerializeObject(mode); if (string.IsNullOrEmpty(mode.fdTaskNo) || string.IsNullOrEmpty(mode.stationPoint) || mode.infoType == 0) { CMMLog.Info("接收到包装线参数值错误=" + parm); resultObject.success = false; resultObject.errMsg = "参数值错误!"; resultObject.errCode = "3"; resultValue = JsonConvert.SerializeObject(resultObject); resultMsg = new HttpResponseMessage { Content = new StringContent(resultValue, Encoding.GetEncoding("UTF-8"), "application/json") }; return resultMsg; } //var where_find = Query.And(Query.EQ("IsDelete", 0), Query.EQ("stationPoint", mode.stationPoint), Query.EQ("infoType", mode.infoType));----无用 var where_find = Query.And(Query.EQ("fdTaskNo", mode.fdTaskNo), Query.EQ("stationPoint", mode.stationPoint), Query.EQ("infoType", mode.infoType), Query.EQ("extInfo1", mode.extInfo1)); var Detailed = MongoDBSingleton.Instance.FindOne(where_find, typeof(TN_WCSApi_Detailed).Name); if (Detailed == null) { #region 反序列化和实体赋值 // WCSApiModels BillEntity = JsonHelper.ParseFormJson(JsonData.Tostring());//反序列化 //TN_WCSApi_Detailed mode = new TN_WCSApi_Detailed(); //mode.workshop = BillEntity.workshop; //mode.stationPoint = BillEntity.stationPoint; //mode.infoType = BillEntity.infoType; //mode.barCode = BillEntity.infoBody[0].barCode; //mode.deviceCode = BillEntity.infoBody[0].deviceCode; //mode.plateType = BillEntity.infoBody[0].plateType; //mode.Gear = BillEntity.infoBody[0].Gear; //mode.IsDelete = 0; #endregion TN_WCSApi_Detailed mode_detailed = new TN_WCSApi_Detailed(); mode_detailed.workshop = mode.workshop; mode_detailed.infoType = mode.infoType; mode_detailed.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mode_detailed.stationPoint = mode.stationPoint; mode_detailed.fdTaskNo = mode.fdTaskNo; mode_detailed.barCode = mode.infoBody[0].barCode; mode_detailed.deviceCode = mode.infoBody[0].deviceCode; mode_detailed.length = mode.infoBody[0].length; mode_detailed.width = mode.infoBody[0].width; mode_detailed.height = mode.infoBody[0].height; mode_detailed.packInQty = mode.infoBody[0].packInQty; mode_detailed.moduleType = mode.infoBody[0].moduleType; mode_detailed.power = mode.infoBody[0].power; mode_detailed.currentLevel = mode.infoBody[0].currentLevel; mode_detailed.level = mode.infoBody[0].level; mode_detailed.staple = mode.infoBody[0].staple; mode_detailed.packType = mode.infoBody[0].packType; mode_detailed.moName = mode.infoBody[0].moName; mode_detailed.poType = mode.infoBody[0].poType; mode_detailed.color = mode.infoBody[0].color; mode_detailed.customerName = mode.infoBody[0].customerName; mode_detailed.extInfo1 = mode.extInfo1; mode_detailed.extInfo2 = mode.extInfo2; mode_detailed.extInfo3 = mode.extInfo3; mode_detailed.extInfo4 = mode.extInfo4; //mode.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); result_.Success = MongoDBSingleton.Instance.Insert(mode_detailed); if (result_.Success) { resultObject.errCode = "0"; resultObject.errMsg = ""; CMMLog.Info("接收到包装线数据添加到数据库成功,参数为=" + parm); } else { resultObject.errCode = "1"; resultObject.errMsg = "包装线数据添加到数据库失败"; CMMLog.Info("接收到包装线数据添加到数据库失败,参数为=" + parm); } resultObject.success = result_.Success; //result.errCode = r==true ? "" : "3" ; } else { //接收到重复数据,将重复数据IsDelete状态修改成0再次给WCS读取.不让数据库出现重复数据 //var JG=MongoDBSingleton.Instance.Update(where_find, Update.Set("IsDelete", 0), MongoDB.Driver.UpdateFlags.None); //if (JG) // CMMLog.Info("接收到包装线重复数据,IsDelete修改成0成功,参数为=" + parm); //else // CMMLog.Info("接收到包装线重复数据,IsDelete修改成0失败,参数为=" + parm); resultObject.success = true;//与包装线开发人员约定,当数据添加重复时他们需要,返回True. resultObject.errMsg = "接收数据已存在!"; resultObject.errCode = "3"; CMMLog.Info("接收到包装线数据,数据库已存在,参数为=" + parm); } } catch (Exception ex) { resultObject.success = false; resultObject.errMsg = ex.Message; resultObject.errCode = "3"; CMMLog.Info("接收到PLC数据处理异常,异常提示=" + ex.Message); } //return JsonConvert.SerializeObject(result); resultValue = JsonConvert.SerializeObject(resultObject); resultMsg = new HttpResponseMessage { Content = new StringContent(resultValue, Encoding.GetEncoding("UTF-8"), "application/json") }; return resultMsg; } /// /// PLC反馈信息接口 /// /// /// [Route("SavePLCInfo")] [HttpPost] public HttpResponseMessage SavePLCInfo([FromBody] PLCApiModels mode)//dynamic JsonData { Result_ result = new Result_(); ResultObject resultObject = new ResultObject() { success = false }; HttpResponseMessage resultMsg; SqlExecuteResult result_ = new SqlExecuteResult(); string resultValue; try { string parm = JsonConvert.SerializeObject(mode); if (string.IsNullOrEmpty(mode.equipNo) || string.IsNullOrEmpty(mode.positionNo) || string.IsNullOrEmpty(mode.trayState)) { CMMLog.Info("接收到PLC参数值错误=" + parm); resultObject.success = false; resultObject.errMsg = "参数值错误!"; resultObject.errCode = "1"; resultValue = JsonConvert.SerializeObject(resultObject); resultMsg = new HttpResponseMessage { Content = new StringContent(resultValue, Encoding.GetEncoding("UTF-8"), "application/json") }; return resultMsg; } //var where_find = Query.And(Query.EQ("fdTaskNo", mode.fdTaskNo), Query.EQ("stationPoint", mode.stationPoint), Query.EQ("infoType", mode.infoType)); //var Detailed = MongoDBSingleton.Instance.FindOne(where_find, typeof(TN_WCSApi_Detailed).Name); //if (Detailed == null) //{ TN_PLCApi_Detailed mode_detailed = new TN_PLCApi_Detailed(); mode_detailed.equipNo = mode.equipNo; mode_detailed.positionNo = mode.positionNo; mode_detailed.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mode_detailed.trayState = mode.trayState; string time = DateTime.Now.ToString("yyyyMMddhhmmss"); string PLCTaskNo = "plc" + time; mode_detailed.extInfo1 = PLCTaskNo;// mode_detailed.extInfo2 = mode.extInfo2; mode_detailed.extInfo3 = mode.extInfo3; mode_detailed.extInfo4 = mode.extInfo4; //mode.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); result_.Success = MongoDBSingleton.Instance.Insert(mode_detailed); if (result_.Success) { resultObject.errCode = "0"; resultObject.errMsg = ""; CMMLog.Info("接收到PLC数据添加到数据库成功,参数为=" + parm); } else { resultObject.errCode = "2"; resultObject.errMsg = result_.Exception.Message; CMMLog.Info("接收到PLC数据添加到数据库失败,参数为=" + parm + ";异常提示=" + result_.Exception.Message); } resultObject.success = result_.Success; //result.errCode = r==true ? "" : "3" ; //} //else //{ // resultObject.errMsg = "接收已存在!"; // resultObject.errCode = "3"; //} } catch (Exception ex) { resultObject.errMsg = ex.Message; resultObject.errCode = "2"; CMMLog.Info("接收到PLC数据处理异常,异常提示=" + ex.Message); } //return JsonConvert.SerializeObject(result); resultValue = JsonConvert.SerializeObject(resultObject); resultMsg = new HttpResponseMessage { Content = new StringContent(resultValue, Encoding.GetEncoding("UTF-8"), "application/json") }; return resultMsg; } #region 模拟输送线反馈信息 /// ///模拟输送线反馈信息 /// /// /// public HttpResponseMessage AgvCallScheduler([FromBody] WCSApiModels_ mode)//dynamic JsonData { string parm = JsonConvert.SerializeObject(mode); CMMLog.Info("接收到模拟输送线反馈信息=" + parm); Result_ result = new Result_(); ResultObject resultObject = new ResultObject() { success = false }; HttpResponseMessage resultMsg; SqlExecuteResult result_ = new SqlExecuteResult(); string resultValue; try { resultObject.errCode = "0"; resultObject.errMsg = ""; resultObject.success = true; } catch (Exception ex) { resultObject.errMsg = ex.Message; resultObject.errCode = "2"; CMMLog.Info("模拟输送线反馈信息,异常提示=" + ex.Message); } //return JsonConvert.SerializeObject(result); resultValue = JsonConvert.SerializeObject(resultObject); resultMsg = new HttpResponseMessage { Content = new StringContent(resultValue, Encoding.GetEncoding("UTF-8"), "application/json") }; return resultMsg; } public class WCSApiModels_ { private string _workshop = ""; private string _requestPoint = ""; private int _requestType = 0; private string _extInfo1 = ""; private string _extInfo2 = ""; private string _extInfo3 = ""; private string _extInfo4 = ""; private string _fdTaskNo = ""; private Detailed_Request _requestBody = new Detailed_Request(); private List _infoBody = new List(); /// /// JSon对象租 /// public List infoBody { get { return _infoBody; } set { _infoBody = value; } } /// /// 预留----JSon对象租 /// public Detailed_Request requestBody { get { return _requestBody; } set { _requestBody = value; } } /// /// 车间编码或仓库编码 /// public string workshop { get { return _workshop; } set { _workshop = value; } } /// /// AGV的请求位置点 /// public string requestPoint { get { return _requestPoint; } set { _requestPoint = value; } } /// ///1012或2或1013(请求占用或到位或释放占用) /// public int requestType { get { return _requestType; } set { _requestType = value; } } /// /// 唯一任务号 /// public string fdTaskNo { get { return _fdTaskNo; } set { _fdTaskNo = value; } } /// /// 扩展预留1 /// extInfo1 public string extInfo1 { get; set; } /// /// 扩展预留2 /// public string extInfo2 { get { return _extInfo2; } set { _extInfo2 = value; } } /// /// 扩展预留3 /// public string extInfo3 { get { return _extInfo3; } set { _extInfo3 = value; } } /// /// 扩展预留4 /// public string extInfo4 { get { return _extInfo4; } set { _extInfo4 = value; } } } /// /// Json对象详细信息 /// public class Detailed1 { private string _barCode = ""; /// /// 唯一条码 /// public string barCode { get { return _barCode; } set { _barCode = value; } } private string _deviceCode = ""; /// /// 设备号 /// public string deviceCode { get { return _deviceCode; } set { _deviceCode = value; } } private string _length = ""; /// /// 组件长度 /// public string length { get { return _length; } set { _length = value; } } private string _width = ""; /// /// 组件宽度 /// public string width { get { return _width; } set { _width = value; } } private string _height = ""; /// /// 组件高度 /// public string height { get { return _height; } set { _height = value; } } private string _packInQty = ""; /// /// 包内数量 /// public string packInQty { get { return _packInQty; } set { _packInQty = value; } } private string _moduleType = ""; /// /// 组件型号 /// public string moduleType { get { return _moduleType; } set { _moduleType = value; } } private string _power =""; /// /// 标称功率 /// public string power { get { return _power; } set { _power = value; } } private string _currentLevel = ""; /// /// 电流档 /// public string currentLevel { get { return _currentLevel; } set { _currentLevel = value; } } private string _level = ""; /// /// 组件等级 /// public string level { get { return _level; } set { _level = value; } } private string _staple = ""; /// /// 托盘档位 /// public string staple { get { return _staple; } set { _staple = value; } } private string _packType = ""; /// /// 包装类型 /// public string packType { get { return _packType; } set { _packType = value; } } private string _moName = ""; /// /// 工单号 /// public string moName { get { return _moName; } set { _moName = value; } } private string _poType = ""; /// /// 订单类型 /// public string poType { get { return _poType; } set { _poType = value; } } private string _color = ""; /// /// 色系 /// public string color { get { return _color; } set { _color = value; } } private string _customerName = ""; /// /// 客户名称 /// public string customerName { get { return _customerName; } set { _customerName = value; } } } /// /// 对象详细信息 /// public class Detailed_Request { private string _agvNo = ""; /// /// 文档没给注释 /// public string agvNo { get { return _agvNo; } set { _agvNo = value; } } private string _trayType = ""; /// /// 空托或满托 /// public string trayType { get { return _trayType; } set { _trayType = value; } } } #endregion } }