刘磊
7 天以前 2de09bec5cc05bf875543fa8956167ca7db73021
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -2,13 +2,18 @@
using MailKit.Search;
using Mapster;
using Masuit.Tools;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using System.Diagnostics;
using System.Reflection.Emit;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core.Const;
using WIDESEA_DTO.WMS;
using WIDESEA_IServices;
using WIDESEA_IStoragIntegrationServices;
using WIDESEA_Model.Models;
using WIDESEA_StorageBasicRepository;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
@@ -32,6 +37,11 @@
    private readonly IDt_WheelsStock_htyRepository _WheelsStock_HtyRepository;
    private readonly IDt_InWheels_mes_htyRepository _InWheels_Mes_HtyRepository;
    private readonly IDt_CacheInfoRepository _CacheInfoRepository;
    private readonly IDt_OutWheels_htyRepository _OutWheels_HtyRepository;
    private readonly IDt_InZdp_mesRepository _InZdp_MesRepository;
    private readonly IDt_InZdp_mes_htyRepository _InZdp_Mes_HtyRepository;
    private readonly IDt_ZdpStockRepository _ZdpStockRepository;
    private readonly IDt_ZdpStock_htyRepository _ZdpStock_HtyRepository;
    public Dt_TaskService(IDt_TaskRepository BaseDal,
                                IUnitOfWorkManage unitOfWorkManage,
@@ -49,7 +59,12 @@
                                IDt_WheelsStockRepository wheelsStockRepository,
                                IDt_WheelsStock_htyRepository wheelsStock_HtyRepository,
                                IDt_InWheels_mes_htyRepository inWheels_Mes_HtyRepository,
                                IDt_CacheInfoRepository cacheInfoRepository) : base(BaseDal)
                                IDt_OutWheels_htyRepository dt_OutWheels_HtyRepository,
                                IDt_CacheInfoRepository cacheInfoRepository,
                                IDt_InZdp_mesRepository inZdp_MesRepository,
                                IDt_InZdp_mes_htyRepository inZdp_Mes_HtyRepository,
                                IDt_ZdpStockRepository zdpStockRepository,
                                IDt_ZdpStock_htyRepository dt_ZdpStock_HtyRepository) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
@@ -64,7 +79,12 @@
        _WheelsStockRepository = wheelsStockRepository;
        _WheelsStock_HtyRepository = wheelsStock_HtyRepository;
        _InWheels_Mes_HtyRepository = inWheels_Mes_HtyRepository;
        _OutWheels_HtyRepository = dt_OutWheels_HtyRepository;
        _CacheInfoRepository = cacheInfoRepository;
        _InZdp_MesRepository = inZdp_MesRepository;
        _InZdp_Mes_HtyRepository = inZdp_Mes_HtyRepository;
        _ZdpStockRepository = zdpStockRepository;
        _ZdpStock_HtyRepository = dt_ZdpStock_HtyRepository;
    }
    #region å¤–部接口方法
@@ -103,6 +123,39 @@
    #endregion ç§»åº“任务完成
    #region åˆ¶åŠ¨ç›˜ç§»åº“ä»»åŠ¡å®Œæˆ
    /// <summary>
    /// ç§»åº“任务完成
    /// </summary>
    /// <param name="saveModel">任务数据合集</param>
    /// <returns>返回结果集</returns>
    public async Task<WebResponseContent> CompleteZdpTaskAsync(Dt_Task task, Dt_ZdpStock stock)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // æ›´æ–°è´§ä½å’Œåº“存信息
            (Dt_ZdpStock updateStock, DtLocationInfo locationInForm, DtLocationInfo locationInfoTo) = UpdateZdpStockLocation(stock,task);
            var taskHty = CreateHistoricalTask(task);
            LogFactory.GetLog("任务完成").InfoFormat(true, "移库任务完成", $"货位地址:{task.TargetAddress},修改后库存数据:{JsonConvert.SerializeObject(updateStock)},原先货位数据:{locationInForm}");
            // æ‰§è¡Œæ•°æ®åº“事务
            bool isResult = await ZdpExecuteTransaction(updateStock, taskHty, locationInForm, locationInfoTo, task.TaskId);
            if (isResult)
                content.OK("移库任务完成成功");
            else
                content.Error("移库任务完成失败");
        }
        catch (Exception err)
        {
            Console.WriteLine(err.Message.ToString());
        }
        return content;
    }
    #endregion ç§»åº“任务完成
    #region å…¥åº“任务完成
    /// <summary>
