cnf
2025-09-13 528d0370cb57f07e291fbf8fb0052718c3fe584c
MESApplication/Controllers/BasicData/DeliveryBarcodeController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,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);
        }
    }
}