| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 |
- <%@ WebHandler Language="C#" Class="index" %>
- using System;
- using System.Web;
- using System.Web.SessionState;
- using Curtain.DataAccess;
- using DK.XuWei.WebMes;
- using System.Data;
- using Newtonsoft.Json.Linq;
- using System.Collections;
- using Curtain.Log;
- using System.Collections.Generic;
- using Oracle.ManagedDataAccess.Client;
- using System.Text.RegularExpressions;
- public class index : IHttpHandler
- {
- //输入参数 【条码】
- public string barCode = "";
- //输入参数 【入库:in】【撤销入库:cancelin】 入库操作预留
- public string wmsAction = "";
- string procedure_no;
- string procedure_in;
- string road_no;
- string rack;
- string position;
- //入库是否成功标识
- bool WarehostingFlag;
- //入库返回失败提示
- public string message = "";
- //输出参数
- public JObject resultJson = null;
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/plain";
- //输入输出参数初始化
- barCode = context.Request["barcode"] is object ? context.Request["barcode"] : "";
- wmsAction = context.Request["wmsAction"] is object ? context.Request["wmsAction"] : "";
- procedure_no = context.Request["procedure_no"] is object ? context.Request["procedure_no"] : "1_1_1";
- if (wmsAction.ToLower() == "in") procedure_in = "1";
- if (wmsAction.ToLower() == "cancelin") procedure_in = "-1";
- road_no = "0";
- rack = "";
- position = "";
- resultJson = new JObject(
- new JProperty("success", true),
- new JProperty("message", ""),
- new JProperty("goods", new JObject(
- new JProperty("GoodsName", ""),
- new JProperty("GoodsCode", ""),
- new JProperty("GoodsSpecification", ""),
- new JProperty("GoodsModel", ""),
- new JProperty("GoodsType", ""),
- new JProperty("GoodsLineType", ""),
- new JProperty("GlazeType", ""),
- new JProperty("PlateLimitnum", ""),
- new JProperty("Logo", ""),
- new JProperty("Buildingno", ""),
- new JProperty("GoodsLevelName", ""),
- new JProperty("KingdeeCode", "")
- )
- )
- );
- using (IDataAccess conn = DataAccess.Create())
- {
- //开启事务
- conn.BeginTransaction();
- //获取业务数据,无入库动作才获取产品信息
- if (Convert.ToBoolean(resultJson["success"]) == true)
- {
- if (barCode != "" && wmsAction == "")
- {
- getGoodsData(conn, barCode);
- }
- else
- {
- if (barCode == "")
- {
- resultJson["success"] = false;
- resultJson["message"] = "缺少条码参数!";
- }
- }
- }
- //执行 【入库:in】【撤销入库:cancelin】 操作 入库撤销操作预留
- if (Convert.ToBoolean(resultJson["success"]) == true)
- {
- if (wmsAction == "in" || wmsAction == "cancelin")
- {
- string[] arrayBarcode = barCode.Split(',');
- for (int i = 0; i < arrayBarcode.Length; i++)
- {
- //调用标准计件方法===============================
- WCF wcf = new WCF();
- wcf.Para.Add(new JProperty("barcode", arrayBarcode[i].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("<html>") > 0) jsonStr = jsonStr.Substring(0, jsonStr.IndexOf("<html>"));
- if (jsonStr.IndexOf("<!DOCTYPEhtml>") > 0) jsonStr = jsonStr.Substring(0, jsonStr.IndexOf("<!DOCTYPEhtml>"));
- //xuwei fix 2022-05-28 有时会带出 DOCTYPEhtml标签
- jsonStr = jsonStr.Replace("<!DOCTYPEhtml>", "");
- jsonStr = jsonStr.Replace("\\u000d\\u000a", "")
- .Replace("\\n", "").Replace("\\", "").Replace(" ", "")
- .Replace("产品编码:", " 产品编码 ")
- .Replace("当前工序:", " 当前工序 ")
- .Replace("可到工序:", " 可到工序 ")
- .Replace("{\"d\":\"", "")
- .Replace("\"}\"}", "\"}")
- .Replace("<!DOCTYPEhtml>", "")
- ;
- 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", arrayBarcode[i].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)));
- arrayBarcode[i] = arrayBarcode[i].Replace("2c%", ",");
- int apiBarcodeCount = arrayBarcode[i].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("立库_扫码", apiUrl, apiStatus, apiResult, apiId, apiBarcodeCount);
- //===============================================
- if (Convert.ToBoolean(json["success"]) == true)
- {
- WarehostingFlag = true;
- //message += "条码[" + arrayBarcode[i] + "]入库成功,";
- doWmsAction(conn, arrayBarcode[i], wmsAction, WarehostingFlag);
- }
- else
- {
- if (wmsAction == "in")
- {
- WarehostingFlag = false;
- message += json["message"].ToString() + ",";
- doWmsAction(conn, arrayBarcode[i], wmsAction, WarehostingFlag);
- }
- else if (wmsAction == "cancelin")
- {
- //resultJson["success"] = false;
- //resultJson["message"] = "产品撤销入库失败!";
- }
- }
- }
- }
- }
- //提交事务
- if (Convert.ToBoolean(resultJson["success"]) == true)
- {
- conn.Commit();
- }
- else
- {
- conn.Rollback();
- }
- //输出JSON数据
- context.Response.Write(resultJson.ToString());
- }
- }
- //获取业务数据
- private void getGoodsData(IDataAccess conn, string barCode)
- {
- //业务数据读取
- DataTable dt = conn.ExecuteDatatable(@"
- SELECT
- T.GOODSNAME,
- T.GOODSCODE,
- T.GOODSSPECIFICATION,
- T.GOODSMODEL,
- T.GOODSTYPENAME,
- T.GOODS_LINE_TYPE,
- T.DICTIONARYVALUE,
- T.PLATELIMITNUM,
- T.LOGONAME,
- T.BUILDINGNO,
- T.GOODSLEVELNAME,
- T.CHECKTIME,
- TMGK.KingdeeCode
- FROM (
- SELECT DISTINCT
- TPGD.GOODSNAME,
- TPGD.GOODSCODE,
- TMG.GOODSSPECIFICATION,
- TMG.GOODSMODEL,
- TMGT.GOODSTYPENAME,
- CASE TMG.GOODS_LINE_TYPE WHEN 0 THEN '普通' ELSE '高压' END AS GOODS_LINE_TYPE,
- TMDC.DICTIONARYVALUE,TPPD.CHECKTIME,
- 1 AS PLATELIMITNUM,
- TML.LOGONAME,
- row_number() over (partition by TPGD.GOODSNAME order by TPPD.CHECKTIME DESC) as rownums ,
- (CASE WHEN TPPC.PROCEDUREID = 35 THEN '重烧'
- WHEN TPPC.PROCEDUREID != 35 THEN ( CASE WHEN TPG.BUILDINGNO = '1#' THEN '一期'
- WHEN TPG.BUILDINGNO = '2#' THEN '二期'
- WHEN TPG.BUILDINGNO = '3#' THEN '三期' END )
- END ) AS BUILDINGNO,
- TMGL.GOODSLEVELNAME,
- NULL AS KingdeeCode
- FROM
- TP_PM_GROUTINGDAILYDETAIL TPGD
- LEFT JOIN (SELECT
- GROUTINGDAILYDETAILID,NEWGLAZETYPEID
- FROM (
- SELECT
- *
- FROM TP_PM_GlazetypeRecord
- WHERE GROUTINGDAILYDETAILID = (SELECT GROUTINGDAILYDETAILID
- FROM TP_PM_GROUTINGDAILYDETAIL
- WHERE BARCODE = @BARCODE@)
- ORDER BY CREATETIME DESC) WHERE ROWNUM = 1
- ) TPGR ON TPGR.GROUTINGDAILYDETAILID = TPGD.GROUTINGDAILYDETAILID
- LEFT JOIN TP_MST_GOODS TMG ON TPGD.GOODSID = TMG.GOODSID
- LEFT JOIN TP_MST_GOODSTYPE TMGT ON TMG.GOODSTYPEID = TMGT.GOODSTYPEID
- LEFT JOIN TP_MST_DATADICTIONARY TMDC ON TPGR.NEWGLAZETYPEID = TMDC.DICTIONARYID
- LEFT JOIN TP_MST_LOGO TML ON TPGD.LOGOID = TML.LOGOID
- LEFT JOIN TP_PC_GROUTINGLINE TPG ON TPGD.GROUTINGLINEID = TPG.GROUTINGLINEID
- LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPGD.BARCODE = TPPD.BARCODE AND TPPD.CHECKBATCHNO=1
- LEFT JOIN TP_MST_GOODSLEVEL TMGL ON TPPD.GOODSLEVELTYPEID = TMGL.GOODSLEVELTYPEID
- LEFT JOIN TP_PC_PROCEDURE TPPC ON TPPD.PROCEDUREID = TPPC.PROCEDUREID
- WHERE
- (CASE WHEN( SELECT
- COUNT( * )
- FROM
- TP_PM_PRODUCTIONDATA TPPD
- LEFT JOIN TP_PC_PROCEDURE TPPC ON TPPD.PROCEDUREID = TPPC.PROCEDUREID
- WHERE TPPD.PROCEDUREID = 35
- AND TPPD.BARCODE = @BARCODE@
- ) = 1 THEN 35 ELSE TPPD.PROCEDUREID END
- ) = TPPD.PROCEDUREID
- AND TPGD.VALUEFLAG = 1
- AND TMDC.DICTIONARYTYPE = 'TPC002'
- AND TPPD.BARCODE = @BARCODE@
- ) T
- LEFT JOIN TP_MST_GOODSKINGDEECODE TMGK ON T.GOODSCODE = TMGK.GOODSCODE
- AND T.DICTIONARYVALUE = TMGK.GLAZETYPE
- AND T.LOGONAME = TMGK.LOGONAME
- WHERE rownums=1
- ORDER BY T.CHECKTIME DESC
- ",
- new CDAParameter("BARCODE", barCode)
- );
- if (dt.Rows.Count > 0)
- {
- resultJson["success"] = true;
- resultJson["message"] = "数据读取成功!";
- resultJson["goods"]["GoodsName"] = dt.Rows[0]["GOODSNAME"].ToString();
- resultJson["goods"]["GoodsCode"] = dt.Rows[0]["GOODSCODE"].ToString();
- resultJson["goods"]["GoodsSpecification"] = dt.Rows[0]["GOODSSPECIFICATION"].ToString();
- resultJson["goods"]["GoodsModel"] = dt.Rows[0]["GOODSMODEL"].ToString();
- resultJson["goods"]["GoodsType"] = dt.Rows[0]["GOODSTYPENAME"].ToString();
- resultJson["goods"]["GoodsLineType"] = dt.Rows[0]["GOODS_LINE_TYPE"].ToString();
- resultJson["goods"]["GlazeType"] = dt.Rows[0]["DICTIONARYVALUE"].ToString();
- resultJson["goods"]["PlateLimitnum"] = dt.Rows[0]["PLATELIMITNUM"].ToString();
- resultJson["goods"]["Logo"] = dt.Rows[0]["LOGONAME"].ToString();
- resultJson["goods"]["Buildingno"] = dt.Rows[0]["BUILDINGNO"].ToString();
- resultJson["goods"]["GoodsLevelName"] = dt.Rows[0]["GOODSLEVELNAME"].ToString();
- resultJson["goods"]["KingdeeCode"] = dt.Rows[0]["KingdeeCode"].ToString().Trim();
- }
- else
- {
- resultJson["success"] = false;
- resultJson["message"] = "条码错误或不存在此产品!";
- }
- //写日志
- ///writeLog(conn);
- }
- //入库方法
- private void doWmsAction(IDataAccess conn, string barCode, string action, bool WarehostingFlag)
- {
- int Count = 0;
- string sql;
- CDAParameter[] para;
- //入库操作(条码支持多个,用逗号分开)
- if (action == "in")
- {
- //入库操作
- #region 入库校验有一个不成功,则全部入库失败
- //DataTable dt = conn.ExecuteDatatable(@"SELECT WMSACTION,BARCODE FROM TP_PM_GOODSWHETHERWAREHOUSING WHERE BARCODE = @BARCODE@ AND VALUEFLAG = 1",
- // new CDAParameter("BARCODE", arrayBarcode[i].ToString())
- // );
- ////入库
- //if (dt.Rows.Count != 0)
- //{
- // if (dt.Rows[0]["WMSACTION"].ToString() == "0")
- // {
- // sql = @"UPDATE TP_PM_GOODSWHETHERWAREHOUSING SET WMSACTION=@WMSACTION@ WHERE BARCODE = @BARCODE@";
- // para = new CDAParameter[]{
- // new CDAParameter("BARCODE",arrayBarcode[i].ToString()),
- // new CDAParameter("WMSACTION",1)
- // };
- // Count += conn.ExecuteNonQuery(sql, para);
- // }
- // else
- // {
- // resultJson["success"] = false;
- // resultJson["message"] = "产品入库失败!条码为:" + dt.Rows[0]["BARCODE"] + "的产品已经入库";
- // return;
- // }
- //}
- //else
- //{
- // sql = @"INSERT INTO TP_PM_GOODSWHETHERWAREHOUSING(BARCODE,WMSACTION)VALUES(@BARCODE@,@WMSACTION@)";
- // para = new CDAParameter[]{
- // new CDAParameter("BARCODE",arrayBarcode[i].ToString()),
- // new CDAParameter("WMSACTION",1)
- // };
- // Count += conn.ExecuteNonQuery(sql, para);
- //}
- #endregion
- #region 失败的不入库 成功的入库
- try
- {
- if (WarehostingFlag == true)
- {
- sql = @"INSERT INTO TP_PM_GOODSWHETHERWAREHOUSING(BARCODE,WMSACTION)VALUES(@BARCODE@,@WMSACTION@)";
- para = new CDAParameter[]{
- new CDAParameter("BARCODE",barCode),
- new CDAParameter("WMSACTION",1),
- };
- Count = conn.ExecuteNonQuery(sql, para);
- }
- if (Count == 1)
- {
- message += "条码[" + barCode + "]入库成功,";
- resultJson["success"] = true;
- resultJson["message"] = message;
- }
- else
- {
- resultJson["success"] = true;
- resultJson["message"] = message;
- }
- }
- catch (Exception)
- {
- message += "条码[" + barCode + "] 已经入库了,";
- resultJson["success"] = true;
- resultJson["message"] = message;
- return;
- }
- #endregion
- }
- //入库撤销操作 预留内容(条码支持多个,用逗号分开)
- if (action == "cancelin")
- {
- //调用计件撤销方法===============================
- //DataTable dt = conn.ExecuteDatatable(@"SELECT WMSACTION,BARCODE FROM TP_PM_GOODSWHETHERWAREHOUSING WHERE BARCODE = @BARCODE@ AND VALUEFLAG = 1",
- //new CDAParameter("BARCODE", barCode)
- //);
- //if (dt.Rows.Count != 0)
- //{
- // if (dt.Rows[0]["WMSACTION"].ToString() == "0")
- // {
- // resultJson["success"] = false;
- // resultJson["message"] = "产品撤销入库失败!条码为:" + dt.Rows[0]["BARCODE"] + "的产品已经撤销入库";
- // return;
- // }
- // sql = @"UPDATE TP_PM_GOODSWHETHERWAREHOUSING SET WMSACTION=@WMSACTION@ WHERE BARCODE = @BARCODE@";
- // para = new CDAParameter[]{
- // new CDAParameter("BARCODE",barCode),
- // new CDAParameter("WMSACTION",0)
- // };
- // Count += conn.ExecuteNonQuery(sql, para);
- //}
- //else
- //{
- // resultJson["success"] = false;
- // resultJson["message"] = "产品撤销入库失败!条码不存在";
- // return;
- //}
- }
- //if (Count == arrayBarcode.Length)
- //{
- // if (action == "in")
- // {
- // resultJson["success"] = true;
- // resultJson["message"] = "产品入库成功!";
- // }
- // else if (action == "cancelin")
- // {
- // resultJson["success"] = true;
- // resultJson["message"] = "产品撤销入库成功!";
- // }
- //}
- //else
- //{
- // if (action == "in")
- // {
- // resultJson["success"] = false;
- // resultJson["message"] = "产品入库失败!";
- // }
- // else if (action == "cancelin")
- // {
- // resultJson["success"] = false;
- // resultJson["message"] = "产品撤销入库失败!";
- // }
- //}
- //===============================================
- //写日志
- //writeLog(conn);
- }
- //日志记录(访问者IP,访问链接,访问参数,返回结果,访问时间)
- //private void writeLog(IDataAccess conn)
- //{
- // if(Convert.ToBoolean(resultJson["success"]) == true)
- // {
- // Logger.Info("IP:" + HttpContext.Current.Request.UserHostAddress + " "+"访问链接:"+ HttpContext.Current.Request.UrlReferrer +" "+ " " +
- // "条码:" + barCode + " 入库标识:"+ wmsAction +" " +" 输出:" + resultJson.ToString());
- // }
- // else
- // {
- // Logger.Info("IP:" + HttpContext.Current.Request.UserHostAddress +"访问链接:"+ HttpContext.Current.Request.UrlReferrer + " " +
- // "条码:"+ barCode +" 入库标识:"+ wmsAction +" "+ resultJson["message"] + "输出:" + resultJson.ToString());
- // }
- //}
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
|