@@ -118,7 +171,17 @@
        {
            // èŽ·å–MES信息和目标位置信息
            var mes_Wheels = await _InWheels_MesRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode);
            Dt_InWheels_mes mes_Wheels = null;
            Dt_InZdp_mes mes_Zdp = null;
            Dt_WheelsStock wheelsStock = null;
            Dt_ZdpStock zdpStock = null;
            if (task.TaskType== (int)TaskInboundTypeEnum.InBrake)
                mes_Zdp = await _InZdp_MesRepository.QueryFirstNavAsync(x => x.Zdp_code == task.PalletCode);
            else
                mes_Wheels = await _InWheels_MesRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode);
            var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway);
            int lastStatus = locationInf.LocationStatus;
@@ -128,39 +191,85 @@
            // åˆ›å»ºåŽ†å²ä»»åŠ¡å®žä¾‹æ¨¡åž‹
            var taskHty = CreateHistoricalTask(task);
            // æ ¹æ®åˆ›å»ºåº“存实例模型
            Dt_WheelsStock wheelsStock = new Dt_WheelsStock
            if(task.TaskType == (int)TaskInboundTypeEnum.InBrake)
            {
                Wheels_ldtm = mes_Wheels.Wheels_ldtm,
                CreateDate = DateTime.Now,
                Creater = task.Creater,
                Wheels_Type = mes_Wheels.Wheels_Type,
                Wheels_gkcc = mes_Wheels.Wheels_gkcc,
                WheelsProps = mes_Wheels.WheelsProps,
                Wheels_CarNo = mes_Wheels.Wheels_CarNo,
                Wheels_CarType = mes_Wheels.Wheels_CarType,
                Wheels_ldxh = mes_Wheels.Wheels_ldxh,
                Wheels_code = mes_Wheels.Wheels_code,
                Wheels_InDate = mes_Wheels.Wheels_InDate,
                Wheels_level = mes_Wheels.Wheels_level,
                Wheels_Location = task.TargetAddress,
                Wheels_NewOrOld = mes_Wheels.Wheels_NewOrOld,
                Wheels_Num = mes_Wheels.Wheels_Num,
                Wheels_psj = mes_Wheels.Wheels_psj,
                Wheels_CurrentStatue = 1,
                Wheels_mttype = mes_Wheels.Wheels_mttype,
                Wheels_ljz = mes_Wheels.Wheels_ljz,
                Wheels_ldh = mes_Wheels.Wheels_ldh,
                //Wheels_SequenceNum = mes_Wheels.Wheels_SequenceNum,
                Wheels_ygljz = mes_Wheels.Wheels_ygljz,
                Wheels_gkzja = mes_Wheels.Wheels_gkzja,
                Wheels_gkzjb = mes_Wheels.Wheels_gkzjb,
                Wheels_gkzjc = mes_Wheels.Wheels_gkzjc,
                // æ ¹æ®åˆ›å»ºåº“存实例模型
                zdpStock = new Dt_ZdpStock
                {
                    Zdp_code= mes_Zdp.Zdp_code,
                    Zdp_ZPH = mes_Zdp.Zdp_ZPH,
                    Zdp_CurrentStatue = 1,
                    Zdp_Location = task.TargetAddress,
                    Zdp_chexing= mes_Zdp.Zdp_chexing,
                    Zdp_neworold = mes_Zdp.Zdp_neworold,
                    Zdp_POS = mes_Zdp.Zdp_POS,
                    Zdp_LSXH = mes_Zdp.Zdp_LSXH,
                    Zdp_MAT = mes_Zdp.Zdp_MAT,
                    Zdp_SITE = mes_Zdp.Zdp_SITE,
                    Zdp_GKA1 = mes_Zdp.Zdp_GKA1,
                    Zdp_GKA2 = mes_Zdp.Zdp_GKA2,
                    Zdp_GKA3 = mes_Zdp.Zdp_GKA3,
                    Zdp_GKA = mes_Zdp.Zdp_GKA,
                    Zdp_GKB1 = mes_Zdp.Zdp_GKB1,
                    Zdp_GKB2 = mes_Zdp.Zdp_GKB2,
                    Zdp_GKB3 = mes_Zdp.Zdp_GKB3,
                    Zdp_GKB = mes_Zdp.Zdp_GKB,
                    Zdp_GKC1 = mes_Zdp.Zdp_GKC1,
                    Zdp_GKC2 = mes_Zdp.Zdp_GKC2,
                    Zdp_GKC3 = mes_Zdp.Zdp_GKC3,
                    Zdp_GKC = mes_Zdp.Zdp_GKC,
                    Zdp_GKJZ = mes_Zdp.Zdp_GKJZ,
                    Zdp_LSCSYMH = mes_Zdp.Zdp_LSCSYMH,
                    Zdp_LMCSYMH = mes_Zdp.Zdp_LMCSYMH,
                    Zdp_rksj = mes_Zdp.Zdp_rksj,
                    CreateDate = DateTime.Now,
                    Creater = task.Creater,
                };
            }
            else
            {
                // æ ¹æ®åˆ›å»ºåº“存实例模型
                 wheelsStock = new Dt_WheelsStock
                {
                    Wheels_ldtm = mes_Wheels.Wheels_ldtm,
                    CreateDate = DateTime.Now,
                    Creater = task.Creater,
                    Wheels_Type = mes_Wheels.Wheels_Type,
                    Wheels_gkcc = mes_Wheels.Wheels_gkcc,
                    WheelsProps = mes_Wheels.WheelsProps,
                    Wheels_CarNo = mes_Wheels.Wheels_CarNo,
                    Wheels_CarType = mes_Wheels.Wheels_CarType,
                    Wheels_ldxh = mes_Wheels.Wheels_ldxh,
                    Wheels_code = mes_Wheels.Wheels_code,
                    Wheels_InDate = mes_Wheels.Wheels_InDate,
                    Wheels_level = mes_Wheels.Wheels_level,
                    Wheels_Location = task.TargetAddress,
                    Wheels_NewOrOld = mes_Wheels.Wheels_NewOrOld,
                    Wheels_Num = mes_Wheels.Wheels_Num,
                    Wheels_psj = mes_Wheels.Wheels_psj,
                    Wheels_CurrentStatue = 1,
                    Wheels_mttype = mes_Wheels.Wheels_mttype,
                    Wheels_ljz = mes_Wheels.Wheels_ljz,
                    Wheels_ldh = mes_Wheels.Wheels_ldh,
                    //Wheels_SequenceNum = mes_Wheels.Wheels_SequenceNum,
                    Wheels_ygljz = mes_Wheels.Wheels_ygljz,
                    Wheels_gkzja = mes_Wheels.Wheels_gkzja,
                    Wheels_gkzjb = mes_Wheels.Wheels_gkzjb,
                    Wheels_gkzjc = mes_Wheels.Wheels_gkzjc,
                };
            }
            };
            // æ‰§è¡Œæ•°æ®åº“事务
            bool isResult = await ExecuteTransaction(wheelsStock, taskHty, locationInf, task.TaskId, mes_Wheels);
            // æ‰§è¡Œæ•°æ®åº“事务ZDPExecuteTransaction
            bool isResult = false;
            if (task.TaskType == (int)TaskInboundTypeEnum.InBrake)
            {
                isResult = await ZDPExecuteTransaction(zdpStock, taskHty, locationInf, task.TaskId, mes_Zdp);
            }
            else
            {
                isResult=await ExecuteTransaction(wheelsStock, taskHty, locationInf, task.TaskId, mes_Wheels);
            }
            if (isResult)
            {
                _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
@@ -188,6 +297,8 @@
        WebResponseContent content = new WebResponseContent();
        try
        {
            if(stock ==null) return content.Error("任务完成失败,未找到当前库存信息,删除失败");
            // æ›´æ–°åº“位状态与任务状态
            (var loc, var tas) = UpdateStockAndTaskStatus(stock, task);
            var taskHty = task.Adapt<Dt_Task_Hty>();
@@ -198,6 +309,35 @@
            stockInfo_Hty.FinishWheelDate = DateTime.Now;
            stockInfo_Hty.OperateType = (int)OperateTypeEnum.自动完成;
            Dt_OutWheels_hty Outwheels_hty = new Dt_OutWheels_hty
            {
                Wheels_code = stock.Wheels_code,
                Wheels_Type = stock.Wheels_Type == "1"?"è½®":"盘",
                Wheels_Num = stock.Wheels_Num,
                CreateDate = DateTime.Now,
                Creater = App.User.UserName == null ? "admin" : App.User.UserName,
                WheelsProps = stock.WheelsProps,
                Wheels_CarNo = stock.Wheels_CarNo,
                Wheels_CarType = stock.Wheels_CarType,
                Wheels_ldxh = stock.Wheels_ldxh,
                Wheels_ldtm = stock.Wheels_ldtm,
                Wheels_InDate = stock.Wheels_InDate,
                Wheels_level = stock.Wheels_level,
                Wheels_NewOrOld = stock.Wheels_NewOrOld,
                Wheels_psj = stock.Wheels_psj,
                Wheels_gkcc = stock.Wheels_gkcc,
                Wheels_gkzja = stock.Wheels_gkzja,
                Wheels_gkzjb = stock.Wheels_gkzjb,
                Wheels_gkzjc = stock.Wheels_gkzjc,
                Wheels_ldh = stock.Wheels_ldh,
                Wheels_ljz = stock.Wheels_ljz,
                Wheels_mttype = stock.Wheels_mttype,
                //Wheels_SequenceNum = "",
                Wheels_ygljz = stock.Wheels_ygljz,
            };
            // äº‹åŠ¡å¤„ç†
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
@@ -206,6 +346,89 @@
                //var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(task.TaskId);                         //删除任务
                var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;                        //加入历史任务
                var isStockHtyAdd = await _WheelsStock_HtyRepository.AddDataAsync(stockInfo_Hty);           //加入历史库存
                var isoutWheelsHtyAdd = await _OutWheels_HtyRepository.AddDataAsync(Outwheels_hty);         //添加车轮出库信息
            });
            return content.OK("任务完成成功", task.Remark);
        }
        catch (Exception err)
        {
            LogFactory.GetLog("任务完成").Error(true, $"系统异常,异常信息:{err.Message}");
            return content.Error(err.Message);
        }
    }
    private (DtLocationInfo, Dt_Task) UpdateStockAndTaskStatus( Dt_Task task)
    {
        var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
        int lastStatus = location.LocationStatus;
        location.LocationStatus = (int)LocationEnum.Free;
        task.TaskState = (int)TaskOutStatusEnum.OutFinish;
        //task.CurrentAddress = task.NextAddress;
        //task.NextAddress = task.TargetAddress;
        _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
        LogFactory.GetLog("任务完成").Info(true, "更新库位状态与任务状态");
        return (location, task);
    }
    #endregion
    #region åˆ¶åŠ¨ç›˜å‡ºåº“ä»»åŠ¡å®Œæˆ
    public async Task<WebResponseContent> CompleteOutZdpTaskAsync(Dt_Task task, Dt_ZdpStock stock)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            if (stock == null) return content.Error("任务完成失败,未找到当前库存信息,删除失败");
            // æ›´æ–°åº“位状态与任务状态
            (var loc, var tas) = UpdateStockAndTaskStatus(task);
            var taskHty = task.Adapt<Dt_Task_Hty>();
            taskHty.FinishTime = DateTime.Now;
            taskHty.OperateType = (int)OperateTypeEnum.自动完成;
            Dt_ZdpStock_hty stockInfo_Hty = stock.Adapt<Dt_ZdpStock_hty>();
            stockInfo_Hty.FinishDate = DateTime.Now;
            stockInfo_Hty.OperateType = (int)OperateTypeEnum.自动完成;
            Dt_OutZdp_hty Outwheels_hty = new Dt_OutZdp_hty
            {
                Zdp_code = stock.Zdp_code,
                Zdp_ZPH = stock.Zdp_ZPH,
                Zdp_Location = stock.Zdp_Location,
                Zdp_chexing = stock.Zdp_chexing,
                Zdp_neworold = stock.Zdp_neworold,
                Zdp_POS = stock.Zdp_POS,
                Zdp_LSXH = stock.Zdp_LSXH,
                Zdp_MAT = stock.Zdp_MAT,
                Zdp_SITE = stock.Zdp_SITE,
                Zdp_GKA1 = stock.Zdp_GKA1,
                Zdp_GKA2 = stock.Zdp_GKA2,
                Zdp_GKA3 = stock.Zdp_GKA3,
                Zdp_GKA = stock.Zdp_GKA,
                Zdp_GKB1 = stock.Zdp_GKB1,
                Zdp_GKB2 = stock.Zdp_GKB2,
                Zdp_GKB3 = stock.Zdp_GKB3,
                Zdp_GKB = stock.Zdp_GKB,
                Zdp_GKC1 = stock.Zdp_GKC1,
                Zdp_GKC2 = stock.Zdp_GKC2,
                Zdp_GKC3 = stock.Zdp_GKC3,
                Zdp_GKC = stock.Zdp_GKC,
                Zdp_GKJZ = stock.Zdp_GKJZ,
                Zdp_LSCSYMH = stock.Zdp_LSCSYMH,
                Zdp_rksj = stock.Zdp_rksj,
            };
            // äº‹åŠ¡å¤„ç†
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                var isStockUpdated = await _ZdpStockRepository.DeleteDataByIdAsync(stock.Zdp_ID);     //删除库存
                var isLocationUpdate = await _locationRepository.UpdateDataAsync(loc);                      //更新库位
                //var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(task.TaskId);                         //删除任务
                var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;                        //加入历史任务
                var isStockHtyAdd = await _ZdpStock_HtyRepository.AddDataAsync(stockInfo_Hty);           //加入历史库存
            });
            return content.OK("任务完成成功", task.Remark);
