using AutoMapper; using iWareCommon.Common.Entity; using iWareCommon.Utils; using iWareDataCore.BASE.Entity; using iWareDataCore.BASE.Service; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Web.Mvc; using WebWIPAPI.Models; using WebWIPAPI.Properties; using WebWIPAPI.Utils; 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", ""); } #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", ""); } /// /// 导入出库单 /// /// /// [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", ""); } /// /// 公共导入 入库单或出库单 /// /// /// /// 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(); 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; } } } }