renmingwang
2026-03-30 675f3f475a61dd0ad8ffb76e183baa9b78f14f45
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 命名空间:WIDESEAWCS_TaskInfoService
 * 创建者:系统自动生成
 * 创建时间:2024/11/14
 * 版本:V1.0.0
 * 描述:任务历史服务实现
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 修改时间:
 * 版本:V1.0.1
 * 修改说明:
 * 
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
 
using AutoMapper;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using SqlSugar;
using System.Linq;
 
namespace WIDESEAWCS_TaskInfoService
{
    /// <summary>
    /// 任务历史服务实现
    /// </summary>
    public class TaskHtyService : ServiceBase<Dt_Task_Hty, IRepository<Dt_Task_Hty>>, ITaskHtyService
    {
        private readonly IMapper _mapper;
 
        public TaskHtyService(IRepository<Dt_Task_Hty> repository, IMapper mapper) : base(repository)
        {
            _mapper = mapper;
        }
 
        /// <summary>
        /// 添加任务历史记录
        /// </summary>
        /// <param name="task">原任务对象</param>
        /// <param name="operateType">操作类型</param>
        /// <returns>是否添加成功</returns>
        public bool AddTaskHistory(Dt_Task task, string operateType = "自动完成")
        {
            try
            {
                if (task == null)
                {
                    return false;
                }
 
                var task_hty = new Dt_Task_Hty
                {
                    // 主键TaskId在历史表中是自增的,所以不需要赋值
                    TaskNum = task.TaskNum,
                    PalletCode = task.PalletCode,
                    PalletType = task.PalletType,
                    DeviceCode = task.Roadway,
                    Roadway = task.Roadway,
                    TaskType = task.TaskType,
                    TaskState = task.TaskState,
                    SourceAddress = task.SourceAddress,
                    TargetAddress = task.TargetAddress,
                    CurrentAddress = task.CurrentAddress,
                    NextAddress = task.NextAddress,
                    ExceptionMessage = task.ExceptionMessage,
                    Grade = task.Grade,
                    WMSId = task.WMSId,
                    Dispatchertime = task.Dispatchertime,
                    Remark = task.Remark,
                    Depth = task.Depth,
 
                    // 源记录ID设置为原任务的TaskId
                    SourceId = task.TaskId,
 
                    // 操作类型使用传入的参数
                    OperateType = operateType,
 
                    // 基础实体字段(如果有的话)
                    CreateDate = DateTime.Now,
                    Creater = task.Creater,
 
                };
 
                // 插入历史记录
                int result = BaseDal.AddData(task_hty);
                return result > 0;
            }
            catch (Exception ex)
            {
                // 记录异常日志
                //Console.WriteLine($"添加任务历史记录失败: {ex.Message}");
                return false;
            }
        }
 
        /// <summary>
        /// 根据原任务ID查询历史记录
        /// </summary>
        /// <param name="sourceId">原任务ID</param>
        /// <returns>历史记录列表</returns>
        public List<Dt_Task_Hty> GetHistoryBySourceId(int sourceId)
        {
            return BaseDal.QueryData(x => x.SourceId == sourceId).OrderByDescending(x => x.CreateDate).ToList();
        }
 
        /// <summary>
        /// 根据任务号查询历史记录
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns>历史记录列表</returns>
        public List<Dt_Task_Hty> GetHistoryByTaskNum(int taskNum)
        {
            return BaseDal.QueryData(x => x.TaskNum == taskNum).OrderByDescending(x => x.CreateDate).ToList();
        }
 
        /// <summary>
        /// 删除指定日期之前的历史任务数据
        /// </summary>
        /// <param name="keepMonths">保留的月数,默认为3个月(本月+后两个月)</param>
        /// <returns>删除的记录数</returns>
        public int DeleteOldTaskHistory(int keepMonths = 3)
        {
            try
            {
                // 计算保留日期:当前日期减去keepMonths个月
                DateTime keepDate = DateTime.Now.AddMonths(-keepMonths);
                
                // 先查询出要删除的数据
                List<Dt_Task_Hty> tasksToDelete = BaseDal.QueryData().Where(x => x.CreateDate < keepDate).ToList();
                
                // 如果没有要删除的数据,直接返回0
                if (tasksToDelete.Count == 0)
                {
                    return 0;
                }
                
                // 删除查询出的历史记录
                bool result = BaseDal.DeleteData(tasksToDelete);
                return result ? tasksToDelete.Count : 0;
            }
            catch (Exception ex)
            {
                // 记录异常日志
                //Console.WriteLine($"删除历史任务记录失败: {ex.Message}");
                return 0;
            }
        }
 
        /// <summary>
        /// 定时任务调用的历史任务删除方法
        /// </summary>
        public void Task_Hty_Job()
        {
            // 删除3个月之前的历史任务数据,保留本月和后两个月的数据
            DeleteOldTaskHistory(3);
        }
    }
}