@@ -258,7 +481,9 @@
        // éªŒè¯åº“存是否存在
        var stock = await _WheelsStockRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode);
        var stock = await _WheelsStockRepository.QueryFirstNavAsync(x => x.Wheels_Num.Contains(task.PalletCode) && x.Wheels_Location==task.SourceAddress);
        var ZdpStock = await _ZdpStockRepository.QueryFirstNavAsync(x => x.Zdp_code == task.PalletCode && x.Zdp_Location == task.SourceAddress);
        // æ ¹æ®ä»»åŠ¡ç±»åž‹è°ƒç”¨ç›¸åº”çš„å®Œæˆä»»åŠ¡æ–¹æ³•
        switch (task.TaskType)
@@ -270,13 +495,19 @@
                return await CompleteInboundTaskAsync(task);
            case (int)TaskOutboundTypeEnum.Outbound:
            case (int)TaskOutboundTypeEnum.OutBrake:
            case (int)TaskOutboundTypeEnum.OutWheels:
                LogFactory.GetLog("任务完成").InfoFormat(true, "出库任务", "");
                return await CompleteStackTaskAsync(task, stock);
            case (int)TaskOutboundTypeEnum.OutBrake:
                LogFactory.GetLog("任务完成").InfoFormat(true, "制动盘出库任务", "");
                return await CompleteOutZdpTaskAsync(task, ZdpStock);
            case (int)TaskRelocationTypeEnum.Relocation:
                return await CompleteTransferTaskAsync(task, stock);
                if (stock != null)
                    return await CompleteTransferTaskAsync(task, stock);
                else
                    return await CompleteZdpTaskAsync(task, ZdpStock);
            default:
                return content.Error("任务类型不存在");
