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