diff --git a/BasicData/Tnb.BasicData.Entities/Properties/launchSettings.json b/BasicData/Tnb.BasicData.Entities/Properties/launchSettings.json
new file mode 100644
index 00000000..60bc7990
--- /dev/null
+++ b/BasicData/Tnb.BasicData.Entities/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.BasicData.Entities": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50313;http://localhost:50314"
+ }
+ }
+}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData.Interfaces/IBasESopService.cs b/BasicData/Tnb.BasicData.Interfaces/IBasESopService.cs
index ac47c8f2..1e4e57ed 100644
--- a/BasicData/Tnb.BasicData.Interfaces/IBasESopService.cs
+++ b/BasicData/Tnb.BasicData.Interfaces/IBasESopService.cs
@@ -18,5 +18,12 @@ namespace Tnb.BasicData.Interfaces
///
public Task GetHistoryList(EsopHistoryListQueryInput input);
+ ///
+ /// 根据生产bom工序id获取实体
+ ///
+ /// mbomProcessId
+ ///
+ public Task GetEntityByMbomProcessId(Dictionary dic);
+
}
}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData.Interfaces/Properties/launchSettings.json b/BasicData/Tnb.BasicData.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..1fcc5282
--- /dev/null
+++ b/BasicData/Tnb.BasicData.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.BasicData.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50305;http://localhost:50306"
+ }
+ }
+}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData/BasESopService.cs b/BasicData/Tnb.BasicData/BasESopService.cs
index 61b94458..00d86f39 100644
--- a/BasicData/Tnb.BasicData/BasESopService.cs
+++ b/BasicData/Tnb.BasicData/BasESopService.cs
@@ -126,6 +126,18 @@ namespace Tnb.BasicData
return PageResult.SqlSugarPageResult(list);
}
+ [HttpPost]
+ public async Task GetEntityByMbomProcessId(Dictionary dic)
+ {
+ string mbomProcessId = dic["mbomProcessId"];
+ if (!string.IsNullOrEmpty(mbomProcessId))
+ {
+ return await _repository.GetFirstAsync(x => x.mbom_process_id == mbomProcessId && x.enabled == 1);
+ }
+
+ return null;
+ }
+
[HttpPost]
public async Task UploadNewVersion(UploadNewVersionInput input)
{
diff --git a/BasicData/Tnb.BasicData/Properties/launchSettings.json b/BasicData/Tnb.BasicData/Properties/launchSettings.json
new file mode 100644
index 00000000..058fd70e
--- /dev/null
+++ b/BasicData/Tnb.BasicData/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.BasicData": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50307;http://localhost:50308"
+ }
+ }
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Consts/EquipmentLife.cs b/EquipMgr/Tnb.EquipMgr.Entities/Consts/EquipmentLife.cs
index 7224dfc9..78c78153 100644
--- a/EquipMgr/Tnb.EquipMgr.Entities/Consts/EquipmentLife.cs
+++ b/EquipMgr/Tnb.EquipMgr.Entities/Consts/EquipmentLife.cs
@@ -21,5 +21,9 @@ namespace Tnb.EquipMgr
/// 报废
///
public const string SCRAP = "4";
+ ///
+ /// 未入场
+ ///
+ public const string NOTADMITTED = "4";
}
}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EquipWorkshopChangeInput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EquipWorkshopChangeInput.cs
new file mode 100644
index 00000000..c6a3d0da
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EquipWorkshopChangeInput.cs
@@ -0,0 +1,10 @@
+namespace Tnb.EquipMgr.Entities.Dto
+{
+ public class EquipWorkshopChangeInput
+ {
+ public string equip_id { get; set; } = string.Empty;
+ public string new_workshop_id { get; set; } = string.Empty;
+ public string? new_installation_location { get; set; }
+ public string? remark { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EquipWorkshopChangeQueryOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EquipWorkshopChangeQueryOutput.cs
new file mode 100644
index 00000000..b1099286
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EquipWorkshopChangeQueryOutput.cs
@@ -0,0 +1,36 @@
+namespace Tnb.EquipMgr.Entities.Dto
+{
+ public class EquipWorkshopChangeQueryOutput
+ {
+ public string id { get; set; } = string.Empty;
+ ///
+ /// 旧车间id
+ ///
+ public string old_workshop_id { get; set; } = string.Empty;
+
+ ///
+ /// 新车间id
+ ///
+ public string new_workshop_id { get; set; } = string.Empty;
+
+ ///
+ /// 旧安装地点
+ ///
+ public string? old_installation_location { get; set; }
+
+ ///
+ /// 新安装地点
+ ///
+ public string? new_installation_location { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? remark { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public string? create_time { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs
index 335cda29..ff6a8947 100644
--- a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs
+++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs
@@ -187,5 +187,15 @@ public partial class EqpEquipment : BaseEntity
/// 工位编码
///
public string? station_code { get; set; }
+
+ ///
+ /// 质保开始时间
+ ///
+ public DateTime? warranty_start_time { get; set; }
+
+ ///
+ /// 质保结束时间
+ ///
+ public DateTime? warranty_end_time { get; set; }
}
diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpWorkshopChangeLog.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpWorkshopChangeLog.cs
new file mode 100644
index 00000000..85b448f1
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpWorkshopChangeLog.cs
@@ -0,0 +1,72 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.EquipMgr.Entities;
+
+///
+/// 设备使用车间变更记录
+///
+[SugarTable("eqp_workshop_change_log")]
+public partial class EqpWorkshopChangeLog : BaseEntity
+{
+ public EqpWorkshopChangeLog()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 设备id
+ ///
+ public string equip_id { get; set; } = string.Empty;
+
+ ///
+ /// 旧车间id
+ ///
+ public string? old_workshop_id { get; set; }
+
+ ///
+ /// 新车间id
+ ///
+ public string? new_workshop_id { get; set; }
+
+ ///
+ /// 旧安装地点
+ ///
+ public string? old_installation_location { get; set; }
+
+ ///
+ /// 新安装地点
+ ///
+ public string? new_installation_location { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? remark { 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; }
+
+ ///
+ /// 所属组织
+ ///
+ public string? org_id { get; set; }
+
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Properties/launchSettings.json b/EquipMgr/Tnb.EquipMgr.Entities/Properties/launchSettings.json
new file mode 100644
index 00000000..0685298d
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr.Entities/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.EquipMgr.Entities": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50299;http://localhost:50300"
+ }
+ }
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr.Interfaces/IEqpWorkshopChangeLogService.cs b/EquipMgr/Tnb.EquipMgr.Interfaces/IEqpWorkshopChangeLogService.cs
new file mode 100644
index 00000000..f4cdd287
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr.Interfaces/IEqpWorkshopChangeLogService.cs
@@ -0,0 +1,23 @@
+using Tnb.EquipMgr.Entities.Dto;
+
+namespace Tnb.EquipMgr.Interfaces
+{
+ ///
+ /// 设备迁移服务
+ ///
+ public interface IEqpWorkshopChangeLogService
+ {
+ ///
+ /// 根据设备id获取迁移记录
+ ///
+ ///
+ public Task GetEquipWorkshopChangeList(EquipQueryInput input);
+
+ ///
+ /// 设备迁移
+ ///
+ ///
+ ///
+ public Task WorkshopChange(EquipWorkshopChangeInput input);
+ }
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr.Interfaces/Properties/launchSettings.json b/EquipMgr/Tnb.EquipMgr.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..f4a42f30
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.EquipMgr.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50303;http://localhost:50304"
+ }
+ }
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr/EqpWorkshopChangeLogService.cs b/EquipMgr/Tnb.EquipMgr/EqpWorkshopChangeLogService.cs
new file mode 100644
index 00000000..94074c06
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr/EqpWorkshopChangeLogService.cs
@@ -0,0 +1,95 @@
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Enums;
+using JNPF.Common.Filter;
+using JNPF.DependencyInjection;
+using JNPF.DynamicApiController;
+using JNPF.FriendlyException;
+using JNPF.Systems.Entitys.Permission;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using SqlSugar;
+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 EqpWorkshopChangeLogService : IEqpWorkshopChangeLogService, IDynamicApiController, ITransient
+ {
+ private readonly ISqlSugarRepository _repository;
+ private readonly IUserManager _userManager;
+
+ public EqpWorkshopChangeLogService(ISqlSugarRepository repository, IUserManager userManager)
+ {
+ _userManager = userManager;
+ _repository = repository;
+ }
+
+ [HttpPost]
+ public async Task GetEquipWorkshopChangeList(EquipQueryInput input)
+ {
+ var db = _repository.AsSugarClient();
+ // Dictionary? queryJson = new Dictionary();
+ // if (input!=null && !string.IsNullOrEmpty(input.queryJson))
+ // {
+ // queryJson = JsonConvert.DeserializeObject>(input?.queryJson ?? "");
+ // }
+ var result = await db.Queryable()
+ .LeftJoin((a,b)=>a.old_workshop_id==b.Id)
+ .LeftJoin((a,b,c)=>a.new_workshop_id==c.Id)
+ .WhereIF(input!=null,a=>a.equip_id==input.equip_id)
+ //.WhereIF(queryJson!=null && queryJson.ContainsKey("name"),a=>a.name.Contains(queryJson["name"]))
+ .Select((a,b,c) => new EquipWorkshopChangeQueryOutput
+ {
+ id = a.id,
+ old_workshop_id = b.FullName,
+ new_workshop_id = c.FullName,
+ old_installation_location = a.old_installation_location,
+ new_installation_location = a.new_installation_location,
+ remark = a.remark,
+ create_time = a.create_time==null ? null : a.create_time.Value.ToString("yyyy-MM-dd"),
+ }).ToPagedListAsync((input?.currentPage??1), (input?.pageSize??50));
+
+ return PageResult.SqlSugarPageResult(result);
+ }
+
+ [HttpPost]
+ public async Task WorkshopChange(EquipWorkshopChangeInput input)
+ {
+ var db = _repository.AsSugarClient();
+ DbResult result = await db.Ado.UseTranAsync(async () =>
+ {
+ EqpEquipment eqpEquipment = await db.Queryable().SingleAsync(x => x.id == input.equip_id);
+
+ EqpWorkshopChangeLog eqpWorkshopChangeLog = new EqpWorkshopChangeLog()
+ {
+ equip_id = input.equip_id,
+ old_workshop_id = eqpEquipment.use_department_id,
+ new_workshop_id = input.new_workshop_id,
+ old_installation_location = eqpEquipment.installation_location,
+ new_installation_location = input.new_installation_location,
+ remark = input.remark,
+ create_id = _userManager.UserId,
+ create_time = DateTime.Now,
+ org_id = _userManager.GetUserInfo().Result.organizeId
+ };
+
+ await _repository.InsertAsync(eqpWorkshopChangeLog);
+
+ await db.Updateable()
+ .SetColumns(x => x.use_department_id == input.new_workshop_id)
+ .SetColumns(x => x.installation_location == input.new_installation_location)
+ .Where(x => x.id == input.equip_id).ExecuteCommandAsync();
+
+ });
+
+ if(!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
+ return result.IsSuccess ? "迁移成功" : result.ErrorMessage;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EquipMgr/Tnb.EquipMgr/Properties/launchSettings.json b/EquipMgr/Tnb.EquipMgr/Properties/launchSettings.json
new file mode 100644
index 00000000..52e54340
--- /dev/null
+++ b/EquipMgr/Tnb.EquipMgr/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.EquipMgr": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50301;http://localhost:50302"
+ }
+ }
+}
\ No newline at end of file
diff --git a/PerMgr/Tnb.PerMgr.Entities/Properties/launchSettings.json b/PerMgr/Tnb.PerMgr.Entities/Properties/launchSettings.json
new file mode 100644
index 00000000..54c1b4f2
--- /dev/null
+++ b/PerMgr/Tnb.PerMgr.Entities/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.PerMgr.Entities": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50319;http://localhost:50320"
+ }
+ }
+}
\ No newline at end of file
diff --git a/PerMgr/Tnb.PerMgr.Interfaces/Properties/launchSettings.json b/PerMgr/Tnb.PerMgr.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..4967ac13
--- /dev/null
+++ b/PerMgr/Tnb.PerMgr.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.PerMgr.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50321;http://localhost:50322"
+ }
+ }
+}
\ No newline at end of file
diff --git a/PerMgr/Tnb.PerMgr/Properties/launchSettings.json b/PerMgr/Tnb.PerMgr/Properties/launchSettings.json
new file mode 100644
index 00000000..6d85c6dd
--- /dev/null
+++ b/PerMgr/Tnb.PerMgr/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.PerMgr": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50317;http://localhost:50318"
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Properties/launchSettings.json b/ProductionMgr/Tnb.ProductionMgr.Entities/Properties/launchSettings.json
new file mode 100644
index 00000000..a4a524d7
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.ProductionMgr.Entities": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50311;http://localhost:50312"
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/Properties/launchSettings.json b/ProductionMgr/Tnb.ProductionMgr.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..4dc4edc8
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.ProductionMgr.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50315;http://localhost:50316"
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs
index f0e28267..0699bd34 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs
@@ -89,7 +89,7 @@ namespace Tnb.ProductionMgr
process_id = a.process_id,
plan_start_date = a.estimated_start_date,
plan_end_date = a.estimated_end_date,
- plan_qty = c.plan_qty,
+ plan_qty = c.scheduled_qty,
// complete_qty = SqlFunc.Subqueryable().Where(it => it.mo_task_code == a.mo_task_code).Sum(it => it.reported_work_qty),
complete_qty = a.last_process_complete_qty,
mo_task_status = a.mo_task_status,
@@ -179,7 +179,7 @@ namespace Tnb.ProductionMgr
process_name = b.process_name,
plan_start_date = a.estimated_start_date,
plan_end_date = a.estimated_end_date,
- plan_qty = c.plan_qty,
+ plan_qty = c.scheduled_qty,
//complete_qty = SqlFunc.Subqueryable().Where(it => it.mo_task_code == a.mo_task_code).Sum(it => it.reported_work_qty),
complete_qty = a.reported_work_qty + a.scrap_qty,
mo_task_status = a.mo_task_status,
@@ -197,9 +197,9 @@ namespace Tnb.ProductionMgr
{
nsChild[i].parentId = parentId;
nsChild[i].process_id = $"{items[i].process_code}/{items[i].process_name}";
- nsChild[i].plan_start_date = items[i].estimated_start_date.HasValue ? items[i].estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
- nsChild[i].plan_end_date = items[i].estimated_end_date.HasValue ? items[i].estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
-
+ nsChild[i].plan_start_date = items[i].plan_start_date.HasValue ? items[i].plan_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
+ nsChild[i].plan_end_date = items[i].plan_end_date.HasValue ? items[i].plan_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
+
if (nsChild[i].workline_id.IsNotEmptyOrNull())
{
var workLine = _dicWorkLine.ContainsKey(nsChild[i].workline_id) ? (Tuple)_dicWorkLine[nsChild[i].workline_id] : null;
diff --git a/ProductionMgr/Tnb.ProductionMgr/Properties/launchSettings.json b/ProductionMgr/Tnb.ProductionMgr/Properties/launchSettings.json
new file mode 100644
index 00000000..cce9bdec
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.ProductionMgr": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50309;http://localhost:50310"
+ }
+ }
+}
\ No newline at end of file
diff --git a/QcMgr/Tnb.QcMgr.Entities/Properties/launchSettings.json b/QcMgr/Tnb.QcMgr.Entities/Properties/launchSettings.json
new file mode 100644
index 00000000..a45ccc61
--- /dev/null
+++ b/QcMgr/Tnb.QcMgr.Entities/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.QcMgr.Entities": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50295;http://localhost:50296"
+ }
+ }
+}
\ No newline at end of file
diff --git a/QcMgr/Tnb.QcMgr.Interfaces/Properties/launchSettings.json b/QcMgr/Tnb.QcMgr.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..5f71dd6e
--- /dev/null
+++ b/QcMgr/Tnb.QcMgr.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.QcMgr.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50297;http://localhost:50298"
+ }
+ }
+}
\ No newline at end of file
diff --git a/QcMgr/Tnb.QcMgr/Properties/launchSettings.json b/QcMgr/Tnb.QcMgr/Properties/launchSettings.json
new file mode 100644
index 00000000..e8f5d84b
--- /dev/null
+++ b/QcMgr/Tnb.QcMgr/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.QcMgr": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50291;http://localhost:50292"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tnb.Server.sln b/Tnb.Server.sln
index 7d6c0e17..f7d31d69 100644
--- a/Tnb.Server.sln
+++ b/Tnb.Server.sln
@@ -94,6 +94,9 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "12-ProductionMgr", "12-ProductionMgr", "{ABE58B5E-610B-4159-BFF0-8B04BF700B3C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "13-WarehouseMgr", "13-WarehouseMgr", "{D90E2789-189A-4F05-B081-27F2FABB2E7E}"
+ ProjectSection(SolutionItems) = preProject
+ WmsSignForDeliveryService.txt = WmsSignForDeliveryService.txt
+ EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "14-QcMgr", "14-QcMgr", "{D65B00D5-F40C-4FF2-8F8D-870772FAAA56}"
EndProject
@@ -131,11 +134,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tnb.ProductionMgr.Entities"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "16-PerMgr", "16-PerMgr", "{74AB6486-1090-4CC9-9D1A-F1245E3ECFC3}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tnb.PerMgr", "PerMgr\Tnb.PerMgr\Tnb.PerMgr.csproj", "{D41946CF-09C6-4CA4-A1F4-42E7E1538BF7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tnb.PerMgr", "PerMgr\Tnb.PerMgr\Tnb.PerMgr.csproj", "{D41946CF-09C6-4CA4-A1F4-42E7E1538BF7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tnb.PerMgr.Entities", "PerMgr\Tnb.PerMgr.Entities\Tnb.PerMgr.Entities.csproj", "{42AD083D-D199-4B09-ADD8-89251011C959}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tnb.PerMgr.Entities", "PerMgr\Tnb.PerMgr.Entities\Tnb.PerMgr.Entities.csproj", "{42AD083D-D199-4B09-ADD8-89251011C959}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tnb.PerMgr.Interfaces", "PerMgr\Tnb.PerMgr.Interfaces\Tnb.PerMgr.Interfaces.csproj", "{F3656494-27D3-4BD7-B831-8D909DFBD7B9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tnb.PerMgr.Interfaces", "PerMgr\Tnb.PerMgr.Interfaces\Tnb.PerMgr.Interfaces.csproj", "{F3656494-27D3-4BD7-B831-8D909DFBD7B9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index 57c90ee2..83daa894 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -15,6 +15,10 @@ namespace Tnb.WarehouseMgr.Entities.Consts
///
public const string WMS_INSTOCK_D_BILL_STATUS_TYPEID = "25065133038101";
///
+ /// 业务类型TypeId
+ ///
+ public const string WMS_BIZTYPE_ID = "25043955941909";
+ ///
/// 预任务生成EnCode
///
public const string WMS_PRETASK_H_ENCODE = "PreTaskGen";
@@ -42,8 +46,8 @@ namespace Tnb.WarehouseMgr.Entities.Consts
/// 预任务单据状态-已完成Id
///
public const string PRETASK_BILL_STATUS_CANCEL_ID = "26126842129701";
-
- //
+
+ //
///
/// 任务单据状态-待执行Id
///
@@ -65,7 +69,7 @@ namespace Tnb.WarehouseMgr.Entities.Consts
/// 任务单据状态-已取消ID
///
public const string TASK_BILL_STATUS_CANCEL_ID = "26126863175461";
-
+
///
/// 单据状态-作业中
///
@@ -74,6 +78,23 @@ namespace Tnb.WarehouseMgr.Entities.Consts
/// 单据状态-完成
///
public const string BILLSTATUS_COMPLETE_ID = "25065149810453";
+ ///
+ /// 单据状态-取消
+ ///
+ public const string BILLSTATUS_CANCEL_ID = "25065146252309";
+ ///
+ /// 单据状态-新增
+ ///
+ public const string BILLSTATUS_ADD_ID = "25065138925589";
+ ///
+ /// 单据状态-已呼叫
+ ///
+ public const string BILLSTATUS_CALLED_ID = "25065138925589";
+ ///
+ /// 单据状态-待配送
+ ///
+ public const string BILLSTATUS_TOBESHIPPED_ID = "26169434213669";
+
///
/// 任务类型-入库TypeId
///
@@ -86,7 +107,7 @@ namespace Tnb.WarehouseMgr.Entities.Consts
/// 任务类型-转移TypeId
///
public const string WMS_PRETASK_TRANSFER_TYPE_ID = "26126753796389";
-
+
///
/// 预任务生成业务类型-空载具出库
///
@@ -149,7 +170,5 @@ namespace Tnb.WarehouseMgr.Entities.Consts
///
public const string BARCODE_PRINT_STATUS_COMPLETE_ID = "26191372853541";
-
-
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/SignForDeliveryInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/SignForDeliveryInput.cs
new file mode 100644
index 00000000..f41c5f38
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/SignForDeliveryInput.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
+{
+ ///
+ /// 出库签收输入参数
+ ///
+ public class SignForDeliveryInput
+ {
+ ///
+ /// 任务ID
+ ///
+ public string disTaskId { get; set; }
+ ///
+ /// 载具ID
+ ///
+ public string carryId { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Outputs/CarryInfoOutput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Outputs/CarryInfoOutput.cs
new file mode 100644
index 00000000..279ad345
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Outputs/CarryInfoOutput.cs
@@ -0,0 +1,142 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Entities.Dto.Outputs
+{
+ ///
+ /// 载具信息输出类
+ ///
+ public class CarryInfoOutput
+ {
+ ///
+ /// 租户ID
+ ///
+ public string? tenant_id { get; set; }
+
+ ///
+ /// 所属组织ID
+ ///
+ public string? org_id { get; set; }
+
+ ///
+ /// 载具编号
+ ///
+ public string carry_code { get; set; } = string.Empty;
+
+ ///
+ /// 载具名称
+ ///
+ public string carry_name { get; set; } = string.Empty;
+
+ ///
+ /// 状态
+ ///
+ public int status { get; set; }
+
+ ///
+ /// 载具状态
+ ///
+ public string carry_status { get; set; }
+
+ ///
+ /// 载具分类ID
+ ///
+ public string carrystd_id { get; set; } = string.Empty;
+
+ ///
+ /// 载具库位ID
+ ///
+ public string? location_id { get; set; }
+
+ ///
+ /// 载具库位编号
+ ///
+ public string? location_code { get; set; }
+
+ ///
+ /// 是否锁定
+ ///
+ public int is_lock { get; set; }
+
+ ///
+ /// 出库类型
+ ///
+ public string out_status { get; set; }
+
+ ///
+ /// 是否检验
+ ///
+ public int is_check { get; set; }
+
+ ///
+ /// 来源单据ID
+ ///
+ public string? source_id { get; set; }
+
+ ///
+ /// 来源单据代码
+ ///
+ public string? source_code { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string create_id { get; set; } = string.Empty;
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime create_time { get; set; } = DateTime.Now;
+
+ ///
+ /// 最后修改人员ID
+ ///
+ public string? modify_id { get; set; }
+
+ ///
+ /// 最后修改时间
+ ///
+ public DateTime? modify_time { get; set; }
+
+ ///
+ /// 扩展字段
+ ///
+ public string? extras { get; set; }
+
+ ///
+ /// 时间戳(用于并发控制)
+ ///
+ public DateTime? timestamp { get; set; }
+
+ ///
+ /// 打包号
+ ///
+ public string? bale_num { get; set; }
+
+ ///
+ /// 齐套搭配方案ID
+ ///
+ public string? collocation_scheme_id { get; set; }
+
+ ///
+ /// 齐套搭配方案编号
+ ///
+ public string? collocation_scheme_code { get; set; }
+ ///
+ /// 载具明细列表
+ ///
+ public List carryDetails { get; set; }=new List();
+ ///
+ /// 载具条码列表
+ ///
+ public List carryCodes { get; set; } = new List();
+ ///
+ /// 载具无聊分拣明细
+ ///
+ public List carryMats { get; set; } = new List();
+
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
index 94df7398..fcd567dd 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
@@ -1,6 +1,7 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
+using SqlSugar.DbConvert;
namespace Tnb.WarehouseMgr.Entities;
@@ -42,7 +43,9 @@ public partial class WmsCarryH : BaseEntity
///
/// 载具状态
///
- public string carry_status { get; set; }
+ ///
+ [SugarColumn(ColumnDataType = "varchar(32)", SqlParameterDbType = typeof(CommonPropertyConvert))]
+ public int carry_status { get; set; }
///
/// 载具分类ID
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsDistaskH.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsDistaskH.part.cs
index cf9870e0..9bbbc560 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsDistaskH.part.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsDistaskH.part.cs
@@ -13,5 +13,5 @@ public partial class WmsDistaskH
/// 载具状态
///
[SugarColumn(IsIgnore = true)]
- public string carry_status { get; set; }
+ public int carry_status { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsFeedingrecordCode.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsFeedingrecordCode.cs
index bba6c031..cdc69402 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsFeedingrecordCode.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsFeedingrecordCode.cs
@@ -94,9 +94,4 @@ public partial class WmsFeedingrecordCode : BaseEntity
///
public DateTime? modify_time { get; set; }
- ///
- /// 行号
- ///
- public int no { get; set; }
-
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs
index 7a0478e6..e88b2244 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs
@@ -55,9 +55,9 @@ public partial class WmsKittingoutD : BaseEntity
public string? code_batch { get; set; }
///
- /// 数量(件数)
+ /// 出库需求数量
///
- public decimal qty { get; set; }
+ public decimal pr_qty { get; set; }
///
/// 箱数
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingH.cs
index 1a665b3a..b8001b33 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingH.cs
@@ -122,7 +122,7 @@ public partial class WmsSetsortingH : BaseEntity
///
/// 顺序号
///
- public int order { get; set; }
+ public int seq { get; set; }
///
/// 备注
@@ -152,11 +152,21 @@ public partial class WmsSetsortingH : BaseEntity
///
/// 修改用户
///
- public string modify_id { get; set; } = string.Empty;
+ public string? modify_id { get; set; }
///
/// 修改时间
///
- public DateTime modify_time { get; set; } = DateTime.Now;
+ public DateTime? modify_time { get; set; }
+
+ ///
+ /// 流程任务Id
+ ///
+ public string? f_flowtaskid { get; set; }
+
+ ///
+ /// 流程引擎Id
+ ///
+ public string? f_flowid { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingH.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingH.part.cs
new file mode 100644
index 00000000..0d34f784
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingH.part.cs
@@ -0,0 +1,20 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities;
+
+///
+/// 齐套分拣主表
+///
+public partial class WmsSetsortingH
+{
+ ///
+ /// 载具ID
+ ///
+ [SugarColumn(IsIgnore = true)]
+ public string? carry_id { get; set; }
+
+ [SugarColumn(IsIgnore = true)]
+ public string? carry_code { get; set; }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Properties/launchSettings.json b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Properties/launchSettings.json
new file mode 100644
index 00000000..190e0f72
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.WarehouseMgr.Entities": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50287;http://localhost:50288"
+ }
+ }
+}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmskittingOutService.cs
new file mode 100644
index 00000000..db94d4ad
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmskittingOutService.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Interfaces
+{
+ ///
+ /// 齐套出库服务接口
+ ///
+ public interface IWmskittingOutService
+ {
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/Properties/launchSettings.json b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..e52cdd23
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.WarehouseMgr.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50293;http://localhost:50294"
+ }
+ }
+}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index b20cea3f..c8390c52 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -446,11 +446,11 @@ namespace Tnb.WarehouseMgr
for (int i = 0; i < multis.Count; i++)
{
var carryStatus = multis[i].carry_status;
- if (multis[i].carry_status == "0")
+ if (multis[i].carry_status == (int)EnumCarryStatus.空闲)
{
- carryStatus = "1";
+ carryStatus = (int)EnumCarryStatus.空闲;
}
- await _db.Updateable().SetColumns(it => new BasLocation { is_use = carryStatus, is_lock = 0 }).Where(it => it.id == multis[i].endlocation_id).ExecuteCommandAsync();
+ await _db.Updateable().SetColumns(it => new BasLocation { is_use = carryStatus.ToString(), is_lock = 0 }).Where(it => it.id == multis[i].endlocation_id).ExecuteCommandAsync();
}
//更新业务主表的单据状态
if (disTasks?.Count > 0)
@@ -517,7 +517,10 @@ namespace Tnb.WarehouseMgr
{
await _db.Ado.BeginTranAsync();
//根据生成的预任务,插入预任务操作记录
- await _db.Insertable(input.PreTaskRecord).ExecuteCommandAsync();
+ if (input.PreTaskRecord != null)
+ {
+ await _db.Insertable(input.PreTaskRecord).ExecuteCommandAsync();
+ }
if (input.PreTaskHandleCodes.Count > 0)
{
await _db.Insertable(input.PreTaskHandleCodes).ExecuteCommandAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
index 377f2f6d..006c31e9 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
@@ -22,6 +22,7 @@ using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Attributes;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
@@ -69,9 +70,9 @@ namespace Tnb.WarehouseMgr
var subCarry = await _db.Queryable().SingleAsync(it => it.id == subCarryId);
if (carry != null && subCarry != null)
{
- carry.carry_status = "1";
+ carry.carry_status = (int)EnumCarryStatus.占用;
var row = await _db.Updateable(carry).ExecuteCommandAsync();
- subCarry.carry_status = "1";
+ subCarry.carry_status = (int)EnumCarryStatus.占用;
row = await _db.Updateable(subCarry).ExecuteCommandAsync();
//更新载具明细表
WmsCarryD wmsCarryD = new()
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
index d7c079df..8945d77a 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
@@ -18,6 +18,7 @@ using Tnb.Common.Utils;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
@@ -35,11 +36,11 @@ namespace Tnb.WarehouseMgr
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
public WmsCarryService(
- ISqlSugarRepository repository,
- IUserManager userManager,
- IBillRullService billRullService,
+ ISqlSugarRepository repository,
+ IUserManager userManager,
+ IBillRullService billRullService,
IRunService runService,
- IVisualDevService visualDevService )
+ IVisualDevService visualDevService)
{
_db = repository.AsSugarClient();
_userManager = userManager;
@@ -49,6 +50,23 @@ namespace Tnb.WarehouseMgr
OverideFuncs.CreateAsync = ExchangeCarry;
}
+ ///
+ /// 根据载具ID获取载具信息
+ ///
+ ///
+ ///
+ [HttpGet]
+ public async Task GetCarryInfoById([FromRoute] string carryId)
+ {
+ var carryOutPut = await _db.Queryable().Where(it => it.id == carryId).Select().FirstAsync();
+ if (carryOutPut == null) throw new AppFriendlyException("找不到载具", 500);
+ carryOutPut.carryDetails = await _db.Queryable().Where(it=>it.carry_id == carryId).ToListAsync();
+ carryOutPut.carryCodes = await _db.Queryable().Where(it => it.carry_id == carryId).ToListAsync();
+ carryOutPut.carryMats = await _db.Queryable().Where(it => it.carry_id == carryId).ToListAsync();
+ return carryOutPut;
+ }
+
+
///
/// 更换载具
///
@@ -63,7 +81,7 @@ namespace Tnb.WarehouseMgr
///
private async Task ExchangeCarry(VisualDevModelDataCrInput input)
{
-
+
var isOk = false;
try
@@ -142,11 +160,11 @@ namespace Tnb.WarehouseMgr
try
{
carryObj.status = 0;
- carryObj.carry_status = "0";
+ carryObj.carry_status = (int)EnumCarryStatus.空闲;
carryObj.location_id = null;
carryObj.location_code = null;
carryObj.out_status = "0";
- carryObj.is_check = 0;
+ carryObj.is_check = 1;
carryObj.status = 1;
carryObj.bale_num = null;
carryObj.collocation_scheme_id = null;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs
index 739d972f..1bdd4499 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs
@@ -22,6 +22,7 @@ using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Attributes;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
@@ -91,9 +92,9 @@ namespace Tnb.WarehouseMgr
wmsCarryUnbindCode.create_time = DateTime.Now;
row = await _db.Insertable(wmsCarryUnbindCode).ExecuteCommandAsync();
}
- carry.carry_status = "0";
+ carry.carry_status = (int)EnumCarryStatus.空闲;
row = await _db.Updateable(carry).ExecuteCommandAsync();
- subCarry.carry_status = "0";
+ subCarry.carry_status = (int)EnumCarryStatus.空闲;
row = await _db.Updateable(subCarry).ExecuteCommandAsync();
isOk = (row > 0);
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs
index 94c43365..5066db04 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs
@@ -158,7 +158,7 @@ namespace Tnb.WarehouseMgr
var location = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsDelivery.startlocation_id)].ToString());
{
//载具加锁,增加库位信息
- await _db.Updateable().SetColumns(it => new WmsCarryH { carry_status = ((int)EnumCarryStatus.占用).ToString(),
+ await _db.Updateable().SetColumns(it => new WmsCarryH { carry_status = (int)EnumCarryStatus.占用,
is_lock = 1, location_id = input.data[nameof(WmsDelivery.startlocation_id)].ToString(), location_code = location.location_code}).Where(it => it.id == input.data[nameof(WmsDelivery.carry_id)].ToString()).ExecuteCommandAsync();
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs
index d6beff87..fe5418ca 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs
@@ -78,7 +78,7 @@ namespace Tnb.WarehouseMgr
var setQty = await _db.Queryable().FirstAsync(it => it.bill_code == input.data[nameof(WmsEmptyOutstockH.bill_code)].ToString());
var carrys = await _db.Queryable().LeftJoin((a, b) => a.location_id == b.id)
.Where((a, b) => a.carrystd_id == input.data[nameof(WmsEmptyOutstockH.carrystd_id)].ToString()
- && a.carry_status == "0" && a.is_lock == 0 && b.is_lock == 0)
+ && a.carry_status == (int)EnumCarryStatus.空闲 && a.is_lock == 0 && b.is_lock == 0)
.ToListAsync();
WmsPointH sPoint = null;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
index 2bb1f90e..52078432 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
@@ -81,24 +81,40 @@ namespace Tnb.WarehouseMgr
List carryCodes = new();
foreach (var os in outStockDList)
{
- var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id)
- .Where((a, b) => b.material_id == os.material_id && b.code_batch == os.code_batch && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用)
+ var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id).InnerJoin((a, b, c) => a.location_id == c.id)
+ .Where((a, b, c) => b.material_id == os.material_id && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用 && c.is_type == ((int)EnumLocationType.存储库位).ToString())
+ .WhereIF(!string.IsNullOrEmpty(os.code_batch), (a, b) => b.code_batch == os.code_batch)
.Select()
.ToListAsync();
if (carryCodesPart?.Count > 0)
{
+
carryCodes.AddRange(carryCodesPart);
var codeQty = carryCodes.Sum(x => x.codeqty);
if (codeQty < os.pr_qty)
{
throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500);
}
- var partCarryMats = carryCodesPart.Adapt>();
- partCarryMats.ForEach(x =>
+ List curCarryCodes = new();
+ for (int i = 0; i < carryCodesPart.Count; i++)
{
- x.need_qty = (int)os.pr_qty;
- x.real_qty = codeQty;
- });
+ if (os.pr_qty > carryCodesPart[i].codeqty)
+ {
+ os.pr_qty -= carryCodesPart[i].codeqty;
+ curCarryCodes.Add(carryCodesPart[i]);
+ }
+ else if (os.pr_qty <= carryCodesPart[i].codeqty)
+ {
+ carryCodesPart[i].codeqty = os.pr_qty;
+ curCarryCodes.Add(carryCodesPart[i]);
+ break;
+ }
+ }
+ var partCarryMats = curCarryCodes.Adapt>();
+ for (int i = 0; i < partCarryMats.Count; i++)
+ {
+ partCarryMats[i].need_qty = carryCodesPart[i].codeqty;
+ }
carryMats.AddRange(partCarryMats);
}
}
@@ -109,12 +125,12 @@ namespace Tnb.WarehouseMgr
.Select(x =>
{
WmsCarryMat? carryMat = x.FirstOrDefault()!;
- carryMat.real_qty = x.Sum(d => d.real_qty);
+ carryMat.need_qty = x.Sum(d => d.need_qty);
return carryMat;
})
.ToList();
await _db.Insertable(carryMats).ExecuteCommandAsync();
- var dic = carryMats.DistinctBy(x => x.carry_id).ToDictionary(x => x.carry_id, x => x.real_qty);
+ var dic = carryMats.DistinctBy(x => x.carry_id).ToDictionary(x => x.carry_id, x => x.need_qty);
var allOutIds = new List();
var sortingOutIds = new List();
foreach (var pair in dic)
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
index eecedd09..657c232a 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
@@ -22,6 +22,7 @@ using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Attributes;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
@@ -83,9 +84,9 @@ namespace Tnb.WarehouseMgr
create_time = DateTime.Now
};
var row = await _db.Insertable(wmsCarryD).ExecuteCommandAsync();
- carry.carry_status = "1";
+ carry.carry_status = (int)EnumCarryStatus.占用;
row = await _db.Updateable(carry).ExecuteCommandAsync();
- subCarry.carry_status = "1";
+ subCarry.carry_status = (int)EnumCarryStatus.占用;
row = await _db.Updateable(subCarry).ExecuteCommandAsync();
var items = await _db.Queryable().Where(it => it.carry_id == subCarryId).ToListAsync();
//更新载具绑定条码表
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryUnbindService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryUnbindService .cs
index 37b39ebf..6652b476 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryUnbindService .cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryUnbindService .cs
@@ -22,6 +22,7 @@ using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Attributes;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
@@ -90,9 +91,9 @@ namespace Tnb.WarehouseMgr
wmsCarryUnbindCode.create_time = DateTime.Now;
row = await _db.Insertable(wmsCarryUnbindCode).ExecuteCommandAsync();
}
- carry.carry_status = "0";
+ carry.carry_status = (int)EnumCarryStatus.空闲;
row = await _db.Updateable(carry).ExecuteCommandAsync();
- subCarry.carry_status = "0";
+ subCarry.carry_status = (int)EnumCarryStatus.空闲;
row = await _db.Updateable(subCarry).ExecuteCommandAsync();
isOk = (row > 0);
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs
index 2ecb1828..3b44dd0b 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs
@@ -157,7 +157,7 @@ namespace Tnb.WarehouseMgr
//载具加锁,增加库位信息
await _db.Updateable().SetColumns(it => new WmsCarryH
{
- carry_status = ((int)EnumCarryStatus.占用).ToString(),
+ carry_status = (int)EnumCarryStatus.占用,
is_lock = 1,
location_id = input.data[nameof(WmsDelivery.startlocation_id)].ToString(),
location_code = location.location_code
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs
index 0f4dbfda..ba1ace87 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs
@@ -75,7 +75,7 @@ namespace Tnb.WarehouseMgr
var setQty = await _db.Queryable().FirstAsync(it => it.bill_code == input.data[nameof(WmsEmptyOutstockH.bill_code)].ToString());
var carrys = await _db.Queryable().LeftJoin((a, b) => a.location_id == b.id)
.Where((a, b) => a.carrystd_id == input.data[nameof(WmsEmptyOutstockH.carrystd_id)].ToString()
- && a.carry_status == "0" && a.is_lock == 0 && b.is_lock == 0)
+ && a.carry_status ==(int)EnumCarryStatus.空闲 && a.is_lock == 0 && b.is_lock == 0)
.ToListAsync();
WmsPointH sPoint = null;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAFeedingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAFeedingService.cs
index 45fbce7b..5143677d 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAFeedingService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAFeedingService.cs
@@ -61,10 +61,9 @@ namespace Tnb.WarehouseMgr
///
///
///
+
private async Task WmsPDAFeedingRecord(VisualDevModelDataCrInput input)
{
-
-
var isOk = false;
try
{
@@ -79,35 +78,24 @@ namespace Tnb.WarehouseMgr
var feedBox = await _db.Queryable().SingleAsync(it => it.feedbox_code == feedBoxCode);
var carryMaterial = await _db.Queryable().FirstAsync(it => it.carry_id == carryId);
var carryCodes = await _db.Queryable().Where(it => it.carry_id == carryId).ToListAsync();
- if (carry != null && feedBox != null)
+ if (carryMaterial != null && feedBox != null && carry != null)
{
//更新投料箱
feedBox.material_id = carryMaterial.material_id;
feedBox.material_code = carryMaterial.material_code;
feedBox.qty = carryMaterial.qty;
feedBox.batch = carryMaterial?.code_batch!;
- feedBox.status = carry.status;
- feedBox.create_id = _userManager.UserId;
- feedBox.create_time = DateTime.Now;
- var row = await _db.Updateable(feedBox).ExecuteCommandAsync();
- //更新投料记录条码表
- foreach (var carryCode in carryCodes)
- {
- WmsFeedingrecordCode wmsFeedingrecordCode = new();
- wmsFeedingrecordCode.id = SnowflakeIdHelper.NextId();
- wmsFeedingrecordCode.org_id = _userManager.User.OrganizeId;
- wmsFeedingrecordCode.record_id = input.data["ReturnIdentity"]?.ToString()!;
- wmsFeedingrecordCode.material_id = carryCode.material_id;
- wmsFeedingrecordCode.material_code = carryCode.material_code;
- wmsFeedingrecordCode.barcode = carryCode.barcode;
- wmsFeedingrecordCode.code_batch = carryCode.code_batch;
- wmsFeedingrecordCode.codeqty = carryCode.codeqty;
- wmsFeedingrecordCode.unit_id = carryCode.unit_id;
- wmsFeedingrecordCode.unit_code = carryCode.unit_code;
- wmsFeedingrecordCode.create_id = _userManager.UserId;
- wmsFeedingrecordCode.create_time = DateTime.Now;
- row = await _db.Insertable(wmsFeedingrecordCode).ExecuteCommandAsync();
- }
+ feedBox.modify_id = _userManager.UserId;
+ feedBox.modify_time = DateTime.Now;
+ var row = await _db.Updateable(feedBox)
+ .UpdateColumns(it => new {
+ it.material_id,
+ it.material_code,
+ it.qty,
+ it.batch,
+ it.modify_id,
+ it.modify_time
+ }).ExecuteCommandAsync();
//更新载具
row = await UpdateNullCarry(carry);
isOk = (row > 0);
@@ -115,13 +103,13 @@ namespace Tnb.WarehouseMgr
}
else
{
- if (carry == null)
+ if (carryMaterial == null)
{
- throw new AppFriendlyException("没有可用的旧载具", 500);
+ throw new AppFriendlyException("没有可用的载具", 500);
}
if (feedBox == null)
{
- throw new AppFriendlyException("没有可用的新载具", 500);
+ throw new AppFriendlyException("没有可用的投料箱", 500);
}
}
@@ -129,7 +117,7 @@ namespace Tnb.WarehouseMgr
}
catch (Exception ex)
{
- Log.Error("载具更换失败", ex);
+ Log.Error("投料失败", ex);
await _db.Ado.RollbackTranAsync();
throw;
}
@@ -142,7 +130,7 @@ namespace Tnb.WarehouseMgr
try
{
carryObj.status = 0;
- carryObj.carry_status = "0";
+ carryObj.carry_status = (int)EnumCarryStatus.空闲;
carryObj.location_id = null;
carryObj.location_code = null;
carryObj.out_status = "0";
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs
index fa06b6d5..f091e3fe 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs
@@ -239,7 +239,7 @@ namespace Tnb.WarehouseMgr
await _db.Insertable(carryCodes).ExecuteCommandAsync();
await _db.Insertable(instockCOdes).CallEntityMethod(it => it.Create(orgId)).ExecuteCommandAsync();
await _wareHouseService.GenInStockTaskHandleAfter(preTaskUpInput,
- it => new WmsCarryH { carry_code = input.data[nameof(WmsCarryH.carry_code)].ToString()!, is_lock = 1, carry_status = ((int)EnumCarryStatus.占用).ToString(), location_id = preTaskUpInput.CarryStartLocationId, location_code = preTaskUpInput.CarryStartLocationCode },
+ it => new WmsCarryH { carry_code = input.data[nameof(WmsCarryH.carry_code)].ToString()!, is_lock = 1, carry_status = (int)EnumCarryStatus.占用, location_id = preTaskUpInput.CarryStartLocationId, location_code = preTaskUpInput.CarryStartLocationCode },
it => new BasLocation { is_lock = 1, is_use = "1" });
if (instockCOdes?.Count > 0)
{
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs
index 54c69b7b..89027139 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs
@@ -145,7 +145,7 @@ namespace Tnb.WarehouseMgr
var baleNum = input.data[nameof(WmsCarryH.bale_num)]?.ToString();
await _wareHouseService.GenInStockTaskHandleAfter(preTaskUpInput,
- it => new WmsCarryH { is_lock = 1, location_id = preTaskUpInput.CarryStartLocationId, location_code = preTaskUpInput.CarryStartLocationCode, carry_status = ((int)EnumCarryStatus.寄存).ToString(), bale_num = baleNum },
+ it => new WmsCarryH { is_lock = 1, location_id = preTaskUpInput.CarryStartLocationId, location_code = preTaskUpInput.CarryStartLocationCode, carry_status = (int)EnumCarryStatus.寄存, bale_num = baleNum },
it => new BasLocation { is_lock = 1 });
//((int)EnumCarryStatus.寄存).ToString()
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs
index 44c4981a..259fa4e2 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs
@@ -122,7 +122,7 @@ namespace Tnb.WarehouseMgr
//载具加锁,增加库位信息
await _db.Updateable().SetColumns(it => new WmsCarryH
{
- carry_status = ((int)EnumCarryStatus.占用).ToString(),
+ carry_status = (int)EnumCarryStatus.占用,
is_lock = 1,
location_id = input.data[nameof(WmsTransfer.startlocation_id)].ToString(),
location_code = location.location_code
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs
new file mode 100644
index 00000000..7bc941a4
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs
@@ -0,0 +1,197 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Extension;
+using JNPF.Common.Security;
+using JNPF.FriendlyException;
+using JNPF.Systems.Interfaces.System;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using NPOI.SS.Formula;
+using SqlSugar;
+using Tnb.BasicData.Entities;
+using Tnb.WarehouseMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Consts;
+using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Enums;
+using Tnb.WarehouseMgr.Interfaces;
+
+namespace Tnb.WarehouseMgr
+{
+ ///
+ /// 齐套分拣服务类
+ ///
+ public class WmsSetSortingService : BaseWareHouseService
+ {
+ private readonly ISqlSugarClient _db;
+ private readonly IWareHouseService _wareHouseService;
+ private readonly IBillRullService _billRullService;
+ private readonly IUserManager _userManager;
+
+ public WmsSetSortingService(ISqlSugarRepository repository, IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService)
+ {
+ _db = repository.AsSugarClient();
+ _wareHouseService = wareHouseService;
+ _billRullService = billRullService;
+ _userManager = userManager;
+ }
+
+ ///
+ /// 齐套分拣(新增状态)
+ ///
+ ///
+ [HttpPost]
+ public async Task PackSortingByAdd()
+ {
+ var setSortings = await _db.Queryable()
+ .Where(a => a.status == WmsWareHouseConst.BILLSTATUS_ADD_ID).OrderBy(a => a.seq)
+ .ToListAsync();
+ var items = await _db.Queryable().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_ON_ID).ToListAsync();
+ var onFlag = items?.Count > 0;
+ if (setSortings?.Count > 0 && !onFlag)
+ {
+ var singleSorting = setSortings[^setSortings.Count];
+ var setSortingDList = await _db.Queryable().Where(it => it.bill_id == singleSorting.id).ToListAsync();
+ if (setSortingDList?.Count > 0)
+ {
+ List carryMats = new();
+ List carryCodes = new();
+ List carryIds = new();
+ foreach (var os in setSortingDList)
+ {
+ var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id)
+ .Where((a, b) => b.material_id == os.material_id && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用)
+ .WhereIF(!string.IsNullOrEmpty(os.code_batch), (a, b) => b.code_batch == os.code_batch)
+ .Select()
+ .ToListAsync();
+ if (carryCodesPart?.Count > 0)
+ {
+ carryCodes.AddRange(carryCodesPart);
+ var codeQty = carryCodes.Sum(x => x.codeqty);
+ if (codeQty < os.pr_qty)
+ {
+ throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500);
+ }
+ var partCarryMats = carryCodesPart.Adapt>();
+ for (int i = 0; i < partCarryMats.Count; i++)
+ {
+ partCarryMats[i].need_qty = carryCodesPart[i].codeqty;
+ }
+
+ carryMats.AddRange(partCarryMats);
+ }
+ }
+ if (carryMats.Count > 0)
+ {
+ carryMats.ForEach(x => x.id = SnowflakeIdHelper.NextId());
+ carryMats = carryMats.OrderBy(o => o.create_time).GroupBy(g => new { g.carry_id, g.material_id, g.code_batch })
+ .Select(x =>
+ {
+ WmsCarryMat? carryMat = x.FirstOrDefault()!;
+ carryMat.need_qty = x.Sum(d => d.need_qty);
+ return carryMat;
+ })
+ .ToList();
+ await _db.Insertable(carryMats).ExecuteCommandAsync();
+ var dic = carryMats.DistinctBy(x => x.carry_id).ToDictionary(x => x.carry_id, x => x.need_qty);
+
+ carryIds = carryMats.Select(x => x.carry_id).Distinct().ToList();
+ await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.全部出).ToString() }).Where(it => carryIds.Contains(it.id)).ExecuteCommandAsync();
+ //天益项目不需要
+ //await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.分拣出).ToString() }).Where(it => sortingOutIds.Contains(it.id)).ExecuteCommandAsync();
+ }
+ var carrys = await _db.Queryable().Where(it => carryIds.Contains(it.id)).ToArrayAsync();
+ if (carrys?.Length > 0)
+ {
+ List preTasks = new();
+ List locIds = new();
+ string firstLocationId = "27010980724501", secondLocationId = "27010987857941";
+ if (carrys.Length > 6)
+ {
+ var leftCarrys = carrys[..6];
+ var rightCarrys = carrys[6..];
+ await _genPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
+ await _genPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
+ }
+ else
+ {
+ await _genPreTask(carrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
+ }
+ var isOk = await _wareHouseService.GenPreTask(preTasks, null);
+ GenPreTaskUpInput genPreTaskAfterUpInput = new();
+ genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList();
+ genPreTaskAfterUpInput.LocationIds = new HashSet(locIds).ToList();
+ await _wareHouseService.GenInStockTaskHandleAfter(genPreTaskAfterUpInput, it => new WmsCarryH { is_lock = 1, carry_status = (int)EnumCarryStatus.齐套分拣 }, it => new BasLocation { is_use = ((int)EnumCarryStatus.齐套分拣).ToString() });
+ }
+
+ }
+ }
+ }
+
+ private async Task _genPreTask(WmsCarryH[] carrys, List locIds, string eLocationId, string requireId, string requireCode, List preTasks)
+ {
+ var loc = await _db.Queryable().SingleAsync(it => it.id == eLocationId);
+ foreach (var carry in carrys)
+ {
+ WmsPointH sPoint = await _db.Queryable().FirstAsync(it => it.location_id == carry.location_id);
+ WmsPointH ePoint = await _db.Queryable().FirstAsync(it => it.location_id == eLocationId);
+
+ if (sPoint != null && ePoint != null)
+ {
+ var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id);
+ locIds.AddRange(points.Select(x => x.location_id).ToList()!);
+ //根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
+ if (points?.Count > 0)
+ {
+ if (points.Count <= 2) throw new AppFriendlyException("该路径不存在", 500);
+ var curPreTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
+ {
+ var sPoint = it.FirstOrDefault();
+ var ePoint = it.LastOrDefault();
+
+ WmsPretaskH preTask = new();
+ preTask.org_id = _userManager.User.OrganizeId;
+ preTask.startlocation_id = sPoint?.location_id!;
+ preTask.startlocation_code = sPoint?.location_code!;
+ preTask.endlocation_id = ePoint?.location_id!;
+ preTask.endlocation_code = ePoint?.location_code!;
+ preTask.start_floor = sPoint?.floor.ToString();
+ preTask.end_floor = ePoint?.floor.ToString();
+ preTask.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult();
+ preTask.status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID;
+ preTask.biz_type = WmsWareHouseConst.BIZTYPE_WMSOUTSTOCK_ID;
+ preTask.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
+ preTask.carry_id = carry.id;
+ preTask.carry_code = carry.carry_code;
+ preTask.area_id = sPoint?.area_id!;
+ preTask.area_code = it.Key;
+ preTask.require_id = requireId;
+ preTask.require_code = requireCode;
+ preTask.create_id = _userManager.UserId;
+ preTask.create_time = DateTime.Now;
+ return preTask;
+ }).ToList();
+ if (loc.is_sign == 0)
+ {
+ curPreTasks[^1].is_sign = 0; // 修改最后一个元素的是否签收值
+ }
+ preTasks.AddRange(curPreTasks);
+
+ }
+ }
+ }
+ }
+
+
+ public override Task ModifyAsync(WareHouseUpInput input)
+ {
+ return Task.CompletedTask;
+
+ }
+
+
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSignForDeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSignForDeliveryService.cs
new file mode 100644
index 00000000..43d8af9d
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSignForDeliveryService.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+using JNPF.Common.Contracts;
+using JNPF.Common.Enums;
+using JNPF.Common.Extension;
+using JNPF.FriendlyException;
+using JNPF.Systems.Interfaces.System;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.CodeAnalysis.Operations;
+using SqlSugar;
+using Tnb.BasicData.Entities;
+using Tnb.WarehouseMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Consts;
+using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Dto.Inputs;
+using Tnb.WarehouseMgr.Interfaces;
+
+namespace Tnb.WarehouseMgr
+{
+ ///
+ /// 出库签收
+ ///
+ public class WmsSignForDeliveryService : BaseWareHouseService
+ {
+ private readonly ISqlSugarClient _db;
+ private readonly IWmsCarryService _wareCarryService;
+ private readonly IDictionaryDataService _dictionaryDataService;
+ private static Dictionary _dicBizType = new();
+ public WmsSignForDeliveryService(ISqlSugarRepository repository, IWmsCarryService wareCarryService, IDictionaryDataService dictionaryDataService)
+ {
+ _db = repository.AsSugarClient();
+ _wareCarryService = wareCarryService;
+ _dictionaryDataService = dictionaryDataService;
+ }
+ ///
+ /// 根据载具ID获取,对应的执行任务记录
+ ///
+ ///
+ ///
+ [HttpGet]
+ public async Task GetDisTasksByCarryId([FromRoute] string carryId)
+ {
+ var item = await _db.Queryable().FirstAsync(it => it.carry_id == carryId && it.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID && it.is_sign == 0);
+ return item;
+ }
+ ///
+ /// 出库签收
+ ///
+ ///
+ [HttpPost]
+ public async Task SignForDelivery(SignForDeliveryInput input)
+ {
+ if (_dicBizType.Count < 1)
+ {
+ _dicBizType = await _dictionaryDataService.GetDictionaryByTypeId(WmsWareHouseConst.WMS_BIZTYPE_ID);
+ }
+ try
+ {
+ await _db.Ado.BeginTranAsync();
+
+ var carry = await _db.Queryable().SingleAsync(it => it.id == input.carryId);
+ if (carry != null)
+ {
+ var disTask = await _db.Queryable().SingleAsync(it => it.id == input.disTaskId);
+ if (disTask != null)
+ {
+ if (_dicBizType.ContainsKey(disTask.biz_type))
+ {
+ switch (_dicBizType[disTask.biz_type])
+ {
+ case "空载具出库":
+ case "寄存出库":
+ case "齐套出库":
+ case "一般出库":
+ await _wareCarryService.UpdateNullCarry(carry);
+ break;
+ }
+ }
+ }
+ var loc = await _db.Queryable().SingleAsync(it => it.id == carry.location_id);
+ loc.is_use = "0";
+ await _db.Updateable(loc).UpdateColumns(it => it.is_use).ExecuteCommandAsync();
+ }
+
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception)
+ {
+ await _db.Ado.RollbackTranAsync();
+ throw;
+ }
+ }
+
+
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs
index 2ce0a3c7..20f2935c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs
@@ -122,7 +122,7 @@ namespace Tnb.WarehouseMgr
//载具加锁,增加库位信息
await _db.Updateable().SetColumns(it => new WmsCarryH
{
- carry_status = ((int)EnumCarryStatus.占用).ToString(),
+ carry_status = (int)EnumCarryStatus.占用,
is_lock = 1,
location_id = input.data[nameof(WmsTransfer.startlocation_id)].ToString(),
location_code = location.location_code
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs
new file mode 100644
index 00000000..3c2e978e
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs
@@ -0,0 +1,190 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Aop.Api.Domain;
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Extension;
+using JNPF.Common.Security;
+using JNPF.FriendlyException;
+using JNPF.Systems.Interfaces.System;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using Tnb.BasicData.Entities;
+using Tnb.WarehouseMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Consts;
+using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Enums;
+using Tnb.WarehouseMgr.Interfaces;
+
+namespace Tnb.WarehouseMgr
+{
+ ///
+ /// 齐套出库服务类
+ ///
+ public class WmskittingOutService : BaseWareHouseService, IWmskittingOutService
+ {
+ private readonly ISqlSugarClient _db;
+ private readonly IWareHouseService _warehouseService;
+ private readonly IUserManager _userManager;
+ private readonly IBillRullService _billRullService;
+ public WmskittingOutService(ISqlSugarRepository repository, IWareHouseService warehouseService, IUserManager userManager, IBillRullService billRullService)
+ {
+ _db = repository.AsSugarClient();
+ _warehouseService = warehouseService;
+ _userManager = userManager;
+ _billRullService = billRullService;
+ }
+ ///
+ /// 齐套出库(新增状态)
+ ///
+ ///
+ [HttpPost]
+ public async Task KittingOutByAdd()
+ {
+ try
+ {
+ await _db.Ado.BeginTranAsync();
+
+ var kittingOuts = await _db.Queryable()
+ .Where(a => a.status == WmsWareHouseConst.BILLSTATUS_ADD_ID)
+ .OrderBy(a => a.seq)
+ .ToListAsync();
+ // 是否有已呼叫的齐套出库任务
+ // var set = true ; 如果有 把set修改为false
+ var items = await _db.Queryable().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_CALLED_ID).ToListAsync();
+ var isCalled = items?.Count > 0;
+ if (kittingOuts?.Count > 0)
+ {
+ foreach (var ko in kittingOuts)
+ {
+ var carrys = await _db.Queryable().Where(it => it.collocation_scheme_id == ko.collocation_scheme_id && it.is_lock == 0).ToListAsync();
+ if (carrys?.Count > 0)
+ {
+ var firstCarry = carrys.FirstOrDefault();
+ GenPreTaskUpInput genPreTaskInput = new() { CarryId = firstCarry.id };
+ await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1 }, null!);
+ ko.status = WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID;
+ ko.carry_id = firstCarry.id;
+ ko.carry_code = firstCarry.carry_code;
+ await _db.Updateable(ko).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync();
+ }
+ else
+ {
+ //if(false) 跳出 插入完一次齐套分拣 set 改为false
+ if (!isCalled)
+ {
+ var setSortingH = ko.Adapt();
+ setSortingH.id = SnowflakeIdHelper.NextId();
+ setSortingH.kittingout_id = ko.id;
+ setSortingH.seq = ko.seq;
+ setSortingH.org_id = _userManager.User.OrganizeId;
+ setSortingH.create_id = _userManager.UserId;
+ setSortingH.create_time = DateTime.Now;
+ await _db.Insertable(setSortingH).ExecuteCommandAsync();
+
+ var kittingOutDetails = await _db.Queryable().Where(it => it.bill_id == setSortingH.id).ToListAsync();
+ var setSortDetails = kittingOutDetails.Adapt>();
+ setSortDetails.ForEach(x =>
+ {
+ x.id = SnowflakeIdHelper.NextId();
+ x.org_id = _userManager.User.OrganizeId;
+ x.create_id = _userManager.UserId;
+ x.create_time = DateTime.Now;
+ });
+ await _db.Insertable(setSortDetails).ExecuteCommandAsync();
+ ko.status = WmsWareHouseConst.BILLSTATUS_CALLED_ID;
+ await _db.Updateable(ko).UpdateColumns(it => it.status).ExecuteCommandAsync();
+ isCalled = true;
+ }
+ }
+ }
+ }
+
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception)
+ {
+ await _db.Ado.RollbackTranAsync();
+ throw;
+ }
+ }
+ ///
+ /// 齐套出库,(待配送状态)
+ ///
+ ///
+ [HttpPost]
+ public async Task KittingOutByIsToBeShipped()
+ {
+
+ var kittingOuts = await _db.Queryable()
+ .Where(a => a.status == WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID)
+ .OrderBy(a => a.seq)
+ .ToListAsync();
+ if (kittingOuts?.Count > 0)
+ {
+ var grpList = kittingOuts.GroupBy(g => g.location_id).ToList();
+ foreach (var koGrp in grpList)
+ {
+ var locs = await _db.Queryable().Where(it => it.id == koGrp.Key && it.is_use == "0" && it.is_lock == 0).ToListAsync();
+ if (locs?.Count > 0)
+ {
+
+ var arr = koGrp.ToArray();
+ var ko = arr[^arr.Length];
+ var carry = await _db.Queryable().SingleAsync(it => it.id == ko.carry_id);
+ if (carry != null)
+ {
+ WmsPointH sPoint = await _db.Queryable().FirstAsync(it => it.location_id == carry.location_id);
+ WmsPointH ePoint = await _db.Queryable().FirstAsync(it => it.location_id == ko.location_id);
+ if (sPoint != null && ePoint != null)
+ {
+ var points = await _warehouseService.PathAlgorithms(sPoint.id, ePoint.id);
+ if (points?.Count > 0)
+ {
+ if (points.Count <= 2) throw new AppFriendlyException("该路径不存在", 500);
+ var preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
+ {
+ var sPoint = it.FirstOrDefault();
+ var ePoint = it.LastOrDefault();
+
+ WmsPretaskH preTask = new();
+ preTask.org_id = _userManager.User.OrganizeId;
+ preTask.startlocation_id = sPoint?.location_id;
+ preTask.startlocation_code = sPoint?.location_code;
+ preTask.endlocation_id = ePoint?.location_id;
+ preTask.endlocation_code = ePoint?.location_code;
+ preTask.start_floor = sPoint?.floor.ToString();
+ preTask.end_floor = ePoint?.floor.ToString();
+ preTask.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult();
+ preTask.status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID;
+ preTask.biz_type = ko.biz_type;
+ preTask.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
+ preTask.carry_id = ko.carry_id;
+ preTask.carry_code = ko.carry_code;
+ preTask.area_id = sPoint?.area_id;
+ preTask.area_code = it.Key;
+ preTask.require_id = ko.id;
+ preTask.require_code = ko.bill_code;
+ preTask.create_id = _userManager.UserId;
+ preTask.create_time = DateTime.Now;
+ return preTask;
+ }).ToList();
+ await _warehouseService.GenPreTask(preTasks, null!);
+ var subCarrys = await _db.Queryable().Where(it => it.carry_id == ko.carry_id).ToListAsync();
+ var carryIds = subCarrys.Select(x => x.carry_id).Concat(new[] { ko.carry_id }).Distinct().ToList();
+ GenPreTaskUpInput genPreTaskInput = new() { CarryIds = carryIds, LocationIds = new List { carry.location_id, ko.location_id } };
+ await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1, carry_status = (int)EnumCarryStatus.齐套 }, it => new BasLocation { is_lock = 1 });
+
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/WmsSignForDeliveryService.txt b/WmsSignForDeliveryService.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/app/Tnb.Apps.Interfaces/Properties/launchSettings.json b/app/Tnb.Apps.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..c8996f68
--- /dev/null
+++ b/app/Tnb.Apps.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Apps.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50247;http://localhost:50263"
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/Tnb.Apps/Properties/launchSettings.json b/app/Tnb.Apps/Properties/launchSettings.json
new file mode 100644
index 00000000..a07fb231
--- /dev/null
+++ b/app/Tnb.Apps/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Apps": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50240;http://localhost:50264"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/Tnb.CollectiveOAuth/Properties/launchSettings.json b/common/Tnb.CollectiveOAuth/Properties/launchSettings.json
new file mode 100644
index 00000000..67b55152
--- /dev/null
+++ b/common/Tnb.CollectiveOAuth/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.CollectiveOAuth": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50269;http://localhost:50270"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/Tnb.Common.Core/Properties/launchSettings.json b/common/Tnb.Common.Core/Properties/launchSettings.json
new file mode 100644
index 00000000..8467993c
--- /dev/null
+++ b/common/Tnb.Common.Core/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Common.Core": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50271;http://localhost:50273"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/Tnb.Common/Properties/launchSettings.json b/common/Tnb.Common/Properties/launchSettings.json
new file mode 100644
index 00000000..38603b70
--- /dev/null
+++ b/common/Tnb.Common/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Common": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50246;http://localhost:50267"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/Tnb.SqlSugar/Properties/launchSettings.json b/common/Tnb.SqlSugar/Properties/launchSettings.json
new file mode 100644
index 00000000..ce32dbb9
--- /dev/null
+++ b/common/Tnb.SqlSugar/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.SqlSugar": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50289;http://localhost:50290"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/Tnb.Thirdparty/Properties/launchSettings.json b/common/Tnb.Thirdparty/Properties/launchSettings.json
new file mode 100644
index 00000000..b2a75244
--- /dev/null
+++ b/common/Tnb.Thirdparty/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Thirdparty": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50276;http://localhost:50277"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/Tnb.WebSockets/Properties/launchSettings.json b/common/Tnb.WebSockets/Properties/launchSettings.json
new file mode 100644
index 00000000..c89e7e57
--- /dev/null
+++ b/common/Tnb.WebSockets/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.WebSockets": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50272;http://localhost:50274"
+ }
+ }
+}
\ No newline at end of file
diff --git a/extend/Tnb.Extend.Entitys/Properties/launchSettings.json b/extend/Tnb.Extend.Entitys/Properties/launchSettings.json
new file mode 100644
index 00000000..dca0860f
--- /dev/null
+++ b/extend/Tnb.Extend.Entitys/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Extend.Entitys": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50285;http://localhost:50286"
+ }
+ }
+}
\ No newline at end of file
diff --git a/extend/Tnb.Extend.Interfaces/Properties/launchSettings.json b/extend/Tnb.Extend.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..77266e9a
--- /dev/null
+++ b/extend/Tnb.Extend.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Extend.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50283;http://localhost:50284"
+ }
+ }
+}
\ No newline at end of file
diff --git a/message/Tnb.Message.Entitys/Properties/launchSettings.json b/message/Tnb.Message.Entitys/Properties/launchSettings.json
new file mode 100644
index 00000000..31331cbf
--- /dev/null
+++ b/message/Tnb.Message.Entitys/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Message.Entitys": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50244;http://localhost:50268"
+ }
+ }
+}
\ No newline at end of file
diff --git a/message/Tnb.Message.Interfaces/Properties/launchSettings.json b/message/Tnb.Message.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..6f24c200
--- /dev/null
+++ b/message/Tnb.Message.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Message.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50239;http://localhost:50259"
+ }
+ }
+}
\ No newline at end of file
diff --git a/message/Tnb.Message/Properties/launchSettings.json b/message/Tnb.Message/Properties/launchSettings.json
new file mode 100644
index 00000000..3aff95b9
--- /dev/null
+++ b/message/Tnb.Message/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Message": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50241;http://localhost:50262"
+ }
+ }
+}
\ No newline at end of file
diff --git a/system/Tnb.OAuth/Properties/launchSettings.json b/system/Tnb.OAuth/Properties/launchSettings.json
new file mode 100644
index 00000000..c7a7206a
--- /dev/null
+++ b/system/Tnb.OAuth/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.OAuth": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50278;http://localhost:50279"
+ }
+ }
+}
\ No newline at end of file
diff --git a/system/Tnb.Systems.Entitys/Properties/launchSettings.json b/system/Tnb.Systems.Entitys/Properties/launchSettings.json
new file mode 100644
index 00000000..c69f89f2
--- /dev/null
+++ b/system/Tnb.Systems.Entitys/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.Systems.Entitys": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50280;http://localhost:50281"
+ }
+ }
+}
\ No newline at end of file
diff --git a/taskschedule/Tnb.TaskScheduler.Entitys/Properties/launchSettings.json b/taskschedule/Tnb.TaskScheduler.Entitys/Properties/launchSettings.json
new file mode 100644
index 00000000..842c1c8a
--- /dev/null
+++ b/taskschedule/Tnb.TaskScheduler.Entitys/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.TaskScheduler.Entitys": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50245;http://localhost:50257"
+ }
+ }
+}
\ No newline at end of file
diff --git a/taskschedule/Tnb.TaskScheduler.Interfaces/Properties/launchSettings.json b/taskschedule/Tnb.TaskScheduler.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..4d593874
--- /dev/null
+++ b/taskschedule/Tnb.TaskScheduler.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.TaskScheduler.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50251;http://localhost:50258"
+ }
+ }
+}
\ No newline at end of file
diff --git a/taskschedule/Tnb.TaskScheduler/Properties/launchSettings.json b/taskschedule/Tnb.TaskScheduler/Properties/launchSettings.json
new file mode 100644
index 00000000..523f2c0b
--- /dev/null
+++ b/taskschedule/Tnb.TaskScheduler/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.TaskScheduler": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50250;http://localhost:50255"
+ }
+ }
+}
\ No newline at end of file
diff --git a/visualdev/Tnb.VisualDev.Engine/Properties/launchSettings.json b/visualdev/Tnb.VisualDev.Engine/Properties/launchSettings.json
new file mode 100644
index 00000000..6bf841cb
--- /dev/null
+++ b/visualdev/Tnb.VisualDev.Engine/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.VisualDev.Engine": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50248;http://localhost:50254"
+ }
+ }
+}
\ No newline at end of file
diff --git a/visualdev/Tnb.VisualDev.Entitys/Properties/launchSettings.json b/visualdev/Tnb.VisualDev.Entitys/Properties/launchSettings.json
new file mode 100644
index 00000000..6b871025
--- /dev/null
+++ b/visualdev/Tnb.VisualDev.Entitys/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.VisualDev.Entitys": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50243;http://localhost:50260"
+ }
+ }
+}
\ No newline at end of file
diff --git a/visualdev/Tnb.VisualDev.Interfaces/Properties/launchSettings.json b/visualdev/Tnb.VisualDev.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..a65fcf0f
--- /dev/null
+++ b/visualdev/Tnb.VisualDev.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.VisualDev.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50252;http://localhost:50256"
+ }
+ }
+}
\ No newline at end of file
diff --git a/visualdev/Tnb.VisualDev/Properties/launchSettings.json b/visualdev/Tnb.VisualDev/Properties/launchSettings.json
new file mode 100644
index 00000000..698c0500
--- /dev/null
+++ b/visualdev/Tnb.VisualDev/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.VisualDev": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50242;http://localhost:50266"
+ }
+ }
+}
\ No newline at end of file
diff --git a/workflow/Tnb.WorkFlow.Entitys/Properties/launchSettings.json b/workflow/Tnb.WorkFlow.Entitys/Properties/launchSettings.json
new file mode 100644
index 00000000..46607c9d
--- /dev/null
+++ b/workflow/Tnb.WorkFlow.Entitys/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.WorkFlow.Entitys": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50253;http://localhost:50261"
+ }
+ }
+}
\ No newline at end of file
diff --git a/workflow/Tnb.WorkFlow.Interfaces/Properties/launchSettings.json b/workflow/Tnb.WorkFlow.Interfaces/Properties/launchSettings.json
new file mode 100644
index 00000000..0d35553b
--- /dev/null
+++ b/workflow/Tnb.WorkFlow.Interfaces/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "Tnb.WorkFlow.Interfaces": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:50249;http://localhost:50265"
+ }
+ }
+}
\ No newline at end of file