hwh
2024-07-11 20ad0ae660e2669b4428c9b97f0cd5d48044d836
Merge branch 'hwh'
11个文件已修改
1459 ■■■■ 已修改文件
HTML/views/SystemSettings/PrintSetting.html 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Utility/Entity/ApiResponse.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Utility/Extension/ApiResponseActionFilter.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs 1023 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/LogServer/OperationCrServer.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllCheckServer/IStockCheckServer.cs 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ILogServer/IOperationCRServer.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BasisController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BllCheckController.cs 169 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/UpApiController.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SystemSettings/PrintSetting.html
@@ -154,61 +154,6 @@
                    TypeList = res.data;
                }
            });
            sendData(IP + "/basis/GetRoleRightList", {}, 'get', function (res) {
                $(function () {
                    $("#approvalBtn").hide();
                });
                $(function () {
                    $(".approvalBtndel").hide();
                });
                $(function () {
                    $(".approvalBtnupt").hide();
                });
                if (res.code == 200) //成功
                {
                    var list = res.data.filter(item => item.Layer == 0);
                    if (list) {
                        for (var i = 0; i < list.length; i++) {
                            xml = xml + '<li class="layui-nav-item">' + '<a href="javascript:;" lay-tips=' + list[i].Icon + ' lay-direction="2">' + '<span class="iconfont ' + list[i].Icon + '"></span>' + '<cite>' + list[i].MenuName + '</cite>' + '</a>';
                            var id = list[i].Id;
                            //查询有无子菜单
                            var count = res.data.filter(item => item.ParentId == id).length;
                            if (count > 0) {
                                xml = xml + '<dl class="layui-nav-child">';
                                getchiled(res.data, id);
                                xml = xml + '</dl>';
                            }
                            xml = xml + '</li>'
                        }
                    }
                    for (var k = 0; k < res.data.length; k++) {
                        if (res.data[k].MenuName == "添加模板") {
                            $(function () {
                                $("#approvalBtn").show();
                            });
                        }
                        if (res.data[k].MenuName == "删除模板") {
                            $(function () {
                                $(".approvalBtndel").show();
                            });
                        }
                        if (res.data[k].MenuName == "编辑模板") {
                            $(function () {
                                $(".approvalBtnupt").show();
                            });
                        }
                    }
                }
                else //不成功
                {
                    layer.msg('获取信息失败', {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }, function () {
                        //回调
                    });
                }
            })
            var infoOptions = {
                elem: '#LAY-app-content-list',
                height: 'full-95',
@@ -263,7 +208,25 @@
                        {
                            title: '操作', fixed: 'right', width: 200, align: 'center', toolbar: '#table-content-list'
                        }
                    ]]
                    ]],
                done: function () {
                    //权限
                    var listRole = JSON.parse(localStorage.getItem('listRole'));
                    $("#approvalBtn").hide();
                    $(".approvalBtndel").hide();
                    $(".approvalBtnupt").hide();
                    if (listRole) {
                        if (listRole.filter(s => s.MenuName == "添加模板").length > 0) {
                            $("#approvalBtn").show();
                        }
                        if (listRole.filter(s => s.MenuName == "编辑模板").length > 0) {
                            $(".approvalBtnupt").show();
                        }
                        if (listRole.filter(s => s.MenuName == "删除模板").length > 0) {
                            $(".approvalBtndel").show();
                        }
                    }
                }
            };
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
Wms/Utility/Entity/ApiResponse.cs
@@ -9,12 +9,21 @@
        public int code { get; set; }
        public string msg { get; set; }
        public T data { get; set; }
        public int count { get; set; }
        public ApiResponse(int code, string message, T data)
        {
            this.code = code;
            this.msg = message;
            this.data = data;
        }
        public ApiResponse(int code, string message, T data, int count)
        {
            this.code = code;
            this.msg = message;
            this.data = data;
            this.count = count;
        }
    }
}
Wms/Utility/Extension/ApiResponseActionFilter.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using NetTaste;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@@ -21,10 +22,14 @@
            if (resultContext.Result is ObjectResult objectResult)
            {
                var apiResponse = new ApiResponse<object>(
                    context.HttpContext.Response.StatusCode,
                    context.HttpContext.Response.StatusCode == 200 ? "请求成功" : "错误",
                    objectResult.Value
                );
                context.HttpContext.Response.StatusCode,
                context.HttpContext.Response.StatusCode == 200 ? "请求成功" : "错误",
                objectResult.Value);
                //if (resultContext.Result is SqlSugarPagedList)
                //{
                //    apiResponse.count = ((SqlSugarPagedList)resultContext.Result).Total;
                //}
                var json = JsonConvert.SerializeObject(apiResponse);
                context.HttpContext.Response.ContentType = "application/json";
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs
@@ -4,14 +4,19 @@
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Model.InterFaceModel;
using Model.ModelDto.BllCheckDto;
using Model.ModelDto.DataDto;
using Model.ModelDto.SysDto;
using Model.ModelVm;
using Model.ModelVm.BllCheckVm;
using Model.ModelVm.LogVm;
using Newtonsoft.Json;
using SqlSugar;
using SqlSugar.Extensions;
using Utility;
using Utility.Tools;
using WMS.BLL.LogServer;
using WMS.DAL;
@@ -23,238 +28,276 @@
using WMS.Entity.LogEntity;
using WMS.Entity.SysEntity;
using WMS.IBLL.IBllCheckServer;
using WMS.IBLL.ILogServer;
namespace WMS.BLL.BllCheckServer
{
    public class StockCheckServer : DbHelper<BllStockCheck>, IStockCheckServer
    {
        private static readonly SqlSugarScope Db = DataContext.Db;
        public StockCheckServer() : base(Db)
        private readonly UserManager _userManager;
        private readonly IOperationCRServer _operation;
        public StockCheckServer(UserManager userManager, IOperationCRServer operation) : base(Db)
        {
            _userManager = userManager;
            _operation = operation;
        }
        //获取盘点单据
        public List<StockCheckDto> GetStockCheckList(string crNo, string status, string palletNo, string skuNo, string skuName,
            string lotNo, string startTime, string endTime, int page, int limit, out int count)
        public async Task<List<StockCheckDto>> GetStockCheckList(string crNo, string status, string palletNo, string skuNo, string skuName,
            string lotNo, string startTime, string endTime, int page, int limit, RefAsync<int> count)
        {
            try
            var strList = new List<string>();
            if (!string.IsNullOrWhiteSpace(palletNo) || !string.IsNullOrWhiteSpace(skuNo) || !string.IsNullOrWhiteSpace(skuName) || !string.IsNullOrWhiteSpace(lotNo))
            {
                var strList = new List<string>();
                if (!string.IsNullOrWhiteSpace(palletNo) || !string.IsNullOrWhiteSpace(skuNo) || !string.IsNullOrWhiteSpace(skuName) || !string.IsNullOrWhiteSpace(lotNo))
                {
                    Expression<Func<BllStockCheckDetail, bool>> demo = Expressionable.Create<BllStockCheckDetail>()
                        .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim()))
                        .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => m.SkuNo.Contains(skuNo.Trim()))
                        .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim()))
                        .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim()))
                        .And(m => m.IsDel == "0")
                        .ToExpression();//注意 这一句 不能少
                    var detailList = Db.Queryable<BllStockCheckDetail>().Where(demo).Select(m => m.CRNo).Distinct().ToList();
                    strList = detailList;
                }
                Expression<Func<BllStockCheck, bool>> item = Expressionable.Create<BllStockCheck>()
                    .AndIF(!string.IsNullOrWhiteSpace(crNo), m => m.CRNo.Contains(crNo.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(status), m => m.Status == int.Parse(status))
                    .AndIF(!string.IsNullOrWhiteSpace(startTime), m => m.CheckDate >= Convert.ToDateTime(startTime))
                    .AndIF(!string.IsNullOrWhiteSpace(endTime), m => m.CheckDate <= Convert.ToDateTime(endTime).AddDays(1))
                    .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => strList.Contains(m.CRNo))
                    .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => strList.Contains(m.CRNo))
                    .AndIF(!string.IsNullOrWhiteSpace(skuName), m => strList.Contains(m.CRNo))
                    .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => strList.Contains(m.CRNo))
                Expression<Func<BllStockCheckDetail, bool>> demo = Expressionable.Create<BllStockCheckDetail>()
                    .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => m.SkuNo.Contains(skuNo.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim()))
                    .And(m => m.IsDel == "0")
                    .ToExpression();//注意 这一句 不能少
                var total = 0;
                var list = Db.Queryable<BllStockCheck>().Where(item)
                    .LeftJoin<SysUserInfor>((a, b) => a.AuditUser == b.Id)
                    .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id)
                    .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id)
                    .Select((a, b, c, d) => new StockCheckDto()
                    {
                        Id = a.Id,
                        CrNo = a.CRNo,
                        CheckDate = a.CheckDate,
                        CompleteDate = a.CompleteDate,
                        Status = a.Status,
                        Origin = a.Origin,
                        AuditStatusNo = a.AuditStatusNo,
                        IsDoubleCheck = a.IsDoubleCheck,
                        AuditUserName = b.RealName,
                        AuditTime = a.AuditTime,
                        Demo = a.Demo,
                        CreateUserName = c.RealName,
                        UpdateUserName = d.RealName,
                        CreateTime = a.CreateTime,
                        UpdateTime = a.UpdateTime,
                    }).OrderByDescending(a => a.CreateTime).ToOffsetPage(page, limit, ref total);
                count = total;
                return list;
                var detailList = await Db.Queryable<BllStockCheckDetail>().Where(demo).Select(m => m.CRNo).Distinct().ToListAsync();
                strList = detailList;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            Expression<Func<BllStockCheck, bool>> item = Expressionable.Create<BllStockCheck>()
                .AndIF(!string.IsNullOrWhiteSpace(crNo), m => m.CRNo.Contains(crNo.Trim()))
                .AndIF(!string.IsNullOrWhiteSpace(status), m => m.Status == int.Parse(status))
                .AndIF(!string.IsNullOrWhiteSpace(startTime), m => m.CheckDate >= Convert.ToDateTime(startTime))
                .AndIF(!string.IsNullOrWhiteSpace(endTime), m => m.CheckDate <= Convert.ToDateTime(endTime).AddDays(1))
                .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => strList.Contains(m.CRNo))
                .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => strList.Contains(m.CRNo))
                .AndIF(!string.IsNullOrWhiteSpace(skuName), m => strList.Contains(m.CRNo))
                .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => strList.Contains(m.CRNo))
                .And(m => m.IsDel == "0")
                .ToExpression();//注意 这一句 不能少
            var list = await Db.Queryable<BllStockCheck>().Where(item)
                .LeftJoin<SysUserInfor>((a, b) => a.AuditUser == b.Id)
                .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id)
                .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id)
                .Select((a, b, c, d) => new StockCheckDto()
                {
                    Id = a.Id,
                    CrNo = a.CRNo,
                    CheckDate = a.CheckDate,
                    CompleteDate = a.CompleteDate,
                    Status = a.Status,
                    Origin = a.Origin,
                    AuditStatusNo = a.AuditStatusNo,
                    IsDoubleCheck = a.IsDoubleCheck,
                    AuditUserName = b.RealName,
                    AuditTime = a.AuditTime,
                    Demo = a.Demo,
                    CreateUserName = c.RealName,
                    UpdateUserName = d.RealName,
                    CreateTime = a.CreateTime,
                    UpdateTime = a.UpdateTime,
                }).OrderByDescending(a => a.CreateTime).ToPageListAsync(page, limit, count);
            return list;
        }
        //获取盘点单据明细
        public List<StockCheckDetailDto> GetStockCheckDetailList(string crNo, int page, int limit, out int count)
        public async Task<List<StockCheckDetailDto>> GetStockCheckDetailList(string crNo, int page, int limit, RefAsync<int> count)
        {
            try
            {
                var total = 0;
                var list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo)
                    .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                    .LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id)
                    .Select((a, b, c) => new StockCheckDetailDto()
                    {
                        Id = a.Id,
                        CrNo = a.CRNo,
                        PalletNo = a.PalletNo,
                        Qty = a.Qty,
                        RealQty = a.RealQty,
                        CheckResult = a.CheckResult,
                        Status = a.Status,
                        SkuNo = a.SkuNo,
                        SkuName = a.SkuName,
                        Standard = a.Standard,
                        LotNo = a.LotNo,
                        LotText = a.LotText,
                        SupplierLot = a.SupplierLot,
            return await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo)
                .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                .LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id)
                .Select((a, b, c) => new StockCheckDetailDto()
                {
                    Id = a.Id,
                    CrNo = a.CRNo,
                    PalletNo = a.PalletNo,
                    Qty = a.Qty,
                    RealQty = a.RealQty,
                    CheckResult = a.CheckResult,
                    Status = a.Status,
                    SkuNo = a.SkuNo,
                    SkuName = a.SkuName,
                    Standard = a.Standard,
                    LotNo = a.LotNo,
                    LotText = a.LotText,
                    SupplierLot = a.SupplierLot,
                        CreateUserName = b.RealName,
                        UpdateUserName = c.RealName,
                        CreateTime = a.CreateTime,
                        UpdateTime = a.UpdateTime,
                    CreateUserName = b.RealName,
                    UpdateUserName = c.RealName,
                    CreateTime = a.CreateTime,
                    UpdateTime = a.UpdateTime,
                    }).ToOffsetPage(page, limit, ref total);
                count = total;
                return list;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
                }).ToPageListAsync(page, limit, count);
        }
        //获取库存明细信息(盘点选择明细数据源)
        public List<StockDetailDto> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg, int page, int limit, out int count)
        public async Task<List<StockDetailDto>> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg, int page, int limit, RefAsync<int> count)
        {
            try
            {
                Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
                    .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo)
                    .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo)
                    .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo)
                    .AndIF(!string.IsNullOrWhiteSpace(msg),
                        m => m.SkuNo.Contains(msg.Trim())
                             || m.SkuName.Contains(msg.Trim())
                             || m.LotNo.Contains(msg.Trim()))
                    .And(m => m.IsDel == "0" && m.SkuNo != "100099" && m.Status == "0")
                    .ToExpression();//注意 这一句 不能少
                var total = 0;
                var list = Db.Queryable<DataStockDetail>().Where(item).GroupBy(m => new { m.SkuNo, m.SkuName, m.Standard, m.LotNo, m.LotText, m.SupplierLot, m.LocatNo, m.PalletNo })
                    .Select(a => new StockDetailDto()
                    {
                        SkuNo = a.SkuNo,
                        SkuName = a.SkuName,
                        Standard = a.Standard,
                        LotNo = a.LotNo,
                        LotText = a.LotText,
                        SupplierLot = a.SupplierLot,
                        Qty = SqlFunc.AggregateSum(a.Qty),
                        LocatNo = a.LocatNo,
                        PalletNo = a.PalletNo
                    }).ToOffsetPage(page, limit, ref total);
                count = total;
                return list;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
                .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo)
                .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo)
                .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo)
                .AndIF(!string.IsNullOrWhiteSpace(msg),
                    m => m.SkuNo.Contains(msg.Trim())
                         || m.SkuName.Contains(msg.Trim())
                         || m.LotNo.Contains(msg.Trim()))
                .And(m => m.IsDel == "0" && m.SkuNo != "100099" && m.Status == "0")
                .ToExpression();//注意 这一句 不能少
            return await Db.Queryable<DataStockDetail>().Where(item).GroupBy(m => new { m.SkuNo, m.SkuName, m.Standard, m.LotNo, m.LotText, m.SupplierLot, m.LocatNo, m.PalletNo })
                .Select(a => new StockDetailDto()
                {
                    SkuNo = a.SkuNo,
                    SkuName = a.SkuName,
                    Standard = a.Standard,
                    LotNo = a.LotNo,
                    LotText = a.LotText,
                    SupplierLot = a.SupplierLot,
                    Qty = SqlFunc.AggregateSum(a.Qty),
                    LocatNo = a.LocatNo,
                    PalletNo = a.PalletNo
                }).ToPageListAsync(page, limit, count);
        }
        public EditStockCheckDto GetStockCheckDetailById(string crNo)
        public async Task<EditStockCheckDto> GetStockCheckDetailById(string crNo)
        {
            try
            var notify = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.CRNo == crNo && m.IsDel == "0");
            if (notify == null)
            {
                var notify = Db.Queryable<BllStockCheck>().First(m => m.CRNo == crNo && m.IsDel == "0");
                if (notify == null)
                {
                    throw new Exception($"未查询到{crNo}的盘点单据信息");
                }
                var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.CRNo == crNo && m.IsDel == "0").Select(m => new EditStockCheckDetailDto()
                {
                    SkuNo = m.SkuNo,
                    SkuName = m.SkuName,
                    Standard = m.Standard,
                    LotNo = m.LotNo,
                    LotText = m.LotText,
                    SupplierLot = m.SupplierLot,
                    Qty = m.Qty,
                    PalletNo = m.PalletNo
                }).ToList();
                var data = new EditStockCheckDto()
                {
                    CrNo = crNo,
                    Detail = detail
                };
                return data;
                throw new Exception($"未查询到{crNo}的盘点单据信息");
            }
            catch (Exception e)
            var detail = await Db.Queryable<BllStockCheckDetail>().Where(m => m.CRNo == crNo && m.IsDel == "0").Select(m => new EditStockCheckDetailDto()
            {
                throw new Exception(e.Message);
            }
                SkuNo = m.SkuNo,
                SkuName = m.SkuName,
                Standard = m.Standard,
                LotNo = m.LotNo,
                LotText = m.LotText,
                SupplierLot = m.SupplierLot,
                Qty = m.Qty,
                PalletNo = m.PalletNo
            }).ToListAsync();
            var data = new EditStockCheckDto()
            {
                CrNo = crNo,
                Detail = detail
            };
            return data;
        }
        //添加盘点单、编辑盘点单
        public void AddEditStockCheck(AddEditStockCheckVm model, int userId)
        public async Task AddEditStockCheck(AddEditStockCheckVm model)
        {
            try
            if (model.Detail.Count == 0)
            {
                if (model.Detail.Count == 0)
                {
                    throw new Exception("盘点明细不能为空");
                }
                Db.BeginTran();
                var time = DateTime.Now;
                throw Oops.Bah("盘点明细不能为空");
            }
            var time = DateTime.Now;
                //添加
                if (string.IsNullOrWhiteSpace(model.CrNo))
            //添加
            if (string.IsNullOrWhiteSpace(model.CrNo))
            {
                var num = await Db.Queryable<BllStockCheck>().CountAsync(m => m.IsDel == "0" && (m.Status == 0 || m.Status == 1));
                if (num > 0)
                {
                    var num = Db.Queryable<BllStockCheck>().Count(m => m.IsDel == "0" && (m.Status == 0 || m.Status == 1));
                    if (num > 0)
                    {
                        throw new Exception("已有等待执行的盘点单据请先完成或删除");
                    }
                    var crNo = new Common().GetMaxNo("CR");
                    var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0");
                    var check = new BllStockCheck()
                    throw Oops.Bah("已有等待执行的盘点单据请先完成或删除");
                }
                var crNo = new Common().GetMaxNo("CR");
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0");
                var check = new BllStockCheck()
                {
                    CRNo = crNo,
                    Origin = "0",
                    Status = 0,
                    CreateUser = _userManager.UserId,
                    CreateTime = time
                };
                var list = new List<BllStockCheckDetail>();
                foreach (var item in model.Detail)
                {
                    var detail = new BllStockCheckDetail()
                    {
                        CRNo = crNo,
                        Origin = "0",
                        Status = 0,
                        CreateUser = userId,
                        PalletNo = item.PalletNo,
                        Qty = item.Qty,
                        Status = 0, //0:未盘  1:已盘 2:已调整
                        SkuNo = item.SkuNo,
                        SkuName = item.SkuName,
                        Standard = item.Standard,
                        LotNo = item.LotNo,
                        LotText = item.LotText,
                        SupplierLot = item.SupplierLot,
                        CreateUser = _userManager.UserId,
                        CreateTime = time
                    };
                    var list = new List<BllStockCheckDetail>();
                    foreach (var item in model.Detail)
                    list.Add(detail);
                    var sd = await stockDetail.FirstAsync(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0");
                    sd.Status = "3";
                    Db.Updateable(sd).ExecuteCommand();
                }
                Db.Insertable(check).ExecuteCommand();
                Db.Insertable(list).ExecuteCommand();
                //添加操作日志记录
                await _operation.AddLogOperationCr(new OperationInputVm()
                {
                    ParentName = "库内作业",
                    MenuName = "盘点单据",
                    FkNo = crNo,
                    TypeName = "添加",
                    Msg = $"添加了单据号为{crNo}的盘点单信息"
                });
                //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "添加", $"添加了单据号为{crNo}的盘点单信息", _userManager.UserId);
            }
            else //编辑
            {
                var check = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.CRNo == model.CrNo);
                if (check == null)
                {
                    throw Oops.Bah("未查询到盘点单据的信息");
                }
                check.UpdateUser = _userManager.UserId;
                check.UpdateTime = time;
                await Db.Updateable(check).ExecuteCommandAsync();
                //盘点明细信息
                var checkDetail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == model.CrNo).ToList();
                //删除旧的
                foreach (var d in checkDetail)
                {
                    var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo && o.PalletNo == d.PalletNo).ToList();
                    if (mq.Any()) //如果有这个物料及批次则跳过
                    {
                        continue;
                    }
                    var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.PalletNo == d.PalletNo && m.Status == "3").ToList();
                    foreach (var s in sd)
                    {
                        s.Status = "0";
                    }
                    d.IsDel = "1";
                    d.UpdateUser = _userManager.UserId;
                    d.UpdateTime = time;
                    //修改库存明细的状态(解除盘点锁定)
                    await Db.Updateable(sd).ExecuteCommandAsync();
                    await Db.Updateable(d).ExecuteCommandAsync();
                }
                //添加与修改
                var list = new List<BllStockCheckDetail>();
                foreach (var item in model.Detail)
                {
                    var de = checkDetail.FirstOrDefault(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo);
                    //新加项
                    if (de == null)
                    {
                        var detail = new BllStockCheckDetail()
                        {
                            CRNo = crNo,
                            CRNo = model.CrNo,
                            PalletNo = item.PalletNo,
                            Qty = item.Qty,
                            Status = 0, //0:未盘  1:已盘 2:已调整
@@ -265,163 +308,90 @@
                            LotText = item.LotText,
                            SupplierLot = item.SupplierLot,
                            CreateUser = userId,
                            CreateUser = _userManager.UserId,
                            CreateTime = time
                        };
                        list.Add(detail);
                        var sd = stockDetail.First(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0");
                        sd.Status = "3";
                        Db.Updateable(sd).ExecuteCommand();
                    }
                    Db.Insertable(check).ExecuteCommand();
                    Db.Insertable(list).ExecuteCommand();
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "添加", $"添加了单据号为{crNo}的盘点单信息", userId);
                }
                else //编辑
                {
                    var check = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.CRNo == model.CrNo);
                    if (check == null)
                    {
                        throw new Exception("未查询到盘点单据的信息");
                    }
                    check.UpdateUser = userId;
                    check.UpdateTime = time;
                    Db.Updateable(check).ExecuteCommand();
                    //盘点明细信息
                    var checkDetail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == model.CrNo).ToList();
                    //删除旧的
                    foreach (var d in checkDetail)
                    {
                        var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo && o.PalletNo == d.PalletNo).ToList();
                        if (mq.Any()) //如果有这个物料及批次则跳过
                        {
                            continue;
                        }
                        var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.PalletNo == d.PalletNo && m.Status == "3").ToList();
                        var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList();
                        foreach (var s in sd)
                        {
                            s.Status = "0";
                            s.Status = "3";
                        }
                        d.IsDel = "1";
                        d.UpdateUser = userId;
                        d.UpdateTime = time;
                        //修改库存明细的状态(解除盘点锁定)
                        Db.Updateable(sd).ExecuteCommand();
                        Db.Updateable(d).ExecuteCommand();
                        await Db.Updateable(sd).ExecuteCommandAsync();
                    }
                    //添加与修改
                    var list = new List<BllStockCheckDetail>();
                    foreach (var item in model.Detail)
                    else if (de.Qty != item.Qty)
                    {
                        var de = checkDetail.FirstOrDefault(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo);
                        //新加项
                        if (de == null)
                        {
                            var detail = new BllStockCheckDetail()
                            {
                                CRNo = model.CrNo,
                                PalletNo = item.PalletNo,
                                Qty = item.Qty,
                                Status = 0, //0:未盘  1:已盘 2:已调整
                                SkuNo = item.SkuNo,
                                SkuName = item.SkuName,
                                Standard = item.Standard,
                                LotNo = item.LotNo,
                                LotText = item.LotText,
                                SupplierLot = item.SupplierLot,
                                CreateUser = userId,
                                CreateTime = time
                            };
                            list.Add(detail);
                            var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList();
                            foreach (var s in sd)
                            {
                                s.Status = "3";
                            }
                            Db.Updateable(sd).ExecuteCommand();
                        }
                        else if (de.Qty != item.Qty)
                        {
                            de.Qty = item.Qty;
                            de.UpdateUser = userId;
                            de.UpdateTime = time;
                            Db.Updateable(de).ExecuteCommand();
                        }
                        de.Qty = item.Qty;
                        de.UpdateUser = _userManager.UserId;
                        de.UpdateTime = time;
                        await Db.Updateable(de).ExecuteCommandAsync();
                    }
                    if (list.Count > 0)
                    {
                        Db.Insertable(list).ExecuteCommand();
                    }
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", model.CrNo, "编辑", $"编辑了单据号为{model.CrNo}的盘点单信息", userId);
                }
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
                if (list.Count > 0)
                {
                    await Db.Insertable(list).ExecuteCommandAsync();
                }
                //添加操作日志记录
                await _operation.AddLogOperationCr(new OperationInputVm()
                {
                    ParentName = "库内作业",
                    MenuName = "盘点单据",
                    FkNo = model.CrNo,
                    TypeName = "添加",
                    Msg = $"编辑了单据号为{model.CrNo}的盘点单信息"
                });
                //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", model.CrNo, "编辑", $"编辑了单据号为{model.CrNo}的盘点单信息", _userManager.UserId);
            }
        }
        //删除盘点单
        public void DelStockCheck(int id, int userId)
        public async Task DelStockCheck(int id)
        {
            try
            var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.Id == id);
            if (notice == null || notice.Status != 0)
            {
                var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id);
                if (notice == null || notice.Status != 0)
                {
                    throw new Exception("未查询到状态为等待执行的盘点单信息");
                }
                var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList();
                if (detail.Count == 0)
                {
                    throw new Exception("未查询到盘点单据明细信息");
                }
                Db.BeginTran();
                var time = DateTime.Now;
                foreach (var d in detail)
                {
                    d.IsDel = "1";
                    d.UpdateTime = time;
                    d.UpdateUser = userId;
                    var item = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToList();
                    foreach (var i in item)
                    {
                        i.Status = "0";
                    }
                    Db.Updateable(item).ExecuteCommand();
                }
                notice.IsDel = "1";
                notice.UpdateTime = time;
                notice.UpdateUser = userId;
                Db.Updateable(notice).ExecuteCommand();
                Db.Updateable(detail).ExecuteCommand();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "删除", $"删除了单据号为{notice.CRNo}的盘点单信息", userId);
                Db.CommitTran();
                throw Oops.Bah("未查询到状态为等待执行的盘点单信息");
            }
            catch (Exception e)
            var detail = await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToListAsync();
            if (detail.Count == 0)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
                throw Oops.Bah("未查询到盘点单据明细信息");
            }
            var time = DateTime.Now;
            foreach (var d in detail)
            {
                d.IsDel = "1";
                d.UpdateTime = time;
                d.UpdateUser = _userManager.UserId;
                var item = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToListAsync();
                foreach (var i in item)
                {
                    i.Status = "0";
                }
                await Db.Updateable(item).ExecuteCommandAsync();
            }
            notice.IsDel = "1";
            notice.UpdateTime = time;
            notice.UpdateUser = _userManager.UserId;
            await Db.Updateable(notice).ExecuteCommandAsync();
            await Db.Updateable(detail).ExecuteCommandAsync();
            //添加操作日志记录
            await _operation.AddLogOperationCr(new OperationInputVm()
            {
                ParentName = "库内作业",
                MenuName = "盘点单据",
                FkNo = notice.CRNo,
                TypeName = "删除",
                Msg = $"删除了单据号为{notice.CRNo}的盘点单信息"
            });
            //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "删除", $"删除了单据号为{notice.CRNo}的盘点单信息", userId);
        }
        /// <summary>
