1
hutongqing
2024-12-23 f723c6e9087a2110a28572543c7cfd9104e2a4ed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OtherEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Task;
using WIDESEA_Model.Models;
 
namespace WIDESEA_TaskInfoService
{
    public partial class TaskService
    {
        public WebResponseContent IsRelocation(int taskNum, string locationCode)
        {
            try
            {
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到对应的货位信息");
                }
                Dt_Task task = Repository.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return WebResponseContent.Instance.Error($"未找到任务信息");
                }
 
                if (!_basicService.LocationInfoService.LittleDepthLocationIsEmpty(locationInfo, (PalletTypeEnum)task.PalletType))
                {
                    return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(task));
                }
                else
                {
                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
                    if (stockInfo == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到对应货位的库存信息");
                    }
 
                    Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(task.Roadway, (PalletTypeEnum)task.PalletType, task.WarehouseId);
                    if (newLocation != null)
                    {
                        Dt_Task newTask = new Dt_Task()
                        {
                            Roadway = task.Roadway,
                            WarehouseId = task.WarehouseId,
                            CurrentAddress = locationCode,
                            Grade = 99,
                            NextAddress = newLocation.LocationCode,
                            OrderNo = "",
                            PalletCode = stockInfo.PalletCode,
                            PalletType = stockInfo.PalletType,
                            SourceAddress = locationCode,
                            TargetAddress = newLocation.LocationCode,
                            TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                            TaskStatus = 0,
                            TaskType = 0
                        };
 
                        _unitOfWorkManage.BeginTran();
                        Repository.AddData(newTask);
                        {
                            LocationStatusEnum lastStatus = (LocationStatusEnum)newLocation.LocationStatus;
                            newLocation.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
                            _basicService.LocationInfoService.UpdateLocationStatus(newLocation, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                        }
                        {
                            LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                            locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
                            _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                        }
                        stockInfo.StockStatus = StockStatusEmun.移库锁定.ObjToInt();
                        _stockRepository.StockInfoRepository.UpdateData(stockInfo);
 
                        _unitOfWorkManage.RollbackTran();
 
                        return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(newTask));
                    }
                    else
                    {
                        return WebResponseContent.Instance.Error($"未找到可分配货位,请查看该巷道【{task.Roadway}】是否还有空闲可使用货位");
                    }
                }
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}