cnf
2025-09-13 528d0370cb57f07e291fbf8fb0052718c3fe584c
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
using System.Dynamic;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using MES.Service.service;
using MES.Service.service.BasicData; // 假设DeliveryBarcodeManager在该命名空间下,可根据实际调整
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
 
namespace MESApplication.Controllers.BasicData;
 
/// <summary>
/// 送货单条码控制器(对应携客云条码信息表操作)
/// </summary>
[ApiController]
[Route("api/[controller]")]
public class DeliveryBarcodeController : ControllerBase
{
    // 消息中心管理器(复用原逻辑)
    private readonly MessageCenterManager _messageCenterManager = new();
 
    // 送货单条码业务逻辑管理器(对应业务层,需确保实际项目中存在该类)
    private readonly DeliveryBarcodeManager _deliveryBarcodeManager = new();
 
    // 接口请求方法(固定POST,与原控制器一致)
    private readonly string REQUEST_METHOD = "POST";
 
    // 对应数据库表名(携客云条码信息表,与之前定义的实体类表名一致)
    private readonly string TARGET_TABLE = "TBL_BARCODE_INFORMATION";
 
    // 基础接口URL(根据控制器名定义,保持REST风格)
    private readonly string BASE_API_URL = "http://localhost:10054/api/DeliveryBarcode/";
 
    /// <summary>
    /// 单个送货单条码信息保存接口
    /// </summary>
    /// <param name="barcodeInfo">送货单条码DTO(单个)</param>
    /// <returns>统一响应结果</returns>
    [HttpPost("Save")]
    public ResponseResult Save(DeliveryBarcodeInfo barcodeInfo)
    {
        // 1. 初始化消息中心实体(用于日志/消息记录)
        var messageEntity = new MessageCenter
        {
            TableName = TARGET_TABLE,
            Url = BASE_API_URL + "Save", // 拼接完整接口URL
            Method = REQUEST_METHOD,
            Data = JsonConvert.SerializeObject(barcodeInfo), // 序列化DTO为JSON
            Status = 1, // 状态标识(1=待处理/处理中,与原逻辑一致)
            CreateBy = "PL017", // 创建人(复用原配置,可根据实际调整为动态获取)
            Route = barcodeInfo.DeliveryNo ?? "未知送货单号", // 路由标识(用送货单号区分,无则填默认值)
            DealWith = 0 // 初始处理状态(0=未处理)
        };
 
        try
        {
            // 2. 业务逻辑处理:调用业务层保存单个条码信息
            dynamic resultData = new ExpandoObject();
            bool saveSuccess = _deliveryBarcodeManager.Save(barcodeInfo);
            resultData.tbBillList = saveSuccess; // 存储保存结果(与原返回格式一致)
 
            // 3. 更新消息中心实体状态
            messageEntity.Result = saveSuccess ? 1 : 0; // 1=成功,0=失败
            messageEntity.DealWith = 1; // 1=已处理
            _messageCenterManager.save(messageEntity); // 保存消息记录
 
            // 4. 返回成功响应(统一响应格式)
            return new ResponseResult
            {
                status = 0, // 0=成功状态码(与原逻辑一致)
                message = "单个送货单条码信息保存成功",
                data = resultData
            };
        }
        catch (Exception ex)
        {
            // 5. 异常处理:捕获异常并更新消息中心
            messageEntity.Result = 0; // 失败标识
            messageEntity.DealWith = 0; // 未处理标识
            messageEntity.ResultData = ex.Message; // 异常信息记录
            _messageCenterManager.save(messageEntity); // 保存异常消息
 
            // 6. 返回异常响应(复用工具类的统一异常响应方法)
            return ResponseResult.ResponseError(ex);
        }
    }
 
