using AutoMapper; using iWareCommon.Common.Entity; using iWareCommon.Utils; using iWareDataCore.BASE.Entity; using iWareDataCore.BASE.Service; using iWareDataCore.TASK.Service; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Web.Hosting; using System.Web.Mvc; using WebWIPAPI.Models; using WebWIPAPI.Properties; using WebWIPAPI.Utils; using static System.Runtime.CompilerServices.RuntimeHelpers; using LogTextHelper = WebWIPAPI.Utils.LogTextHelper; namespace WebWIPAPI.Controllers { /// /// MES对接接口 /// public class MesIntegrController : Controller { /// /// 提供库存信息 /// /// [HttpPost] public ActionResult syncMaterialInfo() { var responseMessage = new ApiResponse>(); try { var msg = ""; var datalist = PlaceMaterialViewService.GetInstance().GetPlacePreview(out msg); datalist = datalist.Where(x => !string.IsNullOrEmpty(x.MaterialCode)).ToList(); if (!string.IsNullOrEmpty(msg)) { responseMessage = new ApiResponse>() { Code = 500, Success = false, Message = "获取异常:" + msg, Data = null, }; } else { responseMessage = new ApiResponse>() { Code = 200, Success = true, Message = "成功", Data = datalist, }; } } catch (Exception ex) { responseMessage = new ApiResponse>() { Code = 500, Success = false, Message = "异常:" + ex.Message, Data = null, }; } //将对象转化为json格式 var responseStr = JsonConvert.SerializeObject(responseMessage); LogTextHelper.WriteLine(Resources.LogDir, "WIPAPI:{0},{1}, {2}", "syncMaterialInfo", "请求参数:" + "", "响应信息;" + responseStr); return Json(responseMessage, JsonRequestBehavior.DenyGet); } /// /// 导入入库单 /// /// /// [HttpPost] public ActionResult importInOrder(List importMaterials) { var responseMessage = new ApiResponse(); var msg = ""; try { #region 验证 if (importMaterials?.Count() == 0) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "数据条数为0", Data = null, }; return ApiResponseHelper.ReturnApiResponse(responseMessage, "importInOrder", ""); } if (importMaterials.Select(x => x.ListNo).Distinct().Count() != 1) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "本次请求单号必须为同一值", Data = null, }; return ApiResponseHelper.ReturnApiResponse(responseMessage, "importInOrder", ""); } if (importMaterials.Select(x => x.Code).Distinct().Count() != 1) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "本次请求中物料号不能重复", Data = null, }; return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); } #endregion #region 业务处理 //第一步:先新增到物料基础表 List materials = new List(); materials = ClassHelper.RotationMapping_Json, List>(importMaterials); MaterialViewService.GetInstance().ImportExcelFromMes(materials, out msg); if (!string.IsNullOrEmpty(msg)) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "新增到物料基础表异常:" + msg, Data = null, }; } else { Thread.Sleep(400);//注意:休眠毫秒,用于数据库事务提交 string typeName = "入库"; List inputmaterials = new List(); inputmaterials = ClassHelper.RotationMapping_Json, List>(importMaterials); handler_importOutOrder(typeName, inputmaterials, out msg); #endregion if (!string.IsNullOrEmpty(msg)) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "生成入库任务异常:" + msg, Data = null, }; } else { responseMessage = new ApiResponse() { Code = 200, Success = true, Message = "成功", Data = null, }; } } } catch (Exception ex) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "异常:" + ex.Message, Data = null, }; } return ApiResponseHelper.ReturnApiResponse(responseMessage, "importInOrder", ""); } ///// ///// 导入出库单-版本1(使用出库单据的版本) ///// ///// ///// //[HttpPost] //public ActionResult importOutOrder(List inputmaterials) //{ // var responseMessage = new ApiResponse(); // try // { // var msg = ""; // #region 验证 // if (inputmaterials?.Count() == 0) // { // responseMessage = new ApiResponse() // { // Code = 500, // Success = false, // Message = "数据条数为0", // Data = null, // }; // return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); // } // if (inputmaterials.Select(x => x.ListNo).Distinct().Count() != 1) // { // responseMessage = new ApiResponse() // { // Code = 500, // Success = false, // Message = "本次请求单号必须为同一值", // Data = null, // }; // return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); // } // #endregion // #region 业务处理 // string typeName = "出库"; // handler_importOutOrder(typeName, inputmaterials, out msg); // #endregion // if (!string.IsNullOrEmpty(msg)) // { // responseMessage = new ApiResponse() // { // Code = 500, // Success = false, // Message = "生成出库任务异常:" + msg, // Data = null, // }; // } // else // { // responseMessage = new ApiResponse() // { // Code = 200, // Success = true, // Message = "成功", // Data = null, // }; // } // } // catch (Exception ex) // { // responseMessage = new ApiResponse() // { // Code = 500, // Success = false, // Message = "异常:" + ex.Message, // Data = null, // }; // } // return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); //} /// /// 导入出库单-版本2(选择库存出库的版本) /// /// /// [HttpPost] public ActionResult importOutOrder(List inputmaterials) { var responseMessage = new ApiResponse(); try { var msg = ""; #region 验证 if (inputmaterials?.Count() == 0) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "数据条数为0", Data = null, }; return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); } if (inputmaterials.Select(x => x.ListNo).Distinct().Count() != 1) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "本次请求单号必须为同一值", Data = null, }; return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); } if (inputmaterials.Select(x => x.Code).Distinct().Count() != 1) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "本次请求中物料号不能重复", Data = null, }; return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); } #endregion #region 业务处理 string typeName = "出库"; handler_OutOrder(inputmaterials, out msg); //handler_importOutOrder(typeName, inputmaterials, out msg); #endregion if (!string.IsNullOrEmpty(msg)) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "生成出库任务异常:" + msg, Data = null, }; } else { responseMessage = new ApiResponse() { Code = 200, Success = true, Message = "成功", Data = null, }; } } catch (Exception ex) { responseMessage = new ApiResponse() { Code = 500, Success = false, Message = "异常:" + ex.Message, Data = null, }; } return ApiResponseHelper.ReturnApiResponse(responseMessage, "importOutOrder", ""); } /// /// 公共导入 入库单或出库单 /// /// /// /// private void handler_importOutOrder(string typeName, List inputmaterials, out string msg) { try { #region 业务处理 msg = ""; //var inputmaterials = InputMaterialService.GetInstance().QueryByParam(new QueryParam { Filter = new Dictionary { { "Status", "未生成" } } }, out msg); if (inputmaterials != null && inputmaterials.Count > 0) { var placeMaterial = PlaceMaterialViewService.GetInstance().QueryByParam(new QueryParam { }, out msg); var inoutdetails = InOutListDetailViewService.GetInstance().QueryByParam(new QueryParam { }, out msg); List codes = new List(); inputmaterials.ForEach(x => codes.Add(x.Code)); List ids = new List(); var materials = InputMaterialService.GetInstance().GetIds(codes); List detail = new List(); if (materials?.Count == 0) { msg = ("物料明细查询为空!"); return; } for (int i = 0; i < materials.Count; i++) { if (typeName == "入库") { if (placeMaterial.Select(x => x.MaterialId).Contains(materials[i].id)) { msg = materials[i].code + "已存在立库中,不能添加到入库单明细中!"; break; } if (inoutdetails.Select(x => x.MaterialId).Contains(materials[i].id)) { msg = materials[i].code + "已存在之前的入库单明细中,不能添加到当前入库单明细中!"; break; } } else { if (!placeMaterial.Select(x => x.MaterialId).Contains(materials[i].id)) { msg = materials[i].code + "不在立库中,不能添加到出库单明细中!"; break; } if (inoutdetails.Select(x => x.MaterialId).Contains(materials[i].id)) { var inoutdeta = inoutdetails.FirstOrDefault(x => x.MaterialId == materials[i].id); if (inoutdeta.TypeName == "出库") { msg = materials[i].name + "已存在之前的出库单明细中,不能添加到当前出库单明细中!"; break; } } } InOutListDetailEntity inoutdetail = new InOutListDetailEntity() { MaterialId = materials[i].id, IsFinish = 0 }; detail.Add(inoutdetail); } if (!string.IsNullOrEmpty(msg)) { return; } InOutListService.GetInstance().CreateListAndDetial( new InOutListEntity { ListNo = inputmaterials.First().ListNo, CreateTime = DateTime.Now, TypeName = typeName, Status = 0, Remark = "", InOutListDetail = detail }, out msg); } else { msg = ("请先确保出入库单物料明细不为空!"); } #endregion } catch (Exception) { throw; } } /// /// 选择库存出库的版本 /// /// /// private void handler_OutOrder(List inputmaterials, out string msg) { msg = ""; //查找库存表中的id var qList = inputmaterials.Select(x => x.Code).ToList(); List ids = PlaceMaterialViewService.GetInstance().GetPlaceMaterialViewsByCodeList(qList, out msg); if (!string.IsNullOrEmpty(msg)) { return; } // List ids = GetSelectedDataKeyIDs(PlaceGrid); if (ids.Count > 0) { int count = MainTaskService.GetInstance().SaveOutMainTask(ids, out msg); if (count > 0) { msg = "出库任务生成成功"; } else if (count == 0) { msg = "出库任务已在任务队列中"; } else { msg = "出库任务生成失败!"; } } else { msg = "请选择要出库的物料"; } //Alert.Show(msg); //WriteLog("库位物料出库" + msg, "库存管理"); } } }