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