222
schangxiang@126.com
2024-12-18 4a68e02a9dbffe0b215ceb1d9758ccb17329e523
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsOperationTask/WmsOperationTaskService.cs
@@ -29,6 +29,7 @@
    private readonly SqlSugarRepository<Mes_Upi_LineQueue> _mes_Upi_LineQueueRep;
    private readonly SqlSugarRepository<Mes_Package_LineQueue> _mes_Package_LineQueueRep;
    private readonly SqlSugarRepository<WmsRecordUpiNg> _wmsRecordUpiNgRep;
    private readonly SqlSugarRepository<Mes_Package_UnLine_Record> _mes_Package_UnLine_RecordRep;
    private readonly WmsCommonnQueryService _wmsCommonnQueryService;
    public WmsOperationTaskService(
@@ -43,6 +44,7 @@
        , SqlSugarRepository<WmsRecordUpiNg> wmsRecordUpiNgRep
        , WmsCommonnQueryService wmsCommonnQueryService
        , SqlSugarRepository<Mes_Package_LineQueue> mes_Package_LineQueueRep
        , SqlSugarRepository<Mes_Package_UnLine_Record> mes_Package_UnLine_RecordRep
        )
    {
        _mes_Package_LineQueueRep = mes_Package_LineQueueRep;
@@ -57,6 +59,7 @@
        _wmsRecordUpiProcessRep = wmsRecordUpiProcessRep;
        _wmsRecordPackageProcessRep = wmsRecordPackageProcessRep;
        _mes_Upi_LineQueueRep = mes_Upi_LineQueueRep;
        _mes_Package_UnLine_RecordRep = mes_Package_UnLine_RecordRep;
    }
