This commit is contained in:
2023-05-17 13:59:42 +08:00
16 changed files with 1125 additions and 309 deletions

View File

@@ -84,7 +84,7 @@ namespace Tnb.BasicData
public async Task<dynamic> GetMaterialSelectInfo(MaterialSelectQueryInput queryInput)
{
var db = _repository.AsSugarClient();
List<string> ids = await GetAllChildrenMaterialId(queryInput.ebom_id);
List<string> ids = await GetAllChildrenMaterialId(queryInput.ebom_id,0);
BasEbomH ebom = await db.Queryable<BasEbomH>().Where(x => x.id == queryInput.ebom_id).SingleAsync();
ids.Add(ebom.material_id);
var result = await db.Queryable<BasMaterial>()
@@ -109,10 +109,11 @@ namespace Tnb.BasicData
/// 获取物料清单下所子集物料id
/// </summary>
/// <returns></returns>
private async Task<List<string>> GetAllChildrenMaterialId(string ebomId)
private async Task<List<string>> GetAllChildrenMaterialId(string ebomId,int index)
{
if (string.IsNullOrEmpty(ebomId)) return new List<string>();
List<string> ids = new List<string>();
if (index++ > 10) return ids;
var list = await _repository.AsSugarClient().Queryable<BasEbomD>().Where(x => x.ebom_id == ebomId)
.Select<string>(x => x.material_id).ToListAsync();
if (list != null && list.Count > 0)
@@ -121,7 +122,7 @@ namespace Tnb.BasicData
{
//获取最新创建的物料清单
var ebom = await _repository.AsSugarClient().Queryable<BasEbomH>().Where(x=>x.material_id==id).OrderByDescending(x=>x.create_time).FirstAsync();
ids.AddRange(await GetAllChildrenMaterialId(ebom?.id));
ids.AddRange(await GetAllChildrenMaterialId(ebom?.id,index));
}
ids.AddRange(list);
}

View File

@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.EquipMgr.Entities.Dto
{
/// <summary>
/// 产品列表输出类
/// </summary>
public class ProductListOutput
{
public string id { get; set; }
public string product_code { get; set; }
public string product_name { get; set; }
public string product_standard { get; set; }
public string product_group { get; set; }
public int real_cavity_qty { get; set; }
}
/// <summary>
/// 模具列表输出类
/// </summary>
public class MoldListOutput
{
public string id { get; set; }
public string mold_code { get; set; }
public string mold_name { get; set; }
public int cavity_qty { get; set; }
public int real_cavity_qty { get; set; }
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.EquipMgr.Entities.Dto
{
public class ToolMoldInput
{
public string mold { get; set; }
public string[] equipid { get; set; }
public string productid { get; set; }
public int real_cavity_qty { get; set; }
public string[] productids { get; set; }
public string[] molds { get; set; }
}
}

View File

@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities.Entity
{ ///<summary>
///产品信息
///</summary>
[SugarTable("bas_product")]
public partial class BasProduct : BaseEntity<string>
{
public BasProduct()
{
}
/// <summary>
/// Desc:产品分类ID
/// Default:
/// Nullable:False
/// </summary>
public string categoryid { get; set; }
/// <summary>
/// Desc:关联比例
/// Default:
/// Nullable:True
/// </summary>
public decimal? relation_ratio { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? create_time { get; set; }
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? modify_time { get; set; }
/// <summary>
/// Desc:扩展字段
/// Default:
/// Nullable:True
/// </summary>
public string extras { get; set; }
/// <summary>
/// Desc:所属组织
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string org_id { get; set; }
/// <summary>
/// Desc:产品规格型号
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string product_standard { get; set; }
/// <summary>
/// Desc:产品类型: 半成品SemiManufacture 成品FinishedProduct
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string product_type { get; set; }
/// <summary>
/// Desc:物料IDBAS_MATERIAL.ID
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string material_id { get; set; }
/// <summary>
/// Desc:备注
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string remark { get; set; }
/// <summary>
/// Desc:时间戳(用于并发控制)
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string timestamp { get; set; }
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string create_id { get; set; }
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string modify_id { get; set; }
/// <summary>
/// Desc:产品名称
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string product_name { get; set; }
/// <summary>
/// Desc:产品代码
/// Default:
/// Nullable:False
/// </summary>
public string product_code { get; set; }
}
}

View File

@@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JNPF.Common.Security;
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities
{
@@ -15,10 +17,10 @@ namespace Tnb.EquipMgr.Entities
public ToolMolds(){
}
/// <summary>
}
/// <summary>
/// Desc:编号
/// Default:
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true)]
@@ -27,169 +29,170 @@ namespace Tnb.EquipMgr.Entities
/// <summary>
/// Desc:模具编号
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? mold_code {get;set;}
/// <summary>
/// <summary>
/// Desc:模具名称
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? mold_name {get;set;}
/// <summary>
/// <summary>
/// Desc:物料Id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? material_id {get;set;}
/// <summary>
/// <summary>
/// Desc:设备Id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? eqp_id {get;set;}
/// <summary>
/// <summary>
/// Desc:设备代码
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? eqp_code {get;set;}
/// <summary>
/// <summary>
/// Desc:生产模数
/// Default:
/// Nullable:True
/// </summary>
/// Default:
/// Nullable:True
/// </summary>
public int? production_modulus {get;set;}
/// <summary>
/// <summary>
/// Desc:保养模次
/// Default:
/// Nullable:True
/// </summary>
/// Default:
/// Nullable:True
/// </summary>
public int? maintain_qty {get;set;}
/// <summary>
/// <summary>
/// Desc:磨具使用状态
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? mold_status {get;set;}
/// <summary>
/// <summary>
/// Desc:日定额
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public decimal? daily_rate {get;set;}
/// <summary>
/// <summary>
/// Desc:工时定额H/PCS
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public decimal? hour_norm {get;set;}
/// <summary>
/// <summary>
/// Desc:成长周期
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public int? growth_cycle {get;set;}
/// <summary>
/// <summary>
/// Desc:型腔数
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public int? cavity_qty {get;set;}
/// <summary>
/// <summary>
/// Desc:模具寿命
/// Default:
/// Nullable:True
/// </summary>
/// Default:
/// Nullable:True
/// </summary>
public int? mold_life {get;set;}
/// <summary>
/// <summary>
/// Desc:模具剩余寿命
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? mold_remaining_life {get;set;}
/// <summary>
/// <summary>
/// Desc:库房编号
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? warehosue_id {get;set;}
/// <summary>
/// <summary>
/// Desc:库位编号
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? location_id {get;set;}
/// <summary>
/// <summary>
/// Desc:备注
/// Default:
/// Nullable:True
/// </summary>
/// Default:
/// Nullable:True
/// </summary>
public string? remark {get;set;}
/// <summary>
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? create_id {get;set;}
/// <summary>
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public DateTime? create_time {get;set;}
/// <summary>
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? modify_id {get;set;}
/// <summary>
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public DateTime? modify_time {get;set;}
/// <summary>
/// <summary>
/// Desc:扩展字段
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? extras {get;set;}
/// <summary>
/// <summary>
/// Desc:模穴数
/// Default:
/// Nullable:True
/// </summary>
/// Default:
/// Nullable:True
/// </summary>
public int? mold_cavity {get;set;}
/// <summary>
/// <summary>
/// Desc:模具型号
/// Default:
/// Nullable:True
/// </summary>
/// Nullable:True
/// </summary>
public string? mold_type_code {get;set;}
}

View File

@@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JNPF.Common.Security;
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities
{
@@ -24,46 +26,46 @@ namespace Tnb.EquipMgr.Entities
[SugarColumn(IsPrimaryKey=true)]
public string id {get;set;} = SnowflakeIdHelper.NextId();
/// <summary>
/// Desc:模具编号
/// Default:
/// Nullable:False
/// </summary>
/// <summary>
/// Desc:模具编号
/// Default:
/// Nullable:False
/// </summary>
public string mold_id {get;set;} = string.Empty;
/// <summary>
/// Desc:设备编号
/// Default:
/// Nullable:False
/// </summary>
/// <summary>
/// Desc:设备编号
/// Default:
/// Nullable:False
/// </summary>
public string equipment_id {get;set;} = string.Empty;
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? create_id {get;set;}
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:False
/// </summary>
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:False
/// </summary>
public DateTime create_time {get;set;}
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? modify_id {get;set;}
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? modify_time {get;set;}
}

View File

@@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JNPF.Common.Security;
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities
{
@@ -15,34 +17,35 @@ namespace Tnb.EquipMgr.Entities
public ToolMoldsProduct(){
}
/// <summary>
}
/// <summary>
/// Desc:编号
/// Default:
/// Nullable:False
/// </summary>
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true)]
public string id {get;set;} = SnowflakeIdHelper.NextId();
/// <summary>
/// <summary>
/// Desc:模具编号
/// Default:
/// Nullable:False
/// </summary>
/// Default:
/// Nullable:False
/// </summary>
public string mold_id {get;set;} = string.Empty;
/// <summary>
/// <summary>
/// Desc:产品编号
/// Default:
/// Nullable:False
/// </summary>
/// Default:
/// Nullable:False
/// </summary>
public string product_id {get;set;} = string.Empty;
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? create_id {get;set;}
/// <summary>
@@ -52,32 +55,32 @@ namespace Tnb.EquipMgr.Entities
/// </summary>
public DateTime create_time {get;set;}
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? modify_id {get;set;}
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? modify_time {get;set;}
/// <summary>
/// Desc:实际使用型腔数
/// Default:
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:实际使用型腔数
/// Default:
/// Nullable:True
/// </summary>
public int? real_cavity_qty {get;set;}
/// <summary>
/// Desc:产品同组标识
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
/// <summary>
/// Desc:产品同组标识
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string? product_group {get;set;}
}