    /// <summary>
    /// 批量送货单条码信息保存接口
    /// </summary>
    /// <param name="barcodeInfoList">送货单条码DTO列表(批量)</param>
    /// <returns>统一响应结果</returns>
    [HttpPost("SaveList")]
    public ResponseResult SaveList(List<DeliveryBarcodeInfo> barcodeInfoList)
    {
        // 1. 初始化消息中心实体(批量场景专用)
        var messageEntity = new MessageCenter
        {
            TableName = TARGET_TABLE,
            Url = BASE_API_URL + "SaveList", // 拼接批量接口URL
            Method = REQUEST_METHOD,
            Data = JsonConvert.SerializeObject(barcodeInfoList), // 序列化DTO列表为JSON
            Status = 1,
            CreateBy = "PL017",
            Route = barcodeInfoList.Any() ? $"批量_{barcodeInfoList.First().DeliveryNo ?? "未知"}" : "空批量请求",
            DealWith = 0
        };
 
        try
        {
            // 2. 业务逻辑处理:调用业务层批量保存
            dynamic resultData = new ExpandoObject();
            bool batchSaveSuccess = _deliveryBarcodeManager.SaveList(barcodeInfoList);
            resultData.tbBillList = batchSaveSuccess; // 保持与单个保存一致的返回字段
 
            // 3. 更新消息中心状态
            messageEntity.Result = batchSaveSuccess ? 1 : 0;
            messageEntity.DealWith = 1;
            _messageCenterManager.save(messageEntity);
 
            // 4. 返回成功响应
            return new ResponseResult
            {
                status = 0,
                message = $"批量保存成功,共处理{barcodeInfoList.Count}条条码信息",
                data = resultData
            };
        }
        catch (Exception ex)
        {
            // 5. 异常处理:记录异常并返回错误
            messageEntity.Result = 0;
            messageEntity.DealWith = 0;
            messageEntity.ResultData = $"批量保存异常:{ex.Message}";
            _messageCenterManager.save(messageEntity);
 
            return ResponseResult.ResponseError(ex);
        }
    }
 
    /// <summary>
    /// 根据送货单号删除条码数据
    /// </summary>
    /// <param name="request">包含送货单号的请求模型</param>
    /// <returns>统一响应结果</returns>
    [HttpPost("DeleteByNo")] // 若项目支持 RESTful,可改为 [HttpDelete("DeleteByNo")]
    public ResponseResult DeleteByNo([FromBody] DeleteByDeliveryNoRequest request)
    {
        // 1. 初始化消息中心实体(记录删除操作日志)
        var messageEntity = new MessageCenter
        {
            TableName = TARGET_TABLE,
            Url = BASE_API_URL + "DeleteByNo", // 接口URL
            Method = REQUEST_METHOD,
            Data = JsonConvert.SerializeObject(request), // 序列化请求参数
            Status = 1, // 1=处理中
            CreateBy = "PL017", // 与原有接口一致的创建人
            Route = request.DeliveryNo, // 路由标识=送货单号,便于定位日志
            DealWith = 0 // 初始=未处理
        };
 
        try
        {
            // 2. 调用业务层方法执行删除
            dynamic resultData = new ExpandoObject();
            bool deleteSuccess = _deliveryBarcodeManager.DeleteByDeliveryNo(request.DeliveryNo);
            resultData.deletedDeliveryNo = request.DeliveryNo; // 返回删除的送货单号
            resultData.isSuccess = deleteSuccess;
 
            // 3. 更新消息中心状态(成功)
            messageEntity.Result = 1; // 1=成功
            messageEntity.DealWith = 1; // 1=已处理
            _messageCenterManager.save(messageEntity);
 
            // 4. 返回成功响应
            return new ResponseResult
            {
                status = 0,
                message = $"成功删除送货单号「{request.DeliveryNo}」对应的条码数据",
                data = resultData
            };
        }
        catch (Exception ex)
        {
            // 5. 异常处理:更新消息中心日志(失败)
            messageEntity.Result = 0; // 0=失败
            messageEntity.DealWith = 0; // 0=未处理
            messageEntity.ResultData = ex.Message; // 记录异常信息
            _messageCenterManager.save(messageEntity);
 
            // 6. 返回统一异常响应
            return ResponseResult.ResponseError(ex);
        }
    }
    
