%@ WebHandler Language="C#" Class="plc_led_data" %>
using System;
using System.Web;
using System.Collections.Generic;
using Curtain.Net.Sockets;
using DK.XuWei.WebMes;
using Curtain.DataAccess;
using Curtain.Log;
using System.Data;
using Newtonsoft.Json.Linq;
using System.Collections;
///
/// 对接LED看板,用于成检显示产品属性信息
/// xuwei
/// 2023-08-08
///
public class plc_led_data : IHttpHandler
{
public struct LedData
{
public int goodscode;
public int goodsspecification;
public int goodstype;
public string barcode;
}
//输入参数 【条码】
public string barCode = "";
string procedure_no;
string fentiprocedure_no;
string procedure_in;
string road_no;
string rack;
string position;
//返回失败提示
public string message = "";
public void ProcessRequest(HttpContext context)
{
try
{
context.Response.ContentType = "text/plain";
//输入输出参数初始化 计件
barCode = context.Request["barcode"] is object ? context.Request["barcode"] : "";
procedure_no = context.Request["procedure_no"] is object ? context.Request["procedure_no"] : "1_1_1";
fentiprocedure_no = "1_1_2";
procedure_in = "1";
road_no = "0";
rack = "";
position = "";
DataTable infoDt = new DataTable();
//写入PLC
//SiemensS7.Open("172.19.26.244", 102);
//正式
SiemensS7.Open("172.19.26.152", 102);
if (context.Request["barcode"] is object)
{
using (IDataAccess conn = DataAccess.Create())
{
infoDt = conn.ExecuteDatatable(@"
SELECT g.seatcovercode
,CASE
WHEN instr(g.goodsspecification, '305') = 1 THEN 1
WHEN instr(g.goodsspecification, '400') = 1 THEN 2
WHEN instr(g.goodsspecification, '地排') = 1 THEN 3
WHEN instr(g.goodsspecification, '横排') = 1 THEN 4
WHEN instr(g.goodsspecification, '295') = 1 THEN 5
WHEN instr(g.goodsspecification, '220') = 1 THEN 6
WHEN instr(g.goodsspecification, '300') = 1 THEN 7
END AS goodsspecification
,CASE
WHEN instr(gt.goodstypename, '连体') = 1 THEN 1
WHEN instr(gt.goodstypename, '智能') = 1 THEN 2
END AS goodstypename
,CASE WHEN g.goodsid in (178,177,164,163,166,150,149,182,183,190,191,186,187,78,79,145) THEN '分体'
when g.goodsid in(158,159,167) and gdd.logoid in (7,14) THEN '分体'
when g.goodsid in(188,189) and gdd.logoid in (7,17) THEN '分体'
when g.goodsid in(146,147) and gdd.logoid in (1) THEN '分体'
ELSE '大件' END AS pritetype
,gdd.barcode
,g.goodscode
FROM tp_pm_groutingdailydetail gdd
LEFT JOIN tp_mst_goods g
ON gdd.goodsid = g.goodsid
LEFT JOIN tp_mst_goodstype gt
ON gt.goodstypeid = g.goodstypeid
WHERE gdd.barcode = @barcode@
",
new CDAParameter("barcode", context.Request["barcode"])
);
if (infoDt != null && infoDt.Rows.Count > 0 && infoDt.Rows[0] != null)
{
SiemensS7.Write("400.2", Convert.ToInt16(infoDt.Rows[0]["seatcovercode"]));
SiemensS7.Write("400.4", Convert.ToInt16(infoDt.Rows[0]["goodsspecification"]));
SiemensS7.Write("400.6", Convert.ToInt16(infoDt.Rows[0]["goodstypename"]));
SiemensS7.Write("400.10", infoDt.Rows[0]["barcode"].ToString());
SiemensS7.Write("400.24", infoDt.Rows[0]["goodscode"].ToString());
//写标识位-扫描结果
//写标识位-扫描结果
SiemensS7.Write("400.0", Convert.ToInt16(1));
}
context.Response.Write(SiemensS7.Read("400.0"));
context.Response.Write(SiemensS7.Read("400.2"));
context.Response.Write(SiemensS7.Read("400.4"));
context.Response.Write(SiemensS7.Read("400.6"));
context.Response.Write(SiemensS7.Read("400.24", 11));
if (infoDt != null && infoDt.Rows.Count > 0 && infoDt.Rows[0] != null)
{
if (Convert.ToInt16(infoDt.Rows[0]["seatcovercode"]) != Convert.ToInt16(SiemensS7.Read("400.2"))
|| Convert.ToInt16(infoDt.Rows[0]["goodsspecification"]) != Convert.ToInt16(SiemensS7.Read("400.4"))
|| Convert.ToInt16(infoDt.Rows[0]["goodstypename"]) != Convert.ToInt16(SiemensS7.Read("400.6"))
|| Convert.ToInt16(1) != Convert.ToInt16(SiemensS7.Read("400.0")))
{
SiemensS7.Write("400.2", Convert.ToInt16(infoDt.Rows[0]["seatcovercode"]));
SiemensS7.Write("400.4", Convert.ToInt16(infoDt.Rows[0]["goodsspecification"]));
SiemensS7.Write("400.6", Convert.ToInt16(infoDt.Rows[0]["goodstypename"]));
SiemensS7.Write("400.10", infoDt.Rows[0]["barcode"].ToString());
SiemensS7.Write("400.24", infoDt.Rows[0]["goodscode"].ToString());
//写标识位-扫描结果
SiemensS7.Write("400.0", Convert.ToInt16(1));
}
}
Logger.Info("写入数据完成!barcode:" + context.Request["barcode"].ToString() + "五位数据位:" + SiemensS7.Read("400.0") + "," + SiemensS7.Read("400.2")
+ "," + SiemensS7.Read("400.4") + "," + SiemensS7.Read("400.6") + "," + SiemensS7.Read("400.10") + "," + SiemensS7.Read("400.24", 11) + ";数据:" + new JsonResult(infoDt).ToJson());
}
//调用标准计件方法===============================
if (infoDt != null && infoDt.Rows.Count > 0 && infoDt.Rows[0] != null)
{
if (infoDt.Rows[0]["pritetype"].ToString() == "分体")
{
procedure_no = fentiprocedure_no;
}
WCF wcf = new WCF();
wcf.Para.Add(new JProperty("barcode", barCode.ToString()));
wcf.Para.Add(new JProperty("procedure_no", procedure_no));
wcf.Para.Add(new JProperty("road_no", road_no));
wcf.Para.Add(new JProperty("rack", rack));
wcf.Para.Add(new JProperty("position", position));
wcf.Para.Add(new JProperty("procedure_in", procedure_in));
string jsonStr = wcf.Get("/DKService/ExHGS3QR/AddWorkInfoHGS3_QR");
//这个接口很小的机率会带出html标签===============================================
if (jsonStr.IndexOf("") > 0) jsonStr = jsonStr.Substring(0, jsonStr.IndexOf(""));
if (jsonStr.IndexOf("") > 0) jsonStr = jsonStr.Substring(0, jsonStr.IndexOf(""));
//xuwei fix 2022-05-28 有时会带出 DOCTYPEhtml标签
jsonStr = jsonStr.Replace("", "");
jsonStr = jsonStr.Replace("\\u000d\\u000a", "")
.Replace("\\n", "").Replace("\\", "").Replace(" ", "")
.Replace("产品编码:", " 产品编码 ")
.Replace("当前工序:", " 当前工序 ")
.Replace("可到工序:", " 可到工序 ")
.Replace("{\"d\":\"", "")
.Replace("\"}\"}", "\"}")
.Replace("", "")
;
Curtain.Log.Logger.Debug(context.Request.UserHostAddress + "\r\n" + context.Request.Url + "\r\n" + jsonStr);
string apiResult = "";
//处理输出结果 OK开头成功 NOK开头失败
JObject json = JObject.Parse(jsonStr);
bool apiStatus = false;
apiStatus = Convert.ToBoolean(json["success"]);
apiResult = jsonStr;
//HttpContext.Current.Response.Write(apiResult);
//记录接口调用日志
Hashtable ht = new Hashtable();
ht.Add("barcode", barCode.ToString());
ht.Add("procedure_no", procedure_no);
ht.Add("road_no", road_no);
ht.Add("rack", rack);
ht.Add("position", position);
ht.Add("procedure_in", procedure_in);
int apiId = Convert.ToInt32(procedure_no.Replace("_", "") + road_no + Math.Abs(Convert.ToInt32(procedure_in)));
barCode = barCode.Replace("2c%", ",");
int apiBarcodeCount = barCode.Split(',').Length;
string apiUrl = "http://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port.ToString() + "/api/DKService/ExHGS3QR/AddWorkInfoHGS3_QR/?" + JsonClient.ParaToString(ht);
ApiLog.WriteApiLog("PLC_扫码", apiUrl, apiStatus, apiResult, apiId, apiBarcodeCount);
//===============================================
int i = 0;
//包装打印是否成功
if (Convert.ToBoolean(json["success"]) == true)
{
SiemensS7.Write("420.0", Convert.ToInt16(1));
}
else
{
SiemensS7.Write("420.0", Convert.ToInt16(2));
}
context.Response.Write(SiemensS7.Read("420.0"));
i = Convert.ToInt16(SiemensS7.Read("420.0"));
if (i == 2)
{
//PLC补推
SiemensS7.Write("420.0", Convert.ToInt16(2));
}
else if(i==1){
//PLC补推
SiemensS7.Write("420.0", Convert.ToInt16(1));
}
Logger.Info("写入数据完成!barcode:" + context.Request["barcode"].ToString() + "一位数据位:" + SiemensS7.Read("420.0"));
}
}
else
{
//写标识位-扫描结果
SiemensS7.Write("400.0", Convert.ToInt16(2));
context.Response.Write(SiemensS7.Read("400.0"));
Logger.Info("无条码!");
}
context.Response.Write(new JsonResult(infoDt).ToJson());
SiemensS7.Close();
}
catch (Exception ex )
{
Logger.Info("异常!:"+ex);
throw ex ;
}
}
public bool IsReusable
{
get
{
return false;
}
}
}