@@ -402,75 +633,164 @@
        WebResponseContent content = new WebResponseContent();
        try
        {
            List<Dt_WheelsStock> WheelList = new List<Dt_WheelsStock>();
            List<Dt_ZdpStock> ZdpStockList = new List<Dt_ZdpStock>();
            List<Dt_Task> TaskList = new List<Dt_Task>();
            List<DtLocationInfo> Locationslist = new List<DtLocationInfo>();
            List<WMSTaskDTO> WMSTaskDTOdata = new List<WMSTaskDTO>();
            string palletCode = saveModel.MainData["palletCode"].ToString();
            string station = saveModel.MainData["station"].ToString();
            string outtype = saveModel.MainData["outtype"].ToString();  //1为指定车轮出库,2为指定制动盘出库
            // æŸ¥è¯¢åº“存信息
            var stockInfo = _WheelsStockRepository.QueryFirst(x => x.Wheels_code == palletCode);
            if (stockInfo == null)
            List<string> palletCodes = JsonConvert.DeserializeObject<List<string>>(palletCode);     //把托盘条码显示
            List<DtLocationInfo> locationinfoData = _locationRepository.QueryData(x => x.LocationStatus == 2);  //查找全部库位
            if (outtype == "2")
            {
                return content.Error("未查询到对应的库存信息");
                List<Dt_ZdpStock> stocktData = _ZdpStockRepository.QueryData(x => x.Zdp_CurrentStatue == 1);  //查找全部在库的库存
                foreach (var item in palletCodes)
                {
                    Dt_ZdpStock zdpInfo = _ZdpStockRepository.QueryFirst(x => x.Zdp_code == item);
                    if (zdpInfo == null) return content.Error("未查询到对应的库存信息");
                    zdpInfo.Zdp_CurrentStatue = 4;
                    string Location = zdpInfo.Zdp_Location;
                    var locationst = locationinfoData.FirstOrDefault(x => x.LocationCode == Location);
                    if (locationst.LocationStatus != (int)LocationEnum.InStock && locationst.EnalbeStatus != 1) return content.Error($"库位异常,请检查一下库位,库存条码:{item},库位号:{Location}");
                    locationst.LocationStatus = (int)LocationEnum.InStockDisable;
                    var task = BaseDal.QueryFirst(x => x.PalletCode == item);
                    if (task != null)
                    {
                        return content.Error($"【{item}】已存在任务");
                    }
                    CheckInfo checkInfo = new CheckInfo()
                    {
                        CarType = zdpInfo.Zdp_chexing ,
                        MTType ="0" ,    //制动盘没有动拖属性
                        //CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2",
                        CheckType = outtype,
                        HubLevel = "0" ,
                        CLTM =zdpInfo.Zdp_code,
                        IsCheck = true,
                        Standards = zdpInfo.Zdp_neworold
                    };
                    task = new Dt_Task
                    {
                        CarType = zdpInfo.Zdp_chexing,
                        wheels_gkcc =  zdpInfo.Zdp_GKJZ,
                        WheelsNewOrOld = zdpInfo.Zdp_neworold,
                        WheelsLX = "",
                        Grade = 1,
                        Roadway = "SC1",
                        TargetAddress = station,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = "2010",
                        OrderNo = null,
                        PalletCode =  zdpInfo.Zdp_code,
                        wheels_mttype =  "" ,
                        SourceAddress = zdpInfo.Zdp_Location,
                        CurrentAddress =zdpInfo.Zdp_Location,
                        TaskState = (int)TaskOutStatusEnum.OutNew,
                        TaskType = outtype == "2" ? (int)TaskOutboundTypeEnum.OutBrake : (int)TaskOutboundTypeEnum.OutWheels,
                        TaskNum = BaseDal.GetTaskNo().Result,
                        Creater = "System",
                        CreateDate = DateTime.Now,
                        TaskId = 0,
                        task_bak1 = JsonConvert.SerializeObject(checkInfo),
                        Towhereabouts = station,
                    };
                    // åˆ›å»ºä»»åŠ¡ä¼ è¾“ç”¨çš„DTO对象
                    var taskDTO = CreateTaskDTO(task);
                    WMSTaskDTOdata.Add(taskDTO);
                    Locationslist.Add(locationst);
                    TaskList.Add(task);
                    ZdpStockList.Add(zdpInfo);
                }
            }
            else
            {
                List<Dt_WheelsStock> stocktData = _WheelsStockRepository.QueryData(x => x.Wheels_CurrentStatue == 1);  //查找全部在库的库存
                foreach (var item in palletCodes)
                {
                    Dt_WheelsStock stockInfo = _WheelsStockRepository.QueryFirst(x => x.Wheels_code == item);
                    if (stockInfo == null) return content.Error("未查询到对应的库存信息");
                    stockInfo.Wheels_CurrentStatue = 4;
                    string Location = stockInfo.Wheels_Location;
                    var locationst = locationinfoData.Where(x => x.LocationCode== stockInfo.Wheels_Location).FirstOrDefault();
                    if (locationst.LocationStatus == (int)LocationEnum.Lock) return content.Error("库位锁定,请先解锁后再指定出库");
                    locationst.LocationStatus = (int)LocationEnum.InStockDisable;
                    var task = BaseDal.QueryFirst(x => x.PalletCode == item);
                    if (task != null)
                    {
                        return content.Error($"【{item}】已存在任务");
                    }
                    CheckInfo checkInfo = new CheckInfo()
                    {
                        CarType = stockInfo.Wheels_CarType,
                        MTType = stockInfo.Wheels_mttype,    //制动盘没有动拖属性
                        //CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2",
                        CheckType = outtype,
                        HubLevel = stockInfo.Wheels_level.Contains("等级") ? stockInfo.Wheels_level.Replace("等级", "") : "0",
                        CLTM = stockInfo.Wheels_Num,
                        IsCheck = true,
                        Standards = stockInfo.Wheels_NewOrOld
                    };
                    task = new Dt_Task
                    {
                        CarType =  stockInfo.Wheels_CarType,
                        wheels_gkcc = stockInfo.Wheels_gkcc,
                        WheelsNewOrOld =  stockInfo.Wheels_NewOrOld,
                        WheelsLX = outtype == "2" ? "" : stockInfo.Wheels_ldxh,
                        Grade = 1,
                        Roadway = "SC1",
                        TargetAddress = station,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = "2010",
                        OrderNo = null,
                        PalletCode =  stockInfo.Wheels_Num,
                        wheels_mttype = stockInfo.Wheels_mttype,
                        SourceAddress =stockInfo.Wheels_Location,
                        CurrentAddress =  stockInfo.Wheels_Location,
                        TaskState = (int)TaskOutStatusEnum.OutNew,
                        TaskType = outtype == "2" ? (int)TaskOutboundTypeEnum.OutBrake : (int)TaskOutboundTypeEnum.OutWheels,
                        TaskNum = BaseDal.GetTaskNo().Result,
                        Creater = "System",
                        CreateDate = DateTime.Now,
                        TaskId = 0,
                        task_bak1 = JsonConvert.SerializeObject(checkInfo),
                        Towhereabouts = station,
                    };
                    // åˆ›å»ºä»»åŠ¡ä¼ è¾“ç”¨çš„DTO对象
                    var taskDTO = CreateTaskDTO(task);
                    WMSTaskDTOdata.Add(taskDTO);
                    Locationslist.Add(locationst);
                    TaskList.Add(task);
                    WheelList.Add(stockInfo);
                }
            }
            if (stockInfo.Wheels_CurrentStatue != 1) return content.Error("指定失败:当前状态不允许指定出库");
            stockInfo.Wheels_CurrentStatue = 4;
            //查询库位是否锁定,
            var location = _locationRepository.QueryFirst(x => x.LocationCode == stockInfo.Wheels_Location);
            if (location.LocationStatus == (int)LocationEnum.Lock) return content.Error("库位锁定,请先解锁后再指定出库");
            location.LocationStatus = (int)LocationEnum.InStockDisable;
            var task = BaseDal.QueryFirst(x => x.PalletCode == palletCode);
            if (task != null)
            {
                return content.Error($"【{palletCode}】已存在任务");
            }
            CheckInfo checkInfo = new CheckInfo()
            {
                CarType = stockInfo.Wheels_CarType,
                MTType = stockInfo.Wheels_mttype,
                CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2",
                HubLevel = stockInfo.Wheels_level.Contains("等级") ? stockInfo.Wheels_level.Replace("等级", "") : "0",
                CLTM = stockInfo.Wheels_Num,
                IsCheck = true,
                Standards = stockInfo.Wheels_NewOrOld
            };
            // var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == station);
            // åˆ›å»ºå¹¶æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
            task = new Dt_Task
            {
                CarType = stockInfo.Wheels_CarType,
                wheels_gkcc = stockInfo.Wheels_gkcc,
                WheelsNewOrOld = stockInfo.Wheels_NewOrOld,
                WheelsLX = stockInfo.Wheels_ldxh,
                Grade = 1,
                Roadway = "SC1",
                TargetAddress = station,
                Dispatchertime = DateTime.Now,
                MaterialNo = "",
                NextAddress = "2010",
                OrderNo = null,
                PalletCode = stockInfo.Wheels_Num,
                wheels_mttype = stockInfo.Wheels_mttype,
                SourceAddress = stockInfo.Wheels_Location,
                CurrentAddress = stockInfo.Wheels_Location,
                TaskState = (int)TaskOutStatusEnum.OutNew,
                TaskType = (int)TaskOutboundTypeEnum.OutWheels,
                TaskNum = BaseDal.GetTaskNo().Result,
                Creater = "System",
                CreateDate = DateTime.Now,
                TaskId = 0,
                task_bak1 = JsonConvert.SerializeObject(checkInfo)
            };
            // åˆ›å»ºä»»åŠ¡ä¼ è¾“ç”¨çš„DTO对象
            var taskDTO = CreateTaskDTO(task);
            // èŽ·å–WMS IP地址用于发送任务请求
            var wmsIpAddress = GetWCSIpReceiveTask();
@@ -478,19 +798,25 @@
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var tasks = new List<WMSTaskDTO>() { taskDTO };
            // å‘送任务请求到WMS
            var result = HttpHelper.Post(wmsIpAddress, tasks.ToJsonString());
            var result = HttpHelper.Post(wmsIpAddress, WMSTaskDTOdata.ToJsonString());
            content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (content.Status)
            {
                // æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
                BaseDal.AddData(task);
                BaseDal.AddData(TaskList);
                // æ›´æ–°åº“位位置状态为不可用
                _locationRepository.UpdateData(location);
                _WheelsStockRepository.UpdateData(stockInfo);
                _locationRepository.UpdateData(Locationslist);
                if (outtype == "2")
                {
                    _ZdpStockRepository.UpdateData(ZdpStockList);
                }
                else
                {
                    _WheelsStockRepository.UpdateData(WheelList);
                }
            }
        }
        catch (Exception ex)
        {
@@ -747,9 +1073,32 @@
        return (stock, fromLocation, toLocation);
    }
    #region æ‰§è¡Œæ•°æ®åº“事务
    /// <summary>
    /// æ‰§è¡Œæ•°æ®åº“事务
    /// åˆ¶åŠ¨ç›˜æ›´æ–°åº“å­˜ä½ç½®
    /// </summary>
    /// <param name="stock"></param>
    /// <param name="task"></param>
    /// <returns></returns>
    private (Dt_ZdpStock, DtLocationInfo, DtLocationInfo) UpdateZdpStockLocation(Dt_ZdpStock stock, Dt_Task task)
    {
        //修改来源库位和 ç›®æ ‡åº“位状态
        var fromLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
        fromLocation.LocationStatus = (int)LocationEnum.Free;
        var toLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway);
        toLocation.LocationStatus = (int)LocationEnum.InStock;
        // å°†åº“存位置设置为目标位置
        stock.Zdp_Location = task.TargetAddress;
        // è¿”回更新后的库存和位置信息
        return (stock, fromLocation, toLocation);
    }
    #region è½¦è½®æ‰§è¡Œæ•°æ®åº“事务
    /// <summary>
    /// è½¦è½®æ‰§è¡Œæ•°æ®åº“事务
    /// </summary>
    /// <param name="stock">库存对象</param>
    /// <param name="taskHty">历史任务对象</param>
