chengsc
2024-08-19 5e2454c2a75cb70afc0d1933e5c29e02e21231e6
测试流程,修改问题
19个文件已修改
867 ■■■■■ 已修改文件
HTML/views/ASNSetting/ArrivalNotice.html 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/HouseDataSetting/agvTransport.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/HttpModel.cs 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/BllAsnDto/ArrivalNoticeDetailDto.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/BllAsnDto/ArrivalNoticeDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs 364 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/BllAsnEntity/BllBoxInfo.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/PdaCrController.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/appsettings.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/ArrivalNotice.html
@@ -415,18 +415,20 @@
            var TotalColsArr = [[
                        {field: '',title: '序号',type:'numbers',width: 50,align: 'center',fixed: 'left', "disabled": true},
                        {field: 'ASNNo',title: '入库单号',align: 'center',fixed: 'left',sort: true,width: 180, "disabled": true},
                        {field: 'Status',title: '执行状态',align: 'center',templet: '#buttonTpl'},
                        {field: 'Status',title: '执行状态',align: 'center',width: 100,templet: '#buttonTpl'},
                        {field: 'Origin',title: '来源',align: 'center',width: 80},
                        {field: 'OrderCode',title: '上游单号',align: 'center',width: 180},
                        {field: 'CustomerName',title: '客户名称',align: 'center'},
                        {field: 'Type',title: '单据类型',align: 'center',templet: '#templetType'},
                        {field: 'CompleteTime',title: '完成时间',align: 'center',templet: '#templetCompleteTime'},
                        {field: 'Type',title: '单据类型',align: 'center',width: 100,templet: '#templetType'},
                        {field: 'CompleteTime',title: '完成时间',align: 'center',width: 165,templet: '#templetCompleteTime'},
                        {field: 'Demo',title: '备注',align: 'center',width: 180},
                        {field: 'CreateUserName',title: '创建人',align: 'center',width: 110},
                        {field: 'CreateTime',title: '创建时间',align: 'center',templet: '#templetCreateTime'},
                        {field: 'CreateTime',title: '创建时间',align: 'center',width: 165,templet: '#templetCreateTime'},
                        {field: 'UpdateUserName',title: '修改人',align: 'center',width: 110},
                        {field: 'UpdateTime',title: '修改时间',align: 'center',templet: '#templetUpdateTime'},
                        {field: 'UpdateTime',title: '修改时间',align: 'center',width: 165,templet: '#templetUpdateTime'},
                        {field: 'CheckUserName',title: '复核人',align: 'center',width: 110},
                        {field: 'CheckTime',title: '复核时间',align: 'center',templet: '#templetCheckTime'},
                        {field: 'CheckTime',title: '复核时间',align: 'center',width: 165,templet: '#templetCheckTime'},
                        {field: 'caozuo',title: '操作',fixed: 'right',width: 280,align: 'center',toolbar: '#toolbarDemo1', "disabled": true}
                    ]];
            var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
@@ -649,6 +651,7 @@
                        {field: 'PackagName',title: '包装名称',align: 'center',width: 110,}, 
                        {field: 'IsBale',title: '是否裹包',align: 'center',width: 150}, 
                        {field: 'IsBelt',title: '是否打带',align: 'center',width: 150},
                        {field: 'OrderDetailCode',title: '上游单号',align: 'center',width: 180},
                        {field: 'UDF1',title: '自定义列1',align: 'center',width: 140}, 
                        {field: 'UDF2',title: '自定义列2',align: 'center',width: 140}, 
                        {field: 'UDF3',title: '自定义列3',align: 'center',width: 140}, 
Pda/View/HouseDataSetting/agvTransport.html
@@ -507,7 +507,7 @@
                $("#Quyu2").append('<option value =>' + '</option>');
                form.render('select');
                refreshTable()
                //refreshTable()
            });
            //点击托盘条码下拉框事件
