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 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);
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 业务处理
//第一步:先新增到物料基础表
List materials = new List();
materials = ClassHelper.RotationMapping, 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, 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,
};
}
//将对象转化为json格式
var responseStr = JsonConvert.SerializeObject(responseMessage);
LogTextHelper.WriteLine(Resources.LogDir, "WIPAPI:{0},{1}, {2}", "importInOrder", "请求参数:" + "", "响应信息;" + responseStr);
return Json(responseMessage, JsonRequestBehavior.DenyGet);
}
///
/// 导入出库单
///
///
///
[HttpPost]
public ActionResult importOutOrder(List inputmaterials)
{
var responseMessage = new ApiResponse();
try
{
var msg = "";
#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,
};
}
//将对象转化为json格式
var responseStr = JsonConvert.SerializeObject(responseMessage);
LogTextHelper.WriteLine(Resources.LogDir, "WIPAPI:{0},{1}, {2}", "importOutOrder", "请求参数:" + "", "响应信息;" + responseStr);
return Json(responseMessage, JsonRequestBehavior.DenyGet);
}
///
/// 公共导入 入库单或出库单
///
///
///
///
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;
}
}
}
}