立即调用erp接口 任务单批次生成修改
This commit is contained in:
@@ -109,6 +109,11 @@ public partial class PrdMoTask : BaseEntity<string>
|
||||
/// </summary>
|
||||
public DateTime? plan_end_date { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 第一次开工日期
|
||||
/// </summary>
|
||||
public DateTime? first_start_date { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 实际开工日期
|
||||
/// </summary>
|
||||
@@ -245,4 +250,14 @@ public partial class PrdMoTask : BaseEntity<string>
|
||||
/// 定时任务key
|
||||
/// </summary>
|
||||
public string timer_key { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 按时间更换批次次数
|
||||
/// </summary>
|
||||
public int change_batch_count_by_day { get; set; } = -1;
|
||||
|
||||
/// <summary>
|
||||
/// 按产量更换批次次数
|
||||
/// </summary>
|
||||
public int change_batch_count_by_qty { get; set; } = -1;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ using Tnb.WarehouseMgr;
|
||||
using Tnb.WarehouseMgr.Entities.Enums;
|
||||
using Tnb.ProductionMgr.Entities.Entity;
|
||||
using Tnb.ProductionMgr.Helpers;
|
||||
using Tnb.BasicData.Interfaces;
|
||||
|
||||
// using Tnb.PerMgr.Entities;
|
||||
|
||||
@@ -83,6 +84,7 @@ namespace Tnb.ProductionMgr
|
||||
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
||||
private readonly RedisData _redisData;
|
||||
private static SemaphoreSlim prdreportSemaphore = new(1);
|
||||
private readonly IThirdApiRecordService _thirdApiRecordService;
|
||||
|
||||
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
||||
public PrdMoTaskService(
|
||||
@@ -96,6 +98,7 @@ namespace Tnb.ProductionMgr
|
||||
IOrganizeService organizeService,
|
||||
WmsPrdInstockHService wmsPrdInstockHService,
|
||||
IVisualDevService visualDevService,
|
||||
IThirdApiRecordService thirdApiRecordService,
|
||||
IQcCheckPlanService qcCheckPlanService
|
||||
)
|
||||
{
|
||||
@@ -112,6 +115,7 @@ namespace Tnb.ProductionMgr
|
||||
_prdInstockService = prdInstockService;
|
||||
_qcCheckPlanService = qcCheckPlanService;
|
||||
_wmsCarryService = wmsCarryService;
|
||||
_thirdApiRecordService = thirdApiRecordService;
|
||||
_wmsPrdInstockHService = wmsPrdInstockHService;
|
||||
}
|
||||
|
||||
@@ -1288,6 +1292,11 @@ namespace Tnb.ProductionMgr
|
||||
{
|
||||
throw Oops.Bah("状态错误无法开始");
|
||||
}
|
||||
|
||||
if (item.first_start_date == null)
|
||||
{
|
||||
item.first_start_date = DateTime.Now;
|
||||
}
|
||||
break;
|
||||
case PrdTaskBehavior.Pause:
|
||||
if (item.mo_task_status == status)
|
||||
@@ -2032,19 +2041,82 @@ namespace Tnb.ProductionMgr
|
||||
string batch = "";
|
||||
|
||||
PrdMo mo = await _db.Queryable<PrdMo>().SingleAsync(x => x.id == prdMoTask.mo_id);
|
||||
|
||||
bool changeBatchFlag = false;
|
||||
int changeCountNumByDay = 0;
|
||||
int changeCountNumByQty = 0;
|
||||
if (mo.mo_type == DictConst.PrdMoTypeZS || mo.mo_type == DictConst.PrdMoTypeJC)
|
||||
{
|
||||
BasFactoryConfig changeBatchNum = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CHANGEBATCHNUM);
|
||||
BasFactoryConfig changeBatchDay = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CHANGEBATCHDAY);
|
||||
|
||||
DateTime date1 = new DateTime(prdMoTask.first_start_date.Value.Year,prdMoTask.first_start_date.Value.Month,prdMoTask.first_start_date.Value.Day);
|
||||
DateTime date2 = new DateTime(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day);
|
||||
TimeSpan diff = date2.Subtract(date1);
|
||||
int diffDays = diff.Days + 1;
|
||||
|
||||
changeCountNumByDay = (diffDays + 1) / int.Parse(changeBatchDay.value) - 1;
|
||||
changeCountNumByQty = ((int)(prdMoTask.reported_work_qty ?? 0 + prdMoTask.scrap_qty ?? 0) + 1) / int.Parse(changeBatchNum.value) - 1;
|
||||
|
||||
if (changeCountNumByDay > prdMoTask.change_batch_count_by_day )
|
||||
{
|
||||
changeBatchFlag = true;
|
||||
}
|
||||
|
||||
if (changeCountNumByQty > prdMoTask.change_batch_count_by_qty)
|
||||
{
|
||||
changeBatchFlag = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (mo.mo_type == DictConst.PrdMoTypeZS)
|
||||
{
|
||||
EqpEquipment equipment = await _db.Queryable<EqpEquipment>().SingleAsync(x => x.id == prdMoTask.eqp_id);
|
||||
batch = $"{equipment.code.Substring(equipment.code.Length - 2, 2)}{DateTime.Now.ToString("yyMMdd")}";
|
||||
if (changeBatchFlag)
|
||||
{
|
||||
EqpEquipment equipment = await _db.Queryable<EqpEquipment>().SingleAsync(x => x.id == prdMoTask.eqp_id);
|
||||
batch = $"{equipment.code.Substring(equipment.code.Length - 2, 2)}{DateTime.Now.ToString("yyMMdd")}";
|
||||
await db.Updateable<PrdMoTask>()
|
||||
.SetColumns(x => x.batch == batch)
|
||||
.SetColumns(x=>x.change_batch_count_by_day==changeCountNumByDay)
|
||||
.SetColumns(x=>x.change_batch_count_by_qty==changeCountNumByQty)
|
||||
.Where(x => x.id == prdMoTask.id)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
batch = prdMoTask.batch;
|
||||
}
|
||||
|
||||
|
||||
}else if (mo.mo_type == DictConst.PrdMoTypeJC)
|
||||
{
|
||||
EqpEquipment equipment = await _db.Queryable<EqpEquipment>().SingleAsync(x => x.id == prdMoTask.eqp_id);
|
||||
ToolMolds toolMolds = await _db.Queryable<ToolMolds>().SingleAsync(x => x.id == prdMoTask.mold_id);
|
||||
batch = $"{toolMolds.mold_code.Substring(toolMolds.mold_code.Length - 2, 2)}{equipment.code.Substring(equipment.code.Length - 2, 2)}{DateTime.Now.ToString("yyMMdd")}";
|
||||
if (changeBatchFlag)
|
||||
{
|
||||
EqpEquipment equipment = await _db.Queryable<EqpEquipment>().SingleAsync(x => x.id == prdMoTask.eqp_id);
|
||||
ToolMolds toolMolds = await _db.Queryable<ToolMolds>().SingleAsync(x => x.id == prdMoTask.mold_id);
|
||||
batch = $"{toolMolds.mold_code.Substring(toolMolds.mold_code.Length - 2, 2)}{equipment.code.Substring(equipment.code.Length - 2, 2)}{DateTime.Now.ToString("yyMMdd")}";
|
||||
await db.Updateable<PrdMoTask>()
|
||||
.SetColumns(x => x.batch == batch)
|
||||
.SetColumns(x=>x.change_batch_count_by_day==changeCountNumByDay)
|
||||
.SetColumns(x=>x.change_batch_count_by_qty==changeCountNumByQty)
|
||||
.Where(x => x.id == prdMoTask.id)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
batch = prdMoTask.batch;
|
||||
}
|
||||
}else
|
||||
{
|
||||
OrganizeEntity organizeEntity = await _db.Queryable<OrganizeEntity>().SingleAsync(x => x.Id == prdMoTask.workline_id);
|
||||
batch = $"{organizeEntity.EnCode.Substring(organizeEntity.EnCode.Length - 2, 2)}{DateTime.Now.ToString("yyMMdd")}";
|
||||
// OrganizeEntity organizeEntity = await _db.Queryable<OrganizeEntity>().SingleAsync(x => x.Id == prdMoTask.workline_id);
|
||||
// batch = $"{organizeEntity.EnCode.Substring(organizeEntity.EnCode.Length - 2, 2)}{DateTime.Now.ToString("yyMMdd")}";
|
||||
batch = prdMoTask.batch;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(batch))
|
||||
{
|
||||
throw Oops.Bah($"任务单{prdMoTask.mo_task_code}批次号为空,无法提报");
|
||||
}
|
||||
|
||||
if (prdMoTask.has_last_check == 0)
|
||||
@@ -2568,8 +2640,8 @@ namespace Tnb.ProductionMgr
|
||||
erpRequestData.Add("AggWrDtl", erpRequestDataDetails);
|
||||
requestData.Add(erpRequestData);
|
||||
|
||||
BasFactoryConfig config = await _db.Queryable<BasFactoryConfig>()
|
||||
.FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL);
|
||||
BasFactoryConfig config = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL);
|
||||
BasFactoryConfig callErp = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP);
|
||||
ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord();
|
||||
thirdWebapiRecord.id = SnowflakeIdHelper.NextId();
|
||||
thirdWebapiRecord.third_name = WmsWareHouseConst.BIP;
|
||||
@@ -2581,6 +2653,10 @@ namespace Tnb.ProductionMgr
|
||||
thirdWebapiRecord.create_time = DateTime.Now;
|
||||
thirdWebapiRecord.remark = $"载具编号:{report?.material_box_code ?? ""}";
|
||||
await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
|
||||
|
||||
if(callErp.value=="1"){
|
||||
await _thirdApiRecordService.Send(new List<ThirdWebapiRecord> { thirdWebapiRecord }, "自动", _db);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4083,6 +4159,24 @@ namespace Tnb.ProductionMgr
|
||||
return row>0 ? "分配成功" : "分配失败";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置批号
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<string> SetBatch(Dictionary<String,String> input)
|
||||
{
|
||||
string ids = input.GetOrDefault("ids");
|
||||
string[] idList = ids.Split(",");
|
||||
string batch = input.GetOrDefault("batch");
|
||||
int row = await _db.Updateable<PrdMoTask>()
|
||||
.SetColumns(x => x.batch == batch)
|
||||
.Where(x => idList.Contains(x.id))
|
||||
.ExecuteCommandAsync();
|
||||
return row>0 ? "设置成功" : "设置失败";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 末检
|
||||
/// </summary>
|
||||
|
||||
@@ -43,6 +43,7 @@ using Tnb.ProductionMgr.Entities.Entity;
|
||||
using Tnb.ProductionMgr.Entities.Entity.ErpEntity;
|
||||
using Tnb.BasicData.Entities.Dto;
|
||||
using Tnb.BasicData;
|
||||
using Tnb.BasicData.Interfaces;
|
||||
using Tnb.PerMgr.Entities;
|
||||
|
||||
namespace Tnb.ProductionMgr
|
||||
@@ -59,6 +60,7 @@ namespace Tnb.ProductionMgr
|
||||
private readonly IWmsEmptyOutstockService _wmsEmptyOutstockService;
|
||||
private readonly IWareHouseService _wareHouseService;
|
||||
private readonly IPrdMoTaskService _prdMoTaskService;
|
||||
private readonly IThirdApiRecordService _thirdApiRecordService;
|
||||
|
||||
public TimeWorkService(
|
||||
RedisData redisData,
|
||||
@@ -67,6 +69,7 @@ namespace Tnb.ProductionMgr
|
||||
IOrganizeService organizeService,
|
||||
IWmsEmptyOutstockService wmsEmptyOutstockService,
|
||||
IPrdMoTaskService prdMoTaskService,
|
||||
IThirdApiRecordService thirdApiRecordService,
|
||||
IWareHouseService wareHouseService
|
||||
)
|
||||
{
|
||||
@@ -77,6 +80,7 @@ namespace Tnb.ProductionMgr
|
||||
_billRullService = billRullService;
|
||||
_wmsEmptyOutstockService = wmsEmptyOutstockService;
|
||||
_wareHouseService = wareHouseService;
|
||||
_thirdApiRecordService = thirdApiRecordService;
|
||||
_prdMoTaskService = prdMoTaskService;
|
||||
}
|
||||
|
||||
@@ -718,178 +722,12 @@ namespace Tnb.ProductionMgr
|
||||
List<ThirdWebapiRecord> records = await _db.Queryable<ThirdWebapiRecord>().Where(x => thirdNameArr.Contains(x.third_name) && x.status == "0" && x.is_send == 1 && x.error_count<10).ToListAsync();
|
||||
if (records.IsEmpty())
|
||||
{
|
||||
records = await _db.Queryable<ThirdWebapiRecord>().Where(x => thirdNameArr.Contains(x.third_name) && x.status == "0" && x.is_send == 1).ToListAsync();
|
||||
records = await _db.Queryable<ThirdWebapiRecord>().Where(x => thirdNameArr.Contains(x.third_name) && x.status == "0" && x.is_send == 1 && x.error_count<100).ToListAsync();
|
||||
}
|
||||
|
||||
if (records.IsEmpty()) return "";
|
||||
|
||||
DateTime now = DateTime.Now;
|
||||
Stopwatch stopwatch = null;
|
||||
string response = "";
|
||||
var elapsedMilliseconds = 0l;
|
||||
ThirdResult thirdResult = new ThirdResult();
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
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;
|
||||
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 (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)
|
||||
.SetColumns(x => x.error_count == x.error_count + 1)
|
||||
.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]["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();
|
||||
}
|
||||
|
||||
await _thirdApiRecordService.Send(records, "自动");
|
||||
|
||||
return "true";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user