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, "库存管理");
}
}
}