@@ -430,24 +400,32 @@
        /// <param name="id"></param>
        /// <param name="demo"></param>
        /// <param name="userId"></param>
        public void EditNoticeDemo(int id, string demo, int userId)
        public async Task EditNoticeDemo(int id, string demo)
        {
            try
            {
                var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id);
                var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.Id == id);
                if (notice == null)
                {
                    throw new Exception("未查询到盘点单据信息");
                }
                notice.Demo = demo + "".Trim();
                notice.UpdateUser = userId;
                notice.UpdateUser = _userManager.UserId;
                notice.UpdateTime = DateTime.Now;
                int i = Db.Updateable(notice).ExecuteCommand();
                if (i > 0)
                {
                    //添加操作日志
                    new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "编辑", $"编辑了单据号为{notice.CRNo}的备注信息", userId);
                    await _operation.AddLogOperationCr(new OperationInputVm()
                    {
                        ParentName = "库内作业",
                        MenuName = "盘点单据",
                        FkNo = notice.CRNo,
                        TypeName = "编辑",
                        Msg = $"编辑了单据号为{notice.CRNo}的备注信息"
                    });
                    //new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "编辑", $"编辑了单据号为{notice.CRNo}的备注信息", userId);
                }
            }
            catch (Exception ex)
@@ -457,39 +435,39 @@
        }
        //调整库存
        public bool StockAdjust(int id, int userId)
        public async Task StockAdjust(int id)
        {
            try
            {
                //盘点信息
                var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id);
                var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.Id == id);
                if (notice == null || notice.Status != 2)
                {
                    throw new Exception("未查询到状态为盘点完成的盘点单信息");
                    throw Oops.Bah("未查询到状态为盘点完成的盘点单信息");
                }
                if (notice == null || notice.Status != 2)
                {
                    throw new Exception("未查询到状态为盘点完成的盘点单信息");
                    throw Oops.Bah("未查询到状态为盘点完成的盘点单信息");
                }
                //盘点明细
                var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList();
                var detail = await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToListAsync();
                if (detail.Count == 0)
                {
                    throw new Exception("未查询到盘点单据明细信息");
                    throw Oops.Bah("未查询到盘点单据明细信息");
                }
                //开启事务
                Db.BeginTran();
                var stock = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList();//库存表
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0").ToList();//库存明细
                var stockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList();//库存箱支明细
                var materialList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();//物料信息
                var packagList = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0").ToList();//包装信息
                var stock = await Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToListAsync();//库存表
                var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0").ToListAsync();//库存明细
                var stockBox = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToListAsync();//库存箱支明细
                var materialList = await Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToListAsync();//物料信息
                var packagList = await Db.Queryable<SysPackag>().Where(m => m.IsDel == "0").ToListAsync();//包装信息
                var time = DateTime.Now;
                //盘点记录
                var checkLog = Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList();
                var checkLog = await Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToListAsync();
                if (checkLog.Count(m => m.CheckResult == null) > 0)
                {
                    throw new Exception($"{notice.CRNo}单据中含有未盘点的信息,请核实!");
                    throw Oops.Bah($"{notice.CRNo}单据中含有未盘点的信息,请核实!");
                }
                List<BoxQtyInfo> boxQtyList = new List<BoxQtyInfo>();
