using System.Dynamic; using MES.Service.Dto.webApi; using MES.Service.Modes; using MES.Service.service; using MES.Service.service.BasicData; // 假设DeliveryBarcodeManager在该命名空间下,可根据实际调整 using MES.Service.util; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; namespace MESApplication.Controllers.BasicData; /// /// 送货单条码控制器(对应携客云条码信息表操作) /// [ApiController] [Route("api/[controller]")] public class DeliveryBarcodeController : ControllerBase { // 消息中心管理器(复用原逻辑) private readonly MessageCenterManager _messageCenterManager = new(); // 送货单条码业务逻辑管理器(对应业务层,需确保实际项目中存在该类) private readonly DeliveryBarcodeManager _deliveryBarcodeManager = new(); // 接口请求方法(固定POST,与原控制器一致) private readonly string REQUEST_METHOD = "POST"; // 对应数据库表名(携客云条码信息表,与之前定义的实体类表名一致) private readonly string TARGET_TABLE = "TBL_BARCODE_INFORMATION"; // 基础接口URL(根据控制器名定义,保持REST风格) private readonly string BASE_API_URL = "http://localhost:10054/api/DeliveryBarcode/"; /// /// 单个送货单条码信息保存接口 /// /// 送货单条码DTO(单个) /// 统一响应结果 [HttpPost("Save")] public ResponseResult Save(DeliveryBarcodeInfo barcodeInfo) { // 1. 初始化消息中心实体(用于日志/消息记录) var messageEntity = new MessageCenter { TableName = TARGET_TABLE, Url = BASE_API_URL + "Save", // 拼接完整接口URL Method = REQUEST_METHOD, Data = JsonConvert.SerializeObject(barcodeInfo), // 序列化DTO为JSON Status = 1, // 状态标识(1=待处理/处理中,与原逻辑一致) CreateBy = "PL017", // 创建人(复用原配置,可根据实际调整为动态获取) Route = barcodeInfo.DeliveryNo ?? "未知送货单号", // 路由标识(用送货单号区分,无则填默认值) DealWith = 0 // 初始处理状态(0=未处理) }; try { // 2. 业务逻辑处理:调用业务层保存单个条码信息 dynamic resultData = new ExpandoObject(); bool saveSuccess = _deliveryBarcodeManager.Save(barcodeInfo); resultData.tbBillList = saveSuccess; // 存储保存结果(与原返回格式一致) // 3. 更新消息中心实体状态 messageEntity.Result = saveSuccess ? 1 : 0; // 1=成功,0=失败 messageEntity.DealWith = 1; // 1=已处理 _messageCenterManager.save(messageEntity); // 保存消息记录 // 4. 返回成功响应(统一响应格式) return new ResponseResult { status = 0, // 0=成功状态码(与原逻辑一致) message = "单个送货单条码信息保存成功", data = resultData }; } catch (Exception ex) { // 5. 异常处理:捕获异常并更新消息中心 messageEntity.Result = 0; // 失败标识 messageEntity.DealWith = 0; // 未处理标识 messageEntity.ResultData = ex.Message; // 异常信息记录 _messageCenterManager.save(messageEntity); // 保存异常消息 // 6. 返回异常响应(复用工具类的统一异常响应方法) return ResponseResult.ResponseError(ex); } } /// /// 批量送货单条码信息保存接口 /// /// 送货单条码DTO列表(批量) /// 统一响应结果 [HttpPost("SaveList")] public ResponseResult SaveList(List barcodeInfoList) { // 1. 初始化消息中心实体(批量场景专用) var messageEntity = new MessageCenter { TableName = TARGET_TABLE, Url = BASE_API_URL + "SaveList", // 拼接批量接口URL Method = REQUEST_METHOD, Data = JsonConvert.SerializeObject(barcodeInfoList), // 序列化DTO列表为JSON Status = 1, CreateBy = "PL017", Route = barcodeInfoList.Any() ? $"批量_{barcodeInfoList.First().DeliveryNo ?? "未知"}" : "空批量请求", DealWith = 0 }; try { // 2. 业务逻辑处理:调用业务层批量保存 dynamic resultData = new ExpandoObject(); bool batchSaveSuccess = _deliveryBarcodeManager.SaveList(barcodeInfoList); resultData.tbBillList = batchSaveSuccess; // 保持与单个保存一致的返回字段 // 3. 更新消息中心状态 messageEntity.Result = batchSaveSuccess ? 1 : 0; messageEntity.DealWith = 1; _messageCenterManager.save(messageEntity); // 4. 返回成功响应 return new ResponseResult { status = 0, message = $"批量保存成功,共处理{barcodeInfoList.Count}条条码信息", data = resultData }; } catch (Exception ex) { // 5. 异常处理:记录异常并返回错误 messageEntity.Result = 0; messageEntity.DealWith = 0; messageEntity.ResultData = $"批量保存异常:{ex.Message}"; _messageCenterManager.save(messageEntity); return ResponseResult.ResponseError(ex); } } /// /// 根据送货单号删除条码数据 /// /// 包含送货单号的请求模型 /// 统一响应结果 [HttpPost("DeleteByNo")] // 若项目支持 RESTful,可改为 [HttpDelete("DeleteByNo")] public ResponseResult DeleteByNo([FromBody] DeleteByDeliveryNoRequest request) { // 1. 初始化消息中心实体(记录删除操作日志) var messageEntity = new MessageCenter { TableName = TARGET_TABLE, Url = BASE_API_URL + "DeleteByNo", // 接口URL Method = REQUEST_METHOD, Data = JsonConvert.SerializeObject(request), // 序列化请求参数 Status = 1, // 1=处理中 CreateBy = "PL017", // 与原有接口一致的创建人 Route = request.DeliveryNo, // 路由标识=送货单号,便于定位日志 DealWith = 0 // 初始=未处理 }; try { // 2. 调用业务层方法执行删除 dynamic resultData = new ExpandoObject(); bool deleteSuccess = _deliveryBarcodeManager.DeleteByDeliveryNo(request.DeliveryNo); resultData.deletedDeliveryNo = request.DeliveryNo; // 返回删除的送货单号 resultData.isSuccess = deleteSuccess; // 3. 更新消息中心状态(成功) messageEntity.Result = 1; // 1=成功 messageEntity.DealWith = 1; // 1=已处理 _messageCenterManager.save(messageEntity); // 4. 返回成功响应 return new ResponseResult { status = 0, message = $"成功删除送货单号「{request.DeliveryNo}」对应的条码数据", data = resultData }; } catch (Exception ex) { // 5. 异常处理:更新消息中心日志(失败) messageEntity.Result = 0; // 0=失败 messageEntity.DealWith = 0; // 0=未处理 messageEntity.ResultData = ex.Message; // 记录异常信息 _messageCenterManager.save(messageEntity); // 6. 返回统一异常响应 return ResponseResult.ResponseError(ex); } } /// /// 批量根据送货单号删除条码数据 /// /// 包含批量送货单号的请求模型(数组格式) /// 统一响应结果 [HttpPost("DeleteListByNo")] public ResponseResult DeleteListByNo([FromBody] BatchDeleteByDeliveryNoRequest request) { // 1. 初始化消息中心实体 var messageEntity = new MessageCenter { TableName = TARGET_TABLE, Url = BASE_API_URL + "DeleteListByNo", Method = REQUEST_METHOD, Data = JsonConvert.SerializeObject(request), Status = 1, // 处理中 CreateBy = "PL017", // 路由标识:显示前3个单号 Route = $"Batch_{string.Join(",", request.Take(3).Select(item => item.DeliveryNo))}{(request.Count > 3 ? "..." : "")}", DealWith = 0 // 未处理 }; try { // 2. 直接调用业务层(不再在控制器处理列表,逻辑移至业务层) dynamic resultData = new ExpandoObject(); BatchDeleteResult deleteResult = _deliveryBarcodeManager.DeleteListByDeliveryNo(request); // 3. 组装返回数据 resultData.totalRequested = deleteResult.TotalRequested; resultData.totalDeleted = deleteResult.TotalDeleted; resultData.deletedNos = deleteResult.DeletedNos; resultData.notFoundNos = deleteResult.NotFoundNos; resultData.isSuccess = deleteResult.TotalDeleted > 0; // 4. 更新消息中心状态(成功) messageEntity.Result = 1; messageEntity.DealWith = 1; messageEntity.ResultData = $"批量删除完成,共处理{deleteResult.TotalRequested}个单号"; _messageCenterManager.save(messageEntity); // 5. 返回成功响应 return new ResponseResult { status = 0, message = $"成功删除{deleteResult.DeletedNos.Count}个送货单号对应的条码数据,共{deleteResult.TotalDeleted}条记录", data = resultData }; } catch (Exception ex) { // 6. 异常处理 messageEntity.Result = 0; messageEntity.DealWith = 0; messageEntity.ResultData = ex.Message; _messageCenterManager.save(messageEntity); return ResponseResult.ResponseError(ex); } } /// /// 按送货单号+行内码联合删除条码数据 /// /// 包含送货单号和行内码的请求模型 /// 统一响应结果 [HttpPost("DeleteByItem")] // 若用 RESTful 规范,可改为 [HttpDelete("DeleteByItem")] public ResponseResult DeleteByItem([FromBody] DeleteByDeliveryItemRequest request) { // 1. 初始化消息中心实体:记录删除操作日志 var messageEntity = new MessageCenter { TableName = TARGET_TABLE, Url = BASE_API_URL + "DeleteByItem", // 接口URL Method = REQUEST_METHOD, Data = JsonConvert.SerializeObject(request), // 序列化请求参数(含双条件) Status = 1, // 1=处理中 CreateBy = "PL017", // 与原有接口一致的创建人 Route = $"{request.DeliveryNo}_{request.LineNo}", // 路由标识=“单号_行内码”,便于日志定位 DealWith = 0 // 初始=未处理 }; try { // 2. 调用业务层联合删除方法 dynamic resultData = new ExpandoObject(); bool deleteSuccess = _deliveryBarcodeManager.DeleteByDeliveryItem( request.DeliveryNo, request.LineNo ); // 响应中返回关键条件,便于前端确认删除范围 resultData.deletedDeliveryNo = request.DeliveryNo; resultData.deletedLineNo = request.LineNo; resultData.isSuccess = deleteSuccess; // 3. 更新消息中心状态(成功) messageEntity.Result = 1; // 1=成功 messageEntity.DealWith = 1; // 1=已处理 _messageCenterManager.save(messageEntity); // 4. 返回成功响应 return new ResponseResult { status = 0, message = $"成功删除送货单号「{request.DeliveryNo}」-行内码「{request.LineNo}」对应的条码数据", data = resultData }; } catch (Exception ex) { // 5. 异常处理:记录消息中心日志(失败) messageEntity.Result = 0; // 0=失败 messageEntity.DealWith = 0; // 0=未处理 messageEntity.ResultData = ex.Message; // 存储异常信息 _messageCenterManager.save(messageEntity); // 6. 返回统一异常响应 return ResponseResult.ResponseError(ex); } } /// /// 批量按送货单号+行内码删除条码数据 /// /// 包含批量送货单行的请求模型(数组格式) /// 统一响应结果 [HttpPost("DeleteListByItem")] public ResponseResult DeleteListByItem([FromBody] BatchDeleteByDeliveryItemRequest request) { // 1. 初始化消息中心实体 var messageEntity = new MessageCenter { TableName = TARGET_TABLE, Url = BASE_API_URL + "DeleteListByItem", Method = REQUEST_METHOD, Data = JsonConvert.SerializeObject(request), Status = 1, // 处理中 CreateBy = "PL017", // 路由标识:显示前3个"DeliveryNo_LineNo"组合 Route = $"BatchItem_{string.Join(",", request.Take(3).Select(item => $"{item.DeliveryNo}_{item.LineNo}"))}{(request.Count > 3 ? "..." : "")}", DealWith = 0 // 未处理 }; try { // 2. 调用业务层执行批量删除 dynamic resultData = new ExpandoObject(); BatchDeleteResult deleteResult = _deliveryBarcodeManager.DeleteListByDeliveryItem(request); // 3. 组装返回数据 resultData.totalRequested = deleteResult.TotalRequested; resultData.totalDeleted = deleteResult.TotalDeleted; resultData.deletedItems = deleteResult.DeletedNos; // 格式:["DN1_1", "DN1_2"] resultData.notFoundItems = deleteResult.NotFoundNos; resultData.isSuccess = deleteResult.TotalDeleted > 0; // 4. 更新消息中心状态(成功) messageEntity.Result = 1; messageEntity.DealWith = 1; messageEntity.ResultData = $"批量删除完成,共处理{deleteResult.TotalRequested}条送货单行"; _messageCenterManager.save(messageEntity); // 5. 返回成功响应 return new ResponseResult { status = 0, message = $"成功删除{deleteResult.DeletedNos.Count}条送货单行数据,共{deleteResult.TotalDeleted}条记录", data = resultData }; } catch (Exception ex) { // 6. 异常处理 messageEntity.Result = 0; messageEntity.DealWith = 0; messageEntity.ResultData = ex.Message; _messageCenterManager.save(messageEntity); return ResponseResult.ResponseError(ex); } } }