@@ -114,6 +117,10 @@
            packageObj.UpiFlag = UpiFlagEnum.NG;
            packageObj.UpiStatus = UpiStatusEnum.已下线;
            await _mesPackageGatherRep.UpdateAsync(packageObj);
            //下线更新 订单表数据 _mesOrderGatherRep
            await UpdateOrderGather(packageObj, true);
            foreach (var quan in quanList)
            {
@@ -212,7 +219,7 @@
    }
    /// <summary>
    /// 判断齐套
    /// 下线放行
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
@@ -234,81 +241,55 @@
            throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据");
        }
        var sysConfig = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.WmsBZ30_QiTao);
        if (sysConfig == null)
        if (package.UpiStatus == UpiStatusEnum.已下线)
        {
            throw Oops.Oh($"没有配置 判断齐套 值");
        }
        if (!string.IsNullOrEmpty(sysConfig.Value) && sysConfig.Value.Trim() != "无")
        {
            throw Oops.Oh($"判断齐套值已经存在值{sysConfig.Value},不允许操作");
            throw Oops.Oh($"包{input.PackageCode}已下线");
        }
        //记录工作时间和工作人
        var curUserName = App.User.FindFirst(ClaimConst.RealName)?.Value;
        var unlineObj = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
        if (unlineObj != null)
        {
            throw Oops.Oh($"包号{input.PackageCode}已经下线");
        }
        var setValue = "";
        //判断是否是新生产订单
        var _QiTaoReuslt = "";
        bool isNeedQueryQiTao = true;
        var order = await _mesOrderGatherRep.AsQueryable().Where(x => x.Info5 == package.Info5).FirstAsync();
        if (order == null)
        {
        bool isNewOrder = false;
        string _location = "BZ-33";
        var lastPackageUnline = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.UpiFlag == UpiFlagEnum.正常).OrderByDescending(x => x.Id).FirstAsync();
        if (lastPackageUnline == null)
        {//认为是新生产订单
            isNewOrder = true;
        }
        else
        {
            if (order.IsKitting != null)
            {
                _QiTaoReuslt = (bool)order.IsKitting ? "齐套" : "不齐套";
                isNeedQueryQiTao = false;
            }
        }
        if (isNeedQueryQiTao)
        {
            var other_orderList = await _mesPackageGatherRep.AsQueryable().Where(x => x.Info5 == package.Info5 && x.PackageCode != input.PackageCode).ToListAsync();
            var num = other_orderList.Where(x => x.UpiStatus == UpiStatusEnum.初始).Count();
            if (num > 0)
            {
                //不齐套
                _QiTaoReuslt = "不齐套";
            if (lastPackageUnline.Info5 != package.Info5)
            {//认为是新生产订单
                isNewOrder = true;
                if (lastPackageUnline.Location == "BZ-33")
                {
                    _location = "BZ-32";
                }
                else
                {
                    _location = "BZ-33";
                }
            }
            else
            {
                _QiTaoReuslt = "齐套";
                _location = lastPackageUnline.Location;
            }
        }
        setValue = $"{input.PackageCode}|{_QiTaoReuslt}|" + curUserName;
        if (package.UpiStatus == UpiStatusEnum.已下线)
        {
            throw Oops.Oh($"包已下线,齐套结果[{_QiTaoReuslt}]");
        if (string.IsNullOrEmpty(_location))
        {//默认
            _location = "BZ-33";
        }
        if (order == null)
        {
            Mes_Order_Gather newOrder = new Mes_Order_Gather()
            {
                Info5 = package.Info5,
                IsKitting = _QiTaoReuslt == "齐套" ? true : false,
                PlanNo = package.PlanNo,
                OrderId = package.OrderId
            };
            await _mesOrderGatherRep.InsertAsync(newOrder);
        }
        else
        {
            order.IsKitting = _QiTaoReuslt == "齐套" ? true : false;
            await _mesOrderGatherRep.UpdateAsync(order);
        }
        _QiTaoReuslt = (bool)isNewOrder ? "新订单" : "当前订单";
        sysConfig.Value = setValue;
        await _sysConfigRep.UpdateAsync(sysConfig);
        //*/
        //记录工作时间和工作人
        var curUserName = App.User.FindFirst(ClaimConst.RealName)?.Value;
        var sysConfig_wms_unline_oper = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_oper);
        if (sysConfig_wms_unline_oper == null)
@@ -330,8 +311,78 @@
        }
        //请求PLC
        //判断方向
        bool myLocation = false;
        if (_location == "BZ-33")
        {
            myLocation = false;
        }
        else
        {
            myLocation = true;
        }
        var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
        var res = await client.WriteQiTaoInfoAsync(myLocation);
        if (res.result == false)
        {
            throw Oops.Oh(res.resMsg);
        }
        //更新数据
        package.UpiStatus = UpiStatusEnum.已下线;
        package.AreaCode = AreaCodeEnum.下线区域;
        await _mesPackageGatherRep.UpdateAsync(package);
        var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
        foreach (var item in upiList)
        {
            item.UpiStatus = UpiStatusEnum.已下线;
            item.AreaCode = AreaCodeEnum.下线区域;
            item.UpdateTime = DateTime.Now;
        }
        await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
        //删除队列信息
        var lineQueue = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
        if (lineQueue != null)
        {
            await _mes_Package_LineQueueRep.DeleteAsync(lineQueue);
        }
        //处理表  mes_order_gather
        await UpdateOrderGather(package, false);
        var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
        //新增下线记录表
        var all_upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync();
        var all_unlineList = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync();
        Mes_Package_UnLine_Record record = new Mes_Package_UnLine_Record();
        record = package.Adapt<Mes_Package_UnLine_Record>();
        record.Id = Yitter.IdGenerator.YitIdHelper.NextId();
        record.Location = _location;
        record.AllPackageNum = all_upiList.GroupBy(x => x.PackageCode).Count();
        record.CurUnlineIndexPackageNum = all_unlineList.GroupBy(x => x.PackageCode).Count() + 1;
        record.CreateTime = DateTime.Now;
        record.CreateUserName = _cretaorName;
        await _mes_Package_UnLine_RecordRep.InsertAsync(record);
        //记录包履历
        WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
        wmsRecordPackage = package.Adapt<WmsRecordPackageProcess>();
        wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
        wmsRecordPackage.Location = "";
        wmsRecordPackage.OperRemark = "正常下线";
        wmsRecordPackage.CreateTime = DateTime.Now;
        wmsRecordPackage.CreateUserName = _cretaorName;
        await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
        output = package.Adapt<ValidateQiTaoOutput>();
        output.QiTaoReuslt = _QiTaoReuslt;
        output.QiTaoReuslt = _QiTaoReuslt + $",第{record.CurUnlineIndexPackageNum}包下线,共{record.AllPackageNum}包";
        output.IsNewOrder = isNewOrder;
        //output.IsNewOrder = false;
        return output;
    }
