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.SystemSecurity; namespace WaterCloud.Web.Controllers { /// /// 出库接口 /// [Route("api/[controller]/[action]")] [ApiController] [ServiceFilter(typeof(LoginFilterAttribute))] public class OutStorageController : ControllerBase { //自动注入服务 public LogService _logService { get; set; } public OutStorageService _service { get; set; } #region 获取数据 /// /// 获取作业出库单列表 /// /// 关键字 /// [HttpGet] public async Task GetOutStorageList([FromQuery] string keyword) { var data = await _service.GetList(keyword); data = data.Where(a => a.F_EnabledMark == true && a.F_OutStorageState < 3 && a.F_OutStorageState > 0 && a.F_Num != a.F_DoneNum).ToList(); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count }; } /// /// 获取装箱出库单列表 /// /// 关键字 /// [HttpGet] public async Task GetOutStorageBandingList([FromQuery] string keyword) { var data = await _service.GetList(keyword); data = data.Where(a => a.F_EnabledMark == true && a.F_OutStorageState < 3 && a.F_OutStorageState > 0 && a.F_DoneNum>0).ToList(); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count }; } /// /// 获取出库单根据关键字 /// /// 关键字 /// [HttpGet] public async Task GetOutStorageByCode([FromQuery] string keyword) { var data = await _service.GetOutStorageByCode(keyword); return new AlwaysResult { state = ResultType.success.ToString(), data = data}; } /// /// 获取作业中出库单根据关键字 /// /// 关键字 /// [HttpGet] public async Task GetUnOutStorageByCode([FromQuery] string keyword) { var data = await _service.GetOutStorageByCode(keyword); if (data != null && data.F_OutStorageState != 1) { data = null; } return new AlwaysResult { state = ResultType.success.ToString(), data = data }; } /// /// 获取未绑定信息根据出库单 /// /// 出库单号 /// [HttpGet] public async Task GetUnBandingInfoByCode([FromQuery, Required] string code) { var data = await _service.GetUnBandingInfoByCode(code.ToUpper()); return new AlwaysResult> { state = ResultType.success.ToString(), data = data }; } #endregion #region 提交数据 /// /// 产品出库 /// /// 产品出库请求对象 /// [HttpPost] [Lock] public async Task OutStorage([FromBody] OutStorageRequest request) { try { OutStorageInfoEntity entity = new OutStorageInfoEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_Num = request.num; entity.F_Description = request.description; entity.F_OutStorageCode = request.outStorageCode.ToUpper(); entity.TargetTransferCode = string.IsNullOrEmpty(request.TargetTransferCode)?null: request.TargetTransferCode.ToUpper(); await _service.OutStorage(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] public async Task OutStorageBanding([FromBody] OutStorageBandingRequest request) { try { OutStorageInfoEntity entity = new OutStorageInfoEntity(); entity.F_OutStorageCode = request.outStorageCode.ToUpper(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_TargetTransferCode = string.IsNullOrEmpty(request.TargetTransferCode) ? null : request.TargetTransferCode.ToUpper(); entity.F_Num = request.num; entity.F_Description = request.description; await _service.OutStorageBanding(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] public async Task OutStorageCancle([FromBody] OutStorageCancleRequest request) { try { OutStorageInfoEntity entity = new OutStorageInfoEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_OutStorageCode = request.outStorageCode.ToUpper(); entity.F_LocationCode = request.locationCode.ToUpper(); await _service.OutStorageCancle(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 OutStorageRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 下架数量 /// /// [Required(ErrorMessage = "数量不能为空")] public float? num { get; set; } /// /// 描述 /// /// public string description { get; set; } /// /// 出库单号 /// [Required(ErrorMessage = "出库单号不能为空")] public string outStorageCode { get; set; } /// /// 目标流转箱 /// public string TargetTransferCode { get; set; } } /// /// 产品出库请求对象 /// public class OutStorageQueryRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 出库单号 /// [Required(ErrorMessage = "出库单号不能为空")] public string outStorageCode { get; set; } } /// /// 出库装箱请求对象 /// public class OutStorageBandingRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 变动数量 /// /// [Required(ErrorMessage = "数量不能为空")] public float? num { get; set; } /// /// 描述 /// /// public string description { get; set; } /// /// 出库单号 /// [Required(ErrorMessage = "出库单号不能为空")] public string outStorageCode { get; set; } /// /// 目标流转箱 /// [Required(ErrorMessage = "目标流转箱不能为空")] public string TargetTransferCode { get; set; } } /// /// 取消产品下架请求对象 /// public class OutStorageCancleRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 出库单号 /// [Required(ErrorMessage = "出库单号不能为空")] public string outStorageCode { get; set; } /// /// 目标库位 /// [Required(ErrorMessage = "目标库位不能为空")] public string locationCode { get; set; } } #endregion } }