wxw
7 天以前 1e29c520440adc28292d87a000c11e6898bda1ac
物料标签增加补打标签和合并标签功能
6个文件已修改
274 ■■■■■ 已修改文件
HTML/views/ASNSetting/LabelBox.html 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/BllAsnVm/BoxInfoVm.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllAsnServer/IBllBoxInfoServer.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BllAsnController.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/LabelBox.html
@@ -125,6 +125,14 @@
                            style="margin-left: 5px;" lay-event="BuDaLabel" id="BuDaLabel">
                            <i class="layui-icon layui-icon-print layuiadmin-button-btn"></i>补打标签
                        </button>
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list layui-btn-normal buDaLabelClass"
                            style="margin-left: 5px;" lay-event="ChaiLabel" id="ChaiLabel">
                            <i class="layui-icon layui-icon-edit layuiadmin-button-btn"></i>拆分标签
                        </button>
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list layui-btn-normal buDaLabelClass"
                            style="margin-left: 5px;" lay-event="MergeLabel" id="MergeLabel">
                            <i class="layui-icon layui-icon-edit layuiadmin-button-btn"></i>合并标签
                        </button>
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list layui-btn-danger delLabelClass"
                            style="margin-left: 5px;" lay-event="delLabel" id="delLabel">
                            <i class="layui-icon layui-icon-delete layuiadmin-button-btn"></i>删除标签
