分支自 SuZhouGuanHong/TaiYuanTaiZhong

dengjunjie
2024-04-27 0b5ccdca6263cf7a2cee460f30c76ef1efea2811
人工出库,人工入库,人工移库,PDA扫码确认外协物料已被取走接口
已修改6个文件
348 ■■■■■ 文件已修改
代码管理/WMS/WMS_Client/src/api/http.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Client/src/extension/widesea_wms/system/dt_inventory.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Client/src/views/widesea_wms/baseinfo/dt_geometry_data_detectionline.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Client/src/views/widesea_wms/system/dt_inventory.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_inventoryService.cs 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/ToMes/AddToFloat3.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WMS/WMS_Client/src/api/http.js
@@ -12,7 +12,7 @@
let loadingInstance;
let loadingStatus = false;
if (process.env.NODE_ENV == 'development') {
    axios.defaults.baseURL = 'http://192.168.12.101:8098/';
    axios.defaults.baseURL = 'http://127.0.0.1:8098/';
}
else if (process.env.NODE_ENV == 'debug') {
    axios.defaults.baseURL = 'http://192.168.12.101:8098/';
´úÂë¹ÜÀí/WMS/WMS_Client/src/extension/widesea_wms/system/dt_inventory.js
@@ -32,7 +32,24 @@
        //       this.$Message.success('点击了按钮');
        //     }
        //   });
        this.buttons.forEach(x => {
          if(x.value == 'Add')
          {
            x.name = '人工入库'
          }
        });
        this.buttons.forEach(x => {
          if(x.value == 'Update')
          {
            x.name = '人工移库';
          }
        });
        this.buttons.forEach(x => {
          if(x.value == 'Delete')
          {
            x.name = '人工出库'
          }
        });
        //示例:设置修改新建、编辑弹出框字段标签的长度
        // this.boxOptions.labelWidth = 150;
    },
