Commit 5c16ef62 by yiyu.li
parents 3d2af0bc ae802d94
......@@ -10,7 +10,7 @@ using Siger.Middlelayer.AccRepository.Request;
using Siger.Middlelayer.Common;
using Siger.ApiCommon.Filters;
using Siger.Middlelayer.Common.Extensions;
using Siger.Middlelayer.Common.Log;
using Siger.Middlelayer.Log;
using Siger.Middlelayer.Common.ModuleEnum;
using Siger.Middlelayer.Repository;
using Siger.Middlelayer.Repository.Repositories.Interface;
......@@ -21,6 +21,7 @@ using Siger.Middlelayer.Repository.Entities;
using NPOI.SS.Formula.Functions;
using Siger.Middlelayer.AccRepository.Response;
using Siger.Middlelayer.Common.Helpers;
using NPOI.SS.Formula;
namespace Siger.ApiACC.Controllers
{
......@@ -39,10 +40,11 @@ namespace Siger.ApiACC.Controllers
private readonly IProductionBeatSetRepository _productionBeatSet;
private readonly IAutomationFixtureToolsProductRepository _automationFixtureToolsProduct;
private readonly IAutomationFixtureToolsRepository _automationFixtureTools;
private readonly IProductRouteRepository _productRoute;
public AutomationController(IUnitOfWork unitOfWork,ISigerProjectLevelSectionRepository sigerProjectLevelSection,IAutomationLineMode automationLineMode,IAutomationMachineStatus automationMachineStatus,ISigerDict sigerDict,IAutomationTaskListRepository automationTaskList,
ISigerProjectMachineAttributionRepository sigerProjectMachineAttribution, IAutomationFixtureMonitor automationFixtureMonitor, IAutomationLocationRepository automationLocation, IProductionBeatSetRepository productionBeatSet, IAutomationFixtureToolsProductRepository automationFixtureToolsProduct,
IAutomationFixtureToolsRepository automationFixtureTools)
IAutomationFixtureToolsRepository automationFixtureTools, IProductRouteRepository productRoute)
{
_unitOfWork = unitOfWork;
_sigerProjectLevelSection = sigerProjectLevelSection;
......@@ -56,6 +58,7 @@ namespace Siger.ApiACC.Controllers
_productionBeatSet = productionBeatSet;
_automationFixtureToolsProduct = automationFixtureToolsProduct;
_automationFixtureTools = automationFixtureTools;
_productRoute = productRoute;
}
/// <summary>
......@@ -105,6 +108,7 @@ namespace Siger.ApiACC.Controllers
Logger.WriteLineInfo($"AutoProcess 未配置设备类型字典");
throw new BadRequestException(AccEnum.AutomationDictNotfound);
}
Logger.WriteLineInfo($"设备状态更变{request.status}触发");
if (_automationTaskList.CanTask(PID, machineAttr.station))
{
var uploadStation = stationDicts.Where(f => f.dkey == DictKeyValConst.UploadloadStation);
......@@ -239,6 +243,7 @@ namespace Siger.ApiACC.Controllers
Logger.WriteLineInfo($"AutoProcess 未配置设备类型字典");
throw new BadRequestException(AccEnum.AutomationDictNotfound);
}
//更新Tasklist
PlCfeeback(taskObj, request.status, stationDicts);
......@@ -291,6 +296,7 @@ namespace Siger.ApiACC.Controllers
taskObj.completetime = DateTime.Now;
_automationTaskList.Update(taskObj);
var monitor = _automationFixtureMonitor.Get(f => f.section == taskObj.sectionid);
//PLC 反馈结束.
if (status == (int)TaskResultStatus.Complated)
{
......@@ -313,18 +319,22 @@ namespace Siger.ApiACC.Controllers
location.ordernumber = taskObj.ordercode;
location.productcode = taskObj.productcode;
location.productid = taskObj.productid;
location.routeid = taskObj.route;
location.sn = taskObj.sn;
_automationLocation.Update(location);
}
var monitor = _automationFixtureMonitor.Get(f => f.section == taskObj.sectionid);
}
if (monitor != null)
{
monitor.section = 0;
_automationFixtureMonitor.Update(monitor);
}
}
}
if (monitor != null)
{
monitor.status = status;
_automationFixtureMonitor.Update(monitor);
}
}
......@@ -378,11 +388,11 @@ namespace Siger.ApiACC.Controllers
{
if (cleanMachine.status == (int)Automation.MachineStatus.Complated)
{
Logger.WriteLineInfo($"AutoProcess 有清洗机完成,创建清洗机Task");
Logger.WriteLineError($"AutoProcess 有清洗机完成,创建清洗机Task");
var monitor = _automationFixtureMonitor.Get(f => f.section == cleanMachine.section);
if (monitor != null)
{
CreateTask(cleanMachine, TaskActionType.Unload, TaskAction.Step_QXJ_LK, monitor.fixtureguid, monitor.ordernumber, monitor.sn, "无程序",monitor.productId, monitor.productCode, monitor.locationId);
CreateTask(cleanMachine.section, TaskActionType.Unload, TaskAction.Step_QXJ_LK, monitor.fixtureguid, monitor.ordernumber, monitor.sn, "无程序",monitor.productId, monitor.productCode, monitor.locationId,monitor.route);
return; //完成当前任务 退出
}
}
......@@ -390,14 +400,14 @@ namespace Siger.ApiACC.Controllers
//优先级2 :其他设备待上料 (立库->加工中心)
var freeMachine = machineStatusList.FirstOrDefault(f=>f.status==(int)Automation.MachineStatus.Waiting);
var freeMachine = machineStatusList.Where(f=>f.status==(int)Automation.MachineStatus.Waiting);
if (freeMachine != null)
{
Logger.WriteLineInfo($"AutoProcess 普通空闲,创建普通设备上料Task");
var location = SelectLocation(freeMachine.machineid);
Logger.WriteLineError($"AutoProcess 普通空闲,创建普通设备上料Task");
var location = SelectLocation(freeMachine.Select(s=>s.machineid).ToList());
if (location != null)
{
var monitor = _automationFixtureMonitor.Get(f => f.section == freeMachine.section);
var monitor = _automationFixtureMonitor.Get(f => f.section == location.section);
if (monitor == null)
{
_automationFixtureMonitor.Insert(new siger_automation_fixture_tools_monitor
......@@ -410,10 +420,11 @@ namespace Siger.ApiACC.Controllers
fixturename = location.fixturename,
ordernumber = location.ordernumber,
locationId = location.location,
section = freeMachine.section,
section = location.section,
sn = location.sn,
createtime = DateTime.Now,
updatetime = DateTime.Now
updatetime = DateTime.Now,
route=location.route,
});
}
else
......@@ -427,27 +438,50 @@ namespace Siger.ApiACC.Controllers
monitor.locationId = location.location;
monitor.sn = location.sn;
monitor.updatetime = DateTime.Now;
monitor.route = location.route;
_automationFixtureMonitor.Update(monitor);
}
CreateTask(freeMachine, TaskActionType.Load, TaskAction.Step_LK_JGZX, location.fixture, location.ordernumber, location.sn, location.pn,location.productId, location.productCode, location.location);
// * 更新下一个工序到储位
var locationObj = _automationLocation.Get(f => f.id == location.lid);
if (locationObj != null)
{
var doneRoute = _productRoute.Get(f => f.id == location.route);
if (doneRoute == null)
return;
var productRoutes = _productRoute.GetList(f => f.projectId == PID && f.productId == location.productId && f.status == (int)RowState.Valid && f.serialNumber > doneRoute.serialNumber);
if (!productRoutes.Any())
{
locationObj.route = string.Empty;
}
else
{
var nextRoute = productRoutes.OrderBy(d => d.serialNumber).FirstOrDefault();
locationObj.route = nextRoute != null ? nextRoute.id.ToString() : "";
}
_automationLocation.Update(locationObj);
CreateTask(location.section, TaskActionType.Load, TaskAction.Step_LK_JGZX, location.fixture, location.ordernumber, location.sn, location.pn, location.productId, location.productCode, location.location,location.route);
return; //完成当前任务 退出
}
}
}
//优先级3:其他设备下料 (加工中心 ->清洗机)
if (cleanMachine != null)
{
var fullMachine = machineStatusList.FirstOrDefault(f => f.status == (int)Automation.MachineStatus.Complated);
if (fullMachine != null && cleanMachine.status==(int)Automation.MachineStatus.Waiting)
{
Logger.WriteLineInfo($"AutoProcess 普通空闲,创建普通设备下料Task ");
Logger.WriteLineError($"AutoProcess 普通空闲,创建普通设备下料Task ");
var monitor = _automationFixtureMonitor.Get(f => f.section == fullMachine.section);
if (monitor == null)
{
Logger.WriteLineInfo($"AutoProcess 找不到CNC监控信息");
Logger.WriteLineError($"AutoProcess 找不到CNC监控信息");
return;
}
CreateTask(fullMachine,TaskActionType.Unload, TaskAction.Step_JGZX_QXJ, monitor.fixtureguid, monitor.ordernumber, monitor.sn,"无程序",monitor.productId, monitor.productCode, monitor.locationId);
CreateTask(fullMachine.section,TaskActionType.Unload, TaskAction.Step_JGZX_QXJ, monitor.fixtureguid, monitor.ordernumber, monitor.sn,"无程序",monitor.productId, monitor.productCode, monitor.locationId,monitor.route);
return; //完成当前任务 退出
}
......@@ -458,7 +492,7 @@ namespace Siger.ApiACC.Controllers
/// <summary>
/// 创建自动任务
/// </summary>
/// <param name="machineStatus"></param>
/// <param name="section"></param>
/// <param name="actionType"></param>
/// <param name="taskAction"></param>
/// <param name="guid">工装GUID</param>
......@@ -466,14 +500,14 @@ namespace Siger.ApiACC.Controllers
/// <param name="sn">工件</param>
/// <param name="productCode">产品CODE</param>
/// <param name="locationid">储位ID</param>
void CreateTask(siger_automation_machine_status machineStatus,TaskActionType actionType, TaskAction taskAction,string guid,string orderno,string sn,string program,int productId,string productCode,int locationid)
void CreateTask(int section,TaskActionType actionType, TaskAction taskAction,string guid,string orderno,string sn,string program,int productId,string productCode,int locationid,int route)
{
var taskNo = _automationTaskList.CrateTaskNumber(Automation.TaskTrigerType.Auto);
_automationTaskList.Insert(new siger_automation_task_list
{
no= taskNo,
projectId = PID,
sectionid = machineStatus.section,
sectionid = section,
trigger = TaskTrigerType.Auto,
action = taskAction,
actiontype = ExcueType.None,
......@@ -491,70 +525,77 @@ namespace Siger.ApiACC.Controllers
locationid= locationid,
ordercode= orderno,
sn= sn,
remark= EnumHelper.GetEnumDesc(taskAction)
remark= EnumHelper.GetEnumDesc(taskAction),
route=route
});
if (_unitOfWork.Commit() > 0)
Logger.WriteLineInfo($"CreateTask 工站 完成");
Logger.WriteLineInfo($"CreateTask sectionId:{section}工站 {EnumHelper.GetEnumDesc(taskAction)} 完成");
else
Logger.WriteLineInfo($"CreateTask 工站 失败");
Logger.WriteLineInfo($"CreateTask sectionId:{section}工站 {EnumHelper.GetEnumDesc(taskAction)}失败");
}
/// <summary>
/// 自动匹配储位 储位 ->CNC
/// </summary>
ResponseAutomationLocationRouteInfo SelectLocation(int machine)
ResponseAutomationLocationRouteInfo SelectLocation(List<int> machines)
{
// 当前空闲设备能加工的产品
var beats = _productionBeatSet.GetList(f => f.projectID == PID && f.machineID == machine);
var productIds = beats.Select(f => f.product_name.ToInt()).Distinct().ToList();
// 取产品交期最近的订单
var planOrder = _automationFixtureToolsProduct.GetDeliveryOrder(productIds, PID);
if (!planOrder.Any())
{
Logger.WriteLineInfo($"SelectLocation 未找到最近订单号信息");
return null;
var beats = _productionBeatSet.GetList(f => f.projectID == PID && machines.Contains(f.machineID) && f.status==(int)RowState.Valid).ToList();
var TempList = new List<ResponseAutoRouteInfo>();
foreach (var b in beats)
{
var autoLocation = _automationLocation.Get(f => f.projectId == b.projectID && !string.IsNullOrEmpty(f.sn) && f.routeid == b.route_number.ToInt() && f.productid == b.product_name.ToInt());
if (autoLocation == null)
continue;
TempList.Add(new ResponseAutoRouteInfo
{
FixtureGuid=autoLocation.fixturetools,
FixtureName=autoLocation.fixturename,
Section=b.section_id,
Machine=b.machineID,
Pn=b.process_number,
ProductId=b.product_name.ToInt(),
ProductName=b.product_name_text,
Location=autoLocation.locationid,
Route=b.route_number.ToInt(),
RouteName=b.route_name,
OrderNo=autoLocation.ordernumber,
Sn=autoLocation.sn,
LId=autoLocation.id
});
}
var order = planOrder.FirstOrDefault();
//TODO 20210126
var beatset = beats.Where(f => f.product_name == order.productId.ToString());
//var location = _automationLocation.GetList(f => f.projectId == PID && f.ordernumber == order.ordernumber && productIds.Contains(f.productid));
//if (!location.Any())
//{
// Logger.WriteLineInfo($"SelectLocation 未找到最近交期订单号{order.ordernumber} 对应产品 {order.productName}的储位信息");
// return null;
//}
//储位有SN 工件
var ordernos = TempList.Select(f => f.OrderNo).ToList();
var location = _automationLocation.GetList(f => f.projectId == PID && productIds.Contains(f.productid));
var hasSnloaction = location.Where(f =>!string.IsNullOrEmpty(f.sn));
if (!hasSnloaction.Any())
return null;
var result = location.FirstOrDefault();
var valiateBeat = beatset.FirstOrDefault(f=>f.route_number.ToInt()>result.routenum);
if (valiateBeat==null)
// 取产品交期最近的订单
var planOrder = _automationFixtureToolsProduct.GetDeliveryOrder(ordernos, PID);
if (!planOrder.Any())
{
Logger.WriteLineInfo($"SelectLocation 未找到产品的工艺顺序");
Logger.WriteLineError($"SelectLocation 未找到最近订单号信息");
return null;
}
var order = planOrder.FirstOrDefault();
var autoRouteInfo = TempList.Where(f => f.OrderNo == order.ordernumber).OrderBy(d=>d.Sn);
var result = autoRouteInfo.FirstOrDefault();
return new ResponseAutomationLocationRouteInfo
{
fixture = result.fixturetools,
fixturename = result.fixturename,
ordernumber =result.ordernumber,
location=result.locationid,
productId=result.productid,
productCode=result.productcode,
productName = result.productname,
sn =result.sn,
pn= valiateBeat.process_number,
route=valiateBeat.route_name
section=result.Section,
machine=result.Machine,
fixture = result.FixtureGuid,
fixturename = result.FixtureName,
ordernumber =result.OrderNo,
location=result.Location,
productId=result.ProductId,
//productCode=result.productcode,
productName = result.ProductName,
sn =result.Sn,
pn= result.Pn,
route=result.Route,
lid=result.LId
};
}
......
......@@ -361,6 +361,9 @@ namespace Siger.ApiACC.Controllers
[HttpGet]
public IActionResult GetLocationList(string productcode, int fillsn=0)
{
var productFix = _automationFixtureToolsProduct.Get(f => f.productcode == productcode);
var locations = _autoLocationRepository.GetFulllocation(ProjectId, fillsn);
return new ObjectResult(locations);
//if (fillsn == 1)
......
......@@ -41,9 +41,11 @@ namespace Siger.ApiACC.Controllers
private readonly IAutomationFixtureToolsRepository _automationFixtureTools;
private readonly IAutomationLocationRepository _automationLocation;
private readonly IAutomationLineMode _automationLine;
private readonly IProductRouteRepository _productRoute;
public AutomationOperateController(IUnitOfWork unitOfWork,ISigerProjectLevelSectionRepository sigerProjectLevelSection , ISigerDict sigerDict,IAutomationMachineStatus automationMachineStatus,ISigerProjectMachineAttributionRepository sigerProjectMachineAttribution,IAutomationTaskListRepository automationTaskList,
IProductPlanDetails planDetails,IProductPlanRepository productPlan,IAutomationFixtureMonitor automationFixtureMonitor ,IAutomationFixtureToolsProductRepository automationFixtureToolsProduct,IAutomationFixtureToolsRepository automationFixtureTools, IAutomationLocationRepository automationLocation, IAutomationLineMode automationLine)
IProductPlanDetails planDetails,IProductPlanRepository productPlan,IAutomationFixtureMonitor automationFixtureMonitor ,IAutomationFixtureToolsProductRepository automationFixtureToolsProduct,IAutomationFixtureToolsRepository automationFixtureTools, IAutomationLocationRepository automationLocation,
IAutomationLineMode automationLine, IProductRouteRepository productRoute)
{
_unitOfWork = unitOfWork;
_sigerProjectLevelSection = sigerProjectLevelSection;
......@@ -58,6 +60,7 @@ namespace Siger.ApiACC.Controllers
_automationFixtureTools = automationFixtureTools;
_automationLocation = automationLocation;
_automationLine = automationLine;
_productRoute = productRoute;
}
/// <summary>
......@@ -366,6 +369,12 @@ namespace Siger.ApiACC.Controllers
var taskNo = _automationTaskList.CrateTaskNumber(Automation.TaskTrigerType.Manual);
var sn = _automationTaskList.CreateRandonSn(plan.product_code);
//上料 指定的第一道工序
var route = _productRoute.GetList(f => f.productId == plan.product_id && f.status==(int)RowState.Valid, "serialNumber",false).FirstOrDefault();
if (route==null)
{
throw new BadRequestException(AccEnum.ProductRouteMissing);
}
var unixtime = UnixTimeHelper.GetNow();
_automationTaskList.Insert(new siger_automation_task_list
{
......@@ -392,6 +401,7 @@ namespace Siger.ApiACC.Controllers
processid=0,
programnumber="",
remark ="手动任务-准备上料",
route=route.id,
extend1= unixtime.ToString()
});
......@@ -415,7 +425,8 @@ namespace Siger.ApiACC.Controllers
productName = plan.product_name,
ordernumber = plandts.OrderNumber,
locationId = fixtureToolsObj.Location,
unixtime = unixtime
unixtime = unixtime,
route= route.id
});
}
else
......@@ -430,6 +441,7 @@ namespace Siger.ApiACC.Controllers
monitor.ordernumber = plandts.OrderNumber;
monitor.locationId = fixtureToolsObj.Location;
monitor.unixtime = unixtime;
monitor.route = route.id;
_automationFixtureMonitor.Update(monitor);
}
......
......@@ -58,7 +58,7 @@ namespace Siger.ApiACC.Controllers
fixtureCode="",
fixtureName="",
lastupdate="",
status=(int)Automation.MachineStatus.Waiting,
machineStatus=d.status,
linemode=d.linemode
};
......@@ -71,6 +71,7 @@ namespace Siger.ApiACC.Controllers
item.fixtureCode = fixture.fixtureguid;
item.fixtureName = fixture.fixturename;
item.machineStatus = d.status;
item.status = fixture.status;
}
result.Add(item);
......@@ -80,9 +81,9 @@ namespace Siger.ApiACC.Controllers
{
sum=new ResponseAutomationMachineStatusTotal {
waittingTotal =result.Where(f=>f.status==(int)Automation.MachineStatus.Waiting).Count(),
produceTotal= result.Where(f => f.status == (int)Automation.MachineStatus.Produce).Count(),
complateTotal= result.Where(f => f.status == (int)Automation.MachineStatus.Complated).Count(),
waittingTotal =result.Where(f=>f.machineStatus == (int)Automation.MachineStatus.Waiting).Count(),
produceTotal= result.Where(f => f.machineStatus == (int)Automation.MachineStatus.Produce).Count(),
complateTotal= result.Where(f => f.machineStatus == (int)Automation.MachineStatus.Complated).Count(),
disableTotal= result.Where(f => f.enable ==0).Count(),
},
dts=result
......
......@@ -23,14 +23,16 @@ namespace Siger.ApiCNC.Controllers
private readonly IProductionBeatSetRepository _beatSetRepository;
private readonly ISigerProjectMachineRepository _machineRepository;
private readonly ISigerProjectProductRepository _productRepository;
private readonly IProductRouteRepository _productRoute;
public BeatAllocationController(IUnitOfWork unitOfWork, IProductionBeatSetRepository beatSetRepository, ISigerProjectMachineRepository machineRepository,
ISigerProjectProductRepository productRepository)
ISigerProjectProductRepository productRepository, IProductRouteRepository productRoute)
{
_unitOfWork = unitOfWork;
_beatSetRepository = beatSetRepository;
_machineRepository = machineRepository;
_productRepository = productRepository;
_productRoute = productRoute;
}
[HttpGet]
......@@ -43,6 +45,7 @@ namespace Siger.ApiCNC.Controllers
var validMachines = _machineRepository.GetLevelSectionNames(sectionID, ProjectId);
foreach (var time in data.Data)
{
var route = _productRoute.Get(f => f.id == time.route_number.ToInt());
var entity = Mapper<ResponseBeatSet, ResponseBeatSet>.Map(time);
var section = validMachines.FirstOrDefault(q => q.machine_id == time.machineID);
if (section != null)
......@@ -50,6 +53,10 @@ namespace Siger.ApiCNC.Controllers
entity.sectionName = section.machine_name;
entity.stationName = section.lastSecondSectionTitle + "-" + section.lastSectionTitle;
}
if (route!=null)
{
entity.routeName = route.name;
}
list.Add(entity);
}
return new PagedObjectResult(list, data.Total, page, pagesize);
......@@ -104,6 +111,11 @@ namespace Siger.ApiCNC.Controllers
{
throw new BadRequestException(RequestEnum.ProductNotFound);
}
var route = _productRoute.Get(f =>f.id==request.route_id);
if (route==null)
{
throw new BadRequestException(RequestEnum.RouteNotFound);
}
var beatSet = new siger_project_beat_set
{
daily_standard_output = request.daily_standard_output,
......@@ -117,8 +129,8 @@ namespace Siger.ApiCNC.Controllers
standard_besat = request.standard_besat,
projectID = ProjectId,
changemodeltime = request.time_num.ToInt(),
route_number = request.route_number.ToStr(),
route_name = request.route_name,
route_number = request.route_id.ToStr(),
route_name = route.name,
updown_besat = request.updown_besat.ToDouble(),
yieldrate = request.yieldratio,
start_time = timSet ? start : DateTime.MinValue,
......
......@@ -103,5 +103,7 @@ namespace Siger.Middlelayer.AccRepository.Entities
public string remark { get; set; }
public string extend1 { get; set; }
public int route { get; set; }
}
}
......@@ -67,7 +67,7 @@ namespace Siger.Middlelayer.AccRepository.Entities
public int changemodeltime { get; set; }
/// <summary>
/// 工序顺序
/// 工序ID Route.Id
/// </summary>
public string route_number { get; set; } = "";
......
......@@ -103,11 +103,11 @@ namespace Siger.Middlelayer.AccRepository.Repositories
/// <param name="productIds"></param>
/// <param name="projectId"></param>
/// <returns></returns>
public IEnumerable<ResponseAutomationPlanOrder> GetDeliveryOrder(List<int>productIds,int projectId)
public IEnumerable<ResponseAutomationPlanOrder> GetDeliveryOrder(List<string>Ordernums,int projectId)
{
var query = from d in _context.siger_project_product_plan_detail
join p in _context.siger_project_product_plan on d.PlanId equals p.id
where d.projectId == projectId && productIds.Contains(p.product_id) && d.status != (int)RowState.Invalid && p.status != (int)RowState.Invalid
where d.projectId == projectId && Ordernums.Contains(d.OrderNumber) && d.status != (int)RowState.Invalid && p.status != (int)RowState.Invalid
select new ResponseAutomationPlanOrder
{
productId=p.product_id,
......@@ -136,7 +136,8 @@ namespace Siger.Middlelayer.AccRepository.Repositories
ProductName = p.product_name,
Url=pd.image,
FixtureName=t.name,
FixtureGuid=t.code,
FixtureGuid=t.guid,
FixtureCode=t.code,
ProductCode =q!=null? q.productcode:"",
Location =l!=null? l.locationid:0,
};
......
......@@ -33,7 +33,7 @@ namespace Siger.Middlelayer.AccRepository.Repositories
join w in _context.siger_wms_storage on l.storageid equals w.id
join u in _context.siger_project_user on q.updator equals u.mid into uu
from u in uu.DefaultIfEmpty()
join r in _context.siger_project_beat_set on q.routeid equals r.id into rr
join r in _context.siger_project_product_route on q.routeid equals r.id into rr
from r in rr.DefaultIfEmpty()
where q.projectId == projectid && q.status == (int)RowState.Valid
select new ResponseAutomationLocation
......@@ -56,8 +56,9 @@ namespace Siger.Middlelayer.AccRepository.Repositories
status = q.status,
updatetime = q.updatetime.HasValue && q.updatetime > DateTime.MinValue ? q.updatetime.Value.ToString(ParameterConstant.DateTimeFormat) : "",
sn = q.sn ?? "",
route = r.route_name ?? "",
routenumber = r == null ? "" : r.route_number.ToString(),
route = r.name ?? "",
routenumber = r == null ? "" : r.serialNumber.ToString(),
routeid=q.routeid,
cate_guid = c.guid ?? "",
categoryId = c == null ? 0 : c.id
};
......@@ -238,18 +239,18 @@ namespace Siger.Middlelayer.AccRepository.Repositories
public IEnumerable<ResponseAutomationLocationList> GetFulllocation(int projectId,int full)
{
//获取有SN 的储位
if (full==1)
{
var query = from q in _context.siger_automation_location
join t in _context.siger_automation_fixture_tools on q.fixturetools equals t.guid
join l in _context.siger_wms_storage_location on q.location_cid equals l.id
join w in _context.siger_wms_storage on l.storageid equals w.id
where q.projectId==projectId
&& q.status==(int)RowState.Valid
&& t.status==(int)RowState.Valid
&& l.status==(int)RowState.Valid
&& w.status==(int)RowState.Valid
where q.projectId == projectId && !string.IsNullOrEmpty(q.sn)
&& q.status == (int)RowState.Valid&& t.status == (int)RowState.Valid
&& l.status == (int)RowState.Valid && w.status == (int)RowState.Valid
select new ResponseAutomationLocationList
{
id = q.id,
typeid = t.id,
fixtureguid = t.guid,
......@@ -262,18 +263,40 @@ namespace Siger.Middlelayer.AccRepository.Repositories
fixturetoolid = t.id,
code = t.code,
name = t.name,
materialsn = q.sn ?? ""
materialsn = q.sn
};
Expression<Func<ResponseAutomationLocationList, bool>> locationidExpression = f => true;
if (full != 0)
{
locationidExpression = q => !string.IsNullOrEmpty(q.materialsn);
return query.Where(locationidExpression);
}else
{
locationidExpression = q => string.IsNullOrEmpty(q.materialsn);
//选择SN为空的储位
var query = from q in _context.siger_automation_location
join t in _context.siger_automation_fixture_tools on q.fixturetools equals t.guid
join l in _context.siger_wms_storage_location on q.location_cid equals l.id
join w in _context.siger_wms_storage on l.storageid equals w.id
where q.projectId == projectId && string.IsNullOrEmpty(q.sn)
&& q.status == (int)RowState.Valid && t.status == (int)RowState.Valid
&& l.status == (int)RowState.Valid&& w.status == (int)RowState.Valid
select new ResponseAutomationLocationList
{
id = q.id,
typeid = t.id,
fixtureguid = t.guid,
locationid = l.locationid,
location = l.realname,
locationcode = l.serial_number,
wavehouseid = w.id,
wavehouse = w.name,
wavehousecode = w.serial_number,
fixturetoolid = t.id,
code = t.code,
name = t.name,
materialsn = q.sn
};
Expression<Func<ResponseAutomationLocationList, bool>> locationidExpression = f => true;
return query.Where(locationidExpression);
}
return query.Where(locationidExpression);
}
}
}
......@@ -37,7 +37,7 @@ namespace Siger.Middlelayer.AccRepository.Repositories.Interface
/// <param name="productIds"></param>
/// <param name="projectId"></param>
/// <returns></returns>
IEnumerable<ResponseAutomationPlanOrder> GetDeliveryOrder(List<int> productIds, int projectId);
IEnumerable<ResponseAutomationPlanOrder> GetDeliveryOrder(List<string> Ordernums, int projectId);
}
}
......@@ -31,6 +31,8 @@ namespace Siger.Middlelayer.AccRepository.Response
public class ResponseAutomationLocationRouteInfo
{
public int section { get; set; }
public int machine { get; set; }
public string fixture { get; set; }
public string fixturename { get; set; }
public string ordernumber { get; set; }
......@@ -39,8 +41,35 @@ namespace Siger.Middlelayer.AccRepository.Response
public int productId { get; set; }
public string productCode { get; set; }
public string productName { get; set; }
public string route { get; set; }
public int route { get; set; }
public string pn { get; set; }
/// <summary>
/// location.id主键
/// </summary>
public int lid { get; set; }
}
public class ResponseAutoRouteInfo
{
public int Section { get; set; }
public int Machine { get; set; }
public string Pn { get; set; }
public int ProductId { get; set; }
public string ProductName { get; set; }
public int Route { get; set; }
public string RouteName { get; set; }
public string OrderNo { get; set; }
public string FixtureGuid { get; set; }
public string FixtureName { get; set; }
public string Sn { get; set; }
/// <summary>
/// 储位编号
/// </summary>
public int Location { get; set; }
/// <summary>
/// location.id
/// </summary>
public int LId { get; set; }
}
}
......@@ -31,9 +31,19 @@ namespace Siger.Middlelayer.AccRepository.Response
/// 工件
/// </summary>
public string sn { get; set; }
/// <summary>
/// 工序顺序
/// </summary>
public string routenumber { get; set; }
/// <summary>
/// 工序萌宠
/// </summary>
public string route { get; set; }
/// <summary>
/// 工序id
/// </summary>
public int routeid { get; set; }
/// <summary>
/// 物料状态
/// </summary>
public int materialstate { get; set; }
......
......@@ -15,6 +15,13 @@ namespace Siger.Middlelayer.AccRepository.Response
public int location { get; set; }
public string sn { get; set; }
public int enable { get; set; }
/// <summary>
/// 设备状态
/// </summary>
public int machineStatus { get; set; }
/// <summary>
/// 任务状态
/// </summary>
public int status { get; set; }
public string lastupdate { get; set; }
public string linemode { get; set; }
......
......@@ -101,6 +101,8 @@ namespace Siger.Middlelayer.CncRepository.Repositories
var sectionIds = new List<int>();
var productIds = new List<string>();
var machineIds = new List<int>();
var validates = new List<BeatSetEntity>();
foreach (var beatSetEntity in beatSetEntities)
{
var sectionId = 0;
......@@ -180,14 +182,26 @@ namespace Siger.Middlelayer.CncRepository.Repositories
{
errors.Add($"{rowIndex},{(int)RequestEnum.UpDownBesatNotInteger}");
}
var route = _context.siger_project_product_route.FirstOrDefault(f =>f.projectId==projectid && f.productId == product.id && f.name == beatSetEntity.RouteName);
if (route == null)
{
errors.Add($"{rowIndex},{(int)RequestEnum.RouteNotFound}");
}
if (errors.Any())
{
return new CommonImportResult(0, string.Join(";", errors));
}
beatSetEntity.RouteNumber = route.id.ToString();
validates.Add(beatSetEntity);
}
var index = 0;
var maxTime = "2199-01-01 00:00:00".ToDateTime();
foreach (var entity in beatSetEntities)
foreach (var entity in validates)
{
var beat = new siger_project_beat_set
{
......@@ -201,12 +215,14 @@ namespace Siger.Middlelayer.CncRepository.Repositories
product_name = productIds[index],
section_id = sectionIds[index],
standard_besat = entity.CycleTime.ToInt(),
route_name = entity.RouteName,
machineID = machineIds.Count>index?machineIds[index]:0,
changemodeltime = entity.ChangeModelTime.ToInt(),
updown_besat = entity.UpDownBesat.ToDouble(),
yieldrate = entity.YieldRate.ToInt(),
route_number = entity.RouteNumber,
//route_number = entity.RouteNumber,
route_number=entity.RouteNumber,
start_time = string.IsNullOrEmpty(entity.StartTime) ? DateTime.MinValue : entity.StartTime.ToDateTime(),
end_time = string.IsNullOrEmpty(entity.EndTime) ? maxTime : entity.EndTime.ToDateTime().AddDays(1).AddSeconds(-1)
};
......
......@@ -13,6 +13,10 @@ namespace Siger.Middlelayer.CncRepository.Request
public string product_name_text { get; set; }
/// <summary>
/// productId
/// </summary>
[Required(ErrorMessage = "ProductNameIsEmpty")]
public string product_name { get; set; }
......@@ -24,6 +28,11 @@ namespace Siger.Middlelayer.CncRepository.Request
public string time_num { get; set; }
/// <summary>
/// 产品工序表ID
/// </summary>
public int route_id { get; set; }
public string route_number { get; set; }
public string route_name { get; set; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment