| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Dynamic; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | |
| | | using NewPdaSqlServer.entity; |
| | | using NewPdaSqlServer.util; |
| | | using MES.Service.service.Kingdee; |
| | | |
| | | |
| | | namespace NewPdaSqlServer.Controllers.Kingdee; |
| | | |
| | | |
| | | [ApiController] |
| | | [Route("api/[controller]")] |
| | | public class ErpBOMController : ControllerBase |
| | | { |
| | | private readonly ErpBOMManager kc = new(); |
| | | |
| | | |
| | | // |
| | | [HttpPost("Save")] |
| | | public ResponseResult Save() |
| | | { |
| | | try |
| | | { |
| | | dynamic resultInfos = new ExpandoObject(); |
| | | resultInfos = kc.QueryErpBOM(); |
| | | |
| | | return new ResponseResult |
| | | { |
| | | status = 0, |
| | | message = "OK", |
| | | data = resultInfos |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return ResponseResult.ResponseError(ex); |
| | | } |
| | | } |
| | | } |
| | |
| | | public string? FSTOREURNUM { get; set; } |
| | | public string? FStockOrgId { get; set; } |
| | | } |
| | | |
| | | public class ErpBom |
| | | { |
| | | public string? FITEMPPROPERTY { get; set; } |
| | | public string? FMATERIALID { get; set; } |
| | | public string? FITEMNAME { get; set; } |
| | | public string? FENTRYID { get; set; } |
| | | public string? FCHILDITEMNAME { get; set; } |
| | | public string? FNUMERATOR { get; set; } |
| | | public string? FDENOMINATOR { get; set; } |
| | | } |
| | | } |
| | |
| | | </PropertyGroup> |
| | | |
| | | <ItemGroup> |
| | | <PackageReference Include="Kingdee.CDP.WebApi.SDK" Version="1.0.2" /> |
| | | <PackageReference Include="Masuit.Tools.Core" Version="2024.5.8" /> |
| | | <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.8" /> |
| | | <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.10" /> |
| | |
| | | "AppSettings": { |
| | | "TestErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest", |
| | | "ProductionErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest", |
| | | //"DataBaseConn": "Data Source=192.168.1.146,12468;Initial Catalog=TEST_MES;User ID=testUser;Password =qixi1qaz@WSXtest;Encrypt=True;TrustServerCertificate=True;" |
| | | "DataBaseConn": "Data Source=192.168.1.146,12468;Initial Catalog=GS_MES;User ID=mesUser;Password =qixi1qaz@WSXmes;Encrypt=True;TrustServerCertificate=True;" |
| | | "DataBaseConn": "Data Source=172.100.1.114,12468;Initial Catalog=TEST_MES;User ID=testUser;Password =qixi1qaz@WSXtest;Encrypt=True;TrustServerCertificate=True;" |
| | | //"DataBaseConn": "Data Source=172.100.1.114,12468;Initial Catalog=GS_MES;User ID=mesUser;Password =qixi1qaz@WSXmes;Encrypt=True;TrustServerCertificate=True;" |
| | | }, |
| | | "Version": "1.0.0", |
| | | "X-KDApi-AcctID": "6244701c616bff", |
| | |
| | | public decimal? FStockOrgId { get; set; } |
| | | |
| | | } |
| | | |
| | | [SugarTable("ERP_BOM")] |
| | | public class ErpBOM |
| | | { |
| | | [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)] |
| | | public Guid ID { get; set; } |
| | | /// <summary> |
| | | /// é»è®¤å¼: (newid()) |
| | | /// </summary> |
| | | [SugarColumn(ColumnName = "ItemProperty")] |
| | | public string? ItemProperty { get; set; } |
| | | |
| | | [SugarColumn(ColumnName = "ItemId")] |
| | | public int? ItemId { get; set; } |
| | | |
| | | [SugarColumn(ColumnName = "ItemName")] |
| | | public string? ItemName { get; set; } |
| | | |
| | | [SugarColumn(ColumnName = "ChildItemId")] |
| | | public int? ChildItemId { get; set; } |
| | | |
| | | [SugarColumn(ColumnName = "ChildItemName")] |
| | | public string? ChildItemName { get; set; } |
| | | |
| | | [SugarColumn(ColumnName = "Numerator")] |
| | | public decimal? Numerator { get; set; } |
| | | |
| | | [SugarColumn(ColumnName = "Denominator")] |
| | | public decimal? Denominator { get; set; } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | |  |
| | | using Kingdee.CDP.WebApi.SDK; |
| | | using MES.Service.Models; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Microsoft.AspNetCore.Mvc.Filters; |
| | | using NewPdaSqlServer.DB; |
| | | using NewPdaSqlServer.Dto; |
| | | using NewPdaSqlServer.entity; |
| | | using NewPdaSqlServer.util; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System.Text; |
| | | |
| | | namespace MES.Service.service.Kingdee; |
| | | |
| | | public class ErpBOMManager : Repository<ErpBOM> |
| | | { |
| | | |
| | | #region è·åBOM |
| | | public bool QueryErpBOM() |
| | | { |
| | | List<ErpBom> bom = GetErpBOM(); |
| | | |
| | | // æ£æ¥è¿åç»ææ¯å¦ä¸ºç©º |
| | | if (bom == null || bom.Count == 0) |
| | | { |
| | | throw new NotImplementedException("è¿åç»æä¸ºç©º"); |
| | | } |
| | | else |
| | | { |
| | | var baseObjects = MapErpBOMtoMes(bom); |
| | | |
| | | return UseTransaction(db => |
| | | { |
| | | return SaveBOMData(db, baseObjects) ? 1 : 0; |
| | | }) > 0; |
| | | } |
| | | } |
| | | |
| | | private bool SaveBOMData(SqlSugarScope db, List<ErpBOM> kcc) |
| | | { |
| | | Db.Deleteable<ErpBOM>() |
| | | .ExecuteCommand(); |
| | | |
| | | var save = base.InsertRange(kcc); |
| | | if (save) return true; |
| | | throw new NotImplementedException("æå
¥å¤±è´¥"); |
| | | } |
| | | |
| | | public List<ErpBom> GetErpBOM() |
| | | { |
| | | //注æ 1ï¼æ¤å¤ä¸å使ç¨åæ°å½¢å¼ä¼ å
¥ç¨æ·ååå¯ç çææä¿¡æ¯ï¼æ¹ä¸ºå¨ç»å½é
ç½®æä»¶ä¸è®¾ç½®ã |
| | | //注æ 2ï¼å¿
é¡»å
é
ç½®ç¬¬ä¸æ¹ç³»ç»ç»å½ææä¿¡æ¯åï¼åè¿è¡ä¸å¡æä½ï¼è¯¦æ
åèåè¯è¨çæ¬SDKä»ç»ä¸çç»å½é
ç½®æä»¶è¯´æã |
| | | //读åé
ç½®ï¼åå§åSDK |
| | | K3CloudApi client = new K3CloudApi(); |
| | | //ç¨äºè®°å½ç»æ |
| | | StringBuilder Info = new StringBuilder(); |
| | | //ä¸å¡å¯¹è±¡æ è¯ |
| | | string formId = "ENG_BOM"; |
| | | DateTime dt = DateTime.Now; |
| | | //æ¥è¯¢å段éåï¼å³è¿ååªäºæ°æ®ï¼ä¸è½ä¸ºç©ºï¼æ ¹æ®ä¸åä¸å¡åæ®å¡«åä¸åçåæ®µåï¼ä»¥ä¸ä»
ä¸ºç¤ºä¾ |
| | | //string fieldKeys = "FCod,FFileId,FRelevantObject"; |
| | | //string FilterString = "FID='-2146304'"; |
| | | string fieldKeys = "FITEMPPROPERTY ,FMATERIALID ,FITEMNAME ,FTreeEntity_FENTRYID ,FCHILDITEMNAME ,FNUMERATOR , FDENOMINATOR"; |
| | | var filterString = new[] |
| | | { |
| | | new |
| | | { |
| | | FieldName = "FITEMPPROPERTY", |
| | | Compare = "29", |
| | | Value = "3", |
| | | Left = "(", |
| | | Right = ")", |
| | | Logic = 0 |
| | | } |
| | | }; |
| | | var param = new QueryParams() |
| | | { |
| | | FormId = formId, |
| | | FieldKeys = fieldKeys, |
| | | FilterString = filterString |
| | | }; |
| | | //è°ç¨æ¥å£ |
| | | var result = client.ExecuteBillQuery(param.ToJson()); |
| | | |
| | | return result.Select(s => |
| | | { |
| | | var entity = new ErpBom |
| | | { |
| | | FITEMPPROPERTY = s[0]?.ToString(), |
| | | FMATERIALID = s[1]?.ToString(), |
| | | FITEMNAME = s[2]?.ToString(), |
| | | FENTRYID = s[3]?.ToString(), |
| | | FCHILDITEMNAME = s[4]?.ToString(), |
| | | FNUMERATOR = s[5]?.ToString(), |
| | | FDENOMINATOR = s[6]?.ToString() |
| | | }; |
| | | return entity; |
| | | }).ToList(); |
| | | } |
| | | |
| | | private class QueryParams :BaseEntify |
| | | { |
| | | public string FormId { get; set; } |
| | | |
| | | public string FieldKeys { get; set; } |
| | | |
| | | public object[] FilterString { get; set; } |
| | | } |
| | | |
| | | private List<ErpBOM> MapErpBOMtoMes(List<ErpBom> dtoList) |
| | | { |
| | | var ErpMesBomList = new List<ErpBOM>(); |
| | | |
| | | foreach (var dto in dtoList) |
| | | { |
| | | var kc = new ErpBOM |
| | | { |
| | | ID = Guid.NewGuid(), |
| | | ItemProperty = dto.FITEMPPROPERTY, |
| | | ItemId = Convert.ToInt32(dto.FMATERIALID), |
| | | ItemName = dto.FITEMNAME, |
| | | ChildItemId = Convert.ToInt32(dto.FENTRYID), |
| | | ChildItemName = dto.FCHILDITEMNAME, |
| | | Numerator = Convert.ToDecimal(dto.FNUMERATOR), |
| | | Denominator = Convert.ToDecimal(dto.FDENOMINATOR) |
| | | |
| | | }; |
| | | |
| | | ErpMesBomList.Add(kc); |
| | | } |
| | | |
| | | return ErpMesBomList; |
| | | } |
| | | #endregion |
| | | |
| | | } |
| | |
| | |  |
| | | using Kingdee.CDP.WebApi.SDK; |
| | | using MES.Service.Models; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Microsoft.AspNetCore.Mvc.Filters; |
| | | using NewPdaSqlServer.DB; |
| | | using NewPdaSqlServer.Dto; |
| | | using NewPdaSqlServer.entity; |
| | | using NewPdaSqlServer.util; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using NewPdaSqlServer.DB; |
| | | using System.Text; |
| | | using NewPdaSqlServer.Dto; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using MES.Service.Models; |
| | | |
| | | namespace MES.Service.service.Kingdee; |
| | | |
| | |
| | | |
| | | private JArray BuildDetailData(dynamic queryObj) |
| | | { |
| | | // 使ç¨åæ°åæ¥è¯¢è·åæç»æ°æ® |
| | | const string mainSql = @"select ROW_NUMBER() over (ORDER BY Jy_Date) AS xh,releaseNo AS jydh, Jy_Date AS jydrq, batchQty as sjsl, |
| | | chouQty AS cys, badQty AS bls, badProb AS bll,C.USER_NAME AS jyr |
| | | from Mes_QC_Exceptional_Detail A |
| | | LEFT JOIN MES_QA_ITEMS_DETECT_01 B ON A.releaseNo = B.release_no |
| | | LEFT JOIN SYS_USER C ON C.ACCOUNT = B.fcheck_by |
| | | WHERE pGuid = @guid"; |
| | | |
| | | var details = Db.Ado.SqlQuery<dynamic>(mainSql, new { guid = queryObj.qcczdGuid }); |
| | | |
| | | var tableRecords = new JArray(); |
| | | |
| | | // éåæ¯æ¡æç»æ°æ® |
| | | foreach (var record in details ?? Enumerable.Empty<dynamic>()) |
| | | // å°ç´æ¥SQLæ¥è¯¢æ¿æ¢ä¸ºåå¨è¿ç¨è°ç¨ |
| | | var parameters = new[] |
| | | { |
| | | // ä¿®æ£å段类å转æ¢ï¼æ°å¼ç±»åå»é¤å符串å
è£¹ï¼ |
| | | var fields = new JArray |
| | | { |
| | | //new JObject { ["fieldName"] = "xh", ["fieldValue"] = record.xh?.ToString() ?? "" }, |
| | | new JObject { ["fieldName"] = "jydh", ["fieldValue"] = record.jydh?.ToString() ?? "" }, |
| | | new JObject { ["fieldName"] = "jyr", ["fieldValue"] = record.jyr?.ToString() ?? "" }, |
| | | new JObject { |
| | | ["fieldName"] = "jydrq", |
| | | // æ ¼å¼å为"yyyy-MM-dd"å符串 |
| | | ["fieldValue"] = (record.jydrq != null |
| | | ? Convert.ToDateTime(record.jydrq).ToString("yyyy-MM-dd ") |
| | | : DateTime.Now.ToString("yyyy-MM-dd")) |
| | | }, |
| | | // æ°å¼åæ®µä¿ææ°åç±»åèéå符串 |
| | | // ä¿®æ£æ°å¼ç±»åè½¬æ¢æ¹å¼ |
| | | new JObject { ["fieldName"] = "sjsl", ["fieldValue"] = (float)(record.sjsl ?? 0m) }, |
| | | new JObject { ["fieldName"] = "cys", ["fieldValue"] = (float)(record.cys ?? 0) }, |
| | | new JObject { ["fieldName"] = "bls", ["fieldValue"] = (float)(record.bls ?? 0) }, |
| | | new JObject { ["fieldName"] = "bll", ["fieldValue"] = 1, } |
| | | }; |
| | | |
| | | tableRecords.Add(new JObject |
| | | { |
| | | ["recordOrder"] = 0, // å®é
ä¸å¡ä¸å¯è½éè¦æ ¹æ®è¡å·è®¾ç½® |
| | | ["workflowRequestTableFields"] = fields |
| | | }); |
| | | } |
| | | |
| | | return new JArray |
| | | { |
| | | new JObject |
| | | { |
| | | ["tableDBName"] = "formtable_main_321_dt1",//æµè¯ï¼formtable_main_33_dt1 |
| | | ["workflowRequestTableRecords"] = tableRecords |
| | | } |
| | | new SugarParameter("@pi_guid", queryObj.qcczdGuid), |
| | | new SugarParameter("@inP1", null), |
| | | new SugarParameter("@inP2", null), |
| | | new SugarParameter("@inP3", null), |
| | | new SugarParameter("@inP4", null) |
| | | }; |
| | | |
| | | try |
| | | { |
| | | var details = Db.Ado.SqlQuery<dynamic>( |
| | | "EXEC select_oa_BuildDetailData @pi_guid,@inP1,@inP2,@inP3,@inP4", |
| | | parameters); |
| | | |
| | | |
| | | var tableRecords = new JArray(); |
| | | |
| | | // éåæ¯æ¡æç»æ°æ® |
| | | foreach (var record in details ?? Enumerable.Empty<dynamic>()) |
| | | { |
| | | // ä¿®æ£å段类å转æ¢ï¼æ°å¼ç±»åå»é¤å符串å
è£¹ï¼ |
| | | var fields = new JArray |
| | | { |
| | | //new JObject { ["fieldName"] = "xh", ["fieldValue"] = record.xh?.ToString() ?? "" }, |
| | | new JObject { ["fieldName"] = "jydh", ["fieldValue"] = record.jydh?.ToString() ?? "" }, |
| | | new JObject { ["fieldName"] = "jyr", ["fieldValue"] = record.jyr?.ToString() ?? "" }, |
| | | new JObject { ["fieldName"] = "xblb", ["fieldValue"] = record.xblb?.ToString() ?? "" }, |
| | | new JObject { |
| | | ["fieldName"] = "jydrq", |
| | | // æ ¼å¼å为"yyyy-MM-dd"å符串 |
| | | ["fieldValue"] = (record.jydrq != null |
| | | ? Convert.ToDateTime(record.jydrq).ToString("yyyy-MM-dd ") |
| | | : DateTime.Now.ToString("yyyy-MM-dd")) |
| | | }, |
| | | // æ°å¼åæ®µä¿ææ°åç±»åèéå符串 |
| | | // ä¿®æ£æ°å¼ç±»åè½¬æ¢æ¹å¼ |
| | | new JObject { ["fieldName"] = "sjsl", ["fieldValue"] = (float)(record.sjsl ?? 0m) }, |
| | | new JObject { ["fieldName"] = "cys", ["fieldValue"] = (float)(record.cys ?? 0) }, |
| | | new JObject { ["fieldName"] = "bls", ["fieldValue"] = (float)(record.bls ?? 0) }, |
| | | new JObject { ["fieldName"] = "bll", ["fieldValue"] = 1, } |
| | | }; |
| | | |
| | | tableRecords.Add(new JObject |
| | | { |
| | | ["recordOrder"] = 0, // å®é
ä¸å¡ä¸å¯è½éè¦æ ¹æ®è¡å·è®¾ç½® |
| | | ["workflowRequestTableFields"] = fields |
| | | }); |
| | | } |
| | | |
| | | return new JArray |
| | | { |
| | | new JObject |
| | | { |
| | | ["tableDBName"] = "formtable_main_321_dt1",//æµè¯ï¼formtable_main_33_dt1 |
| | | ["workflowRequestTableRecords"] = tableRecords |
| | | } |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception($"æ¥è¯¢å¼å¸¸æç»å¤±è´¥: {ex.Message}"); |
| | | } |
| | | |
| | | // // 使ç¨åæ°åæ¥è¯¢è·åæç»æ°æ® |
| | | // const string mainSql = @"select ROW_NUMBER() over (ORDER BY Jy_Date) AS xh,releaseNo AS jydh, Jy_Date AS jydrq, batchQty as sjsl, |
| | | // chouQty AS cys, badQty AS bls, badProb AS bll,C.USER_NAME AS jyr |
| | | // from Mes_QC_Exceptional_Detail A |
| | | // LEFT JOIN MES_QA_ITEMS_DETECT_01 B ON A.releaseNo = B.release_no |
| | | // LEFT JOIN SYS_USER C ON C.ACCOUNT = B.fcheck_by |
| | | // WHERE pGuid = @guid"; |
| | | |
| | | // var details = Db.Ado.SqlQuery<dynamic>(mainSql, new { guid = queryObj.qcczdGuid }); |
| | | |
| | | |
| | | } |
| | | |
| | | private JObject BuildOtherParams() |
| | |
| | | } |
| | | |
| | | |
| | | // ========== æ°å¢ï¼éªè¯å½ååºä½ä¸ç©æé»è®¤åºä½æ¯å¦ä¸è´ ========== |
| | | // è·åç©æä¿¡æ¯ |
| | | var mesItems = Db.Queryable<MesItems>() |
| | | .Where(s => s.Id == itemBarcodeDetails.ItemId) |
| | | .First(); |
| | | |
| | | if (mesItems == null) |
| | | throw new Exception("æ¾ä¸å°å¯¹åºçç©æä¿¡æ¯ï¼"); |
| | | |
| | | // æ£æ¥ç©ææ¯å¦æé»è®¤åºä½è®¾ç½® |
| | | if (!string.IsNullOrEmpty(mesItems.DepotCode)) |
| | | { |
| | | // è·åç©æé»è®¤åºä½å¯¹åºçä»åºä¿¡æ¯ |
| | | var defaultDepot = Db.Queryable<MesDepots>() |
| | | .Where(d => d.DepotCode == mesItems.DepotCode) |
| | | .First(); |
| | | |
| | | if (mesItems.DepotCode != null && mesItems.DepotCode != "0") |
| | | { |
| | | // æ¯è¾å½åæ«æçåºä½æå±ä»åºç¼ç ä¸ç©æé»è®¤ä»åºç¼ç æ¯å¦ä¸è´ |
| | | if (mesDepost.DepotId?.ToString() != mesItems.DepotCode) |
| | | { |
| | | throw new Exception($"å½ååºä½æå±ä»åº[{mesDepost.DepotId}]ä¸ç©æé»è®¤ä»åº[{mesItems.DepotCode}]ä¸ä¸è´ï¼è¯·æ«ææ£ç¡®çåºä½ï¼"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //num = Db.Queryable<MesInvItemInCDetails>() |
| | | // .Where(it => it.ItemBarcode == itemBarcode) |
| | | // .Count(); |
| | |
| | | var sqlParams = new List<SugarParameter> { }; |
| | | |
| | | var sql2 = new StringBuilder(@" |
| | | SELECT NAME,line_no FROM MES_WORKSHOP_LINE WHERE isAgv = 1 ORDER BY line_no"); |
| | | SELECT NAME,line_no,agvPostion FROM MES_WORKSHOP_LINE WHERE isAgv = 1 ORDER BY line_no"); |
| | | |
| | | |
| | | var XtItem = Db.Ado.SqlQuery<dynamic>(sql2.ToString(), sqlParams); |
| | |
| | | { |
| | | new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount }, |
| | | new("@pi_xtNum", SqlDbType.NVarChar, 100) { Value = query.XtNum }, |
| | | new("@in1", SqlDbType.NVarChar, 100) { Value = query.AgvDw }, |
| | | new("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output }, |
| | | new("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output } |
| | | }; |
| | |
| | | |
| | | var icoimg = ""; |
| | | if (mesFile != null) |
| | | icoimg = "http://192.168.1.145:81/upload/" + |
| | | icoimg = AppsettingsUtility.Settings.ImageUploadUrl + |
| | | mesFile.UrlPath; |
| | | |
| | | groupObj.child.Add(new MesSysPageview |
| | |
| | | public string TestErpUrl { get; set; } |
| | | public string ProductionErpUrl { get; set; } |
| | | public string DataBaseConn { get; set; } |
| | | public string ImageUploadUrl { get; set; } |
| | | } |
| | |
| | | myOwn.TestErpUrl = configuration["AppSettings:TestErpUrl"]; |
| | | myOwn.ProductionErpUrl = configuration["AppSettings:ProductionErpUrl"]; |
| | | myOwn.DataBaseConn = configuration["AppSettings:DataBaseConn"]; |
| | | myOwn.ImageUploadUrl = configuration["AppSettings:ImageUploadUrl"]; |
| | | Settings = myOwn; |
| | | } |
| | | } |