You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

299 lines
15 KiB

using Dapper;
using Hangfire;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using TaskManager.Contracts.Dtos;
using TaskManager.Controllers;
using TaskManager.Entity;
using TaskManager.Entity.Entitys;
using TaskManager.EntityFramework;
using TaskManager.EntityFramework.Repository;
using Wood.Util.Filters;
using Z.EntityFramework.Plus;
namespace Wood.Service.Controllers
{
/// <summary>
/// 任务表
/// </summary>
public class TaskSubService : NormalBaseController<TaskSub>
{
private readonly LogController _log;
public TaskSubService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<TaskSub> repository, LogController log) : base(context, builder, configuration, repository)
{
_log = log;
}
//private async Task<PagedResult<T>> GetDataPagedAsync<T,TService,TDTO>(RequestInputBase input)
// where T : BaseEntity,new()
// where TService :CheryRecurringJobInputPageController<T,TDTO> ,new()
// where TDTO : class ,new()
//{
// var service = _builder.GetRequiredService<TService>();
// var task = input.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
// input.Condition.Filters.Remove(task);
// var result = await service.GetDataPaged(input);
// return result.Value;
//}
/// <summary>
/// 调用明细
/// </summary>
/// <param name="requestInputBase"></param>
/// <returns></returns>
[HttpPost]
public async Task<ActionResult> GetDetail([FromBody] RequestInputBase requestInputBase)
{
var taskid = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TaskId").Value;
var tablename = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName").Value;
switch (tablename)
{
case "SUPPLIER_PRO_MATERIAL_STOCK"://来料检验数据
var stockservice = _builder.GetRequiredService<SupplierProMaterialStockLogService>();
var stocktask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(stocktask);
var stockresult = await stockservice.GetLogDataPaged(requestInputBase);
return Ok(stockresult);
case "SUPPLIER_PRO_SCHEDULING"://排产数据
var schedservice = _builder.GetRequiredService<CherySupplierProSchedulingLogService>();
var schedtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(schedtask);
var schedresult = await schedservice.GetLogDataPaged(requestInputBase);
return Ok(schedresult);
case "SUPPLIER_INFO"://供应商基础信息
var infoservice = _builder.GetRequiredService<CherySupplierInfoLogService>();
var infotask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(infotask);
var inforesult = await infoservice.GetLogDataPaged(requestInputBase);
return Ok(inforesult);
case "SUPPLIER_EMPLOYEE"://人员资质信息
var emplyeeservice = _builder.GetRequiredService<CherySupplierEmployeeLogService>();
var emplyeetask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(emplyeetask);
var emplyeeresult = await emplyeeservice.GetLogDataPaged(requestInputBase);
return Ok(emplyeeresult);
case "SUPPLIER_BOM"://BOM主数据
var bomservice = _builder.GetRequiredService<CherySupplierBomLogService>();
var bomtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(bomtask);
var bomresult = await bomservice.GetLogDataPaged(requestInputBase);
return Ok(bomresult);
case "SUPPLIER_PRO_CPS"://过程控制项质量数据
var cpsservice = _builder.GetRequiredService<CherySupplierProCpsLogService>();
var cpstask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(cpstask);
var cpsresult = await cpsservice.GetLogDataPaged(requestInputBase);
return Ok(cpsresult);
case "SUPPLIER_PRO_DATA"://生产过程数据
var dataservice = _builder.GetRequiredService<CherySupplierProDataLogService>();
var datatask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(datatask);
var dataresult = await dataservice.GetLogDataPaged(requestInputBase);
return Ok(dataresult);
case "SUPPLIER_PRO_FIRST_PASSYIELD"://产品一次合格率
var passyieldservice = _builder.GetRequiredService<CherySupplierProFirstPassyieldLogService>();
var passyieldtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(passyieldtask);
var passyieldresult = await passyieldservice.GetLogDataPaged(requestInputBase);
return Ok(passyieldresult);
case "SUPPLIER_PRO_STATION_FIRST_PASSYIELD"://工位一次合格率
var pasyservice = _builder.GetRequiredService<CherySupplierProStationFirstPassyieldLogService>();
var pasytask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(pasytask);
var pasyresult = await pasyservice.GetLogDataPaged(requestInputBase);
return Ok(pasyresult);
case "SUPPLIER_PRO_FLAW"://缺陷业务数据
var flawservice = _builder.GetRequiredService<CherySupplierProFlawLogService>();
var flawtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(flawtask);
var flawresult = await flawservice.GetLogDataPaged(requestInputBase);
return Ok(flawresult);
case "SUPPLIER_PRO_ENVIRONMENT"://环境业务数据
var envservice = _builder.GetRequiredService<CherySupplierProEnvironmentLogService>();
var envtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(envtask);
var envresult = await envservice.GetLogDataPaged(requestInputBase);
return Ok(envresult);
case "SUPPLIER_PRO_OEE_ACHIEVEMENT_RATE"://设备OEE达成率
var rateservice = _builder.GetRequiredService<CherySupplierProOeeAchievementRateLogService>();
var ratetask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(ratetask);
var rateresult = await rateservice.GetLogDataPaged(requestInputBase);
return Ok(rateresult);
case "SUPPLIER_PRO_OEE_TIME_DETAILS"://OEE时间明细
var detailservice = _builder.GetRequiredService<CherySupplierProOeeTimeDetailsLogService>();
var detailtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(detailtask);
var detailresult = await detailservice.GetLogDataPaged(requestInputBase);
return Ok(detailresult);
case "SUPPLIER_PRO_MATERIAL_DATA"://物料主数据
var materialservice = _builder.GetRequiredService<CherySupplierProMaterialDataLogService>();
var materialtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(materialtask);
var materialresult = await materialservice.GetLogDataPaged(requestInputBase);
return Ok(materialresult);
case "SUPPLIER_PRO_ATTACHMENT_DATA":// 附件类数据
var attachment_dataservice = _builder.GetRequiredService<CherySupplierProAttachmentDataLogService>();
var attachment_datatask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(attachment_datatask);
var attachment_dataresult = await attachment_dataservice.GetLogDataPaged(requestInputBase);
return Ok(attachment_dataresult);
case "SUPPLIER_PRO_PROCESS_EQUIPMENT":// 工艺装备
var eqservice = _builder.GetRequiredService<CherySupplierProProcessEquipmentLogService>();
var eqtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(eqtask);
var eqresult = await eqservice.GetLogDataPaged(requestInputBase);
return Ok(eqresult);
case "SUPPLIER_PRO_PROCESS"://工艺
var processservice = _builder.GetRequiredService<CherySupplierProProcessLogService>();
var processtask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(processtask);
var processresult = await processservice.GetLogDataPaged(requestInputBase);
return Ok(processresult);
case "SUPPLIER_CON_MMRP"://M+6月物料需求计划风险确认
var mmrpservice = _builder.GetRequiredService<CherySupplierConMmrpLogService>();
var mmrptask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(mmrptask);
var mmrpresult = await mmrpservice.GetLogDataPaged(requestInputBase);
return Ok(mmrpresult);
case "SUPPLIER_CON_DATE"://日物料需求计划风险确认
var con_dateservice = _builder.GetRequiredService<CherySupplierConDateService>();
var con_datetask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(con_datetask);
var con_dateresult = await con_dateservice.GetTaskDataPaged(requestInputBase);
return Ok(con_dateresult);
case "SUPPLIER_CON_PO"://采购订单风险确认
var con_poservice = _builder.GetRequiredService<CherySupplierConPoService>();
var con_potask = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(con_potask);
var con_poresult = await con_poservice.GetTaskDataPaged(requestInputBase);
return Ok(con_poresult);
case "SUPPLIER_SINV_DATA"://
var service1 = _builder.GetRequiredService<CherySupplierSinvDataLogService>();
var table = requestInputBase.Condition.Filters.FirstOrDefault(p => p.Column == "TableName");
requestInputBase.Condition.Filters.Remove(table);
var result1 = await service1.GetLogDataPaged(requestInputBase);
return Ok(result1);
}
return Ok();
}
/// <summary>
/// 撤销风险确认任务
/// </summary>
/// <param name="taskId"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult> CancelTask(Guid taskId)
{
var task = _context.TaskSub.FirstOrDefault(p => p.TaskId == taskId && p.WriteState == true && p.FailedCount > 0);
var list = new List<string>() {
"M+6月物料需求计划风险确认",
"日物料需求计划风险确认",
"采购订单风险确认"
};
if (!list.Contains(task.TaskName) && task.FailedCount == 0)
{
return new JsonResult(new { code = 400, message = "任务不是失败任务或不是风险确认单,不能取消 " });
}
switch (task.TableName)
{
case "SUPPLIER_CON_MMRP"://M+6月物料需求计划风险确认
await CancelTask<SUPPLIER_CON_MMRP>("SUPPLIER_CON_MMRP", taskId,task.TaskName);
break;
case "SUPPLIER_CON_DATE"://日物料需求计划风险确认
await CancelTask<SUPPLIER_CON_DATE>("SUPPLIER_CON_DATE", taskId, task.TaskName);
break;
case "SUPPLIER_CON_PO"://采购订单风险确认
await CancelTask<SUPPLIER_CON_PO>("SUPPLIER_CON_MMRP", taskId, task.TaskName);
break;
}
task.FailedInfo = "取消成功,失败记录已经还原到业务数据,重新填写!";
_context.TaskSub.Update(task);
_context.SaveChanges();
return new JsonResult(new { code = 200, message = "取消成功!" });
}
private async Task CancelTask<T>(string tablename, Guid taskId,string taskname) where T : CherryWriteBaseEnity, new()
{
try
{
var mmrplist = _context.Database.GetDbConnection().Query<T>($"select * from {tablename} where taskid='{taskId}' and writestate=0");
foreach (var item in mmrplist)
{
item.ReadState = false;
item.WriteState = false;
}
await _context.BulkUpdateAsync(mmrplist);
}
catch (Exception ex)
{
await _log.AddError($"撤销任务风险确认任务{taskId}失败,原因:{ex.Message}", taskname, taskId, DateTime.Now.ToString("yyyyMMdd"));
}
}
}
}