This commit is contained in:
DEVICE8\12494
2023-05-12 22:58:38 +08:00
12 changed files with 924 additions and 2 deletions

View File

@@ -0,0 +1,23 @@
namespace Tnb.EquipMgr
{
/// <summary>
/// 点巡检记录执行状态
/// </summary>
public static class SpotInsRecordExecutionStatus
{
/// <summary>
/// 待执行
/// </summary>
public const string TOBEEXECUTED = "1";
/// <summary>
/// 待复核
/// </summary>
public const string TOBECHECK = "1";
/// <summary>
/// 已完成
/// </summary>
public const string COMPLETED = "1";
}
}

View File

@@ -0,0 +1,100 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities
{
///<summary>
///设备类型
///</summary>
[SugarTable("eqp_equip_type")]
public partial class EqpEquipType : BaseEntity<string>
{
public EqpEquipType()
{
}
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? modify_time { get; set; }
/// <summary>
/// Desc:名称
/// Default:
/// Nullable:False
/// </summary>
public string name { get; set; }
/// <summary>
/// Desc:编码
/// Default:
/// Nullable:False
/// </summary>
public string code { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? create_time { get; set; }
/// <summary>
/// Desc:是否是特种设备0否1是
/// Default:
/// Nullable:False
/// </summary>
public int is_special_equipment { get; set; }
/// <summary>
/// Desc:排序
/// Default:
/// Nullable:False
/// </summary>
public int ordinal { get; set; }
/// <summary>
/// Desc:状态0 禁用 1 启用
/// Default:
/// Nullable:False
/// </summary>
public int status { get; set; }
/// <summary>
/// Desc:是否是实验设备0否1是
/// Default:
/// Nullable:False
/// </summary>
public int is_lab { 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 remark { get; set; }
/// <summary>
/// Desc:所属组织
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string org_id { get; set; }
}
}

View File

@@ -0,0 +1,134 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities;
///<summary>
///点巡检执行记录子表
///</summary>
[SugarTable("eqp_spot_ins_record_d")]
public partial class EqpSpotInsRecordD : BaseEntity<string>
{
public EqpSpotInsRecordD()
{
}
/// <summary>
/// Desc:点巡检执行记录id
/// Default:
/// Nullable:False
/// </summary>
public string spot_ins_record_id { get; set; }
/// <summary>
/// Desc:点巡检项id
/// Default:
/// Nullable:False
/// </summary>
public string spot_ins_item_id { get; set; }
/// <summary>
/// Desc:判断类型
/// Default:
/// Nullable:False
/// </summary>
public string judge_type { get; set; }
/// <summary>
/// Desc:上限值
/// Default:
/// Nullable:True
/// </summary>
public decimal? high_value { get; set; }
/// <summary>
/// Desc:是否包含上限值
/// Default:
/// Nullable:True
/// </summary>
public int? high_value_is_include { get; set; }
/// <summary>
/// Desc:下限值
/// Default:
/// Nullable:True
/// </summary>
public decimal? low_value { get; set; }
/// <summary>
/// Desc:是否包含下限值
/// Default:
/// Nullable:True
/// </summary>
public int? low_value_is_include { get; set; }
/// <summary>
/// Desc:标准值
/// Default:
/// Nullable:True
/// </summary>
public double? standard_value { get; set; }
/// <summary>
/// Desc:单位id
/// Default:
/// Nullable:False
/// </summary>
public string unit_id { get; set; }
/// <summary>
/// Desc:结果 1 通过 2 不通过
/// Default:
/// Nullable:True
/// </summary>
public int? result { get; set; }
/// <summary>
/// Desc:实际测量值
/// Default:
/// Nullable:True
/// </summary>
public double? real_value { get; set; }
/// <summary>
/// Desc:排序
/// Default:
/// Nullable:False
/// </summary>
public long ordinal { get; set; }
/// <summary>
/// Desc:编码
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string code { get; set; }
/// <summary>
/// Desc:名称
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string name { get; set; }
/// <summary>
/// Desc:判断内容
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string judge_content { get; set; }
/// <summary>
/// Desc:点巡检方法
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string inspection_method { get; set; }
/// <summary>
/// Desc:备注
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string remark { get; set; }
}

View File

@@ -0,0 +1,135 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities
{
///<summary>
///点巡检执行记录表
///</summary>
[SugarTable("eqp_spot_ins_record_h")]
public partial class EqpSpotInsRecordH : BaseEntity<string>
{
public EqpSpotInsRecordH()
{
}
/// <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:设备id
/// Default:
/// Nullable:False
/// </summary>
public string equip_id { get; set; }
/// <summary>
/// Desc:点巡检设备模板id
/// Default:
/// Nullable:False
/// </summary>
public string spot_ins_tem_equip_id { get; set; }
/// <summary>
/// Desc:结果1 合格2不合格
/// Default:
/// Nullable:True
/// </summary>
public int? result { get; set; }
/// <summary>
/// Desc:执行时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? spot_record_date_time { get; set; }
/// <summary>
/// Desc:不合格推送
/// Default:
/// Nullable:True
/// </summary>
public int? is_send { get; set; }
/// <summary>
/// Desc:推送时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? send_date_time { get; set; }
/// <summary>
/// Desc:滞后推送时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? after_send_date_time { get; set; }
/// <summary>
/// Desc:是否滞后推送
/// Default:
/// Nullable:True
/// </summary>
public int? is_after_send { 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 result_remark { get; set; }
/// <summary>
/// Desc:状态 1待执行 2 待复核 3 已完成
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string status { get; set; }
/// <summary>
/// Desc:执行人id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string spot_record_user_id { get; set; }
/// <summary>
/// Desc:设备类型id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string equip_type_id { get; set; }
/// <summary>
/// Desc:推送人id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string send_id { get; set; }
}
}

View File

@@ -0,0 +1,177 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.EquipMgr.Entities
{
///<summary>
///点巡检设备模板表
///</summary>
[SugarTable("eqp_spot_ins_tem_equip_h")]
public partial class EqpSpotInsTemEquipH : BaseEntity<string>
{
public EqpSpotInsTemEquipH()
{
}
/// <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:False
/// </summary>
public string code { get; set; }
/// <summary>
/// Desc:名称
/// Default:
/// Nullable:False
/// </summary>
public string name { get; set; }
/// <summary>
/// Desc:周期
/// Default:
/// Nullable:False
/// </summary>
public decimal plan_cycle { get; set; }
/// <summary>
/// Desc:周期方式 1 单次 2 循环
/// Default:
/// Nullable:False
/// </summary>
public string plan_cycle_unit { get; set; }
/// <summary>
/// Desc:计划执行通知提前量
/// Default:
/// Nullable:True
/// </summary>
public int? plan_run_notice { 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:
/// Nullable:True
/// </summary>
public int? plan_delay { get; set; }
/// <summary>
/// Desc:启用时间
/// Default:
/// Nullable:False
/// </summary>
public DateTime start_time { get; set; }
/// <summary>
/// Desc:是否启用
/// Default:
/// Nullable:False
/// </summary>
public string is_start { get; set; }
/// <summary>
/// Desc:是否复核
/// Default:
/// Nullable:False
/// </summary>
public string is_repeat { get; set; }
/// <summary>
/// Desc:不合格推送 0 不推送 1 推送
/// Default:
/// Nullable:True
/// </summary>
public int? is_send { get; set; }
/// <summary>
/// Desc:点巡检模板id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string spot_ins_tem_id { get; set; }
/// <summary>
/// Desc:TODO
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string equip_id { get; set; }
/// <summary>
/// Desc:TODO
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string remark { get; set; }
/// <summary>
/// Desc:计划执行通知提前量单位 1 小时 2 天 3 周
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string plan_run_notice_unit { get; set; }
/// <summary>
/// Desc:执行滞后推送时间单位 1 小时 2 天 3 周
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string plan_delay_unit { get; set; }
/// <summary>
/// Desc:复核岗位id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string repeat_post_info_user_id { get; set; }
/// <summary>
/// Desc:责任岗位id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string send_post_info_user_id { get; set; }
/// <summary>
/// Desc:推送人id
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string send_post_id { get; set; }
/// <summary>
/// Desc:所属组织
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
public string org_id { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
namespace Tnb.EquipMgr.Interfaces
{
public interface IEquSpotInsTemEquipService
{
// /// <summary>
// /// 获取数
// /// </summary>
// /// <param name="dic"></param>
// /// <returns></returns>
// public Task<dynamic> GetTree();
/// <summary>
/// 停止计划
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
public Task Stop(Dictionary<string, string> parameters);
}
}

View File

@@ -0,0 +1,70 @@
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.Interfaces;
using Tnb.EquipMgr.Entities;
namespace Tnb.EquipMgr
{
/// <summary>
/// 设备管理
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class EquSpotInsTemEquipService : IEquSpotInsTemEquipService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<EqpSpotInsTemEquipH> _repository;
public EquSpotInsTemEquipService(ISqlSugarRepository<EqpSpotInsTemEquipH> repository)
{
_repository = repository;
}
// public async Task<dynamic> GetTree()
// {
// List<EqpEquipment> eqpEquipments =
// var data = _repository.AsSugarClient().Queryable<EqpEquipType>()
// .Where(x => x.status == 1)
// .Select((x) => new TreeModel
// {
// id = x.id,
// parentId = "-1",
// hasChildren = SqlFunc.Subqueryable<EqpEquipment>().Where(y=>y.eqp_type_id==x.id).Any(),
// isLeaf = false,
// num = SqlFunc.Subqueryable<EqpEquipment>().Where(y=>y.eqp_type_id==x.id).Count(),
// children = SqlFunc.Subqueryable<EqpEquipment>().Where(y=>y.eqp_type_id==x.id).Select(y=>new TreeModel()
// {
//
// }).ToList(model => ),
// });
// return new { list = 1 };
// }
public async Task Stop(Dictionary<string, string> parameters)
{
string id = parameters["id"];
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
await _repository.UpdateAsync(x => new EqpSpotInsTemEquipH()
{
is_start = "0"
}, x => x.id == id);
List<string> ids = await _repository.AsSugarClient().Queryable<EqpSpotInsRecordH>()
.Where(x => x.spot_ins_tem_equip_id == id && x.status == SpotInsRecordExecutionStatus.TOBEEXECUTED)
.Select(x => x.id).ToListAsync();
await _repository.AsSugarClient().Deleteable<EqpSpotInsRecordH>()
.Where(x => x.spot_ins_tem_equip_id == id && x.status == SpotInsRecordExecutionStatus.TOBEEXECUTED).ExecuteCommandAsync();
await _repository.AsSugarClient().Deleteable<EqpSpotInsRecordD>()
.Where(x => ids.Contains(x.spot_ins_record_id)).ExecuteCommandAsync();
});
if(!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
}
}
}

View File

@@ -0,0 +1,165 @@
using SqlSugar;
namespace Tnb.ProductionMgr.Entities;
///<summary>
///产线状态
///</summary>
[SugarTable("prd_workline_state")]
public partial class PrdWorklineState
{
public PrdWorklineState()
{
}
/// <summary>
/// Desc:工序id
/// Default:
/// Nullable:False
/// </summary>
public string process_id { get; set; }
/// <summary>
/// Desc:当前产品序列号
/// Default:
/// Nullable:False
/// </summary>
public string lot_no { get; set; }
/// <summary>
/// Desc:工单id
/// Default:
/// Nullable:True
/// </summary>
public string mo_id { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? update_time { get; set; }
/// <summary>
/// Desc:需要的物料
/// Default:
/// Nullable:False
/// </summary>
public string require_material_spec { get; set; }
/// <summary>
/// Desc:扩展
/// Default:
/// Nullable:True
/// </summary>
public string extras { get; set; }
/// <summary>
/// Desc:当前产品
/// Default:
/// Nullable:True
/// </summary>
public string product_code { get; set; }
/// <summary>
/// Desc:当前产品
/// Default:
/// Nullable:True
/// </summary>
public string product_name { get; set; }
/// <summary>
/// Desc:当前产品
/// Default:
/// Nullable:True
/// </summary>
public string product_spec { get; set; }
/// <summary>
/// Desc:产线id
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string id { get; set; }
/// <summary>
/// Desc:产线代码
/// Default:
/// Nullable:True
/// </summary>
public string workline_code { get; set; }
/// <summary>
/// Desc:工单代码
/// Default:
/// Nullable:True
/// </summary>
public string mo_code { get; set; }
/// <summary>
/// Desc:模具id
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string mold_id { get; set; }
/// <summary>
/// Desc:工艺路线id
/// Default:
/// Nullable:True
/// </summary>
public string route_id { get; set; }
/// <summary>
/// Desc:工艺路线代码
/// Default:
/// Nullable:False
/// </summary>
public string route_code { get; set; }
/// <summary>
/// Desc:工序代码
/// Default:
/// Nullable:False
/// </summary>
public string process_code { get; set; }
/// <summary>
/// Desc:工位id
/// Default:
/// Nullable:False
/// </summary>
public string station_id { get; set; }
/// <summary>
/// Desc:工位代码
/// Default:
/// Nullable:False
/// </summary>
public string station_code { get; set; }
/// <summary>
/// Desc:需要的物料
/// Default:
/// Nullable:False
/// </summary>
public string require_material_id { get; set; }
/// <summary>
/// Desc:需要的物料
/// Default:
/// Nullable:False
/// </summary>
public string require_material_code { get; set; }
/// <summary>
/// Desc:需要的物料
/// Default:
/// Nullable:True
/// </summary>
public string require_material_name { get; set; }
}

View File

@@ -0,0 +1,12 @@
using Tnb.ProductionMgr.Entities.Dto;
namespace Tnb.ProductionMgr.Interfaces
{
/// <summary>
/// 工单生成
/// </summary>
public interface IWorklineCommService
{
Task<dynamic> GetCartonQrcode(string workline);
}
}

View File

@@ -0,0 +1,86 @@
using System.Dynamic;
using System.Reflection.Emit;
using Aop.Api.Domain;
using JNPF.Common.Core.Manager;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Extensitions.EventBus;
using JNPF.FriendlyException;
using JNPF.Logging;
using JNPF.Systems.Interfaces.System;
using JNPF.VisualDev;
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Senparc.Weixin.Work.AdvancedAPIs.MailList;
using SqlSugar;
using Tnb.BasicData;
using Tnb.BasicData.Entitys.Entity;
using Tnb.EquipMgr.Entities;
using Tnb.ProductionMgr.Entities;
using Tnb.ProductionMgr.Entities.Dto;
using Tnb.ProductionMgr.Entities.Enums;
using Tnb.ProductionMgr.Interfaces;
namespace Tnb.ProductionMgr;
/// <summary>
/// 产线自动化通信接口
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 704)]
[Route("api/produce")]
public class WorklineCommService : IWorklineCommService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<PrdWorklineState> _repository;
private readonly IDataBaseManager _dataBaseManager;
private readonly IUserManager _userManager;
private readonly IDictionaryDataService _dictionaryDataService;
public WorklineCommService(
ISqlSugarRepository<PrdWorklineState> repository,
IDataBaseManager dataBaseManager,
IUserManager userManager,
IDictionaryDataService dictionaryDataService
)
{
_repository = repository;
_dataBaseManager = dataBaseManager;
_userManager = userManager;
_dictionaryDataService = dictionaryDataService;
}
#region
/// <summary>
/// 获取产线当前生产的箱号条码
/// </summary>
/// <param name="workline">所属产线</param>
/// <returns></returns>
[HttpGet("get-carton-qrcode")]
[AllowAnonymous]
public async Task<dynamic> GetCartonQrcode(string workline)
{
var line = await _repository.GetFirstAsync(a => a.id == workline);
var productNo = line?.product_code;
//TODO 仅测试接口用
if (string.IsNullOrEmpty(productNo))
{
productNo = "16945" + Random.Shared.Next(0, 999999999).ToString(); //"16945155732431";
}
var pd = DateTime.Now;
var exp = pd.AddYears(3);
var lotNo = pd.ToString("yyMMddHH");
string tpl = "(01){0}\n(11){1}\n(17){2}\n(10){3}";
string qrcode = string.Format(tpl, productNo, pd.ToString("yyMM00"), exp.ToString("yyMM00"), lotNo);
return new { qrcode };
}
#endregion
}

View File

@@ -24,7 +24,7 @@ namespace Tnb.BasicData
/// <summary>
/// 自定义开发服务示例
/// </summary>
[ApiDescriptionSettings(Tag = "ProductionMgr", Area = "production", Order = 503)]
[ApiDescriptionSettings(Tag = "ProductionManager", Area = "production", Order = 503)]
[Route("api/[area]/[controller]/[action]")]
[OverideVisualDev(ModelId)]
public partial class SampleService : IOverideVisualDevService, IDynamicApiController, ITransient

View File

@@ -119,7 +119,8 @@ public class FormDataParsing : ITransient
{
var len = data.ToString().Split('.').Last().Length;
if (fieldsModel.precision > len) fieldsModel.precision = len;
conversionData = data.ToString().Substring(0, data.ToString().IndexOf(".") + (int)fieldsModel.precision);
conversionData = data.ToString().Substring(0, data.ToString().IndexOf(".") + (int)fieldsModel.precision + 1);//modifyby zhoukeda 20230512 增加+1
conversionData = data.ParseToDouble();//modifyby zhoukeda 20230512
}
else conversionData = data;
break;