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.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Security; using JNPF.FriendlyException; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Interfaces; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.WarehouseMgr.Entities.Entity; using Tnb.WarehouseMgr.Interfaces; using Tnb.BasicData; using Tnb.ProductionMgr.Entities.Entity; using Tnb.BasicData.Interfaces; using System.Security.Cryptography.X509Certificates; namespace Tnb.WarehouseMgr { /// /// 调拨入库单(成品) /// [OverideVisualDev(ModuleConsts.MODULE_WmsTransferInstock_ID)] [ServiceModule(BizTypeId)] public class WmsTransferInstockService : BaseWareHouseService { private const string BizTypeId = WmsWareHouseConst.BIZTYPE_WMSTRANSFERINSTOCK_ID; private readonly ISqlSugarClient _db; private readonly IUserManager _userManager; private readonly IBillRullService _billRullService; private readonly IRunService _runService; private readonly IVisualDevService _visualDevService; private readonly IThirdApiRecordService _thirdApiRecordService; private readonly IWmsPDAScanInStockService _wmsPDAScanInStock; public WmsTransferInstockService( ISqlSugarRepository repository, IUserManager userManager, IBillRullService billRullService, IRunService runService, IThirdApiRecordService thirdApiRecordService, IVisualDevService visualDevService, IWmsPDAScanInStockService wmsPDAScanInStock) { _db = repository.AsSugarClient(); _userManager = userManager; _billRullService = billRullService; _runService = runService; _thirdApiRecordService = thirdApiRecordService; _visualDevService = visualDevService; _wmsPDAScanInStock = wmsPDAScanInStock; } public override async Task ModifyAsync(WareHouseUpInput input) { if (input == null) { throw new ArgumentNullException(nameof(input)); } WmsCarryH wmsCarryH = await _db.Queryable().FirstAsync(x => x.id == input.wmsDistaskH.carry_id); DateTime dateTime = DateTime.Now; WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH(); string code = await _billRullService.GetBillNumber("WmsSterilizationInstockH"); wmsSterilizationInstockH.bill_code = code; wmsSterilizationInstockH.carry_id = wmsCarryH.id; wmsSterilizationInstockH.carry_code = wmsCarryH.carry_code; wmsSterilizationInstockH.location_id = input.wmsDistaskH.endlocation_id; wmsSterilizationInstockH.location_code = input.wmsDistaskH.endlocation_code; wmsSterilizationInstockH.create_id = WmsWareHouseConst.AdministratorUserId; wmsSterilizationInstockH.create_time = dateTime; wmsSterilizationInstockH.instock_time = dateTime; wmsSterilizationInstockH.org_id = WmsWareHouseConst.AdministratorOrgId; wmsSterilizationInstockH.xl_location_id = input.wmsDistaskH.startlocation_id; wmsSterilizationInstockH.xl_location_code = input.wmsDistaskH.startlocation_code; wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID; wmsSterilizationInstockH.origin = "外协调拨入库"; int row = await _db.Insertable(wmsSterilizationInstockH).ExecuteCommandAsync(); if (row > 0) Logger.LogInformation($"【外协到解析仓】 灭菌入库记录生成成功"); else Logger.LogWarning($"【外协到解析仓】 灭菌入库记录生成失败"); Logger.Information($"进入成品调拨入库单上传BIP逻辑"); string TransferInstockDId = input.requireId; WmsTransferInstockD wmsTransferInstockD = await _db.Queryable().SingleAsync(x => x.id == TransferInstockDId); string TransferInstockHId = wmsTransferInstockD?.bill_id ?? ""; WmsTransferInstockH wmsTransferInstockH = await _db.Queryable().SingleAsync(x => x.id == TransferInstockHId); //自制的不调erp接口 if (string.IsNullOrEmpty(wmsTransferInstockH.erp_pk)) { return; } List allInstockDetails = await _db.Queryable().Where(it => it.bill_id == TransferInstockHId).ToListAsync(); List materialIds = allInstockDetails.Select(x => x.material_id).Distinct().ToList(); List unitIds = 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 && unitIds.Contains(y.Id)) // .Select((x, y) => y) // .ToListAsync(); List erpWarehouserelaHs = await _db.Queryable().Where(x=>x.id!=null).ToListAsync(); BasWarehouse basWarehouse = await _db.Queryable().Where(r => r.id == WmsWareHouseConst.WAREHOUSE_CP_ID).FirstAsync(); string userAccount = wmsTransferInstockH?.biller ?? ""; string deptCode = wmsTransferInstockH?.dept_code ?? ""; UserEntity userEntity = await _db.Queryable().Where(x=>x.Account==userAccount).FirstAsync(); string userId = userEntity?.Id ?? WmsWareHouseConst.AdministratorUserId; string supplierId = WmsWareHouseConst.TIANYIGONGYINGSHANG_ID; List tableIds = new List(); tableIds.Add(userId); tableIds.Add(WmsWareHouseConst.AdministratorOrgId); tableIds.Add(basWarehouse.id); tableIds.AddRange(materialIds); tableIds.Add(supplierId); tableIds.AddRange(unitIds); List erpExtendFields = await _db.Queryable().Where(x => tableIds.Contains(x.table_id)).ToListAsync(); //string erpCreateId = erpExtendFields.Find(x => x.table_id == userId)?.user_id ?? WmsWareHouseConst.ERPUSERID; string erpCreateId = WmsWareHouseConst.ERPUSERID; 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", null); erpRequestData.Add("cdptid","1001A1100000001JFOOL");//固定四厂区仓库 erpRequestData.Add("cdptvid","0001A1100000000AOMIG");//固定四厂区仓库 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("cwarehouseid", erpWarehouserelaHs.Find(x => x.erp_warehousecode == wmsTransferInstockH.erp_wh_type)?.erp_warehouseid ?? "");//类型视图里取 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", wmsTransferInstockH.bill_code); erpRequestData.Add("ctrantypeid", "0001H11000000000D31E");//先写死 erpRequestData.Add("vtrantypecode", "4E-01");//先写死 erpRequestData.Add("csourcebillhid", wmsTransferInstockH?.erp_pk ?? ""); List wmsCarryCodes = _db.Queryable().Where(r => r.carry_id == input.wmsDistaskH.carry_id) .Where(r => r.material_id == wmsTransferInstockD.material_id && r.code_batch == wmsTransferInstockD.pi_code).ToList(); decimal qty = wmsCarryCodes.Sum(r => r.codeqty); List> erpRequestDataDetails = new List>(); foreach (WmsTransferInstockD item in allInstockDetails) { string date = wmsTransferInstockH.create_time!=null ? wmsTransferInstockH.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : wmsTransferInstockH.bill_date!=null ? wmsTransferInstockH.bill_date.Value.ToString("yyyy-MM-dd HH:mm:ss") : DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); erpRequestDataDetails.Add(new Dictionary() { ["cbodytranstypecode"] = "4E-01", // ["cbodywarehouseid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", ["cbodywarehouseid"] = erpWarehouserelaHs.Find(x => x.erp_warehousecode == wmsTransferInstockH.erp_wh_type)?.erp_warehouseid ?? "", ["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"] = item.lineno, ["csourcebillhid"] = wmsTransferInstockH?.erp_pk ?? "", ["csourcebillbid"] = wmsTransferInstockD?.erp_line_pk ?? "", //["cunitid"] = erpExtendFields.Find(x => x.table_id == item.unit_id)?.cunitid ?? "", ["cunitid"] = null, ["cvendorid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "", ["cvendorvid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? "", ["dbizdate"] = date, ["dplanarrivedate"] = date, ["dplanoutdate"] = date, // ["nnum"] = item.qty, // ["nshouldnum"] = item.pr_qty, ["nnum"] = qty, ["nshouldnum"] = qty, ["pk_group"] = erpOrg.pk_group, ["pk_org"] = erpOrg.pk_org, ["pk_org_v"] = erpOrg.pk_org_v, ["vbatchcode"] = item.pi_code, ["coutcalbodyoid"] = wmsTransferInstockH.outstockorg_code, ["coutcalbodyvid"] = wmsTransferInstockH.outstockorg_id, }); } erpRequestData.Add("dtls", erpRequestDataDetails); requestData.Add(erpRequestData); BasFactoryConfig config = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL); ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord(); thirdWebapiRecord.id = SnowflakeIdHelper.NextId(); thirdWebapiRecord.third_name = WmsWareHouseConst.BIP; thirdWebapiRecord.name = "调拨入库"; thirdWebapiRecord.method = "POST"; // thirdWebapiRecord.url = config.value + "uapws/rest/transIn/save"; thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/transIn/save"; thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData); thirdWebapiRecord.create_time = DateTime.Now; thirdWebapiRecord.remark = $"【WmsTransferInstockService ModifyAsync】成品调拨入库wms_transfer_instock_h:{wmsTransferInstockH.bill_code}"; await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); BasFactoryConfig callErp = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP); if(callErp.value=="1"){ await _thirdApiRecordService.Send(new List { thirdWebapiRecord }, "自动", _db); } Logger.Information($"完成成品调拨入库单上传BIP逻辑"); } } }