diff --git a/WarehouseMgr/Tnb.WarehouseMgr/PDATransferSignService.cs b/WarehouseMgr/Tnb.WarehouseMgr/PDATransferSignService.cs new file mode 100644 index 00000000..6e6e2613 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/PDATransferSignService.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Extension; +using JNPF.Systems.Interfaces.System; +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Dto.Inputs; +using Tnb.WarehouseMgr.Entities.Dto; +using Tnb.WarehouseMgr.Entities.Enums; +using Mapster; +using JNPF.Common.Security; +using System.Collections.Immutable; +//using JNPF.Extras.CollectiveOAuth.Utils; + +namespace Tnb.WarehouseMgr +{ + public class PDATransferSignService : BaseWareHouseService + { + private readonly ISqlSugarClient _db; + private readonly IDictionaryDataService _dictionaryDataService; + private static Dictionary _dicBizType = new(); + public PDATransferSignService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService) + { + _db = repository.AsSugarClient(); + _dictionaryDataService = dictionaryDataService; + } + + /// + /// 转运签收 + /// + /// + [HttpPost] + public async Task SignForDelivery(SignForDeliveryInput input) + { + if (_dicBizType.Count < 1) + { + _dicBizType = await _dictionaryDataService.GetDictionaryByTypeId(WmsWareHouseConst.WMS_BIZTYPE_ID); + } + try + { + await _db.Ado.BeginTranAsync(); + WmsCarryH? carry = null; + WmsCarryH? newCarry = null; + if (!input.carryId.IsNullOrWhiteSpace()) + { + carry = await _db.Queryable().SingleAsync(it => it.id == input.carryId); + } + else + { + carry = await _db.Queryable().SingleAsync(it => it.carry_code == input.carry_code); + } + if (!input.new_carry_code.IsNullOrWhiteSpace()) + newCarry = await _db.Queryable().SingleAsync(it => it.carry_code == input.new_carry_code); + if (carry != null && newCarry != null) + { + if (carry?.location_id?.IsNotEmptyOrNull() ?? false) + { + var loc = await _db.Queryable().SingleAsync(it => it.id == carry.location_id); + loc.is_use = ((int)EnumCarryStatus.空闲).ToString(); + await _db.Updateable(loc).UpdateColumns(it => it.is_use).ExecuteCommandAsync(); + } + WmsDistaskH? disTask = null; + if (!input.disTaskId.IsNullOrEmpty()) + { + disTask = await _db.Queryable().SingleAsync(it => it.id == input.disTaskId); + } + else if (!input.carryId.IsNullOrEmpty()) + { + disTask = await _db.Queryable().FirstAsync(it => it.carry_id == input.carryId && it.is_sign == 0); + } + else if (!input.carry_code.IsNullOrEmpty()) + { + disTask = await _db.Queryable().FirstAsync(it => it.carry_code == input.carry_code && it.is_sign == 0); + } + if (disTask != null) + { + var nCCode = await _db.Queryable().Where(it => it.carry_id == newCarry.id).ToListAsync(); + var dicMin = await _db.Queryable().Where(it => input.distaskCodes.Select(x => x.material_id).Contains(it.id)).ToDictionaryAsync(d => d.id, d => d.minpacking); + WmsCarryCode cCode = new WmsCarryCode(); + List iCodes = new List(); + List uCodes = new List(); + foreach (var dCode in input.distaskCodes) + { + decimal codeQty = 0; + var sMCode = nCCode.Find(x => x.material_id == dCode.material_id && x.codeqty <= dicMin[dCode.material_id].ParseToDecimal()); + cCode = dCode.Adapt(); + cCode.carry_id = newCarry.id; + cCode.code_batch = $"{DateTime.Today.Year}{DateTime.Today.Month}{DateTime.Today.Day}"; + if (sMCode != null) + { + codeQty = sMCode.codeqty; + cCode.codeqty += codeQty; + cCode.id = sMCode.id; + uCodes.Add(cCode); + } + else + { + cCode.id = SnowflakeIdHelper.NextId(); + iCodes.Add(cCode); + } + + + } + await _db.Insertable(iCodes).ExecuteCommandAsync(); + await _db.Updateable(uCodes).ExecuteCommandAsync(); + if (_dicBizType.ContainsKey(disTask.biz_type)) + { + WareHouseUpInput upInput = new() + { + loginType = "web", + bizTypeId = disTask.biz_type, + requireId = disTask!.require_id!, + carryIds = new List { carry!.id }, + distaskCodes = input.distaskCodes + }; + await DoUpdate(upInput); //回更业务 + } + disTask.is_sign = 1; + await _db.Updateable(disTask).UpdateColumns(it => it.is_sign).ExecuteCommandAsync(); + } + } + await _db.Ado.CommitTranAsync(); + } + catch (Exception) + { + await _db.Ado.RollbackTranAsync(); + throw; + } + } + } +}