    /// <summary>
    /// 批量根据送货单号删除条码数据
    /// </summary>
    /// <param name="request">包含批量送货单号的请求模型(数组格式)</param>
    /// <returns>统一响应结果</returns>
    [HttpPost("DeleteListByNo")]
    public ResponseResult DeleteListByNo([FromBody] BatchDeleteByDeliveryNoRequest request)
    {
        // 1. 初始化消息中心实体
        var messageEntity = new MessageCenter
        {
            TableName = TARGET_TABLE,
            Url = BASE_API_URL + "DeleteListByNo",
            Method = REQUEST_METHOD,
            Data = JsonConvert.SerializeObject(request),
            Status = 1, // 处理中
            CreateBy = "PL017",
            // 路由标识:显示前3个单号
            Route =
                $"Batch_{string.Join(",", request.Take(3).Select(item => item.DeliveryNo))}{(request.Count > 3 ? "..." : "")}",
            DealWith = 0 // 未处理
        };
 
        try
        {
            // 2. 直接调用业务层(不再在控制器处理列表,逻辑移至业务层)
            dynamic resultData = new ExpandoObject();
            BatchDeleteResult deleteResult = _deliveryBarcodeManager.DeleteListByDeliveryNo(request);
 
            // 3. 组装返回数据
            resultData.totalRequested = deleteResult.TotalRequested;
            resultData.totalDeleted = deleteResult.TotalDeleted;
            resultData.deletedNos = deleteResult.DeletedNos;
            resultData.notFoundNos = deleteResult.NotFoundNos;
            resultData.isSuccess = deleteResult.TotalDeleted > 0;
 
            // 4. 更新消息中心状态(成功)
            messageEntity.Result = 1;
            messageEntity.DealWith = 1;
            messageEntity.ResultData = $"批量删除完成,共处理{deleteResult.TotalRequested}个单号";
            _messageCenterManager.save(messageEntity);
 
            // 5. 返回成功响应
            return new ResponseResult
            {
                status = 0,
                message = $"成功删除{deleteResult.DeletedNos.Count}个送货单号对应的条码数据,共{deleteResult.TotalDeleted}条记录",
                data = resultData
            };
        }
        catch (Exception ex)
        {
            // 6. 异常处理
            messageEntity.Result = 0;
            messageEntity.DealWith = 0;
            messageEntity.ResultData = ex.Message;
            _messageCenterManager.save(messageEntity);
 
            return ResponseResult.ResponseError(ex);
        }
    }
 
