using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using WaterCloud.Code; using WaterCloud.Domain.MaterialManage; using WaterCloud.Service.MaterialManage; using WaterCloud.Service.QualityManage; using WaterCloud.Service.SystemSecurity; namespace WaterCloud.Web.Controllers { /// /// 入库接口 /// [Route("api/[controller]/[action]")] [ApiController] [ServiceFilter(typeof(LoginFilterAttribute))] public class InStorageController : ControllerBase { //自动注入服务 public LogService _logService { get; set; } public InStorageService _service { get; set; } public NeedCheckService _checkService { get; set; } #region 获取数据 /// /// 获取入库单信息根据关键字 /// /// 关键字 /// [HttpGet] public async Task GetInStorageByCode([FromQuery] string keyword) { var data = await _service.GetInStorageByCode(keyword); return new AlwaysResult { state = ResultType.success.ToString(), data = data }; } /// /// 获取作业入库单列表 /// /// 关键字 /// [HttpGet] public async Task GetInStorageList([FromQuery] string keyword) { var data = await _service.GetList(keyword); data = data.Where(a => a.F_EnabledMark == true && a.F_InStorageState == 1 && a.F_Num != a.F_DoneNum).ToList(); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count }; } /// /// 获取作业中入库单信息根据关键字 /// /// 关键字 /// [HttpGet] public async Task GetUnInStorageByCode([FromQuery] string keyword) { var data = await _service.GetInStorageByCode(keyword); if (data != null && data.F_InStorageState != 1) { data = null; } return new AlwaysResult { state = ResultType.success.ToString(), data = data }; } /// /// 获取入库绑定信息根据流转箱编号 /// /// 编号 /// [HttpGet] public async Task GetInStorageBandingByCode([FromQuery,Required] string code) { var data = await _service.GetInStorageBandingList(code); data = data.Where(a => a.F_TransferBoxCode == code.ToUpper()).ToList(); foreach (var item in data) { var scaps = await _checkService.GetCheckEntity(item.F_TransferBoxCode, item.F_Id.ToString(), 0); item.F_Num -= scaps == null ? 0 : scaps.F_ScapNum; } var temp = data.FirstOrDefault(); if (temp!=null) { temp.F_Num = data.Sum(a => a.F_Num); temp.F_MaterialBatch = string.Join(',', data.Select(a => a.F_MaterialBatch)); } return new AlwaysResult { state = ResultType.success.ToString(), data = temp }; } #endregion #region 提交数据 /// /// 入库绑定 /// /// 入库绑定请求对象 /// [HttpPost] [Lock] public async Task InStorageBanding([FromBody] InStorageBandingRequest request) { try { InStorageInfoEntity entity = new InStorageInfoEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_Num = request.num; entity.F_MaterialBatch = request.materialBatch; entity.F_Description = request.description; entity.F_InStorageCode = request.inStorageCode; await _service.InStorage(entity); await _logService.WriteLog("操作成功", "入库接口-入库绑定", "", Service.DbLogType.Submit); return new AlwaysResult { state = ResultType.success.ToString() }; } catch (Exception ex) { await _logService.WriteLog(ex.Message, "入库接口-入库绑定", "", Service.DbLogType.Submit, true); return new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(ex.Message) }; } } /// /// 入库取消绑定 /// /// 流转箱编号 /// [HttpPost] [Lock] public async Task InStorageCancleBanding([Required(ErrorMessage ="流转箱编号不能为空")] string code) { try { await _service.InStorageCancleBanding(code.ToUpper()); await _logService.WriteLog("操作成功", "入库接口-取消入库绑定", "", Service.DbLogType.Submit); return new AlwaysResult { state = ResultType.success.ToString() }; } catch (Exception ex) { await _logService.WriteLog(ex.Message, "入库接口-取消入库绑定", "", Service.DbLogType.Submit, true); return new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(ex.Message) }; } } /// /// 入库上架 /// /// 入库上架请求对象 /// [HttpPost] [Lock] public async Task InStorageLocation([FromBody] InStorageLocationRequest request) { try { InStorageInfoEntity entity = new InStorageInfoEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_LocationCode = request.locationCode; await _service.InStorageLocation(entity); await _logService.WriteLog("操作成功", "入库接口-入库上架", "", Service.DbLogType.Submit); return new AlwaysResult { state = ResultType.success.ToString() }; } catch (Exception ex) { await _logService.WriteLog(ex.Message, "入库接口-入库上架", "", Service.DbLogType.Submit, true); return new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(ex.Message) }; } } #endregion #region 请求对象 /// /// 入库绑定请求对象 /// public class InStorageBandingRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 变动数量 /// /// [Required(ErrorMessage = "数量不能为空")] public float? num { get; set; } /// /// 批号 /// /// [Required(ErrorMessage = "批号不能为空")] public string materialBatch { get; set; } /// /// 描述 /// /// public string description { get; set; } /// /// 入库单号 /// [Required(ErrorMessage = "入库单号不能为空")] public string inStorageCode { get; set; } } /// /// 入库上架请求对象 /// public class InStorageLocationRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 库位号 /// [Required(ErrorMessage = "库位号不能为空")] public string locationCode { get; set; } } #endregion } }