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);
}
}
}