@@ -701,7 +701,7 @@
                    var param = {
                        SoNo: $("#OutNo").val(), //出库单据
                        PalletNo: $("#PalletNo").val(), //托盘条码
                        AreaNo: $("#Quyu").val()//目标区域
                        AreaNo: $("#Quyu2").val()//目标区域
                    }
                    //呼叫小车
                    sendData(IP + "/PdaCr/AgvTransport2", param, 'post', function (res) {
Wms/Model/InterFaceModel/HttpModel.cs
@@ -19,6 +19,9 @@
        /// </summary>
        public string Message { get; set; }
    }
    #region WCS-Model
    /// <summary>
    /// 接收wcs接口返回参数的model
    /// </summary>
@@ -101,6 +104,140 @@
        public string TaskType { get; set; }
    }
    //成品码垛信息
    public class BoxPalletBindVm
    {
        /// <summary>
        /// 生产工单
        /// </summary>
        public string OrderCode { get; set; }
        /// <summary>
        /// 入库单号
        /// </summary>
        public string AsnNo { get; set; }
        /// <summary>
        /// 入库单明细
        /// </summary>
        public int AsnDetailNo { get; set; }
        /// <summary>
        /// 托盘号
        /// </summary>
        public string PalletNo { get; set; }
        /// <summary>
        /// 托盘数量
        /// </summary>
        public decimal Qty { get; set; }
        /// <summary>
        /// 托盘类型  0物料托  1空托盘托
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 物料编码
        /// </summary>
        public string SkuNo { get; set; }
        /// <summary>
        /// 批次号
        /// </summary>
        public string LotNo { get; set; }
        /// <summary>
        /// 批次描述
        /// </summary>
        public string LotText { get; set; }
        /// <summary>
        /// 供货批次
        /// </summary>
        public string SupplierLot { get; set; }
        public List<BoxPalletBindDetailVm> Detail { get; set; }
    }
    //码垛箱码明细信息
    public class BoxPalletBindDetailVm
    {
        /// <summary>
        /// 生产单据号
        /// </summary>
        public string OrderCode { get; set; }
        /// <summary>
        /// 箱号
        /// </summary>
        public string BoxNo { get; set; }
        /// <summary>
        /// 盒号
        /// </summary>
        public string BoxNo2 { get; set; }
        /// <summary>
        /// 支号
        /// </summary>
        public string BoxNo3 { get; set; }
        /// <summary>
        /// 数量
        /// </summary>
        public decimal Qty { get; set; }
        /// <summary>
        /// 满箱数量
        /// </summary>
        public decimal FullQty { get; set; }
        /// <summary>
        /// 物料编码
        /// </summary>
        public string SkuNo { get; set; }
        /// <summary>
        /// 物料名称
        /// </summary>
        public string SkuName { get; set; }
        /// <summary>
        /// 批次号
        /// </summary>
        public string LotNo { get; set; }
        /// <summary>
        /// 批次描述
        /// </summary>
        public string LotText { get; set; }
        /// <summary>
        /// 生产日期
        /// </summary>
        public DateTime? ProductionTime { get; set; }
        /// <summary>
        /// 过期时间
        /// </summary>
        public DateTime? ExpirationTime { get; set; }
        /// <summary>
        /// 检验标记
        /// </summary>
        public string InspectMark { get; set; }
        /// <summary>
        /// 零箱标记
        /// </summary>
        public string BitBoxMark { get; set; }
        /// <summary>
        /// 质检状态
        /// </summary>
        public string InspectStatus { get; set; }
        /// <summary>
        /// 物料规格
        /// </summary>
        public string Standard { get; set; }
        /// <summary>
        /// 包装规格
        /// </summary>
        public string PackageStandard { get; set; }
        /// <summary>
        /// 储存期至
        /// </summary>
        public DateTime? StoreTime { get; set; }
        /// <summary>
        /// 第几件
        /// </summary>
        public int? QtyOrd { get; set; }
        /// <summary>
        /// 总件数
        /// </summary>
        public int? QtyCount { get; set; }
    }
    #endregion
    #region AGV-Model
    /// <summary>
    /// 生成任务单
@@ -584,4 +721,25 @@
        /// </summary>
        public string Data { get; set; }
    }
    #endregion
    #region FuMa-Model
    /// <summary>
    /// 发送接收赋码系统接口参数的model
    /// </summary>
    public class FuMaModel
    {
        /// <summary>
        /// 状态码 0 成功 -1失败
        /// </summary>
        public int Success { get; set; }
        /// <summary>
        /// 信息详情
        /// </summary>
        public string Message { get; set; }
    }
    #endregion
}
Wms/Model/ModelDto/BllAsnDto/ArrivalNoticeDetailDto.cs
@@ -137,6 +137,8 @@
        public string AsnStatus { get; set; }
        public string OrderDetailCode { get; set; }
        /// <summary>
        /// 自定义列1
        /// </summary>