@@ -541,10 +519,10 @@
                foreach (var d in detail)
                {
                    var demo = checkLog.Where(m => m.PalletNo == d.PalletNo).ToList();//盘点记录
                    //循环盘点记录
                                                                                      //循环盘点记录
                    foreach (var l in demo)
                    {
                        var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == l.SkuNo);
                        var sku = await Db.Queryable<SysMaterials>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == l.SkuNo);
                        if (l.CheckResult == 0)//正常
                        {
                            if (sku.Type != "4")
@@ -552,25 +530,25 @@
                                var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                                if (de3 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                    throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                }
                                var de2 = stockDetail.First(m => m.Id == de3.StockDetailId);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                    throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                }
                                de2.Status = "0";//将库存明细状态改为待分配
                                Db.Updateable(de2).ExecuteCommand();
                                await Db.Updateable(de2).ExecuteCommandAsync();
                            }
                            else
                            {
                                var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.PalletNo}的库存明细的信息");
                                    throw Oops.Bah($"未查询到{l.PalletNo}的库存明细的信息");
                                }
                                de2.Status = "0";//将库存明细状态改为待分配
                                Db.Updateable(de2).ExecuteCommand();
                                await Db.Updateable(de2).ExecuteCommandAsync();
                            }
                        }
@@ -581,13 +559,13 @@
                                var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                                if (de3 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                    throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                }
                                var de2 = stockDetail.First(m => m.Id == de3.StockDetailId);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                    throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                }
                                de2.Status = "0";
                                de2.Qty -= de3.Qty;