    /// <summary>
    /// 按送货单号+行内码联合删除条码数据
    /// </summary>
    /// <param name="request">包含送货单号和行内码的请求模型</param>
    /// <returns>统一响应结果</returns>
    [HttpPost("DeleteByItem")] // 若用 RESTful 规范,可改为 [HttpDelete("DeleteByItem")]
    public ResponseResult DeleteByItem([FromBody] DeleteByDeliveryItemRequest request)
    {
        // 1. 初始化消息中心实体:记录删除操作日志
        var messageEntity = new MessageCenter
        {
            TableName = TARGET_TABLE,
            Url = BASE_API_URL + "DeleteByItem", // 接口URL
            Method = REQUEST_METHOD,
            Data = JsonConvert.SerializeObject(request), // 序列化请求参数(含双条件)
            Status = 1, // 1=处理中
            CreateBy = "PL017", // 与原有接口一致的创建人
            Route = $"{request.DeliveryNo}_{request.LineNo}", // 路由标识=“单号_行内码”,便于日志定位
            DealWith = 0 // 初始=未处理
        };
 
        try
        {
            // 2. 调用业务层联合删除方法
            dynamic resultData = new ExpandoObject();
            bool deleteSuccess = _deliveryBarcodeManager.DeleteByDeliveryItem(
                request.DeliveryNo,
                request.LineNo
            );
            // 响应中返回关键条件,便于前端确认删除范围
            resultData.deletedDeliveryNo = request.DeliveryNo;
            resultData.deletedLineNo = request.LineNo;
            resultData.isSuccess = deleteSuccess;
 
            // 3. 更新消息中心状态(成功)
            messageEntity.Result = 1; // 1=成功
            messageEntity.DealWith = 1; // 1=已处理
            _messageCenterManager.save(messageEntity);
 
            // 4. 返回成功响应
            return new ResponseResult
            {
                status = 0,
                message = $"成功删除送货单号「{request.DeliveryNo}」-行内码「{request.LineNo}」对应的条码数据",
                data = resultData
            };
        }
        catch (Exception ex)
        {
            // 5. 异常处理:记录消息中心日志(失败)
            messageEntity.Result = 0; // 0=失败
            messageEntity.DealWith = 0; // 0=未处理
            messageEntity.ResultData = ex.Message; // 存储异常信息
            _messageCenterManager.save(messageEntity);
 
            // 6. 返回统一异常响应
            return ResponseResult.ResponseError(ex);
        }
    }
 
    /// <summary>
    /// 批量按送货单号+行内码删除条码数据
    /// </summary>
    /// <param name="request">包含批量送货单行的请求模型(数组格式)</param>
    /// <returns>统一响应结果</returns>
    [HttpPost("DeleteListByItem")]
    public ResponseResult DeleteListByItem([FromBody] BatchDeleteByDeliveryItemRequest request)
    {
        // 1. 初始化消息中心实体
        var messageEntity = new MessageCenter
        {
            TableName = TARGET_TABLE,
            Url = BASE_API_URL + "DeleteListByItem",
            Method = REQUEST_METHOD,
            Data = JsonConvert.SerializeObject(request),
            Status = 1, // 处理中
            CreateBy = "PL017",
            // 路由标识:显示前3个"DeliveryNo_LineNo"组合
            Route =
                $"BatchItem_{string.Join(",", request.Take(3).Select(item => $"{item.DeliveryNo}_{item.LineNo}"))}{(request.Count > 3 ? "..." : "")}",
            DealWith = 0 // 未处理
        };
 
        try
        {
            // 2. 调用业务层执行批量删除
            dynamic resultData = new ExpandoObject();
            BatchDeleteResult deleteResult = _deliveryBarcodeManager.DeleteListByDeliveryItem(request);
 
            // 3. 组装返回数据
            resultData.totalRequested = deleteResult.TotalRequested;
            resultData.totalDeleted = deleteResult.TotalDeleted;
            resultData.deletedItems = deleteResult.DeletedNos; // 格式:["DN1_1", "DN1_2"]
            resultData.notFoundItems = deleteResult.NotFoundNos;
            resultData.isSuccess = deleteResult.TotalDeleted > 0;
 
            // 4. 更新消息中心状态(成功)
            messageEntity.Result = 1;
            messageEntity.DealWith = 1;
            messageEntity.ResultData = $"批量删除完成,共处理{deleteResult.TotalRequested}条送货单行";
            _messageCenterManager.save(messageEntity);
 
            // 5. 返回成功响应
            return new ResponseResult
            {
                status = 0,
                message = $"成功删除{deleteResult.DeletedNos.Count}条送货单行数据,共{deleteResult.TotalDeleted}条记录",
                data = resultData
            };
        }
        catch (Exception ex)
        {
            // 6. 异常处理
            messageEntity.Result = 0;
            messageEntity.DealWith = 0;
            messageEntity.ResultData = ex.Message;
            _messageCenterManager.save(messageEntity);
 
            return ResponseResult.ResponseError(ex);
        }
    }
}