wangxinhui
19 小时以前 39d468b76e60c05ffcdf749f7ed1d3c443d542f8
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/PackaxisTaskService.cs
@@ -41,7 +41,6 @@
            _stationMangerRepository = stationMangerRepository;
            _unitOfWorkManage = unitOfWorkManage;
        }
        private static object lock_reqPackTask = new object();
        /// <summary>
        /// åˆ†é…ç åž›ä»»åŠ¡
        /// </summary>
@@ -50,106 +49,107 @@
        /// <returns></returns>
        public WebResponseContent ReqPackTask(string barCode,string deviceCode)
        {
            lock (lock_reqPackTask)
            WebResponseContent content = new WebResponseContent();
            try
            {
                WebResponseContent content = new WebResponseContent();
                try
                Dt_Packinfo packinfo = _packinfoRepository.QueryFirst(x => x.BarCode == barCode && x.PackStatus == StationOccupiedEnum.None.ObjToInt());
                if (packinfo == null)
                {
                    Dt_Packinfo packinfo = _packinfoRepository.QueryFirst(x => x.BarCode == barCode && x.PackStatus == StationOccupiedEnum.None.ObjToInt());
                    if (packinfo == null)
                    {
                        return content.Error($"未找到条码{barCode}");
                    }
                    List<Dt_StationPackInfo> stationPackInfos = _stationPackInfoRepository.QueryData();
                    Dt_StationPackInfo? stationPackInfo = stationPackInfos.FirstOrDefault(x => x.PackType == packinfo.PackType && x.OrderNo == packinfo.OrderNo && x.AssignNum < x.PackNum);
                    //如果订单相同、垛型一致并且分配数量少于码垛结托数量则分配到一起
                    if (stationPackInfo != null)
                    {
                        Dt_PackaxisTask packaxisTask = new Dt_PackaxisTask()
                        {
                            DeviceCode = deviceCode,
                            SourceAddress = "2421",
                            BarCode = barCode,
                            CurrentAddress = "2421",
                            TargetAddress = stationPackInfo.StationCode,
                            NextAddress = stationPackInfo.LineCode,
                            TaskState = TaskStatusEnum.Line_Executing.ObjToInt(),
                            PackLength = packinfo.Length,
                            PackWidth = packinfo.Width,
                            PackHeight = packinfo.Height,
                            PackType = packinfo.PackType,
                            Dispatchertime = DateTime.Now,
                        };
                        stationPackInfo.AssignNum += 1;
                        stationPackInfo.ExecutingNum += 1;
                        packinfo.PackStatus = StationOccupiedEnum.Sure.ObjToInt();
                        _unitOfWorkManage.BeginTran();
                        //更新码垛执行工位
                        _stationPackInfoRepository.UpdateData(stationPackInfo);
                        //更新待码垛信息表
                        _packinfoRepository.UpdateData(packinfo);
                        //添加码垛任务
                        BaseDal.AddData(packaxisTask);
                        _unitOfWorkManage.CommitTran();
                        return content.OK(barCode, packaxisTask);
                    }
                    else//分配新工位
                    {
                        //获取当前空盘准备的码垛工位
                        List<string> stations = _stationMangerRepository.QueryData(x => x.StationDeviceCode == "CLC_CP" && x.IsOccupied == StationOccupiedEnum.None.ObjToInt()).Select(x => x.StationCode).ToList();
                        //获取码垛配置表查询可分配并已配置的码垛工位
                        List<Dt_Packaxis> packaxes = _packaxisRepository.QueryData(x => x.PackType == packinfo.PackType && stations.Contains(x.StationCode));
                        if (packaxes.Count == 0)
                        {
                            return content.Error("未找到可分配码垛配置");
                        }
                        List<string> packStations = packaxes.Select(x => x.StationCode).ToList();
                        Dt_StationPackInfo? packInfoAssign = stationPackInfos.Where(x => x.PackType == 0 && x.AssignNum == 0 && packStations.Contains(x.StationCode)).OrderBy(x => x.OrderIndex).FirstOrDefault();
                        if (packInfoAssign == null)
                        {
                            return content.Error("未找到可分配垛位");
                        }
                        packInfoAssign.PackType = packinfo.PackType;
                        packInfoAssign.OrderNo = packinfo.OrderNo;
                        packInfoAssign.MakeCode = packinfo.MakeCode;
                        packInfoAssign.MaterielCode = packInfoAssign.MaterielCode;
                        packInfoAssign.PackNum = packaxes.FirstOrDefault(x => x.StationCode == packInfoAssign.StationCode).PackNum;
                        Dt_PackaxisTask packaxisTask = new Dt_PackaxisTask()
                        {
                            DeviceCode = deviceCode,
                            SourceAddress = "2421",
                            BarCode = barCode,
                            CurrentAddress = "2421",
                            TargetAddress = packInfoAssign.StationCode,
                            NextAddress = packInfoAssign.LineCode,
                            TaskState = TaskStatusEnum.Line_Executing.ObjToInt(),
                            PackLength = packinfo.Length,
                            PackWidth = packinfo.Width,
                            PackHeight = packinfo.Height,
                            PackType = packinfo.PackType,
                            Dispatchertime = DateTime.Now,
                        };
                        packInfoAssign.AssignNum += 1;
                        packInfoAssign.ExecutingNum += 1;
                        packinfo.PackStatus = StationOccupiedEnum.Sure.ObjToInt();
                        _unitOfWorkManage.BeginTran();
                        //更新码垛执行工位
                        _stationPackInfoRepository.UpdateData(packInfoAssign);
                        //更新待码垛信息表
                        _packinfoRepository.UpdateData(packinfo);
                        //添加码垛任务
                        BaseDal.AddData(packaxisTask);
                        _unitOfWorkManage.CommitTran();
                        return content.OK(barCode, packaxisTask);
                    }
                    return content.Error($"未找到条码{barCode}");
                }
                catch (Exception ex)
                List<Dt_StationPackInfo> stationPackInfos = _stationPackInfoRepository.Db.Queryable<Dt_StationPackInfo>().ToList();
                Dt_StationPackInfo? stationPackInfo = stationPackInfos.FirstOrDefault(x => x.PackType == packinfo.PackType && x.OrderNo == packinfo.OrderNo && x.AssignNum < x.PackNum);
                Dt_PackaxisTask packaxisTask = new Dt_PackaxisTask();
                //如果订单相同、垛型一致并且分配数量少于码垛结托数量则分配到一起
                if (stationPackInfo != null)
                {
                    _unitOfWorkManage.RollbackTran();
                    content.Error(ex.Message);
                    packaxisTask = new Dt_PackaxisTask()
                    {
                        DeviceCode = deviceCode,
                        SourceAddress = "2421",
                        BarCode = barCode,
                        CurrentAddress = "2421",
                        TargetAddress = stationPackInfo.StationCode,
                        NextAddress = stationPackInfo.LineCode,
                        TaskState = TaskStatusEnum.Line_Executing.ObjToInt(),
                        PackLength = packinfo.Length,
                        PackWidth = packinfo.Width,
                        PackHeight = packinfo.Height,
                        PackType = packinfo.PackType,
                        Dispatchertime = DateTime.Now,
                    };
                    stationPackInfo.AssignNum += 1;
                    stationPackInfo.ExecutingNum += 1;
                    packinfo.PackStatus = StationOccupiedEnum.Sure.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    //更新码垛执行工位
                    _stationPackInfoRepository.UpdateData(stationPackInfo);
                    //更新待码垛信息表
                    _packinfoRepository.UpdateData(packinfo);
                    //添加码垛任务
                    BaseDal.AddData(packaxisTask);
                    _unitOfWorkManage.CommitTran();
                }
                return content;
                else//分配新工位
                {
                    //获取当前空盘准备的码垛工位
                    List<string> stations = _stationMangerRepository.QueryData(x => x.StationDeviceCode == "CLC_CP" && x.IsOccupied == StationOccupiedEnum.None.ObjToInt()).Select(x => x.StationCode).ToList();
                    //获取码垛配置表查询可分配并已配置的码垛工位
                    List<Dt_Packaxis> packaxes = _packaxisRepository.Db.Queryable<Dt_Packaxis>().Where(x => x.PackType == packinfo.PackType && stations.Contains(x.StationCode)).ToList();
                    if (packaxes.Count == 0)
                    {
                        return content.Error("未找到可分配码垛配置");
                    }
                    List<string> packStations = packaxes.Select(x => x.StationCode).ToList();
                    Dt_StationPackInfo? packInfoAssign = stationPackInfos.Where(x => x.PackType == 0 && x.AssignNum == 0 && packStations.Contains(x.StationCode)).OrderBy(x => x.OrderIndex).FirstOrDefault();
                    if (packInfoAssign == null)
                    {
                        return content.Error("未找到可分配垛位");
                    }
                    Dt_Packaxis packaxis = packaxes.FirstOrDefault(x => x.StationCode == packInfoAssign.StationCode);
                    packInfoAssign.PackType = packinfo.PackType;
                    packInfoAssign.OrderNo = packinfo.OrderNo;
                    packInfoAssign.MakeCode = packinfo.MakeCode;
                    packInfoAssign.MaterielCode = packInfoAssign.MaterielCode;
                    packInfoAssign.PackNum = packaxis.PackNum;
                    //计算码垛完的高度
                    packInfoAssign.HeightNum = packaxis.AxisZCount * packaxis.AxisZSpacing + 200;
                    packaxisTask = new Dt_PackaxisTask()
                    {
                        DeviceCode = deviceCode,
                        SourceAddress = "2421",
                        BarCode = barCode,
                        CurrentAddress = "2421",
                        TargetAddress = packInfoAssign.StationCode,
                        NextAddress = packInfoAssign.LineCode,
                        TaskState = TaskStatusEnum.Line_Executing.ObjToInt(),
                        PackLength = packinfo.Length,
                        PackWidth = packinfo.Width,
                        PackHeight = packinfo.Height,
                        PackType = packinfo.PackType,
                        Dispatchertime = DateTime.Now,
                    };
                    packInfoAssign.AssignNum += 1;
                    packInfoAssign.ExecutingNum += 1;
                    packinfo.PackStatus = StationOccupiedEnum.Sure.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    //更新码垛执行工位
                    _stationPackInfoRepository.UpdateData(packInfoAssign);
                    //更新待码垛信息表
                    _packinfoRepository.UpdateData(packinfo);
                    //添加码垛任务
                    BaseDal.AddData(packaxisTask);
                    _unitOfWorkManage.CommitTran();
                }
                return content.OK(barCode, packaxisTask);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// ç åž›ç»“托并上传码垛工位码垛明细数据
@@ -161,18 +161,23 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_StationPackInfo stationPackInfo = _stationPackInfoRepository.QueryFirst(x => x.StationCode == stationCode);
                Dt_StationPackInfo stationPackInfo = _stationPackInfoRepository.Db.Queryable<Dt_StationPackInfo>().Where(x => x.StationCode == stationCode).Includes(x=>x.stationPackDetails).First();
                if (stationPackInfo.OverNum != stationPackInfo.AssignNum)
                {
                    throw new Exception($"分配数量{stationPackInfo.AssignNum},完成数量{stationPackInfo.OverNum}数量不符");
                }
                List<Dt_StationPackDetail> stationPackDetails = _stationPackDetailRepository.QueryData(x => x.StationPackId == stationPackInfo.id);
                List<Dt_StationPackDetail> stationPackDetails = stationPackInfo.stationPackDetails;
                if (stationPackDetails.Count <= 0)
                {
                    throw new Exception($"{stationCode}未找到码垛明细");
                }
                List<string> barCodes = stationPackDetails.Select(x => x.BoxCode).ToList();
                List<Dt_Packinfo> packinfos = _packinfoRepository.QueryData(x => barCodes.Contains(x.BarCode)).ToList();
                List<Dt_Packinfo> packinfos = _packinfoRepository.QueryData(x => barCodes.Contains(x.BarCode) && x.PackStatus== StationOccupiedEnum.Sure.ObjToInt()).ToList();
                if (packinfos.Count != barCodes.Count)
                {
                    throw new Exception($"码垛信息与实际不符,码垛信息数量{packinfos.Count},实际数量{barCodes.Count}");
                }
                int heightNum = stationPackInfo.HeightNum;
                stationPackInfo.PackType = 0;
                stationPackInfo.OrderNo = "";
                stationPackInfo.MakeCode = "";
@@ -181,18 +186,19 @@
                stationPackInfo.OverNum = 0;
                stationPackInfo.AssignNum = 0;
                stationPackInfo.ExecutingNum = 0;
                stationPackInfo.HeightNum = 0;
                _unitOfWorkManage.BeginTran();
                _stationPackInfoRepository.UpdateData(stationPackInfo);
                _stationPackDetailRepository.DeleteData(stationPackDetails);
                _packinfoRepository.DeleteAndMoveIntoHty(packinfos, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                //同步到WMS
                string address = AppSettings.Get("WMSApiAddress");
                string response = HttpHelper.Post($"{address}/api/Task/BoxingInBound?stationCode=" + stationCode, barCodes.Serialize());
                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(response) ?? throw new Exception($"未收到返回结果");
                if (!responseContent.Status)
                {
                    throw new Exception(responseContent.Message);
                }
                //string address = AppSettings.Get("WMSApiAddress");
                //string response = HttpHelper.Post($"{address}/api/Task/BoxingInBound?stationCode={stationCode}&heightNum={heightNum}", barCodes.Serialize());
                //WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(response) ?? throw new Exception($"未收到返回结果");
                //if (!responseContent.Status)
                //{
                //    throw new Exception(responseContent.Message);
                //}
                _unitOfWorkManage.CommitTran();
                content.OK();
            }
@@ -203,6 +209,7 @@
            }
            return content;
        }
        private readonly static object lockerCompleted = new object();
        /// <summary>
        /// ç åž›ä»»åŠ¡å®Œæˆ
        /// </summary>
