using MES.Service.DB; using MES.Service.Dto.service; using MES.Service.Modes; using Newtonsoft.Json; using System.Text; namespace MES.Service.service.Warehouse; public class MesPalletBinding1Manager : Repository { /// /// 调用接口获取栈板绑定信息 /// /// 栈板码 /// 接口返回结果 public async Task GetTransferListByStackCodeAsync( MesPalletBinding palletBinding) { try { // API URL string apiUrl = "http://no2api.dream-maker.com/bu/storage/pallet/getTransferList"; // 构建请求体 var requestData = new { stackCode = palletBinding.StackCode }; var jsonContent = JsonConvert.SerializeObject(requestData); var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); // 发送HTTP请求 using (var httpClient = new HttpClient()) { var response = await httpClient.PostAsync(apiUrl, content); var responseContent = await response.Content.ReadAsStringAsync(); // 反序列化响应 var result = JsonConvert.DeserializeObject( responseContent); return result; } } catch (Exception ex) { throw new Exception($"调用接口获取栈板绑定信息失败: {ex.Message}"); } } /// /// 将接口返回的数据插入到数据库中 /// /// 栈板绑定信息 /// 插入记录数 public int InsertPalletBindingData(MesPalletBinding palletBinding) { var response = GetTransferListByStackCodeAsync(palletBinding).Result; if (response?.Data?.SnList == null || string.IsNullOrEmpty(response.Data.StackCode)) { return 0; } int insertedCount = 0; try { // 准备要插入的数据列表 var bindingList = new List(); foreach (var snItem in response.Data.SnList) { var binding = new MesPalletBinding1 { Stackcode = response.Data.StackCode, SnNo = snItem.SnNo, TicketNo = snItem.TickeNo, Mediumboxcode = snItem.MediumBoxCode, CreateDate = DateTime.Now, IsInbound = 0 // 默认未入库 }; bindingList.Add(binding); } // 批量插入数据到数据库 if (bindingList.Any()) { // 批量插入新数据 var insertedIds = Db.Insertable(bindingList).PageSize(1) .IgnoreColumnsNull() .ExecuteCommand(); insertedCount = insertedIds; } } catch (Exception ex) { throw new Exception($"插入栈板绑定数据失败: {ex.Message}"); } return insertedCount; } /// /// 检查栈板码在数据库中是否存在 /// /// 栈板码 /// 存在返回true,否则返回false public bool CheckStackCodeExists(string stackCode) { try { if (string.IsNullOrEmpty(stackCode)) { return false; } // 查询MES_PALLET_BINDING表中是否存在该栈板码的数据 var exists = Db.Queryable() .Any(x => x.Stackcode == stackCode); return exists; } catch (Exception ex) { throw new Exception($"检查栈板码是否存在时出错: {ex.Message}"); } } /// /// 将接口返回的数据插入到数据库中(带存在性检查) /// /// 栈板绑定信息 /// 操作结果 public async Task InsertPalletBindingDataWithCheckAsync(MesPalletBinding palletBinding) { // 先检查栈板码是否存在 bool exists = CheckStackCodeExists(palletBinding.StackCode); return exists ? 1 : // 调用原来的插入方法 InsertPalletBindingData(palletBinding); } /// /// 根据栈板码删除旧数据 /// /// 栈板码 /// 删除记录数 private async Task DeleteByStackCodeAsync(string stackCode) { try { var deleteResult = await Db.Deleteable() .Where(x => x.Stackcode == stackCode) .ExecuteCommandAsync(); return deleteResult; } catch (Exception ex) { // 记录错误但不抛出异常,允许插入操作继续 Console.WriteLine($"删除旧数据时出错: {ex.Message}"); return 0; } } }