View File

@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Tnb.EquipMgr.Entities.Dto;
namespace Tnb.EquipMgr.Interfaces
{
public interface IToolMoldProductService
{
/// <summary>
/// 根据模具id获取设备集合
/// </summary>
/// <param name="mold"></param>
/// <returns></returns>
public Task<List<ProductListOutput>> GetProductLists(ToolMoldInput ToolMoldInput);
/// <summary>
/// 增加模具产品绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="productid"></param>
/// <param name="real_cavity_qty"></param>
/// <returns></returns>
public Task<dynamic> SaveData(ToolMoldInput ToolMoldInput);
/// <summary>
/// 批量删除模具产品绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="productids"></param>
/// <returns></returns>
public Task<dynamic> DetachMoldData(ToolMoldInput ToolMoldInput);
/// <summary>
/// 产品同组
/// </summary>
/// <param name="mold"></param>
/// <param name="productids"></param>
/// <returns></returns>
public Task<dynamic> SaveProductGroup(ToolMoldInput ToolMoldInput);
/// <summary>
/// 取消产品同组
/// </summary>
/// <param name="mold"></param>
/// <param name="productids"></param>
/// <returns></returns>
public Task<dynamic> CancelProductGroup(ToolMoldInput ToolMoldInput);
/// <summary>
/// 根据产品id获取模具集合
/// </summary>
/// <param name="productid"></param>
/// <returns></returns>
public Task<List<MoldListOutput>> GetMoldLists(ToolMoldInput ToolMoldInput);
/// <summary>
/// 批量删除产品模具绑定
/// </summary>
/// <param name="molds"></param>
/// <param name="productid"></param>
/// <returns></returns>
public Task<dynamic> DetachProductData(ToolMoldInput ToolMoldInput);
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tnb.EquipMgr.Entities.Dto;
namespace Tnb.EquipMgr.Interfaces
{
public interface IToolMoldsService
{
/// <summary>
/// 根据模具id获取设备集合
/// </summary>
/// <param name="mold"></param>
/// <returns></returns>
public Task<List<EquipmentListOutput>> GetEquipmentLists(ToolMoldInput ToolMoldInput);
/// <summary>
/// 增加模具设备绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="equipid"></param>
/// <returns></returns>
public Task<dynamic> SaveData(ToolMoldInput ToolMoldInput);
/// <summary>
/// 批量删除模具设备绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="equipid"></param>
/// <returns></returns>
public Task<dynamic> DetachData(ToolMoldInput ToolMoldInput);
}
}

View File

@@ -0,0 +1,192 @@
using System;
using System.Collections.Generic;
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.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Entities.Entity;
using Tnb.EquipMgr.Interfaces;
namespace Tnb.EquipMgr
{
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class ToolMoldProductService : IToolMoldProductService, IDynamicApiController, ITransient
{
private readonly IUserManager _userManager;
private readonly ISqlSugarRepository<ToolMolds> _repository;
public ToolMoldProductService(IUserManager userManager, ISqlSugarRepository<ToolMolds> repository)
{
_userManager = userManager;
_repository = repository;
}
/// <summary>
/// 根据模具id获取产品集合
/// </summary>
/// <param name="mold"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<ProductListOutput>> GetProductLists(ToolMoldInput ToolMoldInput)
{
var db = _repository.AsSugarClient();
var list = await db.Queryable<BasProduct, ToolMoldsProduct>((a, b) => new object[]
{
JoinType.Inner, a.id == b.product_id,
})
.Where((a, b) => b.mold_id == ToolMoldInput.mold)
.Select((a, b) => new ProductListOutput
{
id = a.id,
product_code = a.product_code,
product_name = a.product_name,
product_standard = a.product_standard,
product_group=b.product_group,
real_cavity_qty = b.real_cavity_qty.HasValue ? b.real_cavity_qty.Value : 0
}).ToListAsync();
return list;
}
/// <summary>
/// 增加模具产品绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="productid"></param>
/// <param name="real_cavity_qty"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> SaveData(ToolMoldInput ToolMoldInput)
{
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
var ToolMoldsProduct= await _repository.AsSugarClient().Queryable<ToolMoldsProduct>().Where(p=>p.mold_id== ToolMoldInput.mold&&p.product_id== ToolMoldInput.productid).FirstAsync();
if (ToolMoldsProduct == null)
{
var entity = new ToolMoldsProduct();
entity.id = SnowflakeIdHelper.NextId();
entity.mold_id = ToolMoldInput.mold;
entity.product_id = ToolMoldInput.productid;
entity.real_cavity_qty = ToolMoldInput.real_cavity_qty;
entity.create_time = DateTime.Now;
entity.create_id = _userManager.UserId;
await _repository.AsSugarClient().Insertable<ToolMoldsProduct>(entity).ExecuteCommandAsync();
}
else {
ToolMoldsProduct.real_cavity_qty= ToolMoldInput.real_cavity_qty;
await _repository.AsSugarClient().Updateable<ToolMoldsProduct>(ToolMoldsProduct).ExecuteCommandAsync();
}
});
if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
return result.IsSuccess ? "保存成功" : result.ErrorMessage;
}
/// <summary>
/// 批量删除模具产品绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="productids"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> DetachMoldData(ToolMoldInput ToolMoldInput)
{
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
var arr = _repository.AsSugarClient().Queryable<ToolMoldsProduct>().Where(x => x.mold_id == ToolMoldInput.mold && ToolMoldInput.productids.Contains(x.product_id)).ToList();
await _repository.AsSugarClient().Deleteable<ToolMoldsProduct>(arr).ExecuteCommandAsync();
});
if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
return result.IsSuccess ? "操作成功" : result.ErrorMessage;
}
/// <summary>
/// 产品同组
/// </summary>
/// <param name="mold"></param>
/// <param name="productids"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> SaveProductGroup(ToolMoldInput ToolMoldInput)
{
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
var arr = _repository.AsSugarClient().Queryable<ToolMoldsProduct>().Where(x => x.mold_id == ToolMoldInput.mold && ToolMoldInput.productids.Contains(x.product_id)).ToList();
var sign = SnowflakeIdHelper.NextId();
arr.ForEach(p => { p.product_group = sign; });
await _repository.AsSugarClient().Updateable<ToolMoldsProduct>(arr).ExecuteCommandAsync();
});
if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
return result.IsSuccess ? "操作成功" : result.ErrorMessage;
}
/// <summary>
/// 取消产品同组
/// </summary>
/// <param name="mold"></param>
/// <param name="productids"></param>
/// <returns></returns>
public async Task<dynamic> CancelProductGroup(ToolMoldInput ToolMoldInput)
{
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
var arr = _repository.AsSugarClient().Queryable<ToolMoldsProduct>().Where(x => x.mold_id == ToolMoldInput.mold && ToolMoldInput.productids.Contains(x.product_id)).ToList();
arr.ForEach(p => { p.product_group = string.Empty; });
await _repository.AsSugarClient().Updateable<ToolMoldsProduct>(arr).ExecuteCommandAsync();
});
if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
return result.IsSuccess ? "操作成功" : result.ErrorMessage;
}
/// <summary>
/// 根据产品id获取模具集合
/// </summary>
/// <param name="productid"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<MoldListOutput>> GetMoldLists(ToolMoldInput ToolMoldInput)
{
var db = _repository.AsSugarClient();
var list = await db.Queryable<ToolMolds, ToolMoldsProduct>((a, b) => new object[]
{
JoinType.Inner, a.id == b.mold_id,
})
.Where((a, b) => b.product_id == ToolMoldInput.productid)
.Select((a, b) => new MoldListOutput
{
id = a.id,
mold_code = a.mold_code,
mold_name = a.mold_name,
cavity_qty = a.cavity_qty.HasValue ? a.cavity_qty.Value : 0,
real_cavity_qty = b.real_cavity_qty.HasValue ? b.real_cavity_qty.Value : 0
}).ToListAsync();
return list;
}
/// <summary>
/// 批量删除产品模具绑定
/// </summary>
/// <param name="molds"></param>
/// <param name="productid"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> DetachProductData(ToolMoldInput ToolMoldInput)
{
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
var arr = _repository.AsSugarClient().Queryable<ToolMoldsProduct>().Where(x => ToolMoldInput.molds.Contains(x.mold_id) && x.product_id == ToolMoldInput.productid).ToList();
await _repository.AsSugarClient().Deleteable<ToolMoldsProduct>(arr).ExecuteCommandAsync();
});
if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
return result.IsSuccess ? "操作成功" : result.ErrorMessage;
}
}
}

