From 18f052cefd0f29de9869da5cad147fe24f066a80 Mon Sep 17 00:00:00 2001 From: zhou keda <1315948824@qq.com> Date: Tue, 6 Aug 2024 17:39:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=8B=A8=E5=85=A5=E5=BA=93=20?= =?UTF-8?q?=E5=A4=87=E5=93=81=E5=A4=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entity/EqpSpareParts.cs | 11 +- .../Entity/EqpSparePartsInstockD.cs | 5 + .../EqpEquipSparePartsInstockService.cs | 100 +++++++++++++++++ .../Tnb.ProductionMgr/TimeWorkService.cs | 72 +++++++++--- .../Consts/WmsWareHouseConst.cs | 4 + .../Tnb.WarehouseMgr/WmsInStockService.cs | 106 +++++++++++++++++- 6 files changed, 279 insertions(+), 19 deletions(-) create mode 100644 EquipMgr/Tnb.EquipMgr/EqpEquipSparePartsInstockService.cs diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSpareParts.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSpareParts.cs index 264d8ea1..081c9c69 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSpareParts.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSpareParts.cs @@ -63,5 +63,14 @@ public partial class EqpSpareParts : BaseEntity /// 备注 /// public string? remark { get; set; } - + + /// + /// 安全库存 + /// + public decimal? safety_stock { get; set; } + + /// + /// 保质期(天) + /// + public int quality_guarantee_period { get; set; } } \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSparePartsInstockD.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSparePartsInstockD.cs index 9797a1a9..384b9c7a 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSparePartsInstockD.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSparePartsInstockD.cs @@ -48,5 +48,10 @@ public partial class EqpSparePartsInstockD : BaseEntity /// 已领数量 /// public int use_quantity { get; set; } + + /// + /// 批号 + /// + public string batch { get; set; } } \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpEquipSparePartsInstockService.cs b/EquipMgr/Tnb.EquipMgr/EqpEquipSparePartsInstockService.cs new file mode 100644 index 00000000..ed78bce4 --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr/EqpEquipSparePartsInstockService.cs @@ -0,0 +1,100 @@ +using System.CodeDom.Compiler; +using JNPF.Common.Core.Manager; +using JNPF.Common.Dtos.VisualDev; +using JNPF.Common.Filter; +using JNPF.Common.Security; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.FriendlyException; +using JNPF.Systems.Entitys.Permission; +using JNPF.Systems.Entitys.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Entitys; +using JNPF.VisualDev.Interfaces; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using NPOI.SS.Formula.Functions; +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]")] + [OverideVisualDev(ModuleId)] + public class EqpEquipSparePartsInstockService : IOverideVisualDevService, IDynamicApiController, ITransient + { + private const string ModuleId = "27338626725397"; + private readonly ISqlSugarRepository _repository; + private readonly IUserManager _userManager; + private readonly IVisualDevService _visualDevService; + private readonly IRunService _runService; + + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + + public EqpEquipSparePartsInstockService(ISqlSugarRepository repository, + IVisualDevService visualDevService, + IRunService runService, + IUserManager userManager) + { + _userManager = userManager; + _visualDevService = visualDevService; + _runService = runService; + _repository = repository; + OverideFuncs.CreateAsync = Create; + } + + private async Task Create(VisualDevModelDataCrInput input) + { + ISqlSugarClient db = _repository.AsSugarClient(); + DbResult result = await db.Ado.UseTranAsync(async () => + { + VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); + await _runService.Create(templateEntity, input); + + string id = input.data["ReturnIdentity"].ToString(); + string nowStr = DateTime.Now.ToString("yyyy-MM-dd"); + string nowStr2 = DateTime.Now.ToString("yyyyMMdd"); + EqpSparePartsInstockH eqpSparePartsInstockH = await db.Queryable() + .Where(x => x.id!=id && x.create_time.Value.ToString("yyyy-MM-dd") == nowStr) + .OrderByDescending(x => x.create_time) + .FirstAsync(); + string batch = ""; + if (eqpSparePartsInstockH != null) + { + EqpSparePartsInstockD eqpSparePartsInstockD = await db.Queryable() + .Where(x => x.instock_id == eqpSparePartsInstockH.id) + .FirstAsync(); + + if (!string.IsNullOrEmpty(eqpSparePartsInstockD.batch)) + { + string batchNum = eqpSparePartsInstockD.batch.Substring(eqpSparePartsInstockD.batch.Length - 3); + int num = int.Parse(batchNum) + 1; + batch = nowStr2 + num.ToString().PadLeft(3,'0'); + } + else + { + batch = nowStr2 + "1".PadLeft(3,'0'); + } + + } + else + { + batch = nowStr2 + "1".PadLeft(3,'0'); + } + await db.Updateable() + .SetColumns(x => x.batch == batch) + .Where(x => x.instock_id == id) + .ExecuteCommandAsync(); + + }); + + return !result.IsSuccess ? throw Oops.Bah(result.ErrorMessage) : (dynamic)(result.IsSuccess ? "保存成功" : result.ErrorMessage); + } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs b/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs index b01f349d..ed2785ba 100644 --- a/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs @@ -846,26 +846,66 @@ namespace Tnb.ProductionMgr { string result = ""; BasFactoryConfig config = await _repository.AsSugarClient().Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.DOMAIN); + + try + { + string response1 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-unit"); + AuthResponse authResponse1 = JsonConvert.DeserializeObject(response1); + result += authResponse1.data.ToString(); + } + catch (Exception e) + { + Log.Error(e.Message,e); + result += e.Message; + } - string response1 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-unit"); - AuthResponse authResponse1 = JsonConvert.DeserializeObject(response1); - result += authResponse1.data.ToString(); + try + { + string response2 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-material"); + AuthResponse authResponse2 = JsonConvert.DeserializeObject(response2); + result += ","+authResponse2.data.ToString(); + } + catch (Exception e) + { + Log.Error(e.Message,e); + result += e.Message; + } - string response2 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-material"); - AuthResponse authResponse2 = JsonConvert.DeserializeObject(response2); - result += ","+authResponse2.data.ToString(); + try + { + string response3 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-customer"); + AuthResponse authResponse3 = JsonConvert.DeserializeObject(response3); + result += ","+authResponse3.data.ToString(); + } + catch (Exception e) + { + Log.Error(e.Message,e); + result += e.Message; + } - string response3 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-customer"); - AuthResponse authResponse3 = JsonConvert.DeserializeObject(response3); - result += ","+authResponse3.data.ToString(); + try + { + string response4 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-supplier"); + AuthResponse authResponse4 = JsonConvert.DeserializeObject(response4); + result += ","+authResponse4.data.ToString(); + } + catch (Exception e) + { + Log.Error(e.Message,e); + result += e.Message; + } - string response4 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-supplier"); - AuthResponse authResponse4 = JsonConvert.DeserializeObject(response4); - result += ","+authResponse4.data.ToString(); - - string response5 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-user"); - AuthResponse authResponse5 = JsonConvert.DeserializeObject(response5); - result += ","+authResponse5.data.ToString(); + try + { + string response5 = HttpUtils.RequestGet($"{config.value}/api/production/time-work/sync-user"); + AuthResponse authResponse5 = JsonConvert.DeserializeObject(response5); + result += ","+authResponse5.data.ToString(); + } + catch (Exception e) + { + Log.Error(e.Message,e); + result += e.Message; + } Log.Information($"基础数据同步结果:{result}"); return result; diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index ffc8635a..d0021eaf 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -593,5 +593,9 @@ /// public const string POINT_Elevator3 = "29307999693333"; + /// + /// 天益供应商id + /// + public const string TIANYIGONGYINGSHANG_ID = "35770039572253"; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index 28526034..e412048b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -5,6 +5,7 @@ using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.EventBus; using JNPF.FriendlyException; +using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using Mapster; @@ -439,11 +440,112 @@ namespace Tnb.WarehouseMgr // 调拨入库 else if (instock.bill_type == WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID) { + List allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); + + WmsTempCode wmsTempCode = await _db.Queryable() + .LeftJoin((a, b) => a.barcode == b.barcode) + .Where((a, b) => a.carry_id == input.wmsDistaskH.carry_id) + .Select((a, b) => b) + .FirstAsync(); + string rawmatTransferinstockDId = wmsTempCode?.require_id ?? ""; + WmsRawmatTransferinstockD wmsRawmatTransferinstockD = await _db.Queryable().SingleAsync(x => x.id == rawmatTransferinstockDId); + string rawmatTransferinstockHId = wmsRawmatTransferinstockD?.bill_id ?? ""; + WmsRawmatTransferinstockH wmsRawmatTransferinstockH = await _db.Queryable().SingleAsync(x => x.id == rawmatTransferinstockHId); + + List materialIds = allInstockDetails.Select(x => x.material_id).Distinct().ToList(); + List unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList(); + List unitDatas = await _db.Queryable() + .LeftJoin((x, y) => x.Id == y.DictionaryTypeId) + .Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode)) + .Select((x, y) => y) + .ToListAsync(); + + string supplierId = WmsWareHouseConst.TIANYIGONGYINGSHANG_ID; + List tableIds = new List(); + tableIds.Add(_userManager.UserId); + tableIds.Add(WmsWareHouseConst.AdministratorOrgId); + tableIds.Add(instock.warehouse_id); + tableIds.AddRange(materialIds); + tableIds.Add(supplierId); + tableIds.AddRange(unitDatas.Select(x => x.Id).ToList()); + + List erpExtendFields = await _db.Queryable().Where(x => tableIds.Contains(x.table_id)).ToListAsync(); + string userAccount = wmsRawmatTransferinstockH?.biller ?? ""; + string deptCode = wmsRawmatTransferinstockH?.dept_code ?? ""; + UserEntity userEntity = await _db.Queryable().Where(x=>x.Account==userAccount).FirstAsync(); + string userId = userEntity?.Id ?? ""; + string erpCreateId = erpExtendFields.Find(x => x.table_id == userId)?.user_id ?? ""; + ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (WmsWareHouseConst.AdministratorOrgId)); + string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + List> requestData = new List>(); + Dictionary erpRequestData = new Dictionary(); + erpRequestData.Add("billmaker", erpCreateId); + erpRequestData.Add("cbiztype", ""); + erpRequestData.Add("cdptid","1001A1100000000JRLI1");//部门先写死 + erpRequestData.Add("cdptvid","0001A11000000007GGO8");//部门先写死 + erpRequestData.Add("corpoid", erpOrg.corpoid); + erpRequestData.Add("corpvid", erpOrg.corpvid); + erpRequestData.Add("creationtime", nowStr); + erpRequestData.Add("creator", erpCreateId); + erpRequestData.Add("cwarehouseid", erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "");//类型视图里取 + erpRequestData.Add("dbilldate", nowStr); + erpRequestData.Add("dmakedate", nowStr); + erpRequestData.Add("fbillflag", 1); + erpRequestData.Add("ntotalnum", allInstockDetails.Sum(x => x.qty)); + erpRequestData.Add("pk_org", erpOrg.pk_org); + erpRequestData.Add("pk_org_v", erpOrg.pk_org_v); + erpRequestData.Add("pk_group", erpOrg.pk_group); + erpRequestData.Add("vdef1", null); + erpRequestData.Add("vbillcode", instock.bill_code); + erpRequestData.Add("ctrantypeid", "0001H11000000000D31E");//先写死 + erpRequestData.Add("vtrantypecode", "4E-01");//先写死 + erpRequestData.Add("csourcebillhid", wmsRawmatTransferinstockH?.erp_pk ?? ""); + + + List> erpRequestDataDetails = new List>(); + foreach (WmsInstockD item in allInstockDetails) + { + erpRequestDataDetails.Add(new Dictionary() + { + ["cbodytranstypecode"] = "4E-01", + ["cbodywarehouseid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", + ["cmaterialoid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialoid ?? "", + ["cmaterialvid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialvid ?? "", + ["corpoid"] = erpOrg.corpoid, + ["corpvid"] = erpOrg.corpvid, + ["crowno"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10, + ["csourcebillhid"] = wmsRawmatTransferinstockH?.erp_pk ?? "", + ["csourcebillbid"] = wmsRawmatTransferinstockD?.erp_line_pk ?? "", + ["cunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "", + ["cvendorid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "", + ["cvendorvid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? "", + ["dbizdate"] = instock.create_time.ToString("yyyy-MM-dd HH:mm:ss"), + ["dplanarrivedate"] = instock.create_time.ToString("yyyy-MM-dd HH:mm:ss"), + ["dplanoutdate"] = instock.create_time.ToString("yyyy-MM-dd HH:mm:ss"), + ["nnum"] = item.qty, + ["nshouldnum"] = item.pr_qty, + ["pk_group"] = erpOrg.pk_group, + ["pk_org"] = erpOrg.pk_org, + ["pk_org_v"] = erpOrg.pk_org_v, + ["vbatchcode"] = item.code_batch, + }); + } + erpRequestData.Add("dtls", erpRequestDataDetails); + requestData.Add(erpRequestData); + + ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord(); + thirdWebapiRecord.id = SnowflakeIdHelper.NextId(); + thirdWebapiRecord.third_name = WmsWareHouseConst.BIP; + thirdWebapiRecord.name = "调拨入库"; + thirdWebapiRecord.method = "POST"; + thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/transIn/save"; + thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData); + thirdWebapiRecord.create_time = DateTime.Now; + await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); } - - } await _db.Ado.CommitTranAsync();