| | |
| | | |
| | | using Kingdee.CDP.WebApi.SDK; |
| | | using Kingdee.CDP.WebApi.SDK; |
| | | using MES.Service.Models; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Microsoft.AspNetCore.Mvc.Filters; |
| | |
| | | using Newtonsoft.Json.Linq; |
| | | using SqlSugar; |
| | | using System.Text; |
| | | using System.Net.Http; |
| | | |
| | | namespace MES.Service.service.Warehouse; |
| | | |
| | |
| | | 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() |
| | | { |
| | |
| | | try |
| | | { |
| | | using var http = new HttpClient(); |
| | | // 可根据需要设置超时 |
| | | http.Timeout = TimeSpan.FromSeconds(30); |
| | | json = http.GetStringAsync(SourceUrl).Result; |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |