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;
|
|
/// <summary>
|
/// 收料单控制器(处理收料单相关API请求,关联MES_INV_ITEM_ARN主表与MES_INV_ITEM_ARN_DETAIL明细表)
|
/// </summary>
|
[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/";
|
|
/// <summary>
|
/// 保存收料单(单条,含主表+明细)
|
/// </summary>
|
/// <param name="erpSltz">ERP收料单数据(含主表ErpSltza+明细ErpSltzBList)</param>
|
/// <returns>保存结果(成功/失败状态+详情)</returns>
|
[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?.billNo ?? "未知单据号" // 路由标识:用收料单单据号
|
};
|
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 批量保存收料单(多条,含主表+明细,事务保证一致性)
|
/// </summary>
|
/// <param name="erpSltzList">ERP收料单列表(每条含主表+明细)</param>
|
/// <returns>批量保存结果(总条数、成功条数)</returns>
|
[HttpPost("SaveList")]
|
public ResponseResult SaveList(List<ErpSltz> 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);
|
}
|
}
|
|
/// <summary>
|
/// 获取收料单列表(主表数据,支持后续扩展分页/筛选)
|
/// </summary>
|
/// <returns>收料单列表(总条数+列表数据)</returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 根据ID获取收料单详情(含主表+关联明细)
|
/// </summary>
|
/// <param name="id">收料单主表ID(Guid字符串)</param>
|
/// <returns>收料单主表+明细详情</returns>
|
// [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);
|
// }
|
// }
|
|
/// <summary>
|
/// 根据单据号获取收料单详情(含主表+关联明细)
|
/// </summary>
|
/// <param name="billNo">收料单单据号</param>
|
/// <returns>收料单主表+明细详情</returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 新增收料单(直接传入MES实体,适用于内部系统创建)
|
/// </summary>
|
/// <param name="entity">收料单主表实体</param>
|
/// <returns>新增结果(ID+成功状态)</returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 更新收料单(直接传入MES实体,适用于内部系统更新)
|
/// </summary>
|
/// <param name="entity">收料单主表实体(需含ID)</param>
|
/// <returns>更新结果(成功状态)</returns>
|
// [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);
|
// }
|
// }
|
}
|