| using Microsoft.AspNetCore.Mvc; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.Security.Claims; | 
| using Microsoft.AspNetCore.Authorization; | 
| using Microsoft.Extensions.Options; | 
| using Model.ModelVm; | 
| using Model.ModelVm.BllSoVm; | 
| using Model.ModelVm.LogVm; | 
| using WMS.IBLL.IBllSoServer; | 
| using WMS.IBLL.ILogServer; | 
| using Wms.Tools; | 
| using Newtonsoft.Json; | 
| using Utility.Tools; | 
| using Model.InterFaceModel; | 
| using SqlSugar; | 
| using Utility; | 
| using System.Threading.Tasks; | 
| using Model.ModelDto.BllSoDto; | 
|   | 
| namespace Wms.Controllers | 
| { | 
|     [Route("api/[controller]/[action]")] | 
|     [ApiController] | 
|     [Authorize] | 
|     public class BllSoController : ControllerBase | 
|     { | 
|         /// <summary> | 
|         /// 依赖注入 | 
|         /// </summary> | 
|         private readonly ApiUrlConfig _config; //接口交互路径 | 
|         private readonly IExportNoticeServer _exNoticeSvc;//出库单Svc  | 
|         private readonly IExportNoticeDetailServer _exNoticeDetailSvc;//出库单明细Svc  | 
|         private readonly IExportAllotServer _exAllotSvc;//出库分配Svc  | 
|         private readonly ICompleteDetailServer _comDetailSvc;//出库拣货明细Svc  | 
|         private readonly ITaskServer _taskSvc;//出库任务Svc  | 
|         private readonly IOperationSOServer _logSvc;//出库操作日志Svc  | 
|         private readonly IWaveMageServer _waveSvc;//出库操作日志Svc  | 
|   | 
|         public BllSoController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IExportNoticeDetailServer exNoticeDetailSvc, IExportAllotServer exAllotSvc, ICompleteDetailServer comDetailSvc, ITaskServer taskSvc, IOperationSOServer logSvc, IWaveMageServer waveSvc) | 
|         { | 
|             _config = setting.Value; | 
|             _exNoticeSvc = exNoticeSvc; | 
|             _exNoticeDetailSvc = exNoticeDetailSvc; | 
|             _exAllotSvc = exAllotSvc; | 
|             _comDetailSvc = comDetailSvc; | 
|             _taskSvc = taskSvc; | 
|             _logSvc = logSvc; | 
|             _waveSvc = waveSvc; | 
|         } | 
|   | 
|         #region 出库单管理 | 
|   | 
|         /// <summary> | 
|         /// 获取出库单信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [ServiceFilter(typeof(ApiResponseActionFilter))] | 
|         public async Task<SqlSugarPagedList> GetExportNoticeList(GetExportNoticeVm model) | 
|         { | 
|             RefAsync<int> count = new RefAsync<int>(); | 
|             var bolls = await _exNoticeSvc.GetExportNoticeList(model, count); | 
|   | 
|             return new SqlSugarPagedList() { Items = bolls, Total = count }; | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取添加或修改出库单明细所显示的库存数据源 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetStockGroupList(GetStockGroupVm model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _exNoticeSvc.GetStockGroupList(model.WareHouseNo,model.Type,model.OwnerNo,model.Msg); | 
|   | 
|                 return Ok(new { code = 0, count=0, msg = "出库单信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 添加出库单 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult AddExportNotice(AddEditExportNoticeVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _exNoticeSvc.AddExportNotice(model,int.Parse(userId)); | 
|   | 
|                 return Ok(new { code = 0, count = 0, msg = "添加出库单成功", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取编辑出库单据 | 
|         /// </summary> | 
|         /// <param name="soNo"></param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult GetEditExportNotice(string soNo) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _exNoticeSvc.GetEditExportNotice(soNo); | 
|   | 
|                 return Ok(new { code = 0, count = 0, msg = "出库单编辑信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 编辑出库单据 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult EditExportNotice(AddEditExportNoticeVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var list = _exNoticeSvc.EditExportNotice(model,int.Parse(userId)); | 
|                 if (list!= null && list.Origin != "WMS") | 
|                 { | 
|                     var jsonData = JsonConvert.SerializeObject(list); | 
|                     string response = ""; | 
|   | 
|                     try | 
|                     { | 
|                         //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") | 
|                         //response = HttpHelper.DoPost(_config.ErpHost + _config.SoFinishUrl, jsonData, "WMS修改出库单据回传上游系统", "ERP"); | 
|                         //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") | 
|   | 
|                         //////解析返回数据  | 
|                         //var wcsModel = JsonConvert.DeserializeObject<ErpModel>(response); | 
|                         //if (wcsModel.StatusCode == 0) | 
|                         //{ | 
|                         //    //更改任务的发送返回时间// | 
|                         //    new TaskServer().EditTaskIssueOk(list2, time1, time2); | 
|                         //    str += "下发成功"; | 
|                         //} | 
|                         //if (wcsModel.StatusCode == -1) | 
|                         //{ | 
|                         //    new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); | 
|                         //    throw new Exception(wcsModel.Msg); | 
|                         //} | 
|                     } | 
|                     catch (Exception ex) | 
|                     { | 
|                         throw new Exception(ex.Message); | 
|                     } | 
|                 } | 
|                 return Ok(new { code = 0, count = 0, msg = "出库单编辑成功", data = list }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = "编辑失败"+e.Message }); | 
|             } | 
|         } | 
|          | 
|         /// <summary> | 
|         /// 删除出库单据 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult DelExportNotice(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _exNoticeSvc.DelExportNotice(model.Id, int.Parse(userId)); | 
|                 if (bolls) | 
|                 { | 
|                     return Ok(new { code = 0, count = 0, msg = "出库单删除成功" }); | 
|                 } | 
|                 else | 
|                 { | 
|                     return Ok(new { code = 1, msg = "删除失败" }); | 
|                 } | 
|                  | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = "删除失败" + e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 添加出库xml | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [AllowAnonymous] | 
|         public IActionResult AddExXmlStr(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _exNoticeSvc.AddExXmlStr(model.Id, int.Parse(userId)); | 
|                   | 
|                 return Ok(new { code = 0, count = 0, msg = "生成出库单Xml", data= bolls.InnerXml.ToString() }); | 
|                   | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = "删除失败" + e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|         #region 出库单明细管理 | 
|   | 
|         /// <summary> | 
|         /// 获取出库单明细信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [ServiceFilter(typeof(ApiResponseActionFilter))] | 
|         public async Task<SqlSugarPagedList> GetExportNoticeDetailList(GetExportNoticeDetailVm model) | 
|         { | 
|             RefAsync<int> count = new RefAsync<int>(); | 
|             var bolls = await _exNoticeDetailSvc.GetExportNoticeDetailList(model, count); | 
|   | 
|             return new SqlSugarPagedList() { Items = bolls, Total = count }; | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 删除出库单据明细 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult DelExportNoticeDetail(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _exNoticeDetailSvc.DelExportNoticeDetail(model.Id, int.Parse(userId)); | 
|                 if (bolls) | 
|                 { | 
|                     return Ok(new { code = 0, count = 0, msg = "出库单明细删除成功" }); | 
|                 } | 
|                 else | 
|                 { | 
|                     return Ok(new { code = 1, msg = "删除失败" }); | 
|                 } | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|         #region 出库分配 | 
|   | 
|         /// <summary> | 
|         /// 出库单据自动分配 | 
|         /// </summary> | 
|         /// <param name="soNo">出库单号</param> | 
|         /// <param name="tab">验证选项 0:需验证、1:已验证过</param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult ExportAutoAllot(string soNo,string tab) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 if (tab == "1") | 
|                 { | 
|                     var bolls = _exNoticeSvc.AutoAllot(soNo, int.Parse(userId)); | 
|                     if (bolls) | 
|                     { | 
|                         return Ok(new { code = 0, count = 0, msg = "分配成功" }); | 
|                     } | 
|                     else | 
|                     { | 
|                         return Ok(new { code = 1, msg = "分配失败" }); | 
|                     } | 
|                 } | 
|                 else | 
|                 { | 
|                     var bl = _exNoticeSvc.IsCrossLotNo(soNo); | 
|                     if (bl) | 
|                     { | 
|                         var bolls = _exNoticeSvc.AutoAllot(soNo, int.Parse(userId)); | 
|                         if (bolls) | 
|                         { | 
|                             return Ok(new { code = 0, count = 0, msg = "分配成功" }); | 
|                         } | 
|                         else | 
|                         { | 
|                             return Ok(new { code = 1, msg = "分配失败" }); | 
|                         } | 
|                     } | 
|                     else | 
|                     { | 
|                         return Ok(new { code = 2, msg = "跨批出库" }); | 
|                     } | 
|                 } | 
|                  | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|         /// <summary> | 
|         /// 取消出库单据分配 | 
|         /// </summary> | 
|         /// <param name="soNo">出库单号</param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult ExportCancelAllot(string soNo) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _exNoticeSvc.CancelAllot(soNo, int.Parse(userId)); | 
|                 if (bolls) | 
|                 { | 
|                     return Ok(new { code = 0, count = 0, msg = "取消分配成功" }); | 
|                 } | 
|                 else | 
|                 { | 
|                     return Ok(new { code = 1, msg = "取消分配失败" }); | 
|                 } | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 维护出库单备注信息 | 
|         /// </summary> | 
|         /// <param name="id"></param> | 
|         /// <param name="demo"></param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult EditNoticeDemo(int id, string demo) | 
|         { | 
|             try | 
|             { | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     throw new Exception("未获取到用户信息"); | 
|                 } | 
|                 string userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     throw new Exception("未获取到用户信息"); | 
|                 } | 
|   | 
|                 _exNoticeSvc.EditNoticeDemo(id, demo, int.Parse(userId)); | 
|   | 
|   | 
|                 return Ok(new { code = 0, msg = "编辑备注成功" }); | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取库存明细信息(出库单手动分配选择数据源) | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetHandOutList(GetHandOutVm model) | 
|         { | 
|             try | 
|             { | 
|                 var list = _exNoticeSvc.GetHandOutList(model.DetailId,model.HouseNo,model.RoadwayNo,model.LocateNo,model.Msg,model.PalletNo); | 
|                  | 
|                 return Ok(new { code = 0, count = list.Count, msg = "获取库存明细信息", data = list }); | 
|                  | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 手动分配出库单明细 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult AddHandOutAllot(AddHandOutVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 _exNoticeSvc.AddHandOutAllot(model, int.Parse(userId)); | 
|   | 
|                 return Ok(new { code = 0, count = 0, msg = "手动分配成功" }); | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取出库分配信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [ServiceFilter(typeof(ApiResponseActionFilter))] | 
|         public async Task<SqlSugarPagedList> GetExportAllotList(GetExportAllotVm model) | 
|         { | 
|             RefAsync<int> count = new RefAsync<int>(); | 
|             var bolls = await _exAllotSvc.GetExportAllotList(model, count); | 
|   | 
|             return new SqlSugarPagedList() { Items = bolls, Total = count }; | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 删除出库单据分配的单条分配信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult DelExportAllot(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 _exAllotSvc.DelExportAllot(model.Id, int.Parse(userId)); | 
|                  | 
|                 return Ok(new { code = 0, count = 0, msg = "取消分配成功" }); | 
|                  | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|         #region 拣货明细 | 
|         /// <summary> | 
|         /// 获取拣货明细信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [ServiceFilter(typeof(ApiResponseActionFilter))] | 
|         public async Task<SqlSugarPagedList> GetCompleteDetailList(GetCompleteDetailVm model) | 
|         { | 
|             RefAsync<int> count = new RefAsync<int>(); | 
|             var bolls = await _comDetailSvc.GetCompleteDetailList(model, count); | 
|   | 
|             return new SqlSugarPagedList() { Items = bolls, Total = count }; | 
|         } | 
|   | 
|         [HttpGet] | 
|         public IActionResult GetCompBoxInfoList( string boxNo,string boxNo3) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _comDetailSvc.GetCompBoxInfoList(boxNo, boxNo3); | 
|   | 
|                 return Ok(new { code = 0, count = bolls.Count, msg = "拣货明细信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|         #region 托盘出库 | 
|   | 
|         /// <summary> | 
|         /// 获取托盘出库数据 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [ServiceFilter(typeof(ApiResponseActionFilter))] | 
|         public async Task<SqlSugarPagedList> GetPalletNoOutList(GetPalletNoOutVm model) | 
|         { | 
|             RefAsync<int> count = new RefAsync<int>(); | 
|             var bolls = await _exNoticeSvc.GetPalletNoOutList(model, count); | 
|   | 
|             return new SqlSugarPagedList() { Items = bolls, Total = count }; | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 指令下发(出库) | 
|         /// </summary> | 
|         /// <param name="palletNo"></param> | 
|         /// <param name="outMode"></param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult IssuePalletNoOut(string palletNo, string outMode) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 //验证出库口 | 
|                 //if (string.IsNullOrWhiteSpace(outMode)) | 
|                 //{ | 
|                 //    return Ok(new { code = 1, msg = "请选择出库口" }); | 
|                 //} | 
|   | 
|                 var list = _exNoticeSvc.IssuePalletNoOut(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str); | 
|   | 
|                 return Ok(new { code = 0, msg = str, data = list }); | 
|   | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|         #region 出库任务 | 
|   | 
|         /// <summary> | 
|         /// 备料出库定时任务添加 | 
|         /// </summary> | 
|         /// <param name="soNo">出库单号</param> | 
|         /// <returns></returns> | 
|          | 
|         [HttpGet] | 
|         public IActionResult AddBeiLiaoTimer(string soNo) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|   | 
|                 _exNoticeSvc.AddBeiLiaoTimer(soNo, int.Parse(userId)); | 
|   | 
|                 return Ok(new { code = 0, msg = "备料定时完成", data ="" }); | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取出库任务信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public async Task<IActionResult> GetExportTaskList(GetTaskVm model) | 
|         { | 
|             try | 
|             { | 
|                 var type = new List<string>(){"1"}; | 
|                 RefAsync<int> count = new RefAsync<int>(); | 
|                 var bolls = await _taskSvc.GetTaskList( type, model.Type,model.Status,model.TaskNo,model.IsSuccess,model.PalletNo,model.Msg,model.Page, model.Limit, count); | 
|   | 
|                 return Ok(new { code = 0, count = count.Value, msg = "出库任务信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 取消出库任务 | 
|         /// </summary> | 
|         /// <param name="taskNo"></param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult ExportCancelTask(string taskNo) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 _exNoticeSvc.CancelSoTask(taskNo, int.Parse(userId)); | 
|                   | 
|                 return Ok(new { code = 0, msg = "取消任务已完成", data = "" }); | 
|   | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 完成出库任务 | 
|         /// </summary> | 
|         /// <param name="taskNo"></param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult ExportFinishTask(string taskNo) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var task = _taskSvc.GetTaskType(taskNo); | 
|                 if (task.Receiver == "AGV") | 
|                 { | 
|                     if (task.Type == "1")//出库完成 | 
|                     { | 
|                         _exNoticeSvc.ExportSuccessAGV(taskNo, int.Parse(userId)); | 
|                     } | 
|                     else | 
|                     { | 
|                         return Ok(new { code = 1, msg = "任务类型错误,请核实!" }); | 
|                     } | 
|                 } | 
|                 else if (task.Receiver == "WCS") | 
|                 { | 
|                     if (task.Type == "1")//出库完成 | 
|                     { | 
|                         _exNoticeSvc.ExportSuccess(taskNo, int.Parse(userId)); | 
|                     } | 
|                     else if (task.Type == "2")//出库时产生的移库任务完成 | 
|                     { | 
|                         _exNoticeSvc.RelocationSuccess(taskNo, int.Parse(userId)); | 
|                     } | 
|                     else | 
|                     { | 
|                         return Ok(new { code = 1, msg = "任务类型错误,请核实!" }); | 
|                     } | 
|                 } | 
|                  | 
|                 return Ok(new { code = 0, msg = "成功完成任务", data = "" }); | 
|   | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 下发出库任务 | 
|         /// </summary> | 
|         /// <param name="taskNo">任务号</param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult AgainSendSoTask(string taskNo) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 _exNoticeSvc.AgainSendSoTask(taskNo, int.Parse(userId),""); | 
|   | 
|                 return Ok(new { code = 0, msg = "成功下发任务", data = "" }); | 
|   | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|         #region 出库操作日志 | 
|   | 
|         /// <summary> | 
|         /// 获取出库操作日志信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [ServiceFilter(typeof(ApiResponseActionFilter))] | 
|         public async Task<SqlSugarPagedList> GetLogOperationSoList(GetOperationVm model) | 
|         { | 
|             RefAsync<int> count = new RefAsync<int>(); | 
|             var bolls = await _logSvc.GetLogOperationSoList(model.MenuName, model.Type, model.Msg, model.StartTime, model.EndTime, model.Page, model.Limit, count); | 
|   | 
|             return new SqlSugarPagedList() { Items = bolls, Total = count }; | 
|         } | 
|   | 
|         #endregion | 
|   | 
|         /// <summary> | 
|         /// 判断出库是否需要拆箱 | 
|         /// </summary> | 
|         /// <param name="soNo"></param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult IsNeedUnpack(string soNo) | 
|         { | 
|             try | 
|             { | 
|                 string result = _exNoticeSvc.IsNeedUnpack(soNo); | 
|   | 
|                 return Ok(new { code = 0, data = result, msg = "成功" }); | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #region 波次管理 | 
|   | 
|         /// <summary> | 
|         /// 获取波次出库单信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         [ServiceFilter(typeof(ApiResponseActionFilter))] | 
|         public async Task<SqlSugarPagedList> GetWaveMageList(GetWaveMageVm model) | 
|         { | 
|             RefAsync<int> count = new RefAsync<int>(); | 
|             var bolls = await _waveSvc.GetWaveMageList(model, count); | 
|   | 
|             return new SqlSugarPagedList() { Items = bolls, Total = count }; | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取添加波次单的出库单信息 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetAddExNoticeInfo(GetWaveMageVm model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _waveSvc.GetAddExNoticeInfo(model.LogisticsId, model.Address); | 
|   | 
|                 return Ok(new { code = 0, count = bolls.Count, msg = "出库单信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 添加波次单据 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult AddWaveMage(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 _waveSvc.AddWaveMage(model.Ids,int.Parse(userId)); | 
|   | 
|                 return Ok(new { code = 0, count = 0, msg = "添加波次单据成功", data = "" }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|   | 
|         /// <summary> | 
|         /// 删除波次单 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult DelWaveExportNotice(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _waveSvc.DelWaveExportNotice(model.Id, int.Parse(userId)); | 
|                 if (bolls) | 
|                 { | 
|                     return Ok(new { code = 0, count = 0, msg = "出库单明细删除成功" }); | 
|                 } | 
|                 else | 
|                 { | 
|                     return Ok(new { code = 1, msg = "删除失败" }); | 
|                 } | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|   | 
|         /// <summary> | 
|         /// 波次出库单据自动分配 | 
|         /// </summary> | 
|         /// <param name="waveNo">波次单号</param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult WaveAutoAllot(string waveNo) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _waveSvc.WaveAutoAllot(waveNo, int.Parse(userId)); | 
|                 if (bolls) | 
|                 { | 
|                     return Ok(new { code = 0, count = 0, msg = "分配成功" }); | 
|                 } | 
|                 else | 
|                 { | 
|                     return Ok(new { code = 1, msg = "分配失败" }); | 
|                 } | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|         /// <summary> | 
|         /// 取消波次出库单据分配 | 
|         /// </summary> | 
|         /// <param name="waveNo">波次单号</param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult WaveCancelAllot(string waveNo) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var bolls = _waveSvc.WaveCancelAllot(waveNo, int.Parse(userId)); | 
|                 if (bolls) | 
|                 { | 
|                     return Ok(new { code = 0, count = 0, msg = "取消分配成功" }); | 
|                 } | 
|                 else | 
|                 { | 
|                     return Ok(new { code = 1, msg = "取消分配失败" }); | 
|                 } | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 判断波次出库是否需要拆箱 | 
|         /// </summary> | 
|         /// <param name="waveNo">波次单号</param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult WaveIsNeedUnpack(string waveNo) | 
|         { | 
|             try | 
|             { | 
|                 string result = _waveSvc.WaveIsNeedUnpack(waveNo); | 
|   | 
|                 return Ok(new { code = 0, data = result, msg = "成功" }); | 
|   | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|   | 
|         #region 归档数据 | 
|         /// <summary> | 
|         /// 获取出库单信息-归档数据 | 
|         /// </summary> | 
|         /// <param name="model">查询条件</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetArchivingExportNoticeList(GetExportNoticeVm model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _exNoticeSvc.GetArchivingExportNoticeList(model.No, model.Type, model.Status, model.LotNo, model.LogisticsId, model.IsWave, model.IsDespatch, model.WaveNo, model.Page, model.Limit, out int count); | 
|   | 
|                 return Ok(new { code = 0, count, msg = "出库单信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取出库单明细信息-归档数据 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetArchivingExportNoticeDetailList(GetExportNoticeDetailVm model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _exNoticeDetailSvc.GetArchivingExportNoticeDetailList(model.SoNo, model.Page, model.Limit, out int count); | 
|   | 
|                 return Ok(new { code = 0, count, msg = "出库单明细信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取波次出库单信息-数据归档 | 
|         /// </summary> | 
|         /// <param name="model">查询条件</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetArchivingWaveMageList(GetWaveMageVm model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _waveSvc.GetArchivingWaveMageList(model.WaveNo, model.Status, model.LotNo, model.LogisticsId, model.Page, model.Limit, out int count); | 
|   | 
|                 return Ok(new { code = 0, count, msg = "出库单信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取出库分配信息-归档数据 | 
|         /// </summary> | 
|         /// <param name="model">查询条件</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetArchivingExportAllotList(GetExportAllotVm model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _exAllotSvc.GetArchivingExportAllotList(model.SoNo, model.WaveNo, model.PalletNo, model.SkuNo, model.SkuName, model.LotNo, model.Status, model.BoxNo, model.Page, model.Limit, out int count); | 
|   | 
|                 return Ok(new { code = 0, count, msg = "出库分配信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取拣货明细信息-归档数据 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetArchivingCompleteDetailList(GetCompleteDetailVm model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _comDetailSvc.GetArchivingCompleteDetailList(model.Id, model.Page, model.Limit, out int count); | 
|   | 
|                 return Ok(new { code = 0, count, msg = "拣货明细信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 根据箱号支号获取详细信息 - 数据归档 | 
|         /// </summary> | 
|         /// <param name="boxNo"></param> | 
|         /// <param name="boxNo3"></param> | 
|         /// <returns></returns> | 
|         [HttpGet] | 
|         public IActionResult GetArchivingCompBoxInfoList(string boxNo, string boxNo3) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _comDetailSvc.GetArchivingCompBoxInfoList(boxNo, boxNo3); | 
|   | 
|                 return Ok(new { code = 0, count = bolls.Count, msg = "拣货明细信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|         #endregion | 
|     } | 
| } |