@@ -598,30 +576,29 @@
                                }
                                de.Qty -= de3.Qty;
                                Db.Updateable(de).ExecuteCommand();
                                Db.Updateable(de2).ExecuteCommand();
                                Db.Deleteable(de3).ExecuteCommand();
                                await Db.Updateable(de).ExecuteCommandAsync();
                                await Db.Updateable(de2).ExecuteCommandAsync();
                                await Db.Deleteable(de3).ExecuteCommandAsync();
                            }
                            else
                            {
                                var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.PalletNo}的库存明细的信息");
                                    throw Oops.Bah($"未查询到{l.PalletNo}的库存明细的信息");
                                }
                                de2.Status = "0";
                                de2.Qty = l.RealQty;
                                var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
                                if (de == null)
                                {
                                    throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息");
                                    throw Oops.Bah($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息");
                                }
                                de.Qty -= Convert.ToDecimal(l.Qty - l.RealQty);
                                Db.Updateable(de).ExecuteCommand();
                                Db.Updateable(de2).ExecuteCommand();
                                await Db.Updateable(de).ExecuteCommandAsync();
                                await Db.Updateable(de2).ExecuteCommandAsync();
                            }
                        }
                        else if (l.CheckResult == 2)//盘盈
                        {
@@ -656,7 +633,7 @@
                                    ProductionTime = stockBoxInfo.ProductionTime,
                                    BitBoxMark = boxInfo.bitBoxMark,
                                };
                                Db.Insertable<DataBoxInfo>(databox).ExecuteCommand();
                                await Db.Insertable<DataBoxInfo>(databox).ExecuteCommandAsync();
                                //库存明细增加数量
                                stockDetailInfo.Qty += (int)l.RealQty;
                            }
@@ -667,12 +644,12 @@
                            }
                            stockDetailInfo.Status = "0";
                            Db.Updateable(stockDetailInfo).ExecuteCommand();
                            await Db.Updateable(stockDetailInfo).ExecuteCommandAsync();
                            //库存增加数量
                            var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
                            if (de == null)
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存的信息");
                                throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存的信息");
                            }
                            if (sku.Type != "4")
                            {
@@ -683,13 +660,13 @@
                                de.Qty += (int)(l.RealQty - l.Qty);
                            }
                            Db.Updateable(de).ExecuteCommand();
                            await Db.Updateable(de).ExecuteCommandAsync();
                        }
                    }
                    //修改盘点明细
                    d.Status = 4;//状态
                    d.UpdateTime = time;
                    d.UpdateUser = userId;
                    d.UpdateUser = _userManager.UserId;
                    //盘点结果
                    if (d.Qty == d.RealQty)
                    {
@@ -707,18 +684,18 @@
                    {
                        d.CheckResult = 1;
                    }
                    Db.Updateable(d).ExecuteCommand();
                    await Db.Updateable(d).ExecuteCommandAsync();
                    #region 添加判断盘点完托盘是否是零托 
                    var material = materialList.FirstOrDefault(m => m.SkuNo == d.SkuNo);
                    if (material == null)
                    {
                        throw new Exception($"未查询到{d.SkuNo}的物料信息;");
                        throw Oops.Bah($"未查询到{d.SkuNo}的物料信息;");
                    }
                    var pack = packagList.FirstOrDefault(m => m.PackagNo == material.PackagNo);
                    if (pack == null)
                    {
                        throw new Exception($"未查询到{d.SkuNo}的包装信息;");
                        throw Oops.Bah($"未查询到{d.SkuNo}的包装信息;");
                    }
                    var pNum = 0;//托盘物品数量
                    var bNum = 0;//箱物品数量
@@ -744,7 +721,7 @@
                    }
                    if (pNum == 0)
                    {
                        throw new Exception("未查询到物料包装托箱关系信息");
                        throw Oops.Bah("未查询到物料包装托箱关系信息");
                    }
                    var stockDetailInfo2 = stockDetail.First(m => m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);//库存明细
                    if (stockDetailInfo2.Qty >= pNum)
@@ -756,20 +733,27 @@
                        stockDetailInfo2.BitPalletMark = "1";
                    }
                    Db.Updateable(stockDetailInfo2).ExecuteCommand();
                    await Db.Updateable(stockDetailInfo2).ExecuteCommandAsync();
                    #endregion
                }
                //修该盘点信息
                notice.Status = 3;//状态
                notice.UpdateTime = time;
                notice.UpdateUser = userId;
                Db.Updateable(notice).ExecuteCommand();
                notice.UpdateUser = _userManager.UserId;
                await Db.Updateable(notice).ExecuteCommandAsync();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId);
                //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId);
                await _operation.AddLogOperationCr(new OperationInputVm()
                {
                    ParentName = "库内作业",
                    MenuName = "盘点单据",
                    FkNo = notice.CRNo,
                    TypeName = "调整单据",
                    Msg = $"调整了单据号为{notice.CRNo}的盘点单信息"
                });
                //提交事务
                Db.CommitTran();
                return true;
            }
            catch (Exception e)
            {
@@ -780,7 +764,7 @@
        }
        //调整库存-针对异常生成的
        public bool StockAdjustAuto(int id, int userId)
        public async Task StockAdjustAuto(int id)
        {
            try
            {
@@ -788,55 +772,54 @@
                var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id);
                if (notice == null || notice.Status != 2)
                {
                    throw new Exception("未查询到状态为盘点完成的盘点单信息");
                    throw Oops.Bah("未查询到状态为盘点完成的盘点单信息");
                }
                //盘点明细
                var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList();
                if (detail.Count == 0)
                {
                    throw new Exception("未查询到盘点单据明细信息");
                    throw Oops.Bah("未查询到盘点单据明细信息");
                }
                //开启事务
                Db.BeginTran();
                var stock = Db.Queryable<DataStock>().Where(m => m.IsDel == "0");//库存
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0");//库存明细
                var stockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0");//库存箱支信息
                var time = DateTime.Now;
                //盘点记录
                var checkLog = Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo);
                if (checkLog.Count(m => m.CheckResult == null) > 0)
                if (await checkLog.CountAsync(m => m.CheckResult == null) > 0)
                {
                    throw new Exception($"{notice.CRNo}单据中含有未盘点的信息,请核实!");
                }
                foreach (var d in detail)
                {
                    //托盘绑定表
                    var palletBind = Db.Queryable<BllPalletBind>().First(m => m.PalletNo == d.PalletNo);
                    var palletBind = await Db.Queryable<BllPalletBind>().FirstAsync(m => m.PalletNo == d.PalletNo);
                    //储位表
                    var storageLocat = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == palletBind.LocatNo);
                    var storageLocat = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == palletBind.LocatNo);
                    if (storageLocat != null && storageLocat.Flag == "1")
                    {
                        //将储位标志Flag修改为:0:正常
                        storageLocat.Flag = "0";
                        storageLocat.UpdateUser = userId;
                        storageLocat.UpdateUser = _userManager.UserId;
                        storageLocat.UpdateTime = time;
                        Db.Updateable(storageLocat).ExecuteCommand();
                        await Db.Updateable(storageLocat).ExecuteCommandAsync();
                    }
                    //条码管理(托盘)
                    var pallets = Db.Queryable<SysPallets>().First(m => m.PalletNo == d.PalletNo);
                    var pallets = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == d.PalletNo);
                    if (pallets != null && pallets.Status == "1")
                    {
                        //将托盘号状态变更为 0 未使用
                        pallets.Status = "0";
                        pallets.UpdateUser = userId;
                        pallets.UpdateUser = _userManager.UserId;
                        pallets.UpdateTime = time;
                        Db.Updateable(pallets).ExecuteCommand();
                        await Db.Updateable(pallets).ExecuteCommandAsync();
                    }
                    //盘点记录
                    var demo = checkLog.Where(m => m.PalletNo == d.PalletNo).ToList();
                    var demo = await checkLog.Where(m => m.PalletNo == d.PalletNo).ToListAsync();
                    foreach (var l in demo)
                    {
                        if (l.CheckResult == 0)//正常
@@ -846,48 +829,55 @@
                        else if (l.CheckResult == 1)//盘亏
                        {
                            //物理删除库存箱支信息
                            var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                            var de3 = await stockBox.FirstAsync(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                            if (de3 == null)
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                            }
                            Db.Deleteable(de3).ExecuteCommand();
                            await Db.Deleteable(de3).ExecuteCommandAsync();
                            //物理删除库存明细
                            var de2 = stockDetail.First(m => m.Id == de3.StockDetailId);
                            var de2 = await stockDetail.FirstAsync(m => m.Id == de3.StockDetailId);
                            if (de2 == null)
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                            }
                            Db.Deleteable(de2).ExecuteCommand();
                            await Db.Deleteable(de2).ExecuteCommandAsync();
                            //更改库存数量和锁定数量
                            var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
                            var de = await stock.FirstAsync(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
                            if (de == null)
                            {
                                throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息");
                                throw Oops.Bah($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息");
                            }
                            de.Qty -= de3.Qty;
                            de.LockQty -= de3.Qty;
                            Db.Updateable(de).ExecuteCommand();
                            await Db.Updateable(de).ExecuteCommandAsync();
                        }
                    }
                    //将盘点明细状态改为 已调整
                    d.Status = 4;
                    d.UpdateTime = time;
                    d.UpdateUser = userId;
                    d.UpdateUser = _userManager.UserId;
                    Db.Updateable(d).ExecuteCommand();
                    await Db.Updateable(d).ExecuteCommandAsync();
                }
                //将盘点总表状态改为 生成调整
                notice.Status = 3;
                notice.UpdateTime = time;
                notice.UpdateUser = userId;
                Db.Updateable(notice).ExecuteCommand();
                notice.UpdateUser = _userManager.UserId;
                await Db.Updateable(notice).ExecuteCommandAsync();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId);
                //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId);
                await _operation.AddLogOperationCr(new OperationInputVm()
                {
                    ParentName = "库内作业",
                    MenuName = "盘点单据",
                    FkNo = notice.CRNo,
                    TypeName = "调整单据",
                    Msg = $"调整了单据号为{notice.CRNo}的盘点单信息"
                });
                //提交事务
                Db.CommitTran();
                return true;
            }
            catch (Exception e)
            {
@@ -897,7 +887,7 @@
        }
        //盘点下发出库
        public List<OutCommandDto> CheckOutHouse(string crNo, string outMode, int userId, string url, out string str)
        public async Task<List<OutCommandDto>> CheckOutHouse(string crNo, string outMode, string url, string str)
        {
            try
            {
@@ -909,25 +899,25 @@
                #endregion
                var com = new Common();
                //assign.IsHavePyTask();
                var notice = Db.Queryable<BllStockCheck>().First(m => m.CRNo == crNo && m.IsDel == "0");
                var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.CRNo == crNo && m.IsDel == "0");
                if (notice == null)
                {
                    throw new Exception($"未找到{crNo}盘点单信息");
                    throw Oops.Bah($"未找到{crNo}盘点单信息");
                }
                //所有要出库的盘点明细信息(等待的信息和待拣货的信息)
                var list = Db.Queryable<BllStockCheckDetail>().Where(a => a.IsDel == "0" && a.CRNo == crNo && a.Status == 0).ToList();
                var list = await Db.Queryable<BllStockCheckDetail>().Where(a => a.IsDel == "0" && a.CRNo == crNo && a.Status == 0).ToListAsync();
                if (list.Count == 0) //判断是否有需要下发的盘点明细
                {
                    throw new Exception("当前盘点单据无需要下发的托盘");
                    throw Oops.Bah("当前盘点单据无需要下发的托盘");
                }
                #region 
                //要出库的托盘集合
                var outLpnList = list.Select(m => m.PalletNo).Distinct().ToList();
                //要出库的明细集合
                var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
                var outStockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
                var outStockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync();
                var outStockBox = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync();
                //获取物料信息
                var skuNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToList();
                var skuNo = await Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToListAsync();
                var time = DateTime.Now;
                Db.BeginTran();
                try
@@ -959,7 +949,7 @@
                                    LotText = de.LotText,
                                    SupplierLot = de.SupplierLot,
                                    CreateUser = userId,
                                    CreateUser = _userManager.UserId,
                                    CreateTime = time
                                };
                                logList.Add(checkLog);
