1.定时充电问题排查,增加状态字段增加定时更新状态2.删除webservice所有日志 api接口日志(超时问题优化)
1个文件已添加
8个文件已修改
226 ■■■■ 已修改文件
HH.WCS.Mobox3.pinggao.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Program.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSapController.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSpaHelper.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WCSCore.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dispatch/NDC.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_CD.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
process/TaskProcess.cs 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
util/SqlHelper.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.pinggao.csproj
@@ -195,6 +195,7 @@
    <Compile Include="models\OutboundRecord.cs" />
    <Compile Include="models\SapReturn.cs" />
    <Compile Include="models\SapRoot.cs" />
    <Compile Include="models\TN_CD.cs" />
    <Compile Include="models\TN_DPRECORD.cs" />
    <Compile Include="models\TN_GENERATE_ORDER.cs" />
    <Compile Include="models\TN_Location_Ext.cs" />
Program.cs
@@ -116,6 +116,7 @@
                tasks.Add(GetTask(WMSCore.CheckDistributionCNTROrder));
                //tasks.Add(GetTask(WMSCore.TransportTask));
                tasks.Add(GetTask(WCSCore.Dispatch));
                tasks.Add(GetTask(WCSCore.Dispatch1));
                //添加自定义线程
                //tasks.Add(GetTask(Monitor.CheckDevice));
api/WmsSapController.cs
@@ -291,37 +291,11 @@
        [HttpPost]
        public WLReturnRoot.Root MaterReceiveXmlData([FromBody] MaterDto.Root xmlData)
        {
            #region xml数据接收转数组
            //LogHelper.Info("物料接收接口:" + JsonConvert.SerializeObject(xmlData));
            ////接收xml数据
            //XmlDocument xmlDoc = new XmlDocument();
            //xmlDoc.LoadXml(xmlData.ToString());
            //// 将 XmlDocument 转换为 JSON 字符串
            //JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
            //// 处理特定字段,强制转换为数组
            //WmsSpaHelper.EnsureArrayFormats(jsonObject, "ITEM");
            //// 反序列化为RootWithArray
            //var data = JsonConvert.DeserializeObject<MaterDto.Root>(jsonObject.ToString());
            #endregion
            #region 外采入库业务流程
            WLReturnRoot.Root simpleResult = WmsSpaHelper.Mater_In(xmlData);
            //接收返回参数 生成sap对接文档返回格式
            //var json = WmsSpaHelper.GetJsonResult(simpleResult.WLPZBH, simpleResult.resultCode.ToString(), simpleResult.resultMsg);
            //#endregion
            //#region  返回xml
            //string xml = JsonConvert.DeserializeXmlNode(json, "root").OuterXml;
            ////返回json
            //var response = new HttpResponseMessage()
            //{
            //    Content = new StringContent(xml, Encoding.UTF8, "application/xml")
            //};
            //return response;
            var json = JsonConvert.SerializeObject(simpleResult);
            return simpleResult;
@@ -593,17 +567,17 @@
            #region xml数据接收转数组
            //LogHelper.Info("生产订单领料单(生成领料单)接口:" + JsonConvert.SerializeObject(xmlData));
            #endregion
            #region 出库业务流程
           return WmsSpaHelper.Out_Order_Ins(xmlData);
            return WmsSpaHelper.Out_Order_Ins(xmlData);
            //sw.Stop();
            //long elapsedMilliseconds = sw.ElapsedMilliseconds;
            //LogHelper.Info("生产订单领料单(生成领料单)返回时长:" + elapsedMilliseconds);
            #endregion
        }
api/WmsSpaHelper.cs
@@ -56,7 +56,7 @@
            bool panduan = true;
            var db = new SqlHelper<object>().GetInstance();
            var po = db.Queryable<TN_Material_KC>().Where(a => a.S_ITEM_CODE == ItemCode).First();
            var po = db.Queryable<TN_Material_KC>().Where(a => a.S_ITEM_CODE== ItemCode).First();
            var po1 = db.Queryable<CntrItemRel>().Where(a => a.S_ITEM_CODE == ItemCode).First();
            if (po != null)
