You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
6.8 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using DSWeb.Areas.MvcShipping.Models.Message;
using DSWeb.Areas.MvcShipping.Models.Message.HCHX_DATA;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
using DSWeb.Areas.MvcShipping.Comm;
using System.Data.SqlClient;
using System.Messaging;
using System.Text.RegularExpressions;
namespace DSWeb.Areas.MvcShipping.DAL.Message
{
/// <summary>
/// 期初库存报文
/// </summary>
public static class MSGDAL_HCHX_DATA
{
/// <summary>
/// 根据入库单号获取报文
/// </summary>
/// <param name="wmsno"></param>
/// <returns></returns>
public static string GetXMLMessageWithWMSNO ( string wmsno, string userid, string trade_code,string unit,string ip,out string msg)
{
//签名
TRANSMIT t = new TRANSMIT();
t.BOXTYPE = "2005";
//库存信息
List<STORE_INIT> storelist = new List<STORE_INIT>();
StringBuilder sb = new StringBuilder();
sb.Append(@"SELECT
w.BZTCHNO AS EMS_NO,
(SELECT goodno FROM code_goods WHERE GID=(SELECT TOP 1 GOODSNAMEID FROM wms_in WHERE ASSOCIATEDNO=w.GID)) AS COP_G_NO,
(SELECT SUM(GOODSPACK) FROM wms_in WHERE ASSOCIATEDNO = w.GID) AS QTY,
(select c.UNIT from user_company uc JOIN company c on c.GID = uc.COMPANYID where uc.USERID ='@userid') AS UNIT,
(select c.TRADE_CODE from user_company uc JOIN company c on c.GID = uc.COMPANYID where uc.USERID = '@userid') AS TRADE_CODE,
CONVERT(varchar(100), w.WMSDATE, 23) AS CHECK_DATE,
'C' AS DATA_TYPE,
WHS_CODE AS WHS_CODE,
AREANAME AS LOCATION_CODE
FROM wms w
WHERE WMSNO in (" + wmsno+") ");
SqlCommand com = new SqlCommand(sb.ToString());
SqlParameter sp = new SqlParameter("@userid", userid);
com.Parameters.Add(sp);
Database db = DatabaseFactory.CreateDatabase();
string TRADE_CODE = trade_code;
string UNIT = unit;
string EMS_NO = "";
using (IDataReader reader = db.ExecuteReader(com))
{
while (reader.Read())
{
EMS_NO = reader["EMS_NO"].ToString();
STORE_INIT si = new STORE_INIT();
si.EMS_NO = reader["EMS_NO"].ToString();
si.COP_G_NO = reader["COP_G_NO"].ToString();
si.QTY = reader["QTY"].ToString();
si.COP_G_NO = reader["COP_G_NO"].ToString();
si.UNIT =UNIT;
si.CHECK_DATE = reader["CHECK_DATE"].ToString();
si.DATA_TYPE = reader["DATA_TYPE"].ToString();
si.WHS_CODE = reader["WHS_CODE"].ToString();
si.LOCATION_CODE = reader["LOCATION_CODE"].ToString();
storelist.Add(si);
}
}
t.EMS_NO = EMS_NO;
t.TRADE_CODE = TRADE_CODE;
//序列化XML
HCHX_DATA hd = new HCHX_DATA();
hd.TRANSMIT = t;
hd.STORE_INIT = storelist;
string xml = XmlHelper.XmlSerialize(hd, Encoding.UTF8, "HCHX_DATA",ip);
//正则过滤
var reg = new Regex(@"<STORE_INIT>(\r\n)*\s*(?=<STORE_INIT>)|(?<=</STORE_INIT>)(\r\n)*\s*</STORE_INIT>");
xml = reg.Replace(xml, "");
string message = checkNullAndEmpty(hd);
msg = message;
if (SendMessage(xml))
{
msg = "";
}
else
{
msg = "发送失败";
}
return xml;
}
private static string checkNullAndEmpty ( HCHX_DATA data )
{
string msg = "";
if (data.TRANSMIT.EMS_NO == null || data.TRANSMIT.EMS_NO == "")
{
msg += "EMS_NO(电子账册号),";
}
if (data.TRANSMIT.TRADE_CODE == null || data.TRANSMIT.TRADE_CODE == "")
{
msg += "TRADE_CODE(企业编码),";
}
if (data.TRANSMIT.BOXTYPE == null || data.TRANSMIT.BOXTYPE == "")
{
msg += "BOXTYPE(业务类型),";
}
var list = data.STORE_INIT;
foreach (var si in list)
{
if (si.EMS_NO == null || si.EMS_NO == "")
{
msg += "EMS_NO(电子账册号),";
}
if (si.COP_G_NO == null || si.COP_G_NO == "")
{
msg += "COP_G_NO(料号)" + ",";
}
if (si.QTY == null || si.QTY == "")
{
msg += "QTY(期初数量)" + ",";
}
if (si.UNIT == null || si.UNIT == "")
{
msg += "UNIT(申报单位)" + ",";
}
if (si.CHECK_DATE == null || si.CHECK_DATE == "")
{
msg += "CHECK_DATE(期初日期)" + ",";
}
if (si.WHS_CODE == null || si.WHS_CODE == "")
{
msg += "WHS_CODE(库别)" + ",";
}
if (si.LOCATION_CODE == null || si.LOCATION_CODE == "")
{
msg += "LOCATION_CODE(储位)" + ",";
}
}
return msg;
}
public static bool SendMessage(string xml)
{
MessageQueue SmsQueue = new MessageQueue();
try
{
//string mqPath = "124.133.23.188\\Private$\\testjnzs";//给基站告警用的wz的程序
string mqPath = "124.133.23.188\\Private$\\zsplat2cust";//给基站告警用的wz的程序
mqPath = string.Format(@"FormatName:DIRECT=TCP:{0}", mqPath);
SmsQueue.MessageReadPropertyFilter.Body = true;
SmsQueue.MessageReadPropertyFilter.AppSpecific = true;
SmsQueue.MessageReadPropertyFilter.Priority = true;
SmsQueue.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
SmsQueue.Path = mqPath;
System.Messaging.Message msg = new System.Messaging.Message();
msg.Body = xml;
SmsQueue.Send(msg, MessageQueueTransactionType.Single);
return true;
}
catch (Exception ex)
{
return false;
}
finally
{
SmsQueue.Close();
}
}
}
}