@@ -987,7 +977,7 @@
                                        LotText = b.LotText,
                                        SupplierLot = b.SupplierLot,
                                        CreateUser = userId,
                                        CreateUser = _userManager.UserId,
                                        CreateTime = time
                                    };
                                    logList.Add(checkLog);
@@ -995,7 +985,7 @@
                            }
                            //生成盘点记录
                            Db.Insertable(logList).ExecuteCommand();
                            await Db.Insertable(logList).ExecuteCommandAsync();
                        }
                        // 储位号
                        var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo).LocatNo;
@@ -1010,25 +1000,25 @@
                            {
                                //盘点明细状态改为待盘点 
                                item.Status = 2;
                                Db.Updateable(item).ExecuteCommand();
                                await Db.Updateable(item).ExecuteCommandAsync();
                                //盘点信息修改
                                if (notice.Status == 0)
                                {
                                    notice.CheckDate = DateTime.Now;
                                    notice.Status = 1;
                                    notice.UpdateUser = userId;
                                    notice.UpdateUser = _userManager.UserId;
                                    notice.UpdateTime = time;
                                    Db.Updateable(notice).ExecuteCommand();
                                    await Db.Updateable(notice).ExecuteCommandAsync();
                                }
                                //库存中当前托盘的信息
                                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == item.PalletNo).ToList();
                                var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == item.PalletNo).ToListAsync();
                                foreach (var s in stockDetail)
                                {
                                    s.LocatNo = "";//储位更改(改为空)
                                    s.WareHouseNo = "";//所属仓库更改(改为空)
                                    s.RoadwayNo = "";//所属巷道更改(改为空)
                                    s.AreaNo = "";//所属区域更改(改为空)
                                    Db.Updateable(s).ExecuteCommand();
                                    await Db.Updateable(s).ExecuteCommandAsync();
                                }
                                flagList.Add(5);
                                continue;
@@ -1045,20 +1035,20 @@
                            {
                                //如果不在仓库内,当前明细信息直接更新出库完成 
                                item.Status = 2;//状态 
                                Db.Updateable(item).ExecuteCommand();
                                await Db.Updateable(item).ExecuteCommandAsync();
                                if (notice.Status == 0)
                                {
                                    notice.CheckDate = DateTime.Now;
                                    notice.Status = 1;
                                    notice.UpdateUser = userId;
                                    notice.UpdateUser = _userManager.UserId;
                                    notice.UpdateTime = time;
                                    Db.Updateable(notice).ExecuteCommand();
                                    await Db.Updateable(notice).ExecuteCommandAsync();
                                }
                            }
                            continue;
                        }
                        //当前出库的储位信息
                        var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");
                        var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo && m.IsDel == "0");
                        if (locate == null)
                        {
                            flagList.Add(2);
@@ -1082,7 +1072,6 @@
                                Sender = "WMS",
                                Receiver = "WCS",
                                IsSuccess = 0, //是否下发成功 0失败 1成功
                                StartLocat = locate.LocatNo,//起始位置
                                EndLocat = outMode,//目标位置
                                PalletNo = item.PalletNo,//托盘码
@@ -1095,7 +1084,7 @@
                                CreateTime = time
                            };
                            Db.Insertable(exTask).ExecuteCommand();
                            await Db.Insertable(exTask).ExecuteCommandAsync();
                            outDtoList.Add(new OutCommandDto()
                            {
@@ -1117,17 +1106,17 @@
                                {
                                    notice.CheckDate = DateTime.Now;
                                    notice.Status = 1;
                                    notice.UpdateUser = userId;
                                    notice.UpdateUser = _userManager.UserId;
                                    notice.UpdateTime = time;
                                    Db.Updateable(notice).ExecuteCommand();
                                    await Db.Updateable(notice).ExecuteCommandAsync();
                                }
                            }
                            locate.Status = "3"; //要出库的储位改变状态 正在出库
                            Db.Updateable(locate).ExecuteCommand();
                            await Db.Updateable(locate).ExecuteCommandAsync();
                            item.TaskNo = exTask.TaskNo; // 出库分配信息中更新任务号
                            item.Status = 1; // 出库分配信息状态改为正在执行 
                            Db.Updateable(item).ExecuteCommand();
                            await Db.Updateable(item).ExecuteCommandAsync();
                            #endregion
                            flagList.Add(0);
@@ -1142,16 +1131,16 @@
                                {
                                    notice.CheckDate = DateTime.Now;
                                    notice.Status = 1;
                                    notice.UpdateUser = userId;
                                    notice.UpdateUser = _userManager.UserId;
                                    notice.UpdateTime = time;
                                    Db.Updateable(notice).ExecuteCommand();
                                    await Db.Updateable(notice).ExecuteCommandAsync();
                                }
                            }
                            var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "2" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
                            item.TaskNo = taskNo.TaskNo;
                            item.Status = 1; // 出库分配信息状态改为正在执行 
                            Db.Updateable(item).ExecuteCommand();
                            await Db.Updateable(item).ExecuteCommandAsync();
                            #endregion
                        }
@@ -1161,7 +1150,15 @@
                        }
                    }
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "出库", $"点击出库按钮盘点单号为:{crNo}的盘点单", userId);
                    //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "出库", $"点击出库按钮盘点单号为:{crNo}的盘点单", userId);
                    await _operation.AddLogOperationCr(new OperationInputVm()
                    {
                        ParentName = "库内作业",
                        MenuName = "盘点单据",
                        FkNo = crNo,
                        TypeName = "出库",
                        Msg = $"点击出库按钮盘点单号为:{crNo}的盘点单"
                    });
                    Db.CommitTran();
                    str = string.Empty;
@@ -1233,7 +1230,7 @@
        }
        //盘点出库完成
        public void CheckSuccess(string taskNo, int userId)
        public async Task CheckSuccess(string taskNo, int userId)
        {
            try
            {
@@ -1241,48 +1238,56 @@
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                if (task == null)
                {
                    throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息");
                    throw Oops.Bah($"未查询到任务号为:‘{taskNo}’的任务信息");
                }
                if (task.Status == "2")
                {
                    throw new Exception("当前任务已完成");
                    throw Oops.Bah("当前任务已完成");
                }
                Db.BeginTran();
                //库存中当前托盘的信息
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
                var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToListAsync();
                var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault();
                //当前任务中的储位信息
                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo);
                var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo);
                task.Status = "2";//任务状态
                task.IsSend = 0;
                task.IsCancel = 0;
                task.IsFinish = 0;
                task.FinishDate = DateTime.Now;//完成时间
                Db.Updateable(task).ExecuteCommand();
                await Db.Updateable(task).ExecuteCommandAsync();
                locate.Status = "0"; // 更改当前任务中的储位状态(改为0空储位)
                Db.Updateable(locate).ExecuteCommand();
                await Db.Updateable(locate).ExecuteCommandAsync();
                foreach (var item in stockDetail)
                {
                    item.LocatNo = "";//储位更改(改为空)
                    item.WareHouseNo = "";//所属仓库更改(改为空)
                    item.RoadwayNo = "";//所属巷道更改(改为空)
                    item.AreaNo = "";//所属区域更改(改为空)
                    Db.Updateable(item).ExecuteCommand();
                    await Db.Updateable(item).ExecuteCommandAsync();
                }
                //盘点明细(更改状态)
                var checkDetails = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == 1 && m.PalletNo == task.PalletNo))).ToList();
                var checkDetails = await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == 1 && m.PalletNo == task.PalletNo))).ToListAsync();
                foreach (var item in checkDetails)
                {
                    item.Status = 2;
                    Db.Updateable(item).ExecuteCommand();
                    await Db.Updateable(item).ExecuteCommandAsync();
                }
                if (userId != 0)
                if (_userManager.UserId != 0)
                {
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                    //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                    await _operation.AddLogOperationCr(new OperationInputVm()
                    {
                        ParentName = "库内作业",
                        MenuName = "库内日志",
                        FkNo = taskNo,
                        TypeName = "完成",
                        Msg = $"点击完成按钮、完成任务号为:{taskNo}的任务"
                    });
                }
                Db.CommitTran();
@@ -1295,27 +1300,27 @@
        }
        //AGV移库完成
        public void MoveSuccess(string taskNo, int userId)
        public async Task MoveSuccess(string taskNo)
        {
            try
            {
                //当前任务信息
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0");
                if (task == null)
                {
                    throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息");
                    throw Oops.Bah($"未查询到任务号为:‘{taskNo}’的任务信息");
                }
                if (task.Status == "2")
                {
                    throw new Exception("当前任务已完成");
                    throw Oops.Bah("当前任务已完成");
                }
                Db.BeginTran();
                //库存中当前托盘的信息
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
                var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToListAsync();
                var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault();
                //当前任务中的储位信息
                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo);
                var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo);
                //更改任务
                task.Status = "2";//任务状态
@@ -1325,16 +1330,16 @@
                task.FinishDate = DateTime.Now;//完成时间
                Db.Updateable(task).ExecuteCommand();
                // 更改当前任务中的储位状态(改为0空储位)
                locate.Status = "0";
                locate.Status = "0";
                Db.Updateable(locate).ExecuteCommand();
                //目标储位信息
                var endLocate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
                var endLocate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == task.EndLocat);
                if (endLocate != null)
                {
                    if (endLocate.Status != "0")
                    {
                        throw new Exception("目标储位状态非空储位");
                        throw Oops.Bah("目标储位状态非空储位");
                    }
                }
                //更改库存明细
@@ -1355,25 +1360,33 @@
                        item.WareHouseNo = "";//所属仓库更改(改为空)
                        item.RoadwayNo = "";//所属巷道更改(改为空)
                        item.AreaNo = "";//所属区域更改(改为空)
                    }
                    Db.Updateable(item).ExecuteCommand();
                    }
                    await Db.Updateable(item).ExecuteCommandAsync();
                    //更改库存总表
                    var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
                    stock.LockQty -= (decimal)item.Qty;
                    Db.Updateable(stock).ExecuteCommand();
                    await Db.Updateable(stock).ExecuteCommandAsync();
                }
                if (endLocate != null)
                {
                    //更改目标储位状态
                    endLocate.Status = "1";//有物品
                    Db.Updateable(endLocate).ExecuteCommand();
                    await Db.Updateable(endLocate).ExecuteCommandAsync();
                }
                if (userId != 0)
                if (_userManager.UserId != 0)
                {
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                    //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                    await _operation.AddLogOperationCr(new OperationInputVm()
                    {
                        ParentName = "库内作业",
                        MenuName = "库内日志",
                        FkNo = taskNo,
                        TypeName = "完成",
                        Msg = $"点击完成按钮、完成任务号为:{taskNo}的任务"
                    });
                }
                Db.CommitTran();
