using AutoMapper; using CSRedis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Org.BouncyCastle.Crypto; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using wms.api.Job; using wms.dto; using wms.dto.request; using wms.dto.request.hj; using wms.dto.request.hj.dto; using wms.dto.request.share; using wms.dto.response; using wms.dto.response.hj; using wms.dto.response.share; using wms.service; using wms.service.IService; using wms.sqlsugar; using wms.sqlsugar.model.hj; using wms.util; using wms.util.Check; using wms.util.Ext; using wms.util.Http; namespace wms.api.Controllers { /// /// 合金库控制器 /// [Route("api/[controller]/[action]")] [ApiController] public class HjController : BaseController { private readonly IHJService _hJService; private readonly ILogger _logger; private readonly IMapper _mapper; static object lockerCopperLineReceiveInstr = new object(); static object lockerWetLineBackInApply = new object(); static object lockerStockChange = new object(); static object lockerSpecialPickMaterApply = new object(); static object lockerSyncMaterInfoList = new object(); static object lockerApplyStockOutTask = new object(); static object lockerWetLinePickMaterApply = new object(); static object lockerCompleteTask = new object(); static object lockerApplyStockInLoc = new object(); static object lockerMoveTask = new object(); static object lockerSrmPickOutCompleted = new object(); static object lockWcsUploadInfo = new object(); static object lockerMannel = new object(); static object lockerCarryTask = new object(); static object lockerStockInfo = new object(); static object lockerPdaTaskInfo = new object(); static object lockerCancelOrComplet = new object(); Repository _sysJobrepository => new Repository(); public HjController(IHJService hJService, ILogger logger, IMapper mapper) :base(hJService, logger) { _hJService = hJService; _logger= logger; _mapper = mapper; } #region 业务方法 /// /// 更新任务进程 /// /// /// [HttpPost] public SRes WcsTaskCallBack(WcsTaskCallBackRequest reqEntity) { return _hJService.WcsTaskCallBack(reqEntity); } /// /// 获取巷道 /// /// /// [HttpPost] public SRes GetTunnelPriorityList(GetTunnelPriorityListRequest reqEntity) { return _hJService.GetTunnelPriorityList(reqEntity); } /// /// 分配货位 /// /// /// [HttpPost] public SRes ApplyStockInLoc(ApplyStockInLocRequest reqEntity) { return ConcurrencyReqControl>(lockerApplyStockInLoc, "ApplyStockInLoc" + reqEntity.TunnelNum, "分配货位" + reqEntity.PickUpEquipmentNo, reqEntity, _hJService.ApplyStockInLoc); } /// /// 完成任务 /// /// /// [HttpPost] public SRes CompleteTask(CompleteTaskRequest reqDto) { lock (lockerCompleteTask) { return _hJService.CompleteTask(reqDto); } } /// /// 申请移库任务 /// /// /// [HttpPost] public SRes AddWcsMoveTask(AddWcsMoveTaskRequest reqEntity) { lock (lockerMoveTask) { return _hJService.AddWcsMoveTask(reqEntity); } } /// /// 堆垛机出库放货完成 /// /// /// [HttpPost] public SRes SrmPickOutCompleted(SrmPickOutCompletedRequest reqDto) { lock (lockerSrmPickOutCompleted) { return _hJService.SrmPickOutCompleted(reqDto); } } /// /// WCS信息上传 /// /// /// [HttpPost] public SRes WcsUploadInfo(WcsUploadInfoRequest reqDto) { lock (lockWcsUploadInfo) { //if (reqDto.Weight > 1) //{ // var webBaseUrl = AppSettings.GetConfig("maxweight"); //} return _hJService.WcsUploadInfo(reqDto); } } /// /// 物料主数据推送接口 /// /// /// [HttpPost] public SRes SyncMaterInfoList(HJSyncMaterInfoListRequest reqDto) { var res = new SRes(); if (string.IsNullOrEmpty(reqDto.ReqId)) { res.ResCode = ResponseStatusCodeEnum.NotReqId.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.NotReqId.GetDescription(); return res; } if (reqDto.ListInfo == null || !reqDto.ListInfo.Any()) { res.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription(); return res; } return ConcurrencyReqControl(lockerSyncMaterInfoList, "SyncMaterInfoList", "物料主数据推送" + reqDto.ReqId, reqDto, _hJService.SyncMaterInfo); } /// /// 镀铜满轮入库/550工字轮入库反馈接口 /// /// /// [HttpPost(Name = "CopperLineStockInFeedBack")] public CopperLineStockInFeedBackResponse CopperLineStockInFeedBack(string billcode) { var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode && p.ApiCode == "CopperLineStockInFeedBack" && p.PostResult == 0 ||( p.PostResult == 2 && p.PostNum < 5)); if (!list.Any()) { return new CopperLineStockInFeedBackResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() }; } var dtolist = _mapper.Map>(list); CopperLineStockInFeedBackRequest dto = new CopperLineStockInFeedBackRequest(); dto.ListInfo = dtolist; CopperLineStockInFeedBackResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto)); List ids = list.Select(p => p.Id).ToList(); List doccodelist = list.Select(p => p.BillCode).ToList(); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); //删除单据表数据 _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo)); } else { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); } return resbody; } /// /// 湿拉生产退料/余料反馈接口 /// /// /// [HttpPost(Name = "WetLineBackInFeedBack")] public WetLineBackInFeedBackResponse WetLineBackInFeedBack(string billcode) { var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode && p.ApiCode == "WetLineBackInFeedBack" && p.PostResult == 0 || (p.PostResult == 2 && p.PostNum < 5)); var dtolist = _mapper.Map>(list); var dto = new WetLineBackInFeedBackRequest() { ListInfo = dtolist }; WetLineBackInFeedBackResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dtolist)); List ids = list.Select(p => p.Id).ToList(); List doccodelist = list.Select(p => p.BillCode).ToList(); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); //删除单据表数据 _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo)); } else { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); } return resbody; } /// /// 改判反馈接口 /// /// /// [HttpPost(Name = "StockChangeFeedBack")] public StockChangeFeedBackResponse StockChangeFeedBack(string billcode) { var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode); var dtolist = _mapper.Map>(list); StockChangeFeedBackRequest dto = new StockChangeFeedBackRequest() { BillCode = billcode }; dto.ListInfo = dtolist; StockChangeFeedBackResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto)); List ids = list.Select(p => p.Id).ToList(); List doccodelist = list.Select(p => p.BillCode).ToList(); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); //删除单据表数据 _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo)); } else { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); } return resbody; } /// /// 特殊料反馈接口 /// /// /// [HttpPost(Name = "SpecialPickMaterFeedBack")] public SpecialPickMaterFeedBackResponse SpecialPickMaterFeedBack(string billcode) { var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode && p.ApiCode == "SpecialPickMaterFeedBack" && p.PostResult == 0 || (p.PostResult == 2 && p.PostNum < 5)); var dtolist = _mapper.Map>(list); SpecialPickMaterFeedBackRequest dto = new SpecialPickMaterFeedBackRequest() { ListInfo = dtolist }; SpecialPickMaterFeedBackResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dtolist)); List ids = list.Select(p => p.Id).ToList(); List doccodelist = list.Select(p => p.BillCode).ToList(); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); //删除单据表数据 _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo)); } else { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); } return resbody; } /// /// 移库货位上报MES接口 /// /// /// [HttpPost(Name = "MoveStockFeedBack")] public MoveStockFeedBackResponse MoveStockFeedBack(string billcode) { var list = _hJService.GetBillFeedbackList1(p => p.DocsNo == billcode && p.TypeCode == "MoveStockFeedBack" && p.PostResult == 0 || (p.PostResult == 2 && p.PostQty < 5)); var dtolist = _mapper.Map>(list); MoveStockFeedBackRequest dto = new MoveStockFeedBackRequest() { ListInfo = dtolist }; MoveStockFeedBackResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(dto)); List ids = list.Select(p => p.Id).ToList(); List doccodelist = list.Select(p => p.DocsNo).ToList(); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); } else { //更新推送表数据 _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 }, WhereExpression = it => ids.Contains(it.Id) }); } return resbody; } /// /// 条码信息查询接口 /// /// /// [HttpPost(Name = "GetBarCodeInfo")] public GetBarCodeInfoResponse GetBarCodeInfo(GetBarCodeInfoRequest barcode) { GetBarCodeInfoResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(barcode)); return resbody; } /// /// 镀铜补空/取满指令接收接口(包含550工字轮) /// /// /// [HttpPost(Name = "CopperLineReceiveInstr")] public SRes CopperLineReceiveInstr(CopperLineNewRequest reqDtoList) { var res = new SRes(); if (reqDtoList != null && reqDtoList.data!= null && reqDtoList.data.Any()) { foreach (var reqDto in reqDtoList.data) { res = ConcurrencyReqControl(lockerCopperLineReceiveInstr, "CopperLineReceiveInstr" + reqDto.WbCode, reqDto.WbCode, reqDto, _hJService.CopperLineReceiveInstr); if (res.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode()) { continue; } } } return res; } /// /// 镀铜补空/取满指令接收接口(手持机用) /// /// /// [HttpPost(Name = "PdaCopperLineReceiveInstr")] public SRes PdaCopperLineReceiveInstr(CopperLineRequest reqDto) { return ConcurrencyReqControl(lockerCopperLineReceiveInstr, "CopperLineReceiveInstr" + reqDto.WbCode, reqDto.WbCode, reqDto, _hJService.PdaCopperLineReceiveInstr); } /// /// 申请出库任务 /// /// /// [HttpPost] public ApplyStockOutTaskResponse ApplyStockOutTask(ApplyStockOutTaskRequest reqDto) { var result = new ApplyStockOutTaskResponse(); if (reqDto.OutType == 2) { if (string.IsNullOrEmpty(reqDto.Tunnel)) { return new ApplyStockOutTaskResponse() { ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode(), ResMsg = "巷道值没有传值" }; } var req = new ApplyEmptySpoolRequest() { Tunnel = int.Parse(reqDto.Tunnel),OutEndPostion = reqDto.OutEndPostion }; return ConcurrencyReqControl(lockerApplyStockOutTask, "ApplyStockOutTask" + reqDto.OutEndPostion, reqDto.OutEndPostion, req, _hJService.ApplyEmptySpoolService); } return result; } /// /// 获取巷道空轮数量 /// /// [HttpPost] public SRes GetTunnelEmptyConCount(GetTunnelEmptyConCountRequest reqDto) { return _hJService.GetTunnelEmptyConCount(reqDto); } /// /// 库存改判 /// /// /// [HttpPost(Name = "StockChange")] public StockChangeResponse StockChange(StockChangeRequest reqDto) { return ConcurrencyReqControl(lockerStockChange, "StockChange" + reqDto.BillCode, reqDto.BillCode, reqDto, _hJService.StockChange); } /// /// 特殊出库领料申请接口 /// /// /// [HttpPost(Name = "SpecialPickMaterApply")] public SpecialPickMaterApplyResponse SpecialPickMaterApply(SpecialPickMaterApplyRequest reqDto) { return ConcurrencyReqControl(lockerSpecialPickMaterApply, "SpecialPickMaterApply" + reqDto.MatBarCode, reqDto.MatBarCode, reqDto, _hJService.SpecialPickMaterApply); } /// /// 实时库存查询接口 /// /// /// [HttpPost] public GetCurStockListResponse GetCurStockList(GetCurStockListRequest reqDto) { return _hJService.GetCurStockList(reqDto); } #endregion #region RCS调用接口 /// /// 镀铜一楼res下任务 /// /// /// [HttpPost] public GenAgvSchedulingTaskResponse CopperLineAgvTaskToRcs(GenAgvSchedulingTaskRequest reqDto) { var result = new GenAgvSchedulingTaskResponse(); //GenAgvSchedulingTaskRequest resReq = new GenAgvSchedulingTaskRequest(); var apiurl = wms.util.AppSettings.GetConfig("RcsCreateTaskPushUrl"); var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000); if (string.IsNullOrEmpty(strRes)) { result.message = "返回空"; return result; } return JsonConvert.DeserializeObject(strRes); } /// /// 镀铜一楼res继续任务 /// /// /// [HttpPost] public GenAgvSchedulingTaskResponse CopperLineContinueTaskToRcs(GenAgvSchedulingTaskRequest reqDto) { var result = new GenAgvSchedulingTaskResponse(); //GenAgvSchedulingTaskRequest resReq = new GenAgvSchedulingTaskRequest() //{ }; var apiurl = wms.util.AppSettings.GetConfig("RcsContinuePushUrl"); var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000); if (string.IsNullOrEmpty(strRes)) { result.message = "返回空"; return result; } return JsonConvert.DeserializeObject(strRes); } /// /// 镀铜二楼IWMS下发满轮出库 /// /// /// [HttpPost] public SRes CopperLineAgvTaskStockOutToIWms(CopperLineAgvTaskStockOutToIWmsRequest reqDto) { var result = new SRes(); CopperLineAgvTaskStockOutToIWmsRequest resReq = new CopperLineAgvTaskStockOutToIWmsRequest() { matCode = "", wbCode = "满轮接驳口", inSpoolFull = "1", wetInto = true, wetIntoSpec = false, isSurplus = "", isRework = "", matNo = "", spoolNo = "", gradeCode = "", taskNo = Guid.NewGuid().ToString(), }; var apiurl = wms.util.AppSettings.GetConfig("IWmsStockOutPushUrl"); var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000); if (string.IsNullOrEmpty(strRes)) { //result.message = "返回空"; return result; } return JsonConvert.DeserializeObject(strRes); } /// /// 镀铜二楼IWMS下发空轮/退料/余料入库 /// /// /// [HttpPost] public SRes CopperLineAgvTaskStockInToIWms(CopperLineAgvTaskStockInToIWmsRequest reqDto) { var result = new SRes(); CopperLineAgvTaskStockInToIWmsRequest resReq = new CopperLineAgvTaskStockInToIWmsRequest() { matCode = "", workAreaCode = "11", outSpoolFull = "1", taskNo = Guid.NewGuid().ToString() }; var apiurl = wms.util.AppSettings.GetConfig("IWmsStockInPushUrl"); var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000); if (string.IsNullOrEmpty(strRes)) { //result.message = "返回空"; return result; } return JsonConvert.DeserializeObject(strRes); } /// /// AGV执行回调 /// /// /// [HttpPost] public agvCallbackResponse agvCallback(agvCallbackRequest reqDto) { var res = new agvCallbackResponse() { code = "0",message = "成功" }; return res; } /// /// 复核异常上报接口 /// /// /// [HttpPost] public RfidCheckDiffResponse RfidCheckDiff(RfidCheckDiffRequest request) { var res = new RfidCheckDiffResponse(); //异常 _hJService.RfidCheckDiffService(request); _logger.LogInformation("复核异常上报接口RfidCheckDiff接收数据:" + JsonConvert.SerializeObject(request)); return res; } /// /// 湿拉生产退料/余料/空轮申请接口 /// /// /// [HttpPost] public SRes WetLineBackInApply(WetLineBackInApplyRequest reqDto) { return ConcurrencyReqControl(lockerWetLineBackInApply, "WetLineBackInApply" + reqDto.MatBarCode, reqDto.MatBarCode, reqDto, _hJService.WetLineBackInApplyService); //接收指令 //入库逻辑 //下发wcs任务 } /// /// 湿拉产线领料申请接口WetLinePickMaterApply /// /// /// [HttpPost] public SRes WetLinePickMaterApply(WetLinePickMaterApplyRequest reqDto) { return ConcurrencyReqControl(lockerWetLinePickMaterApply, "WetLinePickMaterApply" + reqDto.MatCode, reqDto.MatCode, reqDto, _hJService.WetLinePickMaterApplyService); } #endregion #region 定时任务业务 /// /// 添加定时任务 /// /// /// [HttpPost] public string AddJob(AddJobRequest request) { request.Id = IdFactory.NewId(); return _hJService.AddJob(request); } /// /// 编辑定时任务 /// /// [HttpPost] public string UpdateJobEntity(AddJobRequest request) { return _hJService.UpdateJobEntity(request); } /// /// 获取job根据id /// /// [HttpPost] public string GetSysJobById(long id) { return JsonConvert.SerializeObject(_hJService.GetSysJobById(id)); } /// /// 启用job /// /// /// [HttpPost] public string StartJob(DetailRequest2Str req) { var res = new SRes(); var sysjob = _sysJobrepository.GetById(req.Id); if (sysjob == null) { res.ResCode = 0; 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 = 0; res.ResMsg = "参数错误"; return res.ToCamelCaseString(); } var jobEntity = _sysJobrepository.GetSingle(p => p.Code == reqEntity.Code); if (jobEntity == null) { res.ResCode = 0; res.ResMsg = "没有找到该编码"; return res.ToCamelCaseString(); } var jobapilist = _hJService.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 = _sysJobrepository.GetList(); 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 = _sysJobrepository.GetFirst(p=>p.Code == 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"; } } [HttpPost] public string GetId() { return IdFactory.NewId().ToString(); } #endregion #region 库存管理 /// /// 手动出库确定 /// /// /// [HttpPost] public string ManualTask(ManualTaskRequest request) { lock (lockerMannel) { return _hJService.ManualTask(request); } } #endregion #region 合金PDA /// /// 合金解绑 /// /// /// [HttpPost] public SRes Unbounding(UnboundRequest request) { return _hJService.Unbounding(request); } #region pda出库 /// /// pda指定出库确定 /// /// /// [HttpPost] public string PdaManualTask(ManualTaskRequest request) { request.BusType = TaskBusType.TaskBusType_HJ_PdaManualOut.GetHashCode().ToString(); return _hJService.ManualTask(request); } /// /// pda质检领料出库确定 /// /// /// [HttpPost] public string PdaQualityTask(ManualTaskRequest request) { request.BusType = TaskBusType.TaskBusType_HJ_QualityOut.GetHashCode().ToString(); return _hJService.ManualTask(request); } /// /// pda呆滞料出库确定 /// /// /// [HttpPost] public string PdaInactionStockTask(ManualTaskRequest request) { request.BusType = TaskBusType.TaskBusType_HJ_DullMaterOut.GetHashCode().ToString(); return _hJService.ManualTask(request); } #endregion /// /// pda单据查询 /// /// /// [HttpPost] public string GetDocumentsAll(DocumentsRequest request) { return _hJService.GetPageDocumentsList(request).ToCamelCaseString(); } /// /// pda单据明细查询(传单号) /// /// /// [HttpPost] public string GetDocumentDetails(DocumentsRequest request) { return _hJService.GetDocumentDetailListByDocsNo(request).ToCamelCaseString(); } /// /// 获取物料信息,根据RFID /// /// /// [HttpPost] public SRes GetMaterInfoByRfid(PdaRfidRequest request) { return _hJService.MaterInfoByRfid(request); } /// /// 提交(组盘) /// /// /// [HttpPost] public string PdaGroupStock(PdaRfidRequest request) { lock (lockerStockInfo) { return _hJService.PdaGroupStock(request); } } /// /// pda 下发任务 /// /// /// [HttpPost] public string PdaInsterInTask(PdaRfidRequest request) { lock (lockerPdaTaskInfo) { return _hJService.PdaInsertTask(request); } } /// /// 获取设备报警信息 /// /// /// [HttpPost] public string GetEquipErrorInfo(ErrorInfoRequest request) { var it = RedisHelper.Get("equoneRGV3"); return it; } /// /// 获取物料报警信息 /// /// /// [HttpPost] public string GetMaterErrorInfo(ErrorInfoRequest request) { return ""; } /// /// 获取业务报警信息 /// /// /// [HttpPost] public string GetBusinessErrorInfo(ErrorInfoRequest request) { return ""; } /// /// agv空轮搬运任务(一楼空轮初始化) /// /// /// [HttpPost] public string AgvTaskInfo(AgvTaskInfoRequest request) { return _hJService.AgvCarryTaskInfo(request); } #endregion /// /// 取消/完成任务验证(只验证不做业务处理,开放wcs系统调用) /// /// /// [HttpPost] public SRes CancelTaskVerify(CancelTaskRequest request) { lock (lockerCancelOrComplet) { return _hJService.CancelTaskVerify(request); } } /// /// 执行任务(开放wcs调用,前端不调用) /// /// /// [HttpPost] public SRes CarryTaskInfo(CancelTaskRequest request) { lock (lockerCarryTask) { return _hJService.CarryTaskInfo(request); } } /// du /// 异常任务的库存处理 /// /// [HttpPost] public SRes GetErrorTaskInfo() { var res = new SRes(); //获取货位锁是出库锁,当前时间差大于等于1 var list = _hJService.GetOutStateList(); //根据条码捞取历史任务表中的数据 var barcode = list.Select(p => p.ContGrpBarCode).ToList(); var task = _hJService.GetTaskHistoryByCode(barcode); if (task.Any()) { foreach (var item in task) { if (item.Type != TaskType.OutDepot) { continue; } if (item.Status != dto.TaskStatus.Finish) { continue; } var info = CompleteTask(new CompleteTaskRequest() { TaskNum = item.ID, OperationType = 2, WCSUpdateName = "wcs" }); if (info.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode()) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return res; } } } return res; } #region 推送数据 /// /// 数据推送接口 /// /// /// [HttpPost] public PushResponse PushErpDate(PushDate request) { var result = new PushResponse(); if (request.init == 1) { //手动推送 if (!request.CLBarCode.Any()) { result.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.ErrParam.GetDescription(); return result; } var list = _hJService.GetPushDatelistMannel(request); if (!list.Any()) { result.ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription(); return result; } if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList().Any()) { PushRequest push = new PushRequest(); var onefloor = list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList(); var info = _mapper.Map>(onefloor); push.list = info; var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(push)); var matBarCode = info.Select(p => p.MatBarCode).ToList(); if (resbody.success == true) { _hJService.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 { _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "手动推送失败", EditTime = DateTime.Now }, WhereExpression = it => matBarCode.Contains(it.CLBarCode) }); } } //退料 //if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_BackStockIn.ToString()).ToList().Any()) //{ // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest(); // var back = _mapper.Map>(list); // back.ForEach(p => // { // p.BusType = "1"; // p.WareName = "合金库"; // }); // wetLineBack.ListInfo = back; // var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(wetLineBack)); // var rfid = back.Select(p => p.RFID).ToList(); // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "手动推送" }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } // else // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } //} ////余料 //if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_LeftStockIn.ToString()).ToList().Any()) //{ // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest(); // var back = _mapper.Map>(list); // back.ForEach(p => // { // p.BusType = "2"; // p.WareName = "合金库"; // }); // wetLineBack.ListInfo = back; // var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(wetLineBack)); // var rfid = back.Select(p => p.RFID).ToList(); // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "手动推送" }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } // else // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } //} } else { //自动推送 var list = _hJService.GetPushDatelistAuto(request); if (!list.Any()) { return new PushResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() }; } if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList().Any()) { var onefloor = list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList(); PushRequest push = new PushRequest(); var info = _mapper.Map>(onefloor); push.list = info; var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(push)); var matBarCode = info.Select(p => p.MatBarCode).ToList(); if (resbody.success == true) { _hJService.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 { _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now }, WhereExpression = it => matBarCode.Contains(it.CLBarCode) }); } } //退料 //if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_BackStockIn.ToString()).ToList().Any()) //{ // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest(); // var back = _mapper.Map>(list); // back.ForEach(p => // { // p.BusType = "1"; // p.WareName = "合金库"; // }); // wetLineBack.ListInfo = back; // var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(wetLineBack)); // var rfid = back.Select(p => p.RFID).ToList(); // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送" }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } // else // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } //} ////余料 //if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_LeftStockIn.ToString()).ToList().Any()) //{ // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest(); // var back = _mapper.Map>(list); // back.ForEach(p => // { // p.BusType = "2"; // p.WareName = "合金库"; // }); // wetLineBack.ListInfo = back; // var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(wetLineBack)); // var rfid = back.Select(p => p.RFID).ToList(); // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送" }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } // else // { // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns() // { // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 }, // WhereExpression = it => rfid.Contains(it.RFIDBarCode) // }); // } //} } return result; } #endregion #region 异常处理 /// /// 强制取消任务 /// /// /// [HttpPost] public SRes ForceCancelTask(WebErrorRequest request) { return _hJService.ForceCancelTask(request); } /// /// 删除库存信息 /// /// /// [HttpPost] public SRes DeleteStockInfo(DetailCodeRequest request) { return _hJService.DeleteStockInfo(request); } /// /// 修改库存状态 /// /// /// [HttpPost] public SRes UpdateStockState(DetailCodeRequestdto request) { return _hJService.UpdateStockState(request); } /// /// 修改货位状态 /// /// /// [HttpPost] public SRes UpdateCellState(DetailCodeRequestdto request) { return _hJService.UpdateCellState(request); } /// /// 货位数据互换 /// /// /// [HttpPost] public SRes DataSwapCell(DataSwapCellRequest request) { return _hJService.DataSwapCell(request); } /// /// 补数据 /// /// /// [HttpPost] public SRes DataBasePatch(DetailCodeRequest request) { return _hJService.DataBasePatch(request); } #endregion } }