| | |
| | | /// 批量拆盘确认 - 一次性调用MES解绑整个托盘 |
| | | /// </summary> |
| | | /// <param name="palletCode">源托盘号</param> |
| | | /// <param name="deviceName">设备名称(用于动态MES凭证查询)</param> |
| | | /// <returns>操作结果</returns> |
| | | public async Task<WebResponseContent> SplitPalletConfirmAsync(string palletCode) |
| | | public async Task<WebResponseContent> SplitPalletConfirmAsync(string palletCode, string deviceName) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | if (sfcList == null || !sfcList.Any()) |
| | | return content.Error("临时表中电芯列表为空"); |
| | | |
| | | // 2. 调用MES解绑 |
| | | // 2. 获取MES设备配置(动态凭证) |
| | | string equipmentCode = StockConstants.MES_EQUIPMENT_CODE; |
| | | string resourceCode = StockConstants.MES_RESOURCE_CODE; |
| | | string token = null; |
| | | |
| | | if (!string.IsNullOrWhiteSpace(deviceName)) |
| | | { |
| | | var mesConfig = ResolveMesConfig(deviceName, palletCode); |
| | | if (mesConfig != null) |
| | | { |
| | | equipmentCode = mesConfig.EquipmentCode; |
| | | resourceCode = mesConfig.ResourceCode; |
| | | token = mesConfig.Token; |
| | | } |
| | | } |
| | | |
| | | // 3. 调用MES解绑 |
| | | var unbindRequest = new UnBindContainerRequest |
| | | { |
| | | EquipmentCode = StockConstants.MES_EQUIPMENT_CODE, |
| | | ResourceCode = StockConstants.MES_RESOURCE_CODE, |
| | | EquipmentCode = equipmentCode, |
| | | ResourceCode = resourceCode, |
| | | LocalTime = DateTime.Now, |
| | | ContainCode = palletCode, |
| | | SfcList = sfcList |
| | | }; |
| | | var unbindResult = _mesService.UnBindContainer(unbindRequest); |
| | | var unbindResult = string.IsNullOrWhiteSpace(token) |
| | | ? _mesService.UnBindContainer(unbindRequest) |
| | | : _mesService.UnBindContainer(unbindRequest, token); |
| | | if (unbindResult == null || unbindResult.Data == null || !unbindResult.Data.IsSuccess) |
| | | { |
| | | return content.Error($"MES解绑失败: {unbindResult?.Data?.Msg ?? unbindResult?.ErrorMessage ?? "未知错误"}"); |
| | | } |
| | | |
| | | // 3. 删除临时表记录 |
| | | // 4. 删除临时表记录 |
| | | await SqlSugarClient.Deleteable<Dt_SplitTemp>().Where(t => t.PalletCode == palletCode).ExecuteCommandAsync(); |
| | | |
| | | return content.OK("批量拆盘确认成功"); |
| | |
| | | /// 批量组盘确认 - 一次性调用MES绑定整个托盘 |
| | | /// </summary> |
| | | /// <param name="palletCode">目标托盘号</param> |
| | | /// <param name="deviceName">设备名称(用于动态MES凭证查询)</param> |
| | | /// <returns>操作结果</returns> |
| | | public async Task<WebResponseContent> GroupPalletConfirmAsync(string palletCode) |
| | | public async Task<WebResponseContent> GroupPalletConfirmAsync(string palletCode, string deviceName) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | if (details == null || !details.Any()) |
| | | return content.Error("托盘下无电芯数据"); |
| | | |
| | | // 2. 调用MES绑定 |
| | | // 2. 获取MES设备配置(动态凭证) |
| | | string equipmentCode = StockConstants.MES_EQUIPMENT_CODE; |
| | | string resourceCode = StockConstants.MES_RESOURCE_CODE; |
| | | string token = null; |
| | | |
| | | if (!string.IsNullOrWhiteSpace(deviceName)) |
| | | { |
| | | var mesConfig = ResolveMesConfig(deviceName, palletCode); |
| | | if (mesConfig != null) |
| | | { |
| | | equipmentCode = mesConfig.EquipmentCode; |
| | | resourceCode = mesConfig.ResourceCode; |
| | | token = mesConfig.Token; |
| | | } |
| | | } |
| | | |
| | | // 3. 调用MES绑定 |
| | | var bindRequest = new BindContainerRequest |
| | | { |
| | | ContainerCode = palletCode, |
| | | EquipmentCode = StockConstants.MES_EQUIPMENT_CODE, |
| | | ResourceCode = StockConstants.MES_RESOURCE_CODE, |
| | | EquipmentCode = equipmentCode, |
| | | ResourceCode = resourceCode, |
| | | LocalTime = DateTime.Now, |
| | | OperationType = StockConstants.MES_BIND_OPERATION_TYPE, |
| | | ContainerSfcList = details.Select(d => new ContainerSfcItem |
| | |
| | | Location = d.InboundOrderRowNo.ToString() |
| | | }).ToList() |
| | | }; |
| | | var bindResult = _mesService.BindContainer(bindRequest); |
| | | var bindResult = string.IsNullOrWhiteSpace(token) |
| | | ? _mesService.BindContainer(bindRequest) |
| | | : _mesService.BindContainer(bindRequest, token); |
| | | if (bindResult == null || bindResult.Data == null || !bindResult.Data.IsSuccess) |
| | | { |
| | | return content.Error($"MES绑定失败: {bindResult?.Data?.Msg ?? bindResult?.ErrorMessage ?? "未知错误"}"); |
| | |
| | | return content.Error($"批量组盘确认失败: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据设备名称和托盘号解析MES设备配置 |
| | | /// </summary> |
| | | /// <param name="deviceName">设备名称</param> |
| | | /// <param name="palletCode">托盘号(用于查询仓库编码)</param> |
| | | /// <returns>MES设备配置,不存在时返回null</returns> |
| | | private Dt_MESDeviceConfig ResolveMesConfig(string deviceName, string palletCode) |
| | | { |
| | | // 换盘机械手需要区分仓库 |
| | | if (deviceName.Contains("换盘")) |
| | | { |
| | | // 查询托盘对应的仓库编码 |
| | | var stockInfo = StockInfoService.Repository.QueryFirst(s => s.PalletCode == palletCode); |
| | | if (stockInfo != null && stockInfo.WarehouseId > 0) |
| | | { |
| | | var warehouse = _warehouseService.Repository.QureyDataById(stockInfo.WarehouseId); |
| | | if (warehouse != null && !string.IsNullOrWhiteSpace(warehouse.WarehouseCode)) |
| | | { |
| | | // 先按设备名+仓库编码查询 |
| | | var config = SqlSugarClient.Queryable<Dt_MESDeviceConfig>() |
| | | .Where(c => c.DeviceName == deviceName && c.WarehouseCode == warehouse.WarehouseCode) |
| | | .First(); |
| | | if (config != null) |
| | | return config; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 按设备名称查询(适用于组盘机械手或换盘机械手未找到仓库匹配的情况) |
| | | return SqlSugarClient.Queryable<Dt_MESDeviceConfig>() |
| | | .Where(c => c.DeviceName == deviceName) |
| | | .First(); |
| | | } |
| | | } |
| | | } |