This commit is contained in:
FanLian
2023-06-27 08:27:32 +08:00
60 changed files with 1090 additions and 97 deletions

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.BasicData.Entities": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50313;http://localhost:50314"
}
}
}

View File

@@ -18,5 +18,12 @@ namespace Tnb.BasicData.Interfaces
/// <returns></returns>
public Task<dynamic> GetHistoryList(EsopHistoryListQueryInput input);
/// <summary>
/// 根据生产bom工序id获取实体
/// </summary>
/// <param name="dic">mbomProcessId</param>
/// <returns></returns>
public Task<dynamic> GetEntityByMbomProcessId(Dictionary<string,string> dic);
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.BasicData.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50305;http://localhost:50306"
}
}
}

View File

@@ -126,6 +126,18 @@ namespace Tnb.BasicData
return PageResult<ESopListOutput>.SqlSugarPageResult(list);
}
[HttpPost]
public async Task<dynamic> GetEntityByMbomProcessId(Dictionary<string, string> 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<dynamic> UploadNewVersion(UploadNewVersionInput input)
{

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.BasicData": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50307;http://localhost:50308"
}
}
}

View File

@@ -21,5 +21,9 @@ namespace Tnb.EquipMgr
/// 报废
/// </summary>
public const string SCRAP = "4";
/// <summary>
/// 未入场
/// </summary>
public const string NOTADMITTED = "4";
}
}

View File

@@ -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; }
}
}

View File

@@ -0,0 +1,36 @@
namespace Tnb.EquipMgr.Entities.Dto
{
public class EquipWorkshopChangeQueryOutput
{
public string id { get; set; } = string.Empty;
/// <summary>
/// 旧车间id
/// </summary>
public string old_workshop_id { get; set; } = string.Empty;
/// <summary>
/// 新车间id
/// </summary>
public string new_workshop_id { get; set; } = string.Empty;
/// <summary>
/// 旧安装地点
/// </summary>
public string? old_installation_location { get; set; }
/// <summary>
/// 新安装地点
/// </summary>
public string? new_installation_location { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public string? create_time { get; set; }
}
}

View File

@@ -187,5 +187,15 @@ public partial class EqpEquipment : BaseEntity<string>
/// 工位编码
/// </summary>
public string? station_code { get; set; }
/// <summary>
/// 质保开始时间
/// </summary>
public DateTime? warranty_start_time { get; set; }
/// <summary>
/// 质保结束时间
/// </summary>
public DateTime? warranty_end_time { get; set; }
}

View File

@@ -0,0 +1,72 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.EquipMgr.Entities;
/// <summary>
/// 设备使用车间变更记录
/// </summary>
[SugarTable("eqp_workshop_change_log")]
public partial class EqpWorkshopChangeLog : BaseEntity<string>
{
public EqpWorkshopChangeLog()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 设备id
/// </summary>
public string equip_id { get; set; } = string.Empty;
/// <summary>
/// 旧车间id
/// </summary>
public string? old_workshop_id { get; set; }
/// <summary>
/// 新车间id
/// </summary>
public string? new_workshop_id { get; set; }
/// <summary>
/// 旧安装地点
/// </summary>
public string? old_installation_location { get; set; }
/// <summary>
/// 新安装地点
/// </summary>
public string? new_installation_location { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 创建用户
/// </summary>
public string? create_id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? create_time { get; set; }
/// <summary>
/// 修改用户
/// </summary>
public string? modify_id { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? modify_time { get; set; }
/// <summary>
/// 所属组织
/// </summary>
public string? org_id { get; set; }
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.EquipMgr.Entities": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50299;http://localhost:50300"
}
}
}

View File

@@ -0,0 +1,23 @@
using Tnb.EquipMgr.Entities.Dto;
namespace Tnb.EquipMgr.Interfaces
{
/// <summary>
/// 设备迁移服务
/// </summary>
public interface IEqpWorkshopChangeLogService
{
/// <summary>
/// 根据设备id获取迁移记录
/// </summary>
/// <returns></returns>
public Task<dynamic> GetEquipWorkshopChangeList(EquipQueryInput input);
/// <summary>
/// 设备迁移
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public Task<dynamic> WorkshopChange(EquipWorkshopChangeInput input);
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.EquipMgr.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50303;http://localhost:50304"
}
}
}

View File

