2024-12-03 14:35:59 +08:00
|
|
|
|
using DOAN.Admin.WebApi.Filters;
|
|
|
|
|
|
using DOAN.Model;
|
|
|
|
|
|
using DOAN.Model.MES.base_.Dto;
|
2025-12-29 10:23:07 +08:00
|
|
|
|
using DOAN.Model.MES.product;
|
2024-12-03 14:35:59 +08:00
|
|
|
|
using DOAN.Model.MES.product.Dto;
|
2025-12-29 10:23:07 +08:00
|
|
|
|
using DOAN.Service.MES.product.IService;
|
2024-12-03 14:35:59 +08:00
|
|
|
|
using Infrastructure.Converter;
|
2025-12-29 10:23:07 +08:00
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
2024-12-03 14:35:59 +08:00
|
|
|
|
|
|
|
|
|
|
//创建时间:2024-07-16
|
|
|
|
|
|
namespace DOAN.Admin.WebApi.Controllers
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 生产工单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Verify]
|
|
|
|
|
|
[Route("mes/productManagement/ProWorkorder")]
|
|
|
|
|
|
public class ProWorkorderController : BaseController
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 生产工单接口
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private readonly IProWorkorderService _ProWorkorderService;
|
|
|
|
|
|
|
2026-01-30 18:28:21 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 工单物料接口
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private readonly IProWorkorderMaterialService _ProWorkorderMaterialService;
|
|
|
|
|
|
|
2026-02-24 15:36:35 +08:00
|
|
|
|
public ProWorkorderController(
|
|
|
|
|
|
IProWorkorderService ProWorkorderService,
|
|
|
|
|
|
IProWorkorderMaterialService ProWorkorderMaterialService
|
|
|
|
|
|
)
|
2024-12-03 14:35:59 +08:00
|
|
|
|
{
|
|
|
|
|
|
_ProWorkorderService = ProWorkorderService;
|
2026-01-30 18:28:21 +08:00
|
|
|
|
_ProWorkorderMaterialService = ProWorkorderMaterialService;
|
2024-12-03 14:35:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询生产工单列表 启用(9/14)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="parm"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpPost("list")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:list")]
|
|
|
|
|
|
public IActionResult QueryProWorkorder([FromBody] ProWorkorderQueryDto parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
var response = _ProWorkorderService.GetList(parm);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询生产工单列表 启用(9/14) 没有校验
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="parm"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpPost("list_nocheck")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:list")]
|
|
|
|
|
|
public IActionResult QueryProWorkorder_NOCheck([FromBody] ProWorkorderQueryDto parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
parm.WorkorderDate[0] = DOANConvertDate.ConvertLocalDate(parm.WorkorderDate[0]);
|
2026-01-28 17:54:15 +08:00
|
|
|
|
parm.WorkorderDate[1] = DOANConvertDate.ConvertLocalDate(parm.WorkorderDate[1]);
|
|
|
|
|
|
|
2024-12-03 14:35:59 +08:00
|
|
|
|
var response = _ProWorkorderService.GetList_NOCheck(parm);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询生产工单详情
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="Id"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet("{Id}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetProWorkorder(string Id)
|
|
|
|
|
|
{
|
|
|
|
|
|
var response = _ProWorkorderService.GetInfo(Id);
|
|
|
|
|
|
|
|
|
|
|
|
var info = response.Adapt<ProWorkorder>();
|
|
|
|
|
|
return SUCCESS(info);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-01-28 17:54:15 +08:00
|
|
|
|
/// 添加生产工单
|
2024-12-03 14:35:59 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpPost]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:add")]
|
|
|
|
|
|
[Log(Title = "生产工单", BusinessType = BusinessType.INSERT)]
|
|
|
|
|
|
public IActionResult AddProWorkorder([FromBody] ProWorkorderDto parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
var modal = parm.Adapt<ProWorkorder>().ToCreate(HttpContext);
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderService.AddProWorkorder(modal);
|
|
|
|
|
|
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 更新生产工单 启用(9/14)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpPut]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:edit")]
|
2026-02-28 10:37:32 +08:00
|
|
|
|
[Log(Title = "修改工单", BusinessType = BusinessType.UPDATE)]
|
2024-12-03 14:35:59 +08:00
|
|
|
|
public IActionResult UpdateProWorkorder([FromBody] ProWorkorderDto parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
var modal = parm.Adapt<ProWorkorder>().ToUpdate(HttpContext);
|
|
|
|
|
|
var response = _ProWorkorderService.UpdateProWorkorder(modal);
|
|
|
|
|
|
|
|
|
|
|
|
return ToResponse(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 删除生产工单 启用(9/14)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpDelete("{ids}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:delete")]
|
2026-02-28 10:37:32 +08:00
|
|
|
|
[Log(Title = "删除工单", BusinessType = BusinessType.DELETE)]
|
2024-12-03 14:35:59 +08:00
|
|
|
|
public IActionResult DeleteProWorkorder(string ids)
|
|
|
|
|
|
{
|
|
|
|
|
|
string[] idsArr = Tools.SpitStrArrary(ids);
|
2026-01-28 17:54:15 +08:00
|
|
|
|
if (idsArr.Length <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"删除失败Id 不能为空"));
|
|
|
|
|
|
}
|
2024-12-03 14:35:59 +08:00
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderService.Delete(idsArr);
|
|
|
|
|
|
|
|
|
|
|
|
return ToResponse(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
///// <summary>
|
|
|
|
|
|
///// 生成工单号
|
|
|
|
|
|
///// </summary>
|
|
|
|
|
|
///// <param name="parm"></param>
|
|
|
|
|
|
///// <returns>生成工单号 数量 </returns>
|
|
|
|
|
|
//[HttpPost("Generate_workorder")]
|
|
|
|
|
|
//public IActionResult Generate_workorder([FromBody] ProWorkorderQueryDto2 parm)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// if (parm.WorkorderDate <= DateTime.MinValue)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// SUCCESS(null);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// var response = _ProWorkorderService.Generate_workorder(parm);
|
|
|
|
|
|
|
|
|
|
|
|
// return SUCCESS(response);
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 插入工单/或者新增工单 启用(9/14)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="parm"></param>
|
|
|
|
|
|
/// <returns>1成功 0失败</returns>
|
|
|
|
|
|
[HttpPost("insert_workorder")]
|
|
|
|
|
|
[Log(Title = "插入工单/或者新增工单", BusinessType = BusinessType.INSERT)]
|
|
|
|
|
|
public IActionResult Insert_workOrder([FromBody] ProWorkorderDto2 parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (parm == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ProWorkorder newparm = parm.Adapt<ProWorkorder>().ToCreate(HttpContext);
|
|
|
|
|
|
var response = _ProWorkorderService.Insert_workOrder(newparm, parm.next_id);
|
|
|
|
|
|
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 移动工单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id"> 1上 2下</param>
|
|
|
|
|
|
/// <param name="type"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet("move_workorder")]
|
|
|
|
|
|
[Log(Title = "移动工单", BusinessType = BusinessType.INSERT)]
|
|
|
|
|
|
public IActionResult MoveWorkorder(string id, int type)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(id))
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
|
|
|
|
|
var response = _ProWorkorderService.MoveWorkorder(id, type);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 生产工单导入模板下载 workorder 启用(9/14)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet("importTemplate")]
|
2026-01-28 17:54:15 +08:00
|
|
|
|
[Log(
|
|
|
|
|
|
Title = "生产工单导入模板",
|
|
|
|
|
|
BusinessType = BusinessType.EXPORT,
|
|
|
|
|
|
IsSaveRequestData = true,
|
|
|
|
|
|
IsSaveResponseData = false
|
|
|
|
|
|
)]
|
2024-12-03 14:35:59 +08:00
|
|
|
|
[AllowAnonymous]
|
|
|
|
|
|
public IActionResult ImportTemplateExcel()
|
|
|
|
|
|
{
|
|
|
|
|
|
(string, string) result = DownloadImportTemplate("workorder");
|
|
|
|
|
|
return ExportExcel(result.Item2, result.Item1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 导入 启用(9/14)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="formFile">使用IFromFile必须使用name属性否则获取不到文件</param>
|
|
|
|
|
|
/// <returns>导入成功数 若-1 则excel读取异常</returns>
|
|
|
|
|
|
[HttpPost("importData")]
|
2026-01-28 17:54:15 +08:00
|
|
|
|
[Log(
|
|
|
|
|
|
Title = "生产工单导入",
|
|
|
|
|
|
BusinessType = BusinessType.IMPORT,
|
|
|
|
|
|
IsSaveRequestData = false,
|
|
|
|
|
|
IsSaveResponseData = true
|
|
|
|
|
|
)]
|
2024-12-03 14:35:59 +08:00
|
|
|
|
[AllowAnonymous]
|
|
|
|
|
|
public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
|
|
|
|
|
|
{
|
2026-02-09 16:23:13 +08:00
|
|
|
|
try
|
2024-12-03 14:35:59 +08:00
|
|
|
|
{
|
2026-02-09 16:23:13 +08:00
|
|
|
|
if (formFile == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
|
|
|
|
|
int response = _ProWorkorderService.ImportData(formFile, HttpContext.GetName());
|
|
|
|
|
|
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
2024-12-03 14:35:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 分批导入工单,追加工单
|
|
|
|
|
|
[HttpPost("importData_append")]
|
2026-01-28 17:54:15 +08:00
|
|
|
|
[Log(
|
|
|
|
|
|
Title = "生产工单导入",
|
|
|
|
|
|
BusinessType = BusinessType.IMPORT,
|
|
|
|
|
|
IsSaveRequestData = false,
|
|
|
|
|
|
IsSaveResponseData = true
|
|
|
|
|
|
)]
|
2024-12-03 14:35:59 +08:00
|
|
|
|
[AllowAnonymous]
|
|
|
|
|
|
public IActionResult ImportDataAppend([FromForm(Name = "file")] IFormFile formFile)
|
|
|
|
|
|
{
|
2026-02-09 16:23:13 +08:00
|
|
|
|
try
|
2024-12-03 14:35:59 +08:00
|
|
|
|
{
|
2026-02-09 16:23:13 +08:00
|
|
|
|
if (formFile == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
2026-02-24 15:36:35 +08:00
|
|
|
|
int response = _ProWorkorderService.ImportDataAppend(
|
|
|
|
|
|
formFile,
|
|
|
|
|
|
HttpContext.GetName()
|
|
|
|
|
|
);
|
2026-02-09 16:23:13 +08:00
|
|
|
|
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
2024-12-03 14:35:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 工单导出 启用(9/14)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="user"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet("export")]
|
|
|
|
|
|
[Log(Title = "工单导出", BusinessType = BusinessType.EXPORT)]
|
|
|
|
|
|
[AllowAnonymous]
|
|
|
|
|
|
public IActionResult WorkOrderExport([FromQuery] DateTime extportDate)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (extportDate == DateTime.MinValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
2026-01-28 17:54:15 +08:00
|
|
|
|
var list = _ProWorkorderService.WorkOrderExport(extportDate);
|
2024-12-03 14:35:59 +08:00
|
|
|
|
|
2026-01-28 17:54:15 +08:00
|
|
|
|
var result = ExportExcelMini(list, "workorder", "工单列表");
|
2024-12-03 14:35:59 +08:00
|
|
|
|
return ExportExcel(result.Item2, result.Item1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 获取物料
|
|
|
|
|
|
[HttpPost("get_material")]
|
|
|
|
|
|
public IActionResult GetMaterialInfo([FromBody] BaseMaterialListQueryDto5 query)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (query == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
|
|
|
|
|
var response = _ProWorkorderService.GetMaterialInfo(query);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 获取客户
|
|
|
|
|
|
[HttpPost("get_custom")]
|
|
|
|
|
|
public IActionResult GetCustomInfo([FromBody] BaseCustomQueryDto2 parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (parm == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
|
|
|
|
|
var response = _ProWorkorderService.GetCustomInfo(parm);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 获取指定日期工艺路线
|
|
|
|
|
|
[HttpGet("get_process_route")]
|
|
|
|
|
|
public IActionResult GetProcessRoute(DateTime dateTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (dateTime == DateTime.MinValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderService.GetProcessRoute(dateTime);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 获取全部工艺路线 启用(9/14)
|
|
|
|
|
|
[HttpGet("get_all_route")]
|
|
|
|
|
|
public IActionResult GetAllRoute()
|
|
|
|
|
|
{
|
|
|
|
|
|
var response = _ProWorkorderService.GetAllRoute();
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 获取组
|
|
|
|
|
|
//[HttpGet("get_groups")]
|
|
|
|
|
|
//public IActionResult GetGroupList(string route_code,DateTime dateTime)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// if (string.IsNullOrEmpty(route_code)) { return SUCCESS(null); }
|
|
|
|
|
|
// if (dateTime == DateTime.MinValue)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// return SUCCESS(null);
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// var response = _ProWorkorderService.GetGroupList(route_code, dateTime);
|
|
|
|
|
|
// return SUCCESS(response);
|
|
|
|
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
// 启用(9/14)
|
|
|
|
|
|
[HttpGet("get_groups")]
|
|
|
|
|
|
public IActionResult GetGroupList()
|
|
|
|
|
|
{
|
|
|
|
|
|
var response = _ProWorkorderService.GetGroupList();
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 查询BOM 及其所需数量
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询BOM 及其所需数量
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder_num">工单号</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet("search_BOM_num")]
|
|
|
|
|
|
public IActionResult SearchBOMNum(string workorder_num)
|
|
|
|
|
|
{
|
2026-01-28 17:54:15 +08:00
|
|
|
|
if (string.IsNullOrEmpty(workorder_num))
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
2024-12-03 14:35:59 +08:00
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderService.SearchBOMNum(workorder_num);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 工单变更日志
|
|
|
|
|
|
[HttpGet("workorder_log")]
|
2026-01-28 18:44:44 +08:00
|
|
|
|
public IActionResult WorkOrderLog(string workorder)
|
2024-12-03 14:35:59 +08:00
|
|
|
|
{
|
2026-01-28 17:54:15 +08:00
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return SUCCESS(null);
|
|
|
|
|
|
}
|
2026-01-28 18:44:44 +08:00
|
|
|
|
var response = _ProWorkorderService.WorkOrderLog(workorder);
|
2024-12-03 14:35:59 +08:00
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 获取工单进度追溯
|
|
|
|
|
|
[HttpPost("get_workorder_trace_progress")]
|
2026-01-28 17:54:15 +08:00
|
|
|
|
public IActionResult GetWorkorderTraceProgressList([FromBody] ProWorkorderQueryDto query)
|
2024-12-03 14:35:59 +08:00
|
|
|
|
{
|
|
|
|
|
|
query.WorkorderDate[0] = DOANConvertDate.ConvertLocalDate(query.WorkorderDate[0]);
|
|
|
|
|
|
query.WorkorderDate[1] = DOANConvertDate.ConvertLocalDate(query.WorkorderDate[1]);
|
2026-01-28 17:54:15 +08:00
|
|
|
|
if (query == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new Exception("query为空");
|
|
|
|
|
|
}
|
|
|
|
|
|
var response = _ProWorkorderService.GetWorkorderTraceProgressList(query);
|
2024-12-03 14:35:59 +08:00
|
|
|
|
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
2024-12-11 17:24:15 +08:00
|
|
|
|
|
|
|
|
|
|
//TODO 打印机打印工单
|
2026-01-28 17:54:15 +08:00
|
|
|
|
|
2025-04-14 15:48:37 +08:00
|
|
|
|
[HttpPost("print")]
|
2024-12-11 17:24:15 +08:00
|
|
|
|
[AllowAnonymous]
|
2026-02-24 15:36:35 +08:00
|
|
|
|
public IActionResult ExportWorkorderPDF([FromBody] ProWorkorderExportDto param)
|
2024-12-11 17:24:15 +08:00
|
|
|
|
{
|
2025-04-14 15:48:37 +08:00
|
|
|
|
try
|
2024-12-11 17:24:15 +08:00
|
|
|
|
{
|
2025-04-14 15:48:37 +08:00
|
|
|
|
if (param.WorkorderArray == null || param.WorkorderArray.Length < 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(500, "工单列表为空");
|
|
|
|
|
|
}
|
|
|
|
|
|
param.Path = "D:/mes/Label/Trace.btw";
|
|
|
|
|
|
//Task<(string, Stream)> conntext = _ProWorkorderService.ExportPDFByQuestPDFDemo(workorderArray);
|
2026-02-24 15:36:35 +08:00
|
|
|
|
var result = _ProWorkorderService.PrintTicketsByTemplate(param);
|
|
|
|
|
|
if (result == "ok")
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(200, result));
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, result));
|
|
|
|
|
|
}
|
2025-04-14 15:48:37 +08:00
|
|
|
|
//return File(conntext.Result.Item2, "application/pdf", HttpUtility.UrlEncode(conntext.Result.Item1));
|
2024-12-11 17:24:15 +08:00
|
|
|
|
}
|
2025-04-14 15:48:37 +08:00
|
|
|
|
catch (Exception ex)
|
2025-04-10 13:42:12 +08:00
|
|
|
|
{
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
2025-04-10 13:42:12 +08:00
|
|
|
|
}
|
2024-12-11 17:24:15 +08:00
|
|
|
|
}
|
2026-01-30 18:28:21 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取工单生产进度
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet("getWorkorderWithProgress/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetWorkorderWithProgress(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
var response = _ProWorkorderService.GetWorkorderWithProgress(workorder);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
2026-01-30 18:28:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据工单号查询领料清单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns>领料清单数据</returns>
|
|
|
|
|
|
[HttpGet("GetMaterialTakeList/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetMaterialTakeList(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"工单号不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.GetMaterialTakeList(workorder);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
2026-01-30 18:28:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据工单号查询成品入库清单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns>成品入库清单数据</returns>
|
|
|
|
|
|
[HttpGet("GetProductStorageList/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetProductStorageList(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"工单号不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.GetProductStorageList(workorder);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
2026-01-30 18:28:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据工单号查询出货清单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns>出货清单数据</returns>
|
|
|
|
|
|
[HttpGet("GetShipmentList/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetShipmentList(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"工单号不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.GetShipmentList(workorder);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据工单号查询物料库存
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns>物料库存信息列表</returns>
|
|
|
|
|
|
[HttpGet("GetMaterialInventoryList/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetMaterialInventoryList(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"工单号不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.GetMaterialInventoryList(workorder);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 领料接口
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request">领料请求参数</param>
|
|
|
|
|
|
/// <returns>操作结果</returns>
|
|
|
|
|
|
[HttpPost("TakeMaterial")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:edit")]
|
|
|
|
|
|
[Log(Title = "领料操作", BusinessType = BusinessType.UPDATE)]
|
|
|
|
|
|
public IActionResult TakeMaterial([FromBody] MaterialTakeRequestDto request)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (request == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"领料请求参数不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.TakeMaterial(request);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 成品入库接口
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request">成品入库请求参数</param>
|
|
|
|
|
|
/// <returns>操作结果</returns>
|
|
|
|
|
|
[HttpPost("StoreProduct")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:edit")]
|
|
|
|
|
|
[Log(Title = "成品入库操作", BusinessType = BusinessType.UPDATE)]
|
|
|
|
|
|
public IActionResult StoreProduct([FromBody] ProductStorageRequestDto request)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (request == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"成品入库请求参数不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.StoreProduct(request);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 出货接口
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request">出货请求参数</param>
|
|
|
|
|
|
/// <returns>操作结果</returns>
|
|
|
|
|
|
[HttpPost("ShipProduct")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:edit")]
|
|
|
|
|
|
[Log(Title = "出货操作", BusinessType = BusinessType.UPDATE)]
|
|
|
|
|
|
public IActionResult ShipProduct([FromBody] ShipmentRequestDto request)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (request == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"出货请求参数不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.ShipProduct(request);
|
2026-02-10 15:07:59 +08:00
|
|
|
|
if (!response)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, "出货失败!"));
|
|
|
|
|
|
}
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据工单号获取可领料工单清单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns>可领料工单清单</returns>
|
|
|
|
|
|
[HttpGet("GetPickableWorkordersByWorkorder/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetPickableWorkordersByWorkorder(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"工单号不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-24 15:36:35 +08:00
|
|
|
|
var response = _ProWorkorderMaterialService.GetPickableWorkordersByWorkorder(
|
|
|
|
|
|
workorder
|
|
|
|
|
|
);
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据工单号获取可出货订单清单
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns>可出货订单清单</returns>
|
|
|
|
|
|
[HttpGet("GetShippableOrdersByWorkorder/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetShippableOrdersByWorkorder(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"工单号不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-24 15:36:35 +08:00
|
|
|
|
var response = _ProWorkorderMaterialService.GetShippableOrdersByWorkorder(
|
|
|
|
|
|
workorder
|
|
|
|
|
|
);
|
2026-01-31 22:50:21 +08:00
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据工单号查询成品库存
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="workorder">工单号</param>
|
|
|
|
|
|
/// <returns>成品库存信息列表</returns>
|
|
|
|
|
|
[HttpGet("GetProductInventoryList/{workorder}")]
|
|
|
|
|
|
[ActionPermissionFilter(Permission = "productManagement:proworkorder:query")]
|
|
|
|
|
|
public IActionResult GetProductInventoryList(string workorder)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(workorder))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(ApiResult.Error($"工单号不能为空"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var response = _ProWorkorderMaterialService.GetProductInventoryList(workorder);
|
|
|
|
|
|
return SUCCESS(response);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ToResponse(new ApiResult(500, ex.Message));
|
2026-01-30 18:28:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-12-03 14:35:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|