@@ -393,7 +444,7 @@
    /// <summary>
    /// NG包下线-扫描包号
    /// NG包下线或 正常包 下线 -扫描包号
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
@@ -415,6 +466,13 @@
        //{
        //    throw Oops.Oh("原因不能为空");
        //}
        string _OperRemark = "正常人工下线";
        UpiFlagEnum upiFlagEnum = UpiFlagEnum.正常;
        if (input.IsNG)
        {
            upiFlagEnum = UpiFlagEnum.NG;
            _OperRemark = "NG下线";
        }
        var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
        if (singlePackage == null)
@@ -422,7 +480,12 @@
            throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据");
        }
        singlePackage.UpiFlag = UpiFlagEnum.NG;
        if (singlePackage.UpiStatus == UpiStatusEnum.已下线)
        {
            throw Oops.Oh($"包号{input.PackageCode}已经下线");
        }
        singlePackage.UpiFlag = upiFlagEnum;
        singlePackage.UpdateTime = DateTime.Now;
        singlePackage.UpiStatus = UpiStatusEnum.已下线;
        singlePackage.AreaCode = AreaCodeEnum.下线区域;
@@ -453,7 +516,7 @@
            wmsRecordUpi.CreateTime = DateTime.Now;
            wmsRecordUpi.CreateUserName = _cretaorName;
            wmsRecordUpi.Location = "";
            wmsRecordUpi.OperRemark = "NG下线";
            wmsRecordUpi.OperRemark = _OperRemark;
            await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
            WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg();
@@ -461,7 +524,7 @@
            wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            wmsRecordUpiNg.CreateTime = DateTime.Now;
            wmsRecordUpiNg.CreateUserName = _cretaorName;
            wmsRecordUpiNg.OperRemark = "NG下线";
            wmsRecordUpiNg.OperRemark = _OperRemark;
            await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg);
@@ -482,12 +545,15 @@
        }
        //下线更新 订单表数据 _mesOrderGatherRep
        await UpdateOrderGather(singlePackage, input.IsNG);
        WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
        wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
        wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
        wmsRecordPackage.Location = "";
        wmsRecordPackage.OperRemark = "NG下线";
        wmsRecordPackage.OperRemark = _OperRemark;
        wmsRecordPackage.CreateTime = DateTime.Now;
        wmsRecordPackage.CreateUserName = _cretaorName;
        await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
@@ -496,6 +562,56 @@
        await _mesPackageGatherRep.UpdateAsync(singlePackage);
        await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
    }
    /// <summary>
    /// 公共-下线更新 订单表数据
    /// </summary>
    /// <param name="singlePackage"></param>
    /// <returns></returns>
    private async Task UpdateOrderGather(Mes_Package_Gather singlePackage, bool isNG)
    {
        //下线更新 订单表数据 _mesOrderGatherRep
        bool isAdd = false;
        var order = await _mesOrderGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).FirstAsync();
        if (order == null)
        {
            isAdd = true;
            order = new Mes_Order_Gather()
            {
                Info5 = singlePackage.Info5,
                OrderId = singlePackage.OrderId,
                PlanNo = singlePackage.PlanNo,
            };
        }
        var packageList = await _mesPackageGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync();
        order.PackageNum = packageList.Count();
        order.UnLinePackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线).Count() + 1;
        order.NgPackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线 && x.UpiFlag == UpiFlagEnum.NG).Count();
        if (isNG)
        {
            order.NgPackageNum = order.NgPackageNum + 1;
        }
        order.NoUnLinePackageNum = order.PackageNum - order.UnLinePackageNum;
        order.AllPackageArea = packageList.Sum(x => Convert.ToDecimal(x.Info13));
        order.ScanPackageArea = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线 && x.UpiFlag == (int)UpiFlagEnum.正常).Sum(x => Convert.ToDecimal(x.Info13));
        if (isNG == false)
        {
            order.ScanPackageArea = order.ScanPackageArea + Convert.ToDecimal(singlePackage.Info13);
        }
        order.NoScanPackageArea = order.AllPackageArea - order.ScanPackageArea;
        if (isAdd)
        {
            await _mesOrderGatherRep.InsertAsync(order);
        }
        else
        {
            await _mesOrderGatherRep.UpdateAsync(order);
        }
    }
    /// <summary>
@@ -673,5 +789,25 @@
    }
    /// <summary>
    /// 扫码记录清除
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "PartClear")]
    [Description("WmsOperationTask/PartClear")]
    public async Task PartClear()
    {
        //模式判断
        var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
        var res = await client.WriteStation_PartClearAsync();
        if (res.result == false)
        {
            throw Oops.Oh(res.resMsg);
        }
    }
}