View File

@@ -0,0 +1,108 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aop.Api.Domain;
using Aspose.Cells.Drawing;
using JNPF.Common.Core.Manager;
using JNPF.Common.Enums;
using JNPF.Common.Filter;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Entities.Entity;
using Tnb.EquipMgr.Interfaces;
namespace Tnb.EquipMgr
{ /// <summary>
/// 模具管理
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class ToolMoldsService : IToolMoldsService, IDynamicApiController, ITransient
{
private readonly IUserManager _userManager;
private readonly ISqlSugarRepository<ToolMolds> _repository;
public ToolMoldsService(IUserManager userManager, ISqlSugarRepository<ToolMolds> repository)
{
_userManager = userManager;
_repository = repository;
}
/// <summary>
/// 根据模具id获取设备集合
/// </summary>
/// <param name="mold"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<EquipmentListOutput>> GetEquipmentLists(ToolMoldInput ToolMoldInput)
{
var db = _repository.AsSugarClient();
var list = await db.Queryable<EqpEquipment, ToolMoldsEquipment>((a, b) => new object[]
{
JoinType.Inner, a.id == b.equipment_id,
})
.Where((a, b) => b.mold_id == ToolMoldInput.mold)
.Select((a, b) => new EquipmentListOutput
{
id = a.id,
eqp_code=a.code,
eqp_name=a.name
}).ToListAsync();
return list;
}
/// <summary>
/// 增加模具设备绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="equipid"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> SaveData(ToolMoldInput ToolMoldInput)
{
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
var list = new List<ToolMoldsEquipment>();
foreach (var equip in ToolMoldInput.equipid)
{
var entity = new ToolMoldsEquipment();
entity.id = SnowflakeIdHelper.NextId();
entity.mold_id = ToolMoldInput.mold;
entity.equipment_id = equip;
entity.create_time = DateTime.Now;
entity.create_id = _userManager.UserId;
list.Add(entity);
}
await _repository.AsSugarClient().Insertable<ToolMoldsEquipment>(list).ExecuteCommandAsync();
});
if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
return result.IsSuccess ? "保存成功" : result.ErrorMessage;
}
/// <summary>
/// 批量删除模具设备绑定
/// </summary>
/// <param name="mold"></param>
/// <param name="equipid"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> DetachData(ToolMoldInput ToolMoldInput)
{
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
var arr = _repository.AsSugarClient().Queryable<ToolMoldsEquipment>().Where(x => x.mold_id == ToolMoldInput.mold && ToolMoldInput.equipid.Contains(x.equipment_id)).ToList();
await _repository.AsSugarClient().Deleteable<ToolMoldsEquipment>(arr).ExecuteCommandAsync();
});
if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
return result.IsSuccess ? "操作成功" : result.ErrorMessage;
}
}
}

