using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.Windows.Forms; using logtxtWrite; using wcftest.orm; using wcftest.EnumDefine; using Newtonsoft.Json; using wcftest.sapEntity; using System.Threading; using wcftest.sendToSap; using wcftest.sapEntity; using wcftest.sql; using wcftest.BussinessExtension.Handle; using wcftest.BussinessExtension.Common; using wcftest.Model; using wcftest.BussinessExtension; using wcftest.Model.Sys; using wcftest.EnumDefine.Sys; using wcftest.Model.Input; using wcftest.Model.Output; using wcftest.orm_test; using wcftest.Utils.AuthFacotry; using System.Linq.Expressions; namespace wcftest.wcf { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“apitest”。 public class apitest : Iapitest { /// 线程锁防止并发 /// 线程锁防止并发 /// public static System.Threading.Mutex single = new Mutex(); //SapWcfService/ //sendToSap.SapWcfServiceClient sendSap = new sendToSap.SapWcfServiceClient(); wcfApi.ControlCenterWcfServiceClient wcsApi = new wcfApi.ControlCenterWcfServiceClient(); // 获取设备信息 Form1 form = Program.form1ObjPublic; //sendSap.WmsReverser();撤销 #region 给WMS接口 /// 呼叫托盘 /// 呼叫托盘 /// /// 托盘类型号(1是小托盘,2是大托盘) public void callContainer(int containerTypeId) { if (containerTypeId < 1 || containerTypeId > 2) { logtxt.txtWrite("类名:taskApi/函数名:callContainer拆盘任务参数超出范围/ 托盘类型:" + containerTypeId.ToString(), 2); } try { //写入任务列表Task_Queue using (dbModel mod = new dbModel()) { Task_Queue CallContainerTaks = new Task_Queue(); CallContainerTaks.TaskType = ((int)TaskTypeEnum.入库拆盘).ToString();//任务类型 CallContainerTaks.OrderNumber = 0;//任务权重 CallContainerTaks.TaskStatus = "未下发";//任务状态 CallContainerTaks.PlateType = containerTypeId == 1 ? ((int)Sys_containerType.小托盘).ToString() : ((int)Sys_containerType.大托盘).ToString();//托盘类型 CallContainerTaks.CreateDate = DateTime.Now; CallContainerTaks.Creator = "系统"; CallContainerTaks.UserProduct_Id = 1007;//账套id 老谢bug //垃圾值都赋值0 转到autoTask()里有说明 CallContainerTaks.FromPositionName = "0"; CallContainerTaks.ToPositionName = "0"; CallContainerTaks.DoCount = 0;//库区 CallContainerTaks.Direction = "0";//托盘高度 mod.Task_Queue.Add(CallContainerTaks); mod.SaveChanges(); logtxt.txtWrite("类名:taskApi,函数名:callContainer 拆盘任务发送成功 containerType:" + containerTypeId.ToString(), 0); } } catch (Exception ex) { logtxt.txtWrite("类名:taskApi/函数名:callContainer拆盘任务异常/ 托盘类型:" + containerTypeId.ToString() + logtxt.oneRow(ex.ToString()), 2); } } /// 分拣确认 /// 分拣确认 /// /// 托盘编号 /// 出库物料list /// /// public string sortingConfirm(string PlateCode, string Products, string percentage) { resultMsg msgs = new resultMsg(); //msgs.msg = "分拣失败!"; //msgs.result = false; //msgs.status = 400; //return JsonConvert.SerializeObject(msgs); try { logtxt.txtWrite("类名:apitest/函数名:sortingConfirm收到分拣数据 托盘号PlateCode:" + PlateCode + ",出库物料列表Products:" + Products + ",百分比percentage:" + percentage , 2); string plateCode = PlateCode; //记录 List products = JsonConvert.DeserializeObject>(Products); //验证百分比 【EditBy shaocx,2022-10-15】 if (Convert.ToInt32(percentage) <= 0) { msgs.msg = "占用空间不能小于0"; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } //验证输入的分拣数量 【EditBy shaocx,2022-06-08】 if (products != null && products.Count > 0) { foreach (var item in products) { if (item.finishedQuantity < 0) { msgs.msg = "分拣数量不能小于0"; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } } } else { msgs.msg = "没有分拣数据"; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } var _creator = products[0].creator; #region 数据验证 【EditBy shaocx,2022-07-18】 /* //判断分拣数据是否有重复的 List validateList = new List(); foreach (var item in products) { var str = item.product_Id.ToString() + "-" + item.finishedQuantity.ToString() + "-" + item.trankNumber; if (validateList.Contains(str)) {//验证不通过 msgs.msg = "分拣数据有重复,重复物料号:" + item.product_Id + ",数量:" + item.finishedQuantity + ",跟踪号:" + item.trankNumber; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } else { validateList.Add(str); } } //*/ #endregion List moveMaterials = new List();//移库实体集合 List resultSap_GIMaterialEntity_List = new List();//出库实体集合 using (dbModel mod = new dbModel()) { List checkSortion = mod.vvBase_ProductPosition.Where(x => x.PlateCode.Trim() == PlateCode.Trim() && x.ContainerNo == "1").ToList(); if (checkSortion.Count < 1) { logtxt.txtWrite("类名:Form1/函数名:sortingConfirm重复分拣" + Products, 0); msgs.msg = "此托盘没有分拣数据"; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } logtxt.txtWrite("类名:Form1/函数名:sortingConfirm分拣收到信息是 " + Products, 0); bool isEmpty = true;//记录库存是否出完变量 Task_Queue backTask = mod.Task_Queue.Where(x => x.PlateCode == plateCode).OrderByDescending(x => x.CreateDate).FirstOrDefault(); //if (backTask==null||Convert.ToInt32( backTask.TaskType)!=1) //{ // return; //} //查询当前托盘中所有的库存 List currentProductPositionList = mod.Base_ProductPosition.Where(x => x.PlateCode == plateCode).ToList(); for (int i = 0; i < products.Count; i++) { int productId = products[i].product_Id; string tracknumber = products[i].trankNumber; //OrignStorage && x.Product_Id ==(long) ) decimal quantity = (decimal)products[i].finishedQuantity;//分拣数量 //因为这里是根据托盘号查询的,因此库存一定是在立体库中,不是在收货暂存区中 【EditBy shaocx,2022-03-08】 //Base_ProductPosition ProductPosition = mod.Base_ProductPosition.Where(x => x.PlateCode == plateCode && x.Product_Id == productId //&& x.ProductStorage >= quantity && x.ExtendField04 == tracknumber).FirstOrDefault(); Base_ProductPosition ProductPosition = currentProductPositionList.Where(x => x.PlateCode == plateCode && x.Product_Id == productId && x.ProductStorage >= quantity && x.ExtendField04 == tracknumber).OrderBy(x => x.ProductStorage).FirstOrDefault();//增加对数量的升序排序 【EditBy shaocx,2022-07-18】 if (ProductPosition == null || ProductPosition.ProductPosition_Id == 0) { msgs.msg = "此托盘没有找到库存数据,产品id:" + productId + ",数量:" + quantity + ",跟踪号:" + tracknumber; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } //Base_ProductPosition ProductPosition = mod.Base_ProductPosition.Where(x => x.ProductPosition_Id == l_ProductPosition.ProductPosition_Id).FirstOrDefault(); //int orderId= (int) backTask.Bill_Id;//出库单ID // Sale_Order saleOrder=mod.Sale_Order.Find(orderId);//根据id 找到出库单 Sale_Order checkMoveType = mod.Sale_Order.FirstOrDefault(x => x.Order_Id == backTask.Bill_Id); if (checkMoveType == null) { logtxt.txtWrite("类名:Form1/函数名:sortingConfirm分拣异常/托盘号 " + PlateCode + "找不到出库单", 2); msgs.msg = "找不到出库单,是否已删除?"; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } #region 写入出库记录 //OutInStockTask addOutTask = new OutInStockTask(); //addOutTask.taskName = "出库任务"; //addOutTask.orderCode = checkMoveType.OrderCode; //addOutTask.trackNumber = tracknumber; //addOutTask.materialNumber = ProductPosition.ProductCode; //addOutTask.materialName = ProductPosition.ProductName; //addOutTask.unit = ProductPosition.ExtendField05; //addOutTask.quantity = -products[i].finishedQuantity;//注意:出库任务记录的数量是负数![EditBy shaocx,2022-03-07] //addOutTask.creatDate = DateTime.Now; ////增加字段 【EditBy shaocx,2022-03-06】 //addOutTask.PositionName = ProductPosition.PositionName; //decimal cghw_ProductStorage = 0; //decimal zcq__ProductStorage = 0; //BussinessExtension.BussinessExtension.GetCurrentProductStorage(mod, addOutTask.materialNumber, out cghw_ProductStorage, out zcq__ProductStorage); //addOutTask.CGHW_ProductStorage = cghw_ProductStorage; //addOutTask.ZCG_ProductStorage = zcq__ProductStorage; //mod.OutInStockTask.Add(addOutTask);//增加出库记录 OutInStockTaskHandler.AddOutInStockTask(ProductPosition.PlateCode, mod, OutInStockTaskName.出库任务, checkMoveType.OrderCode, tracknumber, ProductPosition.ProductCode, ProductPosition.ProductName, ProductPosition.SmallUnit, -products[i].finishedQuantity,//注意:出库任务记录的数量是负数![EditBy shaocx,2022-03-07] ProductPosition.PositionName, "分拣确认,库存出库", products[i].creator); #endregion Sale_OrderList checkMoveTypeList = mod.Sale_OrderList.FirstOrDefault(x => x.Order_Id == checkMoveType.Order_Id && x.ProductCode == ProductPosition.ProductCode); #region Sap出库确认明细 GIMaterialEntity newSap = new GIMaterialEntity(); if (checkMoveTypeList != null) { //如果是手动出库 () 生产订单为空/销售订单为空/移动类型=201 if (checkMoveType.OrderType == "手动出库") { #region 手动出库 //判断移动类型不等于空 if (checkMoveTypeList.ExtendField01 != null) { string moveType = ConvertMoveType(checkMoveTypeList.ExtendField01);//移动类型 string trackNumber = ProductPosition.ExtendField04 == null ? "" : ProductPosition.ExtendField04;//跟踪号 string materialCode = ProductPosition.ProductCode.Trim();//产品编号 if (moveType != "311") { #region 非311 newSap.WorkOrder = checkMoveTypeList.StoreOrderId + "#0#0";//生产订单 //如果库存数据没有跟踪号261不加E特殊类型符号 if (string.IsNullOrEmpty(trackNumber)) { newSap.MoveType = moveType;//移动类型 } else { newSap.MoveType = moveType + "E";//移动类型 } //如果生产订单为空 //if (string.IsNullOrEmpty(checkMoveTypeList.StoreOrderId)) //{ newSap.SalesOrder = checkMoveTypeList.PackageName;//销售订单 newSap.SalesOrderItem = checkMoveTypeList.NumberOfGiftBags;// //} newSap.Plant = "3TG1"; newSap.MaterialCode = materialCode; newSap.StorageLocation = "G021"; newSap.Quantity = products[i].finishedQuantity; resultSap_GIMaterialEntity_List.Add(newSap); #endregion } else { #region 311立库到平库 #region sap发送数据 MovMaterialEntity moveMaterial = new MovMaterialEntity(); //有跟踪号 移动类型要加E 加E就要天销售单号和销售项号 if (!string.IsNullOrEmpty(trackNumber))//ProductCode poInfoChild.ExtendField07 = item.SalesOrder;//销售单号 poInfoChild.SpecAlias = item.SalesOrderItem;//销售单项号 { moveType += "E"; moveMaterial.SalesOrder = checkMoveTypeList.PackageName;//销售订单 moveMaterial.SalesOrderItem = checkMoveTypeList.NumberOfGiftBags;// } logtxt.txtWrite("发送的移动类型是" + moveType + "跟踪号:" + trackNumber, 0);//收到记录一条日志 moveMaterial.MoveType = moveType; moveMaterial.Plant = "3TG1"; moveMaterial.MaterialCode = materialCode; moveMaterial.FromStorageLocation = "G021"; moveMaterial.ToStorageLocation = checkMoveType.GiftMessage;//转入仓 moveMaterial.Quantity = products[i].finishedQuantity; moveMaterials.Add(moveMaterial); #endregion } #endregion } #endregion } else {//按单出库 #region 出库任务 newSap.WorkOrder = backTask.BillCode + "#" + checkMoveType.StoreName + "#" + checkMoveTypeList.ExtendField10; //判断有没有跟踪号 if (string.IsNullOrEmpty(ProductPosition.ExtendField04)) { newSap.MoveType = ProductPosition.Remark; } else { string trackingNumber = ProductPosition.ExtendField04;//跟踪号 //通过跟踪号查销售单号 和销售项号 Purchase_OrderList sale_number = mod.Purchase_OrderList.FirstOrDefault(x => x.ExtendField04 == trackingNumber); if (sale_number != null) { newSap.SalesOrder = sale_number.ExtendField07;//销售订单号 newSap.SalesOrderItem = sale_number.SpecAlias;//销售项号 } else { logtxt.txtWrite("类名:Form1/函数名:sortingConfirm分拣确认,通过跟踪号在po里查不到销售单号 跟踪号是:" + trackingNumber + "分拣托盘号:" + PlateCode + 2); } newSap.MoveType = ProductPosition.Remark + "E";//移动类型 } #endregion newSap.Plant = "3TG1"; newSap.MaterialCode = ProductPosition.ProductCode.Trim();//产品编号 newSap.StorageLocation = "G021"; newSap.Quantity = products[i].finishedQuantity; resultSap_GIMaterialEntity_List.Add(newSap); } } #endregion #region 库存扣减 if (products[i].finishedQuantity == ProductPosition.ProductStorage) { //如果出库数量等于库存就删了这条库存 mod.Base_ProductPosition.Remove(ProductPosition); currentProductPositionList.Remove(ProductPosition);//注意:要清除此数据,不加会导致库存扣减错误! 【EditBy shaocx,2022-07-18】 //前面已经记录了出入库记录了,这里就不需要记录了 【EditBy shaocx,2022-03-07】 } else if (products[i].finishedQuantity < ProductPosition.ProductStorage) { //小于库存就改数量 isEmpty = false; ProductPosition.ProductStorage = ProductPosition.ProductStorage - products[i].finishedQuantity; //前面已经记录了出入库记录了,这里就不需要记录了 【EditBy shaocx,2022-03-07】 ProductPosition.ExtendField02 = "0";//出库数量 ProductPosition.ExtendField03 = "0";//=1是允许分拣 // ProductPosition.ContainerNo = "0";//解除锁定 } else {//增加 重复参数校验 [EditBy shaocx,2022-07-18] logtxt.txtWrite("类名:Form1/函数名:sortingConfirm此托盘本次分拣物料" + products[i].product_Id + ",分拣数量" + products[i].finishedQuantity + "超过实际库存量" + ProductPosition.ProductStorage + ",请重新扫码托盘,重新分拣!", 0); msgs.msg = "此托盘本次分拣物料" + products[i].product_Id + ",分拣数量" + products[i].finishedQuantity + "超过实际库存量" + ProductPosition.ProductStorage + ",请重新扫码托盘,重新分拣!"; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } #endregion } //再次复位状态 List ProductPositionCheck = mod.Base_ProductPosition.Where(x => x.PlateCode == plateCode).ToList(); if (ProductPositionCheck.Count > 0) { foreach (var ProductItem in ProductPositionCheck) { ProductItem.ExtendField03 = "0";//不需要分拣状态 ProductItem.Remark = "";//移动类型 } } //修复有时候出现托盘上全部分拣,但是wms会创建余料回库的任务,但实际库存都没有的错误 【EditBy shaocx,2022-08-08】 //if (ProductPositionCheck.Count > products.Count) //{ // isEmpty = false; //} if (currentProductPositionList.Count == 0) { isEmpty = true;//已空盘 } else { isEmpty = false;//未空盘 } #region 判断是否要去叠盘 string position = backTask.DoCount + "-" + backTask.FromPositionName; Base_Position unlock = mod.Base_Position.FirstOrDefault(x => x.PositionName == position); if (isEmpty)//数量出完就去叠盘 { string toPlace = ""; if (backTask.PlateType == "1") { toPlace = "1018"; } else { toPlace = "1017"; } //判断是否叠盘机满了,【EditBy shaocx,2022-03-08】 Base_Equipment fpMachine = null; var isFull = Base_EquipmentHandler.FoldingPlateMachine_IsFull(mod, Convert.ToInt32(backTask.PlateType), ref fpMachine); if (isFull) { var errMsg = fpMachine.DeviceName + "目前数量已满,数量为" + Convert.ToInt32(fpMachine.SurplusQuantity) + ",请稍等再操作!"; logtxt.txtWrite("类名:Form1/函数名:sortingConfirm" + errMsg, 0); msgs.msg = errMsg; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } if (fpMachine != null) { Base_EquipmentHandler.FoldingPlateMachine_UpdateCurQuantityAddOne(mod, fpMachine);//增加数量1 } Task_Queue addTask = new Task_Queue(); addTask.BillCode = "回库";//来源单号 addTask.TaskType = ((int)TaskTypeEnum.出库叠盘).ToString(); addTask.PlateType = backTask.PlateType;//器具种类-大托盘小托盘 addTask.PlateCode = plateCode;//母托盘编号 addTask.Bill_Id = 1111;// 单据id addTask.OrderNumber = 0;//任务执行优先级 addTask.TaskStatus = "未下发";//任务状态 addTask.FromPositionName = backTask.ToPositionName;//起始地址 addTask.ToPositionName = toPlace;//目标地址 addTask.Direction = "1";//出库不需要托盘高度 addTask.DoCount = backTask.DoCount;//库区 addTask.CreateDate = DateTime.Now; addTask.Creator = _creator; addTask.UserProduct_Id = 1007;//账套id 老谢bug // addTask.IsDoing = (int)item.OrderList_Id;//记录出库明细表ID,出库确认用(只有出库用) mod.Task_Queue.Add(addTask); if (unlock != null) { //unlock.IsFreeze = 0; unlock.IsFreeze = (int)IsFreezeEnum.无货; unlock.IsLocked = 0; unlock.Remark = "分拣任务确认-解锁库位!"; unlock.PositionLength = 0; } else { logtxt.txtWrite("类名:Form1/函数名:sortingConfirm分拣叠盘,解锁库位失败,找不到库位: " + position, 2); msgs.msg = "解锁库位失败,找不到库位: " + position; msgs.result = false; msgs.status = 400; return JsonConvert.SerializeObject(msgs); } } else { //数量没出完就去回库 Task_Queue addTask = new Task_Queue(); addTask.BillCode = "回库";//来源单号 addTask.TaskType = ((int)TaskTypeEnum.余料回库).ToString(); addTask.PlateType = backTask.PlateType;//器具种类-大托盘小托盘 addTask.PlateCode = plateCode;//母托盘编号 addTask.Bill_Id = 1111;// 单据id addTask.OrderNumber = 0;//任务执行优先级 addTask.TaskStatus = "未下发";//任务状态 addTask.FromPositionName = backTask.ToPositionName;//起始地址 addTask.ToPositionName = backTask.FromPositionName;//目标地址 addTask.DoCount = backTask.DoCount;//库区 int areaNo = (int)backTask.DoCount; string height = ""; if (areaNo == 1) { height = "2"; } else { height = "4"; } addTask.Direction = height;//出库不需要托盘高度 addTask.CreateDate = DateTime.Now; addTask.Creator = _creator; addTask.UserProduct_Id = 1007;//账套id 老谢bug // addTask.IsDoing = (int)item.OrderList_Id;//记录出库明细表ID,出库确认用(只有出库用) mod.Task_Queue.Add(addTask); if (unlock != null) { unlock.PositionLength = Convert.ToInt32(percentage.Trim()); } } #endregion //注释:由下面的SaveChanges一处执行 【Editby shaocx,2022-03-12】 //int saveok = mod.SaveChanges(); //#region 保存数据判断 //if (saveok < 1) //{ // saveok = mod.SaveChanges(); //} //if (saveok < 1) //{ // msgs.msg = "分拣失败-保存数据未成功"; // msgs.result = false; // msgs.status = 400; //} //else //{ // msgs.msg = "分拣成功"; // msgs.result = true; // msgs.status = 200; //} //#endregion if (resultSap_GIMaterialEntity_List.Count > 0)//SAP出库确认 { //注意:这里要改为循环处理,因为如果混合再一起推送,会出问题 【EditBy shaocx,2022-10-11】 foreach (var resultSap_GIMaterialEntity in resultSap_GIMaterialEntity_List) { SapSendInfo sapGi = new SapSendInfo(); //注意!!!:这里的SendSapData还是序列化的这个list List newList = new List(); newList.Add(resultSap_GIMaterialEntity); sapGi.SendSapData = JsonConvert.SerializeObject(newList);//数据转string 保存 //sapGi.moveType = 1;//出库标志 sapGi.moveType = (int)MoveTypeForSapSend.出库;//出库标志 sapGi.creatTime = DateTime.Now; sapGi.sendCount = 0;//发送次数 sapGi.voucherCode = sapGi.RetMsg = "";//sap凭证 sapGi.isFinish = 0;//是否完成 BussinessExtension.BussinessExtension.SetSapSendInfoByGIMaterialEntity(mod, sapGi, resultSap_GIMaterialEntity);//配置对象 [EditBy shaocx,2022-01-30] mod.SapSendInfo.Add(sapGi); } } if (moveMaterials.Count > 0)//发送311立库到平库 { //替换下面的代码 【EditBy shaocx,2022-09-22】 SapSendInfoHandler.AddSapSendInfoForMove(mod, false, moveMaterials, "", ""); /* SapSendInfo sapGi = new SapSendInfo(); sapGi.SendSapData = JsonConvert.SerializeObject(moveMaterials);//数据转string 保存 //sapGi.moveType = 2;//移库标志 sapGi.moveType = (int)MoveTypeForSapSend.移库;//移库标志 sapGi.creatTime = DateTime.Now; sapGi.sendCount = 0; sapGi.voucherCode = ""; sapGi.isFinish = 0; BussinessExtension.BussinessExtension.SetSapSendInfoByMovMaterialEntity(mod, sapGi, moveMaterials);//配置对象 [EditBy shaocx,2022-01-30] mod.SapSendInfo.Add(sapGi); //*/ } OperationLogHelper.AddOperationLogEntity(mod, _creator, "分拣托盘" + PlateCode, OperateTypeEnum.分拣, ""); int dd = mod.SaveChanges(); if (dd > 0) { logtxt.txtWrite("数据保存成功", 1); msgs.msg = "分拣成功"; msgs.result = true; msgs.status = 200; } else { logtxt.txtWrite("数据保存失败,数目为" + dd, 1); msgs.msg = "分拣失败-保存数据未成功"; msgs.result = false; msgs.status = 400; } } } catch (Exception ex) { //logtxt.txtWrite("类名:Form1/函数名:sortingConfirm分拣异常/托盘号 " + PlateCode + "异常信息:" + ex.StackTrace.ToString(), 2); logtxt.txtWrite("类名:Form1/函数名:sortingConfirm分拣异常/托盘号 " + PlateCode + "异常信息:" + JsonConvert.SerializeObject(ex), 2); msgs.msg = "分拣失败-参数异常"; msgs.result = false; msgs.status = 400; } return JsonConvert.SerializeObject(msgs); } /// 把前端移动类型描述转换成sap格式, /// 把前端移动类型描述转换成sap格式 /// /// 移动类型描述 /// 返回SAP格式 public string ConvertMoveType(string stringMove) { switch (stringMove.Trim()) { case "发料到成本中心201": return "201"; case "发料到生产订单261": return "261"; case "发料到销售订单231": return "231"; case "暂存区发料到生产订单261": return "261"; case "311立库到平库": return "311"; default: return ""; } } #region 收货 /// 按单 收货和退货操作 /// 按单 收货和退货操作 /// /// /// public string receiptConvert(string receipt) { string msg = ""; bool saveSueeccd = false; int numInfo = 0; List grEntitys = new List(); receipiEntity results = JsonConvert.DeserializeObject(receipt); var _qrCode_Guid = results.qrCode_guid; bool isQrCode = false;//是否是二维码收货 if (!string.IsNullOrEmpty(results.qrCode_guid)) {//表示有 收货二维码 isQrCode = true; if (results.dataList.Count > 1) { var data23 = new { result = saveSueeccd, msg = "使用二维码收货,只能收货一个项号的物料" }; msg = JsonConvert.SerializeObject(data23); return msg; } if (!string.IsNullOrEmpty(results.plateCode)) { var errMsg = ""; var res = PlateCodeHandler.ValiatePlateIsAllowZP(results.plateCode, ref errMsg); if (!res) { var data23 = new { result = false, msg = errMsg }; msg = JsonConvert.SerializeObject(data23); return msg; } } } else { if (!string.IsNullOrEmpty(results.plateCode)) { var data23 = new { result = saveSueeccd, msg = "使用一维码收货,不支持收货时码盘" }; msg = JsonConvert.SerializeObject(data23); return msg; } } ////模拟写死,还得改回来 哦 //var data22 = new //{ // result = saveSueeccd, // msg = "我错了" //}; //msg = JsonConvert.SerializeObject(data22); //return msg; try { using (dbModel mod = new dbModel()) { //需要校验下 该库存是否存在 【Editby shaocx,2023-11-5】 if (!string.IsNullOrEmpty(results.qrCode_guid)) {//表示有 收货二维码 var isExistObj = mod.Base_ProductPosition.Where(x => x.qrCode_guid == results.qrCode_guid).FirstOrDefault(); if (isExistObj != null) { if (!string.IsNullOrEmpty(results.plateCode)) {//说明是 单独组盘操作 //更新码盘数据 isExistObj.PlateCode = results.plateCode; int result = mod.SaveChanges(); if (result < 1) { msg = "保存失败"; } else { msg = "执行成功,完成" + numInfo + "条信息"; saveSueeccd = true; } var data99 = new { result = saveSueeccd, msg = msg }; msg = JsonConvert.SerializeObject(data99); return msg; } else {//说明是重复收货 var data99 = new { result = saveSueeccd, msg = "该二维码已经收货了" }; msg = JsonConvert.SerializeObject(data99); return msg; } } } if (results.dataList.Count > 0) { string poCode = results.poCode.Trim(); string moveType = results.moveType.Trim();//具体详看枚举 MoveTypeForReceiptConvertEnum Purchase_Order purchaseOrder = mod.Purchase_Order.FirstOrDefault(x => x.PoCode == poCode); List PurchaseList = mod.Purchase_OrderList.Where(x => x.ExtendField10 == poCode).ToList(); if (PurchaseList.Count > 0 && purchaseOrder != null) { int isFinish = 0; foreach (var item in results.dataList) { if (item.quantity <= 0) {//增加验证 【EditBy shaocx,2022-10-11】 saveSueeccd = false; msg = "数量不能小于等于0"; var data2 = new { result = saveSueeccd, msg }; msg = JsonConvert.SerializeObject(data2); return msg; } Purchase_OrderList poItem = PurchaseList.FirstOrDefault(x => x.OrderList_Id == item.orderList_Id); if (poItem == null) { continue; } GRMaterialEntity grEntity = new GRMaterialEntity(); #region 发送sap grEntity.Plant = "3TG1"; grEntity.StorageLocation = item.productBarCode;//存储位置 grEntity.PoNumber = poItem.ExtendField10;//采购单号 grEntity.PoItem = poItem.ItemNumber;//采购项号 grEntity.MaterialCode = poItem.ProductCode; grEntity.MoveType = results.moveType; grEntity.Quantity = item.quantity;// *item.unitConvert / item.unEnterQuantity;//未打印数量 #endregion //if (moveType == "101") if (moveType == ((int)MoveTypeForReceiptConvertEnum.收货).ToString()) {//101是指 收货,具体详看枚举 MoveTypeForReceiptConvertEnum decimal totalQty = (decimal)poItem.BigQty * (1 + (decimal)poItem.Overcharges / 100);//采购数量乘以容差 decimal receivedQty = poItem.BigEnterQuantity == null ? 0 : (decimal)poItem.BigEnterQuantity;//已收数量 decimal nowQty = receivedQty + (decimal)item.quantity;//已收数量加上本次收的数量 if (totalQty >= nowQty)//验证有没有超收 { if (nowQty >= (decimal)poItem.BigQty) { isFinish++; } numInfo++; #region 收货 poItem.BigEnterQuantity = receivedQty + item.quantity; Base_ProductPosition addPP = new Base_ProductPosition(); //where PositionName = '收货暂存区' and ProductStorage > 0 and PartStatus ='1' //ProductPosition.PositionName = "收货暂存区"; addPP.PositionName = SysGlole.PositionName_SHZCQ; addPP.CreateDate = DateTime.Now; addPP.ModifyDate = DateTime.Now; //注意:这里处理支持二维码的方式 【Editby shaocx,2023-11-5】 addPP.qrCode_guid = _qrCode_Guid; addPP.IsQrCode = isQrCode; addPP.BarCode = addPP.ExtendField06 = _qrCode_Guid; //库存数量 addPP.ProductStorage = item.quantity * item.unitConvert / item.unEnterQuantity;//未打印数量 addPP.OrignStorage = item.quantity * item.unitConvert / item.unEnterQuantity;//收货数量 ProductStorage //增加数量校验 if (addPP.ProductStorage <= 0) { var data99 = new { result = false, msg = "库存数不能等于0" }; msg = JsonConvert.SerializeObject(data99); return msg; } //修改可维护自动打印的参数 【Editby shaocx,2022-06-13】 //ProductPosition.PartStatus = "1";//0表示不需要自动打印,1表示需要自动打印 //// 0不打印 1:入库口打印机 2:出库口打印机 //ProductPosition.PartStatus = results.isAutoPrint ? "1" : "0";//0表示不需要自动打印,1表示需要自动打印 addPP.PartStatus = results.printFlag.ToString();//0表示不需要自动打印,1表示需要自动打印 if (!string.IsNullOrEmpty(results.qrCode_guid)) {//表示有 收货二维码 addPP.PartStatus = "1";//写死为 入库口打印机 } //处理库存中的托盘号问题 【Editby shaocx,2024-09-08】 if (!string.IsNullOrEmpty(results.plateCode)) { addPP.PlateCode = results.plateCode; } addPP.Product_Id = Convert.ToInt32(poItem.Product_Id); addPP.ProductCode = poItem.ProductCode; addPP.ProductName = poItem.ProductName; addPP.InStorageDate = DateTime.Now; addPP.PoCode = poItem.ExtendField10;//采购单号 addPP.ItemNumber = poItem.ItemNumber;//采购项号 addPP.ExtendField04 = poItem.ExtendField04;//跟踪号 addPP.SaleCode = poItem.ExtendField07;//销售单号 addPP.ExtendField08 = poItem.SpecAlias;//销售项号 addPP.OriginPlace = "1";//打印次数 addPP.LimitDate = item.limitDate;//限用日期 purchaseOrder providerShortName providerShortName addPP.ProviderShortName = purchaseOrder.ProviderShortName;//供应商名称 addPP.PlatUser_Id = 1;//必填垃圾信息 addPP.UserProduct_Id = 1007;//必填垃圾信息 addPP.ClassName = "采购入库"; addPP.Class_Id = 0; addPP.MainID = 0; addPP.DetailID = 0; addPP.Storage_Id = 87; addPP.StorageName = "立体库"; addPP.ProductModel = poItem.ProductName; addPP.ProductModel = "0"; addPP.ConsignorCode = "GX30"; addPP.ConsignorName = "广州西门子"; addPP.Consignor_Id = 30; addPP.ExtendField10 = poItem.OrderList_Id.ToString();//这里记录 表purchase_orderlist的主键OrderList_Id值 【EditBy shaocx,2022-10-14】 addPP.SmallUnit = poItem.BigUnit; mod.Base_ProductPosition.Add(addPP); //增加出入库记录 【EditBy shaocx,2022-03-07】 OutInStockTaskHandler.AddOutInStockTask22(results.creator, mod, OutInStockTaskName.收货任务, addPP.ProductStorage, addPP, "按单收货-收货,收货暂存区,增加库存", addPP.PoCode); //按单收货 grEntitys.Add(grEntity);//可以收货再发生sap #endregion } else { msg = "收货超出数量"; saveSueeccd = false; } } else {//退货 //据我观察,必须是收货后的才能进行退后,未收货的不允许退哦 【EditBy shaocx,2022-10-14】 if (poItem.BigEnterQuantity - item.quantity >= 0) { poItem.BigEnterQuantity = poItem.BigEnterQuantity - item.quantity; grEntitys.Add(grEntity); numInfo++; var query_OrderList_Id = poItem.OrderList_Id.ToString(); //退货支持二维码 【EditBy shaocx,2024-07-58】 var _list = mod.Base_ProductPosition.Where(x => x.PositionName == SysGlole.PositionName_SHZCQ && x.ExtendField10 != null && x.ExtendField10 == query_OrderList_Id).ToList(); if (isQrCode) { _list = _list.Where(x => x.qrCode_guid == results.qrCode_guid).ToList(); } Base_ProductPosition curStore = _list.FirstOrDefault(); if (curStore == null) { //报错返回 saveSueeccd = false; msg = "明细[采购项号:" + poItem.ItemNumber + ",物料:" + poItem.ProductName + "]没有被收货,因此不允许被退货"; var data2 = new { result = saveSueeccd, msg }; msg = JsonConvert.SerializeObject(data2); return msg; } //扣减暂存区数量 if (curStore.ProductStorage < item.quantity) { //报错返回 saveSueeccd = false; msg = "明细[采购项号:" + poItem.ItemNumber + ",物料:" + poItem.ProductName + "]收货数量" + curStore.ProductStorage + "不能小于退货数量" + item.quantity + ",因此不允许被退货"; var data2 = new { result = saveSueeccd, msg }; msg = JsonConvert.SerializeObject(data2); return msg; } curStore.ProductStorage = curStore.ProductStorage - item.quantity; string remark = ""; if (curStore.ProductStorage == 0) { //表示全部退货了,库存删除 mod.Base_ProductPosition.Remove(curStore); remark = "按单退货-退货,收货暂存区,全部退货,清空暂存区库存"; } else { remark = "按单退货-退货,收货暂存区,减少库存"; } //增加出入库记录 【EditBy shaocx,2022-10-14】 OutInStockTaskHandler.AddOutInStockTask22(results.creator, mod, OutInStockTaskName.退货任务, item.quantity, curStore, remark, results.creator); //*/ } else { msg = "退货库存不足"; saveSueeccd = false; } } } if (isFinish == results.dataList.Count) { purchaseOrder.StatusText = "完全交货"; } else { purchaseOrder.StatusText = "部分交货"; } } if (grEntitys.Count > 0) { string sendSapGr = JsonConvert.SerializeObject(grEntitys); var resultStr = receiptConfirm(sendSapGr); ResultEntity fe = JsonConvert.DeserializeObject(resultStr); if (fe.result == false) { msg = fe.msg; saveSueeccd = false; } } if (string.IsNullOrEmpty(msg)) { OperationLogHelper.AddOperationLogEntity(mod, results.creator, "采购订单" + results.poCode.ToString() + "收货", OperateTypeEnum.按单收货, ""); int result = mod.SaveChanges(); #region 检查是否保存成功 for (int i = 0; i < 10; i++) { if (result < 1) { result = mod.SaveChanges(); if (i == 9 && result < 1) { msg = "保存失败"; } } else { msg = "执行成功,完成" + numInfo + "条信息"; saveSueeccd = true; break; } } #endregion } } } } catch (Exception ex) { msg = "执行失败"; } var data = new { result = saveSueeccd, msg }; msg = JsonConvert.SerializeObject(data); return msg; } /// 调用方:在界面【物料标签打印】,选中并点击按钮“打印物料标签”,此时调用接口 api/storage/check/updateData,这时候要扣减收货暂存区的数量,调用wcftest的 subtractQty方法。 /// 标签打印和码盘上架扣减收货数量 /// /// 扣减list对象 /// 扣减成功返回"成功",其余返回失败信息 public bool subtractQty(string subInfo) { if (single.WaitOne())//增加线程锁防止并发 { try { logtxt.txtWrite("类名:Form1/函数名:subtractQty按单和码盘扣数量/ " + subInfo, 1); List products = JsonConvert.DeserializeObject>(subInfo); if (products.Count > 0) { for (int i = 0; i < products.Count; i++) { decimal subNumbeu = products[i].number;//需要扣减的数量 using (dbModel mod = new dbModel()) { //查询收货物料 List checkStroage = new List(); string pocodu = products[i].poCode; string productcode = products[i].productCode; string trackting = ""; if (products[i].trackting != null) { if (products[i].trackting != "") { trackting = products[i].trackting; checkStroage = mod.Base_ProductPosition.Where(x => x.ExtendField04 == trackting && x.ProductCode == productcode && x.PositionName == SysGlole.PositionName_SHZCQ //增加收货暂存区的筛选 【Editby shaocx,2022-03-08】 ).ToList(); } } if (checkStroage.Count == 0) { if (products[i].saleCode != null) { string SaleCode = products[i].saleCode; checkStroage = mod.Base_ProductPosition.Where(x => x.SaleCode == SaleCode && x.ProductCode == productcode && x.PositionName == SysGlole.PositionName_SHZCQ //增加收货暂存区的筛选 【Editby shaocx,2022-03-08】 ).ToList(); } } if (checkStroage.Count == 0) { checkStroage = mod.Base_ProductPosition.Where(x => x.ProductCode == productcode && x.PositionName == SysGlole.PositionName_SHZCQ //增加收货暂存区的筛选 【Editby shaocx,2022-03-08】 ).ToList(); } #region 检查参数 if (checkStroage.Count == 0) { // result = "没有这个物料"; continue; } decimal sunStroage = (decimal)checkStroage.Sum(x => x.ProductStorage);//库存总数 //检查要扣的数量比库里数量多的话就返回错误 if (sunStroage < subNumbeu) { //result = "缺料了要修改入库数量!"; continue; } #endregion #region 找到所有未打印数量大于0的收货记录 var logMsg = ""; foreach (var item in checkStroage) { decimal stroageQty = (decimal)item.ProductStorage; if (stroageQty >= subNumbeu) { decimal? oldQty = item.ProductStorage; decimal? changeQty = subNumbeu; item.ProductStorage = stroageQty - subNumbeu; //增加出入库记录 【EditBy shaocx,2022-03-07】 logMsg = "1标签打印和码盘上架扣减收货数量,原数量:" + oldQty + ",扣减数量" + changeQty; OutInStockTaskHandler.AddOutInStockTask22(item.Creator, mod, OutInStockTaskName.出库任务, changeQty, item, logMsg, pocodu); OperationLogHelper.AddOperationLogEntity(mod, item.Creator, logMsg, OperateTypeEnum.标签打印, ""); mod.SaveChanges(); // result = "成功"; break; } else { item.ProductStorage = 0; subNumbeu -= stroageQty; //增加出入库记录 【EditBy shaocx,2022-03-07】 logMsg = "2标签打印和码盘上架扣减收货数量,扣为0,原数量:" + stroageQty + ",扣减数量" + stroageQty; OutInStockTaskHandler.AddOutInStockTask22(item.Creator, mod, OutInStockTaskName.出库任务, stroageQty, item, logMsg, pocodu); OperationLogHelper.AddOperationLogEntity(mod, item.Creator, logMsg, OperateTypeEnum.标签打印, ""); } if (subNumbeu == 0) { break; } } #endregion mod.SaveChanges(); } } } else { return false; } } catch (Exception ex) { //result = "数据异常:";// +logtxt.oneRow(ex.ToString()); logtxt.txtWrite("类名:Form1/函数名:subtractQty按单和码盘扣除异常/ " + subInfo, 2); return false; } finally { single.ReleaseMutex(); }//一轮结束 } return true; //return ; } #endregion #region 组盘 public string bindContiner(string receipt) { string msg = ""; bool saveSueeccd = false; int numInfo = 0; bindContinerEntity results = JsonConvert.DeserializeObject(receipt); if (results.dataList == null || results.dataList.Count == 0) { var data23 = new { result = false, msg = "没有要处理的数据" }; msg = JsonConvert.SerializeObject(data23); return msg; } if (!string.IsNullOrEmpty(results.plateCode)) { var errMsg = ""; var res = PlateCodeHandler.ValiatePlateIsAllowZP(results.plateCode, ref errMsg); if (!res) { var data23 = new { result = false, msg = errMsg }; msg = JsonConvert.SerializeObject(data23); return msg; } } else { if (results.isUnbind == false) { var data23 = new { result = saveSueeccd, msg = "托盘号不能为空" }; msg = JsonConvert.SerializeObject(data23); return msg; } } ////模拟写死,还得改回来 哦 //var data22 = new //{ // result = saveSueeccd, // msg = "我错了" //}; //msg = JsonConvert.SerializeObject(data22); //return msg; try { using (dbModel mod = new dbModel()) { foreach (var item in results.dataList) { var isExistObj = mod.Base_ProductPosition.Where(x => x.ExtendField06 == item.ExtendField06).ToList(); if (isExistObj != null && isExistObj.Count > 0) { foreach (var item2 in isExistObj) { if (results.isUnbind) { //更新码盘数据 if (item2.PlateCode == "") { var data23 = new { result = false, msg = "标签条码'" + item.ExtendField06 + "'重复扫码解绑" }; msg = JsonConvert.SerializeObject(data23); return msg; } item2.PlateCode = ""; } else { //更新码盘数据 if (item2.PlateCode == results.plateCode) { var data23 = new { result = false, msg = "标签条码'" + item.ExtendField06 + "'重复扫码码盘" }; msg = JsonConvert.SerializeObject(data23); return msg; } item2.PlateCode = results.plateCode; } numInfo++; } } else { var data23 = new { result = false, msg = "没有找到标签条码'" + item.ExtendField06 + "'的库存" }; msg = JsonConvert.SerializeObject(data23); return msg; } } int result = mod.SaveChanges(); if (result <= 0) { msg = "保存失败"; } else { msg = "执行成功,完成" + numInfo + "条信息"; saveSueeccd = true; } var data99 = new { result = saveSueeccd, msg = msg }; msg = JsonConvert.SerializeObject(data99); return msg; } } catch (Exception ex) { msg = "执行失败:" + ex.Message; } var data = new { result = saveSueeccd, msg }; msg = JsonConvert.SerializeObject(data); return msg; } /// /// 通用验证数据 /// /// /// public string validateDataCommon(string receipt) { string msg = ""; bool saveSueeccd = false; validateDataEntity results = JsonConvert.DeserializeObject(receipt); if (results == null) { var data23 = new { result = false, msg = "没有要处理的数据" }; msg = JsonConvert.SerializeObject(data23); return msg; } if (results.flag == 1) { foreach (var item in results.dataList) { if (string.IsNullOrEmpty(item.plateCode)) { var data23 = new { result = saveSueeccd, msg = "托盘号不能为空" }; msg = JsonConvert.SerializeObject(data23); return msg; } if (string.IsNullOrEmpty(item.ExtendField06)) { var data23 = new { result = saveSueeccd, msg = "标签条码不能为空" }; msg = JsonConvert.SerializeObject(data23); return msg; } } } ////模拟写死,还得改回来 哦 //var data22 = new //{ // result = saveSueeccd, // msg = "我错了" //}; //msg = JsonConvert.SerializeObject(data22); //return msg; try { using (dbModel mod = new dbModel()) { msg = ""; if (results.flag == 1) { foreach (var item in results.dataList) { var isExistObj = mod.Base_ProductPosition.Where(x => x.ExtendField06 == item.ExtendField06).ToList(); if (isExistObj != null && isExistObj.Count > 0) { foreach (var item22 in isExistObj) { if (!string.IsNullOrEmpty(item22.PlateCode) && item22.PlateCode != item.plateCode) { msg += "物料" + item.productName + ",标签条码" + item.ExtendField06 + "已经绑定到另一个托盘'" + item22.PlateCode + "'上了;"; } } } } } if (msg != "") { var data23 = new { result = false, msg = msg + ",重新绑定到新托盘'" + results.dataList.First().plateCode + "'将会解除与原托盘的绑定,是否要继续操作?" }; msg = JsonConvert.SerializeObject(data23); return msg; } else { msg = "执行成功"; saveSueeccd = true; } } } catch (Exception ex) { msg = "执行失败:" + ex.Message; } var data = new { result = saveSueeccd, msg }; msg = JsonConvert.SerializeObject(data); return msg; } #endregion /// 获取库存盘点列表 /// 获取库存盘点列表 /// /// /// public string takeStock(string takes) { try { stockSearchEntity take = JsonConvert.DeserializeObject(takes); string StockWhere = ""; //根据货位名称/采购单号/托盘号/物料名称/物料编号模糊查找 if (!string.IsNullOrEmpty(take.search.materialCode)) { StockWhere = StockWhere + " and MateralCode like '%" + take.search.materialCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(take.search.materialName)) { StockWhere = StockWhere + " and MateralName like '%" + take.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(take.search.saleCode)) { StockWhere = StockWhere + " and ProcureCode like '%" + take.search.saleCode.Trim() + "%'"; } string StockWhere_All = StockWhere, StockWhere_OnlySap = StockWhere, StockWhere_OnlyStock = StockWhere; if (take.positionTypeValue > 1) { //string isOrAnd = StockWhere == "" ? " or " : " and "; switch (take.positionTypeValue) { case 2: StockWhere = StockWhere + "and StockQuantity > 0 and SapQuantity > 0"; break; case 3: StockWhere = StockWhere + "and SapQuantity = 0"; break; case 4: StockWhere = StockWhere + "and StockQuantity = 0 "; break; } } //获取盘点数据 msgss msg = new msgss(); using (dbModel mod = new dbModel()) { //获取盘点数据 var baseSql = "select * from [dbo].[" + "TakeStock" + "] where ID > 1 "; string sql = baseSql + StockWhere; List takeStockSummary = mod.Database.SqlQuery("select * from [dbo].[" + "TakeStock" + "] where ID = 1").ToList(); List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { var allList = takeStockSummary.Concat(takeStock.ToList()).ToList(); if (take.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = allList; } else {//不加载全部,就过滤分页信息 StockWhere_All = StockWhere_All + "and StockQuantity > 0 and SapQuantity > 0"; StockWhere_OnlyStock = StockWhere_OnlyStock + "and SapQuantity = 0"; StockWhere_OnlySap = StockWhere_OnlySap + "and StockQuantity = 0 "; StockWhere_All = baseSql + StockWhere_All; StockWhere_OnlyStock = baseSql + StockWhere_OnlyStock; StockWhere_OnlySap = baseSql + StockWhere_OnlySap; GetSummaryTitle(mod, StockWhere_All, StockWhere_OnlyStock, StockWhere_OnlySap, allList); //构造数据 msg.allDate = new List(); TakeStock one = new TakeStock(); one.MateralName = allList[0].MateralName; msg.allDate.Add(one); msg.status = 200; msg.total = takeStock.Count; //假如每页数量 大于盘点数据 if (take.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = take.queryInfo.pagesize; int b = take.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msgss msg = new msgss(); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// /// 获取盘点数据的汇总字符串 [EditBy shaocx,2022-01-23] /// /// /// /// /// /// /// private void GetSummaryTitle(dbModel mod, string StockWhere_All, string StockWhere_OnlyStock, string StockWhere_OnlySap, List allTakeStock) { var takeStock_All = mod.Database.SqlQuery(StockWhere_All).ToList(); var takeStock_OnlyStock = mod.Database.SqlQuery(StockWhere_OnlyStock).ToList(); var takeStock_OnlySap = mod.Database.SqlQuery(StockWhere_OnlySap).ToList(); var msg = string.Format("数量差异数据:{0}条, 仅立库数据:{1}条, 仅SAP数据:{2}条。", takeStock_All == null ? 0 : takeStock_All.Count(), takeStock_OnlyStock == null ? 0 : takeStock_OnlyStock.Count(), takeStock_OnlySap == null ? 0 : takeStock_OnlySap.Count() ); allTakeStock[0].MateralName = msg; } /// 出入库任务列表 /// 出入库任务列表 /// /// jison参数 /// public string outInTaskList(string pages) { msgss msg = new msgss(); msg.status = 400; msg.total = 1; msg.date = null; try { stockSearchEntity page = JsonConvert.DeserializeObject(pages); string StockWhere = " id>0"; //根据日期筛选 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = StockWhere + "and creatDate > '" + page.datatime[0].ToString() + "' and creatDate < '" + page.datatime[1].ToString() + "'"; } } //根据货位名称/采购单号/托盘号/物料名称/物料编号模糊查找 if (!string.IsNullOrEmpty(page.search.creator)) { StockWhere = StockWhere + " and creator like '%" + page.search.creator.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialName)) { StockWhere = StockWhere + " and materialName like '%" + page.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialCode)) { StockWhere = StockWhere + " and materialNumber like '%" + page.search.materialCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.tranckNnmber)) { StockWhere = StockWhere + " and trackNumber like '%" + page.search.tranckNnmber.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.positionName)) {//库位号 StockWhere = StockWhere + " and positionName='" + page.search.positionName + "' "; } if (!string.IsNullOrEmpty(page.search.placeCode)) {//托盘号 [EditBy shaocx,2022-08-09] StockWhere = StockWhere + " and ext1='" + page.search.placeCode + "' "; } if (page.positionTypeValue != 99) { OutInStockTaskName _OutInStockTaskName = (OutInStockTaskName)Enum.Parse(typeof(OutInStockTaskName), page.positionTypeValue.ToString()); //string taskname = page.positionTypeValue == 1 ? "入库任务" : "出库任务"; StockWhere = StockWhere + " and taskName= '" + _OutInStockTaskName.ToString() + "'"; } using (dbModel mod = new dbModel()) { //获取盘点数据 string sql = "select * from [dbo].[" + "OutInStockTask" + "] where " + StockWhere + " order by id desc ";//isFreeze 是否有货 先拿这个字段用 List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; // msg.date = takeStock; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStock.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } } return JsonConvert.SerializeObject(msg); } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg = new msgss(); msg.status = 400; msg.total = 1; msg.date = null; msg.msg = "异常:" + ex.Message; return JsonConvert.SerializeObject(msg); } } /// 空库位统计 /// 空库位统计 /// /// jison参数 /// public string getPositionTotal(string pages) { msgss msg = new msgss(); try { List emtyps = new List();//汇总数据 using (dbModel mod = new dbModel()) { #region 一排空库位统计 BussinessExtension.BussinessExtension.EmptyPositionTongJiForArea1(mod, ref emtyps); #endregion #region 二排小库位空库位统计 //二排小库位 BussinessExtension.BussinessExtension.EmptyPositionTongJiForArea2_Small(mod, ref emtyps); #endregion #region 二排大托盘 BussinessExtension.BussinessExtension.EmptyPositionTongJiForArea2_Big(mod, ref emtyps); #endregion msg.status = 200; msg.date = emtyps; return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("类apitest 方法 getPositionTotal" + ex.Message + ex.StackTrace.ToString(), 2); msg.status = 400; return JsonConvert.SerializeObject(msg); ; } } /// 库存明细-只查询物料 /// 库存明细 /// /// jison参数 /// public string productStockInfo(string pages) { msgss msg = new msgss(); msg.roleDelete = 0; msg.roleModifi = 0; msg.buttonAuth = ""; try { stockSearchEntity page = JsonConvert.DeserializeObject(pages); roleMenu ROLEid = JsonConvert.DeserializeObject(pages); string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = "and InStorageDate > '" + page.datatime[0].ToString() + "' and InStorageDate < '" + page.datatime[1].ToString() + "'"; } } if (!string.IsNullOrEmpty(page.search.BarCode))//条码 { StockWhere = StockWhere + "and BarCode like '%" + page.search.BarCode.Trim() + "%'"; } if (page.QueryBarCodeFlagValue == QueryBarCodeFlagEnum.仅查询二维码) { StockWhere = StockWhere + "and IsQrCode ='1'"; } else if (page.QueryBarCodeFlagValue == QueryBarCodeFlagEnum.仅查询一维码) { StockWhere = StockWhere + "and IsQrCode ='0'"; } if (!string.IsNullOrEmpty(page.search.materialName))//物料名称 { StockWhere = StockWhere + "and ProductName like '%" + page.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialCode))//物料编号 { StockWhere = StockWhere + "and ProductCode like '%" + page.search.materialCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.placeCode))//托盘号 { StockWhere = StockWhere + "and PlateCode like '%" + page.search.placeCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.positionName))//库位名称 { StockWhere = StockWhere + "and PositionName like '%" + page.search.positionName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.purchaseCode))//采购单号 { StockWhere = StockWhere + "and PoCode like '%" + page.search.purchaseCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.tranckNnmber))//跟踪号 { StockWhere = StockWhere + "and ExtendField04 like '%" + page.search.tranckNnmber.Trim() + "%'"; } if (page.positionTypeValue > 0)//货位类型 { StockWhere = StockWhere + " and PositionType=" + page.positionTypeValue.ToString(); } //增加查询条件 if (page.search.IsLocked) { StockWhere = StockWhere + " and IsLocked=1 "; } if (page.search.ContainerNo) { StockWhere = StockWhere + " and ContainerNo='1' "; } if (page.search.IsFreeze) { StockWhere = StockWhere + " and IsFreeze=0 "; } if (page.search.OnlyLocked) { StockWhere = StockWhere + " and IsLocked=1 and ContainerNo <> '1' "; } #endregion using (dbModel mod = new dbModel()) { //使用权限 var authHandle = AuthFactory.GetHandle(mod, ROLEid, Menu_IdEnum.库存明细查询); authHandle.GetButtonAuthStr(ref msg); /* string roleSQL = "SELECT * FROM [YrtWMS_Siemens2].[dbo].[Sys_RoleAuth] WITH(NOLOCK) where Menu_Id=385 and Role_Id=" + ROLEid.role_Id; var roleishave = mod.Database.SqlQuery(roleSQL).ToList(); if (roleishave.Count > 0) { if (roleishave[0].AuthValue.Contains("delete=1")) { msg.roleDelete = 1; msg.buttonAuth += "delete;"; } if (roleishave[0].AuthValue.Contains("updatePosition=1")) { msg.roleModifi = 1; msg.buttonAuth += "updatePosition;"; } } //*/ //获取盘点数据 string sql = "select * from [dbo].[" + "vvBase_ProductPosition_all" + "] WITH(NOLOCK) where ProductStorage>0 " + StockWhere + " order by InStorageDate desc ";//isFreeze 是否有货 先拿这个字段用 List takeStockList = mod.Database.SqlQuery(sql).ToList(); //增加 显示在库天数 [EditBy shaocx,2022-06-08] takeStockList = BussinessExtension.BussinessExtension.CalcInStoreDays(takeStockList.ToList()); //用在库天数过滤数据 [EditBy shaocx,2022-06-08] var errMsg = ""; takeStockList = BussinessExtension.BussinessExtension.FiltervvBase_ProductPositionByInStoreDays(takeStockList, page, ref errMsg); if (!string.IsNullOrEmpty(errMsg)) { } List fenyeRerult = new List(); if (takeStockList.Count > 0) { msg.status = 200; msg.total = takeStockList.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStockList.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStockList.Count) { msg.date = takeStockList; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStockList.Count / a); int d = takeStockList.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStockList[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 修改库存 /// 修改库存 /// /// json修改数据 /// public string updateProductStock(string updateInfo) { try { msgss msg = new msgss(); //msg.status = 400; //msg.total = 1; //msg.date = null; //msg.msg = "参数不能为空"; //return JsonConvert.SerializeObject(msg); updateStock updateData = JsonConvert.DeserializeObject(updateInfo); if (updateData == null) { msg.status = 400; msg.total = 1; msg.date = null; msg.msg = "参数不能为空"; return JsonConvert.SerializeObject(msg); } //验证修改数量 【EditBy shaocx,2022-06-13】 if (updateData.productStorage <= 0) { msg.status = 400; msg.total = 1; msg.date = null; msg.msg = "修改数量不能小于等于0"; return JsonConvert.SerializeObject(msg); } if (updateData.LimitDate == null) { msg.status = 400; msg.total = 1; msg.date = null; msg.msg = "限用日期不能为空"; return JsonConvert.SerializeObject(msg); } updateData.saleCode = updateData.saleCode != null ? updateData.saleCode.Trim() : ""; updateData.saleItem = updateData.saleItem != null ? updateData.saleItem.Trim() : ""; updateData.tracknumber = updateData.tracknumber != null ? updateData.tracknumber.Trim() : ""; updateData.productCode = updateData.productCode != null ? updateData.productCode.Trim() : ""; using (dbModel mod = new dbModel()) { //查找库存 VmaterialInfo materialInfo = mod.VmaterialInfo.FirstOrDefault(x => x.ProductCode == updateData.productCode); Base_ProductPosition updateStock = mod.Base_ProductPosition.Find(updateData.stockId); var logTitle = "物料编号/名称:" + updateStock.ProductCode + "/" + updateStock.ProductName + ",货位名称:" + updateStock.PositionName + ",托盘号:" + updateStock.BillCode + ","; Base_ProductPosition old_updateStock = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(updateStock));//旧库存 VmaterialInfo materialInfoOriginal = mod.VmaterialInfo.FirstOrDefault(x => x.Product_Id == updateStock.Product_Id); if (updateStock != null && materialInfo != null && materialInfoOriginal != null) { #region 修改 string operationInfo = logTitle + ""; if (updateStock.ExtendField04 != updateData.tracknumber) { operationInfo += "跟踪号" + updateStock.ExtendField04 + "改到" + updateData.tracknumber + ","; } if (updateStock.ProductStorage != updateData.productStorage) { operationInfo += "库存量" + updateStock.ProductStorage + "改到" + updateData.productStorage + ","; } if (updateStock.LimitDate != updateData.LimitDate) { operationInfo += "限用日期" + updateStock.LimitDate + "改到" + updateData.LimitDate + ","; } updateStock.ExtendField04 = updateData.tracknumber;//跟踪号 updateStock.ExtendField08 = updateData.saleItem;//销售项号 updateStock.SaleCode = updateData.saleCode;//销售单号 updateStock.Product_Id = Convert.ToInt32(materialInfo.Product_Id);//产品编号 //修改限用日期 [EditBy shaocx,2022-06-14] updateStock.LimitDate = updateData.LimitDate; decimal? old_ProductStorage = updateStock.ProductStorage; //decimal? changeQty = old_ProductStorage - updateData.productStorage; updateStock.ProductStorage = updateData.productStorage;//库存量 //增加出入库记录 【EditBy shaocx,2022-03-07】 OutInStockTaskHandler.AddOutInStockTask22(updateData.userName, mod, OutInStockTaskName.出库任务, old_updateStock.ProductStorage, old_updateStock, "人为修改库存,操作人:" + updateData.userName + "-出库记录," + operationInfo, ""); OutInStockTaskHandler.AddOutInStockTask22(updateData.userName, mod, OutInStockTaskName.入库任务, updateStock.ProductStorage, updateStock, "人为修改库存,操作人:" + updateData.userName + "-入库记录," + operationInfo, ""); int result = mod.SaveChanges(); if (result == 0) { //失败再保存一次 msg.status = 400; msg.total = 1; msg.date = null; } else { //删除成功 msg.status = 200; msg.total = 1; msg.date = null; OperationLogHelper.SaveOperationLog(updateData.userName, "修改库存:" + operationInfo, OperateTypeEnum.修改库存); logtxt.txtWrite("apitest-" + "updateProductStock-修改库存" + operationInfo, 2); } #endregion } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msgss msg = new msgss(); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 库存汇总 /// 库存汇总 /// /// jison参数 /// public string findProductStock(string pages) { msgss msg = new msgss(); try { stockSearchEntity page = JsonConvert.DeserializeObject(pages); string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = StockWhere + " and InStorageDate > '" + page.datatime[0].ToString() + "' and InStorageDate < '" + page.datatime[1].ToString() + "'"; } } //根据货位名称/采购单号/托盘号/物料名称/物料编号模糊查找 if (!string.IsNullOrEmpty(page.search.materialName)) { StockWhere = StockWhere + " and ProductName like '%" + page.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialCode)) { StockWhere = StockWhere + " and ProductCode like '%" + page.search.materialCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.tranckNnmber)) { StockWhere = StockWhere + " and ExtendField04 like '%" + page.search.tranckNnmber.Trim() + "%'"; } if (page.positionTypeValue > 0) { if (page.positionTypeValue == 66) { StockWhere = StockWhere + " and PositionType=1 and IsLocked=0 and ContainerNo=0"; } else { StockWhere = StockWhere + " and PositionType=" + page.positionTypeValue.ToString(); } } #endregion using (dbModel mod = new dbModel()) { //获取盘点数据 string sql = "select * from [dbo].[" + "vvBase_ProductPosition" + "] where ProductStorage>0 " + StockWhere + " order by ProductPosition_Id desc ";//isFreeze 是否有货 先拿这个字段用 List takeStock = mod.Database.SqlQuery(sql).ToList(); List sunStockShou = new List();//汇总后加入到集合 var StockGroup = takeStock.GroupBy(x => new { x.ExtendField04, x.ProductCode }).ToList();//x.SaleCode, x.ExtendField08 之前根据销售单号分组,后因为人工新建的料没有 所以改成跟踪号 foreach (var itemSum in StockGroup) { for (int i = 1; i < itemSum.ToList().Count; i++) { itemSum.ToList()[0].ProductStorage = itemSum.ToList()[0].ProductStorage + itemSum.ToList()[i].ProductStorage; } sunStockShou.Add(itemSum.ToList()[0]); } if (page.alarmValue == 1)//Brand_Id 预警值 { takeStock = sunStockShou.Where(x => x.Brand_Id > 0 && x.ProductStorage <= x.Brand_Id).ToList(); if (string.IsNullOrEmpty(page.search.tranckNnmber)) { #region 添加物料里预警值搜索 //查找物料里设置了预警值的 // List warningValueName = mod.VmaterialInfo.Where(x => x.Brand_Id > 0&&).ToList(); string alarmValueSql = "select * from [dbo].[" + "VmaterialInfo" + "] where Brand_Id>0 "; if (!string.IsNullOrEmpty(page.search.materialName)) { alarmValueSql = alarmValueSql + " and ProductName like '%" + page.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialCode)) { alarmValueSql = alarmValueSql + " and ProductCode like '%" + page.search.materialCode.Trim() + "%'"; } List warningValueName = mod.Database.SqlQuery(alarmValueSql).ToList(); List warningValue = warningValueName.Select(x => x.ProductCode).ToList(); //查找库存里所有物料编号 List warningValueStock = sunStockShou.Select(x => x.ProductCode).ToList(); //设置了预警值库存里为零的 var Toplace = rowResultSpl.Where(x => !toPlaceList.Contains(x.PositionName)).ToList(); List zeroStock = warningValue.Where(x => !warningValueStock.Contains(x)).ToList(); foreach (var item in zeroStock) { VmaterialInfo findZero = warningValueName.FirstOrDefault(x => x.ProductCode == item); if (page.search.positionName != null && page.search.positionName.Trim() != "") { if (findZero.ProductCode.Contains(page.search.positionName.Trim()) || findZero.ProductName.Contains(page.search.positionName.Trim())) { vvBase_ProductPosition zeroProduct = new vvBase_ProductPosition(); zeroProduct.ProductCode = item; zeroProduct.ProductName = findZero.ProductName; zeroProduct.ProductStorage = 0; zeroProduct.SmallUnit = findZero.SmallUnit; zeroProduct.Brand_Id = findZero.Brand_Id; takeStock.Add(zeroProduct); } } else { vvBase_ProductPosition zeroProduct = new vvBase_ProductPosition(); zeroProduct.ProductCode = item; zeroProduct.ProductName = findZero.ProductName; zeroProduct.ProductStorage = 0; zeroProduct.SmallUnit = findZero.SmallUnit; zeroProduct.Brand_Id = findZero.Brand_Id; takeStock.Add(zeroProduct); } } #endregion } } else { takeStock = sunStockShou; } List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStock.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 查询过期库存预警 【EditBy shaocx,2022-08-06】 /// 查询过期库存预警 /// /// jison参数 /// public string findOldLibraryEarlyWarning(string pages) { msgss msg = new msgss(); msg.roleDelete = 0; msg.roleModifi = 0; try { stockSearchEntity page = JsonConvert.DeserializeObject(pages); roleMenu ROLEid = JsonConvert.DeserializeObject(pages); string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = "and InStorageDate > '" + page.datatime[0].ToString() + "' and InStorageDate < '" + page.datatime[1].ToString() + "'"; } } if (page.datatime_limit != null) { if (page.datatime_limit.Length == 2) { StockWhere = "and limitDate > '" + page.datatime_limit[0].ToString() + "' and limitDate < '" + page.datatime_limit[1].ToString() + "'"; } } if (page.search.Expired)//表示已过期 -ly { StockWhere = StockWhere + "and LimitDay > 0"; } if (!page.search.Expired && page.search.Days > 0)//表示即将在30天内过期 { //StockWhere = StockWhere + "and LimitDay >= -30 and LimitDay <= 0"; StockWhere = StockWhere + "and LimitDay > -" + (int)page.search.Days + " and LimitDay <= 0"; } if (!string.IsNullOrEmpty(page.search.BarCode))//条码 { StockWhere = StockWhere + "and BarCode like '%" + page.search.BarCode.Trim() + "%'"; } if (page.QueryBarCodeFlagValue == QueryBarCodeFlagEnum.仅查询二维码) { StockWhere = StockWhere + "and IsQrCode ='1'"; } else if (page.QueryBarCodeFlagValue == QueryBarCodeFlagEnum.仅查询一维码) { StockWhere = StockWhere + "and IsQrCode ='0'"; } if (!string.IsNullOrEmpty(page.search.materialName))//物料名称 { StockWhere = StockWhere + "and ProductName like '%" + page.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialCode))//物料编号 { StockWhere = StockWhere + "and ProductCode like '%" + page.search.materialCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.placeCode))//托盘号 { StockWhere = StockWhere + "and PlateCode like '%" + page.search.placeCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.positionName))//库位名称 { StockWhere = StockWhere + "and PositionName like '%" + page.search.positionName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.purchaseCode))//采购单号 { StockWhere = StockWhere + "and PoCode like '%" + page.search.purchaseCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.tranckNnmber))//跟踪号 { StockWhere = StockWhere + "and ExtendField04 like '%" + page.search.tranckNnmber.Trim() + "%'"; } //增加查询条件 if (page.search.IsLocked) { StockWhere = StockWhere + " and IsLocked=1 "; } if (page.search.ContainerNo) { StockWhere = StockWhere + " and ContainerNo='1' "; } if (page.search.IsFreeze) { StockWhere = StockWhere + " and IsFreeze=0 "; } if (page.search.OnlyLocked) { StockWhere = StockWhere + " and IsLocked=1 and ContainerNo <> '1' "; } if (page.positionTypeValue > 0) { if (page.positionTypeValue == 66) { StockWhere = StockWhere + " and PositionType=1 and IsLocked=0 and ContainerNo=0"; } else { StockWhere = StockWhere + " and PositionType=" + page.positionTypeValue.ToString(); } } #endregion using (dbModel mod = new dbModel()) { //使用权限 var authHandle = AuthFactory.GetHandle(mod, ROLEid, Menu_IdEnum.过期库存预警); authHandle.GetButtonAuthStr(ref msg); ////使用权限 //string roleSQL = "SELECT * FROM [YrtWMS_Siemens2].[dbo].[Sys_RoleAuth] WITH(NOLOCK) where Menu_Id=1571 and Role_Id=" + ROLEid.role_Id; //var roleishave = mod.Database.SqlQuery(roleSQL).ToList(); //if (roleishave.Count > 0) //{ // if (roleishave[0].AuthValue.Contains("delete=1")) // { // msg.roleDelete = 1; // } // if (roleishave[0].AuthValue.Contains("updatePosition=1")) // { // msg.roleModifi = 1; // } //} //获取盘点数据 //排序,按照 过期天数降序排序 string sql = "select * from [dbo].[" + "vOldLibraryEarlyWarning" + "] where ProductStorage>0 " + StockWhere + " order by LimitDay desc ";//isFreeze 是否有货 先拿这个字段用 InStorageDate List takeStockList = mod.Database.SqlQuery(sql).ToList(); ////增加 显示在库天数 [EditBy shaocx,2022-06-08] //takeStockList = BussinessExtension.BussinessExtension.CalcInStoreDays(takeStockList.ToList()); ////用在库天数过滤数据 [EditBy shaocx,2022-06-08] //var errMsg = ""; //takeStockList = BussinessExtension.BussinessExtension.FiltervvBase_ProductPositionByInStoreDays(takeStockList, page, ref errMsg); //if (!string.IsNullOrEmpty(errMsg)) //{ //} List fenyeRerult = new List(); if (takeStockList.Count > 0) { msg.status = 200; msg.total = takeStockList.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStockList.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStockList.Count) { msg.date = takeStockList; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStockList.Count / a); int d = takeStockList.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStockList[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 查询反馈给SAP数据的记录 【EditBy shaocx,2022-02-01】 /// 查询反馈给SAP数据的记录 /// /// jison参数 /// public string findSendToSapData(string pages) { msgss msg = new msgss(); try { sendToSapDataSearchEntity page = JsonConvert.DeserializeObject(pages); string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = StockWhere + " and creatTime > '" + page.datatime[0].ToString() + "' and creatTime < '" + page.datatime[1].ToString() + "'"; } } //根据货位名称/采购单号/托盘号/物料名称/物料编号模糊查找 if (!string.IsNullOrEmpty(page.search.materialCode)) { StockWhere = StockWhere + " and MaterialCode like '%" + page.search.materialCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialName)) { StockWhere = StockWhere + " and MaterialName like '%" + page.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.SalesOrder)) { StockWhere = StockWhere + " and SalesOrder like '%" + page.search.SalesOrder.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.positionTypeValue)) { StockWhere = StockWhere + " and moveType=" + page.positionTypeValue.ToString(); } #endregion using (dbModel mod = new dbModel()) { //获取数据 string sql = "select * from [dbo].[" + "SapSendInfo" + "] where 1=1 " + StockWhere + " order by id desc "; List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStock.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 查询反馈给SAP数据失败的记录 【EditBy shaocx,2022-03-06】 /// 查询反馈给SAP数据失败的记录 /// /// jison参数 /// public string findSendToSapFailData(string pages) { msgss msg = new msgss(); try { sendToSapDataFailSearchEntity page = JsonConvert.DeserializeObject(pages); string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = StockWhere + " and CreateTime > '" + page.datatime[0].ToString() + "' and CreateTime < '" + page.datatime[1].ToString() + "'"; } } //根据货位名称/采购单号/托盘号/物料名称/物料编号模糊查找 if (!string.IsNullOrEmpty(page.search.materialCode)) { StockWhere = StockWhere + " and MaterialCode like '%" + page.search.materialCode.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.materialName)) { StockWhere = StockWhere + " and MaterialName like '%" + page.search.materialName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.SalesOrder)) { StockWhere = StockWhere + " and SalesOrder like '%" + page.search.SalesOrder.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.search.purchaseCode)) {//采购单号 StockWhere = StockWhere + " and pocode = '" + page.search.purchaseCode.Trim() + "'"; } if (!string.IsNullOrEmpty(page.positionTypeValue)) { StockWhere = StockWhere + " and MoveType=" + page.positionTypeValue.ToString(); } #endregion using (dbModel mod = new dbModel()) { //获取数据 string sql = "select * from [dbo].[" + "SapSendFailRecodInfo" + "] where 1=1 " + StockWhere + " order by id desc "; List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStock.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 手动出库查找库存 /// /// /// jison参数 /// public string handfindProductStock(string pages) { msgss msg = new msgss(); try { productStockEntity page = JsonConvert.DeserializeObject(pages); string StockWhere = ""; //根据日期筛选 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = StockWhere + " and InStorageDate > '" + page.datatime[0].ToString() + "' and InStorageDate < '" + page.datatime[1].ToString() + "'"; } } //根据货位名称/采购单号/托盘号/物料名称/物料编号模糊查找 if (page.positionName.Trim() != "") { string[] paparms = page.positionName.Trim().Split('/'); if (paparms[2].Trim() != "") { StockWhere = StockWhere + " and (ProductName like '%" + paparms[2].Trim() + "%' or ProductCode like '%" + paparms[2].Trim() + "%')"; } StockWhere = paparms[1].Trim() == "" ? StockWhere : StockWhere + " and ExtendField04 = '" + paparms[1].Trim() + "'"; StockWhere = paparms[0].Trim() == "" ? StockWhere : StockWhere + " and positionName = '" + paparms[0].Trim() + "'"; // StockWhere = StockWhere + " and (ProductName like '%" + ProductName + "%' or ProductCode like '%" + ProductCode + "%' or ExtendField04='" + trackNumber + "')"; } if (page.positionTypeValue > 0) { if (page.positionTypeValue == 66) { StockWhere = StockWhere + " and PositionType=1 and IsLocked=0 and ContainerNo=0"; } else { StockWhere = StockWhere + " and PositionType=" + page.positionTypeValue.ToString(); } } using (dbModel mod = new dbModel()) { //获取盘点数据 string sql = "select * from [dbo].[" + "vvBase_ProductPosition" + "] where ProductStorage>0 " + StockWhere + " order by ProductPosition_Id desc ";//isFreeze 是否有货 先拿这个字段用 List takeStock = mod.Database.SqlQuery(sql).ToList(); List sunStockShou = new List();//汇总后加入到集合 var StockGroup = takeStock.GroupBy(x => new { x.ExtendField04, x.ProductCode }).ToList();//x.SaleCode, x.ExtendField08 之前根据销售单号分组,后因为人工新建的料没有 所以改成跟踪号 foreach (var itemSum in StockGroup) { for (int i = 1; i < itemSum.ToList().Count; i++) { itemSum.ToList()[0].ProductStorage = itemSum.ToList()[0].ProductStorage + itemSum.ToList()[i].ProductStorage; } sunStockShou.Add(itemSum.ToList()[0]); } if (page.alarmValue == 1)//Brand_Id 预警值 { takeStock = sunStockShou.Where(x => x.Brand_Id > 0 && x.ProductStorage <= x.Brand_Id).ToList(); } else { takeStock = sunStockShou; } List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; // msg.date = takeStock; //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 删除库存 /// 删除库存 /// /// 库存ID /// public string DeleteProductStock(int deleteId, string userName) { try { msgss msg = new msgss(); using (dbModel mod = new dbModel()) { if (deleteId < 1) { msg.status = 400; msg.total = 1; msg.date = null; } else { Base_ProductPosition deleteStock = mod.Base_ProductPosition.Find(deleteId); if (deleteStock != null) { List deleteStocks = mod.Base_ProductPosition.Where(x => x.PositionName == deleteStock.PositionName).ToList(); //只有一条库存的时候不可以删,删了托盘就出不来了 #region 删除操作 if (deleteStocks.Count == 1) { msg.status = 500; msg.total = 1; msg.date = null; } else { mod.Base_ProductPosition.Remove(deleteStock); //增加出入库记录 【EditBy shaocx,2022-03-07】 OutInStockTaskHandler.AddOutInStockTask22(userName, mod, OutInStockTaskName.清库任务, deleteStock.ProductStorage, deleteStock, "操作人:" + userName + ",删除库存,清空库存", ""); int result = mod.SaveChanges(); if (result == 0) { //失败再保存一次 msg.status = 550; msg.total = 1; msg.date = null; } else { //删除成功 msg.status = 200; msg.total = 1; msg.date = null; OperationLogHelper.SaveOperationLog(userName, "库存明细-删除库存:" + deleteStock.PositionName + "物料名称:" + deleteStock.ProductCode, OperateTypeEnum.删除库存); logtxt.txtWrite("apitest-" + "库存明细-删除库存" + deleteStock.PositionName + "物料名称:" + deleteStock.ProductCode, 2); } } #endregion } } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msgss msg = new msgss(); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 移库 /// 移库 /// /// 库位名称 /// public string moveStock(string positionName, string username) { //移库直接返回错误 【EditBy shaocx,2022-09-22】 msgss msg3 = new msgss(); msg3.status = 400; msg3.total = 1; msg3.date = null; return JsonConvert.SerializeObject(msg3); //try //{ // positionName = positionName.Trim(); // msgss msg = new msgss(); // if (string.IsNullOrEmpty(positionName.Trim()))//判断库位是否为空 // { // msg.status = 400; // msg.total = 1; // msg.date = null; // return JsonConvert.SerializeObject(msg); // } // string[] positionname = positionName.Trim().Split('-'); // string sourcePlace = ""; // int areaCode = 0; // if (positionname.Length != 4)//判断是否是库位格式 // { // msg.status = 400; // msg.total = 1; // msg.date = null; // return JsonConvert.SerializeObject(msg); // } // sourcePlace = positionname[1] + "-" + positionname[2] + "-" + positionname[3];//其实地址 // areaCode = Convert.ToInt32(positionname[0]);//库区 // if (areaCode != 1 && areaCode != 2)//重复判断库区格式 // { // msg.status = 400; // msg.total = 1; // msg.date = null; // return JsonConvert.SerializeObject(msg); // } // int layer = Convert.ToInt32(positionname[3]);//当前层 // string toplace = ""; // // Form1 form = new Form1(); // using (dbModel mod = new dbModel()) // { // List deleteStocks = mod.Base_ProductPosition.Where(x => x.PositionName == positionName).ToList(); // //锁定状态不允许移库 // Base_Position deleteStockisLock = mod.Base_Position.FirstOrDefault(x => x.PositionName == positionName && x.IsLocked == 0); // if (deleteStockisLock == null) // { // msg.status = 400; // msg.total = 1; // msg.date = null; // return JsonConvert.SerializeObject(msg); // } // int plateType = 0;//托盘类型 // #region 判断操作 // if (deleteStocks.Count < 1)//判断这个库位有没有信息 // { // msg.status = 400; // msg.total = 1; // msg.date = null; // return JsonConvert.SerializeObject(msg); // } // bool convertSucceed = Int32.TryParse(deleteStocks[0].PlateType, out plateType); // if (!convertSucceed)//盘点托盘类型转换是否成功 // { // msg.status = 400; // msg.total = 1; // msg.date = null; // return JsonConvert.SerializeObject(msg); // } // #endregion // int containterHeight = 0;//托盘高度类型 // #region 判断高度类型 // //2号库小库位 // //1-11 高度4 // //3,5,7,9,10 高度3 // //2,4,6,8, 高度1 // //2号库大托盘 // //1,13,14 高度4 // //2 高度3 // //6,9,12 高度2 // //4,5,7,8,10,11 高度1 // if (areaCode == 1)//1号库区都是库位 // { // if (layer == 1 || layer == 11) // { // containterHeight = 2; // } // else // { // containterHeight = 1; // } // } // else // { // if (plateType == 1)//2号库区小库位 // { // #region 2号库区小库位 // if (layer == 1 || layer == 11) // { // containterHeight = 4; // } // else if (layer == 3 || layer == 5 || layer == 7 || layer == 9 || layer == 10) // { // containterHeight = 3; // } // else // { // containterHeight = 1; // } // #endregion // } // else//2号库区大库位 // { // #region 2号库区大库位 // if (layer == 1 || layer == 13 || layer == 14) // { // containterHeight = 4; // } // else if (layer == 2) // { // containterHeight = 3; // } // else if (layer == 6 || layer == 9 || layer == 12) // { // containterHeight = 2; // } // else // { // containterHeight = 1; // } // #endregion // } // } // #endregion // var findEmptyReason = ""; // bool isInMoreHighPosition = false; // toplace = FindEmptyLocationHandler.findStorage("", true, ref isInMoreHighPosition, ref findEmptyReason, areaCode, Convert.ToInt32(deleteStocks[0].PlateType), containterHeight);//分配库位 // #region 写入任务表 // Task_Queue addTask = new Task_Queue(); // addTask.BillCode = "移库";//来源单号 // addTask.TaskType = ((int)TaskTypeEnum.移库).ToString(); // addTask.PlateType = deleteStocks[0].PlateType;//器具种类-大托盘小托盘 // addTask.PlateCode = deleteStocks[0].PlateCode;//母托盘编号 // addTask.Bill_Id = 0;// 单据id // addTask.OrderNumber = 0;//任务执行优先级 // addTask.TaskStatus = "未下发";//任务状态 // addTask.FromPositionName = sourcePlace;//起始地址 // addTask.ToPositionName = toplace;//目标地址给空返回测量高度后重新写入 // addTask.Direction = areaCode == 1 ? "2" : "4";//出库不需要托盘高度 // addTask.DoCount = areaCode;//库区 // addTask.CreateDate = DateTime.Now; // addTask.UserProduct_Id = 1007;//账套id 老谢bug // mod.Task_Queue.Add(addTask); // #endregion // //添加日志 // SystemHelper.addOperation(username, "移库:从" + positionName + "到" + toplace, "移库"); // int result = mod.SaveChanges(); // #region 失败再保存一次 // if (result == 0)//失败再保存一次 // { // result = mod.SaveChanges(); // if (result == 0) // { // //返回失败 // msg.status = 400; // msg.total = 1; // msg.date = null; // } // else // { // //删除成功 // msg.status = 200; // msg.total = 1; // msg.date = null; // } // } // else // { // //删除成功 // msg.status = 200; // msg.total = 1; // msg.date = null; // } // #endregion // return JsonConvert.SerializeObject(msg); // } //} //catch (Exception ex) //{ // logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); // msgss msg = new msgss(); // msg.status = 400; // msg.total = 1; // msg.date = null; // return JsonConvert.SerializeObject(msg); //} } /// 大屏综合信息 /// 大屏综合信息 /// /// /// /// public string getDeviceInfo(string startTime, string endTime) { string result = ""; try { int[] list1 = totalInfo.list11; string[] list2 = totalInfo.list22; List data = new List(); sendDeviceStatus runStatus = new sendDeviceStatus(); runStatus.name = "设备运行时间"; sendDeviceStatus waitStatus = new sendDeviceStatus(); waitStatus.name = "设备等待时间"; sendDeviceStatus alarmStatus = new sendDeviceStatus(); alarmStatus.name = "设备报警时间"; List xdata = new List(); using (dbModel mod = new dbModel()) { DateTime _startTime = Convert.ToDateTime(startTime); DateTime _endTime = Convert.ToDateTime(endTime); List fiveDayDeviceInfo = mod.deviceGeneralInfo.Where(x => x.createTime >= _startTime && x.createTime <= _endTime).OrderByDescending(x => x.createTime) //.Take(5) .ToList(); if (fiveDayDeviceInfo.Count > 0) { foreach (var item in fiveDayDeviceInfo) { runStatus.xdata.Add(item.deviceRunTime.ToString() == null ? "0" : item.deviceRunTime.ToString()); alarmStatus.xdata.Add(item.deviceAlarmTime.ToString() == null ? "0" : item.deviceAlarmTime.ToString()); //重新计算等待时间 item.deviceWaitTime = 1440 - ((item.deviceRunTime ?? 0M) + (item.deviceAlarmTime ?? 0M)); waitStatus.xdata.Add(item.deviceWaitTime.ToString() == null ? "0" : item.deviceWaitTime.ToString()); xdata.Add(item.createTime.ToString().Split(' ')[0]); } } } data.Add(runStatus); data.Add(waitStatus); //x轴顺序重新排序 【Editby shaocx,2024-12-30】 xdata = xdata.OrderBy(x => x).ToList(); string[] legend = { "p设备运行时间", "p设备等待时间", "p设备异常时间" }; var workpiece = new { data, legend, xdata }; data.Add(alarmStatus); var date = new { list1, list2, workpiece }; result = JsonConvert.SerializeObject(date); return result; } catch (Exception ex) { logtxt.txtWrite("类名:Form1/函数名:writeOutTask出库写入任务异常/ " + ex.Message + "出错行号" + (string)ex.StackTrace, 2); return result; } } /// /// 分页查询 堆垛机运行统计 /// /// /// public string QueryPageDeviceGeneralInfo(string param) { msgss msg = new msgss(); DeviceGeneralInfoInput page = JsonConvert.DeserializeObject(param); try { using (dbModel mod = new dbModel()) { List fiveDayDeviceInfo = null; if (page.datatime == null) { fiveDayDeviceInfo = mod.deviceGeneralInfoForDetail .OrderByDescending(x => x.createTime) .ToList(); } else { DateTime _startTime = Convert.ToDateTime(page.datatime[0]); DateTime _endTime = Convert.ToDateTime(page.datatime[1]); fiveDayDeviceInfo = mod.deviceGeneralInfoForDetail .Where(x => x.createTime >= _startTime && x.createTime <= _endTime) .OrderByDescending(x => x.createTime) .ToList(); } if (fiveDayDeviceInfo.Count > 0) { foreach (var item in fiveDayDeviceInfo) { //重新计算等待时间 item.deviceWaitTime = 1440 - ((item.deviceRunTime ?? 0M) + (item.deviceAlarmTime ?? 0M)); } if (!string.IsNullOrEmpty(page.search.ext1)) { fiveDayDeviceInfo = fiveDayDeviceInfo.Where(x => x.ext1 == page.search.ext1).ToList(); } } List fenyeRerult = new List(); if (fiveDayDeviceInfo.Count > 0) { msg.status = 200; msg.total = fiveDayDeviceInfo.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = fiveDayDeviceInfo.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > fiveDayDeviceInfo.Count) { msg.date = fiveDayDeviceInfo; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)fiveDayDeviceInfo.Count / a); int d = fiveDayDeviceInfo.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(fiveDayDeviceInfo[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// /// 分页查询 PO明细空物料号信息 /// /// /// public string QueryPagePurchaseEmptyMaterialCode(string param) { msgss msg = new msgss(); Purchase_OrderList_EmptyMaterialCodeInput page = JsonConvert.DeserializeObject(param); try { using (dbModel mod = new dbModel()) { List fiveDayDeviceInfo = new List(); Expression> predicate_datatime = x => 1 == 1; if (page.datatime != null) { DateTime _startTime = Convert.ToDateTime(page.datatime[0]); DateTime _endTime = Convert.ToDateTime(page.datatime[1]); predicate_datatime = x => x.CreateTime >= _startTime && x.CreateTime <= _endTime; } Expression> predicate_poCode = x => 1 == 1; if (!string.IsNullOrEmpty(page.search.PoCode)) { predicate_poCode = x => x.PoCode == page.search.PoCode; } Expression> predicate_ItemNumber = x => 1 == 1; if (!string.IsNullOrEmpty(page.search.ItemNumber)) { predicate_poCode = x => x.ItemNumber == page.search.ItemNumber; } Expression> predicate_ProductName = x => 1 == 1; if (!string.IsNullOrEmpty(page.search.ProductName)) { predicate_poCode = x => x.ProductName == page.search.ProductName; } fiveDayDeviceInfo = mod.Purchase_OrderList_EmptyMaterialCode .Where(predicate_datatime) .Where(predicate_poCode) .Where(predicate_ItemNumber) .Where(predicate_ProductName) .ToList(); List fenyeRerult = new List(); if (fiveDayDeviceInfo.Count > 0) { msg.status = 200; msg.total = fiveDayDeviceInfo.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = fiveDayDeviceInfo.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > fiveDayDeviceInfo.Count) { msg.date = fiveDayDeviceInfo; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)fiveDayDeviceInfo.Count / a); int d = fiveDayDeviceInfo.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(fiveDayDeviceInfo[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 2d动画获取设备位置 /// 2d动画获取设备位置 /// /// public int[] getDevicePosition(string param) { try { //form.textBox3.Text= deviceListInfo.rgv1.position.ToString(); //form.textBox4.Text=deviceListInfo.rgv2.position.ToString(); //form.textBox8.Text= deviceListInfo.srm1.position.ToString(); //form.textBox9.Text=deviceListInfo.srm2.position.ToString(); // int rgv1= form.textBox3.Text==""?0:Convert.ToInt32(form.textBox3.Text) int[] datelist = { deviceListInfo.rgv1.position, deviceListInfo.rgv2.position, deviceListInfo.srm1.position, deviceListInfo.srm2.position, totalInfo.list11[0], totalInfo.list11[1] //form.textBox3.Text==""?0:Convert.ToInt32(form.textBox3.Text), //form.textBox4.Text==""?0:Convert.ToInt32(form.textBox4.Text), //form.textBox8.Text==""?0:Convert.ToInt32(form.textBox8.Text), //form.textBox9.Text==""?0:Convert.ToInt32(form.textBox9.Text), //form.textBox10.Text==""?0:Convert.ToInt32(form.textBox10.Text), //form.textBox11.Text==""?0:Convert.ToInt32(form.textBox11.Text) }; return datelist; } catch (Exception ex) { logtxt.txtWrite("类名:Form1/函数名:getDevicePosition动画获取设备位置/ " + ex.Message + "出错行号" + ex.StackTrace.ToString(), 2); int[] datelist = { 0, 0, 0, 0, 0, 0 }; return datelist; } } /// 出库看板信息 /// 出库看板信息 /// /// public string outStockTaskList(string takes) { outStockList outList3 = new outStockList();//3号出口 outList3.title = "3号出口"; outStockList outList2 = new outStockList();//2号出口 outList2.title = "2号出口"; outStockList outList1 = new outStockList();//1号出口 outList1.title = "1号出口"; DateTime nowTime = DateTime.Now; try { using (dbModel mod = new dbModel()) { List outStockTask = mod.Task_Queue.Where(x => x.TaskType == "4" && x.TaskStatus == "已下发").OrderBy(x => x.CreateDate).ToList(); var taskOrderBY = outStockTask.GroupBy(x => x.ToPositionName); foreach (var item in taskOrderBY) { switch (item.ToList()[0].ToPositionName) { case "1008": #region 3号出口 outList3.total = item.ToList().Count(); foreach (var itemList in item.ToList()) { OutDatas outInfo1 = new OutDatas(); string plateCode = itemList.PlateCode; outInfo1.userTrueName = itemList.BillCode;//出库单号 List outQyt = mod.Base_ProductPosition.Where(x => x.PlateCode == plateCode && (x.ContainerNo != "0" || x.ContainerNo != "")).ToList(); var outTime = nowTime - (DateTime)itemList.CreateDate; int outtime = outTime.Days * 24 * 60 + outTime.Hours * 60 + outTime.Minutes; outInfo1.roleName = outtime.ToString(); outInfo1.deptName = outQyt.Count;//一个托盘里出库物料种类数 outList3.tableData.Add(outInfo1); } #endregion break; case "1003": #region 2号出口 outList2.total = item.ToList().Count(); foreach (var itemList in item.ToList()) { OutDatas outInfo1 = new OutDatas(); string plateCode = itemList.PlateCode; outInfo1.userTrueName = itemList.BillCode;//出库单号 List outQyt = mod.Base_ProductPosition.Where(x => x.PlateCode == plateCode && (x.ContainerNo != "0" || x.ContainerNo != "")).ToList(); var outTime = nowTime - (DateTime)itemList.CreateDate; int outtime = outTime.Days * 24 * 60 + outTime.Hours * 60 + outTime.Minutes; outInfo1.roleName = outtime.ToString(); outInfo1.deptName = outQyt.Count;//一个托盘里出库物料种类数 outList2.tableData.Add(outInfo1); } #endregion break; case "1001": #region 1号出口 outList1.total = item.ToList().Count(); foreach (var itemList in item.ToList()) { OutDatas outInfo1 = new OutDatas(); string plateCode = itemList.PlateCode; outInfo1.userTrueName = itemList.BillCode;//出库单号 List outQyt = mod.Base_ProductPosition.Where(x => x.PlateCode == plateCode && (x.ContainerNo != "0" || x.ContainerNo != "")).ToList(); var outTime = nowTime - (DateTime)itemList.CreateDate; int outtime = outTime.Days * 24 * 60 + outTime.Hours * 60 + outTime.Minutes; outInfo1.roleName = outtime.ToString(); outInfo1.deptName = outQyt.Count;//一个托盘里出库物料种类数 outList1.tableData.Add(outInfo1); } #endregion break; } } } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); } var outList = new { outList3, outList2, outList1 }; return JsonConvert.SerializeObject(outList); } /// 入库看板信息 /// 入库看板信息 /// /// /// public string inStockTask(string takes) { List inTaskListInfo = new List(); inTaskDatas bigInStock = new inTaskDatas(); bigInStock.title = "2号入口-大托盘"; inTaskDatas smallInStock = new inTaskDatas(); smallInStock.title = "1号入口-小托盘"; DateTime nowTime = DateTime.Now; try { using (dbModel mod = new dbModel()) { List outStockTask = mod.Task_Queue.Where(x => x.TaskType == "1" && (x.TaskStatus == "已下发" || x.TaskStatus == "下发中")).OrderBy(x => x.CreateDate).ToList(); if (outStockTask.Count > 0) { #region 获取大托盘入库明细 Task_Queue bigTask = outStockTask.FirstOrDefault(x => x.PlateType == "2"); if (bigTask != null) { List inTaskListBig = mod.Purchase_ShelveList.Where(x => x.Shelve_Id == bigTask.Bill_Id).ToList(); if (inTaskListBig.Count > 0) { foreach (var item in inTaskListBig) { inTaskDataList datalist = new inTaskDataList(); datalist.materialCode = item.ProductCode; datalist.materialName = item.ProductName; datalist.quantity = (decimal)item.Quantity; bigInStock.dataList.Add(datalist); } } } #endregion #region 获取小托盘入库明细 Task_Queue smallTask = outStockTask.FirstOrDefault(x => x.PlateType == "1"); if (smallTask != null) { List inTaskListSmall = mod.Purchase_ShelveList.Where(x => x.Shelve_Id == smallTask.Bill_Id).ToList(); if (inTaskListSmall.Count > 0) { foreach (var item in inTaskListSmall) { inTaskDataList datalist = new inTaskDataList(); datalist.materialCode = item.ProductCode; datalist.materialName = item.ProductName; datalist.quantity = (decimal)item.Quantity; smallInStock.dataList.Add(datalist); } } } #endregion #region 获取入库列表 if (outStockTask.Count > 0) { foreach (var item in outStockTask) { List inTaskList = mod.Purchase_ShelveList.Where(x => x.Shelve_Id == item.Bill_Id).ToList(); if (inTaskList.Count > 0) { var EnterTime = nowTime - (DateTime)inTaskList[0].CreateDate; int enterTime = EnterTime.Days * 24 * 60 + EnterTime.Hours * 60 + EnterTime.Minutes; OutDatas addData = new OutDatas(); addData.deptName = inTaskList.Count; addData.roleName = enterTime.ToString(); addData.userTrueName = item.BillCode; inTaskListInfo.Add(addData); } } } #endregion } } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); } var boardlist = new { bigInStock, smallInStock }; var data = new { inTaskListInfo, boardlist }; return JsonConvert.SerializeObject(data); } #region 创建拼盘出库任务 //原先的方法 /* /// 创建拼盘出库任务 /// 创建拼盘出库任务 /// /// 托盘高度 public void madeDish(string containerCode, string creator) { //调试,模拟 throw new Exception("出现异常"); string[] containerNo = containerCode.Trim().Split('-'); if (containerNo.Length != 4) { return; } try { var _PlateCode = ""; //写入任务列表Task_Queue using (dbModel mod = new dbModel()) { //判断是否有闲时移库任务在执行 [EditBy shaocx,2022-09-22] var isExistRuningTask = FreeTimeMoveLocationTaskHandler.IsExistRuningTask(mod); if (isExistRuningTask) { return; } Base_Position Position = mod.Base_Position.FirstOrDefault(x => x.PositionName == containerCode && x.IsLocked == 0); if (Position != null) { List productPositionList = mod.Base_ProductPosition.Where(x => x.PositionName == containerCode).ToList(); if (productPositionList.Count < 1) { logtxt.txtWrite("类名:taskApi,函数名:madeDish Base_ProductPosition组盘出库 找不到库位数据:" + containerCode, 2); return; } _PlateCode = productPositionList.FirstOrDefault().PlateCode; foreach (var itemRemove in productPositionList) { mod.Base_ProductPosition.Remove(itemRemove); //增加出入库记录 【EditBy shaocx,2022-03-07】 OutInStockTaskHandler.AddOutInStockTask22(creator, mod, OutInStockTaskName.清库任务, itemRemove.ProductStorage, itemRemove, "拼盘,清空库存", "", ""); } //Position.IsFreeze = 0; Position.IsFreeze = (int)IsFreezeEnum.无货; Position.IsLocked = 1; Position.Remark = "拼盘-锁定库位!"; Position.PositionType = 0; Position.PositionLength = 0; } else { logtxt.txtWrite("类名:taskApi,函数名:madeDish 组盘出库 Position找不到库位数据或者被锁定:" + containerCode, 2); return; } string sourcePlace = containerNo[1] + "-" + containerNo[2] + "-" + containerNo[3]; int areaCode = Convert.ToInt32(containerNo[0].Trim()); string toPlace = ""; int PlateType = 0; if (areaCode != 1 && areaCode != 2) { return; } if (areaCode == 1) { toPlace = "1021"; PlateType = 1; } else { if (Convert.ToInt32(containerNo[2]) > 1 && Convert.ToInt32(containerNo[2]) < 10) { toPlace = "1021"; PlateType = 1; } else { toPlace = "1026"; PlateType = 2; } } Task_Queue CallContainerTaks = new Task_Queue(); CallContainerTaks.TaskType = ((int)TaskTypeEnum.组盘出库).ToString();//任务类型 CallContainerTaks.OrderNumber = 0;//任务权重 CallContainerTaks.PlateCode = _PlateCode;//托盘号 CallContainerTaks.TaskStatus = "未下发";//任务状态 CallContainerTaks.PlateType = PlateType.ToString();//托盘类型 CallContainerTaks.CreateDate = DateTime.Now; CallContainerTaks.Creator = creator; CallContainerTaks.UserProduct_Id = 1007;//账套id 老谢bug //垃圾值都赋值0 转到autoTask()里有说明 CallContainerTaks.FromPositionName = sourcePlace; CallContainerTaks.ToPositionName = toPlace; CallContainerTaks.DoCount = areaCode;//库区 CallContainerTaks.Direction = "0";//托盘高度 mod.Task_Queue.Add(CallContainerTaks); mod.SaveChanges(); logtxt.txtWrite("类名:taskApi,函数名:madeDish 组盘出库 库位:" + containerCode, 0); } } catch (Exception ex) { logtxt.txtWrite("类名:taskApi/函数名:madeDish组盘出库/ 库位:" + containerCode + logtxt.oneRow(ex.ToString()), 2); } } //*/ /// /// 创建拼盘出库任务 /// /// 库位号 /// 创建人 public string madeDish(string containerCode, string creator) { resultMsg msgs = new resultMsg(); msgs.result = false; msgs.status = 400; //////调试,模拟 //msgs.msg = "我错了咋地!" + containerCode; //return JsonConvert.SerializeObject(msgs); var msg = ""; var isRight = ExtendHelper.ValidateIsRightForPositionName(containerCode, ref msg); if (!isRight) { msgs.msg = msg; return JsonConvert.SerializeObject(msgs); } string[] containerNo = containerCode.Trim().Split('-'); try { var _PlateCode = ""; //写入任务列表Task_Queue using (dbModel mod = new dbModel()) { //判断是否有闲时移库任务在执行 [EditBy shaocx,2022-09-22] var isExistRuningTask = FreeTimeMoveLocationTaskHandler.IsExistRuningTask(mod); if (isExistRuningTask) { msgs.msg = "存在闲时移库任务在执行!"; return JsonConvert.SerializeObject(msgs); } Base_Position position = mod.Base_Position.FirstOrDefault(x => x.PositionName == containerCode && x.IsLocked == 0); if (position != null) { List productPositionList = mod.Base_ProductPosition.Where(x => x.PositionName == containerCode).ToList(); if (productPositionList.Count < 1) { logtxt.txtWrite("类名:taskApi,函数名:madeDish Base_ProductPosition组盘出库 找不到库位数据:" + containerCode, 2); msgs.msg = "根据库位" + containerCode + ",没找到库存"; return JsonConvert.SerializeObject(msgs); } if (position.IsLocked == 1) { logtxt.txtWrite("类名:taskApi,函数名:madeDish Base_ProductPosition组盘出库 库位数据:" + containerCode + ",已经被锁定了,不允许创建拼盘任务", 2); msgs.msg = "根据库位" + containerCode + ",库位已经被锁定"; return JsonConvert.SerializeObject(msgs); } _PlateCode = productPositionList.FirstOrDefault().PlateCode; var doingTaskList = BussinessExtension.BussinessExtension.GetDoingTaskListForPlateCode(mod, _PlateCode); if (doingTaskList != null && doingTaskList.Count > 0) { logtxt.txtWrite("有未结束的任务占用托盘'" + _PlateCode + "',任务ID为:" + doingTaskList[0].Task_Id); msgs.msg = "根据库位" + containerCode + ",有未结束的任务占用托盘'" + _PlateCode + "',任务ID为:" + doingTaskList[0].Task_Id; return JsonConvert.SerializeObject(msgs); } var doingTaskList2 = BussinessExtension.BussinessExtension.GetDoingShelveTaskListForPlateCode(mod, _PlateCode); if (doingTaskList2 != null && doingTaskList2.Count > 0) { logtxt.txtWrite("根据托盘号" + _PlateCode + ",有未结束的上架单据占用托盘'" + _PlateCode + "',上架单据为:" + doingTaskList2[0].ShelveCode); msgs.msg = "根据托盘号" + _PlateCode + ",有未结束的上架单据占用托盘'" + _PlateCode + "',上架单据为:" + doingTaskList2[0].ShelveCode; return JsonConvert.SerializeObject(msgs); } //创建拼盘出库任务,不再删除库存了。 foreach (var itemRemove in productPositionList) { itemRemove.Remark = "拼盘出库,库位" + itemRemove.PositionName + "和托盘进行解绑"; itemRemove.PositionName = "";//库位和托盘进行解绑 【Editby shaocx,2024-03-23】 } //*/ position.IsFreeze = (int)IsFreezeEnum.无货; position.IsLocked = 1; position.Remark = "拼盘-锁定库位!"; position.PositionType = 0; position.PositionLength = 0; } else { logtxt.txtWrite("类名:taskApi,函数名:madeDish 组盘出库 Position找不到库位数据或者被锁定:" + containerCode, 2); msgs.msg = "根据库位" + containerCode + ",库位已经被锁定"; return JsonConvert.SerializeObject(msgs); } string sourcePlace = containerNo[1] + "-" + containerNo[2] + "-" + containerNo[3]; int areaCode = Convert.ToInt32(containerNo[0].Trim()); string toPlace = ""; int PlateType = 0; if (areaCode != 1 && areaCode != 2) { msgs.msg = "根据库位" + containerCode + ",库区不是1或2"; return JsonConvert.SerializeObject(msgs); } if (areaCode == 1) { toPlace = "1021"; PlateType = 1; } else { if (Convert.ToInt32(containerNo[2]) > 1 && Convert.ToInt32(containerNo[2]) < 10) { toPlace = "1021"; PlateType = 1; } else { toPlace = "1026"; PlateType = 2; } } Task_Queue CallContainerTaks = new Task_Queue(); CallContainerTaks.TaskType = ((int)TaskTypeEnum.组盘出库).ToString();//任务类型 CallContainerTaks.OrderNumber = 0;//任务权重 CallContainerTaks.PlateCode = _PlateCode;//托盘号 CallContainerTaks.TaskStatus = "未下发";//任务状态 CallContainerTaks.PlateType = PlateType.ToString();//托盘类型 CallContainerTaks.CreateDate = DateTime.Now; CallContainerTaks.Creator = creator; CallContainerTaks.UserProduct_Id = 1007;//账套id 老谢bug //垃圾值都赋值0 转到autoTask()里有说明 CallContainerTaks.FromPositionName = sourcePlace; CallContainerTaks.ToPositionName = toPlace; CallContainerTaks.DoCount = areaCode;//库区 CallContainerTaks.Direction = "0";//托盘高度 mod.Task_Queue.Add(CallContainerTaks); mod.SaveChanges(); logtxt.txtWrite("类名:taskApi,函数名:madeDish 组盘出库 库位:" + containerCode, 0); msgs.msg = "成功"; msgs.result = true; msgs.status = 200; } } catch (Exception ex) { logtxt.txtWrite("类名:taskApi/函数名:madeDish组盘出库/ 库位:" + containerCode + logtxt.oneRow(ex.ToString()), 2); msgs.msg = "根据库位" + containerCode + ",出现异常:" + ex.Message; } return JsonConvert.SerializeObject(msgs); } #endregion /// 按凭证退货 /// 按凭证退货 /// /// 拆叠盘设备号 /// public string resetChaiDieDevice(string deviceCode) { string msg = ""; if (deviceCode.Trim() == "") { return "参数为空"; } msg = "复位失败"; try { using (dbModel mod = new dbModel()) { ContainerIsFullOrEmpty resetDevice = mod.ContainerIsFullOrEmpty.FirstOrDefault(); if (resetDevice != null) { switch (deviceCode) { case "1": resetDevice.ChaiBig++; break; case "2": resetDevice.ChaiSmall++; break; case "3": resetDevice.DieBig++; break; case "4": resetDevice.DieSmall++; break; } int res = mod.SaveChanges(); if (res == 1) { msg = "复位成功"; } } } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "解锁库位失败 出错行号" + (string)ex.StackTrace, 2); } return msg; } /// 删除wcs任务 /// /// /// public string deleteTask(string containerCode = "") { string msg = ""; Task_Queue taskDelete; try { string plateCode = containerCode.Trim(); using (dbModel mod = new dbModel()) { taskDelete = mod.Task_Queue.FirstOrDefault(x => x.TaskStatus == "已下发" && x.PlateCode == plateCode); if (taskDelete == null) { return msg = "此托盘号任务已完成"; } if (plateCode == "") { return msg = "参数为空"; } bool res = wcsApi.DealAllTask(containerCode.Trim()); if (res) { taskDelete.TaskStatus = "手工处理异常"; if (taskDelete.TaskType == "1") { Purchase_Shelve deleteInTaskCode = mod.Purchase_Shelve.FirstOrDefault(x => x.ShelveCode == taskDelete.BillCode); if (deleteInTaskCode == null) { logtxt.txtWrite("删除wcs任务产生异常,托盘号:" + containerCode + " 单据编号:" + taskDelete.BillCode, 2); } else { deleteInTaskCode.OnShelveStatus = "手工处理异常"; } } } int result = mod.SaveChanges(); logtxt.txtWrite("删除wcs任务产生异常,保存结果" + result, 1); msg = res == true ? "删除成功" : "删除失败"; } } catch (Exception ex) { logtxt.txtWrite("删除wcs产生异常,托盘号:" + containerCode + " " + ex.ToString(), 2); msg = "参数异常"; } return msg; } /// 缺料单下载 /// 缺料单下载 /// /// 出库单号 /// public string lackData(string orderCode) { string msg = "false"; orderCode = orderCode.Trim(); if (string.IsNullOrEmpty(orderCode)) { return "false"; } try { using (dbModel mod = new dbModel()) { lackOrder lastOrder = mod.lackOrder.Where(x => x.workCode == orderCode).OrderByDescending(x => x.lackId).FirstOrDefault(); if (lastOrder != null) { List lackList = mod.lackOrderList.Where(x => x.lackId == lastOrder.lackId).ToList(); if (lackList.Count > 0) { string[] lackOrderName ={ "跟踪号: ", lastOrder.trackCode.ToString() , " 出库单号:", lastOrder.workCode.ToString(), " 已完成总套数:", lastOrder.finishCount.ToString(), " 本次套数:", (lastOrder.finishCount + lastOrder.counting).ToString()}; var data = new { lackname = lackOrderName, dataList = lackList }; msg = JsonConvert.SerializeObject(data); //导出出库单后 改表的状态 Sale_Order saleorderStatus = mod.Sale_Order.FirstOrDefault(x => x.OrderCode == orderCode); if (saleorderStatus != null) { //saleorderStatus.StatusText = "部分分配"; saleorderStatus.StatusText = Sale_Order_StatusEnum.部分分配.ToString(); saleorderStatus.StatusID = Convert.ToByte(Sale_Order_StatusEnum.部分分配); List saleList = mod.Sale_OrderList.Where(x => x.Order_Id == saleorderStatus.Order_Id).ToList(); if (saleList.Count > 0) { foreach (var item in saleList) { item.ExtendField03 = "部分分配";//明细分拣状态 item.ValidQuantity = item.ValidQuantity - item.QuantityOrder;//未出库数量 item.QuantityOrder = 0;//本次出库数量 } } int resultSave = mod.SaveChanges(); if (resultSave < 1)//保存失败再保存一次 { mod.SaveChanges(); } } } } else {//无缺料信息 var data = new { lackname = "无缺料", dataList = new List() }; msg = JsonConvert.SerializeObject(data); } } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "解锁库位失败 出错行号" + ex.StackTrace.ToString(), 2); } return msg; } ///解锁库位 /// /// 库位名称 /// public string unlock(int isremove, string positionName, string username) { string msg = ""; try { string PositionName = positionName.Trim(); string[] containerNo = PositionName.Split('-'); username = username == null ? "空" : username.Trim(); if (containerNo.Length != 4) { return "库位格式错误"; } //写入任务列表Task_Queue using (dbModel mod = new dbModel()) { List ProductPosition = mod.Base_ProductPosition.Where(x => x.PositionName == PositionName).ToList(); if (ProductPosition.Count > 0) { foreach (var itemRemovePosition in ProductPosition) { if (isremove == 1) { //清除库存 mod.Base_ProductPosition.Remove(itemRemovePosition); //增加出入库记录 【EditBy shaocx,2022-03-07】 OutInStockTaskHandler.AddOutInStockTask22(username, mod, OutInStockTaskName.清库任务, itemRemovePosition.ProductStorage, itemRemovePosition, "解锁库位,清空库存", ""); OperationLogHelper.SaveOperationLog(username, "清空库存:库位:" + itemRemovePosition.PositionName + "物料名称:" + itemRemovePosition.ProductCode, OperateTypeEnum.清除库存); logtxt.txtWrite("apitest-" + "unlock-解锁/删除库存" + itemRemovePosition.PositionName + "物料名称:" + itemRemovePosition.ProductCode, 2); } else { //复位库位 //ExtendField02 出库数量 ContainerNo=1 锁定(正在出库) ExtendField03=1允许分拣 Remark 移动类型 itemRemovePosition.ExtendField02 = "0"; itemRemovePosition.ContainerNo = "0"; //增加物料锁定和解锁的时间和备注记录 [EditBy shaocx,2023-07-26] itemRemovePosition.DoContainerNoTime = DateTime.Now; itemRemovePosition.OpRemark = "界面解锁库位操作,解绑物料锁定"; itemRemovePosition.ExtendField03 = "0"; // baseData.addOperation(username, "复位库位:" + itemRemovePosition.PositionName, "复位库位"); logtxt.txtWrite("apitest-" + "unlock-解锁/删除库存" + itemRemovePosition.PositionName + "物料名称:" + itemRemovePosition.ProductCode, 2); } } } //复位库位状态 Base_Position Position = mod.Base_Position.FirstOrDefault(x => x.PositionName == PositionName); if (Position != null) { //判断是否有任务占用 string[] positions = Position.PositionName.Split('-'); var position = positions[1] + "-" + positions[2] + "-" + positions[3];//格式: 01-03-01 var doingTaskList = BussinessExtension.BussinessExtension.GetDoingTaskList(mod, Convert.ToInt32(positions[0]), position); if (doingTaskList != null && doingTaskList.Count > 0) { msg = "有未结束的任务占用库位'" + Position.PositionName + "',任务ID为:" + doingTaskList[0].Task_Id; return msg; } if (isremove == 1) {//移除库存 //Position.IsFreeze = 0; Position.IsFreeze = (int)IsFreezeEnum.无货; Position.IsLocked = 0; Position.Remark = "人工[" + username + "]解锁库位操作-移除库存!"; Position.PositionLength = 0; } else { //Position.IsFreeze = 1; //Position.IsFreeze = (int)IsFreezeEnum.有货;//库位解锁就一定有货吗,扯犊子 【EditBy shaocx,2022-09-22】 Position.IsLocked = 0; Position.Remark = "人工[" + username + "]解锁库位操作!"; } } int result = mod.SaveChanges(); if (result > 0) { if (isremove == 1) { SystemHelper.addOperation(username, "清除库存: " + positionName, "清除库存"); } else { SystemHelper.addOperation(username, "解锁库位: " + positionName, "解锁库位"); } msg = "操作成功"; } } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "解锁库位失败 出错行号" + ex.StackTrace.ToString(), 2); msg = ex.Message; } return msg; } /// 查找物料信息 /// 查找物料信息 /// /// /// public string findMaterial(string param) { msgss msg = new msgss(); try { searchEntity page = JsonConvert.DeserializeObject(param); string StockWhere = ""; //根据日期筛选 if (page.searchParam != null && page.searchParam != "") { StockWhere = StockWhere + " and (ProductCode like '%" + page.searchParam.Trim() + "%' or ProductName like '%" + page.searchParam.Trim() + "%')"; } if (page.check == true) { StockWhere = StockWhere + " and Brand_Id>0 "; } using (dbModel mod = new dbModel()) { //获取盘点数据 string sql = "select * from [dbo].[" + "VmaterialInfo" + "] where Product_Id >0 " + StockWhere + " order by Product_Id desc ";//isFreeze 是否有货 先拿这个字段用 List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] //msg.allDate = takeStock.Take(20000).ToList(); msg.status = 200; msg.allDate = takeStock.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// 物料增删改 /// 物料增删改查 /// /// /// public string MaterialOperation(string param) { resultMsg msgs = new resultMsg(); try { materialResult acceptParam = JsonConvert.DeserializeObject(param); #region 参数验证 if (acceptParam == null) { msgs.status = 400; msgs.result = false; msgs.msg = "参数为空"; return JsonConvert.SerializeObject(msgs); } if (acceptParam.OperationValue != 1 && acceptParam.OperationValue != 2 && acceptParam.OperationValue != 3) { msgs.status = 400; msgs.result = false; msgs.msg = "参数为空"; return JsonConvert.SerializeObject(msgs); } #endregion using (dbModel mod = new dbModel()) { switch (acceptParam.OperationValue) { case 1://新建物料 Base_ProductInfo #region 新建物料 Base_ProductInfo addmaterial = new Base_ProductInfo(); addmaterial.BigUnit = acceptParam.taskForm.BigUnit; addmaterial.Brand_Id = acceptParam.taskForm.Brand_Id == null ? 0 : acceptParam.taskForm.Brand_Id; addmaterial.CreateDate = DateTime.Now; addmaterial.Creator = acceptParam.taskForm.Creator; addmaterial.ModifyDate = DateTime.Now; addmaterial.ProductCode = acceptParam.taskForm.ProductCode; addmaterial.ProductName = acceptParam.taskForm.ProductName; addmaterial.SmallUnit = acceptParam.taskForm.SmallUnit; addmaterial.ProductModel = acceptParam.taskForm.ProductCode; //非空值 addmaterial.UnitConvert = 1M;//大小单位转换 addmaterial.Provider_Id = 926; addmaterial.ProviderCode = "PV201940371"; addmaterial.Consignor_Id = 30; addmaterial.ConsignorCode = "GX30"; addmaterial.ConsignorName = "广州西门子"; addmaterial.UserProduct_Id = 1007; addmaterial.UserProductCode = "100000001"; mod.Base_ProductInfo.Add(addmaterial); int saveResult = mod.SaveChanges(); if (saveResult < 1) { saveResult = mod.SaveChanges(); } if (saveResult < 1) { msgs.status = 400; msgs.result = false; msgs.msg = "新建物料失败"; } else { msgs.status = 200; msgs.result = true; msgs.msg = "新建成功"; } break; #endregion case 2://修改物料 Base_ProductInfo modify = mod.Base_ProductInfo.Find(acceptParam.taskForm.Product_Id); if (modify != null) { modify.BigUnit = acceptParam.taskForm.BigUnit; modify.Brand_Id = acceptParam.taskForm.Brand_Id == null ? 0 : acceptParam.taskForm.Brand_Id; modify.Creator = acceptParam.taskForm.Creator; modify.ModifyDate = DateTime.Now; modify.ProductCode = acceptParam.taskForm.ProductCode; modify.ProductName = acceptParam.taskForm.ProductName; modify.SmallUnit = acceptParam.taskForm.SmallUnit; modify.ProductModel = acceptParam.taskForm.ProductCode; int updateResult = mod.SaveChanges(); if (updateResult < 1) { updateResult = mod.SaveChanges(); } if (updateResult < 1) { msgs.status = 400; msgs.result = false; msgs.msg = "修改物料失败"; } else { msgs.status = 200; msgs.result = true; msgs.msg = "修改成功"; } } else { msgs.status = 400; msgs.result = false; msgs.msg = "修改物料失败--找不到这个物料"; } break; case 3://删除物料 #region 删除物料 Base_ProductInfo deleteMaterial = mod.Base_ProductInfo.Find(acceptParam.taskForm.Product_Id); if (deleteMaterial != null) { mod.Base_ProductInfo.Remove(deleteMaterial); int deleteResult = mod.SaveChanges(); if (deleteResult < 1) { deleteResult = mod.SaveChanges(); } if (deleteResult < 1) { msgs.status = 400; msgs.result = false; msgs.msg = "删除物料失败"; } else { msgs.status = 200; msgs.result = true; msgs.msg = "删除成功"; } } else { msgs.status = 200; msgs.result = true; msgs.msg = "删除物料失败,找不到这个物料"; } break; #endregion default: break; } } } catch (Exception ex) { msgs.status = 400; msgs.result = false; msgs.msg = "参数异常"; logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "MaterialOperation 物料增删改产生异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); } return JsonConvert.SerializeObject(msgs); } /// 获取设备报警记录 /// 获取设备报警记录 /// /// /// public string deviceAlarm(string param) { msgss msg = new msgss(); try { productStockEntity page = JsonConvert.DeserializeObject(param); string StockWhere = ""; //根据下拉框筛选 if (page.positionTypeValue < 5) { StockWhere = "and type = " + page.positionTypeValue; } //根据日期筛选 if (page.datatime != null) { if (page.datatime.Length == 2) { StockWhere = StockWhere + "and createtime > '" + page.datatime[0].ToString() + "' and createtime < '" + page.datatime[1].ToString() + "'"; } } using (deviceOrm mod = new deviceOrm()) { //设备报警信息 string sql = "select * from [dbo].[" + "DevAlert" + "] where id >0 " + StockWhere + " and isfinished=1 order by id desc "; List takeStock = mod.Database.SqlQuery(sql).ToList(); List devicefenyeRerults = new List(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] foreach (var item in takeStock) { deviceAlarmMsg deviceAlarm = new deviceAlarmMsg(); string[] name = form.alarmName(item.type, Convert.ToInt32(item.alertcode), Convert.ToInt32(item.eqname)); deviceAlarm.deviceName = name[0]; deviceAlarm.alarmInfo = name[1]; deviceAlarm.creatTime = (DateTime)item.createtime; TimeSpan continuetime = (DateTime)item.finishtime - (DateTime)item.createtime; deviceAlarm.continueTime = continuetime.Hours + "小时" + continuetime.Minutes + "分钟" + continuetime.Seconds + "秒"; devicefenyeRerults.Add(deviceAlarm); } msg.allDate = devicefenyeRerults; } else {//不加载全部,就过滤分页信息 msg.total = takeStock.Count; //假如每页数量 大于总数量 if (page.queryInfo.pagesize > takeStock.Count) { fenyeRerult = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } #endregion } foreach (var item in fenyeRerult) { deviceAlarmMsg deviceAlarm = new deviceAlarmMsg(); string[] name = form.alarmName(item.type, Convert.ToInt32(item.alertcode), Convert.ToInt32(item.eqname)); deviceAlarm.deviceName = name[0]; deviceAlarm.alarmInfo = name[1]; deviceAlarm.creatTime = (DateTime)item.createtime; TimeSpan continuetime = (DateTime)item.finishtime - (DateTime)item.createtime; deviceAlarm.continueTime = continuetime.Hours + "小时" + continuetime.Minutes + "分钟" + continuetime.Seconds + "秒"; devicefenyeRerults.Add(deviceAlarm); } msg.date = devicefenyeRerults; } } else { msg.status = 400; msg.total = 1; msg.date = null; } } } catch (Exception ex) { msg.status = 400; msg.total = 1; msg.date = null; logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "deviceAlarm" + "获取报警信息异常" + ex.ToString() + "--" + logtxt.oneRow(ex.ToString()), 2); } return JsonConvert.SerializeObject(msg); } /// 获取设备报警记录统计 /// /// /// 此参数不用 /// public string deviceAlarms(string param) { msgss msg = new msgss(); msg.status = 400; try { List deviceTotal = new List(); DeviceAlarms srm1 = new DeviceAlarms(); DeviceAlarms srm2 = new DeviceAlarms(); DeviceAlarms rgv1 = new DeviceAlarms(); DeviceAlarms rgv2 = new DeviceAlarms(); string month = param == "" ? DateTime.Now.Month.ToString() : DateTime.Parse(param).Month.ToString(); DateTime fristMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-" + month + "-01")); DateTime lastMonth = DateTime.Parse(DateTime.Parse(DateTime.Now.ToString("yyyy-" + month + "-01")).AddMonths(1).AddMinutes(-1).ToString()); using (deviceOrm mod = new deviceOrm()) { List srm1Info = mod.DevAlert.Where(x => x.createtime > fristMonth && x.createtime < lastMonth && x.name == "Srm1").ToList(); #region 堆垛机1 var srm1Type = srm1Info.GroupBy(x => x.alertname).OrderByDescending(x => x.Count()).ToList(); TimeSpan srm1Span = new TimeSpan(); if (srm1Info.Count > 0) { foreach (var srm1item in srm1Info) { srm1Span = srm1Span + (TimeSpan)(srm1item.finishtime - srm1item.createtime); } } srm1.AlarmTime = srm1Span.TotalHours.ToString("0.00"); srm1.DeviceName = "一号堆垛机"; srm1.AlarmNum = srm1Info.Count.ToString(); if (srm1Type.Count > 0) { srm1.AlarmName1 = srm1Type[0].Key; if (srm1Type.Count > 1) { srm1.AlarmName2 = srm1Type[1].Key; if (srm1Type.Count > 2) { srm1.AlarmName3 = srm1Type[2].Key; } } } #endregion List srm2Info = mod.DevAlert.Where(x => x.createtime > fristMonth && x.createtime < lastMonth && x.name == "Srm2").ToList(); #region 堆垛机2 var srm2Type = srm2Info.GroupBy(x => x.alertname).OrderByDescending(x => x.Count()).ToList(); TimeSpan srm2Span = new TimeSpan(); if (srm2Info.Count > 0) { foreach (var srm2item in srm2Info) { srm2Span = srm2Span + (TimeSpan)(srm2item.finishtime - srm2item.createtime); } } srm2.AlarmTime = srm2Span.TotalHours.ToString("0.00"); srm2.DeviceName = "二号堆垛机"; srm2.AlarmNum = srm2Info.Count.ToString(); if (srm2Type.Count > 0) { srm2.AlarmName1 = srm2Type[0].Key; if (srm2Type.Count > 1) { srm2.AlarmName2 = srm2Type[1].Key; if (srm2Type.Count > 2) { srm2.AlarmName3 = srm2Type[2].Key; } } } #endregion List rgv1Info = mod.DevAlert.Where(x => x.createtime > fristMonth && x.createtime < lastMonth && x.name == "Rgv1").ToList(); #region 堆垛机1 var rgv1Type = rgv1Info.GroupBy(x => x.alertname).OrderByDescending(x => x.Count()).ToList(); TimeSpan rgv1Span = new TimeSpan(); if (rgv1Info.Count > 0) { foreach (var agv1item in rgv1Info) { rgv1Span = rgv1Span + (TimeSpan)(agv1item.finishtime - agv1item.createtime); } } rgv1.AlarmTime = rgv1Span.TotalHours.ToString("0.00"); rgv1.DeviceName = "一号RGV"; rgv1.AlarmNum = rgv1Info.Count.ToString(); if (rgv1Type.Count > 0) { rgv1.AlarmName1 = rgv1Type[0].Key; if (rgv1Type.Count > 1) { rgv1.AlarmName2 = rgv1Type[1].Key; if (rgv1Type.Count > 2) { rgv1.AlarmName3 = rgv1Type[2].Key; } } } #endregion List rgv2Info = mod.DevAlert.Where(x => x.createtime > fristMonth && x.createtime < lastMonth && x.name == "Rgv2").ToList(); #region 二号RGV var rgv2Type = rgv2Info.GroupBy(x => x.alertname).OrderByDescending(x => x.Count()).ToList(); TimeSpan rgv2Span = new TimeSpan(); if (rgv2Info.Count > 0) { foreach (var rgv2item in rgv2Info) { rgv2Span = rgv2Span + (TimeSpan)(rgv2item.finishtime - rgv2item.createtime); } } rgv2.AlarmTime = rgv2Span.TotalHours.ToString("0.00"); rgv2.DeviceName = "二号RGV"; rgv2.AlarmNum = rgv2Info.Count.ToString(); if (rgv2Type.Count > 0) { rgv2.AlarmName1 = rgv2Type[0].Key; if (rgv2Type.Count > 1) { rgv2.AlarmName2 = rgv2Type[1].Key; if (rgv2Type.Count > 2) { rgv2.AlarmName3 = rgv2Type[2].Key; } } } #endregion } deviceTotal.Add(srm1); deviceTotal.Add(srm2); deviceTotal.Add(rgv1); deviceTotal.Add(rgv2); msg.status = 200; msg.date = deviceTotal; } catch (Exception) { throw; } return JsonConvert.SerializeObject(msg); } /// 空托盘出入库 /// /// /// /// public string emtypContainerOUtandIN(string param) { /* //我认为这个方法不用了 【EditBy shaocx,2022-09-22】 resultMsg msgs = new resultMsg(); msgs.status = 400; msgs.msg = "方法无效"; return JsonConvert.SerializeObject(msgs); //*/ resultMsg msgs = new resultMsg(); msgs.status = 400; try { emtypContainerOUtandINclass emtypContainer = JsonConvert.DeserializeObject(param); if (string.IsNullOrEmpty(emtypContainer.creator)) { msgs.msg = "操作人不能为空"; return JsonConvert.SerializeObject(msgs); } var findEmptyReason = ""; using (dbModel mod = new dbModel()) { bool isInMoreHighPosition = false; if (emtypContainer.name == null)//没有目标库位说明是入库 { Task_Queue callContainerTaks = new Task_Queue(); callContainerTaks.BillCode = "空托盘入库"; string toplace = emtypContainer.type == "1" ? FindEmptyLocationHandler.findStorage(mod, "", true, ref isInMoreHighPosition, ref findEmptyReason, 1, 1, 2, 0) : FindEmptyLocationHandler.findStorage(mod, "", true, ref isInMoreHighPosition, ref findEmptyReason, 2, 2, 4, 0); if (string.IsNullOrEmpty(toplace)) { msgs.msg = "未找到合适的库位存放," + findEmptyReason; return JsonConvert.SerializeObject(msgs); } callContainerTaks.TaskType = ((int)TaskTypeEnum.余料回库).ToString();//任务类型 callContainerTaks.OrderNumber = 0;//任务权重 callContainerTaks.TaskStatus = "未下发";//任务状态 callContainerTaks.PlateType = emtypContainer.type;//托盘类型 第二排没有空小托盘 callContainerTaks.CreateDate = DateTime.Now; callContainerTaks.UserProduct_Id = 1007;//账套id 老谢bug //垃圾值都赋值0 转到autoTask()里有说明 callContainerTaks.FromPositionName = "1001"; callContainerTaks.Direction = "0";//托盘高度 callContainerTaks.ToPositionName = toplace; callContainerTaks.CreateID = 0;//表示空托盘入库,注意:这个字段非常重要 callContainerTaks.Creator = emtypContainer.creator; callContainerTaks.DoCount = emtypContainer.type == "1" ? 1 : 2;//库区 mod.Task_Queue.Add(callContainerTaks); OperationLogHelper.AddOperationLogEntity(mod, emtypContainer.creator, "人工满空托回库", OperateTypeEnum.人工满空托回库, ""); int res = mod.SaveChanges(); if (res == 2) { msgs.status = 200; } else { res = mod.SaveChanges(); if (res == 2) { msgs.status = 200; } else { msgs.msg = "生成任务失败"; } } } else { msgs.msg = "不支持的类型"; } } } catch (Exception ex) { msgs.status = 400; msgs.msg = "生成任务失败:" + ex.Message; logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "emtypContainerOUtandIN 空托盘出入库产生异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); } return JsonConvert.SerializeObject(msgs); //*/ } #region 闲时移库管理 /// /// 分页查询 闲时移库 /// /// /// public string QueryPageFreeTimeMoveLocationTask(string param) { msgss msg = new msgss(); QueryPageFoldingPlateMachineInput page = JsonConvert.DeserializeObject(param); try { string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 if (page.StartTime != null) { if (page.StartTime.Length == 2) { StockWhere = StockWhere + " and StartTime > '" + page.StartTime[0].ToString() + "' and StartTime < '" + page.StartTime[1].ToString() + "'"; } } if (page.EndTime != null) { if (page.EndTime.Length == 2) { StockWhere = StockWhere + " and EndTime > '" + page.EndTime[0].ToString() + "' and EndTime < '" + page.EndTime[1].ToString() + "'"; } } if (page.CreateTime != null) { if (page.CreateTime.Length == 2) { StockWhere = StockWhere + " and CreateTime > '" + page.CreateTime[0].ToString() + "' and CreateTime < '" + page.CreateTime[1].ToString() + "'"; } } if (!string.IsNullOrEmpty(page.UserName)) { StockWhere = StockWhere + " and Creator like '%" + page.UserName.Trim() + "%'"; } if (page.MoveStatus != null) { StockWhere = StockWhere + " and MoveStatus=" + page.MoveStatus.ToString(); } if (page.RunTime != null) { StockWhere = StockWhere + " and RunTime=" + page.RunTime.ToString(); } #endregion using (dbModel mod = new dbModel()) { //获取数据 string sql = "select * from [dbo].[" + "V_FreeTimeMoveLocationTaskPage" + "] WITH(NOLOCK) where 1=1 " + StockWhere + " order by LastModifyTime desc "; List takeStock = mod.Database.SqlQuery(sql).ToList(); foreach (var item in takeStock) { if (item.MoveStatus == (int)MoveStatusEnum.执行中) { TimeSpan ts = DateTime.Now - Convert.ToDateTime(item.StartTime); item.CurExcuteTime = ts.Minutes;//显示分钟 } } List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStock.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// /// 分页查询 闲时移库明细 /// /// /// public string QueryPageFreeTimeMoveLocationTaskDetails(string param) { msgss msg = new msgss(); QueryPageFreeTimeMoveLocationTaskDetailsInput page = JsonConvert.DeserializeObject(param); try { string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 StockWhere = StockWhere + " and MainFreeMoveId=" + page.MainFreeMoveId.ToString(); #endregion using (dbModel mod = new dbModel()) { //获取数据 string sql = "select * from [dbo].[" + "V_FreeTimeMoveLocationTask" + "] WITH(NOLOCK) where 1=1 " + StockWhere + " order by Task_Id desc "; List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// /// 新增 闲时移库 /// /// /// public string AddFreeTimeMoveLocationTask(string param) { FunRetEntity msgs = new FunRetEntity(); try { AddFoldingPlateMachineInput input = JsonConvert.DeserializeObject(param); return JsonConvert.SerializeObject(FreeTimeMoveLocationTaskHandler.Add(input)); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "AddFreeTimeMoveLocationTask 增加闲时移库管理 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } /// /// 编辑 闲时移库 /// /// /// public string UpdateFreeTimeMoveLocationTask(string param) { FunRetEntity msgs = new FunRetEntity(); try { UpdateFoldingPlateMachineInput input = JsonConvert.DeserializeObject(param); return JsonConvert.SerializeObject(FreeTimeMoveLocationTaskHandler.Update(input)); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "UpdateFreeTimeMoveLocationTask 编辑闲时移库管理 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } /// /// 执行 闲时移库 /// /// /// public string ExcuteFreeTimeMoveLocationTask(string param) { FunRetEntity msgs = new FunRetEntity(); try { ExcuteAndCancelFoldingPlateMachineInput input = JsonConvert.DeserializeObject(param); return JsonConvert.SerializeObject(FreeTimeMoveLocationTaskHandler.Excute(input)); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "ExcuteFreeTimeMoveLocationTask 执行 闲时移库管理 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } /// /// 取消 闲时移库 /// /// /// public string CancelFreeTimeMoveLocationTask(string param) { FunRetEntity msgs = new FunRetEntity(); try { ExcuteAndCancelFoldingPlateMachineInput input = JsonConvert.DeserializeObject(param); return JsonConvert.SerializeObject(FreeTimeMoveLocationTaskHandler.Cancel(input)); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "CancelFreeTimeMoveLocationTask 取消 闲时移库管理 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } /// /// 人工结束 闲时移库 /// /// /// public string PersonStopFreeTimeMoveLocationTask(string param) { FunRetEntity msgs = new FunRetEntity(); try { PersonStopFoldingPlateMachineInput input = JsonConvert.DeserializeObject(param); return JsonConvert.SerializeObject(FreeTimeMoveLocationTaskHandler.PersonStop(input)); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "PersonStopFreeTimeMoveLocationTask 人工结束 闲时移库管理 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } #endregion #region 按单出库记录 /// /// 分页查询 按单出库记录 /// /// /// public string QueryPageSale_Order_History(string param) { msgss msg = new msgss(); QueryPageSale_Order_HistoryInput page = JsonConvert.DeserializeObject(param); try { string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 if (page.CreateTime != null) { if (page.CreateTime.Length == 2) { StockWhere = StockWhere + " and CreateTime > '" + page.CreateTime[0].ToString() + "' and CreateTime < '" + page.CreateTime[1].ToString() + "'"; } } if (!string.IsNullOrEmpty(page.UserName)) { StockWhere = StockWhere + " and Creator like '%" + page.UserName.Trim() + "%'"; } if (!string.IsNullOrEmpty(page.OrderCode)) { StockWhere = StockWhere + " and OrderCode='" + page.OrderCode.ToString() + "' "; } if (!string.IsNullOrEmpty(page.TrackingNumber)) { StockWhere = StockWhere + " and TrackingNumber='" + page.TrackingNumber.ToString() + "' "; } #endregion using (dbModel mod = new dbModel()) { //获取数据 string sql = "select * from [dbo].[" + "Sale_Order_History" + "] WITH(NOLOCK) where 1=1 " + StockWhere + " order by LastModifyTime desc "; List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; if (page.IsLoadAllData) {//只有确定加载全部数据时才加载全部数据 [EditBy shaocx,2022-03-07] msg.status = 200; msg.allDate = takeStock.ToList(); } else {//不加载全部,就过滤分页信息 //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } /// /// 分页查询 按单出库记录明细 /// /// /// public string QueryPageSale_Order_HistoryDetails(string param) { msgss msg = new msgss(); QueryPageSale_Order_History_ItemsInput page = JsonConvert.DeserializeObject(param); try { string StockWhere = ""; //根据日期筛选 #region 搜索条件判断 StockWhere = StockWhere + " and Sale_Order_History_Id=" + page.Sale_Order_History_Id.ToString(); #endregion using (dbModel mod = new dbModel()) { //获取数据 string sql = "select * from [dbo].[" + "Sale_Order_History_Items" + "] WITH(NOLOCK) where 1=1 " + StockWhere + " order by ID desc "; List takeStock = mod.Database.SqlQuery(sql).ToList(); List fenyeRerult = new List(); if (takeStock.Count > 0) { msg.status = 200; msg.total = takeStock.Count; //假如每页数量 大于盘点数据 if (page.queryInfo.pagesize > takeStock.Count) { msg.date = takeStock; } else { #region 分页计算 int a = page.queryInfo.pagesize; int b = page.queryInfo.pagenum; int c = (int)Math.Ceiling((double)takeStock.Count / a); int d = takeStock.Count % a; int e = 0; int f = a * (b - 1); if (d != 0 && b == c) { e = d + f; } else { e = a + f; } for (int i = f; i < e; i++) { fenyeRerult.Add(takeStock[i]); } msg.date = fenyeRerult; #endregion } } else { msg.status = 400; msg.total = 1; msg.date = null; } return JsonConvert.SerializeObject(msg); } } catch (Exception ex) { logtxt.txtWrite("出错信息" + ex.Message + "出错行号" + (string)ex.StackTrace, 2); msg.status = 400; msg.total = 1; msg.date = null; return JsonConvert.SerializeObject(msg); } } #endregion #region 权限 /// /// 查询 某个菜单下的,某个角色的权限,考虑多个角色不?我看了,系统配置一个用户只能是一个角色,因此不需要考虑多个角色的情况 /// /// /// public string QueryButtonAuth(string param) { FunRetEntity msgs = new FunRetEntity(); try { QueryButtonPermissionInput input = JsonConvert.DeserializeObject(param); if (string.IsNullOrEmpty(input.menu_IdEnum)) { return JsonConvert.SerializeObject(FunRetEntity.Fail("菜单ID不能为空")); } Menu_IdEnum menuIdEnum = (Menu_IdEnum)Enum.Parse(typeof(Menu_IdEnum), input.menu_IdEnum); var buttonAuth = SystemHelper.QueryButtonPermission(input.role_Id, menuIdEnum); return JsonConvert.SerializeObject(FunRetEntity.Success("成功", buttonAuth)); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "QueryButtonAuth 查询 某个菜单下的,某个角色的权限 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } #endregion #region 打印标签 /// /// 重新打印 标签 /// /// /// public string RePrintBarCode(string param) { FunRetEntity msgs = new FunRetEntity(); try { if (string.IsNullOrEmpty(param)) { return JsonConvert.SerializeObject(FunRetEntity.Fail("标签条码不能为空!")); } RePrintBarCodeInput input = JsonConvert.DeserializeObject(param); if (input.barCode == null || input.barCode.Count == 0) { return JsonConvert.SerializeObject(FunRetEntity.Fail("标签条码不能为空!")); } using (dbModel edm = new dbModel()) { foreach (var item in input.barCode) { var data = edm.Base_PositionPrint.Where(x => x.ExtendField06 == item).FirstOrDefault(); if (data == null) { return JsonConvert.SerializeObject(FunRetEntity.Fail("根据标签条码" + item + "没有找到打印数据!")); } if (data.printDevice == null) { return JsonConvert.SerializeObject(FunRetEntity.Fail("根据标签条码" + item + "查到的打印数据没有指定打印机!")); } data.isNeedPrint = 1; edm.SaveChanges(); } } return JsonConvert.SerializeObject(FunRetEntity.Success("成功")); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "RePrintBarCode 重新打印 标签 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } #endregion #region 维护库存预警天数 /// /// 维护库存预警天数 /// /// /// public string UpdateStoreWarningDays(string param) { FunRetEntity msgs = new FunRetEntity(); try { UpdateStoreWarningDaysInput input = JsonConvert.DeserializeObject(param); return JsonConvert.SerializeObject(UpdateStoreWarningDaysHandler.Excute(input)); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "UpdateStoreWarningDays 维护库存预警天数 异常参数:" + param + " 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } /// /// 获取库存预警天数 /// /// /// public string GetStoreWarningDays(string param) { FunRetEntity msgs = new FunRetEntity(); try { return JsonConvert.SerializeObject(UpdateStoreWarningDaysHandler.Get()); } catch (Exception ex) { logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "GetStoreWarningDays 获取库存预警天数 信息:" + logtxt.oneRow(ex.ToString()), 2); return JsonConvert.SerializeObject(FunRetEntity.Fail("异常:" + ex.Message)); } } #endregion #endregion #region 给WCS接口 /// /// 返回给WCS 库区和目标库位 /// /// PLC任务号 /// 托盘类型 /// 高度 /// WMS的任务ID /// 失败返回"",成功返回-例子"2-01-01-01" 2号库位1排1列1层 public string getToPlace(int taskId, int continerType, int height, int wmsTaskId) { string toplace = ""; try { var findEmptyReason = ""; toplace = FindEmptyLocationHandler.toPlace(taskId, continerType, height, height, ref findEmptyReason, wmsTaskId); logtxt.txtWrite("类名:taskApi,函数名: getToPlace:wcs高度等级是:" + height + " 任务号是:" + taskId + " 托盘类型是:" + continerType + " 返回目标地址是 " + toplace + ",原因findEmptyReason:" + findEmptyReason , 1); } catch (Exception ex) { logtxt.txtWrite("类名:taskApi,异常函数名: getToPlace:wcs高度等级是:" + height + " 任务号是:" + taskId + " 托盘类型是:" + continerType + " 返回目标地址是 " + toplace + logtxt.oneRow(ex.ToString()), 2); toplace = ""; } return toplace; } #endregion #region 调sap接口 /// sap收货确认 /// sap收货确认 /// /// json字符串 /// 空表示成功,否则返回失败内容 public string receiptConfirm(string receipt) { // 转入toPlace 转出fromPlace #region po单状态 //StatusText = "新建"; //StatusID = 1; //StatusText = "部分完成"; //StatusID = 7; //StatusText = "完全交货"; //StatusID =8 ; #endregion string msg = ""; if (receipt == null) { var datax = new { result = false, msg = "参数不能为空" }; msg = JsonConvert.SerializeObject(datax); return msg; } logtxt.txtWrite(receipt, 0);//收到记录一条日志 try { using (dbModel mod = new dbModel()) { //转换收料信息 GRMaterialEntity[] results = JsonConvert.DeserializeObject(receipt); if (results.Length > 0) { //没有PO单就是手动收货 if (string.IsNullOrEmpty(results[0].PoNumber)) { #region 无单收货 //转换成移库实体 [{"MaterialCode":"A7EQD-5130033087","Quantity":1,"MoveType":"262","toPlace":"G021","fromPlace":"G021","trackingNumber":"7615"}] moveStock[] moveResults = JsonConvert.DeserializeObject(receipt); //检查是否带跟踪号不带的移动类型 不带E List moveMaterials = new List();//移库实体 List GImaterals = new List();//收货实体类 foreach (var itemGi in moveResults) { string moveType = itemGi.MoveType; string trackingNum = itemGi.trackingNumber; string materialCode = itemGi.MaterialCode; //311是移库有转入仓和转出仓 if (moveType == "311") { #region MyRegion MovMaterialEntity moveMaterial = new MovMaterialEntity(); //有跟踪号 移动类型要加E 加E就要天销售单号和销售项号 if (!string.IsNullOrEmpty(trackingNum))//ProductCode poInfoChild.ExtendField07 = item.SalesOrder;//销售单号 poInfoChild.SpecAlias = item.SalesOrderItem;//销售单项号 { moveType += "E"; Purchase_OrderList poList = mod.Purchase_OrderList.FirstOrDefault(x => x.ExtendField04 == trackingNum && x.ProductCode == materialCode); moveMaterial.SalesOrder = poList.ExtendField07; moveMaterial.SalesOrderItem = poList.SpecAlias; } logtxt.txtWrite("发送的移动类型是" + moveType + "跟踪号:" + trackingNum, 0);//收到记录一条日志 moveMaterial.MoveType = moveType; moveMaterial.Plant = "3TG1"; moveMaterial.MaterialCode = materialCode; moveMaterial.FromStorageLocation = itemGi.fromPlace; moveMaterial.ToStorageLocation = itemGi.toPlace; moveMaterial.Quantity = itemGi.Quantity; moveMaterials.Add(moveMaterial); #endregion } else { #region MyRegion GIMaterialEntity GImateral = new GIMaterialEntity(); if (!string.IsNullOrEmpty(trackingNum))//ProductCode poInfoChild.ExtendField07 = item.SalesOrder;//销售单号 poInfoChild.SpecAlias = item.SalesOrderItem;//销售单项号 { moveType += "E"; Purchase_OrderList poList = mod.Purchase_OrderList.FirstOrDefault(x => x.ExtendField04 == trackingNum && x.ProductCode == materialCode); if (poList == null)//根据跟踪号查不到数据 就赋值为空 { GImateral.SalesOrder = ""; GImateral.SalesOrderItem = ""; } else { GImateral.SalesOrder = poList.ExtendField07 == null ? "" : poList.ExtendField07; GImateral.SalesOrderItem = poList.SpecAlias == null ? "" : poList.SpecAlias; } } GImateral.MoveType = moveType; GImateral.StorageLocation = "G021"; GImateral.Plant = "3TG1"; GImateral.MaterialCode = materialCode; GImateral.Quantity = itemGi.Quantity; GImateral.WorkOrder = "#0#0"; GImaterals.Add(GImateral); #endregion } } if (moveMaterials.Count > 0)//有数据说明是移库 { string moveReceipt = JsonConvert.SerializeObject(moveMaterials); msg = SAPHelper.moveStockConfirm(null, moveReceipt); } if (GImaterals.Count > 0)//有数据说明是退料 { string GiReceipt = JsonConvert.SerializeObject(GImaterals); msg = SAPHelper.StockOutConfirm(null, GiReceipt); } return msg; #endregion } } else { var data = new { result = false, msg = "无此单号" }; msg = JsonConvert.SerializeObject(data); return msg; } //收货信息给SAP var result = SAPHelper.ConfirmGR(results, out msg); //注释以下方法,当收货信息推送给SAP失败后,也要允许他们进行收货打印标记 【EditBy shaocx,2022-09-30】 msg = "";//强制认为收货信息推送给SAP是成功的! 【EditBy shaocx,2022-09-30】 /* if (result == false) { var data = new { result = false, msg = "收货信息给SAP失败:" + msg }; msg = JsonConvert.SerializeObject(data); return msg; } //*/ //注释以下方法,改为调用 SAPHelper方法 【EditBy shaocx,2022-09-23】 /* string info = sendSap.ConfirmGR(results, out msg); form.textBox6.Text = DateTime.Now.ToString("dd-HH-mm-ss") + "收货,退货成功,凭证:" + info + "返回信息" + msg + "\r\n" + form.textBox6.Text; if (msg == "") { logtxt.txtWrite("收货,退货成功,凭证:" + info, 0); } else { //这里是 收货,退货失败? [EditBy shaocx,2022-03-06] logtxt.txtWrite("收货,退货失败,凭证:" + info + ",返回msg:" + msg, 0); SapSendFailRecodInfoHandler.AddForSH(results, info, msg);//记录失败表 } //*/ } } catch (Exception ex) { logtxt.txtWrite("收货,退货执行异常" + ex.Message, 2); var data = new { result = false, msg = "执行异常" }; msg = JsonConvert.SerializeObject(data); return msg; } var data1 = new { result = msg == "" ? true : false, msg = msg == "" ? "执行成功" : "执行失败", }; msg = JsonConvert.SerializeObject(data1); return msg; } /// 获取Po单 /// 获取Po单 /// /// Po单 /// public string getPoList(string PoCode) { DateTime timeInfo = DateTime.Now; string msg = ""; try { using (dbModel mod = new dbModel()) { Purchase_Order poNumber = mod.Purchase_Order.Where(x => x.PoCode == PoCode).FirstOrDefault(); //PO表里查不到就SAP接口里获取采购信息 if (poNumber == null) {//GetPurchaseOrder #region 如果主表里没有数据就调ASP接口获取采购单 PurchaseOrderEntity resultPo = SAPHelper.GetPurchaseOrder(PoCode, out msg); //PurchaseOrderEntity resultPo = sendSap.GetPurchaseOrder(PoCode, out msg);//改为调用SAPHelper 【Editby shaocx,2022-09-23】 if (msg != "")//获取失败返回空 { var data = new { result = false, msg = "找不到这个单号" }; msg = JsonConvert.SerializeObject(data); return msg; } List rstPo = resultPo.Materials.Select(x => x.MaterialCode).ToList(); Purchase_Order poInfo = new Purchase_Order(); #region 主表数据 poInfo.PoCode = resultPo.PoNumber;//采购单号 poInfo.StatusText = "新建";//状态 providerShortName poInfo.StatusID = 1; poInfo.AuditRemark = resultPo.PurchaseOrg;//采购部门 VendorName poInfo.ProviderShortName = resultPo.VendorName; poInfo.CreateID = 1; poInfo.Creator = resultPo.CreatedBy; poInfo.CreateDate = DateTime.Now; #region 数据库不可为空垃圾字段 poInfo.Storage_Id = 87; poInfo.StorageName = "立体库"; poInfo.Consignor_Id = 30; poInfo.ConsignorCode = "GX30"; poInfo.ConsignorName = "广州西门子"; poInfo.UserProductCode = "100000001"; poInfo.UserProduct_Id = 1007; #endregion #endregion //添加PO单物料明细 List poInfoList = new List(); int number = 0; //查找物料基础数据 找到po明细物料编号在数据库里有的集合 var checkMateria1s = (from p in mod.Base_ProductInfo where (from f in rstPo select f).Contains(p.ProductCode) select p).ToList(); #region 添加PO单物料明细 System.Collections.Generic.List insert_OrderList_EmptyMaterialCodeList = new List(); string lastTracknum = ""; foreach (var item in resultPo.Materials) { if (string.IsNullOrEmpty(item.MaterialCode)) {//写入PO明细空物料号表 【Editby shaocx,2025-09-09】 logtxt.txtWrite("采购单号:" + item.PoNumber + " 物料项号:" + item.PoItem + "物料编号为空", 2); insert_OrderList_EmptyMaterialCodeList.Add(new Purchase_OrderList_EmptyMaterialCode() { ID = Yitter.IdGenerator.YitIdHelper.NextId(), PoCode = poInfo.PoCode, BatchNumber = "", ItemNumber = item.PoItem, ProductName = item.MaterialName, CreateTime = DateTime.Now, Creator = resultPo.CreatedBy, Quantity = 0, LastModifier = resultPo.CreatedBy, LastModifyTime = DateTime.Now, Remark = "" }); continue;//物料编号为空 } string materialCode = item.MaterialCode; long productId = 0; #region 检查物料基础信息里是否有这个物料没有就新建 Base_ProductInfo checkMateria = checkMateria1s.FirstOrDefault(x => x.ProductCode == materialCode); Base_ProductInfo newMateria = new Base_ProductInfo(); if (checkMateria == null) { newMateria.ProductCode = materialCode;//物料编号 newMateria.ProductName = item.MaterialName;//物料名称 newMateria.SmallUnit = item.BaseUnit;//库存单位 newMateria.BigUnit = item.Unit;//采购单位 newMateria.Enable = 1;//设置为可用 newMateria.ProviderShortName = resultPo.VendorName;//供应商名称 newMateria.UnitConvert = 1M;//大小单位转换 newMateria.Brand_Id = 0;//库存预警量 /////////////// newMateria.ProductModel = materialCode; newMateria.Provider_Id = 926; newMateria.ProviderCode = "PV201940371"; newMateria.Consignor_Id = 30; newMateria.ConsignorCode = "GX30"; newMateria.ConsignorName = "广州西门子"; newMateria.UserProduct_Id = 1007; newMateria.UserProductCode = "100000001"; mod.Base_ProductInfo.Add(newMateria); mod.SaveChanges(); //通过新建获取产品ID productId = newMateria.Product_Id; } else { //通过查询获取ID productId = checkMateria.Product_Id; } #endregion //Base_ProductInfo isNewMateria=mod.Base_ProductInfo string trackingNum = ""; if (!string.IsNullOrEmpty(item.TrackingNo)) { if (item.TrackingNo.Split('/')[0].Substring(0, 1) == "D") { trackingNum = item.TrackingNo.Split('/')[0].Remove(0, 1); } else { trackingNum = item.TrackingNo.Split('/')[0]; } } #region 添加出库明细 Purchase_OrderList poInfoChild = new Purchase_OrderList(); poInfoChild.ExtendField10 = item.PoNumber;//采购单号 poInfoChild.ItemNumber = item.PoItem;//采购项号 poInfoChild.Product_Id = productId;//产品id poInfoChild.ProductCode = materialCode;//物料编号 poInfoChild.ProductName = item.MaterialName;//物料名称 poInfoChild.BigQty = item.Quantity;//采购数量 poInfoChild.BigUnit = item.Unit;//采购单位 poInfoChild.ExtendField04 = trackingNum;//跟踪号 poInfoChild.ExtendField07 = item.SalesOrder;//销售单号 poInfoChild.SpecAlias = item.SalesOrderItem;//销售单项号 poInfoChild.ProductBarCode = item.StorageLocation;//库区编号G021 poInfoChild.ExtendField02 = item.Plant;//工厂 try//UnEnterQuantity { poInfoChild.UnEnterQuantity = Convert.ToDecimal(item.ConvertDen2); //订单单位转换系数 和下面单位转换有关,例如100kg(ConvertDen2)=126米(ConvertNum2) poInfoChild.UnitConvert = Convert.ToDecimal(item.ConvertNum2); //单位转换值 poInfoChild.Overcharges = Convert.ToDecimal(item.OverDelTol); //容差率上线 } catch (Exception ex) { logtxt.txtWrite("采购单号:" + item.PoNumber + " 物料项号:" + item.PoItem + "物料编号:" + materialCode + " 单位转换或者容差转换失败", 2); continue;//单位转换或者容差转换失败 } //垃圾字段 poInfoChild.ProductModel = materialCode; poInfo.Purchase_OrderList.Add(poInfoChild); // poInfoList.Add(poInfoChild); number++; #endregion #region 反推picklist 里的跟踪号 string saleOrder = item.SalesOrder; string saleItemNumber = item.SalesOrderItem; if (saleOrder != "" && lastTracknum != trackingNum) { if (trackingNum != "") { //明细加跟踪号 lastTracknum = trackingNum; List sendPicklistTrackNumber = mod.Sale_OrderList.Where(x => x.SaleCode == saleOrder && x.ExtendField06 == saleItemNumber && x.TrackingNumber == "").ToList(); if (sendPicklistTrackNumber.Count > 0) { var orderTrack = sendPicklistTrackNumber.GroupBy(x => x.Order_Id); var orders = mod.Sale_Order.ToList();//一次读取不然出库单多的时候会卡死 2021-8-16 修改 if (orderTrack != null) { foreach (var itemOrder in orderTrack) { long orderId = itemOrder.ToList()[0].Order_Id; Sale_Order addTrack = orders.FirstOrDefault(x => x.Order_Id == orderId); //if (addTrack != null && addTrack.OrderType == "SAP生产订单" && addTrack.StatusText == "新建") //if (addTrack != null && addTrack.OrderType == SysGlole.SAP_ORDER_TEXT && addTrack.StatusText == "新建") if (addTrack != null && addTrack.OrderType == SysGlole.SAP_ORDER_TEXT && addTrack.StatusText == Sale_Order_StatusEnum.新建.ToString()) { addTrack.TrackingNumber = trackingNum; foreach (var itemList in itemOrder) { itemList.TrackingNumber = trackingNum; } } } } } } } #endregion } #endregion //先保存主表 然后获取主表ID 再写入明细表 mod.Purchase_Order.Add(poInfo); if (insert_OrderList_EmptyMaterialCodeList != null && insert_OrderList_EmptyMaterialCodeList.Count > 0) {//写入PO明细空物料号表 【Editby shaocx,2025-09-09】 mod.Purchase_OrderList_EmptyMaterialCode.AddRange(insert_OrderList_EmptyMaterialCodeList); } int results = mod.SaveChanges(); for (int h = 0; h < 10; h++) { if (results < 1) { results = mod.SaveChanges(); } else { break; } } var data1 = new { result = true, data = resultPo.Materials }; msg = JsonConvert.SerializeObject(data1); //JsonConvert.SerializeObject(str) #endregion } } } // DateTime timeInfo = DateTime.Now; catch (Exception ex) { logtxt.txtWrite("采购单号:" + PoCode + "产生异常" + ex.Message, 2); return "找不到这个单号"; } var timeInfo1 = DateTime.Now - timeInfo; form.textBox6.Text = "po获取用时: " + timeInfo1 + "\r\n" + form.textBox6.Text; return msg; } /// 按凭证退货 /// 按凭证退货 /// /// /// public string reverser(string res) { return SAPHelper.reverser(res); } #endregion } }