@@ -1386,19 +1399,19 @@
        }
        //重新下发盘点出库任务
        public OutCommandDto AgainSendCheckTask(string taskNo, int userId, string url)
        public async Task<OutCommandDto> AgainSendCheckTask(string taskNo, string url)
        {
            try
            {
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0");
                if (task == null)
                {
                    throw new Exception("未查询到任务信息");
                    throw Oops.Bah("未查询到任务信息");
                }
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == task.PalletNo);
                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.PalletNo == task.PalletNo);
                if (stockDetail == null)
                {
                    throw new Exception(task.PalletNo + " 当前托盘未在库内,请核实信息");
                    throw Oops.Bah(task.PalletNo + " 当前托盘未在库内,请核实信息");
                }
                Db.BeginTran();
                var locateNo = task.StartLocat;
@@ -1407,13 +1420,13 @@
                {
                    locateNo = stockDetail.LocatNo;
                    task.StartLocat = locateNo;
                    Db.Updateable(task).ExecuteCommand();
                    await Db.Updateable(task).ExecuteCommandAsync();
                }
                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo);
                if (locate != null && locate.Status != "3")
                {
                    locate.Status = "3";
                    Db.Updateable(locate).ExecuteCommand();
                    await Db.Updateable(locate).ExecuteCommandAsync();
                }
                var outDto = new OutCommandDto()
                {
@@ -1427,7 +1440,15 @@
                    Order = 1
                }; //出库数据 
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "下发", $"点击下发按钮、重新下发了任务号为:{taskNo}的任务", userId);
                //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "下发", $"点击下发按钮、重新下发了任务号为:{taskNo}的任务", userId);
                await _operation.AddLogOperationCr(new OperationInputVm()
                {
                    ParentName = "库内作业",
                    MenuName = "库内日志",
                    FkNo = taskNo,
                    TypeName = "下发",
                    Msg = $"点击下发按钮、重新下发了任务号为:{taskNo}的任务"
                });
                Db.CommitTran();
                // 正式运行程序放开
                var list = new List<string> { outDto.TaskNo };
@@ -1468,17 +1489,17 @@
        }
        //取消盘点出库任务
        public void CancelCheckTask(string taskNo, int userId)
        public async Task CancelCheckTask(string taskNo)
        {
            try
            {
                Db.BeginTran();
                try
                {
                    var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                    var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0");
                    if (task == null)
                    {
                        throw new Exception("未查询到任务信息");
                        throw Oops.Bah("未查询到任务信息");
                    }
                    //修改任务 
                    task.IsSuccess = 0;
@@ -1487,37 +1508,45 @@
                    task.IsFinish = 0;
                    task.Status = "4";
                    task.CancelDate = DateTime.Now;
                    Db.Updateable(task).ExecuteCommand();
                    await Db.Updateable(task).ExecuteCommandAsync();
                    //修改盘点明细
                    var checkDetail = Db.Queryable<BllStockCheckDetail>().First(w => w.TaskNo == task.TaskNo);
                    var checkDetail = await Db.Queryable<BllStockCheckDetail>().FirstAsync(w => w.TaskNo == task.TaskNo);
                    if (checkDetail == null)
                    {
                        throw new Exception("未查询到盘点明细信息,请核实!");
                        throw Oops.Bah("未查询到盘点明细信息,请核实!");
                    }
                    checkDetail.Status = 0;
                    checkDetail.TaskNo = "";
                    Db.Updateable(checkDetail).ExecuteCommand();
                    await Db.Updateable(checkDetail).ExecuteCommandAsync();
                    //修改盘点记录
                    var checkLog = Db.Queryable<BllStockCheckLog>().First(w => w.CRNo == checkDetail.CRNo && w.PalletNo == checkDetail.PalletNo && w.IsDel == "0");
                    var checkLog = await Db.Queryable<BllStockCheckLog>().FirstAsync(w => w.CRNo == checkDetail.CRNo && w.PalletNo == checkDetail.PalletNo && w.IsDel == "0");
                    if (checkLog == null)
                    {
                        throw new Exception("未查询到盘点记录信息,请核实!");
                        throw Oops.Bah("未查询到盘点记录信息,请核实!");
                    }
                    checkLog.IsDel = "1";
                    Db.Updateable(checkLog).ExecuteCommand();
                    await Db.Updateable(checkLog).ExecuteCommandAsync();
                    //修改储位信息
                    var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat);
                    var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat);
                    if (locat == null)
                    {
                        throw new Exception("未查询到储位信息,请核实!");
                        throw Oops.Bah("未查询到储位信息,请核实!");
                    }
                    locat.Status = "1"; //有物品
                    Db.Updateable(locat).ExecuteCommand();
                    await Db.Updateable(locat).ExecuteCommandAsync();
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId);
                    //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId);
                    await _operation.AddLogOperationCr(new OperationInputVm()
                    {
                        ParentName = "库内作业",
                        MenuName = "库内日志",
                        FkNo = taskNo,
                        TypeName = "取消",
                        Msg = $"点击取消按钮、取消了任务号为:{taskNo}的任务"
                    });
                    Db.CommitTran();
                }
                catch (Exception e)
@@ -1533,16 +1562,16 @@
        }
        //取消AGV移库任务
        public void CancelMoveTask(string taskNo, int userId)
        public async Task CancelMoveTask(string taskNo)
        {
            try
            {
                Db.BeginTran();
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0");
                if (task == null)
                {
                    throw new Exception("未查询到任务信息");
                    throw Oops.Bah("未查询到任务信息");
                }
                //修改任务 
                task.IsSuccess = 0;
@@ -1551,46 +1580,54 @@
                task.IsFinish = 0;
                task.Status = "4";
                task.CancelDate = DateTime.Now;
                Db.Updateable(task).ExecuteCommand();
                await Db.Updateable(task).ExecuteCommandAsync();
                //修改起始储位信息
                var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat);
                var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat);
                if (locat == null)
                {
                    throw new Exception("未查询到储位信息,请核实!");
                    throw Oops.Bah("未查询到储位信息,请核实!");
                }
                locat.Status = "1"; //有物品
                Db.Updateable(locat).ExecuteCommand();
                //修改目标储位信息
                var locatEnd = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.EndLocat);
                var locatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.EndLocat);
                if (locatEnd != null)
                {
                    locatEnd.Status = "0"; //空储位
                    Db.Updateable(locatEnd).ExecuteCommand();
                }
                    await Db.Updateable(locatEnd).ExecuteCommandAsync();
                }
                //修改库存明细
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo);
                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == task.PalletNo);
                if (stockDetail == null)
                {
                    throw new Exception("托盘上物料库存明细信息不存在,请检查!");
                    throw Oops.Bah("托盘上物料库存明细信息不存在,请检查!");
                }
                stockDetail.Status = "0";//待分配
                stockDetail.LockQty = 0;//锁定数量
                Db.Updateable(stockDetail).ExecuteCommand();
                await Db.Updateable(stockDetail).ExecuteCommandAsync();
                //修改库存
                var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo);
                var stock = await Db.Queryable<DataStock>().FirstAsync(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo);
                if (stock == null)
                {
                    throw new Exception("托盘上物料库存信息不存在,请检查!");
                    throw Oops.Bah("托盘上物料库存信息不存在,请检查!");
                }
                stock.LockQty -= (decimal)stockDetail.Qty;
                Db.Updateable(stock).ExecuteCommand();
                await Db.Updateable(stock).ExecuteCommandAsync();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId);
                //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId);
                await _operation.AddLogOperationCr(new OperationInputVm()
                {
                    ParentName = "库内作业",
                    MenuName = "库内日志",
                    FkNo = taskNo,
                    TypeName = "取消",
                    Msg = $"点击取消按钮、取消了任务号为:{taskNo}的任务"
                });
                Db.CommitTran();
            }
            catch (Exception e)
