Tiandele
2026-03-20 daea1a90c2fa1b5cc2f52e62be15bd95cc4155f6
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -44,13 +44,23 @@
            }
            var carBody = _carBodyRepository.QueryFirst(x => x.PalletCode == input.PalletCode);
            if (carBody != null) throw new Exception($"空撬{input.PalletCode}信息已存在");
            BDCManager bDCManager = new BDCManager(_bdcConfigurationService, _locationRepository, _roadWayInfoRepository);
            Dt_CarBodyInfo dt_CarBodyInfo = new Dt_CarBodyInfo
            {
                PalletCode = input.PalletCode,
                CarType = 3,
                PVI = input.PalletCode,
                RFID = input.PalletCode,
                BodyStatus = 0
            };
            await bDCManager.AddToBDC(carBody);
            //BDCManager bDCManager = new BDCManager(_bdcConfigurationService, _locationRepository, _roadWayInfoRepository);
            //await bDCManager.AddToBDC(carBody);
            // èŽ·å–åº“ä½
            var location = RequestLocation(stationInfo.Roadway);
            var location = RequestLocation(stationInfo.RoadwayNo, 3);
            if (location == null)
            {
                return content.Error("无法获取货位信息或库位已满");
@@ -62,21 +72,22 @@
                Grade = 1,
                Roadway = stationInfo.Roadway,
                TargetAddress = location.LocationCode,
                Dispatchertime = DateTime.Now,
                NextAddress = stationInfo.Roadway,
                //Dispatchertime = DateTime.Now,
                NextAddress = input.Position,
                OrderNo = null,
                PalletCode = input.PalletCode,
                SourceAddress = stationInfo.stationLocation,
                TaskState = (int)TaskInStatusEnum.InNew,
                TaskType = (int)TaskInboundTypeEnum.Inbound,
                TaskType = (int)TaskInboundTypeEnum.InTray,
                TaskNum = await BaseDal.GetTaskNo(),
                Creater = "Systeam",
                PVI = input.PVI,
            };
            _unitOfWorkManage.BeginTran();
            BaseDal.AddData(newtask);
            _carBodyRepository.AddData(dt_CarBodyInfo);
            location.LocationStatus = (int)LocationEnum.InStockDisable;
            _locationRepository.UpdateData(location);
            _unitOfWorkManage.CommitTran();
@@ -96,24 +107,36 @@
    #endregion è¯·æ±‚任务入库
    #region åº“位分配
    #region èŽ·å–è´§ä½
    object objLOCK = new object();
    /// <summary>
    /// åŒå‡åº“位分配
    /// åº“位分配
    /// </summary>
    /// <param name="requestTask"></param>
    /// <param name="locationInfos"></param>
    /// <returns></returns>
    public DtLocationInfo RequestLocation(string roadwayNo)
    public DtLocationInfo RequestLocation(string roadwayNo, int carType)
    {
        lock (objLOCK)
        {
            try
            {
                List<DtLocationInfo> locations = new List<DtLocationInfo>();
                locations = _locationRepository.QueryData(x => x.RoadwayNo == roadwayNo && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1);   //&& x.LocationType == 1
                if (carType == 1)
                {
                    locations = _locationRepository.QueryData(x => x.RoadwayNo == roadwayNo && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && (x.LocationType == 1 || x.LocationType == 3));   //&& x.LocationType == 1
                }
                else if (carType == 2)
                {
                    locations = _locationRepository.QueryData(x => x.RoadwayNo == roadwayNo && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && (x.LocationType == 2 || x.LocationType == 3));   //&& x.LocationType == 1
                }
                else if (carType == 3)
                {
                    locations = _locationRepository.QueryData(x => x.RoadwayNo == roadwayNo && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.LocationType == 3);   //&& x.LocationType == 1
                }
                var location = GetEmptyLocation(locations);
                var location = GetEmptyLocation(locations, carType);
                if (location == null)
                {
                    throw new Exception("库位已满");
@@ -129,9 +152,22 @@
    }
    private DtLocationInfo GetEmptyLocation(List<DtLocationInfo> dtLocationInfos)
    private DtLocationInfo GetEmptyLocation(List<DtLocationInfo> dtLocationInfos, int carType)
    {
        var locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Column).ThenBy(x => x.Row).ThenBy(x => x.Layer).FirstOrDefault();   //.ThenByDescending(x => x.Depth)
        DtLocationInfo locationinfo = new DtLocationInfo();
        if (carType == 1 || carType == 3)
        {
            locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
        }
        else if (carType == 2)
        {
            locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Layer).ThenByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
        }
        //else if (carType == 3)
        //{
        //    locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Column).ThenBy(x => x.Row).ThenBy(x => x.Layer).FirstOrDefault();
        //}
        return locationinfo;
    }
@@ -139,31 +175,6 @@
    #endregion èŽ·å–è´§ä½
    #endregion åº“位分配
    public WebResponseContent confirmTask(int taskNum)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var taskInfo = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
            if (taskInfo == null) throw new Exception("未知任务");
            if (taskInfo.TaskState != (int)TaskOutStatusEnum.OutFinish) throw new Exception("当前任务未完成,禁止确认");
            var taskHty = taskInfo.Adapt<Dt_Task_Hty>();
            taskHty.FinishTime = DateTime.Now;
            taskHty.OperateType = (int)OperateTypeEnum.人工确认;
            BaseDal.DeleteData(taskInfo);
            _task_HtyRepository.AddData(taskHty);
            content.OK("确认完成");
        }
        catch (Exception ex)
        {
            content.Error($"确认异常:{ex.Message}");
        }
        return content;
    }
    //public WebResponseContent
}