using Microsoft.AspNetCore.Mvc;
using ZR.Admin.WebApi.Extensions;
using ZR.Model.mes.pro;
using ZR.Service.mes.pro.IService;
namespace ZR.Admin.WebApi.Controllers.MES.pro
{
[Route("mes/pro/workplan")]
public class ProWorkplanController : BaseController
{
private readonly IProWorkplanService proWorkplanService;
public ProWorkplanController(IProWorkplanService proWorkplanService)
{
this.proWorkplanService = proWorkplanService;
}
///
/// 获取生产计划列表
///
/// 页编号
/// 页大小
/// 年份
/// 周数
/// 零件号
/// 颜色
///
[HttpGet("list")]
public IActionResult List(int pageNum, int pageSize, int year = -1, int week = -1, string partNumber = "", string color = "")
{
(List, int) data = proWorkplanService.GetAllData(pageNum, pageSize, year, week, partNumber, color);
return ToResponse(new ApiResult(200, "success", data));
}
///
/// 新增生产计划
///
/// 生产计划对象
///
[HttpPost("addworkplan")]
public IActionResult AddWorkPlan([FromBody] ProWorkplan proWorkplan)
{
int data = 0;
if (proWorkplan != null)
{
proWorkplan.ToCreate(HttpContext);
data = proWorkplanService.AddWorkPlan(proWorkplan);
}
return ToResponse(new ApiResult(200, "success", data));
}
///
/// 更新生产计划
///
/// 生产计划对象
///
[HttpPost("updateworkplan")]
public IActionResult UpdateWorkPlan([FromBody] ProWorkplan proWorkplan)
{
int data = 0;
if (proWorkplan != null)
{
proWorkplan.ToUpdate(HttpContext);
data = proWorkplanService.UpdateWorkPlan(proWorkplan);
}
return ToResponse(new ApiResult(200, "success", data));
}
///
/// 删除生产计划
///
/// 计划ID
///
[HttpGet("deleteitem/{id}")]
public IActionResult DeleteItem(string id)
{
int data = 0;
if (!string.IsNullOrEmpty(id))
{
data = proWorkplanService.DeleteWorkPlan(id);
}
return ToResponse(new ApiResult(200, "success", data));
}
///
/// 获取生产工单
///
/// 计划ID
///
[HttpGet("getworkorderList/{id}")]
public IActionResult GetWorkorderList(string id)
{
List lst = new List();
if (!string.IsNullOrEmpty(id))
{
lst = proWorkplanService.GetWorkorderListByPlanId(id);
}
return ToResponse(new ApiResult(200, "success", lst));
}
///
/// 新增生产工单
///
/// 生产工单对象
///
[HttpPost("addworkorder")]
public IActionResult AddWorkorder([FromBody] ProWorkorder proWorkorder)
{
// TODO 获取工单对象
// TODO 增加插入时间,插入人员:ToCreate
// TODO 根据工单对象里的计划ID,查询生产计划的数量,判断工单数和要小于等于计划数:能插入,正常返回,0或1;大于,2
int data = 0;
if (proWorkorder != null)
{
proWorkorder.Id = DateTime.Now.ToString("yyyyMMddHHmmss");
string workPlanId = proWorkorder.FkProPlanId;
string workorderId = proWorkorder.Id;
if (!string.IsNullOrEmpty(workPlanId) && !string.IsNullOrEmpty(workorderId))
{
// 查询生产计划对象
List lstWorkplan = proWorkplanService.GetProWorkplanById(workPlanId);
// 查询所有生产工单
List lstWorkorder = proWorkplanService.GetWorkorderListByPlanId(workPlanId);
// 计算所有工单的数量和,生产计划的数量:比较
if (lstWorkplan != null && lstWorkplan.Count == 1)
{
int countWorkplan = int.Parse(lstWorkplan[0].ActualplanNumber.Trim());
// 计算已有工单的计划数
int countWorkorder = 0;
foreach (ProWorkorder item in lstWorkorder)
{
countWorkorder += item.Actualnumber.GetValueOrDefault();
}
// 再加上当前订单计划数
countWorkorder += proWorkorder.Actualnumber.GetValueOrDefault();
// 计划数>0 计划数要大于等于当前工单总数
if (countWorkplan > 0 && (countWorkplan >= countWorkorder))
{
proWorkorder.Partnumber = lstWorkplan[0].Partnumber;
proWorkorder.ToCreate(HttpContext);
data = proWorkplanService.AddWorkorder(proWorkorder);
}
else
{
data = 2;
}
}
}
}
return ToResponse(new ApiResult(200, "success", data));
}
///
/// 更新生产工单
///
/// 生产工单对象
///
[HttpPost("updateworkorder")]
public IActionResult UpdateWorkorder([FromBody] ProWorkorder proWorkorder)
{
// TODO 判断更新的数量是否超过计划数
int data = 0;
if (proWorkorder != null) // 工单对象不为空
{
string workPlanId = proWorkorder.FkProPlanId;
string workorderId = proWorkorder.Id;
// 判断计划ID,工单ID要非空
if (!string.IsNullOrEmpty(workPlanId) && !string.IsNullOrEmpty(workorderId))
{
string isArrange = "0";
// 查询所有生产工单,根据生产计划ID
List lstWorkorder = proWorkplanService.GetWorkorderListByPlanId(workPlanId);
// 找到要更新的工单,要判断当前工单状态
ProWorkorder currentWorkorder = null;
foreach (ProWorkorder item in lstWorkorder)
{
if (item.Id.Equals(workorderId)) // 找到当前工单ID的对象
{
//if(!string.IsNullOrEmpty(item.Wrokerorder_status)) isArrange = item.Isarrange;
isArrange = item.Wrokerorder_status.ToString();
currentWorkorder = item;
break;
}
}
// 状态为未排产状态,才能更新
if ("0".Equals(isArrange))
{
// 查询生产计划对象
List lstWorkplan = proWorkplanService.GetProWorkplanById(workPlanId);
// 计算所有工单的数量和,生产计划的数量:比较
if (lstWorkplan != null && lstWorkplan.Count == 1)
{
int countWorkplan = int.Parse(lstWorkplan[0].ActualplanNumber.Trim()); // 计划数
// 当前所有工单总数
int countWorkorder = 0;
foreach (ProWorkorder item in lstWorkorder)
{
countWorkorder += item.Actualnumber.GetValueOrDefault();
}
if (currentWorkorder != null) countWorkorder -= currentWorkorder.Actualnumber.GetValueOrDefault(); // 减去当前工单的数值
// 再加上要更新的值
countWorkorder += proWorkorder.Actualnumber.GetValueOrDefault();
// 计划数>0 计划数要大于等于当前工单总数
if (countWorkplan > 0 && (countWorkplan >= countWorkorder))
{
proWorkorder.ToUpdate(HttpContext);
data = proWorkplanService.UpdateWorkorder(proWorkorder);
}
else
{
data = 2;
}
}
}
else data = 3;
}
}
return ToResponse(new ApiResult(200, "success", data));
}
///
/// 删除生产工单
///
/// 工单ID
///
[HttpGet("deleteworkorder/{id}")]
public IActionResult DeleteWorkorder(string id)
{
int data = 0;
if (!string.IsNullOrEmpty(id))
{
// 查询所有生产工单,根据生产计划ID
List lstWorkorder = proWorkplanService.GetWorkorderListById(id);
// 查询工单非空,数量必须为1个
if (lstWorkorder != null && lstWorkorder.Count == 1)
{
string isArrange = "0";
// 排产状态非空
isArrange = lstWorkorder[0].Wrokerorder_status.ToString();
// 排产状态为 0 ,可执行删除
if ("0".Equals(isArrange))
{
data = proWorkplanService.DeleteWorkorder(id);
}
else data = 3;
}
}
return ToResponse(new ApiResult(200, "success", data));
}
}
}