View File

@@ -10,14 +10,6 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
/// 组装、包装排产输入参数
/// </summary>
public class PackSchedlingCrInput
{
/// <summary>
/// bom任务集合
/// </summary>
public List<PackSchedlingItem> items{ get; set; }
}
public class PackSchedlingItem
{
/// <summary>
/// 工单Id
@@ -28,10 +20,6 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
/// </summary>
public string bom_id { get; set; }
/// <summary>
/// 工序id
/// </summary>
public string process_id { get; set; }
/// <summary>
/// 产线Id
/// </summary>
public string workline_id { get; set; }
@@ -39,21 +27,26 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
/// 物料Id
/// </summary>
public string material_id { get; set; }
/// <summary>
/// 生产任务单号
/// 排产数量
/// </summary>
public string mo_task_code { get; set; }
public string scheduled_qty { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string material_code { get; set; }
/// Desc:预计开始时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime estimated_start_date { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string material_name { get; set; }
/// <summary>
/// bom产出料数量
/// </summary>
public string qty { get; set; }
/// Desc:预计结束时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime estimated_end_date { get; set; }
}
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.DirectoryServices.Protocols;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
{
/// <summary>
/// 组装、包装生产任务待下发输出参数列表
/// </summary>
public class PackSechelToBeIssueListOutput
{
/// <summary>
/// 生产任务ID
/// </summary>
public string mo_task_id { get; set; }
/// <summary>
/// 生产任务编号
/// </summary>
public string mo_task_code { get; set; }
/// <summary>
/// 物料编号
/// </summary>
public string material_code { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string material_name { get; set; }
/// <summary>
/// 产线编号
/// </summary>
public string workline_code { get; set; }
/// <summary>
/// 产线名称
/// </summary>
public string workline_name { get; set; }
/// <summary>
/// 任务单状态
/// </summary>
public string mo_task_status { get; set; }
/// <summary>
/// 生产任务数量
/// </summary>
public int scheduled_qty { get; set; }
/// <summary>
/// 计划数量
/// </summary>
public int plan_qty { get; set; }
/// <summary>
/// 工序任务量
/// </summary>
public int process_task_qty { get; set; }
}
}

View File

@@ -47,6 +47,14 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
/// </summary>
public string eqp_type_code { get; set; }
/// <summary>
/// 产线编码
/// </summary>
public string workline_code { get; set; }
/// <summary>
/// 产线名称
/// </summary>
public string workline_name { get; set; }
/// <summary>
/// 任务单数量
/// </summary>
public int mo_task_qty { get; set; }

View File

@@ -108,6 +108,12 @@ namespace Tnb.ProductionMgr.Entities
/// 任务单编号
/// </summary>
public string mo_task_code { get; set; }
/// <summary>
/// 产线Code
/// </summary>
[SugarColumn(IsIgnore = true)]
public string workline_code { get; set; }
}
}