@@ -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
{
/// <summary>
/// 设备技术参数
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class EqpWorkshopChangeLogService : IEqpWorkshopChangeLogService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<EqpWorkshopChangeLog> _repository;
private readonly IUserManager _userManager;
public EqpWorkshopChangeLogService(ISqlSugarRepository<EqpWorkshopChangeLog> repository, IUserManager userManager)
{
_userManager = userManager;
_repository = repository;
}
[HttpPost]
public async Task<dynamic> GetEquipWorkshopChangeList(EquipQueryInput input)
{
var db = _repository.AsSugarClient();
// Dictionary<string, string>? queryJson = new Dictionary<string, string>();
// if (input!=null && !string.IsNullOrEmpty(input.queryJson))
// {
// queryJson = JsonConvert.DeserializeObject<Dictionary<string, string>>(input?.queryJson ?? "");
// }
var result = await db.Queryable<EqpWorkshopChangeLog>()
.LeftJoin<OrganizeEntity>((a,b)=>a.old_workshop_id==b.Id)
.LeftJoin<OrganizeEntity>((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<EquipWorkshopChangeQueryOutput>.SqlSugarPageResult(result);
}
[HttpPost]
public async Task<dynamic> WorkshopChange(EquipWorkshopChangeInput input)
{
var db = _repository.AsSugarClient();
DbResult<bool> result = await db.Ado.UseTranAsync(async () =>
{
EqpEquipment eqpEquipment = await db.Queryable<EqpEquipment>().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<EqpEquipment>()
.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;
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.EquipMgr": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50301;http://localhost:50302"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.PerMgr.Entities": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50319;http://localhost:50320"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.PerMgr.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50321;http://localhost:50322"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.PerMgr": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50317;http://localhost:50318"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.ProductionMgr.Entities": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50311;http://localhost:50312"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.ProductionMgr.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50315;http://localhost:50316"
}
}
}

View File

@@ -1070,7 +1070,8 @@ namespace Tnb.ProductionMgr
record.masterial_name = material?.name;
record.plan_start_date = taskInfo.estimated_start_date;
record.plan_end_date = taskInfo.estimated_end_date;
record.plan_qty = taskInfo.plan_qty;
// record.plan_qty = taskInfo.plan_qty;
record.plan_qty = taskInfo.scheduled_qty;
record.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == taskInfo.eqp_id))?.code;
record.mo_task_type = mo?.mo_type;
record.status = taskInfo.mo_task_status;

View File

@@ -68,7 +68,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<PrdReport>().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,
@@ -132,7 +132,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<PrdReport>().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,
@@ -150,8 +150,8 @@ 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())
{

View File

@@ -278,6 +278,7 @@ namespace Tnb.ProductionMgr
// reported_qty = a.reported_qty,
// prd_qty = a.prd_qty,
eqp_code = d.code,
mbom_process_id = a.mbom_process_id,
}).FirstAsync();
return prdTask;

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.ProductionMgr": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50309;http://localhost:50310"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.QcMgr.Entities": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50295;http://localhost:50296"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.QcMgr.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50297;http://localhost:50298"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.QcMgr": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50291;http://localhost:50292"
}
}
}

View File

@@ -15,6 +15,10 @@ namespace Tnb.WarehouseMgr.Entities.Consts
/// </summary>
public const string WMS_INSTOCK_D_BILL_STATUS_TYPEID = "25065133038101";
/// <summary>
/// 业务类型TypeId
/// </summary>
public const string WMS_BIZTYPE_ID = "25043955941909";
/// <summary>
/// 预任务生成EnCode
/// </summary>
public const string WMS_PRETASK_H_ENCODE = "PreTaskGen";

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
{
/// <summary>
/// 出库签收输入参数
/// </summary>
public class SignForDeliveryInput
{
/// <summary>
/// 任务ID
/// </summary>
public string disTaskId { get; set; }
/// <summary>
/// 载具ID
/// </summary>
public string carryId { get; set; }
/// <summary>
/// 服务模块
/// </summary>
public string serviceModule { get; set; }
}
}

View File

