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;
|
|
/// <summary>
|
/// 送货单条码控制器(对应携客云条码信息表操作)
|
/// </summary>
|
[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/";
|
|
/// <summary>
|
/// 单个送货单条码信息保存接口
|
/// </summary>
|
/// <param name="barcodeInfo">送货单条码DTO(单个)</param>
|
/// <returns>统一响应结果</returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 批量送货单条码信息保存接口
|
/// </summary>
|
/// <param name="barcodeInfoList">送货单条码DTO列表(批量)</param>
|
/// <returns>统一响应结果</returns>
|
[HttpPost("SaveList")]
|
public ResponseResult SaveList(List<DeliveryBarcodeInfo> 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);
|
}
|
}
|
|
/// <summary>
|
/// 根据送货单号删除条码数据
|
/// </summary>
|
/// <param name="request">包含送货单号的请求模型</param>
|
/// <returns>统一响应结果</returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 批量根据送货单号删除条码数据
|
/// </summary>
|
/// <param name="request">包含批量送货单号的请求模型(数组格式)</param>
|
/// <returns>统一响应结果</returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 按送货单号+行内码联合删除条码数据
|
/// </summary>
|
/// <param name="request">包含送货单号和行内码的请求模型</param>
|
/// <returns>统一响应结果</returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 批量按送货单号+行内码删除条码数据
|
/// </summary>
|
/// <param name="request">包含批量送货单行的请求模型(数组格式)</param>
|
/// <returns>统一响应结果</returns>
|
[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);
|
}
|
}
|
}
|