库存导出,采购单接收,物料接收优化,前端显示优化,测试架AGV任务大小托盘更改
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace WIDESEAWCS_Common |
| | | { |
| | | public enum StationOccupiedEnum |
| | | { |
| | | |
| | | None, |
| | | Sure |
| | | } |
| | | } |
| | |
| | | } |
| | | }, |
| | | TaskCode = agvTask.AgvTaskNum, |
| | | PodTyp = agvTask.PalletType < 3 ? "XX" : "DD", |
| | | PodTyp = agvTask.PalletType < 3 ? "ZC" : "DX", |
| | | }; |
| | | WebResponseContent content = _taskService.AgvSendTask(taskDTO); |
| | | if (content.Status) |
| | |
| | | window.webConfig = { |
| | | "webApiBaseUrl": "http://10.30.5.60:9293/", |
| | | "webApiBaseUrl": "http://127.0.0.1:9293/", |
| | | "webApiProduction":"http://10.30.4.92:9283/" |
| | | } |
| | |
| | | title: "è¡å·", |
| | | type: "string", |
| | | width: 150, |
| | | align: "left", |
| | | align: "left" |
| | | }, |
| | | { |
| | | field: "materielCode", |
| | |
| | | required: true, |
| | | }, |
| | | { |
| | | field: "materielCode", |
| | | field: "materielName", |
| | | title: "ç©æåç§°", |
| | | type: "string", |
| | | width: 100, |
| | | align: "left", |
| | | bind: { key: "MaterielNames", data: [] }, |
| | | align: "left" |
| | | }, |
| | | // { |
| | | // field: "batchNo", |
| | |
| | | ], |
| | | [ |
| | | { title: "ä¾åºå", field: "suppliersId", type: "select",dataKey:"suppliers",data:[]}, |
| | | { title: "å建è
", field: "creater", type: "like" }, |
| | | { title: "å建è
", field: "creater", type: "like" } |
| | | ], |
| | | ]); |
| | | |
| | |
| | | required: true, |
| | | }, |
| | | { |
| | | field: "materielCode", |
| | | field: "materielName", |
| | | title: "ç©æåç§°", |
| | | type: "string", |
| | | width: 100, |
| | | align: "left", |
| | | bind: { key: "MaterielNames", data: [] }, |
| | | }, |
| | | { |
| | | field: "lotNo", |
| | |
| | | { |
| | | try |
| | | { |
| | | Dt_Warehouse? warehouse = null; |
| | | if (model.ItemType.ObjToInt() == MaterielTypeEnum.RawMateriel.ObjToInt()) |
| | | { |
| | | warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId); |
| | | if (warehouse == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | } |
| | | Dt_Warehouse? warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId); |
| | | if (model.OperateType.ObjToInt() == 0) |
| | | { |
| | | Dt_MaterielInfo materielInfo = new Dt_MaterielInfo() |
| | |
| | | namespace WIDESEA_DTO.Stock |
| | | { |
| | | /// <summary> |
| | | /// |
| | | /// åºåè§å¾ |
| | | /// </summary> |
| | | public class StockViewDTO |
| | | { |
| | | /// <summary> |
| | | /// ä»åºID |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "ä»åºID")] |
| | | public int WarehouseId { get; set; } |
| | | /// <summary> |
| | | /// è´§ä½ç¼å· |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½ç¼å·")] |
| | | public string LocationCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// è´§ä½åç§° |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½åç§°")] |
| | | public string LocationName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// è´§ä½å |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½å")] |
| | | public int Column { get; set; } |
| | | |
| | | /// <summary> |
| | | /// è´§ä½è¡ |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½è¡")] |
| | | public int Row { get; set; } |
| | | |
| | | /// <summary> |
| | | /// è´§ä½å± |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½å±")] |
| | | public int Layer { get; set; } |
| | | |
| | | /// <summary> |
| | | /// è´§ä½æ·±åº¦ |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½æ·±åº¦")] |
| | | public int Depth { get; set; } |
| | | |
| | | /// <summary> |
| | | /// è´§ä½ç¶æ |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½ç¶æ")] |
| | | public int LocationStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// è´§ä½ç±»å |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "è´§ä½ç±»å")] |
| | | public int LocationType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å··éç¼å· |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "å··éç¼å·")] |
| | | public string RoadwayNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç¦ç¨ç¶æ |
| | | /// </summary> |
| | | [ExporterHeader(IsIgnore = true)] |
| | | public int EnalbeStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åºåä¸»é® |
| | | /// </summary> |
| | | [ExporterHeader(IsIgnore = true)] |
| | | public int StockId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æçå· |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "æçå·")] |
| | | public string PalletCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | [ExporterHeader(IsIgnore = true)] |
| | | public bool IsFull { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©æç¼ç |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "ç©æç¼ç ")] |
| | | public string MaterielCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©ææ¹å· |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "ç©ææ¹å·")] |
| | | public string BatchNo { get; set; } |
| | | /// <summary> |
| | | /// åºåæ°é |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "åºåæ°é")] |
| | | public string StockCounts { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åºåç¶æ |
| | | /// </summary> |
| | | [ExporterHeader(IsIgnore = true)] |
| | | public int StockStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åºå夿³¨ |
| | | /// </summary> |
| | | [ExporterHeader(IsIgnore = true)] |
| | | public string StockRemark { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å建人 |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "å建人")] |
| | | public string Creater { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å建æ¶é´ |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "å建æ¶é´")] |
| | | public DateTime CreateDate { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä¿®æ¹äºº |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "ä¿®æ¹äºº")] |
| | | public string Modifier { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä¿®æ¹æ¶é´ |
| | | /// </summary> |
| | | [ExporterHeader(DisplayName = "ä¿®æ¹æ¶é´")] |
| | | public DateTime? ModifyDate { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åºå详æ
|
| | | /// </summary> |
| | | [ExporterHeader(IsIgnore = true)] |
| | | [Navigate(NavigateType.OneToMany, nameof(Dt_StockInfoDetail.StockId), nameof(StockId))] |
| | | public List<Dt_StockInfoDetail> Details { get; set; } |
| | | } |
| | |
| | | PageGridData<StockViewDTO> GetPageData(PageDataOptions options); |
| | | |
| | | object GetDetailPage(PageDataOptions pageData); |
| | | WebResponseContent Export(PageDataOptions options); |
| | | } |
| | | } |
| | |
| | | Dt_PurchaseOrderDetail purchaseOrderDetail = new Dt_PurchaseOrderDetail() |
| | | { |
| | | MaterielCode = item.MCode, |
| | | MaterielName = materielInfo.MaterielName, |
| | | PurchaseDetailQuantity = item.Qty, |
| | | PurchaseDetailReceiveQty = 0, |
| | | PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(), |
| | |
| | | { |
| | | try |
| | | { |
| | | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo); |
| | | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First(); |
| | | if (purchaseOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åä¿¡æ¯"); |
| | |
| | | { |
| | | try |
| | | { |
| | | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo); |
| | | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First(); |
| | | if (purchaseOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åä¿¡æ¯"); |
| | |
| | | { |
| | | try |
| | | { |
| | | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo); |
| | | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x=>x.PurchaseOrderNo== model.OrderNo).Includes(x=>x.Details).First(); |
| | | if (purchaseOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åä¿¡æ¯"); |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæç»å·²æ¶è´§"); |
| | | } |
| | | //è·åå
·ä½æ¹æ¬¡ |
| | | Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo); |
| | | //è·åå
·ä½æ¹æ¬¡åç©æ |
| | | Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode==model.MaterielCode); |
| | | lock (_rowNoLocker) |
| | | { |
| | | if (detail != null) |
| | |
| | | ReceivedQuantity = model.Quantity, |
| | | MaterielCode = model.MaterielCode, |
| | | LotNo = model.LotNo, |
| | | MaterielName=materielInfo.MaterielName, |
| | | ReceiveOrderId = receiveOrder.ReceiveOrderId, |
| | | PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo, |
| | | IfInspection = materielInfo.IsCheck.ObjToInt(), |
| | |
| | | _basicRepository = basicRepository; |
| | | _invokeERPService = invokeERPService; |
| | | } |
| | | |
| | | public override PageGridData<Dt_ReceiveOrder> GetPageData(PageDataOptions options) |
| | | { |
| | | PageGridData<Dt_ReceiveOrder> pageGridData = base.GetPageData(options); |
| | | //foreach (var item in pageGridData.Rows) |
| | | //{ |
| | | // //è·åæ¶è´§æç» |
| | | // item.PurchaseOrderNo |
| | | //} |
| | | return pageGridData; |
| | | } |
| | | public override WebResponseContent AddData(SaveModel saveModel) |
| | | { |
| | | if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower())) |
| | |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "åä½")] |
| | | public string Unit { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©æåç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "ç©æåç§°")] |
| | | public string MaterielName { get; set; } |
| | | } |
| | | } |
| | |
| | | /// </summary> |
| | | [Navigate(NavigateType.OneToMany, nameof(Dt_ReceiveOrderDetail.ReceiveOrderId), nameof(ReceiveOrderId))] |
| | | public List<Dt_ReceiveOrderDetail> Details { get; set; } |
| | | |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string? PurchaseOrderNo { get; set; } |
| | | } |
| | | } |
| | |
| | | /// <summary> |
| | | /// åä½ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "")] |
| | | [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "åä½")] |
| | | public string Unit { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©æåç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "ç©æåç§°")] |
| | | public string MaterielName { get; set; } |
| | | } |
| | | } |
| | |
| | |  |
| | | using HslCommunication.Secs.Types; |
| | | using Magicodes.ExporterAndImporter.Core; |
| | | using Magicodes.ExporterAndImporter.Excel; |
| | | using Microsoft.AspNetCore.Http; |
| | | using SqlSugar; |
| | | using System; |
| | |
| | | } |
| | | return new PageGridData<object>(total: 0, null); |
| | | } |
| | | public virtual WebResponseContent Export(PageDataOptions options) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Type t = typeof(StockViewDTO); |
| | | |
| | | string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport"; |
| | | IExporter exporter = new ExcelExporter(); |
| | | options.Page = 1; |
| | | options.Rows = 30; |
| | | options.Order = "desc"; |
| | | options.Sort = "stockId"; |
| | | List<StockViewDTO> stockViewDTOs = new List<StockViewDTO>(); |
| | | |
| | | string where = string.Empty; |
| | | ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Includes(x => x.Details); |
| | | if (!string.IsNullOrEmpty(options.Wheres)) |
| | | { |
| | | try |
| | | { |
| | | List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>(); |
| | | if (searchParametersList.Count > 0) |
| | | { |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value))); |
| | | } |
| | | } |
| | | |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value))); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | catch { } |
| | | } |
| | | string whereSto = GetDataRole(typeof(Dt_StockInfo)); |
| | | sugarQueryable1 = sugarQueryable1.Where(whereSto); |
| | | EntityProperties.ValidatePageOptions(options, ref sugarQueryable1); |
| | | |
| | | string whereLo = GetDataRole(typeof(Dt_LocationInfo)); |
| | | ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>().Where(whereLo); |
| | | |
| | | EntityProperties.ValidatePageOptions(options, ref sugarQueryable); |
| | | |
| | | ISugarQueryable<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).Select((b, a) |
| | | => new StockViewDTO |
| | | { |
| | | LocationCode = b.LocationCode, |
| | | Column = a.Column, |
| | | WarehouseId = b.WarehouseId, |
| | | CreateDate = b.CreateDate, |
| | | Creater = b.Creater, |
| | | Depth = a.Depth, |
| | | EnalbeStatus = a.EnableStatus, |
| | | Layer = a.Layer, |
| | | LocationName = a.LocationName, |
| | | LocationStatus = a.LocationStatus, |
| | | LocationType = a.LocationType, |
| | | Modifier = b.Modifier, |
| | | ModifyDate = b.ModifyDate, |
| | | PalletCode = b.PalletCode, |
| | | StockRemark = b.Remark, |
| | | RoadwayNo = a.RoadwayNo, |
| | | Row = a.Row, |
| | | StockId = b.Id, |
| | | StockStatus = b.StockStatus, |
| | | Details = b.Details, |
| | | }); |
| | | |
| | | var pklist = sugarQueryable1.Where(b => b.LocationCode == "å¹³åºä½").Select(b => new StockViewDTO |
| | | { |
| | | LocationCode = b.LocationCode, |
| | | Column = 0, |
| | | WarehouseId = b.WarehouseId, |
| | | CreateDate = b.CreateDate, |
| | | Creater = b.Creater, |
| | | Depth = 0, |
| | | EnalbeStatus = EnableStatusEnum.Normal.ObjToInt(), |
| | | Layer = 0, |
| | | LocationName = "å¹³åºä½", |
| | | LocationStatus = LocationStatusEnum.InStock.ObjToInt(), |
| | | LocationType = LocationTypeEnum.Undefined.ObjToInt(), |
| | | Modifier = b.Modifier, |
| | | ModifyDate = b.ModifyDate, |
| | | PalletCode = b.PalletCode, |
| | | StockRemark = b.Remark, |
| | | RoadwayNo = "å¹³åº", |
| | | Row = 0, |
| | | StockId = b.Id, |
| | | StockStatus = b.StockStatus, |
| | | Details = b.Details, |
| | | }); |
| | | stockViewDTOs = list.ToList(); |
| | | stockViewDTOs.AddRange(pklist.ToList()); |
| | | stockViewDTOs.ForEach(x => |
| | | { |
| | | x.MaterielCode = (string.Join(",", x.Details.Select(x => x.MaterielCode).Distinct())) ?? "空箱"; |
| | | x.BatchNo = (string.Join(",", x.Details.Select(x => x.BatchNo).Distinct())) ?? "æ "; |
| | | x.StockCounts = x.Details.Sum(x => x.StockQuantity).ToString() + x.Details.FirstOrDefault()?.Unit; |
| | | } |
| | | ); |
| | | |
| | | byte[] data = exporter.ExportAsByteArray(stockViewDTOs).Result; |
| | | |
| | | string fileName = "åºåè§å¾.xlsx"; |
| | | |
| | | FileHelper.WriteFile(savePath, fileName, data); |
| | | |
| | | content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content = WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | private string GetDataRole(Type type) |
| | | { |
| | | try |
| | |
| | | using Microsoft.AspNetCore.Authorization; |
| | | using Autofac.Core; |
| | | using Microsoft.AspNetCore.Authorization; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Microsoft.Extensions.Options; |
| | | using SqlSugar; |
| | | using System.Reflection; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseController; |
| | | using WIDESEA_DTO.Stock; |
| | |
| | | { |
| | | return _stockViewService.GetDetailPage(pageData); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¯¼åºæ°æ® |
| | | /// </summary> |
| | | /// <param name="loadData"></param> |
| | | /// <returns></returns> |
| | | [HttpPost, Route("Export")] |
| | | public virtual ActionResult Export([FromBody] PageDataOptions loadData) |
| | | { |
| | | WebResponseContent result = InvokeService("Export", new object[] { loadData }) as WebResponseContent; |
| | | if (result.Status) |
| | | return File( |
| | | System.IO.File.ReadAllBytes(result.Data.ToString()), |
| | | System.Net.Mime.MediaTypeNames.Application.Octet, |
| | | Path.GetFileName(result.Data.ToString()) |
| | | ); |
| | | return Json(result); |
| | | } |
| | | private object InvokeService(string methodName, object[] parameters) |
| | | { |
| | | Type t = _stockViewService.GetType(); |
| | | List<Type> types = new List<Type>(); |
| | | foreach (var param in parameters) |
| | | { |
| | | types.Add(param.GetType()); |
| | | } |
| | | MethodInfo method = t.GetMethod(methodName, types.ToArray()); |
| | | return method.Invoke(_stockViewService, parameters); |
| | | } |
| | | } |
| | | } |