diff --git a/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs b/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
new file mode 100644
index 00000000..a666855d
--- /dev/null
+++ b/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.BasicData.Entities.Dto
+{
+ ///
+ /// 子工单列表
+ ///
+ public class SubBomListOutput
+ {
+ ///
+ /// 物料id
+ ///
+ public string material_id { get; set; }
+ ///
+ /// 物料编码
+ ///
+ public string material_code { get; set; }
+ ///
+ /// 物料名称
+ ///
+ public string material_name { get; set; }
+ ///
+ /// 物料型号
+ ///
+ public string material_category_code { get; set; }
+ ///
+ ///输出数量
+ ///
+ public int output_qty { get; set; }
+ ///
+ /// 数量
+ ///
+ public string num { get; set;}
+ }
+}
diff --git a/BasicData/Tnb.BasicData.Interfaces/IBasMbomService.cs b/BasicData/Tnb.BasicData.Interfaces/IBasMbomService.cs
index 97007bfc..4f85705e 100644
--- a/BasicData/Tnb.BasicData.Interfaces/IBasMbomService.cs
+++ b/BasicData/Tnb.BasicData.Interfaces/IBasMbomService.cs
@@ -1,7 +1,14 @@
+using Microsoft.AspNetCore.Mvc;
+
namespace Tnb.BasicData.Interfaces
{
public interface IBasMbomService
{
-
+ ///
+ /// idȡӦб
+ ///
+ /// bomid
+ ///
+ Task GetSubMoListByBomId([FromRoute] string bomId);
}
}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData/BasMbomService.cs b/BasicData/Tnb.BasicData/BasMbomService.cs
index 586fc06c..3ae20b9a 100644
--- a/BasicData/Tnb.BasicData/BasMbomService.cs
+++ b/BasicData/Tnb.BasicData/BasMbomService.cs
@@ -13,6 +13,8 @@ using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.BasicData.Interfaces;
using Tnb.BasicData.Entities.Dto;
+using NPOI.OpenXmlFormats.Dml;
+using JNPF.Common.Extension;
namespace Tnb.BasicData
{
@@ -22,15 +24,16 @@ namespace Tnb.BasicData
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)]
[Route("api/[area]/[controller]/[action]")]
[OverideVisualDev(ModelId)]
- public class BasMbomService : IBasMbomService,IOverideVisualDevService,IDynamicApiController, ITransient
+ public class BasMbomService : IBasMbomService, IOverideVisualDevService, IDynamicApiController, ITransient
{
public const string ModelId = "25574817510421";
private readonly ISqlSugarRepository _repository;
private readonly DataBaseManager _dbManager;
private readonly IDictionaryDataService _dictionaryDataService;
private readonly IUserManager _userManager;
+ private readonly ISqlSugarClient _db;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
-
+
public BasMbomService(
ISqlSugarRepository repository,
DataBaseManager dbManager,
@@ -41,10 +44,11 @@ namespace Tnb.BasicData
_dbManager = dbManager;
_userManager = userManager;
_dictionaryDataService = dictionaryDataService;
+ _db = repository.AsSugarClient();
// OverideFuncs.GetAsync = GetInfo;
OverideFuncs.GetListAsync = GetList;
}
-
+
///
/// 生产bom列表
///
@@ -55,14 +59,14 @@ namespace Tnb.BasicData
var db = _repository.AsSugarClient();
Dictionary queryJson = string.IsNullOrEmpty(input.queryJson) ? null : input.queryJson.ToObject>();
string materialInfo = queryJson?["query_info"]?.ToString();
- var list = await db.Queryable((a, b, c,d) => new object[]
+ var list = await db.Queryable((a, b, c, d) => new object[]
{
JoinType.Left, a.material_id == b.id,
JoinType.Left, a.ebom_id == c.id,
JoinType.Left, a.route_id == d.id,
})
- .WhereIF(!string.IsNullOrEmpty(materialInfo),(a,b,c,d)=>b.code.Contains(materialInfo) || b.name.Contains(materialInfo))
- .Select((a, b, c,d) => new MbomListOutput
+ .WhereIF(!string.IsNullOrEmpty(materialInfo), (a, b, c, d) => b.code.Contains(materialInfo) || b.name.Contains(materialInfo))
+ .Select((a, b, c, d) => new MbomListOutput
{
id = a.id,
material_id = b.code + "-" + b.name,
@@ -71,12 +75,41 @@ namespace Tnb.BasicData
ebom_id = c.version,
route_id = d.name,
route_id_id = c.id,
- start_time = a.start_time.Value.ToString("yyyy-MM-dd"),
- end_time = a.start_time.Value.ToString("yyyy-MM-dd"),
- is_first = SqlFunc.IIF(a.is_first==0 , "否","是"),
+ start_time = a.start_time.Value.ToString("yyyy-MM-dd"),
+ end_time = a.start_time.Value.ToString("yyyy-MM-dd"),
+ is_first = SqlFunc.IIF(a.is_first == 0, "否", "是"),
}).ToPagedListAsync(input.currentPage, input.pageSize);
-
- return PageResult.SqlSugarPageResult(list);
+
+ return PageResult.SqlSugarPageResult(list);
+ }
+
+ ///
+ /// 根据bomid获取对应的子bom列表
+ ///
+ ///
+ ///
+ [HttpGet]
+ public async Task GetSubMoListByBomId([FromRoute] string bomId)
+ {
+ if (string.IsNullOrEmpty(bomId)) throw new ArgumentException($"parameter {nameof(bomId)} not be null or empty");
+ var result = await _db.Queryable().LeftJoin((a, b) => a.route_id == b.route_id)
+ .LeftJoin((a, b, c) => b.process_id == c.id)
+ .LeftJoin((a, b, c, d) => c.id == d.process_id)
+ .LeftJoin((a, b, c, d, e) => d.material_id == e.id)
+ .LeftJoin((a, b, c, d, e, f) => e.category_id == f.id)
+ .Where((a, b, c, d, e, f) => a.id == bomId)
+ .Select((a, b, c, d, e, f) => new SubBomListOutput
+ {
+ material_id = e.id,
+ material_code = e.code,
+ material_name = e.name,
+ material_category_code = f.category_code,
+ num = d.num
+ })
+ .Mapper(it => it.output_qty = it.num.ParseToInt())
+ .Distinct()
+ .ToListAsync();
+ return result;
}
///
@@ -87,13 +120,13 @@ namespace Tnb.BasicData
public async Task GetInfo(string id)
{
var db = _repository.AsSugarClient();
- BasMbom mbom = await _repository.GetSingleAsync(x=>x.id==id);
+ BasMbom mbom = await _repository.GetSingleAsync(x => x.id == id);
List processes = await db.Queryable().Where(x => x.mbom_id == id).ToListAsync();
List inputs = await db.Queryable().Where(x => x.mbom_id == id).ToListAsync();
List outputs = await db.Queryable().Where(x => x.mbom_id == id).ToListAsync();
MbomDataOutput mbomDataOutput = new MbomDataOutput();
List mbomProcessOutDtos = new List();
-
+
mbomDataOutput.id = mbom.id;
mbomDataOutput.ebom_id = mbom.ebom_id;
mbomDataOutput.is_first = mbom.is_first;
@@ -105,7 +138,7 @@ namespace Tnb.BasicData
mbomDataOutput.end_time = mbom.end_time;
mbomDataOutput.unit_id = mbom.unit_id;
mbomDataOutput.version = mbom.version;
-
+
foreach (BasMbomProcess process in processes)
{
mbomProcessOutDtos.Add(new MbomProcessOutDto()
@@ -118,13 +151,51 @@ namespace Tnb.BasicData
production_method = process.production_method,
inputs = inputs.Where(x => x.process_id == process.process_id).ToList(),
outputs = outputs.Where(x => x.process_id == process.process_id).ToList(),
-
+
});
}
mbomDataOutput.processes = mbomProcessOutDtos;
return mbomDataOutput;
}
+
+ ///
+ /// 根据物料id获取生产bom
+ ///
+ ///
+ ///
+ /// returns:
+ ///
{
+ ///
bom_id:bomid
+ ///
material_code:物料编码
+ ///
material_name:物料名称
+ ///
start_time:有效开始时间
+ ///
end_time:有效结束时间
+ ///
version:bom版本
+ ///
route_id:工艺路线id
+ ///
route_name:工艺路线名称
+ ///
}
+ ///
+ [HttpGet]
+ public async Task GetMBomListByMaterialId([FromRoute] string materialId)
+ {
+ return await _db.Queryable()
+ .LeftJoin((a, b) => a.material_id == b.id)
+ .LeftJoin((a, b, c) => a.route_id == c.id)
+ .Where((a, b, c) => a.material_id == materialId)
+ .Select((a, b, c) => new
+ {
+ bom_id = a.id,
+ material_code = b.code,
+ material_name = b.name,
+ start_time = a.start_time.HasValue ? a.start_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null,
+ end_time = a.end_time.HasValue ? a.end_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null,
+ version = a.version,
+ route_id = c.id,
+ route_name = c.name,
+ })
+ .ToListAsync();
+ }
///
/// 保存生产bom
///
@@ -133,18 +204,18 @@ namespace Tnb.BasicData
[HttpPost]
public async Task SaveData(MbomSaveDataInput mbomSaveDataInput)
{
- DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
+ DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
//新增
if (string.IsNullOrEmpty(mbomSaveDataInput.id))
{
string mbomId = SnowflakeIdHelper.NextId();
- string orgId = _userManager.GetUserInfo().Result.organizeId;
+ string orgId = _userManager.GetUserInfo().Result.organizeId;
BasMbom mbom = new BasMbom()
{
id = mbomId,
org_id = orgId,
- material_id= mbomSaveDataInput.material_id,
+ material_id = mbomSaveDataInput.material_id,
num = mbomSaveDataInput.num,
unit_id = mbomSaveDataInput.unit_id,
version = mbomSaveDataInput.version,
@@ -156,13 +227,13 @@ namespace Tnb.BasicData
remark = mbomSaveDataInput.remark,
create_id = _userManager.UserId,
create_time = DateTime.Now,
-
+
};
await _repository.InsertAsync(mbom);
List processes = new List();
List inputs = new List();
List outputs = new List();
-
+
foreach (var process in mbomSaveDataInput.processes)
{
string mbomProcessId = SnowflakeIdHelper.NextId();
@@ -170,13 +241,13 @@ namespace Tnb.BasicData
{
id = mbomProcessId,
org_id = orgId,
- mbom_id= mbomId,
+ mbom_id = mbomId,
process_id = process.process_id,
preparation_time = process.preparation_time,
station = process.station,
byproduct_status = process.byproduct_status,
production_method = process.production_method,
-
+
});
if (process.inputs != null)
@@ -220,12 +291,12 @@ namespace Tnb.BasicData
{
await _repository.AsSugarClient().Insertable(processes).ExecuteCommandAsync();
}
-
+
if (inputs.Count > 0)
{
await _repository.AsSugarClient().Insertable(inputs).ExecuteCommandAsync();
}
-
+
if (outputs.Count > 0)
{
await _repository.AsSugarClient().Insertable(outputs).ExecuteCommandAsync();
@@ -233,11 +304,11 @@ namespace Tnb.BasicData
}
else//修改
{
- string orgId = _userManager.GetUserInfo().Result.organizeId;
- await _repository.UpdateAsync(x=>new BasMbom()
+ string orgId = _userManager.GetUserInfo().Result.organizeId;
+ await _repository.UpdateAsync(x => new BasMbom()
{
// org_id = orgId,
- material_id= mbomSaveDataInput.material_id,
+ material_id = mbomSaveDataInput.material_id,
num = mbomSaveDataInput.num,
unit_id = mbomSaveDataInput.unit_id,
version = mbomSaveDataInput.version,
@@ -249,12 +320,12 @@ namespace Tnb.BasicData
remark = mbomSaveDataInput.remark,
modify_id = _userManager.UserId,
modify_time = DateTime.Now,
-
- },x=>x.id==mbomSaveDataInput.id);
+
+ }, x => x.id == mbomSaveDataInput.id);
List processes = new List();
List inputs = new List();
List outputs = new List();
-
+
foreach (var process in mbomSaveDataInput.processes)
{
string mbomProcessId = SnowflakeIdHelper.NextId();
@@ -262,13 +333,13 @@ namespace Tnb.BasicData
{
id = mbomProcessId,
org_id = orgId,
- mbom_id= mbomSaveDataInput.id,
+ mbom_id = mbomSaveDataInput.id,
process_id = process.process_id,
preparation_time = process.preparation_time,
station = process.station,
byproduct_status = process.byproduct_status,
production_method = process.production_method,
-
+
});
if (process.inputs != null)
@@ -306,28 +377,28 @@ namespace Tnb.BasicData
});
}
}
-
+
}
- await _repository.AsSugarClient().Deleteable().Where(x=>x.mbom_id==mbomSaveDataInput.id).ExecuteCommandAsync();
- await _repository.AsSugarClient().Deleteable().Where(x=>x.mbom_id==mbomSaveDataInput.id).ExecuteCommandAsync();
- await _repository.AsSugarClient().Deleteable().Where(x=>x.mbom_id==mbomSaveDataInput.id).ExecuteCommandAsync();
+ await _repository.AsSugarClient().Deleteable().Where(x => x.mbom_id == mbomSaveDataInput.id).ExecuteCommandAsync();
+ await _repository.AsSugarClient().Deleteable().Where(x => x.mbom_id == mbomSaveDataInput.id).ExecuteCommandAsync();
+ await _repository.AsSugarClient().Deleteable().Where(x => x.mbom_id == mbomSaveDataInput.id).ExecuteCommandAsync();
if (processes.Count > 0)
{
await _repository.AsSugarClient().Insertable(processes).ExecuteCommandAsync();
}
-
+
if (inputs.Count > 0)
{
await _repository.AsSugarClient().Insertable(inputs).ExecuteCommandAsync();
}
-
+
if (outputs.Count > 0)
{
await _repository.AsSugarClient().Insertable(outputs).ExecuteCommandAsync();
}
}
-
+
});
if (!result.IsSuccess)
@@ -340,7 +411,7 @@ namespace Tnb.BasicData
{
throw Oops.Oh(ErrorCode.COM1000);
}
-
+
}
return result.IsSuccess ? "保存成功" : result.ErrorMessage;
}
diff --git a/EquipMgr/Tnb.EquipMgr.Interfaces/IToolMoldMaintainPlanRunService.cs b/EquipMgr/Tnb.EquipMgr.Interfaces/IToolMoldMaintainPlanRunService.cs
new file mode 100644
index 00000000..0c482f04
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr.Interfaces/IToolMoldMaintainPlanRunService.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.EquipMgr.Interfaces
+{
+ public interface IToolMoldMaintainPlanRunService
+ {
+ }
+}
diff --git a/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRuleService.cs b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRuleService.cs
index 73803225..3581442a 100644
--- a/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRuleService.cs
+++ b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRuleService.cs
@@ -83,111 +83,7 @@ namespace Tnb.EquipMgr
})
.ToListAsync();
}
- [HttpGet]
- public async Task GetMaintainInfoFromByPlanId([FromRoute] string planId)
- {
- dynamic info = new ExpandoObject();
- var planMoldRelation = await _db.Queryable().FirstAsync(it => it.id == planId);
- if (planMoldRelation != null)
- {
- var mold = await _db.Queryable().FirstAsync(it => it.id == planMoldRelation.mold_id);
- if (mold != null)
- {
- info.mold_code = mold.mold_code;
- info.mold_name = mold.mold_name;
- var moldEqpRelation = await _db.Queryable().FirstAsync(it => it.mold_id == mold.id);
- if (moldEqpRelation != null)
- {
- var eqp = await _db.Queryable().FirstAsync(it => it.id == moldEqpRelation.equipment_id);
- info.eqp_code = eqp.code;
- info.eqp_name = eqp.name;
- }
- var itemGroupRelation = await _db.Queryable().FirstAsync(it => it.mold_id == mold.id);
- if (itemGroupRelation != null)
- {
- var itemGroup = await _db.Queryable().FirstAsync(it => it.id == itemGroupRelation.item_group_id);
- if (itemGroup != null)
- {
- info.item_group_name = itemGroup.name;
- }
- var itemRelation = await _db.Queryable().FirstAsync(it => it.item_group_id == itemGroupRelation.item_group_id);
- if (itemRelation != null)
- {
- var checkItem = await _db.Queryable().FirstAsync(it => it.id == itemRelation.item_id);
- if (checkItem != null)
- {
- info.item_name = checkItem.name;
- }
- }
- }
- }
- }
- return info;
- }
-
- ///
- /// 模具保养计划执行-开始模具保养
- ///
- ///
- /// {
- /// plan_id:执行计划id
- /// }
- ///
- ///
- [HttpPost]
- public async Task MaintainStart(MoldMaintainRunUpInput input)
- {
- try
- {
- await _db.Ado.BeginTranAsync();
-
- var dic = await _dictionaryDataService.GetDicByTypeId(DictConst.MaintainStatusTypeId);
- var plan = await _db.Queryable().FirstAsync(it => it.id == input.plan_id);
- if (plan != null)
- {
- plan.status = DictConst.MoldMaintainStatusDBYCode;
- var row = await _db.Updateable(plan).ExecuteCommandAsync();
- if (row < 1) throw Oops.Oh(ErrorCode.COM1001);
- ToolMoldMaintainRunRecord record = new();
- record.plan_code = plan.plan_code;
- record.mode = plan.mode;
- record.plan_status = dic.ContainsKey(plan.plan_code) ? dic[plan.plan_code].ToString() : "";
- record.designer = _userManager.RealName;
- record.designer_time = DateTime.Now;
- var moldPlanRelation = await _db.Queryable().FirstAsync(it => it.maintain_plan_id == input.plan_id);
- if (moldPlanRelation != null)
- {
- var mold = await _db.Queryable().FirstAsync(it => it.id == moldPlanRelation.mold_id);
- record.mold_code = mold?.mold_code;
- record.mold_name = mold?.mold_name;
- var moldGroupRelation = await _db.Queryable().FirstAsync(it => it.mold_id == mold.id);
- if (moldGroupRelation != null)
- {
- var maintainGroup = await _db.Queryable().FirstAsync(it => it.id == moldGroupRelation.item_group_id);
- record.group_name = maintainGroup.name;
- var itemGrpRelation = await _db.Queryable().FirstAsync(it => it.item_group_id == maintainGroup.id);
- if (itemGrpRelation != null)
- {
- var checkItem = await _db.Queryable().FirstAsync(it => it.id == itemGrpRelation.item_id);
- record.check_item_name = checkItem.name;
- }
- }
- }
- record.plan_start_time = DateTime.Now;
- row = await _db.Insertable(record).ExecuteCommandAsync();
- if (row < 1) throw Oops.Oh(ErrorCode.COM1001);
-
- await _db.Ado.CommitTranAsync();
- }
- }
- catch (Exception ex)
- {
- Log.Error("开始模具保养失败", ex);
- await _db.Ado.RollbackTranAsync();
- throw;
- }
-
- }
+
///
/// 关联模具
diff --git a/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRunService.cs b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRunService.cs
new file mode 100644
index 00000000..12db28d5
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRunService.cs
@@ -0,0 +1,162 @@
+using System;
+using System.Collections.Generic;
+using System.Dynamic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Aspose.Cells.Drawing;
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Enums;
+using JNPF.DependencyInjection;
+using JNPF.DynamicApiController;
+using JNPF.FriendlyException;
+using JNPF.Logging;
+using JNPF.Systems.Interfaces.System;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using Tnb.BasicData;
+using Tnb.EquipMgr.Entities;
+using Tnb.EquipMgr.Entities.Dto;
+using Tnb.EquipMgr.Interfaces;
+
+namespace Tnb.EquipMgr
+{
+ [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
+ [Route("api/[area]/[controller]/[action]")]
+
+ public class ToolMoldMaintainPlanRunService : IToolMoldMaintainPlanRunService, IDynamicApiController, ITransient
+ {
+ private readonly ISqlSugarClient _db;
+ private readonly IUserManager _userManager;
+ private readonly IDictionaryDataService _dictionaryDataService;
+
+ public ToolMoldMaintainPlanRunService(ISqlSugarRepository repository, IUserManager userManager, IDictionaryDataService dictionaryDataService)
+ {
+ _db = repository.AsSugarClient();
+ _userManager = userManager;
+ _dictionaryDataService = dictionaryDataService;
+ }
+
+
+ ///
+ /// 根据计划id,获取相关联模具、设备、保养项目组、保养项,信息
+ ///
+ ///
+ ///
+ [HttpGet]
+ public async Task GetMaintainInfoFromByPlanId([FromRoute] string planId)
+ {
+ dynamic info = new ExpandoObject();
+ var planMoldRelation = await _db.Queryable().FirstAsync(it => it.id == planId);
+ if (planMoldRelation != null)
+ {
+ var mold = await _db.Queryable().FirstAsync(it => it.id == planMoldRelation.mold_id);
+ if (mold != null)
+ {
+ info.mold_code = mold.mold_code;
+ info.mold_name = mold.mold_name;
+ var moldEqpRelation = await _db.Queryable().FirstAsync(it => it.mold_id == mold.id);
+ if (moldEqpRelation != null)
+ {
+ var eqp = await _db.Queryable().FirstAsync(it => it.id == moldEqpRelation.equipment_id);
+ info.eqp_code = eqp.code;
+ info.eqp_name = eqp.name;
+ }
+ var itemGroupRelation = await _db.Queryable().FirstAsync(it => it.mold_id == mold.id);
+ if (itemGroupRelation != null)
+ {
+ var itemGroup = await _db.Queryable().FirstAsync(it => it.id == itemGroupRelation.item_group_id);
+ if (itemGroup != null)
+ {
+ info.item_group_name = itemGroup.name;
+ }
+ var itemRelation = await _db.Queryable().FirstAsync(it => it.item_group_id == itemGroupRelation.item_group_id);
+ if (itemRelation != null)
+ {
+ var checkItem = await _db.Queryable().FirstAsync(it => it.id == itemRelation.item_id);
+ if (checkItem != null)
+ {
+ info.item_name = checkItem.name;
+ }
+ }
+ }
+ }
+ }
+ return info;
+ }
+
+ ///
+ /// 模具保养计划执行-开始模具保养
+ ///
+ ///
+ /// {
+ /// plan_id:执行计划id
+ /// }
+ ///
+ ///
+ [HttpPost]
+ public async Task MaintainStart(MoldMaintainRunUpInput input)
+ {
+ try
+ {
+ await _db.Ado.BeginTranAsync();
+
+ var dic = await _dictionaryDataService.GetDicByTypeId(DictConst.MaintainStatusTypeId);
+ var plan = await _db.Queryable().FirstAsync(it => it.id == input.plan_id);
+ if (plan != null)
+ {
+ plan.status = DictConst.MoldMaintainStatusDBYCode;
+ var row = await _db.Updateable(plan).ExecuteCommandAsync();
+ if (row < 1) throw Oops.Oh(ErrorCode.COM1001);
+ ToolMoldMaintainRunRecord record = new();
+ record.plan_code = plan.plan_code;
+ record.mode = plan.mode;
+ record.plan_status = dic.ContainsKey(plan.plan_code) ? dic[plan.plan_code].ToString() : "";
+ record.designer = _userManager.RealName;
+ record.designer_time = DateTime.Now;
+ var moldPlanRelation = await _db.Queryable().FirstAsync(it => it.maintain_plan_id == input.plan_id);
+ if (moldPlanRelation != null)
+ {
+ var mold = await _db.Queryable().FirstAsync(it => it.id == moldPlanRelation.mold_id);
+ record.mold_code = mold?.mold_code;
+ record.mold_name = mold?.mold_name;
+ var moldGroupRelation = await _db.Queryable().FirstAsync(it => it.mold_id == mold.id);
+ if (moldGroupRelation != null)
+ {
+ var maintainGroup = await _db.Queryable().FirstAsync(it => it.id == moldGroupRelation.item_group_id);
+ record.group_name = maintainGroup.name;
+ var itemGrpRelation = await _db.Queryable().FirstAsync(it => it.item_group_id == maintainGroup.id);
+ if (itemGrpRelation != null)
+ {
+ var checkItem = await _db.Queryable().FirstAsync(it => it.id == itemGrpRelation.item_id);
+ record.check_item_name = checkItem.name;
+ }
+ }
+ }
+ record.plan_start_time = DateTime.Now;
+ row = await _db.Insertable(record).ExecuteCommandAsync();
+ if (row < 1) throw Oops.Oh(ErrorCode.COM1001);
+
+ await _db.Ado.CommitTranAsync();
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Error("开始模具保养失败", ex);
+ await _db.Ado.RollbackTranAsync();
+ throw;
+ }
+
+ }
+ ///
+ /// 模具保养计划执行-保养完成
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task MaintainFinish(MoldMaintainRunUpInput input)
+ {
+
+ }
+ }
+}
diff --git a/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainTaskService.cs b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainTaskService.cs
index 73299f32..d1250d59 100644
--- a/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainTaskService.cs
+++ b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainTaskService.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells.Drawing;
+using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.DependencyInjection;
@@ -47,9 +48,11 @@ namespace Tnb.EquipMgr
_runService = runService;
_visualDevService = visualDevService;
OverideFuncs.GetListAsync = GetList;
+ //OverideFuncs.CreateAsync = Create;
}
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
+
private async Task GetList(VisualDevModelListQueryInput input)
{
if (_dicMold.Count < 1)
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ClosedownHistoryOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ClosedownHistoryOutput.cs
index b1890e52..3f1a6658 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ClosedownHistoryOutput.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ClosedownHistoryOutput.cs
@@ -8,14 +8,22 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
{
public class ClosedownHistoryOutput
{
+ ///
+ /// 设备编码
+ ///
+ public string eqp_code { get; set; }
+ ///
+ /// 设备名称
+ ///
+ public string eqp_name { get; set; }
///
/// 停机开始时间
///
- public DateTime? closedown_start_time { get; set; }
+ public string? closedown_start_time { get; set; }
///
/// 停机结束时间
///
- public DateTime? closedown_end_time { get; set; }
+ public string? closedown_end_time { get; set; }
///
/// 停机时间
///
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/GenSubMoCrInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/GenSubMoCrInput.cs
new file mode 100644
index 00000000..aa6b1f76
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/GenSubMoCrInput.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
+{
+ public class GenSubMoCrInput
+ {
+ ///
+ /// 父工单id
+ ///
+ public string mo_id { get; set; }
+ ///
+ /// 子物料ids
+ ///
+ public List ids { get; set; }
+
+ }
+
+ //public class SubMo
+ //{
+ // ///
+ // /// 物料id
+ // ///
+ // public string material_id { get; set; }
+ // ///
+ // /// 物料编码
+ // ///
+ // public string material_code { get; set; }
+ // ///
+ // /// 物料名称
+ // ///
+ // public string material_name { get; set; }
+ // ///
+ // /// 物料型号
+ // ///
+ // public string material_category_code { get; set; }
+ // ///
+ // ///输出数量
+ // ///
+ // public int output_qty { get; set; }
+ //}
+}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMotreeOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMotreeOutput.cs
new file mode 100644
index 00000000..f274fe7c
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMotreeOutput.cs
@@ -0,0 +1,128 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JNPF.Common.Security;
+
+namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
+{
+ public class PrdMotreeOutput : TreeModel
+ {
+ public string? org_id { get; set; }
+ ///
+ /// 工单id
+ ///
+
+ public string mo_id { get; set; }
+
+ ///
+ /// 工单代码
+ ///
+ public string mo_code { get; set; } = string.Empty;
+
+ ///
+ /// 物料编号
+ ///
+ public string? material_code { get; set; }
+
+ ///
+ /// 工单类型:1-正常工单、2-返工工单、3-试制工单
+ ///
+ public string? mo_type { get; set; }
+
+ ///
+ /// 生产状态 Initial: 初始, Confirm:确认 Release: 下发, Open: 生产中, Close: 关单, Pending: 暂停
+ ///
+ public string? mo_status { get; set; }
+
+ ///
+ /// 计划生产数量
+ ///
+ public int? plan_qty { get; set; }
+
+ ///
+ /// 已投入数量
+ ///
+ public int? input_qty { get; set; }
+
+ ///
+ /// 已完工数量
+ ///
+ public int? complete_qty { get; set; }
+
+ ///
+ /// 报废数量
+ ///
+ public int? scrap_qty { get; set; }
+
+ ///
+ /// 计划开始时间
+ ///
+ public DateTime? plan_start_date { get; set; }
+
+ ///
+ /// 计划结束时间
+ ///
+ public DateTime? plan_end_date { get; set; }
+
+ ///
+ /// 是否生派工单
+ ///
+ public int? is_create_dispatch { get; set; }
+
+
+ ///
+ /// 产线代码
+ ///
+ public string? production_linecode { get; set; }
+
+ ///
+ /// 是否合并
+ ///
+ public int? is_merge { get; set; }
+
+ ///
+ /// 组合工单
+ ///
+ public string? combine_mo_code { get; set; }
+
+ ///
+ /// 时间戳
+ ///
+ public string? time_stamp { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 修改用户
+ ///
+ public string? modify_id { get; set; }
+
+ ///
+ /// 修改时间
+ ///
+ public DateTime? modify_time { get; set; }
+ ///
+ /// 物料ID
+ ///
+ public string? material_id { get; set; }
+
+ ///
+ /// 已排产数量
+ ///
+ public int? scheduled_qty { get; set; }
+ ///
+ /// 父工单id
+ ///
+ public string parent_id { get; set; }
+ }
+}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMo.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMo.cs
index 82a83bbb..4a2a743f 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMo.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMo.cs
@@ -218,5 +218,9 @@ public partial class PrdMo : BaseEntity
/// 已排产数量
///
public int? scheduled_qty { get; set; }
+ ///
+ /// 父工单id
+ ///
+ public string parent_id { get; set; }
}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs
index b38d7411..7238c247 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs
@@ -139,15 +139,17 @@ namespace Tnb.ProductionMgr
{
var pagedList = await _db.Queryable()
.WhereIF(!string.IsNullOrEmpty(input.eqpName), it => it.eqp_name.Contains(input.eqpName))
- .WhereIF(input.beginTime.HasValue, it => it.closedown_start_time.Value == input.beginTime)
- .WhereIF(input.endTime.HasValue, it => it.closedown_end_time.Value == input.endTime)
+ .WhereIF(input.beginTime.HasValue, it => it.closedown_start_time.Value >= input.beginTime)
+ .WhereIF(input.endTime.HasValue, it => it.closedown_start_time.Value <= input.endTime)
.Select(it => new ClosedownHistoryOutput
{
- closedown_start_time = it.closedown_start_time,
- closedown_end_time = it.closedown_end_time,
+ eqp_code = it.eqp_code,
+ eqp_name = it.eqp_name,
+ closedown_start_time = it.closedown_start_time.HasValue ? it.closedown_start_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null,
+ closedown_end_time = it.closedown_end_time.HasValue ? it.closedown_end_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null,
closedown_time = it.closedown_time,
})
- .ToPagedListAsync(input.currentPage, input.pageSize);
+ .ToListAsync();
return pagedList;
}
///
@@ -216,8 +218,9 @@ namespace Tnb.ProductionMgr
var mold = await _moldService.GetListById(moldId);
var maintaindTask = new ToolMoldMaintainTask();
maintaindTask.mold_id = moldId;
- maintaindTask.code = DictConst.MaintainStatusDWXCode;
+ maintaindTask.code = mold.mold_code;
maintaindTask.create_id = _userManager.UserId;
+ maintaindTask.status = DictConst.UnMaintainStatusCode;
maintaindTask.create_time = DateTime.Now;
await _maintainTaskService.Create(maintaindTask);
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs
index 314e66d1..e080b375 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs
@@ -49,6 +49,7 @@ namespace Tnb.ProductionMgr
private readonly IDictionaryDataService _dictionaryDataService;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
+ private readonly ISqlSugarClient _db;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
@@ -67,6 +68,7 @@ namespace Tnb.ProductionMgr
_dictionaryDataService = dictionaryDataService;
_runService = runService;
_visualDevService = visualDevService;
+ _db = _repository.AsSugarClient();
OverideFuncs.GetListAsync = GetList;
}
@@ -89,7 +91,7 @@ namespace Tnb.ProductionMgr
{
row.Add("material_name", material.name);
row.Add($"material_attribute", material.attribute);
-
+
}
}
}
@@ -241,6 +243,8 @@ namespace Tnb.ProductionMgr
.ExecuteCommandHasChangeAsync();
}
+
+
#endregion
}
}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
index dc5a47f2..cbcea7c3 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
@@ -466,6 +466,35 @@ namespace Tnb.ProductionMgr
.ToListAsync();
return result;
}
+ ///
+ /// 获取组装、包装 待排产工单树形列表
+ ///
+ ///
+ [HttpGet]
+ public async Task GetUnSchedulingList()
+ {
+ List trees = new();
+ var list = await _db.Queryable().Where(it => string.IsNullOrEmpty(it.parent_id) && it.mo_status == DictConst.ScheduledId).ToListAsync();
+ foreach (var item in list)
+ {
+ var node = item.Adapt();
+ node.mo_id = item.id;
+ node.id = SnowflakeIdHelper.NextId();
+ node.parentId = "0";
+ var items = await _db.Queryable().Where(it => it.parent_id == item.id).ToListAsync();
+ if (items?.Count() > 0)
+ {
+ var childNodes = items.Adapt>();
+ for (int i = 0; i < items.Count; i++)
+ {
+ childNodes[i].mo_id = items[i].id;
+ }
+ trees.AddRange(childNodes);
+ }
+ trees.Add(node);
+ }
+ return trees.ToTree();
+ }
#endregion
@@ -653,6 +682,24 @@ namespace Tnb.ProductionMgr
taskLog.mo_task_id = moTask.id;
taskLog.mo_task_code = moTask.mo_task_code!;
row = await _db.Insertable(taskLog).ExecuteCommandAsync();
+ //将生产任务插入到自检报废记录表
+ //var sacipRecord = new PrdMoTaskDefectRecord();
+ //sacipRecord.id = SnowflakeIdHelper.NextId();
+ //sacipRecord.material_code = material?.code!;
+ //sacipRecord.material_name = material?.name!;
+ //sacipRecord.eqp_code = (await db.Queryable().FirstAsync(it => it.id == moTask.eqp_id))?.code!;
+ //sacipRecord.mold_name = (await db.Queryable().FirstAsync(it => it.id == moTask.mold_id))?.mold_name!;
+ //sacipRecord.estimated_start_date = moTask.plan_start_date;
+ //sacipRecord.estimated_end_date = moTask.plan_end_date;
+ //sacipRecord.plan_qty = moTask.plan_qty;
+ //sacipRecord.scrap_qty = moTask.scrap_qty;
+ //sacipRecord.status = moTask.mo_task_status;
+ //sacipRecord.create_id = _userManager.UserId;
+ //sacipRecord.create_time = DateTime.Now;
+ //sacipRecord.mo_task_id = moTask.id;
+ //sacipRecord.mo_task_code = moTask.mo_task_code;
+ //await db.Insertable(sacipRecord).ExecuteCommandAsync();
+
//根据工单号获取当前工单包含的已排产数
var schedQty = _db.Queryable().Where(it => it.mo_id == input.mo_id)?.Sum(d => d.scheduled_qty);
if (mo != null)
@@ -1026,6 +1073,54 @@ namespace Tnb.ProductionMgr
return row > 0;
}
+ ///
+ /// 生成子工单
+ ///
+ ///
+ [HttpPost]
+ public async Task GenSubMo(GenSubMoCrInput input)
+ {
+ if (input is null) throw new ArgumentNullException("input");
+ if (input.ids is null || input.ids.Count == 0) throw new ArgumentException($"{nameof(input.ids)} not be null or count zero");
+ var curMo = await _db.Queryable().FirstAsync(it => it.id == input.mo_id);
+ if (curMo == null) throw new ArgumentNullException("创建子工单时的父工单不能为null");
+ List subMoList = new();
+ var outputMaterials = await _db.Queryable().LeftJoin((a, b) => a.id == b.material_id)
+ .Where((a, b) => input.ids.Contains(a.id))
+ .Select((a, b) => new
+ {
+ material_id = a.id,
+ material_code = a.code,
+ num = b.num,
+ })
+ .ToListAsync();
+ foreach (var om in outputMaterials)
+ {
+ PrdMo subMo = new();
+ subMo.material_id = om.material_id;
+ subMo.material_code = om.material_code;
+ subMo.plan_qty = om.num.ParseToInt() * curMo.plan_qty;
+ subMo.mo_type = curMo.mo_type;
+ subMo.parent_id = curMo.id;
+ subMo.plan_start_date = curMo.plan_start_date;
+ subMo.plan_end_date = curMo.plan_end_date;
+ subMo.create_id = _userManager.UserId;
+ subMo.create_time = DateTime.Now;
+ subMo.mo_status = DictConst.WaitProductId;
+ subMoList.Add(subMo);
+ }
+ //生成子工单编码
+ for (int i = 0; i < subMoList.Count; i++)
+ {
+ var num = (i + 1).ToString().PadLeft(2, '0');
+ subMoList[i].mo_code = $"{subMoList[i].mo_code}-{num}";
+ }
+ var row = await _db.Insertable(subMoList).ExecuteCommandAsync();
+ if (row < 1) throw Oops.Oh(ErrorCode.COM1000);
+
+ }
+
+
#endregion