Wms/Model/ModelDto/BllAsnDto/ArrivalNoticeDto.cs
@@ -78,6 +78,11 @@
        public string Demo { get; set; }
        /// <summary>
        /// 上游单号
        /// </summary>
        public string OrderCode { get; set; }
        /// <summary>
        /// 状态变更时间
        /// </summary>
        public DateTime? CompleteTime { get; set; }
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
@@ -112,7 +112,7 @@
                sqlString += "LEFT JOIN SysMaterials AS tb5 on tb1.SkuNo = tb5.SkuNo ";
                sqlString += "LEFT JOIN SysUnit AS tb6 on tb5.UnitNo = tb6.UnitNo ";
                sqlString += "LEFT JOIN SysPackag AS tb7 on tb1.PackagNo = tb7.PackagNo ";
                sqlString += $"WHERE tb1.ASNNo = '{model.ASNNo}' AND tb1.IsDel = '0' order by tb1.SkuNo desc ";
                sqlString += $"WHERE tb1.ASNNo = '{model.ASNNo}' AND tb1.IsDel = '0' AND tb5.IsDel = '0' order by tb1.SkuNo desc ";
                sqlString += $"offset {((model.Page - 1) * model.Limit)} rows fetch next {rowCount} rows only;";
                var modelList = Db.Ado.SqlQuery<ArrivalNoticeDetailDto>(sqlString);
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -31,6 +31,366 @@
        {
        }
        #region 接口方法
        //绑定物料托盘
        public void BindPalletStock(BoxPalletBindVm model, int userId)
        {
            try
            {
                #region 判断
                //判断托盘是否在库外
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
                if (stockDetail != null)
                {
                    if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo))
                    {
                        throw new Exception("该托盘已有库存信息,请核实!");
                    }
                    return;
                }
                if (model.Type != "0" && model.Type != "1")
                {
                    throw new Exception("托盘类型错误");
                }
                if (string.IsNullOrEmpty(model.PalletNo))
                {
                    throw new Exception("托盘号不可为空!");
                }
                //托盘是否存在
                var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
                if (pallet == null)
                {
                    throw new Exception("未查询到托盘信息,请核实!");
                }
                if (model.Detail.Count == 0)
                {
                    throw new Exception("托盘绑定明细信息为空,请核实");
                }
                BllArrivalNotice notice = null;
                BllArrivalNoticeDetail detail = null;
                if (model.Type == "0")
                {
                    //0:成品入库 1:采购入库 3:退货入库 4:车间余料入库 5:其它入库 6:代储入库
                    if (string.IsNullOrEmpty(model.AsnNo))
                    {
                        throw new Exception("单据号不可为空!");
                    }
                    if (model.AsnDetailNo == 0)
                    {
                        throw new Exception("单据明细不可为空!");
                    }
                    //根据单据号获取入库单总单
                    notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo && a.OrderCode == model.OrderCode);
                    if (notice.Status != "0" && notice.Status != "1" && notice.Status != "2")
                    {
                        throw new Exception("该单据已关单!");
                    }
                    if (notice.Type != "0")
                    {
                        throw new Exception("当前单据不能生产成品入库,请核实");
                    }
                    if (string.IsNullOrEmpty(model.LotNo))
                    {
                        throw new Exception("批次不能为空!");
                    }
                    // 验证入库单明细是否存在
                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailNo && m.ASNNo == model.AsnNo && m.LotNo == model.LotNo && m.SkuNo == model.SkuNo);
                    if (detail == null)
                    {
                        throw new Exception("当前物料及批次与单据无关联,请核实!");
                    }
                }
                #endregion
                Db.BeginTran();
                var comTime = DateTime.Now;
                #region 包装
                var package = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0");
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == model.SkuNo);
                SysPackag pack = null;
                if (model.Type == "0")
                {
                    pack = package.First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);
                }
                else
                {
                    pack = package.First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
                }
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                if (pack == null)
                {
                    throw new Exception("获取物料包装失败,请核实!");
                }
                if (pack.L5Num.HasValue)
                {
                    pNum = (int)pack.L5Num;
                    bNum = (int)pack.L4Num;
                }
                else if (pack.L4Num.HasValue)
                {
                    pNum = (int)pack.L4Num;
                    bNum = (int)pack.L3Num;
                }
                else if (pack.L3Num.HasValue)
                {
                    pNum = (int)pack.L3Num;
                    bNum = (int)pack.L2Num;
                }
                else if (pack.L2Num.HasValue)
                {
                    pNum = (int)pack.L2Num;
                    bNum = (int)pack.L1Num;
                }
                else if (pack.L1Num.HasValue)
                {
                    pNum = (int)pack.L1Num;
                    bNum = (int)pack.L1Num;
                }
                if (pNum == 0 || bNum == 0)
                {
                    throw new Exception($"绑定失败,{detail.SkuNo}物品包装未找到!");
                }
                #endregion
                #region 验证是否允许立库同托盘不同物料入库或同托盘同物料不同批次入库
                var list = model.Detail.GroupBy(m => new { m.SkuNo, m.LotNo }).ToList();
                if (list.Count >= 2)
                {
                    var funSetting = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetNo == "Fun045");
                    if (funSetting == null || funSetting.IsEnable == "OFF")
                    {
                        throw new Exception($"不允许立库同托盘不同物料入库或同托盘不同批次入库!");
                    }
                }
                #endregion
                //判断托盘绑定信息中是否有
                var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNDetailNo == model.AsnDetailNo && m.PalletNo == model.PalletNo && m.Status != "2");
                var bindId = 0;
                if (bind == null)
                {
                    bind = new BllPalletBind
                    {
                        ASNNo = model.AsnNo,
                        ASNDetailNo = model.AsnDetailNo,
                        PalletNo = model.PalletNo,
                        PalletNo2 = "",
                        PalletNo3 = "",
                        Qty = model.Qty,
                        FullQty = pNum,
                        Status = "0",//等待执行
                        Type = model.Type, //托盘类型  0物料托  1空托盘托
                        LotNo = model.LotNo,
                        LotText = model.LotText,
                        SupplierLot = model.SupplierLot,
                        InspectMark = "0",      //是否取样托盘
                        //SamplingQty = 0,     //取样数量  后期业务开发时 接口传值需添加对应字段判断
                        BitPalletMark = model.Qty == pNum ? "0" : "1",
                        IsBale = "0",
                        IsBelt = "0",
                        CreateUser = userId,
                    };
                    if (bind.FullQty < bind.Qty)
                    {
                        throw new Exception("托盘绑定数量已超出该物料包装数量");
                    }
                    // 插入托盘绑定表
                    bindId = Db.Insertable(bind).ExecuteReturnIdentity();
                }
                else
                {
                    throw new Exception("组盘信息重复");
                }
                #region 箱码信息
                decimal factQty = 0.00m;//托盘总数量
                var boxInfoList = new List<BllBoxInfo>();
                if (model.Type == "1")//托盘托
                {
                    if (model.Detail.Count > 1)
                    {
                        throw new Exception("空托盘绑定信息中明细错误,超过了两条明细");
                    }
                    //添加箱码信息/空托盘明细信息
                    foreach (var box in model.Detail)
                    {
                        var boxInfo = new BllBoxInfo()
                        {
                            ASNNo = model.AsnNo,
                            ASNDetailNo = model.AsnDetailNo,
                            OrderCode = box.OrderCode,
                            BindNo = bindId,
                            BoxNo = box.BoxNo,
                            BoxNo2 = box.BoxNo2,
                            BoxNo3 = box.BoxNo3,
                            PalletNo = model.PalletNo,
                            Qty = box.Qty,
                            FullQty = box.FullQty,
                            Status = "1",
                            SkuNo = box.SkuNo,
                            SkuName = box.SkuName,
                            LotNo = box.LotNo,
                            LotText = box.LotText,
                            SupplierLot = model.SupplierLot,
                            ProductionTime = box.ProductionTime,
                            ExpirationTime = box.ExpirationTime,
                            CompleteTime = comTime,
                            InspectMark = box.InspectMark,
                            BitBoxMark = box.BitBoxMark,
                            InspectStatus = box.InspectStatus,
                            Origin = "WCS",
                            Standard = box.Standard,
                            PackageStandard = box.PackageStandard,
                            StoreTime = box.StoreTime,
                            CreateUser = userId,
                            CreateTime = comTime,
                        };
                        boxInfoList.Add(boxInfo);
                        factQty += box.Qty;
                    }
                    if (factQty > pNum)
                    {
                        throw new Exception($"绑定失败,托盘绑定数量大于该物品包装数量!");
                    }
                }
                else if (model.Type == "0")//物料托
                {
                    if (model.Detail.Count(m => m.OrderCode != detail.OrderDetailCode) > 0)
                    {
                        throw new Exception($"托盘绑定明细中,含有箱码生产工单不一致");
                    }
                    if (model.Detail.Count(m => m.SkuNo != model.SkuNo || m.LotNo != model.LotNo) > 0)
                    {
                        throw new Exception($"托盘绑定明细中,含有箱码物料或批次不一致");
                    }
                    var boxGroup = model.Detail.GroupBy(m => m.BoxNo).ToList();
                    foreach (var g in boxGroup)
                    {
                        decimal boxFullQty = 0;//箱内总数量
                        foreach (var box in g)
                        {
                            factQty += box.Qty;
                            boxFullQty += box.Qty;
                            var boxInfo = new BllBoxInfo()
                            {
                                ASNNo = model.AsnNo,
                                ASNDetailNo = model.AsnDetailNo,
                                OrderCode = box.OrderCode,
                                BindNo = bindId,
                                BoxNo = box.BoxNo,
                                BoxNo2 = box.BoxNo2,
                                BoxNo3 = box.BoxNo3,
                                PalletNo = model.PalletNo,
                                Qty = box.Qty,
                                FullQty = box.FullQty,
                                Status = "1",//已组托
                                SkuNo = box.SkuNo,
                                SkuName = box.SkuName,
                                LotNo = box.LotNo,
                                LotText = box.LotText,
                                SupplierLot = model.SupplierLot,
                                ProductionTime = box.ProductionTime,
                                ExpirationTime = box.ExpirationTime,
                                CompleteTime = comTime,
                                InspectMark = box.InspectMark,
                                BitBoxMark = box.BitBoxMark,
                                InspectStatus = box.InspectStatus,
                                Origin = "WCS",
                                Standard = box.Standard,
                                PackageStandard = box.PackageStandard,
                                StoreTime = box.StoreTime,
                                QtyCount = (int)box.QtyCount,
                                QtyOrd = (int)box.QtyOrd,
                                CreateUser = userId,
                                CreateTime = comTime,
                            };
                            boxInfoList.Add(boxInfo);
                        }
                        if (boxFullQty > bNum)
                        {
                            throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!");
                        }
                    }
                }
                Db.Insertable(boxInfoList).ExecuteCommand();
                #endregion
                if (factQty != bind.Qty)
                {
                    throw new Exception("箱码明细总数量不同于托盘总数量,请核实");
                }
                #region 入库单及明细
                if (model.Type == "0")
                {
                    detail.FactQty += factQty;//已组数量
                    //detail.CompleteQty += factQty;//完成数量
                    detail.Status = "1";//0:等待执行 1:正在执行 2:执行完成
                    if (detail.CompleteQty >= detail.Qty)
                    {
                        detail.Status = "2";
                        detail.CompleteTime = comTime;
                    }
                    detail.UpdateUser = userId;
                    detail.UpdateTime = comTime;
                    //更新入库单明细
                    Db.Updateable(detail).ExecuteCommand();
                    notice.UpdateUser = userId;
                    notice.UpdateTime = comTime;
                    if (notice.Status == "0")
                    {
                        notice.Status = "1";
                    }
                    var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.ASNNo == detail.ASNNo && m.Status != "2");
                    if (asnDetailNum == 0)
                    {
                        notice.Status = "2";
                        notice.CompleteTime = comTime;//完成时间
                    }
                    //更新入库单
                    Db.Updateable(notice).ExecuteCommand();
                }
                #endregion
                // 更改托盘使用状态
                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
                //添加托盘记录表数据
                sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{model.AsnNo}','组盘','0',getDate(),{userId},NULL,NULL);";
                Db.Ado.ExecuteCommand(sqlStr);
                new OperationASNServer().AddLogOperationAsn("PDA模块", "托盘绑定", model.AsnNo, "添加", $"添加了托盘码为:{model.PalletNo}的组盘信息", userId);
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #endregion
        #region 托盘绑定
        public List<PalletBindDto> GetPalletBindList(PalletBindVm model, out int count)
        {
@@ -1770,10 +2130,11 @@
                        var oldTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == oldTaskNo);
                        oldTask.EndLocat = locate.LocatNo;
                        oldTask.EndRoadway = locate.RoadwayNo;
                        oldTask.Msg += $"{roadwayNo}巷道口=>>{locate.LocatNo}储位地址";
                        if (oldTask.IsSuccess == 0)
                        {
                            oldTask.IsSuccess = 1;
                            oldTask.Status = "1";
                            oldTask.Status = "1";
                        }
                        Db.Updateable(oldTask).ExecuteCommand();