@@ -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
{
/// <summary>
/// 载具信息输出类
/// </summary>
public class CarryInfoOutput
{
/// <summary>
/// 租户ID
/// </summary>
public string? tenant_id { get; set; }
/// <summary>
/// 所属组织ID
/// </summary>
public string? org_id { get; set; }
/// <summary>
/// 载具编号
/// </summary>
public string carry_code { get; set; } = string.Empty;
/// <summary>
/// 载具名称
/// </summary>
public string carry_name { get; set; } = string.Empty;
/// <summary>
/// 状态
/// </summary>
public int status { get; set; }
/// <summary>
/// 载具状态
/// </summary>
public string carry_status { get; set; }
/// <summary>
/// 载具分类ID
/// </summary>
public string carrystd_id { get; set; } = string.Empty;
/// <summary>
/// 载具库位ID
/// </summary>
public string? location_id { get; set; }
/// <summary>
/// 载具库位编号
/// </summary>
public string? location_code { get; set; }
/// <summary>
/// 是否锁定
/// </summary>
public int is_lock { get; set; }
/// <summary>
/// 出库类型
/// </summary>
public string out_status { get; set; }
/// <summary>
/// 是否检验
/// </summary>
public int is_check { get; set; }
/// <summary>
/// 来源单据ID
/// </summary>
public string? source_id { get; set; }
/// <summary>
/// 来源单据代码
/// </summary>
public string? source_code { get; set; }
/// <summary>
/// 创建用户
/// </summary>
public string create_id { get; set; } = string.Empty;
/// <summary>
/// 创建时间
/// </summary>
public DateTime create_time { get; set; } = DateTime.Now;
/// <summary>
/// 最后修改人员ID
/// </summary>
public string? modify_id { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? modify_time { get; set; }
/// <summary>
/// 扩展字段
/// </summary>
public string? extras { get; set; }
/// <summary>
/// 时间戳(用于并发控制)
/// </summary>
public DateTime? timestamp { get; set; }
/// <summary>
/// 打包号
/// </summary>
public string? bale_num { get; set; }
/// <summary>
/// 齐套搭配方案ID
/// </summary>
public string? collocation_scheme_id { get; set; }
/// <summary>
/// 齐套搭配方案编号
/// </summary>
public string? collocation_scheme_code { get; set; }
/// <summary>
/// 载具明细列表
/// </summary>
public List<WmsCarryD> carryDetails { get; set; }=new List<WmsCarryD>();
/// <summary>
/// 载具条码列表
/// </summary>
public List<WmsCarryCode> carryCodes { get; set; } = new List<WmsCarryCode>();
/// <summary>
/// 载具无聊分拣明细
/// </summary>
public List<WmsCarryMat> carryMats { get; set; } = new List<WmsCarryMat>();
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.WarehouseMgr.Entities": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50287;http://localhost:50288"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.WarehouseMgr.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50293;http://localhost:50294"
}
}
}

View File

@@ -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<WmsCarryH> repository,
IUserManager userManager,
IBillRullService billRullService,
ISqlSugarRepository<WmsCarryH> 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;
}
/// <summary>
/// 根据载具ID获取载具信息
/// </summary>
/// <param name="carryId"></param>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetCarryInfoById([FromRoute] string carryId)
{
var carryOutPut = await _db.Queryable<WmsCarryH>().Where(it => it.id == carryId).Select<CarryInfoOutput>().FirstAsync();
if (carryOutPut == null) throw new AppFriendlyException("找不到载具", 500);
carryOutPut.carryDetails = await _db.Queryable<WmsCarryD>().Where(it=>it.carry_id == carryId).ToListAsync();
carryOutPut.carryCodes = await _db.Queryable<WmsCarryCode>().Where(it => it.carry_id == carryId).ToListAsync();
carryOutPut.carryMats = await _db.Queryable<WmsCarryMat>().Where(it => it.carry_id == carryId).ToListAsync();
return carryOutPut;
}
/// <summary>
/// 更换载具
/// </summary>
@@ -63,7 +81,7 @@ namespace Tnb.WarehouseMgr
/// <exception cref="ArgumentNullException"></exception>
private async Task<dynamic> ExchangeCarry(VisualDevModelDataCrInput input)
{
var isOk = false;
try
@@ -146,7 +164,7 @@ namespace Tnb.WarehouseMgr
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;

View File

@@ -95,11 +95,10 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500);
}
var partCarryMats = carryCodesPart.Adapt<List<WmsCarryMat>>();
partCarryMats.ForEach(x =>
for (int i = 0; i < partCarryMats.Count; i++)
{
x.need_qty = (int)os.pr_qty;
x.real_qty = codeQty;
});
partCarryMats[i].need_qty = carryCodesPart[i].codeqty;
}
carryMats.AddRange(partCarryMats);
}
}
@@ -110,12 +109,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<string>();
var sortingOutIds = new List<string>();
foreach (var pair in dic)

View File

