/*******************************************************************************
* Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:PLCModuleLogic.cs
* 2.功能描述:发送信息到智能设备。
* 编辑履历:
* 作者 日期 版本 修改内容
* 陈晓野 2018/10/18 1.00 新建
*******************************************************************************/
using System;
using System.Data;
using System.Net.Sockets;
using System.Text;
using Dongke.IBOSS.PRD.Basics.DataAccess;
using Dongke.IBOSS.PRD.Service.DataModels;
using Oracle.ManagedDataAccess.Client;
using PCLCommunication;
namespace Dongke.IBOSS.PRD.Service.SmartDeviceService
{
///
/// PLC相关处理
///
public class PLCModuleLogic
{
///
/// 发送产品型号到PLC(坐便盖板)-恒洁三水
///
///
///
///
public static int SendGoodsCodeToPLCBySeatCover(string barcode, SUserInfo sUserInfo)
{
//filePath = INIUtility.Instance(INIUtility.IniFile.Config).ReadIniData("PathSetting", filePath);
IDBConnection con = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
try
{
con.Open();
string sqlString = "select u.plcid, p.ip, p.port,p.PLCDescription from tp_mst_user u " +
"inner join tp_mst_plc p on p.plcid = u.plcid where u.userid = :userid and p.valueflag='1'";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":userid",OracleDbType.Int32, sUserInfo.UserID,ParameterDirection.Input),
};
DataTable plc = con.GetSqlResultToDt(sqlString, paras);
if (plc == null || plc.Rows.Count == 0)
{
return 4;
}
string ip = plc.Rows[0]["ip"].ToString();
int port = Convert.ToInt32(plc.Rows[0]["port"]);
string dec = plc.Rows[0]["PLCDescription"].ToString();
if (string.IsNullOrWhiteSpace(ip) || port == 0 || string.IsNullOrWhiteSpace(dec))
{
return 5;
}
sqlString = @"select FUN_CMN_GetBarCode(:barcode,null,:accountid) From DUAL";
OracleParameter[] paras1 = new OracleParameter[]
{
new OracleParameter(":barcode",OracleDbType.Varchar2, barcode,ParameterDirection.Input),
new OracleParameter(":accountid",OracleDbType.Int32, sUserInfo.AccountID,ParameterDirection.Input),
};
barcode = con.GetSqlResultToStr(sqlString, paras1);
if (string.IsNullOrEmpty(barcode))
{
return 1;
}
sqlString = "SELECT g.goodscode, g.seatcovercode\n" +
" FROM tp_pm_groutingdailydetail t\n" +
" INNER JOIN tp_mst_goods g\n" +
" ON g.goodsid = t.goodsid\n" +
" WHERE t.barcode = :barcode";
OracleParameter[] paras2 = new OracleParameter[]
{
new OracleParameter(":barcode",OracleDbType.Varchar2, barcode,ParameterDirection.Input),
};
DataTable code = con.GetSqlResultToDt(sqlString, paras2);
if (code == null || code.Rows.Count == 0)
{
return 2;
}
object sccode = code.Rows[0]["seatcovercode"];
if (sccode == null || sccode == DBNull.Value)
{
return 3;
}
//using (MelsecA1EAscii melsec = new MelsecA1EAscii(ip, port))
using (MelsecA1EAsciiSocket melsec = new MelsecA1EAsciiSocket(ip, port))
{
int icode = Convert.ToInt32(sccode);
string type = dec[0].ToString();
int begin = Convert.ToInt32(dec.Substring(1));
// 写入
//bool result = melsec.SetData("D", 1000, 1, icode.ToString("X4"));
bool result = melsec.SetData(type, begin, 1, icode.ToString("X4"));
//// 写入 产品编码
//byte[] byteCode = Encoding.ASCII.GetBytes(goodscode);
//result = melsec.SetData("D", 1001, 10, byteCode);
if (result)
{
return 0;
}
}
return -1;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (con.ConnState == ConnectionState.Open)
{
con.Close();
}
}
}
///
/// 发送产品型号到PLC(坐便盖板)-恒洁潮州
///
///
///
///
public static int SendBarcodeToPLCServer(string barcode, SUserInfo sUserInfo)
{
IDBConnection con = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
try
{
con.Open();
string sqlString = "select u.plcid, p.ip, p.port,p.PLCDescription from tp_mst_user u " +
"inner join tp_mst_plc p on p.plcid = u.plcid where u.userid = :userid and p.valueflag='1'";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":userid",OracleDbType.Int32, sUserInfo.UserID,ParameterDirection.Input),
};
DataTable plc = con.GetSqlResultToDt(sqlString, paras);
if (plc == null || plc.Rows.Count == 0)
{
return 4;
}
string ip = plc.Rows[0]["ip"].ToString();
int port = Convert.ToInt32(plc.Rows[0]["port"]);
//string dec = plc.Rows[0]["PLCDescription"].ToString();
if (string.IsNullOrWhiteSpace(ip) || port == 0
//|| string.IsNullOrWhiteSpace(dec)
)
{
return 5;
}
if (string.IsNullOrEmpty(barcode) || barcode.Length != 11)
{
return 1;
}
sqlString = "SELECT t.goodscode\n" +
" FROM tp_pm_groutingdailydetail t\n" +
//" INNER JOIN tp_mst_goods g\n" +
//" ON g.goodsid = t.goodsid\n" +
" WHERE t.barcode = :barcode";
OracleParameter[] paras2 = new OracleParameter[]
{
new OracleParameter(":barcode", OracleDbType.Varchar2, barcode,ParameterDirection.Input),
};
object code = con.GetSqlResultToObj(sqlString, paras2);
if (code == null || code == DBNull.Value)
{
return 2;
}
try
{
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
socket.Connect(ip, port);
//socket.SendTimeout = 3000;
socket.Send(Encoding.ASCII.GetBytes("0001000B" + barcode));
}
}
catch
{
return 3;
}
return 0;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (con.ConnState == ConnectionState.Open)
{
con.Close();
}
}
}
}
}