diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index bf8df9c1..cfd605f6 100644 Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ diff --git a/src/WMS.Web.Api/Controllers/TakeStockController.cs b/src/WMS.Web.Api/Controllers/TakeStockController.cs index 0ae01dfe..99709585 100644 --- a/src/WMS.Web.Api/Controllers/TakeStockController.cs +++ b/src/WMS.Web.Api/Controllers/TakeStockController.cs @@ -103,7 +103,7 @@ namespace WMS.Web.Api.Controllers return await _takeStockService.Save(dto, loginInfo); } /// - /// 同步金蝶 + /// 同步金蝶2 /// /// /// diff --git a/src/WMS.Web.Api/appsettings(测试).json1 b/src/WMS.Web.Api/appsettings(测试).json1 new file mode 100644 index 00000000..d83df423 --- /dev/null +++ b/src/WMS.Web.Api/appsettings(测试).json1 @@ -0,0 +1,136 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "Ops.Web.Repositories": "Information" + } + }, + "Kestrel": { + "EndPoints": { + "Http": { + "Url": "http://*:8035" + } + } + }, + "AllowedHosts": "*", //允许所有主机 + "AllowedCores": "localhost,http://localhost:8080,http://192.168.1.188:8080", //跨域 + "AppOptions": { + "DBConnectionString": "Server=rm-wz9215skklas0287pwo.mysql.rds.aliyuncs.com; Database=test_wmsdb;User Id=orico_erp;password=Orico2023;port=3306;CharSet=gb2312;Connect Timeout=150;", //数据库连接地址 + "RedisConnectionString": "47.106.232.90:6379,password=orico.2020,DefaultDatabase=3", //redis连接地址 + "RedisIpRateLimitingConnectionString": "47.110.156.96:16379,password=123456,DefaultDatabase=2", //redis连接地址 + "SingleBaseUrl": "http://127.0.0.1:8066/api", //单点服务连接地址 + "DBType": "Mysql", //数据库类型 + "CompanyId": 1, //公司Id + "AllowCache": false, //允许缓存 + "RedisDirectory": "Test" //redis标记 + }, + "SoaOptions": { + "ModuleID": 25, //系统在单点系统的标记 + "Url_V3": "https://dev.uc.v3.f2b211.com", //正式http://uc.v3.f2b211.com //单点系统的连接地址v3版 + "Url": "http://dev.uc.f2b211.com", //单点系统的连接地址(老版 应该没用了) + "AppId": "100528847652388864", //系统Id + "AppSecret": "fa950a1fe690fe610338084b49db7db9", //系统授权 + "PublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx4RaUAcPIEzHkMA0dvp51SbvC+ASiitHw9h6sCq8blqh8Cmx+ZfldxmX+sGqUDL40Eo07tQGWpY8WTlUROCOB9PIfZC6Wb+ntM6x8FzvcW5xfiKDfd6tbp5+ztFHVvutde0ceYk4VjOw5Q1wGJENZoQxQGd6/tt/cHbyNKF3HeAPCLJkMriKBXn3k4r4kix5oetVpaacFABBMRS019n/k0S8fg2H+72WaPVJElRk/iCkQwBA6JIKt/iSVXR8qMe+K6NTRnND4j5i7Ai0TgEV8MRlRMRVK7q4MyO0TPky//0HtVULdhb+G/XbF08ZgIgXlFBroQCEEj0RqdLio0Bg9wIDAQAB", //公钥 + "PrivateKey": "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHhFpQBw8gTMeQwDR2+nnVJu8L4BKKK0fD2HqwKrxuWqHwKbH5l+V3GZf6wapQMvjQSjTu1AZaljxZOVRE4I4H08h9kLpZv6e0zrHwXO9xbnF+IoN93q1unn7O0UdW+6117Rx5iThWM7DlDXAYkQ1mhDFAZ3r+239wdvI0oXcd4A8IsmQyuIoFefeTiviSLHmh61WlppwUAEExFLTX2f+TRLx+DYf7vZZo9UkSVGT+IKRDAEDokgq3+JJVdHyox74ro1NGc0PiPmLsCLROARXwxGVExFUrurgzI7RM+TL//Qe1VQt2Fv4b9dsXTxmAiBeUUGuhAIQSPRGp0uKjQGD3AgMBAAECggEBAI/1MJDjtwdQPwJznKdobTXeJMdFwzrMpbhq34NzIojhfkziWNdFwTzhS6aTzEaXsK3hjTXx6C++jQa39dTIzdJZ/iSTo9IUFnbAWOWcuOv4i40+a/ALFsplNAwYNshNSkh3cH9FAlA4dd+fhY1ERA3/PeZBhB6V0+sa+AH/qwnzFY+lwOeuaUe4PNEjjnBVhzqV8XApca7HZNlrGmiTuO3J/e4k/FAP11iYYIf8e8JtgocinW1LIxJGBcp7Zyof37k4e+s25B0k5MkXiYlvveMsmlEcU+sYm+uLNtu8eG1R3b1qvi0H8ULdwoSParnKSyYMh0WlZTS8Ka3X33WeCOkCgYEA2Cc/nnJkwPaOXLiAbKg7/4hIne1X3rneVVbwCaebKXfSsCSGoVt5b8vBCgbVZNw79d8Z8ZLEf4e26ayLLXRz9QriMPiWyHUEr0XLZ4lq6E1EdZMBZWmjT9VY8NeAkB+eMPfCZLZe3OoVstuNQA0pGVFJgYXmXgcjJcidxzgIqU0CgYEA7EwAA6OP9DoQq4GcBCuIVGBjEWzbVekMt7f+WeLxGl3NYTWiXiaK6WjF/pvFv7AGQIqwOpnbKahWntpPj5DModhjQN8u/yonhzagubQbDTX0jR3w4gVsv/yyGgksPIwAQT/FW9cOqriqw8IGJG92VQw8dy6M1ZP9yK3yc41Q8VMCgYATH3XLaMdtIuL5ZQFHm6KjOsVh42uQstTuq+BUmlVp18X1+2VFxTf7IgWUA4LBh5JucCx1aMylk7Yk+jTd8p2HokzclEGSvneJoh0ardedcaiK1lSbSjs+htt1gztGhOWT43d5PYEq/jKpPi9C6WcnbD+ai+QTkYIUh6kdxOFPSQKBgQDltLfq0azWMUAVSYi+MQd1ZsHHpbfO2x+m1TFodgoFpJxL3JS7y+IMJvMaoJlqz5Y0Vd4dCYYZB/E0uWrQWGXlC3LpFE0edf85HWy/Ogt2GzZhnHKXdciTFfaZAsPDFCIHTBPyRKyYX655YHsSHly9Loj1HwZ/dT8nP5nKpNzDywKBgB3itp7eQ71y+6npr0MUcYF6cgjhPTLL03zVzJdR3ELzPFW+J69MFwqafoGu+xgGu43pDgIR6gVKqYhqfSk28oRl7YtO4fvk6KRcG5zrc1FyDw3S5XpVc5MhsxmBBXZj5ivBkoqxyDAOqu3MDCbHqg1J5inDu2gA8tbsgJ41pTER" //私钥 + }, + "ErpOptions": { + "EndpointAddress": "http://erp.orico.com.cn/k3cloud/ERPGW.asmx", //金蝶连接地址 + "UserName": "mes", //测试账号密码 mes/A1B2C3Dh/ce20210909/6723b1acf19987 正式账号密码 orico/A123321./Orico/663a26829afbdd //金蝶账户名 + "Password": "A1B2C3Dh.", //金蝶密码 + "ErpId": "ce20210909", //金蝶Id + "ZhangTaoId": "6723b1acf19987"//金蝶账套Id + }, + "OpsOptions": { + "Url": "https://api.opsscm.test.f2b211.com/", //https://api.opsscm.test.f2b211.com/ //OPS供应链系统 + "UserName": "admin", //账户名 这是之前链接老ops 需要的用户名密码 现在链接 OPS供应链系统是不需要了 + "PassWord": "888888" //密码 这是之前链接老ops 需要的用户名密码 现在链接 OPS供应链系统是不需要了 + }, + "LingXingOptions": { + "Url": "https://openapi.lingxing.com", //领星连接地址 + "AppId": "ak_QGK2J8TssERmu", //领星Id + "AppSecret": "n/HUKD2wVdTbvhnFZbVBPw==" //领星授权 + }, + "JuShuiTanOptions": { + "Url": "https://openapi.jushuitan.com",//聚水潭连接地址 + "AppKey": "17231841286c45f99eb9acf445404349",//聚水潭Key + "AppSecret": "5ce9641ae6db4abb8b96eea7df6a81e9",//聚水潭授权 + "AccessToken": "4605358c37374780a8a4395e6cdb1c3f" //一年后过期(2025/10/18) + }, + "Qiniu": { + "AccessKey": "dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms", //七牛云key + "SecretKey": "KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q", //七牛云授权 + "Bucket": "orico-wms-test", //正式 orico-wms //七牛云文件下的文件名 + "Url": "https://wmstestfile.f2b211.com/" //测试 https://wmstestfile.f2b211.com/ 正式 https://wmsfile.f2b211.com/ //访问七牛云文件的链接地址 + }, + //定时任务配置项 + "QuartzJobOptions": { + //存储类型:键和值 + "JobStoreTypeKey": "quartz.jobStore.type", + "JobStoreTypeValue": "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz", + + //数据库驱动类型-这里是mysql:键和值 + "JobStoreDriverDelegateTypeKey": "quartz.jobStore.driverDelegateType", + "JobStoreDriverDelegateTypeValue": "Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz", + + //数据库表名前缀:键和值 + "JobStoreTablePrefixKey": "quartz.jobStore.tablePrefix", + "JobStoreTablePrefixValue": "QRTZ_", + + //数据源的名称:键和值 + "JobStoreDataSourceKey": "quartz.jobStore.dataSource", + "JobStoreDataSourceValue": "myDS", + + //连接字符串:键和值 + "JobStoreConnectionStringKey": "quartz.dataSource.myDS.connectionString", + "JobStoreConnectionStringValue": "Server=192.168.7.103; Database=wms_db;User Id=root;password=L8mrCGbPisAa6GNh;port=3306;CharSet=gb2312;Connect Timeout=150;", + + //mysql提供器:键和值 + "JobStoreProviderKey": "quartz.dataSource.myDS.provider", + "JobStoreProviderValue": "MySql", + + //几点开始执行 + "JobStartHour": [ 15, 11, 1, 0, 0, 10 ], + //几分钟开始执行 + "JobStartMinute": [ 30, 39, 30, 20, 5, 5 ], + + //执行Cron表达式:可以是几小时or几分钟or几秒钟or几天or几周; + "JobStartExpre": "0 0/30 * * * ?", + "JobStartExpreAmount": "0 50 23 * * ?", + "JobStartExpreSend": "0 0 12,16,20 * * ?", + "JobStartExpreMaterial": "0 30 23 * * ?", + "JobStartErpDelete": "0 5 * * * ?", + "JobStartProductInventory": "0 0/30 * * * ?", + //a.是否启用集群:键和值 + "JobStoreClusteredKey": "quartz.jobStore.clustered", + "JobStoreClusteredValue": true, + + //b.集群中的每个节点都必须有一个唯一的 instanceId + // 通过将“AUTO”设置为该属性的值来完成 + //备注:a属性和b属性配套使用;如果不开启集群这两个属性去掉 + "JobStoreInstanceIdKey": "quartz.scheduler.instanceId", + "JobStoreInstanceIdValue": "AUTO", + + //以下可以自定义配置 + "QuartzJobKey": "OpsJob", + "QuartzJobValue": "OpsJobGroup", + "QuartzJobDescription": "OpsJob", + "QuartzTriggerIdentity": "OpsTrigger", + "QuartzTriggerDescription": "OpsJobTrigger" + }, + "EmailOptions": { + "SmtpServer": "smtp.qiye.aliyun.com",//邮箱配置 + "SmtpPort": 587, + "SenderName": "深圳市元创时代", + "SendTitle": "【深圳市元创时代】-产品入库通知", + "SenderEmail": "info@f2b211.com", + "SenderEmailPwd": "K4h6GgxZYGMYV1Bb" + }, + "SmsOptions": { + "AccessKeyId": "LTAI5tBJg6KeDV2V1NiS7Ngi",//短信配置 + "AccessKeySecret": "MAC8bMovSFyCgRQGkfhVcL1jvLJ8cP", + "SignName": "深圳市元创时代", + "TemplateCode": "SMS_465408787" + } +} diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index 9492cb15..5820f5ea 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -17,8 +17,10 @@ "AllowedHosts": "*", //允许所有主机 "AllowedCores": "localhost,http://localhost:8080,http://192.168.1.188:8080", //跨域 "AppOptions": { - "DBConnectionString": "Server=192.168.7.103; Database=wms_db;User Id=root;password=L8mrCGbPisAa6GNh;port=3306;CharSet=gb2312;Connect Timeout=150;", //数据库连接地址 - "RedisConnectionString": "47.110.156.96:16379,password=123456,DefaultDatabase=2", //redis连接地址 + "DBConnectionString": "Server=rm-wz9215skklas0287pwo.mysql.rds.aliyuncs.com; Database=test_wmsdb;User Id=orico_erp;password=Orico2023;port=3306;CharSet=gb2312;Connect Timeout=150;", //测试数据库连接地址 + // "DBConnectionString": "Server=rm-wz9215skklas0287pwo.mysql.rds.aliyuncs.com; Database=wms_db;User Id=orico_erp;password=Orico2023;port=3306;CharSet=gb2312;Connect Timeout=150;", //正式数据库连接地址 + "RedisConnectionString": "47.106.232.90:6379,password=orico.2020,DefaultDatabase=3", //测试redis连接地址 + //"RedisConnectionString": "47.106.232.90:6379,password=orico.2020,DefaultDatabase=2", //正式redis连接地址 "RedisIpRateLimitingConnectionString": "47.110.156.96:16379,password=123456,DefaultDatabase=2", //redis连接地址 "SingleBaseUrl": "http://127.0.0.1:8066/api", //单点服务连接地址 "DBType": "Mysql", //数据库类型 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 97e96d4b..5c3b66ec 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -869,7 +869,7 @@ - 同步金蝶 + 同步金蝶2 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 4f9e603a..6bb2b1ca 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3565,6 +3565,9 @@ 根据箱Ids查询集合 + + 根据生成记录id查询序列码 + 修改实体集合 @@ -5644,6 +5647,14 @@ + + + 同步:生产入库单据 + + + + + 同步:其他入库单 @@ -6229,6 +6240,13 @@ + + + erp:单据查询-生产入单,生产汇报单(已审核的) + + + + erp:单据查询-组装拆卸单-组装(成品入库) @@ -7194,6 +7212,11 @@ 即时库存 + + + 生产入库单(来源于生产汇报单) + + 文件导出状态 @@ -7344,6 +7367,11 @@ 组装拆卸入库 + + + 生产入库 + + 出入库存-方式 diff --git a/src/WMS.Web.Domain/Entitys/SerialNumbers.cs b/src/WMS.Web.Domain/Entitys/SerialNumbers.cs index a5dabe38..245f1f13 100644 --- a/src/WMS.Web.Domain/Entitys/SerialNumbers.cs +++ b/src/WMS.Web.Domain/Entitys/SerialNumbers.cs @@ -102,6 +102,11 @@ namespace WMS.Web.Domain.Entitys /// [Column("IsActivate")] public bool? IsActivate { get; set; } = false; + ///// + ///// 产生第二个 + ///// + //[Column("TwoSerialNumber")] + //public string? TwoSerialNumber { get; set; } = string.Empty; /// /// 操作(绑定箱信息) diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index b52997c7..26bd6448 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -75,6 +75,10 @@ namespace WMS.Web.Domain.IService.Public /// Task> BillQueryForAssembledApp_Disassembly(List sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true); + + Task> BillQueryForProduceSotckin(List sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true); + + /// /// erp:单据查询-出库单 /// diff --git a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs index 6362769a..888f685a 100644 --- a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs @@ -30,6 +30,10 @@ namespace WMS.Web.Domain.Infrastructure Task> GetEntityListByBoxId(int boxId); /// 根据箱Ids查询集合 Task> GetEntityListByBoxIds(List boxIds); + + /// 根据生成记录id查询序列码 + Task> GetEntityListBySuitNumber(string suitNumber); + /// 修改实体集合 Task EditEntityList(List entitys, bool isTransaction = true); //批量删除 diff --git a/src/WMS.Web.Domain/Services/BoxService.cs b/src/WMS.Web.Domain/Services/BoxService.cs index 291aa633..604e33e8 100644 --- a/src/WMS.Web.Domain/Services/BoxService.cs +++ b/src/WMS.Web.Domain/Services/BoxService.cs @@ -103,7 +103,14 @@ namespace WMS.Web.Domain.Services var opsSerial = list.FirstOrDefault(f => f.OpsBoxId == b.OpsBoxId).Details .SelectMany(s => s.SerialNumbers) .FirstOrDefault(s => s.SerialNumber.Equals(sn.SerialNumber)); - //序列号 + ////序列号 + //var serialList = await _serialNumbersRepositories.GetEntityListBySuitNumber(sn.SerialNumber); + + //for (int i = 0; i < serialList.Count; i++) + //{ + //SerialNumbers s = new SerialNumbers(serialList[i].SerialNumber, detail.MaterialNumber, b.Id, b.OpsBoxId, opsSerial.BarCereateUser, opsSerial.BarCreateTime, b.CompleteCartonTime); + //sList.Add(s); + SerialNumbers s = new SerialNumbers(sn.SerialNumber, detail.MaterialNumber, b.Id, b.OpsBoxId, opsSerial.BarCereateUser, opsSerial.BarCreateTime, b.CompleteCartonTime); sList.Add(s); //序列号记录(序列号生成) @@ -113,6 +120,15 @@ namespace WMS.Web.Domain.Services SerialNumberOperate so_g = new SerialNumberOperate(); so_g.CompleteCartonBox(sn.SerialNumber, detail.MaterialNumber, b); soList.Add(so_g); + + ////序列号记录(序列号生成) + //SerialNumberOperate so = new SerialNumberOperate(serialList[i].SerialNumber, SerialNumberOperateType.Generate, detail.MaterialNumber, opsSerial.BarCereateUser, "", b.SupplierId, b.OrgId, null, opsSerial.BarCreateTime); + //soList.Add(so); + ////序列号记录(装箱) + //SerialNumberOperate so_g = new SerialNumberOperate(); + //so_g.CompleteCartonBox(serialList[i].SerialNumber, detail.MaterialNumber, b); + //soList.Add(so_g); + //} } } #endregion diff --git a/src/WMS.Web.Domain/Services/InStockTaskService.cs b/src/WMS.Web.Domain/Services/InStockTaskService.cs index fb052fb3..bfec6de0 100644 --- a/src/WMS.Web.Domain/Services/InStockTaskService.cs +++ b/src/WMS.Web.Domain/Services/InStockTaskService.cs @@ -124,6 +124,25 @@ namespace WMS.Web.Domain.Services return await this.SysnDataNew(erp_list.ToList(), isTransaction); } + + /// + /// 同步:生产入库单据 + /// + /// + /// + /// + public async Task SsynProduceSotck(List billNos = null, bool isTransaction = true, DateTime? beginTime = null) + { + //1.获取金蝶数据:生产入库数据 + var erp_result = await _erpService.BillQueryForProduceSotckin(billNos, beginTime); + if (!erp_result.IsSuccess) + return Result.ReFailure(erp_result.Message, erp_result.Status); + var erp_list = erp_result.Data; + + return await this.SysnDataNew(erp_list.ToList(), isTransaction); + } + + /// /// 同步:其他入库单 /// @@ -240,6 +259,13 @@ namespace WMS.Web.Domain.Services { var beginTime = DateTime.Now.AddHours(-262);//默认拉去8小时以内的数据,ALTER BY YZH + //6.同步数据:生产入库单 + var ProduceSotck_result = await this.SsynProduceSotck(null, isTransaction, beginTime); + if (!ProduceSotck_result.IsSuccess) + return Result.ReFailure(ProduceSotck_result.Message, ProduceSotck_result.Status); + + + //1.同步数据:采购订单 var purchase_result = await this.SsynPurchaseInStock(null, isTransaction, beginTime); if (!purchase_result.IsSuccess) @@ -755,6 +781,7 @@ namespace WMS.Web.Domain.Services List TransferDirect_sourceBillNos = new List(); List Transferin_sourceBillNos = new List(); List AssembledApp_sourceBillNos = new List(); + List ProduceSotck_sourceBillNos = new List();//生产入库 foreach (var entity in list) { @@ -768,6 +795,16 @@ namespace WMS.Web.Domain.Services AssembledApp_sourceBillNos.Add(entity.SourceBillNo); else if (entity.Type == InstockType.Miscellaneous) Miscellaneous_sourceBillNos.Add(entity.SourceBillNo); + else if (entity.Type == InstockType.ProduceSotck) + ProduceSotck_sourceBillNos.Add(entity.SourceBillNo); + } + + if (ProduceSotck_sourceBillNos.Count() > 0)//生产入库 + { + var erp_result = await _erpService.BillQueryForProduceSotckin(ProduceSotck_sourceBillNos, null); + if (!erp_result.IsSuccess) + return Result>.ReFailure(erp_result.Message, erp_result.Status); + erp_list.AddRange(erp_result.Data); } if (Instock_sourceBillNos.Count() > 0) @@ -812,6 +849,8 @@ namespace WMS.Web.Domain.Services erp_list.AddRange(erp_result_disass.Data); } + + return Result>.ReSuccess(erp_list); } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index ff74c7f6..92321ba2 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -620,6 +620,124 @@ namespace WMS.Web.Domain.Services.Public } } + + /// + /// erp:单据查询-生产入单,生产汇报单(已审核的) + /// + /// + /// + public async Task> BillQueryForProduceSotckin(List sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true) + { + string result_json = ""; + try + { + + var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); + if (stocks.Count == 0) + return ResultList.ReFailure(ResultCodes.ErpStockNoData); + var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'")); + var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'")); + + //1.先登录金蝶-拿到token + var token_result = await this.Init(); + if (!token_result.IsSuccess) + return ResultList.ReFailure(token_result); + + //2.时间条件:可能还有其它条件 + //var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00"); + var beginStr = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss"); + if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss"); + var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + //3.获取金蝶分步式入库订单:拼接参数和条件 + var query = new ErpBillQueryDto(token_result.Data); + var param = new ErpBillQueryParamDto(FormIdParam.PRD_MORPT.ToString()); + param.FieldKeys = "FBillNo,FReqBillNo,FPrdOrgId,FPrdOrgId.FNumber,FMATERIALID.FNumber,FSpecification,FMaterialName,FSTOCKID,FSTOCKID.FNumber,FQuaQty,FCreateDate,FDescriptionE,FEntity_FEntryID"; + param.Limit = 10000; + //查询条件:备注其中的条件值以金蝶的值为准!!! + //1.创建时间在两天前和当天时间之间 + //2.审核状态:已审核 + //3.单据类型:标准分步式调入单;这里要注意了-----------测试端的“单据类型ID”和线上的可能不一样;上线的时候要核对下 + //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 + //当金蝶系统物料明细行调出仓库和调入仓库相同, 数据不需要拉取 + //param.FilterString = " FDocumentStatus='C' and FBillTypeID='e65a4f29743a44b7b67dc8145e1f9c92'"; + param.FilterString = " 1=1"; + if (isCheck) param.FilterString += " and FDocumentStatus='C'"; + //param.FilterString += " and FSrcStockId!=FDestStockId"; + for (int i = 0; i < stocks.Count(); i++) + { + if (i == 0) + { + param.FilterString += " and ("; + param.FilterString += $"(FSTOCKID.FNumber='{stocks[i].Code}' and FPrdOrgId.FNumber='{stocks[i].ErpOrgCode}')"; + // param.FilterString += $"( FPrdOrgId.FNumber='{stocks[i].ErpOrgCode}')"; + } + else + param.FilterString += $" or (FSTOCKID.FNumber='{stocks[i].Code}' and FPrdOrgId.FNumber='{stocks[i].ErpOrgCode}')"; + if (i == stocks.Count() - 1) param.FilterString += ")"; + + } + + //根据原订单号查询 + if (sourceBillNos != null && sourceBillNos.Count() > 0) + { + param.FilterString = param.FilterString + " and FBillNo in ("; + + var bill_str = ""; + int bill_index = 0; + //var srt_b = JsonConvert.SerializeObject(sourceBillNos); + foreach (var bill in sourceBillNos) + { + bill_index++; + if (bill_index == sourceBillNos.Count) + bill_str = bill_str + $"'{bill}'"; + else + bill_str = bill_str + $"'{bill}'" + ","; + } + param.FilterString = param.FilterString + bill_str + ")"; + }//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了 + else + { + //param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'"; + param.FilterString = param.FilterString + " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endTime + "'"; + } + + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); + + //4.请求查询接口 + result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + + //5.返回数据的组装 + var erp_list = new List(); + foreach (var item in result) + { + var lis = new ErpInStockResultDto(); + lis.BillNo = item[0]; + lis.OrgId = Convert.ToInt32(item[2]); + lis.MaterialNumber = item[4]; + lis.StockId = Convert.ToInt32(item[7]); + lis.StockCode = item[8]; + lis.Qty = Convert.ToDecimal(item[9]); + lis.CreateTime = Convert.ToDateTime(item[10]); + lis.Remark = item[11]; + lis.OrgCode = item[3]; + lis.ErpDetailId = Convert.ToInt32(item[12]); + lis.Type = (int)InstockType.ProduceSotck; + lis.SaleBillNo= item[1]; + erp_list.Add(lis); + } + //_logger.LogInformation("分步式调入条数:" + erp_list.Count); + return ResultList.ReSuccess(erp_list); + } + catch (Exception ex) + { + _logger.LogError($"BillQueryForTransferin->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}"); + return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); + } + } + + /// /// erp:单据查询-组装拆卸单-组装(成品入库) /// @@ -2469,6 +2587,8 @@ namespace WMS.Web.Domain.Services.Public return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } + + /// /// 销售出库单 /// diff --git a/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs b/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs index 8d433a36..c8166429 100644 --- a/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs +++ b/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs @@ -80,6 +80,11 @@ namespace WMS.Web.Domain.Values.Erp /// /// 即时库存 /// - STK_Inventory = 18 + STK_Inventory = 18, + /// + /// 生产入库单(来源于生产汇报单) + /// + PRD_MORPT = 19, + } } diff --git a/src/WMS.Web.Domain/Values/InstockType.cs b/src/WMS.Web.Domain/Values/InstockType.cs index 6cf83926..65a6f4b0 100644 --- a/src/WMS.Web.Domain/Values/InstockType.cs +++ b/src/WMS.Web.Domain/Values/InstockType.cs @@ -35,5 +35,10 @@ namespace WMS.Web.Domain.Values /// [EnumRemark("组装拆卸入库")] Assembled = 5, + /// + /// 生产入库 + /// + [EnumRemark("生产入库")] + ProduceSotck = 6, } } diff --git a/src/WMS.Web.Repositories/DependencyInjection/ErrorHandlingMiddleware.cs b/src/WMS.Web.Repositories/DependencyInjection/ErrorHandlingMiddleware.cs index dfab979b..5f9859f0 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/ErrorHandlingMiddleware.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/ErrorHandlingMiddleware.cs @@ -51,7 +51,7 @@ namespace WMS.Web.Repositories.DependencyInjection _logger.LogError($"统一拦截异常处理: {ex.Message}, StackTrace:{ex.StackTrace},Path:{context.Request.Path},Parame:{bodyStr}"); - await HandleExceptionAsync(context, statusCode, "服务器错误,不能执行此请求,请稍后重试,若问题一直存在,请与站点管理员联系"); + await HandleExceptionAsync(context, statusCode, "服务器错误,不能执行此请求,请稍后重试,若问题一直存在,请与站点管理员联系500"); // await HandleExceptionAsync(context, statusCode, "服务器错误"); } finally @@ -63,8 +63,8 @@ namespace WMS.Web.Repositories.DependencyInjection // msg = "未授权"; // } if (statusCode == 404) - msg = "服务器暂无响应,请稍后重试,若问题一直存在,请与站点管理员联系"; - else if (statusCode == 502) msg = "网关出错,请与站点管理员联系"; + msg = "服务器暂无响应,请稍后重试,若问题一直存在,请与站点管理员联系404"; + else if (statusCode == 502) msg = "网关出错,请与站点管理员联系502"; // else if (statusCode != 200) // { // msg = "未知错误"; diff --git a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs index 40192e5d..eaecdb08 100644 --- a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs +++ b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs @@ -219,6 +219,40 @@ namespace WMS.Web.Repositories return res_c; } + /// + /// 根据套装码获取序列码 + /// + /// + /// + public async Task> GetEntityListBySuitNumber(string suitNumber) + { + + return await _context.SerialNumbers.AsNoTracking() + .Where(f => f.SerialNumber.Contains(suitNumber)) + .ToListAsync(); + + //var res = await _context.SerialNumbers + // .Where(f => serialNumbers.Contains(f.SerialNumber)) + // .ToListAsync(); + //var res_c = res.Clone(); + + //var s_e = res.Select(s => s.SerialNumber).ToList(); + ////在序列表里没找到的序列码 则到老ops序列码数据里去处理 list比较 取差集 + //var s_c = serialNumbers.Except(s_e); + //if (s_c.Count() > 0) + //{ + // var entitys_ops = serialNumbers.Where(w => s_c.Contains(w)).ToList(); + // var r_o = await _context.SerialNumbers_Ops + // .Where(f => serialNumbers.Contains(f.SerialNumber)) + // .ToListAsync(); + + // res_c.AddRange(_mapper.Map>(r_o.Clone())); + //} + + //return res_c; + } + + /// /// 根据序列号 ///