@@ -76,11 +76,11 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500);
}
var partCarryMats = carryCodesPart.Adapt<List<WmsCarryMat>>();
partCarryMats.ForEach(x =>
for (int i = 0; i < partCarryMats.Count; i++)
{
x.need_qty = (int)os.pr_qty;
x.real_qty = codeQty;
});
partCarryMats[i].need_qty = carryCodesPart[i].codeqty;
}
carryMats.AddRange(partCarryMats);
}
}
@@ -91,89 +91,34 @@ 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 allOutIds = new List<string>();
var sortingOutIds = new List<string>();
foreach (var pair in dic)
{
var codes = carryCodes.FindAll(x => x.carry_id == pair.Key);
if (codes?.Count > 0)
{
if (pair.Value == codes.Sum(d => d.codeqty))
{
allOutIds.Add(pair.Key);
}
else
{
sortingOutIds.Add(pair.Key);
}
}
}
carryIds = allOutIds.Concat(sortingOutIds).ToList();
await _db.Updateable<WmsCarryH>().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.).ToString() }).Where(it => allOutIds.Contains(it.id)).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<WmsCarryH>().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.).ToString() }).Where(it => carryIds.Contains(it.id)).ExecuteCommandAsync();
//天益项目不需要
//await _db.Updateable<WmsCarryH>().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.分拣出).ToString() }).Where(it => sortingOutIds.Contains(it.id)).ExecuteCommandAsync();
}
var carrys = await _db.Queryable<WmsCarryH>().Where(it => carryIds.Contains(it.id)).ToListAsync();
if (carrys?.Count > 0)
var carrys = await _db.Queryable<WmsCarryH>().Where(it => carryIds.Contains(it.id)).ToArrayAsync();
if (carrys?.Length > 0)
{
List<WmsPretaskH> preTasks = new();
List<string> locIds = new();
foreach (var carry in carrys)
string firstLocationId = "27010980724501", secondLocationId = "27010987857941";
if (carrys.Length > 6)
{
WmsPointH sPoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == carry.location_id);
WmsPointH ePoint = null!;
//ePoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == input.data[nameof(WmsPointH.location_id)].ToString());
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 = "";
preTask.require_code = "";
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);
}
}
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();
@@ -186,5 +131,59 @@ namespace Tnb.WarehouseMgr
}
}
private async Task _genPreTask(WmsCarryH[] carrys, List<string> locIds, string eLocationId, string requireId, string requireCode, List<WmsPretaskH> preTasks)
{
var loc = await _db.Queryable<BasLocation>().SingleAsync(it => it.id == eLocationId);
foreach (var carry in carrys)
{
WmsPointH sPoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == carry.location_id);
WmsPointH ePoint = await _db.Queryable<WmsPointH>().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);
}
}
}
}
}
}

View File

@@ -1,15 +1,22 @@
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.Inputs;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
@@ -19,10 +26,14 @@ namespace Tnb.WarehouseMgr
public class WmsSignForDeliveryService : BaseWareHouseService
{
private readonly ISqlSugarClient _db;
public WmsSignForDeliveryService(ISqlSugarRepository<WmsDistaskH> repository)
private readonly IWmsCarryService _wareCarryService;
private readonly IDictionaryDataService _dictionaryDataService;
private static Dictionary<string, object> _dicBizType = new();
public WmsSignForDeliveryService(ISqlSugarRepository<WmsDistaskH> repository, IWmsCarryService wareCarryService, IDictionaryDataService dictionaryDataService)
{
_db = repository.AsSugarClient();
_wareCarryService = wareCarryService;
_dictionaryDataService = dictionaryDataService;
}
/// <summary>
/// 根据载具ID获取对应的执行任务记录
@@ -35,10 +46,40 @@ namespace Tnb.WarehouseMgr
var item = await _db.Queryable<WmsDistaskH>().FirstAsync(it => it.carry_id == carryId && it.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID && it.is_sign == 0);
return item;
}
/// <summary>
/// 出库签收
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task SaveData()
public async Task SignForDelivery(SignForDeliveryInput input)
{
if (_dicBizType.Count < 1)
{
_dicBizType = await _dictionaryDataService.GetDictionaryByTypeId(WmsWareHouseConst.WMS_BIZTYPE_ID);
}
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carryId);
if (carry != null)
{
var disTask = await _db.Queryable<WmsDistaskH>().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<BasLocation>().SingleAsync(it => it.id == carry.location_id);
loc.is_use = "0";
await _db.Updateable(loc).UpdateColumns(it => it.is_use).ExecuteCommandAsync();
}
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Apps.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50247;http://localhost:50263"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Apps": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50240;http://localhost:50264"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.CollectiveOAuth": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50269;http://localhost:50270"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Common.Core": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50271;http://localhost:50273"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Common": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50246;http://localhost:50267"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.SqlSugar": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50289;http://localhost:50290"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Thirdparty": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50276;http://localhost:50277"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.WebSockets": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50272;http://localhost:50274"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Extend.Entitys": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50285;http://localhost:50286"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Extend.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50283;http://localhost:50284"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Message.Entitys": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50244;http://localhost:50268"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Message.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50239;http://localhost:50259"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Message": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50241;http://localhost:50262"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.OAuth": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50278;http://localhost:50279"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.Systems.Entitys": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50280;http://localhost:50281"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.TaskScheduler.Entitys": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50245;http://localhost:50257"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.TaskScheduler.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50251;http://localhost:50258"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.TaskScheduler": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50250;http://localhost:50255"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.VisualDev.Engine": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50248;http://localhost:50254"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.VisualDev.Entitys": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50243;http://localhost:50260"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.VisualDev.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50252;http://localhost:50256"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.VisualDev": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50242;http://localhost:50266"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.WorkFlow.Entitys": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50253;http://localhost:50261"
}
}
}

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"Tnb.WorkFlow.Interfaces": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:50249;http://localhost:50265"
}
}
}