@@ -211,45 +218,47 @@
        /// <returns></returns>
        public WebResponseContent TaskCompleted(int taskNum=0,Dt_PackaxisTask? packaxisTask=null)
        {
            try
            lock (lockerCompleted)
            {
                Dt_PackaxisTask? packaxisTaskFinish = null;
                if (packaxisTask!=null)
                try
                {
                    packaxisTaskFinish= packaxisTask;
                }
                else
                {
                    packaxisTaskFinish = BaseDal.QueryFirst(x => x.PackTaskNum == taskNum);
                    packaxisTaskFinish.TaskState = TaskStatusEnum.Finish.ObjToInt();
                }
                if (packaxisTaskFinish != null)
                {
                    Dt_StationPackInfo stationPackInfo = _stationPackInfoRepository.QueryFirst(x => x.StationCode == packaxisTaskFinish.TargetAddress);
                    stationPackInfo.ExecutingNum -= 1;
                    stationPackInfo.OverNum += 1;
                    Dt_StationPackDetail stationPackDetail = new Dt_StationPackDetail()
                    Dt_PackaxisTask? packaxisTaskFinish = null;
                    if (packaxisTask != null)
                    {
                        StationPackId = stationPackInfo.id,
                        BoxCode = packaxisTaskFinish.BarCode
                    };
                    _unitOfWorkManage.BeginTran();
                    _stationPackInfoRepository.UpdateData(stationPackInfo);
                    _stationPackDetailRepository.AddData(stationPackDetail);
                    BaseDal.DeleteAndMoveIntoHty(packaxisTaskFinish, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _unitOfWorkManage.CommitTran();
                        packaxisTaskFinish = packaxisTask;
                    }
                    else
                    {
                        packaxisTaskFinish = BaseDal.QueryFirst(x => x.PackTaskNum == taskNum);
                    }
                    if (packaxisTaskFinish != null)
                    {
                        Dt_StationPackInfo stationPackInfo = _stationPackInfoRepository.QueryFirst(x => x.StationCode == packaxisTaskFinish.TargetAddress);
                        stationPackInfo.ExecutingNum -= 1;
                        stationPackInfo.OverNum += 1;
                        Dt_StationPackDetail stationPackDetail = new Dt_StationPackDetail()
                        {
                            StationPackId = stationPackInfo.Id,
                            BoxCode = packaxisTaskFinish.BarCode
                        };
                        packaxisTaskFinish.TaskState = TaskStatusEnum.Finish.ObjToInt();
                        _unitOfWorkManage.BeginTran();
                        _stationPackInfoRepository.UpdateData(stationPackInfo);
                        _stationPackDetailRepository.AddData(stationPackDetail);
                        BaseDal.DeleteAndMoveIntoHty(packaxisTaskFinish, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                        _unitOfWorkManage.CommitTran();
                    }
                    else
                    {
                        return WebResponseContent.Instance.Error("未找到任务");
                    }
                    return WebResponseContent.Instance.OK();
                }
                else
                catch (Exception ex)
                {
                    return WebResponseContent.Instance.Error("未找到任务");
                    _unitOfWorkManage.RollbackTran();
                    return WebResponseContent.Instance.Error(ex.Message);
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
@@ -263,7 +272,6 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                    Dt_PackaxisTask packaxisTask = BaseDal.QueryFirst(x => x.PackTaskNum == PackTaskNum);
                    if(packaxisTask == null)
                    {