Wms/Model/ModelVm/BllAsnVm/BoxInfoVm.cs
@@ -236,4 +236,10 @@
        public int? userId { get; set; }
    }
    public class LabelOperVm
    {
        public string BoxNo { get; set; }
        public string BoxNo2 { get; set; }
        public decimal ChaiQty { get; set; }
    }
}
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
@@ -15,6 +15,9 @@
using WMS.Entity.Context;
using WMS.Entity.SysEntity;
using WMS.IBLL.IBllAsnServer;
using WMS.Entity.DataEntity;
using Dm;
using System.Reflection;
namespace WMS.BLL.BllAsnServer
{
@@ -1745,6 +1748,178 @@
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 拆分箱码标签
        /// </summary>
        /// <param name="boxNo"></param>
        /// <param name="chaiQty"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void ChaiLableBox(string boxNo,decimal chaiQty, int userId)
        {
            try
            {
                if (string.IsNullOrEmpty(boxNo))
                {
                    throw new Exception("请输入拆箱箱码");
                }
                if (chaiQty <= 0)
                {
                    throw new Exception("请输入拆分数量");
                }
                //标签信息
                var boxList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList();
                if (boxList.Count != 1)
                {
                    throw new Exception("该箱码信息错误,存在多个此箱码信息");
                }
                var boxInfo = boxList.First();
                if (boxInfo.Qty <= chaiQty)
                {
                    throw new Exception("拆箱数量大等于当前箱内数量");
                }
                if (boxInfo.Status != "0")
                {
                    throw new Exception("该箱码不是未组托状态,不允许拆箱!");
                }
                //开启事务
                Db.BeginTran();
                boxInfo.Qty -= chaiQty;
                boxInfo.BitBoxMark = "1";
                //更新箱码库存表
                Db.Updateable(boxInfo).ExecuteCommand();
                var boxStr = boxInfo.BoxNo.Substring(0, boxInfo.BoxNo.Length - 6);//获取箱码前缀-除后六位流水外
                var maxBoxCode1 = Db.Queryable<BllBoxInfo>().Where(m => m.BoxNo.Contains(boxStr) && m.IsDel == "0" && m.Origin == "WMS生成").Max(a => a.BoxNo);
                var maxBoxCode2 = Db.Queryable<DataBoxInfo>().Where(m => m.BoxNo.Contains(boxStr) && m.IsDel == "0").Max(a => a.BoxNo);
                //如果结果为0,则说明两个字符串相等;  ABC  BCE
                //如果结果小于0,则说明第一个字符串小于第二个字符串;
                //如果结果大于0,则说明第一个字符串大于第二个字符串。
                var maxBoxCode = maxBoxCode1;
                var bol = String.CompareOrdinal(maxBoxCode1, maxBoxCode2);
                if (bol < 0)
                {
                    maxBoxCode = maxBoxCode2;
                }
                var boxNoNew = maxBoxCode.Substring(0, maxBoxCode.Length - 6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0');
                // 添加新箱码信息
                var boxModel = new BllBoxInfo()
                {
                    ASNNo = boxInfo.ASNNo,
                    ASNDetailNo = boxInfo.ASNDetailNo,
                    BoxNo = boxNoNew,
                    BoxNo2 = "",
                    BoxNo3 = "",
                    Qty = chaiQty,
                    FullQty = boxInfo.FullQty,
                    Status = "0",//待组托
                    BindNo = null,
                    PalletNo = "",
                    SkuNo = boxInfo.SkuNo,
                    SkuName = boxInfo.SkuName,
                    LotNo = boxInfo.LotNo,
                    Standard = boxInfo.Standard,
                    PackageStandard = boxInfo.PackageStandard,
                    SupplierLot = boxInfo.SupplierLot,
                    InspectMark = boxInfo.InspectMark,
                    BitBoxMark = "1",
                    InspectStatus = "0",
                    ProductionTime = boxInfo.ProductionTime,
                    StoreTime = boxInfo.StoreTime,
                    ExpirationTime = boxInfo.ExpirationTime,
                    Origin = "WMS",
                    CreateUser = userId,
                    CreateTime = DateTime.Now,
                };
                Db.Insertable(boxModel).ExecuteCommand();
                //添加操作日志
                new OperationASNServer().AddLogOperationAsn("入库作业", "物料标签", boxNo, "编辑", $"拆分了箱码{boxInfo}数量{chaiQty}到新箱码{boxNoNew}", userId);
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                //回滚事务
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 合并箱码标签
        /// </summary>
        /// <param name="boxNo"></param>
        /// <param name="boxNo2"></param>
        /// <param name="userId"></param>
        public void MergeLableBox(string boxNo,string boxNo2, int userId)
        {
            try
            {
                if (string.IsNullOrEmpty(boxNo) || string.IsNullOrEmpty(boxNo2))
                {
                    throw new Exception("请输入要合并的箱码");
                }
                //标签信息
                var boxList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList();
                if (boxList.Count != 1)
                {
                    throw new Exception($"{boxNo}该箱码信息错误,存在多个此箱码信息");
                }
                var boxInfo = boxList.First();
                if (boxInfo.Status != "0")
                {
                    throw new Exception($"{boxNo}该箱码不是未组托状态,不允许合并!");
                }
                var boxList2 = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo2).ToList();
                if (boxList2.Count != 1)
                {
                    throw new Exception($"{boxNo2}该箱码信息错误,存在多个此箱码信息");
                }
                var boxInfo2 = boxList2.First();
                if (boxInfo2.Status != "0")
                {
                    throw new Exception($"{boxNo2}该箱码不是未组托状态,不允许合并!");
                }
                if (boxInfo.SkuNo != boxInfo2.SkuNo || boxInfo.LotNo != boxInfo2.LotNo)
                {
                    throw new Exception($"两个箱码不是物料批次信息不一致,不允许合并!");
                }
                if (boxInfo.ASNNo != boxInfo2.ASNNo || boxInfo.ASNDetailNo != boxInfo2.ASNDetailNo)
                {
                    throw new Exception($"两个箱码不是所属入库单信息不一致,不允许合并!");
                }
                if (boxInfo.Qty + boxInfo2.Qty > boxInfo.FullQty)
                {
                    throw new Exception($"两个箱码合并后数量超过满箱数量,不允许合并!");
                }
                //开启事务
                Db.BeginTran();
                boxInfo.Qty += boxInfo2.Qty;
                //更新箱码库存表
                Db.Updateable(boxInfo).ExecuteCommand();
                //删除被合并箱码信息
                Db.Deleteable(boxInfo2).ExecuteCommand();
                //添加操作日志
                new OperationASNServer().AddLogOperationAsn("入库作业", "物料标签", boxNo, "编辑", $"将{boxNo2}箱码合并到了{boxNo}箱码中", userId);
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                //回滚事务
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #endregion
        #region 数据归档
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -1871,13 +1871,14 @@
                    throw new Exception("库存托盘没有信息");
                }
                var locate = stockDetail.First().LocatNo;
                var locatList = Db.Queryable<SysStorageLocat>().Where(m=>m.WareHouseNo == "W04" && (m.AreaNo == "B06" || m.AreaNo == "B07" || m.AreaNo == "B09") && m.IsDel == "0").ToList();
                //var locatList = Db.Queryable<SysStorageLocat>().Where(m=>m.WareHouseNo == "W04" && (m.AreaNo == "B06" || m.AreaNo == "B07" || m.AreaNo == "B09") && m.IsDel == "0").ToList();
                var locatList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0").ToList();
                var locat = locatList.FirstOrDefault(m => m.LocatNo == locate);
                //判断托盘储位是否在车间
                if (locat == null)
                {
                    throw new Exception("储位信息没有在车间工位上");
                }
                //if (locat == null)
                //{
                //    throw new Exception("储位信息没有在车间工位上");
                //}
                locat.Status = "0";
                Db.Updateable(locat).ExecuteCommand();
                //判断托盘信息
Wms/WMS.IBLL/IBllAsnServer/IBllBoxInfoServer.cs
@@ -83,6 +83,22 @@
        /// <param name="lotNo">批次号</param>
        /// <param name="userId">操作人ID</param>
        void DelLabelByAsnNo(string asnNo, string lotNo, int userId);
        /// <summary>
        /// 拆分箱码标签
        /// </summary>
        /// <param name="boxNo"></param>
        /// <param name="chaiQty"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        void ChaiLableBox(string boxNo, decimal chaiQty, int userId);
        /// <summary>
        /// 合并箱码标签
        /// </summary>
        /// <param name="boxNo"></param>
        /// <param name="boxNo2"></param>
        /// <param name="userId"></param>
        void MergeLableBox(string boxNo, string boxNo2, int userId);
        #endregion
        #region 数据归档
Wms/Wms/Controllers/BllAsnController.cs
@@ -1047,8 +1047,66 @@
                return Ok(new { code = 1, count = 0, msg = e.Message });
            }
        }
        /// <summary>
        /// 拆分箱码标签
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult ChaiLableBox(LabelOperVm 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 = "未获取到当前操作人信息" });
                }
                _BoxInfoSvc.ChaiLableBox(model.BoxNo, model.ChaiQty, int.Parse(userId));
                return Ok(new { code = 0, msg = "操作成功", data = "" });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, count = 0, msg = e.Message });
            }
        }
        /// <summary>
        /// 合并箱码标签
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult MergeLableBox(LabelOperVm 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 = "未获取到当前操作人信息" });
                }
                _BoxInfoSvc.MergeLableBox(model.BoxNo, model.BoxNo2, int.Parse(userId));
                return Ok(new { code = 0, msg = "操作成功", data = "" });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, count = 0, msg = e.Message });
            }
        }
        #endregion
        #region 数据归档