using AutoMapper; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using wms.dto; using wms.dto.request; using wms.dto.request.fj; using wms.dto.request.share; using wms.dto.response; using wms.dto.response.fj; using wms.service.IService; using wms.sqlsugar.model.fj; using wms.util.Ext; 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; static object lockerCurtainProductionOrder = new object(); static object lockerCurtainOrderStartCheck = new object(); static object lockerSpoolMaterialInfoTrans = new object(); static object lockerCurtainProductionStockOut = new object(); static object lockerProductionBack = new object(); static object lockerErrorMaterialStockOut = new object(); static object lockerBGradeMaterialStockOut = new object(); static object lockerlockerStockChange = new object(); static object lockerManualBuildStockTrans = new object(); static object lockerBomInfoTrans = new object(); static object lockerWetFormulaInfo = new object(); 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 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(Name = "SyncMachineInfo")] public SyncMachineInfoResponse SyncMachineInfo(SyncMachineInfoRequest reqDto) { SyncMachineInfoResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqDto)); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode() && resbody.ResData != null && resbody.ResData.Any()) { _fjService.SyncMachineInfo(resbody.ResData); } return resbody; } /// /// 湿拉配方信息同步接口 /// /// /// [HttpPost(Name = "WetFormulaInfo")] public SRes WetFormulaInfo(WetFormulaInfoRequest reqDto) { return ConcurrencyReqControl(lockerWetFormulaInfo, "WetFormulaInfo", reqDto.FeedCode, reqDto, _fjService.WetFormulaInfo); } /// /// 帘线生产工单信息传输接口 /// /// /// [HttpPost] public SRes CurtainProductionOrder(CurtainProductionOrderRequest reqDto) { return ConcurrencyReqControl(lockerCurtainProductionOrder, "CurtainProductionOrder", reqDto.BillCode, reqDto, _fjService.CurtainProductionOrder); } /// /// 湿拉工单启动验证 /// /// /// [HttpPost] public SRes CurtainOrderStartCheck(CurtainOrderStartCheckRequest reqDto) { return ConcurrencyReqControl(lockerCurtainOrderStartCheck, "CurtainOrderStartCheck", reqDto.BillCode, reqDto, _fjService.CurtainOrderStartCheck); } /// /// 湿拉工字轮/芯股信息传输接口 /// /// /// [HttpPost] public SRes SpoolMaterialInfoTrans(SpoolMaterialInfoTransRequest reqDto) { return ConcurrencyReqControl(lockerSpoolMaterialInfoTrans, "SpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _fjService.SpoolMaterialInfoTrans); } 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(Name = "CurtainProductionStockOut")] public SRes CurtainProductionStockOut(CurtainProductionStockOutRequest reqDto) { return ConcurrencyReqControl(lockerCurtainProductionStockOut, "CurtainProductionStockOut", reqDto.BillCode, reqDto, _fjService.CurtainProductionStockOut); } /// /// 叫料信息反馈接口 /// /// /// [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 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 ""; } } }