´úÂë¹ÜÀí/WMS/WMS_Client/src/views/widesea_wms/baseinfo/dt_geometry_data_detectionline.vue
@@ -30,31 +30,31 @@
                sortName: "ID"
            });
            const editFormFields = ref({"TypeId":"","Description":"","a":"","b":"","c":"","d":"","e":"","f":"","g":"","h":"","skip_01":"","skip_02":"","skip_03":"","skip_04":"","skip_05":"","skip_06":"","skip_07":"","skip_08":"","skip_09":"","skip_10":"","skip_11":"","skip_12":"","skip_13":"","skip_14":"","skip_15":""});
            const editFormOptions = ref([[{"title":"","required":true,"field":"TypeId","type":"text"},
            const editFormOptions = ref([[{"title":"TypeId","required":true,"field":"TypeId","type":"text"},
                               {"title":"图号","required":true,"field":"Description","type":"text"}],
                              [{"title":"","required":true,"field":"a","type":"text"},
                               {"title":"","required":true,"field":"b","type":"text"}],
                              [{"title":"","required":true,"field":"c","type":"text"},
                               {"title":"","required":true,"field":"d","type":"text"}],
                              [{"title":"","required":true,"field":"e","type":"text"},
                               {"title":"","required":true,"field":"f","type":"text"}],
                              [{"title":"","required":true,"field":"g","type":"text"},
                               {"title":"","required":true,"field":"h","type":"text"}],
                              [{"title":"","field":"skip_01","type":"text"},
                               {"title":"","field":"skip_02","type":"text"}],
                              [{"title":"","field":"skip_03","type":"text"},
                               {"title":"","field":"skip_04","type":"text"}],
                              [{"title":"","field":"skip_05","type":"text"},
                               {"title":"","field":"skip_06","type":"text"}],
                              [{"title":"","field":"skip_07","type":"text"},
                               {"title":"","field":"skip_08","type":"text"}],
                              [{"title":"","field":"skip_09","type":"text"},
                               {"title":"","field":"skip_10","type":"text"}],
                              [{"title":"","field":"skip_11","type":"text"},
                               {"title":"","field":"skip_12","type":"text"}],
                              [{"title":"","field":"skip_13","type":"text"},
                               {"title":"","field":"skip_14","type":"text"}],
                              [{"title":"","field":"skip_15","type":"text"}]]);
                              [{"title":"a","required":true,"field":"a","type":"text"},
                               {"title":"b","required":true,"field":"b","type":"text"}],
                              [{"title":"c","required":true,"field":"c","type":"text"},
                               {"title":"d","required":true,"field":"d","type":"text"}],
                              [{"title":"e","required":true,"field":"e","type":"text"},
                               {"title":"f","required":true,"field":"f","type":"text"}],
                              [{"title":"g","required":true,"field":"g","type":"text"},
                               {"title":"h","required":true,"field":"h","type":"text"}],
                              [{"title":"skip_01","field":"skip_01","type":"text"},
                               {"title":"skip_02","field":"skip_02","type":"text"},
                               {"title":"skip_03","field":"skip_03","type":"text"}],
                              [{"title":"skip_04","field":"skip_04","type":"text"},
                               {"title":"skip_05","field":"skip_05","type":"text"},
                               {"title":"skip_06","field":"skip_06","type":"text"}],
                              [{"title":"skip_07","field":"skip_07","type":"text"},
                               {"title":"skip_08","field":"skip_08","type":"text"},
                               {"title":"skip_09","field":"skip_09","type":"text"}],
                              [{"title":"skip_10","field":"skip_10","type":"text"},
                               {"title":"skip_11","field":"skip_11","type":"text"},
                               {"title":"skip_12","field":"skip_12","type":"text"}],
                              [{"title":"skip_13","field":"skip_13","type":"text"},
                               {"title":"skip_14","field":"skip_14","type":"text"},
                               {"title":"skip_15","field":"skip_15","type":"text"}]]);
            const searchFormFields = ref({"TypeId":"","Description":""});
            const searchFormOptions = ref([[{"title":"图号","field":"Description","type":"like"},{"title":"","field":"TypeId","type":"like"}]]);
            const columns = ref([{field:'ID',title:'ID',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
´úÂë¹ÜÀí/WMS/WMS_Client/src/views/widesea_wms/system/dt_inventory.vue
@@ -29,8 +29,11 @@
                url: "/dt_inventory/",
                sortName: "ID"
            });
            const editFormFields = ref({});
            const editFormOptions = ref([]);
            const editFormFields = ref({"stationCode":"","SN":""});
            const editFormOptions = ref([
                [{"title":"缓存架编号","required":true,"field":"stationCode"}],//,"disabled": true
                [{"title":"车轮SN号","required":true,"field":"SN"}],
            ]);
            const searchFormFields = ref({"SN":"","Name":"","HearthNumber":"","HeatNumber":"","BilletNumber":"","remark":""});
            const searchFormOptions = ref([
                [{"title":"车轮SN号","field":"SN","type":"like"},{"title":"货位编号","field":"stationCode","type":"like"},{"title":"产品名称","field":"Name","type":"like"}],
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_inventoryService.cs
@@ -21,6 +21,21 @@
using WIDESEA_Comm.LogInfo;
using WIDESEA_Core.ManageUser;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using WIDESEA_Core.EFDbContext;
using WIDESEA_WMS.Repositories;
using System.Collections.Generic;
using System.Threading.Tasks;
using static WIDESEA_Comm.MES_Info.BasicSN;
using System.Collections;
using static FreeSql.Internal.GlobalFilter;
using WIDESEA_Comm.MES_Info.Request;
using System.Xml.Linq;
using Newtonsoft.Json;
using Confluent.Kafka;
using WIDESEA_WMS.Common;
using WIDESEA_Comm.MES_Info;
using System.Reflection;
using static System.Collections.Specialized.BitVector32;
namespace WIDESEA_WMS.Services
{
@@ -42,6 +57,170 @@
            //base.Init(dbRepository);
        }
        /// <summary>
        /// æ·»åŠ åº“å­˜
        /// </summary>
        /// <param name="saveDataModel"></param>
        /// <returns></returns>
        public override WebResponseContent Add(SaveModel saveDataModel)
        {
            WebResponseContent content = new WebResponseContent();
            VOLContext context = new VOLContext();
            IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
            Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
            var stationCode = saveDataModel.MainData["stationCode"].ToString();
            try
            {
                if (string.IsNullOrEmpty(stationCode)) throw new Exception($"缓存架编号不能为空!");
                if (!stationCode.Contains("B") && !stationCode.Contains("C") && !stationCode.Contains("D")) throw new Exception($"缓存架类型有误!");
                var station = stationinfoRepository.Find(x => x.stationCode == stationCode).FirstOrDefault();
                if (station == null) throw new Exception($"未找到货位{stationCode}");
                var bindSNs = saveDataModel.MainData["SN"].ToString().Split(",");
                var SNS = bindSNs.GroupBy(x => x).Where(x => x.Count() > 1).Select(x => x.Key);
                foreach (var SN in SNS)
                {
                    throw new Exception($"重复的SN号{SN}");
                }
                List<detail> list = new List<detail>();
                List<VV_Mes_Workinfo> workinfos = new List<VV_Mes_Workinfo>();
                foreach (var item in bindSNs)
                {
                    var work = workinfoRepository.Find(x => x.SN == item && x.processCode == "17").FirstOrDefault();
                    if (work == null) throw new Exception($"未找到车轮SN号:{item}的工单信息!");
                    workinfos.Add(work);
                    detail detail = new detail();
                    detail.sn = item;
                    list.Add(detail);
                }
                agvInWarehousePara outWarehousePara = new agvInWarehousePara()
                {
                    //WorkOrder = task.jobID,
                    zoneID = stationCode,
                    //processCode = task.agv_worktype.ToString(),
                    details = list,
                    layerNo = 1,
                    stackID = "1",
                    warehouseName = "Agv库",
                    Operator = UserContext.Current.UserName,
                };
                var postJson = JsonConvert.SerializeObject(outWarehousePara);
                var mesData = Request.RequestData(postJson, MESAPIAddress.IPAddress_MES + "agvInWarehouse");
                if (mesData.Contains("连接尝试失败")) throw new Exception(mesData);
                MES_Response requestMes = JsonConvert.DeserializeObject<MES_Response>(mesData);
                if (requestMes.code == "200" && requestMes.Type == "success")
                {
                    //日志记录上传数据成功
                    WriteWMSLog.LogAdd("", "成功", "MES", "WMS", postJson, mesData, "人工同步MES车轮入库", "agvInWarehouse", requestMes.message);
                    foreach (var workinfo in workinfos)
                    {
                        dt_inventory inventory = new dt_inventory()
                        {
                            SN = workinfo.SN,
                            Name = workinfo.productName,
                            FigureNumber = workinfo.drawingNo,
                            materialCode = workinfo.materialCode,
                            HeatNumber = workinfo.heatID,
                            drawingNoVer = workinfo.drawingNoVer,
                            BilletNumber = workinfo.billetID,
                            OnlineTime = DateTime.Now,
                            Operator = "admin",
                            stationCode = stationCode,
                            area = station.area,
                            jobID = workinfo.jobID,
                            workOrder = workinfo.workOrder,
                            ID = Guid.NewGuid()
                        };
                        _repository.Add(inventory, true);
                    }
                    WriteDBLog.Write($"手动添加库存 ", $"货位编号:{stationCode};SN号:{saveDataModel.MainData["SN"]}", LogState.Sucess, "WMS", UserContext.Current.UserName);
                }
                else
                {
                    WriteWMSLog.LogAdd("", "失败", "MES", "WMS", postJson, mesData, "人工同步MES车轮入库", "agvInWarehouse", requestMes.message);
                    throw new Exception("人工同步MES车轮入库失败!" + requestMes.message);
                }
            }
            catch (Exception ex)
            {
                content.Message = ex.Message;
                WriteDBLog.Write($"手动添加库存 ", new { é”™è¯¯ä¿¡æ¯ = ex.Message, æ•°æ® = $"货位编号:{stationCode};SN号:{saveDataModel.MainData["SN"]}" }, LogState.Error, "WMS", UserContext.Current.UserName);
            }
            return content;
            //return base.Add(saveDataModel);
        }
        /// <summary>
        /// ä¿®æ”¹åº“å­˜
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public override WebResponseContent Update(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            string str = "";
            try
            {
                VOLContext context = new VOLContext();
                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
                var stationCode = saveModel.MainData["stationCode"].ToString();
                if (string.IsNullOrEmpty(stationCode)) throw new Exception($"缓存架编号不能为空!");
                if (!stationCode.Contains("B") && !stationCode.Contains("C") && !stationCode.Contains("D")) throw new Exception($"缓存架类型有误!");
                if (!stationinfoRepository.Find(x => x.stationCode == stationCode).Any()) throw new Exception($"未找到货位{stationCode}");
                var inventory = _repository.Find(x => x.ID.ToString() == saveModel.MainData["ID"].ToString()).FirstOrDefault();
                str = $"原货位编号:{inventory.stationCode};现货位编号:{stationCode};SN号:{inventory.SN}";
                List<detail1> list1 = new List<detail1>();
                detail1 detail = new detail1();
                detail.sn = inventory.SN;
                list1.Add(detail);
                agvMoveWarehousePara moveWarehousePara = new agvMoveWarehousePara()
                {
                    fromZoneID = inventory.stationCode,
                    toZoneID = stationCode,
                    details = list1,
                    fromLayerNo = "1",
                    fromStackID = "1",
                    fromWarehouseName = "Agv库",
                    toLayerNo = "1",
                    toStackID = "1",
                    toWarehouseName = "Agv库",
                    Operator = UserContext.Current.UserName,
                };
                var postJson = JsonConvert.SerializeObject(moveWarehousePara);
                var mesData = Request.RequestData(postJson, MESAPIAddress.IPAddress_MES + "agvMoveWarehouse");
                if (mesData.Contains("连接尝试失败"))
                    throw new Exception(mesData);
                MES_Response requestMes = JsonConvert.DeserializeObject<MES_Response>(mesData);
                if (requestMes.code == "200" && requestMes.Type == "success")
                {
                    //日志记录上传数据成功
                    WriteWMSLog.LogAdd("", "成功", "MES", "WMS", postJson, mesData, "人工同步MES车轮移库", "agvMoveWarehouse", requestMes.message);
                    inventory.stationCode = stationCode;
                    _repository.Update(inventory, true);
                    WriteDBLog.Write($"手动移库库存 ", str, LogState.Sucess, "WMS", UserContext.Current.UserName);
                }
                else
                {
                    WriteWMSLog.LogAdd("", "失败", "MES", "WMS", postJson, mesData, "人工同步MES车轮移库", "agvMoveWarehouse", requestMes.message);
                    throw new Exception("人工同步MES车轮移库失败!" + requestMes.message);
                }
                content.OK();
            }
            catch (Exception ex)
            {
                content.Message = ex.Message;
                WriteDBLog.Write($"手动移库库存 ", new { é”™è¯¯ä¿¡æ¯ = ex.Message, æ•°æ® = str }, LogState.Error, "WMS", UserContext.Current.UserName);
            }
            return content;
            //return base.Update(saveModel);
        }
        /// <summary>
        /// åˆ é™¤åº“å­˜
        /// </summary>
        /// <param name="keys"></param>
        /// <param name="delList"></param>
        /// <returns></returns>
        public override WebResponseContent Del(object[] keys, bool delList = true)
        {
            WebResponseContent content = new WebResponseContent();
@@ -54,12 +233,65 @@
                    KeyList.Add(key);
                }
                var inventoryList= _repository.Find(x=>KeyList.Contains(x.ID.ToString())).ToList();
                 str = $"{string.Join('、', inventoryList.Select(t => t.SN).ToArray())}";
                content = base.Del(keys, delList);
                WriteDBLog.Write($"手动删除库存 ", str, LogState.Sucess, "WMS", UserContext.Current.UserName);
                //str = $"{string.Join('、', inventoryList.Select(t => t.SN).ToArray())}";
                foreach (var inventorys in inventoryList.GroupBy(x => x.stationCode))
                {
                    try
                    {
                        List<detail> lists = new List<detail>();
                        foreach (var inventory in inventorys)
                        {
                            detail detail = new detail();
                            detail.sn = inventory.SN;
                            lists.Add(detail);
                            str = str == "" ? inventory.SN : "," + inventory.SN;
                        }
                        agvInWarehousePara outWarehousePara = new agvInWarehousePara()
                        {
                            //WorkOrder = task.jobID,
                            zoneID = inventorys.Key,
                            //processCode = task.agv_worktype.ToString(),
                            details = lists,
                            layerNo = 1,
                            stackID = "1",
                            warehouseName = "Agv库",
                            Operator = UserContext.Current.UserName,
                        };
                        var postJson = JsonConvert.SerializeObject(outWarehousePara);
                        var mesData = Request.RequestData(postJson, MESAPIAddress.IPAddress_MES + "agvOutWarehouse");
                        if (mesData.Contains("连接尝试失败")) throw new Exception(mesData);
                        MES_Response requestMes = JsonConvert.DeserializeObject<MES_Response>(mesData);
                        if (requestMes.code == "200" && requestMes.Type == "success")
                        {
                            //日志记录上传数据成功
                            WriteWMSLog.LogAdd("", "成功", "MES", "WMS", postJson, mesData, "人工同步MES车轮出库", "agvOutWarehouse", requestMes.message);
                            foreach (var inventory in inventorys)
                            {
                                _repository.Delete(inventory, true);
                            }
                            WriteDBLog.Write($"手动删除库存 ", $"货位编号:{inventorys.Key};SN号:{str}", LogState.Sucess, "WMS", UserContext.Current.UserName);
                        }
                        else
                        {
                            WriteWMSLog.LogAdd("", "失败", "MES", "WMS", postJson, mesData, "人工同步MES车轮出库", "agvOutWarehouse", requestMes.message);
                            throw new Exception("人工同步MES车轮出库失败!" + requestMes.message);
                        }
            }
            catch (Exception ex)
            {
                        content.Message = ex.Message;
                        WriteDBLog.Write($"手动删除库存 ", new { é”™è¯¯ä¿¡æ¯ = ex.Message, æ•°æ® = str }, LogState.Error, "WMS", UserContext.Current.UserName);
                    }
                }
                content.OK();
                //content = base.Del(keys, delList);
                //WriteDBLog.Write($"手动删除库存 ", str, LogState.Sucess, "WMS", UserContext.Current.UserName);
            }
            catch (Exception ex)
            {
                content.Message = ex.Message;
                WriteDBLog.Write($"手动删除库存 ", new { é”™è¯¯ä¿¡æ¯ = ex.Message, æ•°æ® = str }, LogState.Error, "WMS", UserContext.Current.UserName);
            }
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/ToMes/AddToFloat3.cs
@@ -3,10 +3,13 @@
using WIDESEA_Comm;
using WIDESEA_Comm.LogInfo;
using WIDESEA_Common;
using WIDESEA_Core.EFDbContext;
using WIDESEA_Core.ManageUser;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Entity.DomainModels.Mes;
using WIDESEA_WMS.IRepositories;
using WIDESEA_WMS.Repositories;
namespace WIDESEA_WMS
{
@@ -73,5 +76,36 @@
            }
            return content;
        }
        /// <summary>
        /// å¤–协货位扫码确认物料已被取走
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent Confirmedcut(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                VOLContext context = new VOLContext();
                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
                string sn = saveModel.MainData["from_address"].ToString();
                var station = stationinfoRepository.Find(x => x.bindSN.Contains(sn) && (x.stationCode.Contains("W01001001") || x.stationCode.Contains("W01001002") || x.stationCode.Contains("W01001003"))).FirstOrDefault();
                if (station == null) throw new Exception($"未找到车轮SN号:{sn}的外协货位信息!");
                station.Number = string.Empty;
                station.billetID = string.Empty;
                station.heatNumber = string.Empty;
                station.stationType = string.Empty;
                station.tray_status = "EmptyTray";
                station.lastUpdateTime = DateTime.Now;
                stationinfoRepository.Update(station, true);
                content.OK();
            }
            catch (Exception ex)
            {
                content.Message = ex.Message;
            }
            return content;
        }
    }
}