@@ -812,6 +1161,71 @@
    }
    #endregion
    #region åˆ¶åŠ¨ç›˜æ‰§è¡Œæ•°æ®åº“äº‹åŠ¡
    /// <summary>
    ///  åˆ¶åŠ¨ç›˜æ‰§è¡Œæ•°æ®åº“äº‹åŠ¡
    /// </summary>
    /// <param name="stock">库存对象</param>
    /// <param name="taskHty">历史任务对象</param>
    /// <param name="taskId">任务ID</param>
    /// <returns></returns>
    private async Task<bool> ZDPExecuteTransaction(Dt_ZdpStock stock, Dt_Task_Hty taskHty, DtLocationInfo locationInfo, int taskId, Dt_InZdp_mes inZdp_Mes = null)
    {
        _unitOfWorkManage.BeginTran();
        try
        {
            var isUpdateStock = false;
            var isDeleteWheelsMes = false;
            // æ·»åŠ åº“å­˜
            isUpdateStock = _ZdpStockRepository.AddData(stock) > 0;
            if (inZdp_Mes != null)
            {
                isDeleteWheelsMes = _InZdp_MesRepository.DeleteData(inZdp_Mes);
                var InZdp_mes_hty = inZdp_Mes.Adapt<Dt_InZdp_mes_hty>();
                InZdp_mes_hty.Zdp_CurrentStatue = "2";
                InZdp_mes_hty.FinishDate = DateTime.Now;
                InZdp_mes_hty.OperateType = (int)OperateTypeEnum.自动完成;
                _InZdp_Mes_HtyRepository.AddData(InZdp_mes_hty);
            }
            // æ·»åŠ åŽ†å²ä»»åŠ¡
            var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
            // ä¿®æ”¹ç§»åº“前货位状态
            var isUpdateLoc = _locationRepository.UpdateData(locationInfo);
            // åˆ é™¤ä»»åŠ¡æ•°æ®
            var isTaskDelete = await Delete(taskId);
            // æäº¤æˆ–回滚事务
            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLoc && isDeleteWheelsMes)
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"事务处理完成,提交事务。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新或添加库存:{isUpdateStock},修改入库前货位状态:{isUpdateLoc}");
                _unitOfWorkManage.CommitTran();
                return true;
            }
            else
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"数据处理失败,请检查数据是否正确,数据回滚。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新库存:{isUpdateStock},修改入库前货位状态:{isUpdateLoc}");
                _unitOfWorkManage.RollbackTran();
                return false;
            }
        }
        catch (Exception err)
        {
            LogFactory.GetLog("任务完成").InfoFormat(true, $"任务完成,系统异常,异常信息:{err.Message}", "无参数");
            _unitOfWorkManage.RollbackTran();
            throw; // æŠ›å‡ºå¼‚常以便外部捕获
        }
    }
    #endregion
    #region ç§»åº“任务事务
    private async Task<bool> ExecuteTransaction(Dt_WheelsStock stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId)
