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
    {
        /// 
        /// 依赖注入
        /// 
        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 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 出库单管理
        /// 
        /// 获取出库单信息
        /// 
        /// 
        /// 
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetExportNoticeList(GetExportNoticeVm model)
        {
            RefAsync count = new RefAsync();
            var bolls = await _exNoticeSvc.GetExportNoticeList(model, count);
            return new SqlSugarPagedList() { Items = bolls, Total = count };
        }
        /// 
        /// 获取添加或修改出库单明细所显示的库存数据源
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 添加出库单
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 获取编辑出库单据
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 编辑出库单据
        /// 
        /// 
        /// 
        [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(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 });
            }
        }
        
        /// 
        /// 删除出库单据
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 添加出库xml
        /// 
        /// 
        /// 
        [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 出库单明细管理
        /// 
        /// 获取出库单明细信息
        /// 
        /// 
        /// 
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetExportNoticeDetailList(GetExportNoticeDetailVm model)
        {
            RefAsync count = new RefAsync();
            var bolls = await _exNoticeDetailSvc.GetExportNoticeDetailList(model, count);
            return new SqlSugarPagedList() { Items = bolls, Total = count };
        }
        /// 
        /// 删除出库单据明细
        /// 
        /// 
        /// 
        [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 出库分配
        /// 
        /// 出库单据自动分配
        /// 
        /// 出库单号
        /// 验证选项 0:需验证、1:已验证过
        /// 
        [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 });
            }
        }
        /// 
        /// 取消出库单据分配
        /// 
        /// 出库单号
        /// 
        [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 });
            }
        }
        /// 
        /// 维护出库单备注信息
        /// 
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 获取库存明细信息(出库单手动分配选择数据源)
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 手动分配出库单明细
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 获取出库分配信息
        /// 
        /// 
        /// 
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetExportAllotList(GetExportAllotVm model)
        {
            RefAsync count = new RefAsync();
            var bolls = await _exAllotSvc.GetExportAllotList(model, count);
            return new SqlSugarPagedList() { Items = bolls, Total = count };
        }
        /// 
        /// 删除出库单据分配的单条分配信息
        /// 
        /// 
        /// 
        [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 拣货明细
        /// 
        /// 获取拣货明细信息
        /// 
        /// 
        /// 
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetCompleteDetailList(GetCompleteDetailVm model)
        {
            RefAsync count = new RefAsync();
            var bolls = await _comDetailSvc.GetCompleteDetailList(model, count);
            return new SqlSugarPagedList() { Items = bolls, Total = count };
        }
        [HttpGet]
        public IActionResult GetCompBoxInfoList(string sONo, string boxNo,string boxNo3)
        {
            try
            {
                var bolls = _comDetailSvc.GetCompBoxInfoList(sONo, 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 托盘出库
        /// 
        /// 获取托盘出库数据
        /// 
        /// 
        /// 
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetPalletNoOutList(GetPalletNoOutVm model)
        {
            RefAsync count = new RefAsync();
            var bolls = await _exNoticeSvc.GetPalletNoOutList(model, count);
            return new SqlSugarPagedList() { Items = bolls, Total = count };
        }
        /// 
        /// 指令下发(出库)
        /// 
        /// 
        /// 
        /// 
        [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 = "请选择出库口" });
                }
                string str = string.Empty;
                var list = new List();
                if (outMode == "17" || outMode == "18")
                {
                    list = _exNoticeSvc.IssuePalletNoOutMk(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out str);
                }
                else
                {
                    list = _exNoticeSvc.IssuePalletNoOut(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out str);
                }
                 
                return Ok(new { code = 0, msg = str, data = list });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        #endregion
        #region 出库任务
        /// 
        /// 备料出库定时任务添加
        /// 
        /// 出库单号
        /// 
        
        [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 });
            }
        }
        /// 
        /// 获取出库任务信息
        /// 
        /// 
        /// 
        [HttpPost]
        public async Task GetExportTaskList(GetTaskVm model)
        {
            try
            {
                var type = new List(){"1"};
                RefAsync count = new RefAsync();
                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 });
            }
        }
        /// 
        /// 取消出库任务
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 完成出库任务
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 下发出库任务
        /// 
        /// 任务号
        /// 
        [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 出库操作日志
        /// 
        /// 获取出库操作日志信息
        /// 
        /// 
        /// 
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetLogOperationSoList(GetOperationVm model)
        {
            RefAsync count = new RefAsync();
            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
        /// 
        /// 判断出库是否需要拆箱
        /// 
        /// 
        /// 
        [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 波次管理
        /// 
        /// 获取波次出库单信息
        /// 
        /// 
        /// 
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetWaveMageList(GetWaveMageVm model)
        {
            RefAsync count = new RefAsync();
            var bolls = await _waveSvc.GetWaveMageList(model, count);
            return new SqlSugarPagedList() { Items = bolls, Total = count };
        }
        /// 
        /// 获取添加波次单的出库单信息
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 添加波次单据
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 删除波次单
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 波次出库单据自动分配
        /// 
        /// 波次单号
        /// 
        [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 });
            }
        }
        /// 
        /// 取消波次出库单据分配
        /// 
        /// 波次单号
        /// 
        [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 });
            }
        }
        /// 
        /// 判断波次出库是否需要拆箱
        /// 
        /// 波次单号
        /// 
        [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 归档数据
        /// 
        /// 获取出库单信息-归档数据
        /// 
        /// 查询条件
        /// 
        [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 });
            }
        }
        /// 
        /// 获取出库单明细信息-归档数据
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 获取波次出库单信息-数据归档
        /// 
        /// 查询条件
        /// 
        [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 });
            }
        }
        /// 
        /// 获取出库分配信息-归档数据
        /// 
        /// 查询条件
        /// 
        [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 });
            }
        }
        /// 
        /// 获取拣货明细信息-归档数据
        /// 
        /// 
        /// 
        [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 });
            }
        }
        /// 
        /// 根据箱号支号获取详细信息 - 数据归档
        /// 
        /// 
        /// 
        /// 
        [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
    }
}