@@ -893,8 +893,8 @@
            db.BeginTran();
            List<WLReturnRoot.ITEM> list = new List<WLReturnRoot.ITEM>();
            var itemCodes = model.ROOT.ITEM.Select(item => item.WLBM).ToList();
            List<TN_Material> tN_Materials = new List<TN_Material>();
            var itemCodes = model.ROOT.ITEM.Select(item => item.WLBM).Distinct().ToList();
            var itemlist = db.Queryable<TN_Material>()
            .Where(it => itemCodes.Contains(it.S_ITEM_CODE))
            .ToList();
@@ -903,10 +903,8 @@
            {
                try
                {
                    var result = new WLReturnRoot.ITEM();
                    var materlist = itemlist.Where(it => it.S_ITEM_CODE == item.WLBM).First();
                    var materlist = itemlist.Where(it => it.S_ITEM_CODE == item.WLBM).FirstOrDefault();
                    if (materlist == null)
                    {
                        TN_Material tN_Material = new TN_Material();
@@ -923,7 +921,8 @@
                        tN_Material.S_CPZ = item.CPZ;
                        tN_Material.S_CPZMS = item.CPZMS;
                        tN_Material.S_ITEM_NAME = item.VTEXT;
                        db.Insertable<TN_Material>(tN_Material).ExecuteCommand();
                        tN_Materials.Add(tN_Material);
                        //db.Insertable<TN_Material>(tN_Material).ExecuteCommand();
                        result.MSGDESP = "成功";
                        result.MSGCODE = 0;
                        result.GCBM = item.GCBM;
@@ -966,6 +965,24 @@
                }
            }
            response.ROOT.ITEM = list;
            if (tN_Materials.Count()>0)
            {
                db.Insertable<TN_Material>(tN_Materials).ExecuteCommand();
                //using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer))
                //{
                //    bulkCopy.DestinationTableName = "TN_Material";
                //    bulkCopy.BatchSize = 500;
                //    var dataTable = new DataTable();
                //    dataTable = list.ToDataTable();
                //    // 添加列映射(确保名称匹配)
                //    foreach (DataColumn col in dataTable.Columns)
                //    {
                //        bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                //    }
                //    bulkCopy.WriteToServer(tN_Materials.ToDataTable());
                //}
            }
            //db.Insertable<TN_Material>(list).ExecuteCommand();
            db.CommitTran();
@@ -3694,10 +3711,11 @@
                        var po1 = new TN_Outbound_Order { S_NO = WMSHelper.GenerateShippNo(), UNAME = po.UNAME, S_FACTORY = po.S_FACTORY, S_CBZX = po.S_CBZX, S_ZZKM = po.S_ZZKM, S_LRZX = po.S_LRZX, BLDAT = po.BLDAT, BUDAT = po.BUDAT, S_OUT_TYPE = po.S_OUT_TYPE, S_BS_TYPE = po.S_BS_TYPE, S_AREA_CODE = po.S_AREA_CODE, S_BS_NO = po.S_NO };
                        List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>();
                        po1.Details = new List<TN_Outbound_Detail>();
                        var list = po.Details.Where(s => s.F_QTY > s.F_ACC_D_QTY).Select(s => s.S_ITEM_CODE).Distinct().ToArray();
                        var Sitemlist = db.Queryable<CntrItemRel>().Where(s => list.Contains(s.S_ITEM_CODE)).Select(s => s.S_ITEM_CODE).ToArray();
                        po.Details = po.Details.Where(s => s.F_QTY > s.F_ACC_D_QTY && Sitemlist.Contains(s.S_ITEM_CODE)).ToList();
                        var list = po.Details.Where(s => s.F_QTY > s.F_ACC_D_QTY&&s.S_ERP_WH_CODE=="4004").Select(s => s.S_ITEM_CODE).Distinct().ToArray();
                        var Sitemlist = db.Queryable<CntrItemRel>().Where(s => list.Contains(s.S_ITEM_CODE)).Select(s => s.S_ITEM_CODE).ToArray().Select(x => x.Trim()).ToArray(); ;
                        po.Details = po.Details.Where(s => Sitemlist.Contains(s.S_ITEM_CODE)).ToList();
                        if (po.Details.Count() > 0)
                        {
                          
core/WCSCore.cs
@@ -7,6 +7,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static HH.WCS.Mobox3.pinggao.api.ApiModel;
namespace HH.WCS.Mobox3.pinggao.core {
@@ -140,6 +141,10 @@
            }
        } internal static void Dispatch1() {
            //查询任务
            //获取所有等待的任务
            TaskProcess.SendCd();
        }
        /// <summary>
dispatch/NDC.cs
@@ -83,7 +83,7 @@
        {
            //< Order  TS = '60'  Pri = '" + mst.CN_N_PRIORITY.ToString() + "' From = '" + start.CN_N_AGV_TN_Location + "' To = '" + end.CN_N_AGV_TN_Location + "'  No = '" + mst.S_CODE + "_1' Ext1 = '1' Ext2 = '" + Constants.TN_MID_COMMANDEQ_CALLAGVOrderCommandType + "'  N_CNTR_COUNT = ''   FRow = '" + sFloor + "'  TRow = '" + eFloor + "' />
            var sb = new StringBuilder();
            sb.Append($"<Req><Order ");
            sb.Append($"<Req> ");
            if (ts != 0)
            {
                sb.Append($"TS='{ts}'");
@@ -95,6 +95,23 @@
            sb.Append("/></Req>");
            return sb.ToString();
        }
        private static string GetReqStrcd(int ts, Dictionary<string, string> param)
        {
            //< Order  TS = '60'  Pri = '" + mst.CN_N_PRIORITY.ToString() + "' From = '" + start.CN_N_AGV_TN_Location + "' To = '" + end.CN_N_AGV_TN_Location + "'  No = '" + mst.S_CODE + "_1' Ext1 = '1' Ext2 = '" + Constants.TN_MID_COMMANDEQ_CALLAGVOrderCommandType + "'  N_CNTR_COUNT = ''   FRow = '" + sFloor + "'  TRow = '" + eFloor + "' />
            var sb = new StringBuilder();
            sb.Append($"<Req><Order ");
            if (ts != 0)
            {
                sb.Append($"<TS No='{ts}'>");
            }
            foreach (var kv in param)
            {
             sb.Append($"<Param Name='{kv.Key}' >{kv.Value}</Param>");
            }
            sb.Append("</TS>/></Req>");
            return sb.ToString();
        }
        public static AGVResult OrderAdd(int ts, Dictionary<string, string> param, Dictionary<string, string> param1)
        {
            //< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
@@ -114,6 +131,25 @@
                return new AGVResult { Res = new Res { ErrCode = -1, ErrInfo = e.Message } };
            }
        }
        public static AGVResult OrderAdd2(int ts, Dictionary<string, string> param)
        {
            //< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
            var bufin = GetReqStrcd(ts, param);
            try
            {
                var result = callClient.OrderAdd(bufin);
                LogHelper.Info($"OrderAdd req={bufin} res={result}", "NDC");
                //LogHelper.Info(result.bufout, "ts");
                return GetResult(result);
            }
            catch (Exception e)
            {
                LogHelper.Info($"OrderAdd req={bufin} res={e.Message}", "NDC");
                return new AGVResult { Res = new Res { ErrCode = -1, ErrInfo = e.Message } };
            }
        }
        public static AGVResult AddNewOrder(int ts, Dictionary<string, string> param) {
            //< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
models/TN_CD.cs
New file
@@ -0,0 +1,16 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.Mobox3.pinggao.models
{
    [SugarTable("TN_CD")]
    public class TN_CD : BaseModel
    {
        public string S_TIME { get; set; }
        public int N_STATE { get; set; }
    }
}
process/TaskProcess.cs
@@ -15,6 +15,7 @@
using static HH.WCS.Mobox3.pinggao.models.SapRoot.WcReturnRoot;
using static HH.WCS.Mobox3.pinggao.api.OtherModel;
using NLog.Fluent;
using System.Xml.Linq;
namespace HH.WCS.Mobox3.pinggao.process
{
@@ -165,7 +166,7 @@
                                   .ToList();
                        if (TN_Task.N_ERR == 2)//前移车
                        {
                            endlist = endlist.Where(s => s.N_LAYER < 7).ToList();
                        }
                        foreach (var item in endlist)
@@ -567,24 +568,72 @@
        }
        public static DateTime? ParseCustomFormatDate(string dateStr)
        {
            // 假设日期格式是 yy:mm
            if (DateTime.TryParseExact(dateStr, "HH:mm", null, System.Globalization.DateTimeStyles.None, out DateTime result))
            {
                return result;
            }
            return null;
        }
        public static bool SendCd()
        {
            var db = new SqlHelper<object>().GetInstance();
            var dstart = db.Queryable<TN_CD>().Where(s => s.N_STATE == 0).First();
        public static bool SendCd() {
             var result=false;
                var dic = new Dictionary<string, string>();
                var dic1 = new Dictionary<string, string>();
                dic.Add("ExtDeviceNo", "1");
                //判断
                var res = NDC.OrderAdd(99, dic, dic1);
                if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
            var result = false;
            if (dstart != null)
            {
                DateTime currentDate = DateTime.Now;
                // 格式化输出时分部分
                string currentHourMinute = currentDate.ToString("HH:mm");
                if (currentHourMinute == "00:00")
                {
                result = true;
                    dstart.N_STATE = 0;
                    db.Updateable<TN_CD>(dstart).UpdateColumns(a => new { a.N_STATE }).ExecuteCommand();
                }
                if (dstart.S_TIME == currentHourMinute)
                {
                    var dic = new Dictionary<string, string>();
                    var dic1 = new Dictionary<string, string>();
                    var no = WMSHelper.GenerateTaskNo();
                    dic.Add("No", no);
                    dic.Add("Pri", "0");
                    dic1.Add("ExtDeviceNo", "1");
                    //判断
                    var res = NDC.OrderAdd(99, dic, dic1);
                    if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
                    {
                        //    dstart.N_STATE = 1;
                        //    db.Updateable<TN_CD>(dstart).UpdateColumns(a => new { a.N_STATE }).ExecuteCommand();
                        // result = true;
                    }
                    var dic12 = new Dictionary<string, string>();
                    var dic11 = new Dictionary<string, string>();
                    var no1 = WMSHelper.GenerateTaskNo();
                    dic12.Add("No", no1);
                    dic12.Add("Pri", "0");
                    dic11.Add("ExtDeviceNo", "2");
                    //判断
                    var res1 = NDC.OrderAdd(99, dic12, dic11);
                    if (res1 != null && (res1.Res.ErrCode == 0 || res1.Res.ErrCode == 50009))
                    {
                        dstart.N_STATE = 1;
                        db.Updateable<TN_CD>(dstart).UpdateColumns(a => new { a.N_STATE }).ExecuteCommand();
                        result = true;
                    }
                }
            }
            return result;
        }
        /// <summary>
util/SqlHelper.cs
@@ -105,9 +105,9 @@
                //LogHelper.Info($"{sql}");
                if (db.Ado.SqlExecutionTime.TotalSeconds > 1) {
                    //Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(p.ToDictionary(it => it.ParameterName, it => it.Value)));
                LogHelper.Info("错误日志"+sql + "\r\n" + db.Utilities.SerializeObject(p.ToDictionary(it => it.ParameterName, it => it.Value)));
                //代码CS文件名
                var fileName = db.Ado.SqlStackTrace.FirstFileName;
                    //LogHelper.Info("错误日志"+sql + "\r\n" + db.Utilities.SerializeObject(p.ToDictionary(it => it.ParameterName, it => it.Value)));
                    //代码CS文件名
                    var fileName = db.Ado.SqlStackTrace.FirstFileName;
                    //代码行数
                    var fileLine = db.Ado.SqlStackTrace.FirstLine;
                    //方法名