using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
using WCS.Entity.fj;
using wms.api.Job;
using wms.dto;
using wms.dto.request.fj;
using wms.dto.request.hj;
using wms.dto.request.hj.dto;
using wms.dto.request.share;
using wms.dto.response;
using wms.dto.response.fj;
using wms.service.IService;
using wms.service.Service;
using wms.sqlsugar.model.fj;
using wms.util.Check;
using wms.util.Ext;
using wms.util.Http;
namespace wms.api.Controllers
{
///
/// 分拣库控制器
///
[Route("api/[controller]/[action]")]
[ApiController]
public class FjController : BaseController
{
///
/// 分拣服务 逻辑类
///
private readonly IFJService _fjService;
///
/// 日志
///
private readonly ILogger _logger;
///
/// 映射器
///
private readonly IMapper _mapper;
#region 锁
private static object lockerCurtainProductionOrder = new object();
private static object lockerCurtainOrderStartCheck = new object();
private static object lockerFjEditorialFlow = new object();
private static object lockerSpoolMaterialInfoTrans = new object();
private static object lockerCurtainProductionStockOut = new object();
private static object lockerCurtainProductionStockOut1 = new object();
private static object lockerProductionBack = new object();
private static object lockerCreateMaterialPalletWarehouTask = new object();
private static object lockerCreateMaterialPalletWarehouTask1 = new object();
private static object lockerCreateMaterialPalletWarehouTask2 = new object();
private static object lockerMaterialReturnTaskCreator = new object();
private static object lockerErrorMaterialStockOut = new object();
private static object lockerBGradeMaterialStockOut = new object();
private static object lockerlockerStockChange = new object();
private static object lockerWetFormulaInfo = new object();
private static object lockerManualBuildEmptyStock = new object();
private static object lockFindAvailableFlatStorageSlot = new object();
///
/// 人工组盘传输接口
///
private static object lockerManualBuildStockTrans = new object();
///
/// 一层工人创建创建空托盘库存
///
private static object lockOneFloorWorkerBuildEmptyPalletsStock = new object();
///
///
///
private static object lockGroupTask = new object();
//
///
///
private static object lockBingPallet = new object();
//
///
///
private static object lockGetTwoPallet = new object();
///
/// 申请货位
///
private static object lockApplyStockInLoc = new object();
///
/// 完成任务
///
private static object lockerCompleteTask = new object();
///
/// 取消任务
///
private static object lockerCancelTask = new object();
///
/// 手动出库任务
///
private static object lockManualTask = new object();
///
/// 空托盘组申请出库
///
private static object lockApplyEmptyPalletGroupOutStorage = new object();
///
/// 组盘工字轮创建异常任务
///
private static object palletizingCreateseErrorTasks = new object();
///
/// 空托盘组申请出库
///
private static object lockRingApplyStockInLoc = new object();
///
/// 环形库请求码垛出库任务
///
private static object lockApplyPalletizingStockOut = new object();
///
/// 堆垛机从出库完成
///
private static object lockerSrmPickOutCompleted = new object();
private static object lockerBomInfoTrans = new object();
private static object lockFJEnteMainLineRequest = new object();
private static object lockAllocatedSpoolFlow = new object();
#endregion 锁
///
/// 分拣控制器构造函数
///
/// 分拣服务 逻辑类
/// 日志
/// 映射器
public FjController(IFJService fjService, ILogger logger, IMapper mapper) : base(fjService)
{
_fjService = fjService;
_logger = logger;
_mapper = mapper;
}
#region 暂时不用
///
/// 同步物料基础信息
///
///
///
//[HttpPost]
//public string SyncMaterInfo(SyncMaterInfoRequest reqBody)
//{
// var result = new SRes();
// //_logger.LogInformation("请求参数:{@reqBody},{aa}", reqBody,1);
// FJSyncMaterInfoResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqBody));
// if (reqBody.SyncType == 1)
// {
// reqBody.PageIndex = 1;
// while (resbody.ResData !=null && resbody.ResData.Any())
// {
// _fjService.SyncMaterInfo(resbody.ResData);
// reqBody.PageIndex++;
// resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqBody));
// }
// }
// else if (reqBody.SyncType == 2)
// {
// //拿到增量
// var increconf = _fjService.GetSysConfigByCode(Const.MESMaterialInitIncrement);
// if (increconf != null)
// {
// reqBody.StartTime = DateTime.Parse(increconf.SContent);
// //reqBody.Count = int.Parse(increconf.Remark);
// resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqBody));
// if (resbody.ResData.Any())
// {
// if (_fjService.SyncMaterInfo(resbody.ResData))
// {
// var lastdata = resbody.ResData.OrderBy(p => p.UpdatedTime).Last();
// _fjService.UpdateSysConfigModelColumns(new sqlsugar.model.UpdateModelColumns()
// {
// Columns = it => new fjSysConfig { SContent = lastdata.UpdatedTime.ToString("yyyy-MM-dd HH:mm:ss.fff") },
// WhereExpression = it => it.Code == Const.MESMaterialInitIncrement
// });
// }
// }
// else
// {
// result.ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode();
// result.ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription();
// }
// }
// else
// {
// result.ResCode = ResponseStatusCodeEnum.AccountError.GetHashCode();
// result.ResMsg = "没有配置信息" + Const.MESMaterialInitIncrement;
// }
// }
// else
// {
// if (!string.IsNullOrEmpty(reqBody.MatCode))
// {
// resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqBody));
// if (resbody.ResData.Any())
// {
// if (_fjService.SyncMaterInfo(resbody.ResData))
// {
// }
// }
// }
// }
// return result.ToCamelCaseString();
//}
///
/// BOM信息传输接口
///
///
///
//[HttpPost]
//public SRes BomInfoTrans(BomInfoTransRequest reqDto)
//{
// return ConcurrencyReqControl(lockerBomInfoTrans, "BomInfoTrans" + reqDto.BomCode, reqDto.BomCode, reqDto, _fjService.BomInfoTrans);
//}
#endregion 暂时不用
///
/// 创建货位,用于少数虚拟货位及平库
///
/// 仓库号
/// 货位号
///
[HttpPost]
public SRes CreatWarecell(string WarehouseCode, string Code)
{
return _fjService.CreatWarecell(WarehouseCode, Code);
}
///
/// 物料主数据推送接口(湿拉)
///
///
///
[HttpPost]
public SRes SyncMaterInfoList(FJSyncMaterInfoListRequest reqBody)
{
var res = new SRes();
if (reqBody.ListInfo == null || !reqBody.ListInfo.Any())
{
res.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode();
res.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription();
return res;
}
_fjService.SyncMaterInfo(_mapper.Map>(reqBody.ListInfo));
return res;
}
///
/// 物料主数据推送接口(帘线)
///
///
///
[HttpPost]
public SRes SyncMaterInfoListForLX(SxSyncMaterInfoListRequest reqBody)
{
var res = new SRes();
if (reqBody.ListInfo == null || !reqBody.ListInfo.Any())
{
res.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode();
res.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription();
return res;
}
_fjService.SyncMaterInfoLX(reqBody.ListInfo);
return res;
}
///
/// 机台信息同步接口
///
///
///
[HttpPost(Name = "SyncMachineInfo")]
public SRes SyncMachineInfo(SyncMachineInfoRequest reqDto)
{
//SyncMachineInfoResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqDto));
//if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode() && resbody.ResData != null && resbody.ResData.Any())
//{
return _fjService.SyncMachineInfo(reqDto);
//}
}
///
/// 创建芯股用空托入库任务
///
///
[HttpPost(Name = "CreateCoreStrandEmptyPalletEnterWarehouse")]
public void CreateCoreStrandEmptyPalletEnterWarehouse()
{
_fjService.CreateCoreStrandEmptyPalletEnterWarehouse();
}
///
/// 创建芯股站台用的空托出库任务
///
///
[HttpPost(Name = "CoreStrandSupportReplenishEmptyPallet")]
public SRes CoreStrandSupportReplenishEmptyPallet()
{
return _fjService.CoreStrandSupportReplenishEmptyPallet();
}
///
/// 投料信息同步接口
///
///
///
[HttpPost(Name = "WetFormulaInfo")]
public SRes WetFormulaInfo(WetFormulaInfoRequest reqDto)
{
return ConcurrencyReqControl(lockerWetFormulaInfo, "WetFormulaInfo", reqDto.FeedCode, reqDto, _fjService.WetFormulaInfo);
}
///
/// 帘线生产工单信息传输接口
///
///
///
[HttpPost]
public SRes CurtainProductionOrder(CurtainProductionOrderRequest reqDto)
{
var res = ConcurrencyReqControl(lockerCurtainProductionOrder, "CurtainProductionOrder", reqDto.BillCode, reqDto, _fjService.CurtainProductionOrder);
try
{
HttpUtil.PostRequest("http://10.30.44.3:8011/api/sx/CurtainProductionOrder", JsonConvert.SerializeObject(reqDto), 30000, "UTF-8", "application/json");
}
catch (Exception ex)
{
_logger.LogInformation("调用时效工单异常" + ex.ToString());
}
return res;
}
///
/// 湿拉工单启动验证
///
///
///
[HttpPost]
public SRes CurtainOrderStartCheck(CurtainOrderStartCheckRequest reqDto)
{
return ConcurrencyReqControl(lockerCurtainOrderStartCheck, "CurtainOrderStartCheck", reqDto.BillCode, reqDto, _fjService.CurtainOrderStartCheck);
}
///
/// 变更流向
///
///
///
[HttpPost]
public SRes EditorialFlow(FjEditorialFlowRequest reqDto)
{
return ConcurrencyReqControl(lockerFjEditorialFlow, "EditorialFlow", reqDto.LocCode, reqDto, _fjService.EditorialFlow);
}
///
/// 湿拉工字轮/芯股信息传输接口
///
///
///
[HttpPost]
public SRes SpoolMaterialInfoTrans(SpoolMaterialInfoTransRequest reqDto)
{
return ConcurrencyReqControl(lockerSpoolMaterialInfoTrans, "SpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _fjService.SpoolMaterialInfoTrans);
}
///
/// AGV上报状态变更接口
///
///
///
[HttpPost]
public AgvCallbackResponse AgvCallback(AgvCallbackRequest reqDto)
{
return _fjService.AgvCallback(reqDto);
//return ConcurrencyReqControl(lockerSpoolMaterialInfoTrans, "SpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _fjService.SpoolMaterialInfoTrans);
}
///
/// 获取工字轮流向(江锦调用)
///
///
///
[HttpPost]
public SRes AllocatedSpoolFlow(AllocatedSpoolFlowRequest reqDto)
{
return _fjService.AllocatedSpoolFlow(reqDto);
}
///
/// MES获取流向异常信息
///
///
///
[HttpPost]
public SRes QueryFlowDirectionExceptions(GetFlowExceptionResultsRequest reqDto)
{
return _fjService.QueryFlowDirectionExceptions(reqDto);
}
private SRes ComPushData(SRes resbody, List ids)
{
var res = new SRes();
try
{
if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
{
//更新推送表数据
_fjService.UpdateBillPushinfoModelColumns(new sqlsugar.model.UpdateModelColumns()
{
Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1 },
WhereExpression = it => ids.Contains(it.Id)
});
//删除单据表数据
//_fjService.DeleteDoc(p => doccodelist.Contains(p.DocNo));
}
else
{
//更新推送表数据
_fjService.UpdateBillPushinfoModelColumns(new sqlsugar.model.UpdateModelColumns()
{
Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 },
WhereExpression = it => ids.Contains(it.Id)
});
}
}
catch (Exception ex)
{
res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription();
_logger.LogInformation("反馈数据推送" + ex.ToString());
}
return res;
}
///
/// 湿拉工字轮入库反馈接口
///
///
[HttpPost(Name = "WetProductStockInFeedBack")]
public SRes WetProductStockInFeedBack()
{
var list = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_StockIn.ToString());
var dtolist = _mapper.Map>(list);
var dto = new WetProductStockInFeedBackRequest() { ListInfo = dtolist };
SRes resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto));
return ComPushData(resbody, list.Select(p => p.Id).ToList());
}
///
/// 数据推送接口
///
///
///
[HttpPost]
public PushResponse FJPushErpDate(PushDate request)
{
var result = new PushResponse();
//自动推送
request.Type = FackbeekType.InterfaceType_HJ_1F_StockIn.ToString();
var onefloor = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_StockIn.ToString(), true);
foreach (var item in onefloor.GroupBy(p => p.RFIDBarCode))
{
PushRequest push = new PushRequest() { ListInfo = new List() };
push.WareCode = "fjhouse";
push.WareName = "分拣库";
push.LocCode = item.First().WareCellCode;
push.TrayCode = "TPB";
push.TrayType = "TPB";
push.ListInfo = item.Select(q => new ListInfoInfo() { MatBarCode = q.CLBarCode, SpoolCode = q.HWBarCode }).ToList();
var resbody = JsonConvert.DeserializeObject(WmsServiceExportMq(push));
var matBarCode = push.ListInfo.Select(p => p.MatBarCode).ToList();
if (resbody.success == true || resbody.ResCode == 200)
{
_fjService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns()
{
Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
WhereExpression = it => matBarCode.Contains(it.CLBarCode)
});
}
else
{
_fjService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns()
{
Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now, Memo = resbody.ResMsg },
WhereExpression = it => matBarCode.Contains(it.CLBarCode)
});
}
}
return result;
}
///
/// 帘线叫料接口
///
///
///
[HttpPost(Name = "CurtainProductionStockOut")]
public SRes CurtainProductionStockOut(CurtainProductionStockOutRequest reqDto)
{
return ConcurrencyReqControl(lockerCurtainProductionStockOut, "CurtainProductionStockOut" + reqDto.BillCode, reqDto.BillCode, reqDto, _fjService.CurtainProductionStockOut);
}
///
/// 帘线叫料接口(人工码垛托盘)
///
///
///
[HttpPost(Name = "CurtainProductionStockOut1")]
public SRes CurtainProductionStockOut1(CurtainProductionStockOutRequest1 reqDto)
{
return ConcurrencyReqControl(lockerCurtainProductionStockOut1, "CurtainProductionStockOut1" + reqDto.BillCode, reqDto.BillCode, reqDto, _fjService.CurtainProductionStockOut1);
}
///
/// 帘线手动叫料接口
///
///
///
[HttpPost(Name = "ManualCurtainProductionStockOut")]
public SRes ManualCurtainProductionStockOut(ManualCurtainProductionStockOut reqDto)
{
return _fjService.ManualCurtainProductionStockOut(reqDto);
}
///
/// 人工创建满托入库任务
///
///
///
[HttpPost]
public SRes CreateMaterialPalletWarehouTask(CreateMaterialPalletWarehouTaskRequest reqDto)
{
return ConcurrencyReqControl(lockerCreateMaterialPalletWarehouTask, "CreateMaterialPalletWarehouTask", reqDto.SpoolNr, reqDto, _fjService.CreateMaterialPalletWarehouTask);
}
///
/// 人工创建UT满托入库任务
///
///
///
[HttpPost]
public SRes CreateMaterialUTPalletWarehouTask(CreateMaterialPalletWarehouTaskRequest reqDto)
{
return ConcurrencyReqControl(lockerCreateMaterialPalletWarehouTask, "CreateMaterialUTPalletWarehouTask", reqDto.SpoolNr, reqDto, _fjService.CreateMaterialUTPalletWarehouTask);
}
///
/// 芯股满托创建库存信息
///
///
///
[HttpPost]
public SRes CreateMaterialPalletWarehouTask1(CreateMaterialPalletWarehouTask1Request reqDto)
{
return ConcurrencyReqControl(lockerCreateMaterialPalletWarehouTask1, "CreateMaterialPalletWarehouTask1", reqDto.SpoolNr, reqDto, _fjService.CreateMaterialPalletWarehouTask1);
}
///
/// 芯股满托创建库存信息
///
///
///
[HttpPost]
public SRes CreateMaterialPalletWarehouTask2(RewindFullPalletTaskRequest reqDto)
{
return ConcurrencyReqControl(lockerCreateMaterialPalletWarehouTask2, "CreateMaterialPalletWarehouTask2", reqDto.TrayCode, reqDto, _fjService.CreateMaterialPalletWarehouTask2);
}
///
/// 创建退料任务
///
///
///
[HttpPost]
public SRes MaterialReturnTaskCreator(MaterialReturnTaskCreatorRequest reqDto)
{
return ConcurrencyReqControl(lockerMaterialReturnTaskCreator, "lockerMaterialReturnTaskCreator", reqDto.LocCode, reqDto, _fjService.MaterialReturnTaskCreator);
}
///
/// 叫料信息反馈接口
///
///
///
[HttpPost(Name = "CurtainProductionStockOutFeedBack")]
public SRes CurtainProductionStockOutFeedBack()
{
var list = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_StockOut.ToString());
var dtolist = _mapper.Map>(list);
var dto = new CurtainProductionStockOutFeedBackRequest() { ListInfo = dtolist };
SRes resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto));
return ComPushData(resbody, list.Select(p => p.Id).ToList());
}
///
/// 生产退料/余料接口
///
///
///
[HttpPost]
public SRes ProductionBack(FjProductionBackRequest reqDto)
{
return ConcurrencyReqControl(lockerProductionBack, "ProductionBack", reqDto.BillCode, reqDto, _fjService.ProductionBack);
}
///
/// 余料反馈接口
///
///
///
[HttpPost]
public SRes ProductionLeftFeedBack()
{
var list = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_LeftStockIn.ToString());
var dtolist = _mapper.Map>(list);
var dto = new ProductionLeftFeedBackRequest() { ListInfo = dtolist };
SRes resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto));
return ComPushData(resbody, list.Select(p => p.Id).ToList());
}
///
/// 异常料出库单传输接口
///
///
///
[HttpPost]
public SRes ErrorMaterialStockOut(FjErrorMaterialStockOutRequest reqDto)
{
return ConcurrencyReqControl(lockerErrorMaterialStockOut, "ErrorMaterialStockOut", reqDto.BillCode, reqDto, _fjService.ErrorMaterialStockOut);
}
///
/// 异常料出库反馈接口
///
///
///
[HttpPost]
public SRes ErrorMaterialStockOutFeedBack()
{
var list = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_ErrStockOut.ToString());
var dtolist = _mapper.Map>(list);
var dto = new ErrorMaterialStockOutFeedBackRequest() { ListInfo = dtolist };
SRes resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto));
return ComPushData(resbody, list.Select(p => p.Id).ToList());
}
///
/// B站叫料单传输接口
///
///
///
[HttpPost]
public SRes BGradeMaterialStockOut(BGradeMaterialStockOutRequest reqDto)
{
return ConcurrencyReqControl(lockerBGradeMaterialStockOut, "BGradeMaterialStockOut", reqDto.BillCode, reqDto, _fjService.BGradeMaterialStockOut);
}
///
/// B站出库反馈接口
///
///
///
[HttpPost]
public SRes BGradeMaterialStockOutFeedBack()
{
var list = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_BGradeStockOut.ToString());
var dtolist = _mapper.Map>(list);
var dto = new BGradeMaterialStockOutFeedBackRequest() { ListInfo = dtolist };
SRes resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto));
return ComPushData(resbody, list.Select(p => p.Id).ToList());
}
///
/// 库存改判
///
///
///
[HttpPost]
public SRes StockChange(FjStockChangeRequest reqDto)
{
return ConcurrencyReqControl(lockerlockerStockChange, "FJStockChange", reqDto.BillCode, reqDto, _fjService.StockChange);
}
///
/// 改判反馈接口
///
///
///
[HttpPost]
public SRes StockChangeFeedBack()
{
var list = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_StockChanage.ToString());
var dtolist = _mapper.Map>(list);
var dto = new dto.request.fj.StockChangeFeedBackRequest() { ListInfo = dtolist };
SRes resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto));
return ComPushData(resbody, list.Select(p => p.Id).ToList());
}
///
/// 实时库存查询接口
///
///
///
[HttpPost(Name = "GetFJCurStockList")]
public GetFJCurStockListResponse GetFJCurStockList(GetFJCurStockListRequest reqDto)
{
return _fjService.GetCurStockList(reqDto);
}
///
/// 回库反馈接口(出库途中改判的,入库之后再次上传入库信息)
///
///
///
[HttpPost]
public SRes StockChangeStockInFeedBack()
{
var list = _fjService.GetBillPushinfoList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == fjFackbeekType.InterfaceType_FJ_ChanageBack.ToString());
var dtolist = _mapper.Map>(list);
var dto = new StockChangeStockInFeedBackRequest() { ListInfo = dtolist };
SRes resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto));
return resbody;
}
///
/// 人工组盘传输接口
///
///
///
[HttpPost]
public SRes ManualBuildStockTrans(ManualBuildStockTransRequest reqDto)
{
return ConcurrencyReqControl(lockerManualBuildStockTrans, "ManualBuildStockTrans", reqDto.PalletCode, reqDto, _fjService.ManualBuildStockTrans);
}
///
/// 条码信息查询接口
///
///
///
[HttpPost]
public string GetMesBarCodeInfo(string req)
{
return "";
}
///
/// 空托组盘
///
///
///
[HttpPost]
public SRes ManualBuildEmptyStock(ManualBuildEmptyStockRequest reqDto)
{
return ConcurrencyReqControl(lockerManualBuildEmptyStock, "ManualBuildEmptyStock", reqDto.ContGrpBarCode, reqDto, _fjService.ManualBuildEmptyStock);
}
#region 一楼入库任务生成接口
///
/// 一楼空托盘人工入库任务创建
///
///
///
[HttpPost]
public SRes OneFloorWorkerBuildEmptyPalletsStock(FJBuildEmptyPalletsStockRequest reqDto)
{
return ConcurrencyReqControl(lockOneFloorWorkerBuildEmptyPalletsStock, "OneFloorWorkerBuildEmptyPalletsStock", reqDto.StartLoc, reqDto, _fjService.OneFloorWorkerBuildEmptyPalletsStock);
}
#endregion 一楼入库任务生成接口
///
/// 生成组盘任务,空托盘
///
///
///
[HttpPost]
public SRes GroupTask(FJBuildEmptyPalletsStockDto reqDto)
{
return ConcurrencyReqControl(lockGroupTask, "GroupTask", reqDto.StartLoc, reqDto, _fjService.GroupTask);
}
///
/// 整托入库
///
///
///
[HttpPost]
public SRes BingPallet(FJBingPalletDto reqDto)
{
return ConcurrencyReqControl(lockBingPallet, "BingPallet" + reqDto.loc, reqDto.loc, reqDto, _fjService.BingPallet);
}
///
/// 整托入库
///
///
///
[HttpPost]
public SRes GetTwoPallet(FJGetTwoPalletDto reqDto)
{
return ConcurrencyReqControl>(lockGetTwoPallet, "GetTwoPallet", reqDto.WarehouseCode, reqDto, _fjService.GetTwoPallet);
}
///
/// 申请货位
///
///
///
[HttpPost]
public SRes ApplyStockInLoc(FJApplyStockInLocRequest reqDto)
{
return ConcurrencyReqControl>(lockApplyStockInLoc, "ApplyStockInLoc" + reqDto.PickUpEquipmentNo, reqDto.PickUpEquipmentNo, reqDto, _fjService.ApplyStockInLoc);
}
///
/// 平库申请货位
///
///
///
[HttpPost]
public SRes FindAvailableFlatStorageSlot(FJApplyStockInLocRequest reqDto)
{
return ConcurrencyReqControl>(lockFindAvailableFlatStorageSlot, "FindAvailableFlatStorageSlot" + reqDto.PickUpEquipmentNo, reqDto.PickUpEquipmentNo, reqDto, _fjService.FindAvailableFlatStorageSlot);
}
///
/// 空托出库任务
///
///
///
[HttpPost]
public SRes ApplyEmptyPalletGroupOutStorage(FjApplyEmptyPalletGroupOutStorageRequest reqDto)
{
return ConcurrencyReqControl(lockApplyEmptyPalletGroupOutStorage, "ApplyEmptyPalletGroupOutStorage", reqDto.AddTo, reqDto, _fjService.ApplyEmptyPalletGroupOutStorage);
}
///
/// 获取垛型数组
///
///
///
[HttpPost]
public SRes> FjGetSetGrpList(FjGetSetGrpListRequest req)
{
return _fjService.FjGetSetGrpList(req);
}
///
/// 环形库申请货位
///
///
///
[HttpPost]
public SRes RingApplyStockInLoc(FJApplyStockInLocRequest reqDto)
{
return ConcurrencyReqControl>(lockRingApplyStockInLoc, "RingApplyStockInLoc" + "Robot", "Robot", reqDto, _fjService.RingApplyStockInLoc);
}
///
/// WCS申请码垛出库
///
///
///
[HttpPost]
public SRes ApplyPalletizingStockOut(RingApplyPalletizingStockOutRequest reqDto)
{
return ConcurrencyReqControl(lockApplyPalletizingStockOut, "ApplyPalletizingStockOut" + reqDto.WareHouseCode, reqDto.WareHouseCode, reqDto, _fjService.ApplyPalletizingStockOut);
}
///
/// 手动出库
///
///
///
[HttpPost]
public string ManualTask(FJManualTaskRequest request)
{
lock (lockManualTask)
{
return _fjService.ManualTask(request);
}
}
///
/// 堆垛机出库放货完成
///
///
///
[HttpPost]
public SRes SrmPickOutCompleted(SrmPickOutCompletedRequest reqDto)
{
lock (lockerSrmPickOutCompleted)
{
return _fjService.SrmPickOutCompleted(reqDto);
}
}
///
/// 码垛创建异常任务
///
///
///
[HttpPost]
public SRes PalletizingCreateseErrorTasks(PalletizingCreateseErrorTasksRequest reqDto)
{
return ConcurrencyReqControl(palletizingCreateseErrorTasks, "PalletizingCreateseErrorTasks" + reqDto.EquNo, reqDto.EquNo, reqDto, _fjService.PalletizingCreateseErrorTasks);
}
///
/// 获取任务信息
///
/// 条码
///
[HttpPost]
public SRes GetTaskInfo(FJGetTaskInfoRequest dto)
{
return _fjService.GetTaskInfo(dto);
}
///
/// 完成任务
///
///
///
[HttpPost]
public SRes CompleteTask(CompleteTaskRequest reqDto)
{
lock (lockerCompleteTask)
{
return _fjService.CompleteTask(reqDto);
}
}
///
/// 取消任务
///
///
///
[HttpPost]
public SRes CancelTask(CompleteTaskRequest reqDto)
{
lock (lockerCancelTask)
{
return _fjService.CancelTask(reqDto);
}
}
#region 生成货位基础配置
///
/// 分拣自动生成货位信息
///
[HttpPost]
public void FJAutoGenerateLocation()
{
//_fjService.FJ1NorthAutoGenerateLocation();
_fjService.FJSouthAutoGenerateLocation();
}
#endregion 生成货位基础配置
#region 生成货位基础配置
///
/// 分拣环形库自动生成库位
///
[HttpPost]
public void RingLibraryAutoGenerateLocation(string WareCode)
{
_fjService.RingLibraryAutoGenerateLocation(WareCode);
}
#endregion 生成货位基础配置
///
/// 工字轮/芯股进入主线扫码
///
[HttpPost]
public SRes EnteMainLine(FJEnteMainLineRequest reqDto)
{
return ConcurrencyReqControl>(lockFJEnteMainLineRequest, "EnteMainLine" + reqDto.equNo, reqDto.equNo, reqDto, _fjService.EnteMainLine);
}
[HttpPost]
public string GetId()
{
//var list = _fjService.GetBaseMatinfoList(p => p.Id < 1000);
//foreach (var item in list)
//{
// var id = IdFactory.NewId();
// //var tempid = item.Id;
// item.WarehouseId = id;
// _fjService.UpdateMaterModel(item);
//}
return IdFactory.NewId().ToString();
}
#region 数据归档
///
/// 库存流水信息数据归档
///
///
[HttpPost]
public SRes InvFlowMoveToHistory()
{
return ConcurrencyReqControl("InvFlowMoveToHistory", "流水数据归档", _fjService.InvFlowMoveToHistory);
}
#endregion 数据归档
#region 定时器
[HttpPost]
public string StartJob(DetailRequest2Str req)
{
var res = new SRes();
var sysjob = _fjService.GetSysJobEntity(new DetailRequest2Str() { Id = req.Id });
if (sysjob == null)
{
res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
res.ResMsg = "没有找到对应的定时任务";
return res.ToCamelCaseString();
}
JobScheduler.Start(sysjob.Code, Type.GetType("wms.api.Job.PostJob"), sysjob.CronExpression);
return res.ToCamelCaseString();
}
///
/// 执行job
///
///
///
[HttpPost]
public string ExecuteJob(DetailCodeRequest reqEntity)
{
var res = new SRes();
if (string.IsNullOrEmpty(reqEntity.Code))
{
res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
res.ResMsg = "参数错误";
return res.ToCamelCaseString();
}
var jobEntity = _fjService.GetSysJobEntityByCode(reqEntity.Code);
if (jobEntity == null)
{
res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
res.ResMsg = "没有找到该编码";
return res.ToCamelCaseString();
}
var jobapilist = _fjService.GetSysApiDetail(jobEntity.Id);
if (jobapilist.Any())
{
foreach (var item in jobapilist)
{
Task.Run(() => { HttpUtil.PostRequest(item.ApiUrl, item.RequestBody); });
}
}
return res.ToCamelCaseString();
}
///
/// 分页Job列表
///
///
///
[HttpPost]
public List GetSysJobList(GetSysJobListRequest reqEntity)
{
var list = _fjService.GetJobList();
var listdto = _mapper.Map>(list);
if (listdto != null && listdto.Any())
{
for (int i = 0; i < list.Count; i++)
{
listdto[i].JobExecuteStatus = GetExecuteStatus(new DetailCodeRequest() { Code = listdto[i].Code });
}
return listdto;
}
return new List();
}
///
/// 获取执行状态
///
///
///
[HttpPost]
public string GetExecuteStatus(DetailCodeRequest reqEntity)
{
var jobInfo = _fjService.GetSysJobEntityByCode(reqEntity.Code);
var jobs = JobScheduler.GetJobList(Const.JobGroupName).Result;
if (jobs != null)
{
var temp = jobs.Where(p => p.JobName == jobInfo.Code);
if (temp.Any())
{
return temp.First().JobStatus;
}
else
{
return "Stop";
}
}
else
{
return "Stop";
}
}
#endregion 定时器
}
}