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
}
}