From 891207469b41c23d22805876a4e179d75832572f Mon Sep 17 00:00:00 2001
From: leiqunqing <zhengqifeng@hnkhzn.com>
Date: 星期四, 05 三月 2026 11:03:52 +0800
Subject: [PATCH] 完整项目更新
---
代码管理/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/ScanStationService.cs | 274 ++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 243 insertions(+), 31 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/ScanStationService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/ScanStationService.cs"
index 4a5fcda..a778204 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/ScanStationService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/ScanStationService.cs"
@@ -1,4 +1,7 @@
锘縰sing Autofac.Core;
+using OfficeOpenXml;
+using OfficeOpenXml.Style;
+using Spire.Xls;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -8,7 +11,9 @@
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.BasicInfo;
+using WIDESEAWCS_IBasicInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -18,14 +23,21 @@
{
private readonly IFormulaService _formulaService;
private readonly IFormulaDetailService _formulaDetailService;
+ private readonly IProcessInfoService _processInfoService;
+ private readonly IProcessInfoDetailService _processInfoDetailService;
- public ScanStationService(IRepository<Dt_ScanStation> BaseDal,
+
+ public ScanStationService(IRepository<Dt_ScanStation> BaseDal,
IFormulaService formulaService,
- IFormulaDetailService formulaDetailService
+ IFormulaDetailService formulaDetailService,
+ IProcessInfoService processInfoService,
+ IProcessInfoDetailService processInfoDetailService
) : base(BaseDal)
{
_formulaService = formulaService;
_formulaDetailService = formulaDetailService;
+ _processInfoService = processInfoService;
+ _processInfoDetailService = processInfoDetailService;
}
public IRepository<Dt_ScanStation> Repository => BaseDal;
@@ -57,7 +69,7 @@
var Error = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolError);
if (Heart && !EMG && OnlineExecuting && !Error)
- {
+ {
device.SetValue(W_PLCDBName.wboolAutoStart, true);
//鏆傚仠淇″彿
device.SetValue(W_PLCDBName.wboolAutoPause, false);
@@ -89,7 +101,7 @@
var Heart = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolHeart);
var EMG = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolEMG);
var Error = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolError);
- if(!device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoStart))
+ if (!device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoStart))
{
return WebResponseContent.Instance.Error("璁惧鏈惎鍔�");
}
@@ -115,34 +127,42 @@
/// <exception cref="Exception"></exception>
public WebResponseContent GetSignalStates()
{
- OtherDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceName == "涓绘帶PLC") as OtherDevice;
- if (device == null) throw new Exception("鏈壘鍒颁富鎺LC璁惧淇℃伅");
- if (!device.IsConnected) throw new Exception($"涓绘帶PLC璁惧閫氳寮傚父");
- //鑾峰彇淇″彿鐏姸鎬�
- var Heart = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolHeart);
- var EMG = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolEMG);
- var AutoExecuting = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolAutoExecuting);
- var OnlineExecuting = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolOnlineExecuting);
- var Error = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolError);
-
- //鑾峰彇鍚姩鏆傚仠鐘舵��
- var IsStarted = device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoStart);
- var IsPaused = device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoPause);
-
- //杩斿洖瀵硅薄
- var responseData = new
+ try
{
- // 淇″彿鐏姸鎬佹暟缁勶紙淇濇寔鍘熸湁椤哄簭锛�
- signalStates = new bool[] { Heart, EMG, AutoExecuting, OnlineExecuting, Error },
- // PLC鍚姩/鏆傚仠鐘舵�佸璞�
- plcStatus = new
+ OtherDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceName == "涓绘帶PLC") as OtherDevice;
+ if (device == null) throw new Exception("鏈壘鍒颁富鎺LC璁惧淇℃伅");
+ if (!device.IsConnected) throw new Exception($"涓绘帶PLC璁惧閫氳寮傚父");
+
+ //鑾峰彇淇″彿鐏姸鎬�
+ var Heart = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolHeart);
+ var EMG = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolEMG);
+ var AutoExecuting = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolAutoExecuting);
+ var OnlineExecuting = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolOnlineExecuting);
+ var Error = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolError);
+
+ //鑾峰彇鍚姩鏆傚仠鐘舵��
+ var IsStarted = device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoStart);
+ var IsPaused = device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoPause);
+
+ //杩斿洖瀵硅薄
+ var responseData = new
{
- isStarted = IsStarted,
- isPaused = IsPaused
- }
- };
- return WebResponseContent.Instance.OK(data: responseData);
+ // 淇″彿鐏姸鎬佹暟缁勶紙淇濇寔鍘熸湁椤哄簭锛�
+ signalStates = new bool[] { Heart, EMG, AutoExecuting, OnlineExecuting, Error },
+ // PLC鍚姩/鏆傚仠鐘舵�佸璞�
+ plcStatus = new
+ {
+ isStarted = IsStarted,
+ isPaused = IsPaused
+ }
+ };
+ return WebResponseContent.Instance.OK(data: responseData);
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
}
/// <summary>
@@ -165,13 +185,16 @@
}
List<Dt_FormulaDetail> dt_FormulaDetails = _formulaDetailService.Repository.QueryData(x => x.FormulaId == dt_Formula.Id);
+ // 鏂板leftPartSupplierCodes瀛楁瀛樺偍渚涙柟浠g爜
var responseData = new
{
finishedProductId = dt_Formula.Id,
finishedProduct = dt_Formula.ProductCode,
leftPartCodes = new List<string>(),
leftPartIds = new List<int>(),
- leftPartChecked = new List<int>()
+ leftPartChecked = new List<int>(),
+ // 瀛樺偍姣忎釜闆朵欢鐨勪緵鏂逛唬鐮�
+ leftPartSupplierCodes = new List<string>()
};
foreach (var detail in dt_FormulaDetails.Take(10))
@@ -179,6 +202,8 @@
responseData.leftPartCodes.Add(detail.ComponentCode ?? "");
responseData.leftPartIds.Add(detail.Id);
responseData.leftPartChecked.Add(detail.IsScanned);
+ // 娣诲姞渚涙柟浠g爜锛屼负绌烘椂杩斿洖绌哄瓧绗︿覆
+ responseData.leftPartSupplierCodes.Add(detail.SupplierCode ?? "");
}
int needFillCount = 10 - responseData.leftPartCodes.Count;
@@ -187,6 +212,8 @@
responseData.leftPartCodes.Add("");
responseData.leftPartIds.Add(0);
responseData.leftPartChecked.Add(0);
+ //琛ヨ冻10鏉℃暟鎹紝绌虹殑渚涙柟浠g爜杩斿洖绌哄瓧绗︿覆
+ responseData.leftPartSupplierCodes.Add("");
}
return WebResponseContent.Instance.OK("鑾峰彇宸︿晶鍒濆鏁版嵁鎴愬姛", responseData);
}
@@ -214,11 +241,196 @@
}
return WebResponseContent.Instance.Error("鏇存柊閿欒");
}
- catch (Exception ex)
+ catch (Exception ex)
{
return WebResponseContent.Instance.Error("鑾峰彇鏁版嵁澶辫触");
}
}
+
+ /// <summary>
+ /// 涓嬭浇娴佺▼鍗�
+ /// </summary>
+ /// <param name="dt_ProcessInfo"></param>
+ /// <returns></returns>
+ public WebResponseContent ExportData()
+ {
+ try
+ {
+ Dt_ScanStation dt_ScanStation = BaseDal.QueryFirst(x => x.StationCode == "001");
+
+ string fileName = $"{DateTime.Now.ToString("yyyyMMddHHssmm")}" + $"{dt_ScanStation.StationEndProduct}.xlsx";
+ string templatePath = $"{AppDomain.CurrentDomain.BaseDirectory}ExprotTemplate\\鍙戠數鏈哄脊鎬ф敮鎾戜俊鎭寲娴佺▼鍗�.xlsx";//妯℃澘璺緞
+ // 鑾峰彇绯荤粺妗岄潰璺緞
+ string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\娴佺▼鍗�";
+ //string desktopPath = "C:\\Users\\Administrator\\Desktop";
+ string savePath = Path.Combine(desktopPath, fileName);
+
+ using Stream templateStream = new FileStream(templatePath, FileMode.Open);
+ using Stream saveStream = new FileStream(savePath, FileMode.Create);
+ using ExcelPackage package = new ExcelPackage(saveStream, templateStream);
+ ExcelWorksheet worksheet = package.Workbook.Worksheets["娴佺▼鍗�"];
+ Dt_Formula formula = _formulaService.Repository.QueryFirst(x => x.ProductCode == dt_ScanStation.StationEndProduct);
+ List<Dt_FormulaDetail> dt_FormulaDetails = _formulaDetailService.Repository.QueryData(x => x.FormulaId == formula.Id && x.IsScanned == 1).ToList();
+ for (int i = dt_FormulaDetails.Count; i < 10; i++)
+ {
+ dt_FormulaDetails.Add(new Dt_FormulaDetail());
+ }
+
+
+
+ worksheet.Cells[3, 5].Value = dt_ScanStation.StationEndProduct;//鎴愬搧缂栧彿
+ worksheet.Cells[3, 17].Value = dt_ScanStation.LastProductSn.ObjToInt() - dt_ScanStation.FirstProductSn.ObjToInt() + 1;//鏁伴噺;
+ worksheet.Cells[3, 29].Value = dt_ScanStation.FirstProductSn + "-" + dt_ScanStation.LastProductSn;//娴佹按鍙�
+ worksheet.Cells[4, 5].Value = DateTime.Now.ToString("yyyy/MM/dd");//缁勮鏃ユ湡
+ worksheet.Cells[4, 17].Value = dt_ScanStation.AssembleUser;//缁勮浜哄憳
+
+
+ int row = 7;
+ for (int j = 0; j < 5; j++)
+ {
+ worksheet.Cells[row, 1].Value = dt_FormulaDetails[j].ComponentName;
+ worksheet.Cells[row, 5].Value = dt_FormulaDetails[j].ComponentCode;
+ worksheet.Cells[row, 12].Value = dt_FormulaDetails[j].SupplierCode;
+
+ worksheet.Cells[row, 19].Value = dt_FormulaDetails[j + 5].ComponentName;
+ worksheet.Cells[row, 23].Value = dt_FormulaDetails[j + 5].ComponentCode;
+ worksheet.Cells[row, 30].Value = dt_FormulaDetails[j + 5].SupplierCode;
+ row++;
+ }
+
+ row = 13;
+ for (int j = 0; j < 4; j++)
+ {
+ worksheet.Cells[row + j, 12].Value = "鈽� 鏄� 鈻� 鍚�";
+ worksheet.Cells[row + j, 30].Value = "鈽� 鏄� 鈻� 鍚�";
+ }
+ worksheet.Cells[17, 12].Value = "鈽� 鏄� 鈻� 鍚�";
+ worksheet.Cells[23, 5].Value = "鈽� 鏄� 鈻� 鍚�";
+
+ worksheet.Cells[26, 7].Value = formula.ProductHeight;
+ worksheet.Cells[26, 13].Value = formula.ScrewTorqueOutput;
+ worksheet.Cells[26, 19].Value = formula.ScrewDownsetDistance;
+ worksheet.Cells[26, 25].Value = formula.PressFastenTorque;
+
+
+ List<Dt_ProcessInfoDetail> dt_ProcessInfoDetails = _processInfoDetailService.Repository
+ .QueryData(x => x.ProductCode == dt_ScanStation.StationEndProduct
+ && x.ProductSn.CompareTo(dt_ScanStation.FirstProductSn) >= 0
+ && x.ProductSn.CompareTo(dt_ScanStation.LastProductSn) <= 0)
+ .OrderBy(x => x.CreateDate)
+ .ToList();
+ row = 27;
+ ExcelRange baseStyleRow = worksheet.Cells[$"{row}:{row}"];
+ foreach (var item in dt_ProcessInfoDetails)
+ {
+ if (row > 61)
+ {
+ var sourceRange = worksheet.Cells[row - 1, 1, row - 1, 36];
+ var targetRange = worksheet.Cells[row, 1, row, 36];
+
+ // 1. 澶嶅埗鍚堝苟瑙勫垯锛堝師鏈夐�昏緫淇濈暀锛�
+ CopyCellMerge(worksheet, sourceRange, targetRange);
+ // 2. 澶嶅埗鏍峰紡锛堝吋瀹规墍鏈塃PPlus鐗堟湰锛�
+ targetRange.StyleID = sourceRange.StyleID;
+ // 3. 鍚屾琛岄珮
+ worksheet.Row(row).Height = worksheet.Row(row - 1).Height;
+ }
+
+ worksheet.Cells[row, 1].Value = item.ProductSn;
+ worksheet.Cells[row, 7].Value = item.ProductCheckHeight;
+ worksheet.Cells[row, 7].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
+ worksheet.Cells[row, 7].Style.Fill.BackgroundColor.SetColor(SixLabors.ImageSharp.Color.Yellow);
+
+ worksheet.Cells[row, 13].Value = item.ThreadPositionHeight;
+ worksheet.Cells[row, 13].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
+ worksheet.Cells[row, 13].Style.Fill.BackgroundColor.SetColor(SixLabors.ImageSharp.Color.Yellow);
+
+ worksheet.Cells[row, 19].Value = item.PressPressure;
+ worksheet.Cells[row, 19].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
+ worksheet.Cells[row, 19].Style.Fill.BackgroundColor.SetColor(SixLabors.ImageSharp.Color.Yellow);
+
+ worksheet.Cells[row, 25].Value = item.ScrewTorque;
+ worksheet.Cells[row, 25].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
+ worksheet.Cells[row, 25].Style.Fill.BackgroundColor.SetColor(SixLabors.ImageSharp.Color.Yellow);
+
+ worksheet.Cells[row, 31].Value = item.ProductStatus == 0 ? "涓嶅悎鏍�" : item.ProductStatus == 1 ? "鍚堟牸" : "浜哄伐纭鍚堟牸";
+ //if (item.PressTightenUnfinished == 1)
+ //{
+ // worksheet.Cells[row, 31].Value = "鍘嬭鎷х揣寮傚父";
+ //}
+ //else
+ //{
+ // worksheet.Cells[row, 31].Value = "姝e父";
+ //}
+ row++;
+
+ }
+ //worksheet.DeleteRow(row, worksheet.Dimension.End.Row - row + 1);
+
+ package.Save();
+
+ string pdfFileName = $"{DateTime.Now.ToString("yyyyMMddHHssmm")}" + $"{dt_ScanStation.StationEndProduct}.pdf";
+ //string pdfPath = $"{AppDomain.CurrentDomain.BaseDirectory}Download\\{pdfFileName}";
+ string pdfPath = Path.Combine(desktopPath, pdfFileName);
+
+ Workbook workbook = new Workbook();
+ workbook.LoadFromFile(savePath);
+
+ // 璁剧疆杞崲閫夐」锛屽寘鍚墍鏈夊伐浣滆〃
+ workbook.ConverterSetting.SheetFitToPage = true;
+
+ // 淇濆瓨鎵�鏈夊伐浣滆〃鍒板悓涓�涓狿DF鏂囦欢
+ workbook.SaveToFile(pdfPath, FileFormat.PDF);
+
+ //// 杞崲绗竴涓伐浣滆〃鍒癙DF
+ //workbook.SaveToFile(pdfPath, FileFormat.PDF);
+ return WebResponseContent.Instance.OK(data: new { path = pdfPath, fileName = pdfFileName });
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+
+ // <summary>
+ /// 鑷畾涔塃xcel鍗曞厓鏍煎悎骞惰鍒欏鍒舵柟娉曪紙鍏煎浣庣増鏈珽PPlus锛�
+ /// </summary>
+ /// <param name="worksheet">Excel宸ヤ綔琛�</param>
+ /// <param name="sourceRange">婧愬崟鍏冩牸鑼冨洿</param>
+ /// <param name="targetRange">鐩爣鍗曞厓鏍艰寖鍥�</param>
+ public void CopyCellMerge(ExcelWorksheet worksheet, ExcelRange sourceRange, ExcelRange targetRange)
+ {
+ if (sourceRange == null || targetRange == null) return;
+ if (sourceRange.Worksheet != worksheet || targetRange.Worksheet != worksheet) return;
+
+ // 1. 鍏堝皢婧愯寖鍥村唴鐨勫悎骞跺尯鍩熸彁鍙栧埌涓存椂鍒楄〃涓�
+ var sourceMergeList = new List<string>();
+ foreach (var merge in worksheet.MergedCells)
+ {
+ var mergeRange = worksheet.Cells[merge];
+ if (mergeRange.Start.Row >= sourceRange.Start.Row && mergeRange.End.Row <= sourceRange.End.Row
+ && mergeRange.Start.Column >= sourceRange.Start.Column && mergeRange.End.Column <= sourceRange.End.Column)
+ {
+ sourceMergeList.Add(merge);
+ }
+ }
+
+ // 2. 閬嶅巻涓存椂鍒楄〃锛屽畨鍏ㄥ湴鍒涘缓鐩爣鍚堝苟鍖哄煙
+ foreach (var merge in sourceMergeList)
+ {
+ var mergeRange = worksheet.Cells[merge];
+ int rowOffset = targetRange.Start.Row - sourceRange.Start.Row;
+ int colOffset = targetRange.Start.Column - sourceRange.Start.Column;
+ var targetMergeRange = worksheet.Cells[
+ mergeRange.Start.Row + rowOffset,
+ mergeRange.Start.Column + colOffset,
+ mergeRange.End.Row + rowOffset,
+ mergeRange.End.Column + colOffset
+ ];
+ targetMergeRange.Merge = true;
+ }
+ }
}
}
--
Gitblit v1.9.3