@@ -2045,6 +2406,7 @@
                {
                    locate.Status = "1";
                    Db.Updateable(locate).ExecuteCommand();
                    Db.CommitTran();
                    return;
                }
                // 判断储位是否为空
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs
@@ -1332,22 +1332,23 @@
                var endLocate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
                if (endLocate != null)
                {
                    if (endLocate.Status != "0")
                    if (endLocate.Status != "4")
                    {
                        throw new Exception("目标储位状态非空储位");
                        throw new Exception("目标储位状态非移入中");
                    }
                }
                //更改库存明细
                foreach (var item in stockDetail)
                {
                    item.Status = "0";//待分配
                    item.LockQty = 0;//锁定数量改为0
                    //item.Status = "0";//待分配
                    //item.LockQty = 0;//锁定数量改为0
                    if (endLocate != null)//有目标储位说明移到其他区域储位
                    {
                        item.LocatNo = endLocate.LocatNo;//储位更改
                        item.WareHouseNo = endLocate.WareHouseNo;//所属仓库更改
                        item.RoadwayNo = endLocate.RoadwayNo;//所属巷道更改
                        item.AreaNo = endLocate.AreaNo;//所属区域更改
                        item.AreaNo = endLocate.AreaNo;//所属区域更改
                    }
                    else//没有目标储位说明移到入库口
                    {
@@ -1355,13 +1356,44 @@
                        item.WareHouseNo = "";//所属仓库更改(改为空)
                        item.RoadwayNo = "";//所属巷道更改(改为空)
                        item.AreaNo = "";//所属区域更改(改为空)
                    }
                    }
                    if (item.Qty == item.LockQty && item.LockQty>0)
                    {
                        item.Status = "2";
                    }
                    else if (item.Qty > item.LockQty && item.LockQty > 0)
                    {
                        item.Status = "1";
                    }
                    else if (item.Qty > item.LockQty && item.LockQty == 0)
                    {
                        item.Status = "0";
                    }
                    Db.Updateable(item).ExecuteCommand();
                    //更改库存总表
                    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();
                    if (endLocate != null && endLocate.AreaNo == "B12") //是否是3楼缓存区 是:删除库存
                    {
                        //库存箱码明细删除
                        var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList();
                        Db.Deleteable(boxInfo).ExecuteCommand();
                        //删除库存托盘信息
                        Db.Deleteable(item).ExecuteCommand();
                        //更改库存总表
                        var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
                        stock.LockQty -= (decimal)item.Qty;
                        stock.Qty -= (decimal)item.Qty;
                        Db.Updateable(stock).ExecuteCommand();
                        //更改托盘状态
                        var pallet = Db.Queryable<SysPallets>().First(m=>m.IsDel =="0" && m.PalletNo == task.PalletNo);
                        if (pallet != null)
                        {
                            pallet.Status = "0";
                            Db.Updateable(pallet).ExecuteCommand();
                        }
                    }
                }
                if (endLocate != null)
                {
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -18,6 +18,10 @@
using Dm;
using Model.InterFaceModel;
using WMS.Entity.BllQualityEntity;
using Newtonsoft.Json;
using Utility.Tools;
using System.Reflection;
using System.IO;
namespace WMS.BLL.BllPdaServer
{
@@ -1685,6 +1689,82 @@
        }
        #region 产品组托
        public void GetBoxInfoByFuMa(string boxNo,string url)
        {
            try
            {
                var list = new List<BllBoxInfo>();
                var data = new { BoxNo = boxNo };
                var jsonData = JsonConvert.SerializeObject(data);
                ////程序正式发布后放开
                //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                //var response = HttpHelper.DoPost(url, jsonData,"获取箱码信息", "赋码");
                //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                ////解析返回数据
                //var fuMaModel = JsonConvert.DeserializeObject<FuMaModel>(response);
                //if (fuMaModel.Success == 0)
                //{
                    var datas = Assembly.GetExecutingAssembly();
                var s = "0";
                    //string filePath = "Assembly.GetExecutingAssembly()";
                    //string json = File.ReadAllText(filePath);
                    //var person = JsonConvert.DeserializeObject<BllBoxInfo>(json);
                    //var comTime = DateTime.Now;
                    ////添加箱码信息表中  //暂时这些写--添加数据,后续需要和赋码系统对接后 根据明确返回的数据格式更改
                    //var boxInfo = new BllBoxInfo()
                    //{
                    //    ASNNo = "",
                    //    //ASNDetailNo = 0,
                    //    OrderCode = "",
                    //    //BindNo = 0,
                    //    BoxNo = person.BoxNo,
                    //    BoxNo2 = "",
                    //    BoxNo3 = "",
                    //    PalletNo = "",
                    //    Qty = 0,
                    //    FullQty = 0,
                    //    Status = "0",
                    //    SkuNo = "",
                    //    SkuName = "",
                    //    LotNo = "",
                    //    LotText = "",
                    //    SupplierLot = "",
                    //    ProductionTime = DateTime.Now,
                    //    ExpirationTime = DateTime.Now,
                    //    //CompleteTime = comTime,
                    //    InspectMark = "0",
                    //    BitBoxMark = "0",
                    //    InspectStatus = "0",
                    //    Origin = "赋码",
                    //    Standard = "box.Standard",
                    //    PackageStandard = "box.PackageStandard",
                    //    StoreTime = DateTime.Now,
                    //    CreateUser = 0,
                    //    CreateTime = comTime,
                    //};
                    //Db.Insertable(boxInfo).ExecuteCommand();
                //}
                //if (fuMaModel.Success == -1)
                //{
                //    throw new Exception($"赋码系统返回状态异常:{fuMaModel.Message}");
                //}
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 根据箱码获取标签箱码信息
        /// </summary>
@@ -1698,6 +1778,12 @@
                {
                    throw new Exception("请扫描外箱条码!");
                }
                var count = Db.Queryable<BllBoxInfo>().Count(m => m.IsDel == "0" && m.Status == "0" && m.BoxNo == model.BoxNo);
                if (count == 0)
                {
                    GetBoxInfoByFuMa("",""); //从赋码系统获取箱码信息
                }
                string sqlString = $@"SELECT 
                                        ASNNo,
                                        BoxNo, 
@@ -2466,7 +2552,7 @@
                        SendDate = serverTime,  //发送时间
                        BackDate = serverTime,  //返回时间
                        StartLocat = "",//起始位置
                        EndLocat = "力诺平库",//目标位置
                        EndLocat = model.LocatNo,//目标位置
                        PalletNo = bindInfo.PalletNo,//托盘码
                        IsSend = 0,//是否可再次下发
                        IsCancel = 0,//是否可取消
@@ -2584,7 +2670,7 @@
                        SendDate = DateTime.Now,  //发送时间
                        BackDate = DateTime.Now,  //返回时间
                        StartLocat = "",//起始位置
                        EndLocat = "力诺平库",//目标位置
                        EndLocat = model.LocatNo,//目标位置
                        PalletNo = model.PalletNo,//托盘码
                        IsSend = 0,//是否可再次下发
                        IsCancel = 0,//是否可取消
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -826,7 +826,7 @@
        {
            try
            {
                var allotList = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.Status == "2").Select(m => m.SONo).Distinct().ToList();
                var allotList = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && (m.Status == "3" || m.Status == "4")).Select(m => m.SONo).Distinct().ToList();
                return allotList;
            }
            catch (Exception ex)
@@ -983,11 +983,11 @@
                //修改库存明细信息
                stockDetail.Status = "4";//移库锁定
                stockDetail.LockQty = stockDetail.Qty;//锁定库存数量
                //stockDetail.LockQty = stockDetail.Qty;//锁定库存数量
                Db.Updateable(stockDetail).ExecuteCommand();
                //修改库存信息
                stock.LockQty += (decimal)stockDetail.Qty;
                Db.Updateable(stock).ExecuteCommand();
                //stock.LockQty += (decimal)stockDetail.Qty;
                //Db.Updateable(stock).ExecuteCommand();
                //修改起始储位地址状态
                storageLocat.Status = "5";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 
@@ -1069,7 +1069,7 @@
        /// <param name="palletNo"></param>
        /// <param name="areaNo"></param>
        /// <param name="userId"></param>
        public void AgvTransport2(string soNo, string palletNo, string areaNo, int userId, string url)
        public List<string> AgvTransport2(string soNo, string palletNo, string areaNo, int userId, string url)
        {
            if (string.IsNullOrEmpty(soNo))
            {
@@ -1084,7 +1084,7 @@
                //开启事务
                Db.BeginTran();
                List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>();
                var strList = new List<string>();//错误信息集合  //0 :部分托盘已有小车等待执行或正在执行的任务
                //出库单信息
                var notice = Db.Queryable<BllExportNotice>().First(w => w.IsDel == "0" && w.SONo == soNo);
                if (notice == null)
@@ -1104,8 +1104,9 @@
                }
                else//整个出库单叫货
                {
                    string sqlStr = $"select * from DataStockDetail where PalletNo in (select PalletNo from BllExportAllot where IsDel='0' and SONo='{soNo}')";
                    stockDetailList = Db.Ado.SqlQuery<DataStockDetail>(sqlStr).ToList();
                //    string sqlStr = $"select * from DataStockDetail where PalletNo in (select PalletNo from BllExportAllot where IsDel='0' and SONo='{soNo}')";
                //    stockDetailList = Db.Ado.SqlQuery<DataStockDetail>(sqlStr).ToList();
                    stockDetailList = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.SONo == soNo).ToList();
                }
                if (stockDetailList.Count <= 0)
                {
@@ -1117,14 +1118,10 @@
                var stock = Db.Queryable<DataStock>().Where(w => w.IsDel == "0");//库存总表
                string EndLocat = string.Empty;//目标位置
                string hasLocatNoList = string.Empty;//已分配的储位
                foreach (var item in stockDetailList)
                {
                    //任务信息
                    var logInfo = log.First(w => w.PalletNo == item.PalletNo);
                    if (logInfo != null)
                    {
                        throw new Exception($"托盘号:{item.PalletNo}已有小车等待执行或正在执行的任务!");
                    }
                    if (string.IsNullOrEmpty(item.LocatNo))
                    {
                        throw new Exception($"托盘号:{item.PalletNo}的储位信息不存在,请检查!");
@@ -1132,6 +1129,17 @@
                    if (item.WareHouseNo != "W02")
                    {
                        throw new Exception($"托盘号:{item.PalletNo}未在平库内,请检查!");
                    }
                    //任务信息
                    var logInfo = log.First(w => w.PalletNo == item.PalletNo);
                    if (logInfo != null)
                    {
                        if (!strList.Contains("1"))
                        {
                            strList.Add("1");
                        }
                        continue;
                        //throw new Exception($"托盘号:{item.PalletNo}已有小车等待执行或正在执行的任务!");
                    }
                    //起始储位信息
                    var storageLocatBegin = storageLocat.First(w => w.LocatNo == item.LocatNo);
@@ -1171,7 +1179,7 @@
                        Msg = string.Format("转运任务:{0}=>>{1}", item.LocatNo, EndLocat),
                        StartLocat = item.LocatNo,//起始位置
                        EndLocat = EndLocat,//目标位置
                        PalletNo = palletNo,//托盘码
                        PalletNo = item.PalletNo,//托盘码
                        IsSend = 1,//是否可再次下发
                        IsCancel = 1,//是否可取消
                        IsFinish = 1,//是否可完成
@@ -1194,7 +1202,7 @@
                    //修改库存明细信息
                    item.Status = "4";//移库锁定
                    item.LockQty = item.Qty;//锁定库存数量
                    //item.LockQty = item.Qty;//锁定库存数量
                    Db.Updateable(item).ExecuteCommand();
                    //修改起始储位地址状态
@@ -1203,11 +1211,16 @@
                    //修改目标储位地址状态
                    storageLocatEnd.Status = "4";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 
                    Db.Updateable(storageLocatEnd).ExecuteCommand();
                    if (!strList.Contains("0"))
                    {
                        strList.Add("0");
                    }
                    var stockInfo = stock.First(w => w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
                    //修改库存信息
                    stockInfo.LockQty += (decimal)item.Qty;//锁定数量
                    Db.Updateable(stockInfo).ExecuteCommand();
                    //var stockInfo = stock.First(w => w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
                    ////修改库存信息
                    //stockInfo.LockQty += (decimal)item.Qty;//锁定数量
                    //Db.Updateable(stockInfo).ExecuteCommand();
                }
                if (string.IsNullOrEmpty(palletNo))
                {
@@ -1264,6 +1277,7 @@
                //提交事务
                Db.CommitTran();
                return strList;
            }
            catch (Exception ex)
            {
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -1228,7 +1228,7 @@
                if (result.WareHouseNo != "W02")//W02:零箱库
                {
                    throw new Exception("该托盘未在零箱库,请检查!");
                    throw new Exception("该托盘未在平库内,请检查!");
                }
                #endregion
@@ -1240,9 +1240,9 @@
                {
                    throw new Exception("未获取到对应储位信息,请检查!");
                }
                if (locat.Status != "1")
                if (locat.Status != "3")
                {
                    throw new Exception("当前储位不是有物品,请检查!");
                    throw new Exception("当前储位不是出库中,请检查!");
                }
                #endregion
@@ -2615,7 +2615,7 @@
                #region 拼托信息
                var sdId = 0;
                bool isNew = false;
                var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
                var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == allot.SkuNo && m.LotNo == allot.LotNo);
                if (pinStockDetail != null)
                {
                    if (palletNo != palletNoNew)//非整托拣货
@@ -3034,6 +3034,8 @@
                {
                    sd.Qty = pickQty;
                    sd.LockQty = pickQty;
                    Db.Updateable(sd).ExecuteCommand();
                }
                else
                {
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -2172,17 +2172,17 @@
                        try
                        {
                            //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                            var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                            //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS");
                            //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                            var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                            //////解析返回数据 
                            var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
                            //if (wcsModel.StatusCode == 0)
                            //{
                            //    //更改任务的发送返回时间//
                            //    new TaskServer().EditTaskIssueOk(list2, time1, time2);
                            //    str += "下发成功";
                            //更改任务的发送返回时间//
                            new TaskServer().EditTaskIssueOk(list2, time1, time2);
                            str += "下发成功";
                            //}
                            //if (wcsModel.StatusCode == -1)
                            //{
Wms/WMS.Entity/BllAsnEntity/BllBoxInfo.cs
@@ -26,6 +26,13 @@
        public int? ASNDetailNo {get;set;}
        /// <summary>
        /// Desc:生产工单(上游系统生产单号)
        /// Default:
        /// Nullable:True
        /// </summary>
        public string OrderCode { get; set; }
        /// <summary>
        /// Desc:托盘绑定号
        /// Default:
        /// Nullable:True
Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs
@@ -8,6 +8,17 @@
{
    public interface IPalletBindServer
    {
        #region 接口方法
        /// <summary>
        /// 成品/托盘 绑定信息
        /// </summary>
        /// <param name="model"></param>
        /// <param name="userId"></param>
        void BindPalletStock(BoxPalletBindVm model, int userId);
        #endregion
        #region 托盘绑定
        List<PalletBindDto> GetPalletBindList(PalletBindVm model, out int count);
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs
@@ -71,6 +71,8 @@
        //零箱入库
        void CompleteInStockLing(PdaLingAsnVm model, int userId);
        void GetBoxInfoByFuMa(string boxNo, string url);
        // 根据箱码获取标签箱码信息
        List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model);
Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
@@ -137,7 +137,7 @@
        /// <param name="palletNo"></param>
        /// <param name="areaNo"></param>
        /// <param name="userId"></param>
        void AgvTransport2(string soNo, string palletNo, string areaNo, int userId, string url);
        List<string> AgvTransport2(string soNo, string palletNo, string areaNo, int userId, string url);
        #endregion
    }
}
Wms/Wms/Controllers/DownApiController.cs
@@ -500,8 +500,68 @@
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 自动码垛绑定信息返回巷道口
        /// </summary>
        /// <param name="model">入库单信息</param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult BindRequestRoadWay(BoxPalletBindVm model)
        {
            var logStr = $@".\log\WCS\WCS托盘绑定-申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
        //托盘箱码信息 自动码垛 (wcs提供)
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道:( {jsonData} ),", logStr);
                _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 });
            }
        }
        ///// <summary>
        ///// 成品箱码拆垛拣货
        ///// </summary>
        ///// <param name="model">入库单信息</param>
        ///// <returns></returns>
        //[AllowAnonymous]
        //[HttpPost]
        //public IActionResult BoxUnstackd(BoxPickList model)
        //{
        //    var logStr = $@".\log\WCS\WCS成品箱码拆垛" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
        //    try
        //    {
        //        var jsonData = JsonConvert.SerializeObject(model);
        //        LogFile.SaveLogToFile($"WCS成品箱码拆垛:( {jsonData} ),", logStr);
        //        _comeSvc.BoxUnstackd(model.PalletNo, model.BoxList);
        //        var list = new { Success = 0, Message = "成品箱码拆垛" };
        //        LogFile.SaveLogToFile($"WCS成品箱码拆垛返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
        //        return Ok(list);
        //    }
        //    catch (Exception e)
        //    {
        //        LogFile.SaveLogToFile($"WCS成品箱码拆垛:( {e.Message} ),", logStr);
        //        return Ok(new ErpModel { Success = -1, Message = e.Message });
        //    }
        //}
        //申请空托(自动码空托时用)
Wms/Wms/Controllers/PdaCrController.cs
@@ -395,9 +395,19 @@
                }
                var uId = int.Parse(userId);
                _pdaCrSvc.AgvTransport2(model.SoNo,model.PalletNo, model.AreaNo, uId, _config.WcsHost + _config.GenAgvSchedulingTask);
                var str = _pdaCrSvc.AgvTransport2(model.SoNo,model.PalletNo, model.AreaNo, uId, _config.WcsHost + _config.GenAgvSchedulingTask);
                var msgStr = "";
                if (str.Contains("0"))
                {
                    msgStr += "成功";
                }
                if (str.Contains("1"))
                {
                    msgStr += "部分托盘已有小车等待执行或正在执行的任务";
                }
                return Ok(new { data = "", code = 0, msg = "成功" });
                return Ok(new { data = "", code = 0, msg = msgStr });
            }
            catch (Exception e)
            {
Wms/Wms/appsettings.json
@@ -12,7 +12,8 @@
    //"ConnectionString": "Server=47.95.120.53;Database=WMS_JC09;User ID=sa;Password=boxline!@#;Integrated Security=False;",
    //"ConnectionString": "Server=192.168.62.106;Database=WMS_JC24;User ID=sa;Password=sql2019;Integrated Security=False;",
    //"ConnectionString": "Server=192.168.62.200;Database=WMS_JC24;User ID=sa;Password=sql2019;Integrated Security=False;"
    "ConnectionString": "Server=10.18.99.10;Database=WMS_JC24;User ID=sa;Password=sql2024;Integrated Security=False;"
    //"ConnectionString": "Server=10.18.99.10;Database=WMS_JC24;User ID=sa;Password=sql2024;Integrated Security=False;",
    "ConnectionString": "Server=.;Database=WMS_JC24;User ID=sa;Password=sql2022;Integrated Security=False;"
    //"ConnectionString": "Data Source=DESKTOP-0EJDG95\\MSSQLSERVER1;Initial Catalog=WMS_V01;Integrated Security=True;"
  },
  "JWTConfig": {