齐套业务代码提交
This commit is contained in:
@@ -74,6 +74,23 @@ namespace Tnb.WarehouseMgr.Entities.Consts
|
||||
/// 单据状态-完成
|
||||
/// </summary>
|
||||
public const string BILLSTATUS_COMPLETE_ID = "25065149810453";
|
||||
/// <summary>
|
||||
/// 单据状态-取消
|
||||
/// </summary>
|
||||
public const string BILLSTATUS_CANCEL_ID = "25065146252309";
|
||||
/// <summary>
|
||||
/// 单据状态-新增
|
||||
/// </summary>
|
||||
public const string BILLSTATUS_ADD_ID = "25065138925589";
|
||||
/// <summary>
|
||||
/// 单据状态-已呼叫
|
||||
/// </summary>
|
||||
public const string BILLSTATUS_CALLED_ID = "25065138925589";
|
||||
/// <summary>
|
||||
/// 单据状态-待配送
|
||||
/// </summary>
|
||||
public const string BILLSTATUS_TOBESHIPPED_ID = "26169434213669";
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型-入库TypeId
|
||||
/// </summary>
|
||||
@@ -149,7 +166,5 @@ namespace Tnb.WarehouseMgr.Entities.Consts
|
||||
/// </summary>
|
||||
public const string BARCODE_PRINT_STATUS_COMPLETE_ID = "26191372853541";
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,9 +55,9 @@ public partial class WmsKittingoutD : BaseEntity<string>
|
||||
public string? code_batch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数量(件数)
|
||||
/// 出库需求数量
|
||||
/// </summary>
|
||||
public decimal qty { get; set; }
|
||||
public decimal pr_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 箱数
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 齐套出库服务接口
|
||||
/// </summary>
|
||||
public interface IWmskittingOutService
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -517,7 +517,10 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
//根据生成的预任务,插入预任务操作记录
|
||||
if (input.PreTaskRecord != null)
|
||||
{
|
||||
await _db.Insertable(input.PreTaskRecord).ExecuteCommandAsync();
|
||||
}
|
||||
if (input.PreTaskHandleCodes.Count > 0)
|
||||
{
|
||||
await _db.Insertable(input.PreTaskHandleCodes).ExecuteCommandAsync();
|
||||
|
||||
190
WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs
Normal file
190
WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs
Normal file
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 齐套出库服务类
|
||||
/// </summary>
|
||||
public class WmskittingOutService : BaseWareHouseService, IWmskittingOutService
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IWareHouseService _warehouseService;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IBillRullService _billRullService;
|
||||
public WmskittingOutService(ISqlSugarRepository<WmsKittingoutH> repository, IWareHouseService warehouseService, IUserManager userManager, IBillRullService billRullService)
|
||||
{
|
||||
_db = repository.AsSugarClient();
|
||||
_warehouseService = warehouseService;
|
||||
_userManager = userManager;
|
||||
_billRullService = billRullService;
|
||||
}
|
||||
/// <summary>
|
||||
/// 齐套出库(新增状态)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task KittingOutByAdd()
|
||||
{
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
var kittingOuts = await _db.Queryable<WmsKittingoutH>()
|
||||
.Where(a => a.status == WmsWareHouseConst.BILLSTATUS_ADD_ID)
|
||||
.OrderBy(a => a.seq)
|
||||
.ToListAsync();
|
||||
// 是否有已呼叫的齐套出库任务
|
||||
// var set = true ; 如果有 把set修改为false
|
||||
var items = await _db.Queryable<WmsKittingoutH>().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<WmsCarryH>().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<WmsSetsortingH>();
|
||||
setSortingH.id = SnowflakeIdHelper.NextId();
|
||||
setSortingH.kittingout_id = ko.id;
|
||||
setSortingH.order = 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<WmsKittingoutD>().Where(it => it.bill_id == setSortingH.id).ToListAsync();
|
||||
var setSortDetails = kittingOutDetails.Adapt<List<WmsSetsortingD>>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 齐套出库,(待配送状态)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task KittingOutByIsToBeShipped()
|
||||
{
|
||||
|
||||
var kittingOuts = await _db.Queryable<WmsKittingoutH>()
|
||||
.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<BasLocation>().Where(it => it.id == koGrp.Key && it.is_use == "0" && it.is_lock == 0).ToListAsync();
|
||||
if (locs?.Count > 0)
|
||||
{
|
||||
var arr = koGrp.ToArray();
|
||||
Index start = ^arr.Length;
|
||||
var ko = arr[start];
|
||||
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == ko.carry_id);
|
||||
if (carry != null)
|
||||
{
|
||||
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 == 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<WmsCarryD>().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<string> { carry.location_id, ko.location_id } };
|
||||
await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1, carry_status = ((int)EnumCarryStatus.齐套).ToString() }, it => new BasLocation { is_lock = 1 });
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user