南骏 池
2025-05-16 567fb8c8c0851f1ae24176d7414299a28696a276
1.公共日志方法
2.携客云获取到货单
已修改3个文件
231 ■■■■ 文件已修改
Controllers/Warehouse/MesXkyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesXkyService.cs 194 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
util/LogUtil.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Warehouse/MesXkyController.cs
@@ -28,7 +28,7 @@
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos = m.GetXkyDHD(request);
            resultInfos = m.XKY_GET_DHD(request);
            var tbBillList = resultInfos;
            return new ResponseResult
            {
service/Warehouse/MesXkyService.cs
@@ -1,28 +1,46 @@
using MES.Service.Models;
using Microsoft.IdentityModel.Tokens;
using MySqlConnector;
using NewPdaSqlServer.Controllers;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.service.@base;
using NewPdaSqlServer.util;
using Newtonsoft.Json;
using SqlSugar;
using Newtonsoft.Json.Linq;
using System.Collections;
using System.Data;
using System.Net;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using static Azure.Core.HttpHeader;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
using System.Data.SqlClient;
using System.Data;
using static NewPdaSqlServer.Controllers.Warehouse.MesXkyController;
namespace NewPdaSqlServer.service.QC;
public class MesXkyService : RepositoryNoEntity
{
    /// <summary>
    /// 系统自动日志模板(用于携客云接口调用记录)
    /// </summary>
    private  string _logMessage = "【SysAuto】获取携客云送货单。";
    /// <summary>
    /// 请求报文缓存(存储序列化后的JSON请求内容)
    /// </summary>
    private string _requestJson = string.Empty;
    /// <summary>
    /// 动态响应对象(存储反序列化的携客云接口响应)
    /// </summary>
    private dynamic _responseData = new System.Dynamic.ExpandoObject();
    /// <summary>
    /// 接口执行时间戳(格式:yyyy-MM-dd HH:mm:ss)
    /// </summary>
    private string _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    /// <summary>
    /// 接口调用状态(0-失败 1-成功)
    /// </summary>
    private int sendStatus = 0;
    public dynamic XKY_GET_DHD(XKYGetDhdRequest entity)
    {
        try
@@ -30,6 +48,7 @@
            string ErrorMsg = "";
            ApiCommonParam Apiparam = ApiCommonParam.NewApiCommon();
            _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            //string data_inserted = "{\r\n  \"startDate\": 1746759300000,\r\n  \"endDate\": 1746762300000,\r\n  \"erpCode\": \"GXF001\"\r\n}";
            string sendJson = JsonConvert.SerializeObject(entity);
            ArrayList SQLStringList = new ArrayList();
@@ -38,8 +57,8 @@
            HttpClient httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            string json = "{\"commonParam\":" + JsonConvert.SerializeObject(Apiparam) + ",\"body\":" + sendJson + "}";
            byte[] postData = Encoding.UTF8.GetBytes(json);
            _requestJson = "{\"commonParam\":" + JsonConvert.SerializeObject(Apiparam) + ",\"body\":" + sendJson + "}";
            byte[] postData = Encoding.UTF8.GetBytes(_requestJson);
            // 创建请求对象
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://openapi.xiekeyun.com/delivery/getNoList.json");
@@ -52,7 +71,7 @@
            {
                stream.Write(postData, 0, postData.Length);
            }
            dynamic responseJson;
            // 发送请求并获取响应
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (Stream stream = response.GetResponseStream())
@@ -60,39 +79,150 @@
            {
                string result2 = reader.ReadToEnd();
                responseJson = JsonConvert.DeserializeObject(result2);
                _responseData = JsonConvert.DeserializeObject(result2);
            }
            if (responseJson.result != 1)
                throw new ApplicationException(responseJson.errorMsg);
            // 新增数据存储逻辑,储存主表逻辑
            var result = 0;
           List<DeliveryNotice> noticeList = JsonConvert.DeserializeObject<List<DeliveryNotice>>(responseJson.dataList.ToString());
            noticeList.ForEach(n => n.Id = Guid.NewGuid());  // 新增GUID赋值
            Db.Ado.UseTran(() =>
            {
                result = Db.Insertable(noticeList).ExecuteCommand();
            }, ex =>
            {
                throw new Exception($"数据库插入失败:{ex.Message}\n{ex.InnerException?.Message}");
            });
            //// 新增日志记录(在返回响应前)
            //using (var conn = new SqlConnection(DbHelperSQL.strConn))
            //{
            //    using (var cmd = new SqlCommand("prc_log_create", conn))
            //    {
            //        try
            //        {
            //            conn.Open();
            //            cmd.CommandType = CommandType.StoredProcedure;
            //            SqlParameter[] logParams =
            //            {
            //                new("@edtUserGuid", SqlDbType.UniqueIdentifier) { Value = Guid.Parse("11111111-1111-1111-1111-111111111111") },
            //                new("@abtGuid", SqlDbType.UniqueIdentifier) { Value = DBNull.Value },
            //                new("@abtTable", SqlDbType.NVarChar, 40) { Value = "DELIVERY_NOTICE" },
            //                new("@detail", SqlDbType.NVarChar, 2500) { Value = "【SysAuto】获取携客云送货单。" },
            //                new("@hNo", SqlDbType.NVarChar, 100) { Value = "" },
            //                new("@SendJson", SqlDbType.NVarChar) { Value = json },
            //                new("@RtnJson", SqlDbType.NVarChar) { Value = JsonConvert.SerializeObject(responseJson) },
            //                new("@xkyBeginTime", SqlDbType.NVarChar) { Value = (entity.startDate/1000).ToString() },
            //                new("@xkyEndTime", SqlDbType.NVarChar) { Value = (entity.endDate/1000).ToString()},
            //                new("@sendStatus", SqlDbType.NVarChar) { Value = responseJson.result.ToString()},
            //                new("@executeTime", SqlDbType.NVarChar) { Value =  executeTime},
            //            };
            return responseJson;
            //            foreach (var param in logParams)
            //                cmd.Parameters.Add(param);
            //            cmd.ExecuteNonQuery();
            //        }
            //        catch (Exception logEx)
            //        {
            //            // 日志记录失败不中断主流程
            //            Console.WriteLine($"日志记录失败: {logEx.Message}");
            //        }
            //        finally
            //        {
            //            conn.Close();
            //        }
            //    }
            //}
            if (_responseData.result != 1)
                throw new ApplicationException(_responseData.errorMsg);
            sendStatus = _responseData.result;
            // 原120-131行替换为:
            if (ProcessDeliveryNotice(_responseData) > 0)
                sendStatus = 1;
            else
                sendStatus = 0;
            var logService = new LogService();
            logService.CreateLogI(
                db: Db,
                edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"),
                abtGuid: null,
                abtTable: "DELIVERY_NOTICE",
                detail: _logMessage,
                orderNo: "",
                sendJson: _requestJson,
                rtnJson: JsonConvert.SerializeObject(_responseData),
                xkyBeginTime: (entity.startDate / 1000).ToString(),
                xkyEndTime: (entity.endDate / 1000).ToString(),
                sendStatus: sendStatus,
                executeTime: _executeTimestamp
            );
            return _responseData;
        }
        catch (Exception e)
        {
            var logService = new LogService();
            logService.CreateLogI(
                db: Db,
                edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"),
                abtGuid: null,
                abtTable: "DELIVERY_NOTICE",
                detail: _logMessage,
                orderNo: "",
                sendJson: _requestJson,
                rtnJson: JsonConvert.SerializeObject(_responseData),
                xkyBeginTime: (entity.startDate / 1000).ToString(),
                xkyEndTime: (entity.endDate / 1000).ToString(),
                sendStatus: 0,
                executeTime: _executeTimestamp
            );
            throw new Exception(e.Message);
        }
    }
    public dynamic GetXkyDHD(XKYGetDhdRequest entity)
    //public dynamic GetXkyDHD(XKYGetDhdRequest entity)
    //{
    //   return XKY_GET_DHD(entity);
    //}
    //对获取到的携客云送货单做处理
    private int ProcessDeliveryNotice(dynamic responseJson)
    {
        List<DeliveryNotice> noticeList = JsonConvert.DeserializeObject<List<DeliveryNotice>>(responseJson.dataList.ToString());
        noticeList.ForEach(n => n.Id = Guid.NewGuid());
        var deliveryNos = noticeList.Select(n => n.DeliveryNo).Distinct().ToList();
        var noticeIds = noticeList.Select(n => n.Id).ToList(); // 保持GUID类型
       return XKY_GET_DHD(entity);
        var result = 0;
        Db.Ado.UseTran(() =>
        {
            // 删除关联送货明细数据
            Db.Deleteable<DeliveryNoticeDetail>()
            .Where(d => noticeIds.Contains(Guid.Parse(d.Pid)))
              .ExecuteCommand();
            // 添加空值检查
            if (deliveryNos.Any())
            {
                //删除关联送货条码明细
                Db.Deleteable<TblBarcodeInformation>()
                  .Where(b => deliveryNos.Contains(b.DeliveryNo))
                  .ExecuteCommand();
                //删除送货单
                Db.Deleteable<DeliveryNotice>()
                  .Where(n => deliveryNos.Contains(n.DeliveryNo))
                  .ExecuteCommand();
            }
            // 批量插入优化
            result = Db.Fastest<DeliveryNotice>().BulkCopy(noticeList);
        },
        ex => {
            // 增强异常信息
            _logMessage = _logMessage + $"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}";
            //throw new Exception($"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}");
        });
        return result;
    }
}
}
util/LogUtil.cs
@@ -36,5 +36,40 @@
                }
            );
        }
            public void CreateLogI(
        SqlSugarScope db,
        Guid edtUserGuid,
        string abtGuid,
        string abtTable,
        string detail,
        string orderNo,
        string sendJson,
        string rtnJson,
        string xkyBeginTime,
        string xkyEndTime,
        int sendStatus,
        string executeTime)
    {
        db.Ado.ExecuteCommand(
            "exec prc_log_create @edtUserGuid, @abtGuid, @abtTable, @detail, @hNo,@RtnLogGuid, @SendJson, @RtnJson, @xkyBeginTime, @xkyEndTime, @sendStatus, @executeTime",
            new {
                edtUserGuid,
                abtGuid = string.IsNullOrEmpty(abtGuid) ? DBNull.Value : (object)abtGuid,
                abtTable = (object)abtTable ?? DBNull.Value,
                detail,
                hNo = orderNo,
                RtnLogGuid = DBNull.Value,
                SendJson = sendJson,
                RtnJson = rtnJson,
                xkyBeginTime = (object)xkyBeginTime ?? DBNull.Value,
                xkyEndTime = (object)xkyEndTime ?? DBNull.Value,
                sendStatus = (object)sendStatus ?? DBNull.Value,
                executeTime = (object)executeTime ?? DBNull.Value
            });
    }
    }
}