立即调用erp接口 任务单批次生成修改

This commit is contained in:
2024-09-23 15:07:00 +08:00
parent 1c04f0449f
commit 1dc51107f5
16 changed files with 452 additions and 346 deletions

View File

@@ -11,11 +11,13 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NPOI.Util;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
using Tnb.BasicData.Entities.Dto;
using Tnb.ProductionMgr.Entities;
using Tnb.BasicData.Interfaces;
namespace Tnb.BasicData
{
@@ -24,7 +26,7 @@ namespace Tnb.BasicData
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class ThirdApiRecordService : IDynamicApiController, ITransient
public class ThirdApiRecordService : IThirdApiRecordService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<ThirdWebapiRecord> _repository;
private readonly IUserManager _userManager;
@@ -41,171 +43,8 @@ namespace Tnb.BasicData
[HttpGet]
public async Task<string> Send(string id)
{
var db = _repository.AsSugarClient();
string response = "";
ThirdWebapiRecord record = await _repository.GetSingleAsync(x=>x.id==id);
DateTime now = DateTime.Now;
Stopwatch stopwatch = Stopwatch.StartNew();
switch (record.method.ToUpper())
{
case "GET":
response = HttpUtils.RequestGet(record.url);
break;
case "POST":
response = HttpUtils.RequestPost(record.url, record.request_data);
break;
}
stopwatch.Stop();
var elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
ThirdResult thirdResult = new ThirdResult();
try
{
if (response != null && !response.IsEmpty())
{
thirdResult = JsonConvert.DeserializeObject<ThirdResult>(response);
}
else
{
thirdResult.Code = 500;
}
}
catch (Exception e)
{
thirdResult.Code = 500;
thirdResult.msgResult = response;
}
try
{
await db.Ado.BeginTranAsync();
if (thirdResult.Code == 200)
{
await db.Updateable<ThirdWebapiRecord>()
.SetColumns(x => x.response_data == response)
.SetColumns(x => x.response_code == thirdResult.Code)
.SetColumns(x => x.last_send_time == now)
.SetColumns(x => x.response_time == elapsedMilliseconds)
.SetColumns(x => x.send_type == "手动")
.SetColumns(x => x.status == "1")
.Where(x=>x.id==record.id)
.ExecuteCommandAsync();
}
else
{
await db.Updateable<ThirdWebapiRecord>()
.SetColumns(x => x.response_data == response)
.SetColumns(x => x.response_code == thirdResult.Code)
.SetColumns(x => x.last_send_time == now)
.SetColumns(x => x.response_time == elapsedMilliseconds)
.Where(x=>x.id==record.id)
.ExecuteCommandAsync();
}
if (thirdResult.Code == 200 && record.third_name == "BIP" && record.name == "采购到货")
{
Dictionary<string,object> requestData = JsonConvert.DeserializeObject<Dictionary<string,object>>(record.request_data);
//((JObject)requestData[0]["dtls"]).SelectTokens("csourcebid")
string billCode = requestData.ContainsKey("vbillcode") ? requestData["vbillcode"].ToString() : "";
if (string.IsNullOrEmpty(billCode))
{
Log.Error($"请求记录id{record.id}采购到货单号为空");
}
var requestDtos = ((JArray)requestData["dtls"]).Select(x => new ErpPurchaseDto()
{
csourcebid = x["csourcebid"]?.ToString(),
mes_detail_id = x["mes_detail_id"]?.ToString(),
}).ToList();
JObject data = (JObject)thirdResult.msg;
JToken children = data.SelectToken("children")[0];
var responsetDtos = children.Select(x => new ErpPurchaseDto()
{
pk_arriveorder = x["valueIndex"]["pk_arriveorder"].ToString(),
pk_arriveorder_b = x["valueIndex"]["pk_arriveorder_b"].ToString(),
csourcebid = x["valueIndex"]["csourcebid"].ToString()
}).ToList();
string pk_arriveorder = responsetDtos[0]?.pk_arriveorder ?? "";
int updateDRow = 0;
bool flag = !string.IsNullOrEmpty(pk_arriveorder);
foreach (var item in requestDtos)
{
string pk_arriveorder_b = responsetDtos.Find(x => x.csourcebid == item.csourcebid)?.pk_arriveorder_b;
if (string.IsNullOrEmpty(pk_arriveorder_b))
{
flag = true;
break;
}
updateDRow += await db.Updateable<WmsPurchaseD>()
.SetColumns(x => x.erp_arriveorder_b_pk == pk_arriveorder_b)
.Where(x => x.id == item.mes_detail_id)
.ExecuteCommandAsync();
}
int updateRow = await db.Updateable<WmsPurchaseH>()
.SetColumns(x => x.erp_arriveorder_pk == pk_arriveorder)
.Where(x => x.bill_code == billCode)
.ExecuteCommandAsync();
if (flag || updateRow <= 0 || updateDRow <= 0)
{
Log.Error($"更新失败,requestDtos:{JsonConvert.SerializeObject(requestDtos)},responsetDtos:{JsonConvert.SerializeObject(responsetDtos)}");
}
}
if (thirdResult.Code == 200 && record.third_name == "BIP" && record.name == "生产报告")
{
Dictionary<string,object> requestData = JsonConvert.DeserializeObject<Dictionary<string,object>>(record.request_data);
string reportId = requestData.ContainsKey("report_id") ? requestData["report_id"].ToString() : "";
if (string.IsNullOrEmpty(reportId))
{
Log.Error($"请求记录id{record.id}生产报告提报id为空");
}
JObject data = (JObject)thirdResult.msg;
JToken children = data.SelectToken("children")[0];
var responsetDtos = children.Select(x => new ErpReportDto()
{
// pk_wr_product = x["valueIndex"]["pk_wr_product"].ToString(),
// pk_wr_product = x["qualityvos"][0]["pk_wr_product_q"].ToString(),
pk_wr_product = x["qualityvos"][0]["valueIndex"]["pk_wr_quality"].ToString(),
pk_wr = x["valueIndex"]["pk_wr"].ToString(),
report_id = reportId
}).ToList();
int updateRow = 0;
foreach (var item in responsetDtos)
{
if (!string.IsNullOrEmpty(item.pk_wr) && !string.IsNullOrEmpty(item.pk_wr_product))
{
updateRow += await db.Updateable<PrdReport>()
.SetColumns(x => x.erp_pk_wr == item.pk_wr)
.SetColumns(x => x.erp_pk_wr_product == item.pk_wr_product)
.Where(x => x.id == item.report_id)
.ExecuteCommandAsync();
}
}
if (updateRow <= 0)
{
Log.Error($"请求记录{record.id}更新失败");
}
}
await db.Ado.CommitTranAsync();
}
catch (Exception e)
{
Log.Error(e.Message,e);
await db.Ado.RollbackTranAsync();
}
return thirdResult.Code == 200 ? "成功" : "失败";
return await Send(Arrays.AsList(record), "手动");
}
[HttpGet]
@@ -248,6 +87,194 @@ namespace Tnb.BasicData
return "失败";
}
public async Task<string> Send(List<ThirdWebapiRecord> records, string send_type,ISqlSugarClient db=null)
{
ThirdResult thirdResult = null;
bool tranFlag = true;
try
{
if (records == null || records.IsEmpty())
return "";
if (db == null)
{
db = _repository.AsSugarClient();
}
else
{
tranFlag = false;
}
DateTime now = DateTime.Now;
Stopwatch stopwatch = null;
string response = "";
var elapsedMilliseconds = 0l;
foreach (var record in records)
{
now = DateTime.Now;
stopwatch = Stopwatch.StartNew();
switch (record.method.ToUpper())
{
case "GET":
response = HttpUtils.RequestGet(record.url);
break;
case "POST":
response = HttpUtils.RequestPost(record.url, record.request_data);
break;
}
stopwatch.Stop();
elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
thirdResult = new ThirdResult();
try
{
if (response != null && !response.IsEmpty())
{
thirdResult = JsonConvert.DeserializeObject<ThirdResult>(response);
}
else
{
thirdResult.Code = 500;
}
}
catch (Exception e)
{
thirdResult.Code = 500;
thirdResult.msgResult = response;
}
if(db==null) await db.Ado.BeginTranAsync();
if (thirdResult.Code == 200)
{
await db.Updateable<ThirdWebapiRecord>()
.SetColumns(x => x.response_data == response)
.SetColumns(x => x.response_code == thirdResult.Code)
.SetColumns(x => x.last_send_time == now)
.SetColumns(x => x.response_time == elapsedMilliseconds)
.SetColumns(x => x.send_type == send_type)
.SetColumns(x => x.status == "1")
.Where(x=>x.id==record.id)
.ExecuteCommandAsync();
}
else
{
await db.Updateable<ThirdWebapiRecord>()
.SetColumns(x => x.response_data == response)
.SetColumns(x => x.response_code == thirdResult.Code)
.SetColumns(x => x.last_send_time == now)
.SetColumns(x => x.response_time == elapsedMilliseconds)
.Where(x=>x.id==record.id)
.ExecuteCommandAsync();
}
if (thirdResult.Code == 200 && record.third_name == "BIP" && record.name == "采购到货")
{
Dictionary<string,object> requestData = JsonConvert.DeserializeObject<Dictionary<string,object>>(record.request_data);
//((JObject)requestData[0]["dtls"]).SelectTokens("csourcebid")
string billCode = requestData.ContainsKey("vbillcode") ? requestData["vbillcode"].ToString() : "";
if (string.IsNullOrEmpty(billCode))
{
Log.Error($"请求记录id{record.id}采购到货单号为空");
}
var requestDtos = ((JArray)requestData["dtls"]).Select(x => new ErpPurchaseDto()
{
csourcebid = x["csourcebid"]?.ToString(),
mes_detail_id = x["mes_detail_id"]?.ToString(),
}).ToList();
JObject data = (JObject)thirdResult.msg;
JToken children = data.SelectToken("children")[0];
var responsetDtos = children.Select(x => new ErpPurchaseDto()
{
pk_arriveorder = x["valueIndex"]["pk_arriveorder"].ToString(),
pk_arriveorder_b = x["valueIndex"]["pk_arriveorder_b"].ToString(),
csourcebid = x["valueIndex"]["csourcebid"].ToString()
}).ToList();
string pk_arriveorder = responsetDtos[0]?.pk_arriveorder ?? "";
int updateDRow = 0;
bool flag = !string.IsNullOrEmpty(pk_arriveorder);
foreach (var item in requestDtos)
{
string pk_arriveorder_b = responsetDtos.Find(x => x.csourcebid == item.csourcebid)?.pk_arriveorder_b;
if (string.IsNullOrEmpty(pk_arriveorder_b))
{
flag = true;
break;
}
updateDRow += await db.Updateable<WmsPurchaseD>()
.SetColumns(x => x.erp_arriveorder_b_pk == pk_arriveorder_b)
.Where(x => x.id == item.mes_detail_id)
.ExecuteCommandAsync();
}
int updateRow = await db.Updateable<WmsPurchaseH>()
.SetColumns(x => x.erp_arriveorder_pk == pk_arriveorder)
.Where(x => x.bill_code == billCode)
.ExecuteCommandAsync();
if (flag || updateRow <= 0 || updateDRow <= 0)
{
Log.Error($"更新失败,requestDtos:{JsonConvert.SerializeObject(requestDtos)},responsetDtos:{JsonConvert.SerializeObject(responsetDtos)}");
}
}
if (thirdResult.Code == 200 && record.third_name == "BIP" && record.name == "生产报告")
{
Dictionary<string,object> requestData = JsonConvert.DeserializeObject<Dictionary<string,object>>(record.request_data);
string reportId = requestData.ContainsKey("report_id") ? requestData["report_id"].ToString() : "";
if (string.IsNullOrEmpty(reportId))
{
Log.Error($"请求记录id{record.id}生产报告提报id为空");
}
JObject data = (JObject)thirdResult.msg;
JToken children = data.SelectToken("children")[0];
var responsetDtos = children.Select(x => new ErpReportDto()
{
// pk_wr_product = x["valueIndex"]["pk_wr_product"].ToString(),
// pk_wr_product = x["qualityvos"][0]["pk_wr_product_q"].ToString(),
pk_wr_product = x["qualityvos"][0]["valueIndex"]["pk_wr_quality"].ToString(),
pk_wr = x["valueIndex"]["pk_wr"].ToString(),
report_id = reportId
}).ToList();
int updateRow = 0;
foreach (var item in responsetDtos)
{
if (!string.IsNullOrEmpty(item.pk_wr) && !string.IsNullOrEmpty(item.pk_wr_product))
{
updateRow += await db.Updateable<PrdReport>()
.SetColumns(x => x.erp_pk_wr == item.pk_wr)
.SetColumns(x => x.erp_pk_wr_product == item.pk_wr_product)
.Where(x => x.id == item.report_id)
.ExecuteCommandAsync();
}
}
if (updateRow <= 0)
{
Log.Error($"请求记录{record.id}更新失败");
}
}
}
if(tranFlag) await db.Ado.CommitTranAsync();
}
catch (Exception e)
{
Log.Error(e.Message,e);
if(tranFlag) await db.Ado.RollbackTranAsync();
}
return thirdResult.Code == 200 ? "成功" : "失败";
}
}
}