Wms/WMS.BLL/LogServer/OperationCrServer.cs
@@ -2,8 +2,12 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Model.ModelDto.LogDto;
using Model.ModelVm.LogVm;
using SqlSugar;
using Utility;
using WMS.DAL;
using WMS.Entity.Context;
using WMS.Entity.LogEntity;
@@ -15,8 +19,13 @@
    public class OperationCrServer: DbHelper<LogOperationCR>,IOperationCRServer
    {
        private static readonly SqlSugarScope Db = DataContext.Db;
        private readonly UserManager _userManager;
        public OperationCrServer() : base(Db)
        {
        }
        public OperationCrServer(UserManager userManager) : base(Db)
        {
            _userManager = userManager;
        }
        public List<OperationDto> GetLogOperationCrList(string menuName, string type, string msg, string startTime, string endTime, int page, int limit, out int count)
        {
@@ -61,9 +70,8 @@
        {
            try
            {
                var contextDb = DataContext.Db;
                var menu = contextDb.Queryable<SysFunctionMenu>().Where(m => m.IsDel == "0").ToList();
                var dic = contextDb.Queryable<SysDictionary>().Where(m => m.ParentNo == "LogType" && m.IsDel == "0").ToList();
                var menu = Db.Queryable<SysFunctionMenu>().Where(m => m.IsDel == "0").ToList();
                var dic = Db.Queryable<SysDictionary>().Where(m => m.ParentNo == "LogType" && m.IsDel == "0").ToList();
                var typeId = dic.FirstOrDefault(m => m.DictName == type);
                var n = Add(new LogOperationCR()
@@ -85,5 +93,18 @@
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 新增系统操作日志
        /// </summary>
        /// <returns></returns>
        public async Task<int> AddLogOperationCr(OperationInputVm input)
        {
            input.ParentNo = (await Db.Queryable<SysFunctionMenu>().FirstAsync(s => s.MenuName == input.ParentName && s.IsDel == "0"))?.MenuNo;
            input.MenuNo = (await Db.Queryable<SysFunctionMenu>().FirstAsync(s => s.MenuName == input.MenuName && s.IsDel == "0"))?.MenuNo;
            input.Type = (await Db.Queryable<SysDictionary>().FirstAsync(s => s.DictName == input.TypeName && s.IsDel == "0"))?.Id.ToString();
            input.CreateUser = _userManager.UserId;
            input.CreateTime = DateTime.Now;
            return await Db.Insertable<LogOperationSys>(input).ExecuteCommandAsync();
        }
    }
}
Wms/WMS.IBLL/IBllCheckServer/IStockCheckServer.cs
@@ -1,10 +1,12 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Model.InterFaceModel;
using Model.ModelDto.BllCheckDto;
using Model.ModelDto.DataDto;
using Model.ModelVm.BllCheckVm;
using SqlSugar;
namespace WMS.IBLL.IBllCheckServer
{
@@ -25,7 +27,7 @@
        /// <param name="limit"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        List<StockCheckDto> GetStockCheckList(string crNo, string status, string palletNo, string skuNo, string skuName, string lotNo, string startTime, string endTime, int page, int limit, out int count);
        Task<List<StockCheckDto>> GetStockCheckList(string crNo, string status, string palletNo, string skuNo, string skuName, string lotNo, string startTime, string endTime, int page, int limit, RefAsync<int> count);
        /// <summary>
        /// 获取盘点单据明细
@@ -35,7 +37,7 @@
        /// <param name="limit"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        List<StockCheckDetailDto> GetStockCheckDetailList(string crNo, int page, int limit, out int count);
        Task<List<StockCheckDetailDto>> GetStockCheckDetailList(string crNo, int page, int limit, RefAsync<int> count);
        /// <summary>
        /// 获取库存明细信息(盘点选择明细数据源)
@@ -45,28 +47,28 @@
        /// <param name="locateNo">储位号</param>
        /// <param name="msg">物料编码、名称、批次号</param>
        /// <returns></returns>
        List<StockDetailDto> GetCheckStockDetailList(string houseNo,string roadwayNo,string locateNo,string msg, int page, int limit, out int count);
        Task<List<StockDetailDto>> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg, int page, int limit, RefAsync<int> count);
        /// <summary>
        /// 获取编辑盘点单时信息
        /// </summary>
        /// <param name="crNo">盘点单据号</param>
        /// <returns></returns>
        EditStockCheckDto GetStockCheckDetailById(string crNo);
        Task<EditStockCheckDto> GetStockCheckDetailById(string crNo);
        /// <summary>
        /// 添加/编辑盘点单
        /// </summary>
        /// <param name="model">库存明细集合</param>
        /// <param name="userId"></param>
        void AddEditStockCheck(AddEditStockCheckVm model, int userId);
        Task AddEditStockCheck(AddEditStockCheckVm model);
        /// <summary>
        /// 删除盘点单
        /// </summary>
        /// <param name="id">盘点单Id</param>
        /// <param name="userId">操作人</param>
        void DelStockCheck(int id, int userId);
        Task DelStockCheck(int id);
        /// <summary>
        /// 维护盘点单备注信息
@@ -74,7 +76,7 @@
        /// <param name="id"></param>
        /// <param name="demo"></param>
        /// <param name="userId"></param>
        void EditNoticeDemo(int id, string demo, int userId);
        Task EditNoticeDemo(int id, string demo);
        /// <summary>
        /// 调整库存并
@@ -82,14 +84,14 @@
        /// <param name="id"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        bool StockAdjust(int id, int userId);
        Task StockAdjust(int id);
        /// <summary>
        /// 调整库存-针对异常生成的
        /// </summary>
        /// <param name="id"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        bool StockAdjustAuto(int id, int userId);
        Task StockAdjustAuto(int id);
        //-----------------------------------------------------------------------
        /// <summary>
@@ -101,20 +103,20 @@
        /// <param name="url"></param>
        /// <param name="str"></param>
        /// <returns></returns>
        List<OutCommandDto> CheckOutHouse(string crNo, string outMode, int userId, string url, out string str);
        Task<List<OutCommandDto>> CheckOutHouse(string crNo, string outMode, string url, string str);
        /// <summary>
        /// 盘点出库完成
        /// </summary>
        /// <param name="taskNo">任务号</param>
        /// <param name="userId">wms:操作人 wcs:0</param>
        void CheckSuccess(string taskNo, int userId);
        Task CheckSuccess(string taskNo,int userId);
        //重新下发盘点出库任务
        OutCommandDto AgainSendCheckTask(string taskNo, int userId, string url);
        Task<OutCommandDto> AgainSendCheckTask(string taskNo, string url);
        //取消盘点出库任务
        void CancelCheckTask(string taskNo, int userId);
        Task CancelCheckTask(string taskNo);
        /// <summary>
        /// 盘点结果上传erp
@@ -129,13 +131,13 @@
        /// </summary>
        /// <param name="taskNo"></param>
        /// <param name="userId"></param>
        void MoveSuccess(string taskNo, int userId);
        Task MoveSuccess(string taskNo);
        /// <summary>
        /// 取消AGV移库任务
        /// </summary>
        /// <param name="taskNo"></param>
        /// <param name="userId"></param>
        void CancelMoveTask(string taskNo, int userId);
        Task CancelMoveTask(string taskNo);
        #region 数据归档
        /// <summary>
Wms/WMS.IBLL/ILogServer/IOperationCRServer.cs
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Model.ModelDto.LogDto;
using Model.ModelVm.LogVm;
namespace WMS.IBLL.ILogServer
{
@@ -32,5 +34,10 @@
        /// <param name="userId">操作人</param>
        /// <returns></returns>
        bool AddLogOperationCr(string parentNo, string menuName, string fkNo, string type, string msg, int userId);
        /// <summary>
        /// 新增系统操作日志
        /// </summary>
        /// <returns></returns>
        Task<int> AddLogOperationCr(OperationInputVm input);
    }
}
Wms/Wms/Controllers/BasisController.cs
@@ -896,7 +896,7 @@
        {
            RefAsync<int> count = new RefAsync<int>();
            var bolls = await _customerSvc.GetCustomerList(model.CustomerNo, model.CustomerName, model.Type, model.LinkMan, model.Phone, model.Page, model.Limit, count);
            return new SqlSugarPagedList<CustomerDto>() { Items = bolls, Total = bolls.Count };
            return new SqlSugarPagedList<CustomerDto>() { Items = bolls, Total = count };
        }
        /// <summary>
        /// 查询单条客户信息
Wms/Wms/Controllers/BllCheckController.cs
@@ -16,6 +16,8 @@
using Model.ModelVm.BllSoVm;
using Wms.Tools;
using System.Collections;
using Utility;
using SqlSugar;
namespace Wms.Controllers
{
@@ -33,6 +35,7 @@
        private readonly IWarehouseOutsidePalletsServer _stockPallet; //库外托盘
        private readonly IStockFreectSetve _freect; //解冻\冻结
        private readonly UserManager _userManager;
        /// <summary>
        /// 构造函数
@@ -43,7 +46,7 @@
        /// <param name="logSvc">库内操作日志Svc</param>
        /// <param name="stockPallet">库外托盘</param>
        /// <param name="freect">解冻\冻结</param>
        public BllCheckController(IOptions<ApiUrlConfig> setting, IStockCheckServer stockCheckSvc, IStockCheckLogServer stockCheckLogSvc, ITaskServer taskSvc, IOperationCRServer logSvc, IWarehouseOutsidePalletsServer stockPallet, IStockFreectSetve freect)
        public BllCheckController(IOptions<ApiUrlConfig> setting, IStockCheckServer stockCheckSvc, IStockCheckLogServer stockCheckLogSvc, ITaskServer taskSvc, IOperationCRServer logSvc, IWarehouseOutsidePalletsServer stockPallet, IStockFreectSetve freect, UserManager userManager)
        {
            _config = setting.Value;
            _stockCheckSvc = stockCheckSvc;
@@ -52,6 +55,7 @@
            _logSvc = logSvc;
            _stockPallet = stockPallet;
            _freect = freect;
            _userManager = userManager;
        }
        #region 盘点单据
@@ -62,18 +66,11 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult GetStockCheckList(GetStockCheckVm model)
        public async Task<IActionResult> GetStockCheckList(GetStockCheckVm model)
        {
            try
            {
                var bolls = _stockCheckSvc.GetStockCheckList(model.CrNo, model.Status, model.PalletNo, model.SkuNo, model.SkuName, model.LotNo, model.StartTime, model.EndTime, 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 });
            }
            RefAsync<int> count = new RefAsync<int>();
            var bolls = await _stockCheckSvc.GetStockCheckList(model.CrNo, model.Status, model.PalletNo, model.SkuNo, model.SkuName, model.LotNo, model.StartTime, model.EndTime, model.Page, model.Limit, count);
            return Ok(new { code = 0, count, msg = "盘点单信息", data = bolls });
        }
        /// <summary>
@@ -82,18 +79,12 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult GetStockCheckDetailList(GetStockCheckVm model)
        public async Task<IActionResult> GetStockCheckDetailList(GetStockCheckVm model)
        {
            try
            {
                var bolls = _stockCheckSvc.GetStockCheckDetailList(model.CrNo, model.Page, model.Limit, out int count);
            RefAsync<int> count = new RefAsync<int>();
            var bolls = await _stockCheckSvc.GetStockCheckDetailList(model.CrNo, model.Page, model.Limit, count);
                return Ok(new { code = 0, count, msg = "盘点单明细信息", data = bolls });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
            return Ok(new { code = 0, count, msg = "盘点单明细信息", data = bolls });
        }
        /// <summary>
        /// 获取库存明细信息(盘点选择明细数据源)
@@ -101,18 +92,11 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult GetCheckStockDetailList(GetStockDetailVm model)
        public async Task<IActionResult> GetCheckStockDetailList(GetStockDetailVm model)
        {
            try
            {
                var bolls = _stockCheckSvc.GetCheckStockDetailList(model.HouseNo, model.RoadwayNo, model.LocateNo, model.Msg, 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 });
            }
            RefAsync<int> count = new RefAsync<int>();
            var bolls = await _stockCheckSvc.GetCheckStockDetailList(model.HouseNo, model.RoadwayNo, model.LocateNo, model.Msg, model.Page, model.Limit, count);
            return Ok(new { code = 0, count, msg = "获取库存明细信息", data = bolls });
        }
        /// <summary>
@@ -121,18 +105,10 @@
        /// <param name="soNo"></param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetStockCheckDetailById(string crNo)
        public async Task<IActionResult> GetStockCheckDetailById(string crNo)
        {
            try
            {
                var bolls = _stockCheckSvc.GetStockCheckDetailById(crNo);
                return Ok(new { code = 0, count = 0, msg = "盘点单编辑信息", data = bolls });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
            var bolls = await _stockCheckSvc.GetStockCheckDetailById(crNo);
            return Ok(new { code = 0, count = 0, msg = "盘点单编辑信息", data = bolls });
        }
        /// <summary>
@@ -141,29 +117,11 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult AddEditStockCheck(AddEditStockCheckVm model)
        [UnitOfWork]
        public async Task<IActionResult> AddEditStockCheck(AddEditStockCheckVm 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 = "未获取到当前操作人信息" });
                }
                _stockCheckSvc.AddEditStockCheck(model, int.Parse(userId));
                return Ok(new { code = 0, count = 0, msg = "盘点单操作成功", data = "" });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = "操作失败" + e.Message });
            }
            await _stockCheckSvc.AddEditStockCheck(model);
            return Ok(new { code = 0, count = 0, msg = "盘点单操作成功", data = "" });
        }
        /// <summary>
@@ -172,22 +130,12 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult DelStockCheck(IdVm model)
        [UnitOfWork]
        public async Task<IActionResult> DelStockCheck(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 = "未获取到当前操作人信息" });
                }
                _stockCheckSvc.DelStockCheck(model.Id, int.Parse(userId));
                await _stockCheckSvc.DelStockCheck(model.Id);
                return Ok(new { code = 0, count = 0, msg = "盘点单删除成功" });
            }
@@ -204,31 +152,11 @@
        /// <param name="demo"></param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult EditNoticeDemo(int id, string demo)
        [UnitOfWork]
        public async Task<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("未获取到用户信息");
                }
                _stockCheckSvc.EditNoticeDemo(id, demo, int.Parse(userId));
                return Ok(new { code = 0, msg = "编辑备注成功" });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
            await _stockCheckSvc.EditNoticeDemo(id, demo);
            return Ok(new { code = 0, msg = "编辑备注成功" });
        }
        #endregion
@@ -320,7 +248,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _stockCheckSvc.AgainSendCheckTask(model.taskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl);
                //_stockCheckSvc.AgainSendCheckTask(model.taskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl);
                return Ok(new { code = 0, msg = "成功下发任务", data = "" });
            }
@@ -335,7 +263,7 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult CancelCheckTask(CheckTaskVm model)
        public async Task<IActionResult> CancelCheckTask(CheckTaskVm model)
        {
            try
            {
@@ -350,7 +278,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _stockCheckSvc.CancelCheckTask(model.taskNo, int.Parse(userId));
                await _stockCheckSvc.CancelCheckTask(model.taskNo);
                return Ok(new { code = 0, msg = "成功取消任务", data = "" });
            }
@@ -365,7 +293,7 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult FinishCheckTask(CheckTaskVm model)
        public async Task<IActionResult> FinishCheckTask(CheckTaskVm model)
        {
            try
            {
@@ -380,7 +308,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _stockCheckSvc.CheckSuccess(model.taskNo, int.Parse(userId));
                await _stockCheckSvc.CheckSuccess(model.taskNo, int.Parse(userId));
                return Ok(new { code = 0, msg = "成功完成任务", data = "" });
@@ -428,7 +356,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _stockPallet.SaveAppointSlot(model.StockDetailId,model.LocateId, int.Parse(userId));
                _stockPallet.SaveAppointSlot(model.StockDetailId, model.LocateId, int.Parse(userId));
                return Ok(new { code = 0, count = 0, msg = "指定储位成功", data = "" });
            }
@@ -448,22 +376,11 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult FinishMoveTask(CheckTaskVm model)
        public async Task<IActionResult> FinishMoveTask(CheckTaskVm 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 = "未获取到当前操作人信息" });
                }
                _stockCheckSvc.MoveSuccess(model.taskNo, int.Parse(userId));
                await _stockCheckSvc.MoveSuccess(model.taskNo);
                return Ok(new { code = 0, msg = "成功完成任务", data = "" });
            }
@@ -478,7 +395,7 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult CancelMoveTask(CheckTaskVm model)
        public async Task<IActionResult> CancelMoveTask(CheckTaskVm model)
        {
            try
            {
@@ -493,7 +410,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _stockCheckSvc.CancelMoveTask(model.taskNo, int.Parse(userId));
                await _stockCheckSvc.CancelMoveTask(model.taskNo);
                return Ok(new { code = 0, msg = "成功取消任务", data = "" });
            }
@@ -513,11 +430,11 @@
        /// <param name="type">0:获取可冻结库存 1:获取可解冻数据</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult ByTypeGetDataStockType(string SkuNo,int type)
        public IActionResult ByTypeGetDataStockType(string SkuNo, int type)
        {
            try
            {
                var models = _freect.ByTypeGetDataStockType(SkuNo,type);
                var models = _freect.ByTypeGetDataStockType(SkuNo, type);
                return Ok(new
                {
Wms/Wms/Controllers/DownApiController.cs
@@ -16,6 +16,8 @@
using WMS.Entity.BllTaskEntity;
using WMS.IBLL.IBllTaskServer;
using Model.ModelVm.BllTaskVm;
using Utility;
using System.Threading.Tasks;
namespace Wms.Controllers
{
@@ -98,7 +100,7 @@
        /// <returns></returns>
        [Authorize]
        [HttpGet]
        public IActionResult IssueOutHouse(string soNo,string unstackingMode, string outMode,string loadingAddre)
        public IActionResult IssueOutHouse(string soNo, string unstackingMode, string outMode, string loadingAddre)
        {
            try
            {
@@ -119,10 +121,10 @@
                //    return Ok(new { code = 1, msg = "请选择出库口" });
                //}
                var list = _exNoticeSvc.IssueOutHouse(soNo,unstackingMode, outMode,loadingAddre, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl,out string str);
                return Ok(new { code = 0, msg = str , data = list });
                var list = _exNoticeSvc.IssueOutHouse(soNo, unstackingMode, outMode, loadingAddre, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str);
                return Ok(new { code = 0, msg = str, data = list });
            }
            catch (Exception e)
            {
@@ -152,8 +154,8 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var list = _exNoticeSvc.AgainSendSoTask(taskNo, int.Parse(userId),_config.WcsHost + _config.IssueComApiUrl2);
                var list = _exNoticeSvc.AgainSendSoTask(taskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl2);
                return Ok(new { code = 0, msg = "重新下发已完成", data = list });
@@ -172,7 +174,7 @@
        /// <returns></returns>
        [Authorize]
        [HttpGet]
        public IActionResult CheckOutHouse(string crNo,string outMode)
        public async Task<IActionResult> CheckOutHouse(string crNo, string outMode)
        {
            try
            {
@@ -187,8 +189,8 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var list = _crCheckSvc.CheckOutHouse(crNo, outMode,int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str);
                string str = "";
                var list = await _crCheckSvc.CheckOutHouse(crNo, outMode, _config.WcsHost + _config.IssueComApiUrl, str);
                return Ok(new { code = 0, msg = str, data = list });
@@ -205,7 +207,7 @@
        /// <param name="taskNo"></param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult AgainSendCheckTask(string taskNo)
        public async Task<IActionResult> AgainSendCheckTask(string taskNo)
        {
            try
            {
@@ -220,7 +222,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _crCheckSvc.AgainSendCheckTask(taskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl2);
                await _crCheckSvc.AgainSendCheckTask(taskNo, _config.WcsHost + _config.IssueComApiUrl2);
                return Ok(new { code = 0, msg = "重新下发已完成", data = "" });
            }
@@ -251,17 +253,17 @@
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道:( {jsonData} ),", logStr);
                 _asnPalletBindSvc.BindPalletStock(model, 0);
                _asnPalletBindSvc.BindPalletStock(model, 0);
                //申请巷道
                var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, "W01");
                LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                return Ok(new { Success = 0, Message = "托盘绑定-申请巷道成功", TaskList = list });
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
@@ -277,16 +279,16 @@
        public IActionResult RequestRoadWay(RequestLocate model)
        {
            var logStr = "";
            logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr);
                var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo );
                var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo);
                LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                //new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), 
@@ -336,7 +338,7 @@
            {
                logStr = $@".\log\WCS\WCS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            }
            try
            {
                if (model.PalletNo.Length == 9)
@@ -351,11 +353,11 @@
                }
                string pallet = model.PalletNo.Substring(0, 8);
                var list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo,model.RoadwayNo);
                var list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo, model.RoadwayNo);
                if (model.PalletNo.Length == 9)
                {
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的成功信息",2);// int.Parse(userId)
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);// int.Parse(userId)
                    LogFile.SaveLogToFile($"WMS申请储位成功:( {JsonConvert.SerializeObject(list)} ),", logStr);
                }
                else if (model.PalletNo.Length == 8)
@@ -364,7 +366,7 @@
                }
                if (model.PalletNo.Length == 9)
                {
                }
                return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
@@ -373,14 +375,14 @@
            {
                if (model.PalletNo.Length == 9)
                {
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0,8)}的失败信息", 2);//int.Parse(userId)
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的失败信息", 2);//int.Parse(userId)
                    LogFile.SaveLogToFile($"WMS申请储位失败返回:( {e.Message} ),", logStr);
                }
                else if(model.PalletNo.Length == 8)
                else if (model.PalletNo.Length == 8)
                {
                    LogFile.SaveLogToFile($"WCS申请储位返回:( {e.Message} ),", logStr);
                }
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
@@ -411,14 +413,14 @@
                    case "0"://入库完成任务
                        if (model.TaskType == "0")//0:入库 1:出库 2:移库
                        {
                            _asnPalletBindSvc.ArrivalSuccess(model.TaskNo,0);
                            _asnPalletBindSvc.ArrivalSuccess(model.TaskNo, 0);
                            return Ok(new WcsModel { StatusCode = 0, Msg = "入库完成" });
                        }
                        break;
                    case "1"://出库完成任务
                        if (model.TaskType == "1")//0:入库 1:出库 2:移库
                        {
                            _exNoticeSvc.ExportSuccess(model.TaskNo,0);
                            _exNoticeSvc.ExportSuccess(model.TaskNo, 0);
                            return Ok(new WcsModel { StatusCode = 0, Msg = "出库完成" });
                        }
                        else if (model.TaskType == "2")
@@ -445,8 +447,8 @@
                            //填写移库完成代码
                        }
                        break;
                    default :
                        return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
                    default:
                        return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
                }
                return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
            }
@@ -462,7 +464,7 @@
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult EmptyException(ReceiveWcsSignal model)
        public IActionResult EmptyException(ReceiveWcsSignal model)
        {
            var logStr = $@".\log\WCS\异常反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
@@ -473,7 +475,7 @@
                var bl = _exNoticeSvc.EmptyException(model);
                LogFile.SaveLogToFile($"空取异常:(执行结果成功),", logStr);
                return Ok(new { Success = 0, Message = ""});
                return Ok(new { Success = 0, Message = "" });
            }
            catch (Exception e)
            {
@@ -487,7 +489,7 @@
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult FullException(ReceiveWcsSignal model)
        public IActionResult FullException(ReceiveWcsSignal model)
        {
            var logStr = $@".\log\WCS\异常反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
@@ -581,7 +583,7 @@
                var orderType = _taskSvc.GetTaskOrderType(model.TaskNo);// 判断单据类型入出移
                switch (orderType)
                {
                    case "1"://出库完成任务
                        if (model.TaskType == "1")//0:入库 1:出库 2:移库
                        {
Wms/Wms/Controllers/UpApiController.cs
@@ -21,6 +21,7 @@
using System.Text;
using Newtonsoft.Json.Linq;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
namespace Wms.Controllers
{
@@ -207,7 +208,7 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult FinishCr(AdjustStockCheckVm model)
        public async Task<IActionResult> FinishCr(AdjustStockCheckVm model)
        {
            try
            {
@@ -222,27 +223,24 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                bool bolls = false;
                //bool bolls = false;
                if (model.Origin == "0")
                {
                    bolls = _stockCheckSvc.StockAdjust(model.Id, int.Parse(userId));
                    await _stockCheckSvc.StockAdjust(model.Id);
                }
                else
                {
                    bolls = _stockCheckSvc.StockAdjustAuto(model.Id, int.Parse(userId));
                    await _stockCheckSvc.StockAdjustAuto(model.Id);
                }
                if (bolls)
                {
                    //系统对接后放开
                    //var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId));
                    //if (bl)
                    //{
                    return Ok(new { code = 0, count = 0, msg = "盘点单调整上传成功" });
                    //}
                    //return Ok(new { code = 1, count = 0, msg = "出库单关单成功但上传失败" });
                }
                //系统对接后放开
                //var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId));
                //if (bl)
                //{
                return Ok(new { code = 0, count = 0, msg = "盘点单调整上传成功" });
                //}
                //return Ok(new { code = 1, count = 0, msg = "出库单关单成功但上传失败" });
                return Ok(new { code = 1, msg = "盘点单调整失败" });
                //return Ok(new { code = 1, msg = "盘点单调整失败" });
            }
            catch (Exception e)