@@ -855,6 +1269,49 @@
    #endregion MyRegion
    #region åˆ¶åŠ¨ç›˜ç§»åº“ä»»åŠ¡äº‹åŠ¡
    private async Task<bool> ZdpExecuteTransaction(Dt_ZdpStock stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId)
    {
        _unitOfWorkManage.BeginTran();
        try
        {
            var isUpdateStock = _ZdpStockRepository.UpdateData(stock);
            // æ·»åŠ åŽ†å²ä»»åŠ¡
            var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
            // ä¿®æ”¹ç§»åº“前货位状态
            var isUpdateLocF = _locationRepository.UpdateData(fromLocation);
            var isUpdateLocT = _locationRepository.UpdateData(toLocation);
            // åˆ é™¤ä»»åŠ¡æ•°æ®
            var isTaskDelete = await Delete(taskId);
            // æäº¤æˆ–回滚事务
            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLocF && isUpdateLocT)
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"事务处理完成,提交事务。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新或添加库存:{isUpdateStock},修改移库前货位状态:{isUpdateLocF}");
                _unitOfWorkManage.CommitTran();
                return true;
            }
            else
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"数据处理失败,请检查数据是否正确,数据回滚。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新库存:{isUpdateStock},修改移库前货位状态:{isUpdateLocF}");
                _unitOfWorkManage.RollbackTran();
                return false;
            }
        }
        catch (Exception err)
        {
            LogFactory.GetLog("任务完成").InfoFormat(true, $"任务完成,系统异常,异常信息:{err.Message}", "无参数");
            _unitOfWorkManage.RollbackTran();
            throw new Exception(err.Message); // æŠ›å‡ºå¼‚常以便外部捕获
        }
    }
    #endregion MyRegion
    #region ä»»åŠ¡è¯·æ±‚æ–¹æ³•