View File

@@ -34,6 +34,7 @@ using Senparc.Weixin.MP.AdvancedAPIs.Card;
using Aspose.Cells.Drawing.Texts;
using JNPF.Systems.Entitys.Permission;
using WebSocketSharp.Frame;
using JNPF.Logging;
namespace Tnb.ProductionMgr
{
@@ -344,40 +345,130 @@ namespace Tnb.ProductionMgr
/// <br/>}
/// </remarks>
[HttpGet("{moId}")]
public async Task<dynamic> GetPrdTaskInfoByMoId(string moId)
public async Task<dynamic> GetPrdTaskInfoByMoId(string moId, int schedType = 1)
{
List<PrdMoTaskOutput> result = new();
var dic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId);
var result = await _db.Queryable<PrdMoTask>().LeftJoin<PrdMo>((a, b) => a.mo_id == b.id)
.LeftJoin<BasMaterial>((a, b, c) => a.material_id == c.id)
.LeftJoin<Molds>((a, b, c, d) => a.mold_id == d.id)
.LeftJoin<EqpEquipment>((a, b, c, d, e) => a.eqp_id == e.id)
.Where((a, b, c, d, e) => a.mo_id == moId)
.Select((a, b, c, d, e) => new PrdMoTaskOutput
{
mo_task_code = a.mo_task_code,
mo_task_status = a.mo_task_status,
mold_code = d.mold_code,
mold_name = d.mold_name,
material_code = c.code,
material_name = c.name,
eqp_code = e.code,
eqp_name = e.name,
eqp_type_code = SqlFunc.Subqueryable<EqpEquipType>().Where(it => it.id == e.equip_type_id).Select(it => it.code),
mo_task_qty = SqlFunc.Subqueryable<PrdMoTask>().Where(a => a.mo_id == moId).Count(),
estimated_start_date = a.estimated_start_date,
estimated_end_date = a.estimated_end_date,
plan_qty = b.plan_qty,
complete_qty = a.complete_qty,
})
.Mapper(it =>
{
it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString() : "";
})
.ToListAsync();
if (schedType == 1)
{
result = await _db.Queryable<PrdMoTask>().LeftJoin<PrdMo>((a, b) => a.mo_id == b.id)
.LeftJoin<BasMaterial>((a, b, c) => a.material_id == c.id)
.LeftJoin<Molds>((a, b, c, d) => a.mold_id == d.id)
.LeftJoin<EqpEquipment>((a, b, c, d, e) => a.eqp_id == e.id)
.Where((a, b, c, d, e) => a.mo_id == moId)
.Select((a, b, c, d, e) => new PrdMoTaskOutput
{
mo_task_code = a.mo_task_code,
mo_task_status = a.mo_task_status,
mold_code = d.mold_code,
mold_name = d.mold_name,
material_code = c.code,
material_name = c.name,
eqp_code = e.code,
eqp_name = e.name,
eqp_type_code = SqlFunc.Subqueryable<EqpEquipType>().Where(it => it.id == e.equip_type_id).Select(it => it.code),
mo_task_qty = SqlFunc.Subqueryable<PrdMoTask>().Where(a => a.mo_id == moId).Count(),
estimated_start_date = a.estimated_start_date,
estimated_end_date = a.estimated_end_date,
plan_qty = b.plan_qty,
complete_qty = a.complete_qty,
})
.Mapper(it =>
{
it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString() : "";
})
.ToListAsync();
}
else
{
result = await _db.Queryable<PrdMoTask>().LeftJoin<PrdMo>((a, b) => a.mo_id == b.id)
.LeftJoin<BasMaterial>((a, b, c) => a.material_id == c.id)
.LeftJoin<OrganizeEntity>((a, b, c, d) => a.workline_id == d.Id)
.Where((a, b, c, d) => a.mo_id == moId)
.Select((a, b, c, d) => new PrdMoTaskOutput
{
mo_task_code = a.mo_task_code,
mo_task_status = a.mo_task_status,
workline_code = d.EnCode,
workline_name = d.FullName,
material_code = c.code,
material_name = c.name,
mo_task_qty = SqlFunc.Subqueryable<PrdMoTask>().Where(a => a.mo_id == moId).Count(),
estimated_start_date = a.estimated_start_date,
estimated_end_date = a.estimated_end_date,
plan_qty = b.plan_qty,
complete_qty = a.complete_qty,
})
.Mapper(it =>
{
it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString() : "";
})
.ToListAsync();
}
return result;
}
/// <summary>
///组装、包装 获取待下发任务列表
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetPackScheldToBeIssueList()
{
var dic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId);
var result = await _db.Queryable<PrdMoTask>().Where(it => it.schedule_type == 2)
.LeftJoin<BasMaterial>((a, b) => a.material_id == b.id)
.LeftJoin<OrganizeEntity>((a, b, c) => a.workline_id == c.Id)
.LeftJoin<PrdMo>((a, b, c, d) => a.mo_id == d.id)
.Select((a, b, c, d) => new PackSechelToBeIssueListOutput
{
mo_task_id = a.id,
mo_task_code = a.mo_task_code,
material_code = b.code,
material_name = b.name,
workline_code = c.EnCode,
workline_name = c.FullName,
mo_task_status = a.mo_task_status,
scheduled_qty = a.scheduled_qty,
plan_qty = d.plan_qty
})
.Mapper(it => it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString() : "")
.ToListAsync();
return result;
}
/// <summary>
/// 根据生产任务ID获取子任务列表
/// </summary>
/// <param name="mo_task_id"></param>
/// <returns></returns>
[HttpGet("{mo_task_id}")]
public async Task<dynamic> GetSubMoTaskListByTaskId(string mo_task_id)
{
var dic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId);
var result = await _db.Queryable<PrdMoTask>()
.LeftJoin<BasMaterial>((a, b) => a.material_id == b.id)
.LeftJoin<OrganizeEntity>((a, b, c) => a.workline_id == c.Id)
.LeftJoin<PrdMo>((a, b, c, d) => a.mo_id == d.id)
.Where((a, b, c, d) => a.parent_id == mo_task_id)
.Select((a, b, c, d) => new PackSechelToBeIssueListOutput
{
mo_task_id = a.id,
mo_task_code = a.mo_task_code,
material_code = b.code,
material_name = b.name,
workline_code = c.EnCode,
workline_name = c.FullName,
mo_task_status = a.mo_task_status,
scheduled_qty = a.scheduled_qty,
plan_qty = d.plan_qty,
process_task_qty = a.process_task_qty,
})
.Mapper(it => it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString() : "")
.ToListAsync();
return result;
}
@@ -593,69 +684,126 @@ namespace Tnb.ProductionMgr
[HttpPost]
public async Task<dynamic> PackSchedling(PackSchedlingCrInput input)
{
if (input.items == null)
var row = -1;
try
{
throw new ArgumentNullException(nameof(input.items));
}
DbResult<bool> dbResult = null;
if (input.items.Count > 0)
{
var moTasks = input.items.Select(x => new PrdMoTask
await _db.Ado.BeginTranAsync();
var moTask = input.Adapt<PrdMoTask>();
moTask.id = SnowflakeIdHelper.NextId();
moTask.create_id = _userManager.UserId;
moTask.create_time = DateTime.Now;
moTask.schedule_type = 2;
moTask.mo_task_status = DictConst.ToBeScheduledEncode;
moTask.estimated_start_date = input.estimated_start_date;
moTask.estimated_end_date = input.estimated_end_date;
var mo = await _db.Queryable<PrdMo>().FirstAsync(it => it.id == input.mo_id);
var moCode = mo?.mo_code;
var taskCode = await _db.Queryable<PrdMoTask>().Where(it => !string.IsNullOrEmpty(it.mo_task_code) && it.mo_task_code.Contains(moCode)).OrderByDescending(it => it.mo_task_code).Select(it => it.mo_task_code).FirstAsync();
if (taskCode.IsNullOrEmpty())
{
id = SnowflakeIdHelper.NextId(),
mo_task_code = x.mo_task_code,
material_id = x.material_id,
mo_id = x.mo_id,
bom_id = x.bom_id,
create_id = _userManager.UserId,
scheduled_qty = x.qty.ParseToInt(),
create_time = DateTime.Now
}).ToList();
dbResult = await _db.Ado.UseTranAsync(async () =>
moTask.mo_task_code = $"{moCode}-01";
}
else
{
await _db.Insertable(moTasks).ExecuteCommandAsync();
List<PrdTaskLog> taskLogList = new();
List<PrdMoTaskDefectRecord> taskDefectRecordList = new();
foreach (var moTask in moTasks)
var pos = taskCode.IndexOf("-", StringComparison.Ordinal);
if (pos > -1)
{
var material = await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == moTask.material_id);
var mo = await _db.Queryable<PrdMo>().FirstAsync(it => it.id == moTask.mo_id);
var taskLog = new PrdTaskLog();
taskLog.id = SnowflakeIdHelper.NextId();
taskLog.mo_code = mo?.mo_code;
taskLog.eqp_code = (await _db.Queryable<EqpEquipment>().FirstAsync(it => it.id == moTask.eqp_id))?.code;
taskLog.mold_code = (await _db.Queryable<Molds>().FirstAsync(it => it.id == moTask.mold_id))?.mold_code;
taskLog.item_code = material?.code;
taskLog.item_standard = material?.material_standard;
taskLog.status = DictConst.ToBeScheduledEncode;
taskLog.operator_name = _userManager.RealName;
taskLog.create_id = _userManager.UserId;
taskLog.create_time = DateTime.Now;
taskLog.mo_task_id = moTask.id;
taskLog.mo_task_code = moTask.mo_task_code;
taskLogList.Add(taskLog);
//将生产任务插入到自检报废记录表
var sacipRecord = new PrdMoTaskDefectRecord();
sacipRecord.id = SnowflakeIdHelper.NextId();
sacipRecord.material_code = material?.code;
sacipRecord.material_name = material?.name;
sacipRecord.estimated_start_date = mo?.plan_start_date;
sacipRecord.estimated_end_date = mo?.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;
taskDefectRecordList.Add(sacipRecord);
var num = taskCode.AsSpan().Slice(pos + 1).ToString().ParseToInt();
var code = taskCode.AsSpan().Slice(0, pos).ToString();
var n = (num + 1).ToString().PadLeft(2, '0');
moTask.mo_task_code = $"{code}-{n}";
}
await _db.Insertable(taskLogList).ExecuteCommandAsync();
await _db.Insertable(taskDefectRecordList).ExecuteCommandAsync();
});
}
row = await _db.Insertable(moTask).ExecuteCommandAsync();
var material_h = await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == moTask.material_id);
//添加生产任务操作记录日志s
var taskLog = new PrdTaskLog();
taskLog.id = SnowflakeIdHelper.NextId();
taskLog.mo_code = (await _db.Queryable<PrdMo>().FirstAsync(it => it.id == input.mo_id))?.mo_code;
//taskLog.eqp_code = (await _db.Queryable<EqpEquipment>().FirstAsync(it => it.id == input.eqp_id))?.code;
//taskLog.mold_code = (await _db.Queryable<Molds>().FirstAsync(it => it.id == input.mold_id))?.mold_code;
taskLog.item_code = material_h?.code;
taskLog.item_standard = material_h?.material_standard;
taskLog.status = DictConst.ToBeScheduledEncode;
taskLog.operator_name = _userManager.RealName;
taskLog.create_id = _userManager.UserId;
taskLog.create_time = DateTime.Now;
taskLog.mo_task_id = moTask.id;
taskLog.mo_task_code = moTask.mo_task_code;
row = await _db.Insertable(taskLog).ExecuteCommandAsync();
//根据工单号获取当前工单包含的已排产数
var schedQty = _db.Queryable<PrdMoTask>().Where(it => it.mo_id == input.mo_id)?.Sum(d => d.scheduled_qty);
if (mo != null)
{//判断如果当前 工单的已排产数大于工单计划数量则更新工单状态为 已排产
if (schedQty.HasValue && schedQty.Value >= mo.plan_qty)
{
mo.mo_status = DictConst.AlreadyId;
await _db.Updateable(mo).ExecuteCommandAsync();
}
else
{
if (schedQty.HasValue)
{
mo.scheduled_qty += schedQty.Value;
await _db.Updateable(mo).ExecuteCommandAsync();
}
}
}
//根据生产bomId 拆解生产子任务
var outputList = new List<PackingSchedulingListOutput>();
var bom = await _db.Queryable<BasMbom>().FirstAsync(it => it.id == input.bom_id);
if (bom != null && bom.route_id.IsNotEmptyOrNull())
{
var routes = await _db.Queryable<BasRouteD>().Where(it => it.route_id == bom.route_id).ToListAsync();
if (routes?.Count > 0)
{
var processIds = routes.Select(x => x.process_id).ToList();
if (processIds?.Count > 0)
{
var bomOutputs = await _db.Queryable<BasMbomOutput>().Where(it => processIds.Contains(it.process_id)).ToListAsync();
if (bomOutputs?.Count > 0)
{
List<PrdMoTask> subMoTasks = new();
foreach (var item in bomOutputs)
{
var material = await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == item.material_id);
PrdMoTask subMoTask = new();
subMoTask.id = SnowflakeIdHelper.NextId();
subMoTask.schedule_type = 2;
subMoTask.parent_id = moTask.id;
subMoTask.bom_id = input.bom_id;
subMoTask.mo_task_status = DictConst.ToBeScheduledEncode;
subMoTask.workline_id = input.workline_id;
subMoTask.material_id = item.material_id;
subMoTask.process_task_qty = item.num.ParseToInt() * moTask.scheduled_qty;
subMoTask.estimated_start_date = input.estimated_start_date;
subMoTask.estimated_end_date = input.estimated_end_date;
subMoTask.create_id = _userManager.UserId;
subMoTask.create_time = DateTime.Now;
subMoTasks.Add(subMoTask);
}
//根据生产任务编号生成子任务编号
if (moTask.mo_task_code.IsNotEmptyOrNull())
{
for (int i = 1; i <= subMoTasks.Count; i++)
{
string n = i.ToString();
subMoTasks[i - 1].mo_task_code = $"{moTask.mo_task_code}-{n.PadLeft(2, '0')}";
}
}
row = await _db.Insertable(subMoTasks).ExecuteCommandAsync();
}
}
}
}
await _db.Ado.CommitTranAsync();
}
return dbResult!.IsSuccess;
catch (Exception ex)
{
Log.Error("组装包装排产时报错", ex);
await _db.Ado.RollbackTranAsync();
}
return row > 0;
}
/// <summary>
@@ -710,57 +858,75 @@ namespace Tnb.ProductionMgr
.SetColumns(it => new PrdMoTask { mo_task_status = status })
.Where(it => input.TaskIds.Contains(it.id))
.ExecuteCommandAsync();
//插入操作记录日志
List<PrdTaskLog> taskLogEntities = new();
foreach (var taskId in input.TaskIds)
if (row > 0)
{
var taskLog = await db.Queryable<PrdTaskLog>().FirstAsync(it => it.mo_task_id == taskId);
if (taskLog is null)
//更新子任务
var subMoTaskList = await db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.parent_id)).ToListAsync();
if (subMoTaskList?.Count > 0)
{
var taskItem = list?.Find(x => x.id == taskId);
taskLog = new PrdTaskLog();
taskLog.id = SnowflakeIdHelper.NextId();
if (taskItem != null)
{
if (taskItem.mo_id.IsNotEmptyOrNull())
{
taskLog.mo_code = (await db.Queryable<PrdMo>().FirstAsync(it => it.id == taskItem.mo_id))?.mo_code;
}
if (taskItem.eqp_id.IsNotEmptyOrNull())
{
taskLog.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == taskItem.eqp_id))?.code;
}
if (taskItem.mold_id.IsNotEmptyOrNull())
{
taskLog.mold_code = (await db.Queryable<Molds>().FirstAsync(it => it.id == taskItem.mold_id))?.mold_code;
}
if (taskItem.material_id.IsNotEmptyOrNull())
{
var material = await db.Queryable<BasMaterial>().FirstAsync(it => it.id == taskItem.material_id);
taskLog.item_code = material?.code;
taskLog.item_standard = material?.material_standard;
}
taskLog.operator_name = _userManager.RealName;
taskLog.status = status;
taskLog.create_id = _userManager.UserId;
taskLog.create_time = DateTime.Now;
taskLog.mo_task_id = taskItem.id;
}
taskLogEntities.Add(taskLog);
}
else
{
var records = await db.Queryable<PrdTaskLog>().Where(it => it.mo_task_id == taskLog.mo_task_id).ToListAsync();
if (records != null && !records.Select(x => x.status).Contains(status))
{
taskLog.id = SnowflakeIdHelper.NextId();
taskLog.status = status;
taskLogEntities.Add(taskLog);
}
var subTaskIds = subMoTaskList.Select(it => it.id).ToList();
row = await db.Updateable<PrdMoTask>()
.SetColumns(it => new PrdMoTask { mo_task_status = status })
.Where(it => subTaskIds.Contains(it.id))
.ExecuteCommandAsync();
}
}
row = await db.Insertable(taskLogEntities).ExecuteCommandAsync();
//插入操作记录日志
var prdMOTasks = await _db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.id) && string.IsNullOrEmpty(it.parent_id)).ToListAsync();
if (prdMOTasks?.Count > 0)
{
List<PrdTaskLog> taskLogEntities = new();
foreach (var taskId in input.TaskIds)
{
var taskLog = await db.Queryable<PrdTaskLog>().FirstAsync(it => it.mo_task_id == taskId);
if (taskLog is null)
{
var taskItem = list?.Find(x => x.id == taskId);
taskLog = new PrdTaskLog();
taskLog.id = SnowflakeIdHelper.NextId();
if (taskItem != null)
{
if (taskItem.mo_id.IsNotEmptyOrNull())
{
taskLog.mo_code = (await db.Queryable<PrdMo>().FirstAsync(it => it.id == taskItem.mo_id))?.mo_code;
}
if (taskItem.eqp_id.IsNotEmptyOrNull())
{
taskLog.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == taskItem.eqp_id))?.code;
}
if (taskItem.mold_id.IsNotEmptyOrNull())
{
taskLog.mold_code = (await db.Queryable<Molds>().FirstAsync(it => it.id == taskItem.mold_id))?.mold_code;
}
if (taskItem.material_id.IsNotEmptyOrNull())
{
var material = await db.Queryable<BasMaterial>().FirstAsync(it => it.id == taskItem.material_id);
taskLog.item_code = material?.code;
taskLog.item_standard = material?.material_standard;
}
taskLog.operator_name = _userManager.RealName;
taskLog.status = status;
taskLog.create_id = _userManager.UserId;
taskLog.create_time = DateTime.Now;
taskLog.mo_task_id = taskItem.id;
}
taskLogEntities.Add(taskLog);
}
else
{
var records = await db.Queryable<PrdTaskLog>().Where(it => it.mo_task_id == taskLog.mo_task_id).ToListAsync();
if (records != null && !records.Select(x => x.status).Contains(status))
{
taskLog.id = SnowflakeIdHelper.NextId();
taskLog.status = status;
taskLogEntities.Add(taskLog);
}
}
}
row = await db.Insertable(taskLogEntities).ExecuteCommandAsync();
}
return (row > 0);
}