cdk
20 小时以前 d016d7ff02586fb9535baef4916cd339e18c7867
service/Warehouse/MesSuppScManager.cs
@@ -1,5 +1,4 @@

using Kingdee.CDP.WebApi.SDK;
using Kingdee.CDP.WebApi.SDK;
using MES.Service.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
@@ -11,6 +10,7 @@
using Newtonsoft.Json.Linq;
using SqlSugar;
using System.Text;
using System.Net.Http;
namespace MES.Service.service.Warehouse;
@@ -20,7 +20,7 @@
    private const string SourceUrl = "https://qixizhaopin.modaniot.com:8443/wetchat/ToGSMesServlet?password=gsmes";
    /// <summary>
    /// 从指定网址读取 JSON 数据并保存到 MES_SUPPSCORE 表
    /// 从指定网址读取 JSON 数据并保存到 MES_SUPPSCORE(主)和 MES_SUPPSCORE_DETAIL(子)表
    /// </summary>
    public bool FetchAndSaveFromUrl()
    {
@@ -28,7 +28,6 @@
        try
        {
            using var http = new HttpClient();
            // 可根据需要设置超时
            http.Timeout = TimeSpan.FromSeconds(30);
            json = http.GetStringAsync(SourceUrl).Result;
        }
@@ -54,35 +53,81 @@
        if (data == null || data.Count == 0)
            throw new Exception("JSON 中未包含 data 或 data 为空");
        var list = new List<MesSuppSc>();
        var mains = new List<MesSuppSc>();
        var details = new List<MesSuppScDetail>();
        foreach (var item in data)
        {
            var rq = item["rq"]?.ToString();
            var gysmc = item["gysmc"]?.ToString();
            var zf = item["zf"]?.ToString();
            var xmdfStr = item["xmdf"]?.ToString();
            decimal? zfDec = null;
            if (!string.IsNullOrWhiteSpace(zf) && decimal.TryParse(zf, out var tmp))
                zfDec = tmp;
            list.Add(new MesSuppSc
            var mainId = Guid.NewGuid();
            mains.Add(new MesSuppSc
            {
                ID = Guid.NewGuid(),
                SuppDate = rq,
                ID = mainId,
                SuppDate = null, // 若 JSON 包含日期字段,可在此填充
                SuppName = gysmc,
                SuppNum = zfDec
            });
            // 解析子表 xmdf 字符串(xmdf 本身是一个 JSON 字符串)
            if (!string.IsNullOrWhiteSpace(xmdfStr))
            {
                try
                {
                    var subArr = JArray.Parse(xmdfStr);
                    foreach (var sub in subArr)
                    {
                        var xm1 = sub["xm1"]?.ToString();
                        var xm2 = sub["xm2"]?.ToString();
                        var dykhdf = sub["dykhdf"]?.ToString();
                        decimal? score = null;
                        if (!string.IsNullOrWhiteSpace(dykhdf) && decimal.TryParse(dykhdf, out var s))
                            score = s;
                        details.Add(new MesSuppScDetail
                        {
                            ID = Guid.NewGuid(),
                            PID = mainId,
                            XM1 = xm1,
                            XM2 = xm2,
                            DYKHDF = score
                        });
                    }
                }
                catch (Exception ex)
                {
                    // 忽略单条解析错误,但记录异常信息
                    Console.WriteLine($"解析 xmdf 失败(供应商 {gysmc}): {ex.Message}");
                }
            }
        }
        // 写入数据库:先清空表再插入(按原逻辑)
        // 写入数据库:事务内先删除旧数据再插入新数据
        var result = UseTransaction(db =>
        {
            // 注意:这里使用传入的 db(SqlSugarScope)执行原子操作
            // 先清子表,再清主表
            db.Deleteable<MesSuppScDetail>().ExecuteCommand();
            db.Deleteable<MesSuppSc>().ExecuteCommand();
            var inserted = db.Insertable(list).ExecuteCommand();
            return inserted > 0 ? 1 : 0;
            var mainInserted = 0;
            if (mains.Count > 0)
                mainInserted = db.Insertable(mains).ExecuteCommand();
            var detailInserted = 0;
            if (details.Count > 0)
                detailInserted = db.Insertable(details).ExecuteCommand();
            return (mainInserted + detailInserted) > 0 ? 1 : 0;
        }) > 0;
        return result;
    }
}