| | |
| | | using Hanhe.iWCS.Common; |
| | | using Hanhe.iWCS.DeviceDriver; |
| | | using Hanhe.iWCS.MData; |
| | | using Hanhe.iWCS.Model; |
| | | using MongoDB.Bson; |
| | |
| | | using System.Net.NetworkInformation; |
| | | using System.Net.Sockets; |
| | | using System.Security.Cryptography; |
| | | using System.Security.Policy; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.ApiHelper; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.MESHelper; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.PLCControl; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.ProtocolAnalysis; |
| | | |
| | | namespace Hanhe.iWCS.JingmenGEMTwoProtocol |
| | | { |
| | |
| | | static WebApiHelper api = new WebApiHelper(); |
| | | |
| | | public const string ERPSwitch01 = "1";// ERP变更流程开关 |
| | | public static HardwareAccessObject hao = HardwareAccessHelper.Instance.GetEquipmentsHAO(Constants.WMS_DEVICE_TYPE_WMS); |
| | | public static List<string> SendERPTaskType = Settings.SendERPTaskType.Split(',').ToList();//回报任务类型 |
| | | public static List<string> LoginInfo = Settings.LoginInfo.Split(',').ToList();// ERP登录接口传输信息 |
| | | |
| | |
| | | public static void SendERPTaskInfo(TN_I_TASK_MST mst) |
| | | { |
| | | CMMLog.Info($"SendERPTaskInfo 插入数据 开始,任务号:{mst.CN_S_SOURCE_NO}"); |
| | | var sendERPTaskInfo = MongoDBSingleton.Instance.FindOne<SendErpTaskInfoTable>(Query.EQ("taskNo", mst.CN_S_SOURCE_NO), "SendErpTaskInfoTable"); |
| | | if (sendERPTaskInfo != null) |
| | | if (mst.CN_S_BUSS_TYPE.Contains("电钴")) |
| | | { |
| | | CMMLog.Info($"SendERPTaskInfo 插入数据,任务号:{mst.CN_S_SOURCE_NO}"); |
| | | MongoDBSingleton.Instance.Update<SendErpTaskInfoTable>(Query.EQ("taskNo", mst.CN_S_SOURCE_NO), Update.Set("isFinish", "Y"), "SendErpTaskInfoTable", UpdateFlags.None); |
| | | var sendERPTaskInfo = MongoDBSingleton.Instance.FindOne<SendErpTaskInfoTableDG>(Query.EQ("taskNo", mst.CN_S_SOURCE_NO), "SendErpTaskInfoTableDG"); |
| | | if (sendERPTaskInfo != null) |
| | | { |
| | | CMMLog.Info($"SendERPTaskInfo 插入数据,任务号:{mst.CN_S_SOURCE_NO}"); |
| | | MongoDBSingleton.Instance.Update<SendErpTaskInfoTableDG>(Query.EQ("taskNo", mst.CN_S_SOURCE_NO), Update.Set("isFinish", "Y"), "SendErpTaskInfoTableDG", UpdateFlags.None); |
| | | } |
| | | else CMMLog.Error($"SendERPTaskInfo Error:当前任务号数据存在,不允许插入 SendErpTaskInfoTableDG 记录表。任务号:{mst.CN_S_SOURCE_NO}"); |
| | | } |
| | | else CMMLog.Error($"SendERPTaskInfo Error:当前任务号数据存在,不允许插入 SendErpTaskInfoTable 记录表。任务号:{mst.CN_S_SOURCE_NO}"); |
| | | else |
| | | { |
| | | var sendERPTaskInfo = MongoDBSingleton.Instance.FindOne<SendErpTaskInfoTable>(Query.EQ("taskNo", mst.CN_S_SOURCE_NO), "SendErpTaskInfoTable"); |
| | | if (sendERPTaskInfo != null) |
| | | { |
| | | CMMLog.Info($"SendERPTaskInfo 插入数据,任务号:{mst.CN_S_SOURCE_NO}"); |
| | | MongoDBSingleton.Instance.Update<SendErpTaskInfoTable>(Query.EQ("taskNo", mst.CN_S_SOURCE_NO), Update.Set("isFinish", "Y"), "SendErpTaskInfoTable", UpdateFlags.None); |
| | | } |
| | | else CMMLog.Error($"SendERPTaskInfo Error:当前任务号数据存在,不允许插入 SendErpTaskInfoTable 记录表。任务号:{mst.CN_S_SOURCE_NO}"); |
| | | } |
| | | } |
| | | |
| | | public class SendErpTaskInfoTable |
| | |
| | | /// </summary> |
| | | public int FEntryID { get; set; } |
| | | /// <summary> |
| | | /// 反馈mes 1-反馈失败,持续反馈,0-未反馈 |
| | | /// 反馈mes 1- 无需反馈,0-未反馈 |
| | | /// </summary> |
| | | public string mesSucess { get; set; } |
| | | } |
| | | |
| | | public class SendErpTaskInfoTableBak |
| | | { |
| | | public ObjectId _id { get; set; } |
| | | /// <summary> |
| | | /// 任务号 |
| | | /// </summary> |
| | | public string taskNo { get; set; } = ""; |
| | | /// <summary> |
| | | /// 点位 |
| | | /// </summary> |
| | | public string Bit { get; set; } |
| | | /// <summary> |
| | | /// 包装机号 |
| | | /// </summary> |
| | | public string packingMachineNumber { get; set; } |
| | | /// <summary> |
| | | /// 物料编码(唯一) |
| | | /// </summary> |
| | | public string materiCode { get; set; } |
| | | /// <summary> |
| | | /// 物料名称 |
| | | /// </summary> |
| | | public string materiName { get; set; } |
| | | /// <summary> |
| | | /// 物料规格 |
| | | /// </summary> |
| | | public string materialSpec { get; set; } |
| | | /// <summary> |
| | | /// 总总量 |
| | | /// </summary> |
| | | public int totalWeight { get; set; } |
| | | /// <summary> |
| | | /// 批次号 |
| | | /// </summary> |
| | | public string lotCode { get; set; } |
| | | /// <summary> |
| | | /// 时间戳-对应任务数据 CN_S_BATCH_NO 字段值 |
| | | /// </summary> |
| | | public string timeStamp { get; set; } |
| | | /// <summary> |
| | | /// 生产日期 |
| | | /// </summary> |
| | | public DateTime productTime { get; set; } |
| | | /// <summary> |
| | | /// 失效日期 |
| | | /// </summary> |
| | | public DateTime invalidationTime { get; set; } |
| | | /// <summary> |
| | | /// 是否完成 |
| | | /// </summary> |
| | | public string isFinish { get; set; } = "N"; |
| | | public DateTime dateTime { get; set; } |
| | | //变更注释 |
| | | /// <summary> |
| | | /// 生产订单编号 |
| | | /// </summary> |
| | | public string orderCode { get; set; } |
| | | /// <summary> |
| | | /// 需求总重量 |
| | | /// </summary> |
| | | public int totalNeedWeight { get; set; } |
| | | /// <summary> |
| | | /// 叠包后总重量(净重) |
| | | /// </summary> |
| | | public int netWeight { get; set; } |
| | | /// <summary> |
| | | /// 分录id |
| | | /// </summary> |
| | | public int FEntryID { get; set; } |
| | | /// <summary> |
| | | /// 是否上报 1-需要上报,0-不需要上报 |
| | | /// </summary> |
| | | public string needReport { get; set; } = "0"; |
| | | } |
| | | |
| | | public class SendErpTaskInfoTableDG |
| | | { |
| | | public ObjectId _id { get; set; } |
| | | /// <summary> |
| | | /// 任务号 |
| | | /// </summary> |
| | | public string taskNo { get; set; } = ""; |
| | | /// <summary> |
| | | /// 点位 |
| | | /// </summary> |
| | | public string Bit { get; set; } |
| | | /// <summary> |
| | | /// 包装机号 |
| | | /// </summary> |
| | | public string packingMachineNumber { get; set; } |
| | | /// <summary> |
| | | /// 袋号1 |
| | | /// </summary> |
| | | public string bagNumber1 { get; set; } |
| | | /// <summary> |
| | | /// 袋号2 |
| | | /// </summary> |
| | | public string bagNumber2 { get; set; } |
| | | /// <summary> |
| | | /// 袋号3 |
| | | /// </summary> |
| | | public string bagNumber3 { get; set; } |
| | | /// <summary> |
| | | /// 袋号4 |
| | | /// </summary> |
| | | public string bagNumber4 { get; set; } |
| | | /// <summary> |
| | | /// 物料编码(唯一) |
| | | /// </summary> |
| | | public string materiCode { get; set; } |
| | | /// <summary> |
| | | /// 物料名称 |
| | | /// </summary> |
| | | public string materiName { get; set; } |
| | | /// <summary> |
| | | /// 物料规格 |
| | | /// </summary> |
| | | public string materialSpec { get; set; } |
| | | /// <summary> |
| | | /// 总总量 |
| | | /// </summary> |
| | | public int totalWeight { get; set; } |
| | | /// <summary> |
| | | /// 批次号 |
| | | /// </summary> |
| | | public string lotCode { get; set; } |
| | | /// <summary> |
| | | /// 时间戳-对应任务数据 CN_S_BATCH_NO 字段值 |
| | | /// </summary> |
| | | public string timeStamp { get; set; } |
| | | /// <summary> |
| | | /// 生产日期 |
| | | /// </summary> |
| | | public DateTime productTime { get; set; } |
| | | /// <summary> |
| | | /// 失效日期 |
| | | /// </summary> |
| | | public DateTime invalidationTime { get; set; } |
| | | /// <summary> |
| | | /// 是否完成 |
| | | /// </summary> |
| | | public string isFinish { get; set; } = "N"; |
| | | public DateTime dateTime { get; set; } |
| | | //变更注释 |
| | | /// <summary> |
| | | /// 生产订单编号 |
| | | /// </summary> |
| | | public string orderCode { get; set; } |
| | | /// <summary> |
| | | /// 需求总重量 |
| | | /// </summary> |
| | | public int totalNeedWeight { get; set; } |
| | | /// <summary> |
| | | /// 叠包后总重量(净重) |
| | | /// </summary> |
| | | public int netWeight { get; set; } |
| | | /// <summary> |
| | | /// 分录id |
| | | /// </summary> |
| | | public int FEntryID { get; set; } |
| | | /// <summary> |
| | | /// 反馈mes 1- 无需反馈,0-未反馈 |
| | | /// </summary> |
| | | public string mesSucess { get; set; } |
| | | } |
| | | public class SendMESTaskInfoTable |
| | | { |
| | | public ObjectId _id { get; set; } |
| | |
| | | if (sendERPTaskInfoList.Count == 5 || timeInfo.dateTime.AddHours(1) < DateTime.Now) |
| | | { |
| | | // 先根据任务批次号字段获取时间戳中间表-TimeCuoInfoCom 数据,并进行后续调用,处理成功删除时间戳中间表-TimeCuoInfoCom 数据 |
| | | int count = sendERPTaskInfoList.Where(a => string.IsNullOrEmpty(a.orderCode) || a.orderCode.Length < 2 || a.orderCode.Substring(0, 2) != "MO").ToList().Count(); |
| | | #region 计算单据编号 |
| | | string FBillNO = ""; |
| | | int num = 0; |
| | | string S_NUM = ""; |
| | | string time = DateTime.Now.ToString("yyMMdd"); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc time:{time}"); |
| | | var midInfo = db.Queryable<ADDMid>().Where(b => b.time == time).First(); |
| | | if (midInfo != null) |
| | | { |
| | | midInfo.num = midInfo.num + 1; |
| | | num = midInfo.num; |
| | | db.Updateable(midInfo).UpdateColumns(b => new { b.num }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | num = 1; |
| | | midInfo = new ADDMid |
| | | { |
| | | time = DateTime.Now.ToString("yyMMdd"), |
| | | num = 1 |
| | | }; |
| | | db.Insertable(midInfo).ExecuteCommand(); |
| | | } |
| | | |
| | | //int n = 0; //行号 |
| | | CMMLog.Info($"SendERPTaskCompleteFunc num: {num}"); |
| | | for (int i = num.ToString().Length + 1; i <= 4; i++) |
| | | { |
| | | S_NUM = S_NUM + "0"; |
| | | } |
| | | |
| | | FBillNO = "ARKD" + DateTime.Now.ToString("yyMMdd") + S_NUM + num.ToString(); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc: {FBillNO}"); |
| | | #endregion |
| | | |
| | | int n = 0; //行号 |
| | | int m = 0; |
| | | sendERPTaskInfoList.ForEach(a => |
| | | { |
| | | //n = n + 1; |
| | | #region 计算单据编号 |
| | | string FBillNO = ""; |
| | | int num = 0; |
| | | string S_NUM = ""; |
| | | string time = DateTime.Now.ToString("yyMMdd"); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc time:{time}"); |
| | | var midInfo = db.Queryable<ADDMid>().Where(b => b.time == time).First(); |
| | | if (midInfo != null) |
| | | if(!string.IsNullOrEmpty(a.orderCode) && a.orderCode.Length >= 2 && a.orderCode.Substring(0,2) == "MO") |
| | | { |
| | | midInfo.num = midInfo.num + 1; |
| | | num = midInfo.num; |
| | | db.Updateable(midInfo).UpdateColumns(b => new { b.num }).ExecuteCommand(); |
| | | m = m + 1; |
| | | if(m > 1) |
| | | { |
| | | //2025-07-14 插入新表的单据编号,一条一个单据编号 |
| | | #region 计算单据编号 |
| | | S_NUM = ""; |
| | | midInfo = db.Queryable<ADDMid>().Where(b => b.time == time).First(); |
| | | if (midInfo != null) |
| | | { |
| | | midInfo.num = midInfo.num + 1; |
| | | num = midInfo.num; |
| | | db.Updateable(midInfo).UpdateColumns(b => new { b.num }).ExecuteCommand(); |
| | | } |
| | | |
| | | CMMLog.Info($"SendERPTaskCompleteFunc num: {num}"); |
| | | for (int i = num.ToString().Length + 1; i <= 4; i++) |
| | | { |
| | | S_NUM = S_NUM + "0"; |
| | | } |
| | | |
| | | FBillNO = "ARKD" + DateTime.Now.ToString("yyMMdd") + S_NUM + num.ToString(); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc: {FBillNO}"); |
| | | #endregion |
| | | } |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:INSERT INTO T_JY_PRDINSTOCKOP (FBillNO,FSourceBillNo,FEntryID,FSEQ,FQTY,FStockNumber,FLot,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','{a.orderCode}','{a.FEntryID}','{1}','{a.totalNeedWeight}','CK020','{a.lotCode}','{a.productTime}','{a.invalidationTime}','{a.taskNo}','{1}','0')"); |
| | | string sql = $"INSERT INTO T_JY_PRDINSTOCKOP (FBillNO,FSourceBillNo,FEntryID,FSEQ,FQTY,FStockNumber,FLot,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','{a.orderCode}','{a.FEntryID}','{1}','{a.totalNeedWeight}','CK020','{a.lotCode}','{a.productTime}','{a.invalidationTime}','{a.taskNo}','{1}','0')"; |
| | | if (new SqlHelper<object>().ExecuteSql(sql, false)) |
| | | { |
| | | #region 反馈信息给mes 对接文档 https://365.kdocs.cn/l/cltzoEaznLco |
| | | bool result = sendMes(a, true); |
| | | |
| | | if (!result) |
| | | { |
| | | //将数据存入中间表,重新发送 |
| | | MongoDBSingleton.Instance.Insert<SendMESTaskInfoTable>(new SendMESTaskInfoTable |
| | | { |
| | | taskNo = a.taskNo, |
| | | Bit = a.Bit, |
| | | packingMachineNumber = a.packingMachineNumber, |
| | | materiCode = a.materiCode, |
| | | materiName = a.materiName, |
| | | materialSpec = a.materialSpec, |
| | | totalWeight = a.totalWeight, |
| | | lotCode = a.lotCode, |
| | | timeStamp = a.timeStamp, |
| | | productTime = a.productTime, |
| | | invalidationTime = a.invalidationTime, |
| | | isFinish = a.isFinish, |
| | | dateTime = a.dateTime, |
| | | orderCode = a.orderCode, |
| | | totalNeedWeight = a.totalNeedWeight, |
| | | netWeight = a.netWeight, |
| | | FEntryID = a.FEntryID |
| | | }); |
| | | } |
| | | #endregion |
| | | } |
| | | else |
| | | { |
| | | //插入失败,将数据插入新表,人工手动处理,重新插入 |
| | | MongoDBSingleton.Instance.Insert<SendErpTaskInfoTableBak>(new SendErpTaskInfoTableBak |
| | | { |
| | | orderCode = a.orderCode, |
| | | FEntryID = a.FEntryID, |
| | | totalNeedWeight = a.totalNeedWeight, |
| | | lotCode = a.lotCode, |
| | | productTime = a.productTime, |
| | | invalidationTime = a.invalidationTime, |
| | | taskNo = a.taskNo |
| | | }, "SendErpTaskInfoTableBak"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | num = 1; |
| | | midInfo = new ADDMid |
| | | n = n + 1; |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:INSERT INTO T_JY_SPInStockADD (FBillNO,FStockOrgNumber,FPrdOrgNumber,FSeq,FMaterialNumber,Flot,FInStockType,FMustQty,FStockNumber,FWorkShopNumber,FStockStatus,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','02','02','{n}','{a.materiCode}','{a.lotCode}','1','{a.totalWeight}','CK020','BM000161','1','{a.productTime}','{a.invalidationTime}','{a.taskNo}','{count}','0')"); |
| | | string sql = $"INSERT INTO T_JY_SPInStockADD (FBillNO,FStockOrgNumber,FPrdOrgNumber,FSeq,FMaterialNumber,Flot,FInStockType,FMustQty,FStockNumber,FWorkShopNumber,FStockStatus,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','02','02','{n}','{a.materiCode}','{a.lotCode}','1','{a.totalWeight}','CK020','BM000161','1','{a.productTime}','{a.invalidationTime}','{a.taskNo}','{count}','0')"; |
| | | if(new SqlHelper<object>().ExecuteSql(sql, false)) |
| | | { |
| | | time = DateTime.Now.ToString("yyMMdd"), |
| | | num = 1 |
| | | }; |
| | | db.Insertable(midInfo).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | //插入失败,将数据插入新表,人工手动处理,重新插入 |
| | | MongoDBSingleton.Instance.Insert<SendErpTaskInfoTableBak>(new SendErpTaskInfoTableBak |
| | | { |
| | | orderCode = a.orderCode, |
| | | FEntryID = a.FEntryID, |
| | | totalNeedWeight = a.totalNeedWeight, |
| | | lotCode = a.lotCode, |
| | | productTime = a.productTime, |
| | | invalidationTime = a.invalidationTime, |
| | | taskNo = a.taskNo |
| | | }, "SendErpTaskInfoTableBak"); |
| | | } |
| | | } |
| | | //插入成功 清除中间表 |
| | | MongoDBSingleton.Instance.Remove<SendErpTaskInfoTable>(Query.EQ("_id", a._id), "SendErpTaskInfoTable", RemoveFlags.None); |
| | | MongoDBSingleton.Instance.Remove<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(a.timeStamp)), "TimeCuoInfoCom", RemoveFlags.None); |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | catch(Exception ex) |
| | | { |
| | | CMMLog.Info("SendERPTaskCompleteFunc err:"+ex.Message); |
| | | } |
| | | } |
| | | |
| | | CMMLog.Info($"SendERPTaskCompleteFunc num: {num}"); |
| | | for (int i = num.ToString().Length + 1; i <= 4; i++) |
| | | internal static void SendERPTaskCompleteFuncThree() |
| | | { |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var sendERPTaskInfoList = MongoDBSingleton.Instance.Find<SendErpTaskInfoTableBak>(Query.And(Query.EQ("needReport", "1")), "SendErpTaskInfoTableBak"); |
| | | //var sendERPTaskInfoList = MongoDBSingleton.Instance.Find<SendErpTaskInfoTable>(Query.EQ("isFinish", "Y"), "SendErpTaskInfoTable"); |
| | | if (sendERPTaskInfoList.Count > 0) |
| | | { |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:{sendERPTaskInfoList.Count}"); |
| | | // 先根据任务批次号字段获取时间戳中间表-TimeCuoInfoCom 数据,并进行后续调用,处理成功删除时间戳中间表-TimeCuoInfoCom 数据 |
| | | int n = 0; //行号 |
| | | sendERPTaskInfoList.ForEach(a => |
| | | { |
| | | n = n + 1; |
| | | #region 计算单据编号 |
| | | string FBillNO = ""; |
| | | int num = 0; |
| | | string S_NUM = ""; |
| | | string time = DateTime.Now.ToString("yyMMdd"); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc time:{time}"); |
| | | var midInfo = db.Queryable<ADDMid>().Where(b => b.time == time).First(); |
| | | if (midInfo != null) |
| | | { |
| | | midInfo.num = midInfo.num + 1; |
| | | num = midInfo.num; |
| | | db.Updateable(midInfo).UpdateColumns(b => new { b.num }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | num = 1; |
| | | midInfo = new ADDMid |
| | | { |
| | | S_NUM = S_NUM + "0"; |
| | | } |
| | | time = DateTime.Now.ToString("yyMMdd"), |
| | | num = 1 |
| | | }; |
| | | db.Insertable(midInfo).ExecuteCommand(); |
| | | } |
| | | |
| | | FBillNO = "ARKD" + DateTime.Now.ToString("yyMMdd") + S_NUM + num.ToString(); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc: {FBillNO}"); |
| | | #endregion |
| | | CMMLog.Info($"SendERPTaskCompleteFunc num: {num}"); |
| | | for (int i = num.ToString().Length + 1; i <= 4; i++) |
| | | { |
| | | S_NUM = S_NUM + "0"; |
| | | } |
| | | |
| | | FBillNO = "ARKD" + DateTime.Now.ToString("yyMMdd") + S_NUM + num.ToString(); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc: {FBillNO}"); |
| | | #endregion |
| | | |
| | | if (!string.IsNullOrEmpty(a.orderCode) && a.orderCode.Length >= 2 && a.orderCode.Substring(0, 2) == "MO") |
| | | { |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:INSERT INTO T_JY_PRDINSTOCKOP (FBillNO,FSourceBillNo,FEntryID,FSEQ,FQTY,FStockNumber,FLot,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','{a.orderCode}','{a.FEntryID}','1','{a.totalNeedWeight}','CK020','{a.lotCode}','{a.productTime}','{a.invalidationTime}','{a.taskNo}','1','0')"); |
| | | string sql = $"INSERT INTO T_JY_PRDINSTOCKOP (FBillNO,FSourceBillNo,FEntryID,FSEQ,FQTY,FStockNumber,FLot,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','{a.orderCode}','{a.FEntryID}','1','{a.totalNeedWeight}','CK020','{a.lotCode}','{a.productTime}','{a.invalidationTime}','{a.taskNo}','1','0')"; |
| | | if(new SqlHelper<object>().ExecuteSql(sql, false)) |
| | | if (new SqlHelper<object>().ExecuteSql(sql, false)) |
| | | { |
| | | #region 反馈信息给mes 对接文档 https://365.kdocs.cn/l/cltzoEaznLco |
| | | bool result = sendMes(a, true); |
| | |
| | | #endregion |
| | | |
| | | //插入成功 清除中间表 |
| | | MongoDBSingleton.Instance.Remove<SendErpTaskInfoTable>(Query.EQ("_id", a._id), "SendErpTaskInfoTable", RemoveFlags.None); |
| | | MongoDBSingleton.Instance.Remove<TimeCuoInfoCom>(Query.EQ("timeStamp", int.Parse(a.timeStamp)), "TimeCuoInfoCom", RemoveFlags.None); |
| | | MongoDBSingleton.Instance.Remove<SendErpTaskInfoTableBak>(Query.EQ("_id", a._id), "SendErpTaskInfoTableBak", RemoveFlags.None); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:INSERT INTO T_JY_SPInStockADD (FBillNO,FStockOrgNumber,FPrdOrgNumber,FSeq,FMaterialNumber,Flot,FInStockType,FMustQty,FStockNumber,FWorkShopNumber,FStockStatus,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','02','02','{n}','{a.materiCode}','{a.lotCode}','1','{a.totalWeight}','CK020','BM000161','1','{a.productTime}','{a.invalidationTime}','{a.taskNo}',{sendERPTaskInfoList.Count},'0')"); |
| | | string sql = $"INSERT INTO T_JY_SPInStockADD (FBillNO,FStockOrgNumber,FPrdOrgNumber,FSeq,FMaterialNumber,Flot,FInStockType,FMustQty,FStockNumber,FWorkShopNumber,FStockStatus,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','02','02','{n}','{a.materiCode}','{a.lotCode}','1','{a.totalWeight}','CK020','BM000161','1','{a.productTime}','{a.invalidationTime}','{a.taskNo}',{sendERPTaskInfoList.Count},'0')"; |
| | | if (new SqlHelper<object>().ExecuteSql(sql, false)) |
| | | { |
| | | //插入成功 清除中间表 |
| | | MongoDBSingleton.Instance.Remove<SendErpTaskInfoTableBak>(Query.EQ("_id", a._id), "SendErpTaskInfoTableBak", RemoveFlags.None); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | catch(Exception ex) |
| | | catch (Exception ex) |
| | | { |
| | | CMMLog.Info("SendERPTaskCompleteFunc err:"+ex.Message); |
| | | CMMLog.Info("SendERPTaskCompleteFunc err:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | internal static bool senderpTaskDG(string startBit, string trayCode) |
| | | { |
| | | try |
| | | { |
| | | //通过托盘号调用wms接口获取物料信息 |
| | | |
| | | CMMLog.Info("SendErpTaskInfoTableDG 表查询 开始:" + startBit); |
| | | var url = hao.WebUrl + "GlmTrayItemSet"; |
| | | var erpInfo = MongoDBSingleton.Instance.FindOne<SendErpTaskInfoTableDG>(Query.EQ("Bit", startBit), "SendErpTaskInfoTableDG"); |
| | | if (erpInfo == null) |
| | | { |
| | | //string fEntryId = time.FEntryID_1.ToString() + (time.FEntryID_2 == 0 ? "" : ";" + time.FEntryID_2.ToString()) + (time.FEntryID_3 == 0 ? "" : ";" + time.FEntryID_3.ToString()) + (time.FEntryID_4 == 0 ? "" : ";" + time.FEntryID_4.ToString()); |
| | | string materiCode = ""; |
| | | string lotCode = ""; |
| | | int totalWeight = 0; |
| | | string productTime = ""; |
| | | |
| | | //根据托盘号获取入库物料信息 |
| | | CJWareNum model = new CJWareNum |
| | | { |
| | | TrayCode = trayCode |
| | | }; |
| | | |
| | | string msgData = JsonConvert.SerializeObject(model); |
| | | |
| | | var feedback = helper.WebPost(url, msgData).Replace(@"\", "").Trim(); |
| | | CMMLog.Info($"SendErpTaskInfoTableDG:【调用wms获取物料信息】:接收数据:" + feedback); |
| | | if (!string.IsNullOrEmpty(feedback)) |
| | | { |
| | | var wmsResponse = JsonConvert.DeserializeObject<LKInfoResModel>(feedback); |
| | | if (wmsResponse.Success == true) |
| | | { |
| | | materiCode = wmsResponse.Data.CN_S_ITEM_CODE; |
| | | lotCode = wmsResponse.Data.CN_S_LOT_NO; |
| | | totalWeight = (int)wmsResponse.Data.CN_F_QUANTITY * wmsResponse.Data.CN_N_CONUT; |
| | | productTime = wmsResponse.Data.CN_T_PRODUCTION_S; |
| | | } |
| | | } |
| | | |
| | | CMMLog.Info("SendErpTaskInfoTableDG表 1"); |
| | | if (!string.IsNullOrEmpty(materiCode) && !string.IsNullOrEmpty(lotCode) && totalWeight != 0 && !string.IsNullOrEmpty(productTime)) |
| | | { |
| | | MongoDBSingleton.Instance.Insert<SendErpTaskInfoTableDG>(new SendErpTaskInfoTableDG |
| | | { |
| | | Bit = startBit, |
| | | materiCode = materiCode, |
| | | lotCode = lotCode, |
| | | totalWeight = totalWeight, |
| | | productTime = Convert.ToDateTime(productTime).AddHours(8), |
| | | invalidationTime = Convert.ToDateTime(productTime).AddHours(8).AddDays(365), |
| | | dateTime = DateTime.Now.AddHours(8), |
| | | //变更注释 |
| | | mesSucess = "0" |
| | | }, "SendErpTaskInfoTableDG"); |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | CMMLog.Info($"SendErpTaskInfoTableDG:获取数据错误,materiCode:{materiCode},lotCode:{lotCode},totalWeight:{totalWeight},productTime:{productTime}"); |
| | | } |
| | | |
| | | } |
| | | |
| | | CMMLog.Info("插入SendErpTaskInfoTableDG表 结束"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | CMMLog.Info("插入SendErpTaskInfoTableDG表 err:" + ex.Message); |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | internal static void SendERPTaskCompleteFuncDG() |
| | | { |
| | | |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var sendERPTaskInfoList = MongoDBSingleton.Instance.Find<SendErpTaskInfoTableDG>(Query.And(Query.EQ("isFinish", "Y"), Query.EQ("mesSucess", "0")), "SendErpTaskInfoTableDG"); |
| | | if (sendERPTaskInfoList.Count > 0) |
| | | { |
| | | var timeInfo = sendERPTaskInfoList.OrderBy(a => a.dateTime).First(); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:{sendERPTaskInfoList.Count}"); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:{timeInfo.dateTime.AddHours(1) < DateTime.Now}"); |
| | | if (sendERPTaskInfoList.Count == 5 || timeInfo.dateTime.AddHours(1) < DateTime.Now) |
| | | { |
| | | // 先根据任务批次号字段获取时间戳中间表-TimeCuoInfoCom 数据,并进行后续调用,处理成功删除时间戳中间表-TimeCuoInfoCom 数据 |
| | | |
| | | int n = 0; //行号 |
| | | sendERPTaskInfoList.ForEach(a => |
| | | { |
| | | n = n + 1; |
| | | #region 计算单据编号 |
| | | string FBillNO = ""; |
| | | int num = 0; |
| | | string S_NUM = ""; |
| | | string time = DateTime.Now.ToString("yyMMdd"); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc time:{time}"); |
| | | var midInfo = db.Queryable<ADDMid>().Where(b => b.time == time).First(); |
| | | if (midInfo != null) |
| | | { |
| | | midInfo.num = midInfo.num + 1; |
| | | num = midInfo.num; |
| | | db.Updateable(midInfo).UpdateColumns(b => new { b.num }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | num = 1; |
| | | midInfo = new ADDMid |
| | | { |
| | | time = DateTime.Now.ToString("yyMMdd"), |
| | | num = 1 |
| | | }; |
| | | db.Insertable(midInfo).ExecuteCommand(); |
| | | } |
| | | |
| | | CMMLog.Info($"SendERPTaskCompleteFunc num: {num}"); |
| | | for (int i = num.ToString().Length + 1; i <= 4; i++) |
| | | { |
| | | S_NUM = S_NUM + "0"; |
| | | } |
| | | |
| | | FBillNO = "ARKD" + DateTime.Now.ToString("yyMMdd") + S_NUM + num.ToString(); |
| | | CMMLog.Info($"SendERPTaskCompleteFunc: {FBillNO}"); |
| | | #endregion |
| | | |
| | | CMMLog.Info($"SendERPTaskCompleteFunc:INSERT INTO T_JY_SPInStockADD (FBillNO,FStockOrgNumber,FPrdOrgNumber,FSeq,FMaterialNumber,Flot,FInStockType,FMustQty,FStockNumber,FWorkShopNumber,FStockStatus,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','02','02','{n}','{a.materiCode}','{a.lotCode}','1','{a.totalWeight}','CK020','G0200400','1','{a.productTime}','{a.invalidationTime}','{a.taskNo}',{sendERPTaskInfoList.Count},'0')"); |
| | | string sql = $"INSERT INTO T_JY_SPInStockADD (FBillNO,FStockOrgNumber,FPrdOrgNumber,FSeq,FMaterialNumber,Flot,FInStockType,FMustQty,FStockNumber,FWorkShopNumber,FStockStatus,FProduceDate ,FExpiryDate,FTaskNumber,FCountEntry,FOpStatus) VALUES ('{FBillNO}','02','02','{n}','{a.materiCode}','{a.lotCode}','1','{a.totalWeight}','CK020','G0200400','1','{a.productTime}','{a.invalidationTime}','{a.taskNo}',{sendERPTaskInfoList.Count},'0')"; |
| | | if (new SqlHelper<object>().ExecuteSql(sql, false)) |
| | | { |
| | | //插入成功 清除中间表 |
| | | MongoDBSingleton.Instance.Remove<SendErpTaskInfoTableDG>(Query.EQ("_id", a._id), "SendErpTaskInfoTableDG", RemoveFlags.None); |
| | | } |
| | | else |
| | | { |
| | | //插入失败,将数据插入新表,人工手动处理,重新插入 |
| | | //MongoDBSingleton.Instance.Insert<SendErpTaskInfoTableBak>(new SendErpTaskInfoTableBak |
| | | //{ |
| | | // orderCode = a.orderCode, |
| | | // FEntryID = a.FEntryID, |
| | | // totalNeedWeight = a.totalNeedWeight, |
| | | // lotCode = a.lotCode, |
| | | // productTime = a.productTime, |
| | | // invalidationTime = a.invalidationTime, |
| | | // taskNo = a.taskNo |
| | | //}, "SendErpTaskInfoTableBak"); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | CMMLog.Info("SendERPTaskCompleteFunc err:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | public class packageInfoModel |
| | | { |
| | | public ObjectId _id { get; set; } |