using JNPF.Common.Contracts; using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using Mapster; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.Common.Utils; 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 { /// /// 载具服务 /// [OverideVisualDev(ModuleConsts.MODULE_WMSCARRYREPLACEPDA_ID)] public class WmsPDACarryReplaceService : BaseWareHouseService, IWmsCarryService { //private const string ModuleId = "26188532491557"; private readonly ISqlSugarClient _db; private readonly IUserManager _userManager; private readonly IBillRullService _billRullService; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public WmsPDACarryReplaceService(ISqlSugarRepository repository, IUserManager userManager, IBillRullService billRullService) { _db = repository.AsSugarClient(); _userManager = userManager; _billRullService = billRullService; OverideFuncs.CreateAsync = PDACarryReplace; } /// /// 更换载具 /// /// /// 输入参数: ///
{ ///
old_carry_id:老载具id ///
new_carry_id:新载具ID ///
} /// /// /// [HttpPost] public async Task PDACarryReplace(VisualDevModelDataCrInput input) { var isOk = false; try { await _db.Ado.BeginTranAsync(); var oldCarryId = input.data.ContainsKey("carry_id") ? input.data["carry_id"]?.ToString() : ""; var newCarryId = input.data.ContainsKey("newcarry_id") ? input.data["newcarry_id"]?.ToString() : ""; var oldCarry = await _db.Queryable().FirstAsync(it => it.id == oldCarryId); var newCarry = await _db.Queryable().FirstAsync(it => it.id == newCarryId); if (oldCarry != null && newCarry != null) { ExChangeCarryInput carryInput = new() { old_carry_id = oldCarry.id, new_carry_id = newCarry.id }; isOk = await _updateSubCarry(carryInput); isOk = await _updateSubCarry(carryInput); isOk = await _updateSubCarry(carryInput); newCarry.status = oldCarry.status; newCarry.carry_status = oldCarry.carry_status; newCarry.location_id = oldCarry.location_id; newCarry.location_code = oldCarry.location_code; newCarry.is_lock = oldCarry.is_lock; newCarry.out_status = oldCarry.out_status; newCarry.is_check = oldCarry.is_check; newCarry.bale_num = oldCarry.bale_num; newCarry.collocation_scheme_id = oldCarry.collocation_scheme_id; newCarry.collocation_scheme_code = oldCarry.collocation_scheme_code; newCarry.source_id = oldCarry.source_id; newCarry.source_code = oldCarry.source_code; newCarry.create_id = _userManager.UserId; newCarry.create_time = DateTime.Now; var row = await _db.Updateable(newCarry).ExecuteCommandAsync(); WmsCarryReplaceH wmsCarryReplaceH = oldCarry.Adapt(); wmsCarryReplaceH.id = SnowflakeIdHelper.NextId(); wmsCarryReplaceH.org_id = oldCarry.org_id; wmsCarryReplaceH.bill_code = await _billRullService.GetBillNumber(WmsCarryConst.WMS_CARRY_REPLACE_ENCODE); wmsCarryReplaceH.carry_id = oldCarry.id; wmsCarryReplaceH.carry_code = oldCarry.carry_code; wmsCarryReplaceH.newcarry_id = newCarry.id; wmsCarryReplaceH.newcarry_code = newCarry.carry_code; row = await _db.Insertable(wmsCarryReplaceH).ExecuteCommandAsync(); row = await UpdateNullCarry(oldCarry); isOk = (row > 0); if (!isOk) throw Oops.Oh(ErrorCode.COM1001); } else { if (oldCarry == null) { throw new AppFriendlyException("没有可用的旧载具", 500); } if (newCarry == null) { throw new AppFriendlyException("没有可用的新载具", 500); } } await _db.Ado.CommitTranAsync(); } catch (Exception ex) { Log.Error("载具更换失败", ex); await _db.Ado.RollbackTranAsync(); throw; } return isOk; } public async Task UpdateNullCarry(WmsCarryH carryObj) { var row = -1; try { carryObj.status = 0; carryObj.carry_status = "0"; carryObj.location_id = null; carryObj.location_code = null; carryObj.out_status = "0"; carryObj.is_check = 0; carryObj.status = 1; carryObj.bale_num = null; carryObj.collocation_scheme_id = null; carryObj.collocation_scheme_code = null; carryObj.source_id = null; carryObj.source_code = null; row = await _db.Updateable(carryObj).ExecuteCommandAsync(); } catch (Exception ex) { } return row; } private async Task _updateSubCarry(ExChangeCarryInput input) where T : BaseEntity, IWmsCarryEntity, new() { var row = -1; var items = await _db.Queryable().Where(it => it.carry_id == input.old_carry_id).ToListAsync(); if (items?.Count > 0) { List newItems = DeepCopyHelper.DeepCopyList(items); if (newItems?.Count > 0) { newItems.ForEach(x => { x.id = SnowflakeIdHelper.NextId(); x.carry_id = input.new_carry_id; }); row = await _db.Insertable(newItems).ExecuteCommandAsync(); } if (row > 0) { row = await _db.Deleteable(items).ExecuteCommandAsync(); } } return (row > 0); } } }