using System.Dynamic;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using MES.Service.service;
using MES.Service.service.BasicData;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace MESApplication.Controllers.BasicData;
///
/// 收料单控制器(处理收料单相关API请求,关联MES_INV_ITEM_ARN主表与MES_INV_ITEM_ARN_DETAIL明细表)
///
[ApiController]
[Route("api/[controller]")]
public class MesInvItemArnController : ControllerBase
{
// 消息中心管理器(用于接口日志记录)
private readonly MessageCenterManager _messageCenterManager = new();
// 收料单业务逻辑管理器(核心业务处理)
private readonly MesInvItemArnManager _mesInvItemArnManager = new();
// 接口基础配置(请求方法、表名、基础URL)
private readonly string _method = "POST";
private readonly string _tableName = "MES_INV_ITEM_ARN";
private readonly string _baseUrl = "http://localhost:10054/api/MesInvItemArn/";
///
/// 保存收料单(单条,含主表+明细)
///
/// ERP收料单数据(含主表ErpSltza+明细ErpSltzBList)
/// 保存结果(成功/失败状态+详情)
[HttpPost("Save")]
public ResponseResult Save(ErpSltz erpSltz)
{
// 1. 初始化消息中心实体(记录接口调用日志,用于追溯)
var messageEntity = new MessageCenter
{
TableName = _tableName,
Url = _baseUrl + "Save",
Method = _method,
Data = JsonConvert.SerializeObject(erpSltz),
Status = 1, // 状态:1-待处理
CreateBy = "SYSTEM", // 创建人:系统标识
Route = erpSltz?.ErpSltza?.DeliveryNo ?? "未知单据号" // 路由标识:用收料单单据号
};
try
{
dynamic resultData = new ExpandoObject();
// 2. 调用业务层保存方法(处理主表+明细同步)
var saveSuccess = _mesInvItemArnManager.Save(erpSltz);
resultData.saveResult = saveSuccess;
// 3. 更新消息中心状态(保存成功)
messageEntity.Result = 1; // 结果:1-成功
messageEntity.DealWith = 1; // 处理状态:1-已处理
_messageCenterManager.save(messageEntity);
// 4. 返回成功响应
return new ResponseResult
{
status = 0,
message = "收料单保存成功",
data = resultData
};
}
catch (Exception ex)
{
// 5. 异常处理:记录错误日志
messageEntity.Result = 0; // 结果:0-失败
messageEntity.DealWith = 0; // 处理状态:0-未处理
messageEntity.ResultData = ex.Message + (ex.InnerException != null ? $"(内部异常:{ex.InnerException.Message})" : ""); // 错误详情
_messageCenterManager.save(messageEntity);
// 6. 返回错误响应
return ResponseResult.ResponseError(ex);
}
}
///
/// 批量保存收料单(多条,含主表+明细,事务保证一致性)
///
/// ERP收料单列表(每条含主表+明细)
/// 批量保存结果(总条数、成功条数)
[HttpPost("SaveList")]
public ResponseResult SaveList(List erpSltzList)
{
// 1. 初始化消息中心实体
var messageEntity = new MessageCenter
{
TableName = _tableName,
Url = _baseUrl + "SaveList",
Method = _method,
Data = JsonConvert.SerializeObject(erpSltzList),
Status = 1,
CreateBy = "SYSTEM",
Route = $"批量数据(共{erpSltzList?.Count ?? 0}条)"
};
try
{
dynamic resultData = new ExpandoObject();
int totalCount = erpSltzList?.Count ?? 0;
// 2. 调用业务层批量保存方法(事务内处理,要么全成功要么全失败)
var batchSaveSuccess = _mesInvItemArnManager.SaveList(erpSltzList);
// 3. 组装返回数据(总条数、成功条数)
resultData.totalCount = totalCount;
resultData.successCount = batchSaveSuccess ? totalCount : 0;
// 4. 更新消息中心状态
messageEntity.Result = batchSaveSuccess ? 1 : 0;
messageEntity.DealWith = 1;
_messageCenterManager.save(messageEntity);
// 5. 返回成功响应
return new ResponseResult
{
status = 0,
message = $"收料单批量保存完成,共{totalCount}条数据",
data = resultData
};
}
catch (Exception ex)
{
// 6. 异常处理:记录错误日志
messageEntity.Result = 0;
messageEntity.DealWith = 0;
messageEntity.ResultData = ex.Message + (ex.InnerException != null ? $"(内部异常:{ex.InnerException.Message})" : "");
_messageCenterManager.save(messageEntity);
// 7. 返回错误响应
return ResponseResult.ResponseError(ex);
}
}
/*///
/// 获取收料单列表(主表数据,支持后续扩展分页/筛选)
///
/// 收料单列表(总条数+列表数据)
[HttpGet("GetList")]
public ResponseResult GetList()
{
try
{
// 1. 调用业务层查询列表方法
var invArnList = _mesInvItemArnManager.GetList();
// 2. 返回查询结果
return new ResponseResult
{
status = 0,
message = "收料单列表查询成功",
data = new { total = invArnList.Count, list = invArnList }
};
}
catch (Exception ex)
{
// 3. 异常处理
return ResponseResult.ResponseError(ex);
}
}
///
/// 根据ID获取收料单详情(含主表+关联明细)
///
/// 收料单主表ID(Guid字符串)
/// 收料单主表+明细详情
// [HttpGet("GetById")]
// public ResponseResult GetById(string id)
// {
// try
// {
// // 1. 校验ID格式(Guid转换)
// if (!Guid.TryParse(id, out Guid mainId))
// {
// return new ResponseResult
// {
// status = 1,
// message = "ID格式错误,请传入有效的Guid字符串",
// data = null
// };
// }
//
// // 2. 调用业务层查询详情方法(主表+明细)
// var (mainEntity, detailList) = _mesInvItemArnManager.GetByIdWithDetails(mainId);
//
// // 3. 组装返回数据(主表+明细)
// var resultData = new
// {
// main = mainEntity,
// details = detailList
// };
//
// // 4. 返回详情结果
// return new ResponseResult
// {
// status = 0,
// message = "收料单详情查询成功",
// data = resultData
// };
// }
// catch (Exception ex)
// {
// // 5. 异常处理
// return ResponseResult.ResponseError(ex);
// }
// }
///
/// 根据单据号获取收料单详情(含主表+关联明细)
///
/// 收料单单据号
/// 收料单主表+明细详情
[HttpGet("GetByBillNo")]
public ResponseResult GetByBillNo(string billNo)
{
try
{
// 1. 校验单据号参数
if (string.IsNullOrEmpty(billNo))
{
return new ResponseResult
{
status = 1,
message = "单据号不能为空",
data = null
};
}
// 2. 调用业务层按单据号查询方法(主表+明细)
var (mainEntity, detailList) = _mesInvItemArnManager.GetByBillNo(billNo);
// 3. 组装返回数据
var resultData = new
{
main = mainEntity,
details = detailList
};
// 4. 返回详情结果
return new ResponseResult
{
status = 0,
message = $"单据号【{billNo}】收料单详情查询成功",
data = resultData
};
}
catch (Exception ex)
{
// 5. 异常处理
return ResponseResult.ResponseError(ex);
}
}
///
/// 新增收料单(直接传入MES实体,适用于内部系统创建)
///
/// 收料单主表实体
/// 新增结果(ID+成功状态)
[HttpPost("Insert")]
public ResponseResult Insert([FromBody] MesInvItemArn entity)
{
try
{
// 1. 补全实体默认值(主键、创建时间)
entity.Id = Guid.NewGuid();
entity.CreateDate = DateTime.Now;
entity.CreateBy = "SYSTEM"; // 默认为系统创建,可根据实际需求改为当前登录用户
// entity.LastUpdateTime = DateTime.Now;
// entity.LastUpdateUser = "SYSTEM";
// entity.Status = false; // 初始状态:未审核
// entity.IsOut = false; // 初始状态:未出库
entity.IsSrm = 0; // 初始状态:非SRM
// 2. 调用业务层新增方法
var insertSuccess = _mesInvItemArnManager.Insert(entity);
// 3. 返回新增结果
return new ResponseResult
{
status = 0,
message = insertSuccess ? "收料单新增成功" : "收料单新增失败",
data = new { id = entity.Id, success = insertSuccess }
};
}
catch (Exception ex)
{
// 4. 异常处理
return ResponseResult.ResponseError(ex);
}
}*/
///
/// 更新收料单(直接传入MES实体,适用于内部系统更新)
///
/// 收料单主表实体(需含ID)
/// 更新结果(成功状态)
// [HttpPost("Update")]
// public ResponseResult Update([FromBody] MesInvItemArn entity)
// {
// try
// {
// // 1. 校验ID(必须传入已存在的ID)
// if (entity.Id == Guid.Empty)
// {
// return new ResponseResult
// {
// status = 1,
// message = "更新失败:收料单ID不能为空",
// data = false
// };
// }
//
// // 2. 补全更新字段(最后更新时间、最后更新人)
// entity.LastUpdateTime = DateTime.Now;
// entity.LastUpdateUser = "SYSTEM"; // 可改为当前登录用户
//
// // 3. 调用业务层更新方法(忽略创建时间,避免覆盖)
// var updateSuccess = _mesInvItemArnManager.Update(entity, ignoreColumns: m => new { m.CreateDate });
//
// // 4. 返回更新结果
// return new ResponseResult
// {
// status = 0,
// message = updateSuccess ? "收料单更新成功" : "收料单更新失败(未找到对应数据或更新异常)",
// data = updateSuccess
// };
// }
// catch (Exception ex)
// {
// // 5. 异常处理
// return ResponseResult.ResponseError(ex);
// }
// }
}