This repository has been archived on 2025-11-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AUTS_OLD/UTS_Core/UTSModule/Project/FrmProject.vb

420 lines
18 KiB
VB.net
Raw Normal View History

2024-03-11 16:32:52 +08:00
Imports System.IO
Imports System.Net
Imports System.Windows.Forms
Imports UTS_Core.UTSModule.Login
Imports UTS_Core.UTSModule.Production
Imports UTS_Core.UTSModule.Station
Namespace UTSModule.Project
Public Class FrmProject
Private _userProject As ProjectInfo
Private _userInfo As UserInfo
Private _productTypeManager As ProductTypeManager
Public Sub ShowForm(parentControl As Control, userInfo As UserInfo)
FormBorderStyle = FormBorderStyle.None
TopLevel = False
Dock = DockStyle.Fill
Parent = parentControl
_userInfo = userInfo
Show()
End Sub
Private Sub EnabledSaveProject(isEnabled As Boolean)
TsBtnSaveProject.Enabled = isEnabled
TsBtnReleaseProject.Enabled = isEnabled
TsBtnDeleteProject.Enabled = isEnabled
TxtProjectName.Enabled = isEnabled
TxtDescription.Enabled = isEnabled
GrdStations.Enabled = isEnabled
PicProject.Enabled = isEnabled
TxtRemark.Enabled = isEnabled
NudPrice.Enabled = isEnabled
CboProjectType.Enabled = isEnabled
DtpValidDate.Enabled = isEnabled
RadOrderCreate.Enabled = isEnabled
RadTestCreate.Enabled = isEnabled
End Sub
Private Sub InitializeForm()
_productTypeManager = ProductTypeManager.CreateManager()
CboProjectType.Items.AddRange(_productTypeManager.GetAllProductType())
EnabledSaveProject(_userProject IsNot Nothing)
End Sub
Private Sub FrmProject_Load(sender As Object, e As EventArgs) Handles Me.Load
InitializeForm()
End Sub
Private Sub LoadProjectInitForm(project As ProjectInfo)
TxtProjectName.Text = project.Name
TxtDescription.Text = project.Description
TxtRemark.Text = project.Remark
PicProject.Image = project.MasterImage
NudPrice.Value = project.Price
Select Case project.SnType
Case 0
RadTestCreate.Checked = True
Case 1
RadOrderCreate.Checked = True
End Select
'todo:初始化产品类型ID
CboProjectType.SelectedIndex = CboProjectType.Items.IndexOf(_productTypeManager.GetProductType(project.ProductTypeId))
DtpValidDate.Value = project.EolDate
EnabledSaveProject(_userProject IsNot Nothing)
ProjectStationGrid.InitTestStationGrid(GrdStations, project)
End Sub
Private Sub TsBtnNewProject_Click(sender As Object, e As EventArgs) Handles TsBtnNewProject.Click
Using dlg As New DlgCreateProject
If dlg.ShowDialog() <> DialogResult.OK Then Return
_userProject = New ProjectInfo(_userInfo.UserId, dlg.ProjectName)
LoadProjectInitForm(_userProject)
End Using
End Sub
Private Sub TsBtnLoadProject_Click(sender As Object, e As EventArgs) Handles TsBtnLoadProject.Click
Using dlg As New DlgLoadProject
If dlg.ShowDialog() <> DialogResult.OK Then Return
Try
_userProject = New ProjectInfo(_userInfo.UserId, dlg.ProjectName, dlg.LoadMode)
LoadProjectInitForm(_userProject) '初始化页面
Catch ex As Exception
MsgBox($"Load Project Error:{ex.Message}")
End Try
End Using
End Sub
Private Sub TsBtnCloneProject_Click(sender As Object, e As EventArgs) Handles TsBtnCloneProject.Click
Using dlg As New DlgLoadProject
If dlg.ShowDialog() <> DialogResult.OK Then Return
Try
_userProject = New ProjectInfo(_userInfo.UserId, dlg.ProjectName, dlg.LoadMode)
LoadProjectInitForm(_userProject) '初始化页面
_userProject.Index = -1
Catch ex As Exception
MsgBox($"Clone Project Error:{ex.Message}")
End Try
End Using
End Sub
''' <summary>
''' 检测用户对项目的修改是否输入合法
''' 不合法时会抛出异常
''' </summary>
Private Sub CheckUserAlter()
If String.IsNullOrEmpty(TxtProjectName.Text) Then Throw New Exception($"项目名称不能空,请重新输入!")
'后续可新增对项目名中非常规字符的检测
For row As Integer = 1 To GrdStations.Rows - 1
If String.IsNullOrEmpty(GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Name).Text) Then
GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Name).SetFocus()
Throw New Exception($"项目站名不能为空,如若未使用,请右键删除该站!")
'后续可新增对项目站名中非常规字符的检测
End If
If String.IsNullOrEmpty(GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Type).Text) Then
GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Type).SetFocus()
Throw New Exception($"项目类型不能为空,如若未使用,请右键删除该站!")
'后续可新增对项目站名中非常规字符的检测
End If
If String.IsNullOrEmpty(GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.SnType).Text) Then
GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.SnType).SetFocus()
Throw New Exception($"项目条码规则不能为空,如若未使用,请右键删除该站!")
'后续可新增对项目站名中非常规字符的检测
End If
Next
End Sub
Private Sub UpdateProjectInfo(project As ProjectInfo)
project.UserId = _userInfo.UserId '当前操作项目站用户名
If String.Compare(project.Name, TxtProjectName.Text) <> 0 Then
project.Name = TxtProjectName.Text
project.InfoChanged = True
End If
'todo:检测产品类型修改
Dim tmpIndex As Integer = _productTypeManager.GetProductIndex(CboProjectType.Text)
If project.ProductTypeId <> tmpIndex Then
project.ProductTypeId = tmpIndex
project.InfoChanged = True
End If
If String.Compare(project.Description, TxtDescription.Text) <> 0 Then
project.Description = TxtDescription.Text
project.InfoChanged = True
End If
If String.Compare(project.Remark, TxtRemark.Text) <> 0 Then
project.Remark = TxtRemark.Text
project.InfoChanged = True
End If
If project.Price <> NudPrice.Value Then
project.Price = NudPrice.Value
project.InfoChanged = True
End If
If RadOrderCreate.Checked Then
If project.SnType <> 1 Then
project.SnType = 1
project.InfoChanged = True
End If
ElseIf RadTestCreate.Checked Then
If project.SnType <> 0 Then
project.SnType = 0
project.InfoChanged = True
End If
End If
For row As Integer = 1 To GrdStations.Rows - 1
Dim info As ProcessStation = project.Station.Item(row - 1)
With info
.UserId = _userInfo.UserId '当前操作项目站用户名
Dim stationType As ProcessStation.StationTypeEnum = CType([Enum].Parse(GetType(ProcessStation.StationTypeEnum), GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Type).Text), ProcessStation.StationTypeEnum)
If .StationType <> stationType Then
.StationType = stationType
.TypeChange = True
End If
Dim stationNum As Integer = row
If .ArtworkOrder <> stationNum Then
.ArtworkOrder = stationNum
.InfoChanged = True
End If
Dim stationName As String = GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Name).Text
If String.Compare(.Name, stationName) <> 0 Then
.Name = stationName
.InfoChanged = True
End If
Dim stationDesc As String = GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Description).Text
If String.Compare(.Description, stationDesc) <> 0 Then
.Description = stationDesc
.InfoChanged = True
End If
Dim snType As ProcessStation.SnTypeEnum = CType([Enum].Parse(GetType(ProcessStation.SnTypeEnum), GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.SnType).Text), ProcessStation.SnTypeEnum)
If .SnType <> snType Then
.SnType = snType
.InfoChanged = True
End If
Dim stationDevType As String = GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.DevType).Text
If String.Compare(.DevType, stationDevType) <> 0 Then
.DevType = stationDevType
.InfoChanged = True
End If
Dim stationDevApp As String = GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.DevApp).Text
If String.Compare(.DevApp, stationDevApp) <> 0 Then
.DevApp = stationDevApp
.InfoChanged = True
End If
Dim stationPacketName As String = GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.PacketName).Text
If String.Compare(.Packet.FileName, stationPacketName) <> 0 Then
.Packet.FileName = stationPacketName
.InfoChanged = True
End If
End With
Next
End Sub
Private Sub TsBtnSaveProject_Click(sender As Object, e As EventArgs) Handles TsBtnSaveProject.Click
Try
CheckUserAlter()
UpdateProjectInfo(_userProject)
Dim filePath As String = UtsPath.ProjectFilePath(_userProject.Name)
_userProject.ExportToXml(filePath)
MsgBox($"Save {_userProject.Name} Project Succes!")
Catch ex As Exception
MsgBox($"Save {_userProject.Name} Project Fail,{ex.Message}")
End Try
End Sub
Private Sub TsBtnReleaseProject_Click(sender As Object, e As EventArgs) Handles TsBtnReleaseProject.Click
Try
CheckUserAlter()
UpdateProjectInfo(_userProject)
Dim filePath As String = UtsPath.ProjectFilePath(_userProject.Name)
_userProject.Release(filePath)
MsgBox($"Release {_userProject.Name} Project Succes!")
Catch ex As Exception
MsgBox($"Release {_userProject.Name} Project Fail,{ex.Message}")
Return
End Try
Try
Dim msg As String = GetData("http://uts-data.com/api/Common/ClearCache")
Console.WriteLine($"Msg:{msg}")
Catch ex As Exception
MsgBox($"更新缓存数据失败,{ex.Message}")
End Try
End Sub
Public Shared Function GetData(url As String) As String
Dim request As HttpWebRequest = CType(WebRequest.Create(url & "?" & $"cmd=UP&dbName={UtsDb.RemotePrivateDb}"), HttpWebRequest)
request.Accept = "text/html,application/xhtml+xml,*/*"
request.ContentType = "application/json"
request.Method = "GET"
Dim sr As New StreamReader(request.GetResponse().GetResponseStream)
Return sr.ReadToEnd
End Function
#Region "测试站检测"
Private Sub GrdStations_ButtonClick(sender As Object, e As FlexCell.Grid.ButtonClickEventArgs) Handles GrdStations.ButtonClick
Select Case e.Col
Case ProjectStationGrid.ColNameEnum.PacketName
End Select
End Sub
Private Sub TsmAddStation_Click(sender As Object, e As EventArgs) Handles TsmAddStation.Click
GrdStations.AddItem(String.Empty)
_userProject.Station.Add(New ProcessStation(_userProject))
End Sub
Private Sub TsmRemoveStation_Click(sender As Object, e As EventArgs) Handles TsmRemoveStation.Click
If GrdStations.Selection Is Nothing Then Return
If GrdStations.Cell(GrdStations.Selection.FirstRow, ProjectStationGrid.ColNameEnum.Name).Text.Length = 0 Then
_userProject.Station.RemoveAt(GrdStations.Selection.FirstRow - 1)
GrdStations.Selection.DeleteByRow()
Else
If MsgBox("数据库会删除对应测试站,该操作不可逆,是否继续此操作?", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then
GrdStations.Selection.DeleteByRow()
_userProject.DeleteStation.Add(_userProject.Station.Item(GrdStations.Selection.FirstRow - 1))
_userProject.Station.RemoveAt(GrdStations.Selection.FirstRow - 1)
End If
End If
End Sub
Private Sub TsmMoveUpStation_Click(sender As Object, e As EventArgs) Handles TsmMoveUpStation.Click
Dim row As Integer = GrdStations.Selection.FirstRow
If row = 1 Then Return
GrdStations.Row(row).Position -= 1
Dim stationIndex As Integer = row - 1
Dim srcProcessStation As ProcessStation = _userProject.Station.Item(stationIndex)
_userProject.Station.Item(stationIndex) = _userProject.Station.Item(stationIndex - 1)
_userProject.Station.Item(stationIndex - 1) = srcProcessStation
End Sub
Private Sub TsmMoveDownStation_Click(sender As Object, e As EventArgs) Handles TsmMoveDownStation.Click
Dim row As Integer = GrdStations.Selection.FirstRow
If row = GrdStations.Rows - 1 Then Return
GrdStations.Row(row).Position += 1
Dim stationIndex As Integer = row - 1
Dim srcProcessStation As ProcessStation = _userProject.Station.Item(stationIndex)
_userProject.Station.Item(stationIndex) = _userProject.Station.Item(stationIndex + 1)
_userProject.Station.Item(stationIndex + 1) = srcProcessStation
End Sub
Private Sub TsBtnDeleteProject_Click(sender As Object, e As EventArgs) Handles TsBtnDeleteProject.Click
If MsgBox("是否确定删除该项目", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then
If _userProject Is Nothing Then Return
Try
_userProject.Delete()
_userProject = Nothing
EnabledSaveProject(_userProject IsNot Nothing)
ProjectStationGrid.InitTestStationGrid(GrdStations)
MsgBox("删除完成!")
Catch ex As Exception
MsgBox("删除失败:" & ex.Message)
End Try
End If
End Sub
Private Sub PicProject_DoubleClick(sender As Object, e As EventArgs) Handles PicProject.DoubleClick
Using dlgFile As New OpenFileDialog
dlgFile.Filter = $"设备图像 (*.bmp;*.gif;*.jpg;*.png)|*.bmp;*.gif;*.jpg;*.png"
If dlgFile.ShowDialog() <> DialogResult.OK Then Return
Dim imagePath As String = dlgFile.FileName
_userProject.MasterImage = ImageProcessor.ImageProcessor.CompressImageWithWidth(CType(ImageProcessor.ImageProcessor.GetBitmapImage(imagePath), Drawing.Bitmap), 600)
_userProject.PreviewImage = ImageProcessor.ImageProcessor.CompressImageWithWidth(New Drawing.Bitmap(_userProject.MasterImage), 120)
_userProject.ImageName = $"P_{_userProject.Name}_{Now:yyyyMMdd_HHmmss}.png"
PicProject.Image = _userProject.MasterImage
If _userProject.PreviewImageChanged = False Then _userProject.PreviewImageChanged = True
End Using
End Sub
Private Sub MsiStationPreview_Click(sender As Object, e As EventArgs) Handles MsiStationPreview.Click
Dim row As Integer = GrdStations.Selection.FirstRow
If row >= GrdStations.Rows OrElse row < 1 Then Return
Using dlgFile As New OpenFileDialog
dlgFile.Filter = $"设备图像 (*.bmp;*.gif;*.jpg;*.png)|*.bmp;*.gif;*.jpg;*.png"
If dlgFile.ShowDialog() <> DialogResult.OK Then Return
Dim imagePath As String = dlgFile.FileName
_userProject.Station(row - 1).PreViewImage = ImageProcessor.ImageProcessor.CompressImageWithWidth(CType(ImageProcessor.ImageProcessor.GetBitmapImage(imagePath), Drawing.Bitmap), 600)
If _userProject.Station(row - 1).PreviewImageChanged = False Then _userProject.Station(row - 1).PreviewImageChanged = True
Dim imgKey As String
If String.IsNullOrEmpty(GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Preview).ImageKey) Then
imgKey = GrdStations.Images.Count().ToString()
Else
imgKey = GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Preview).ImageKey
GrdStations.Images.Remove(imgKey)
End If
GrdStations.Images.Add(_userProject.Station(row - 1).PreViewImage, imgKey)
GrdStations.Cell(row, ProjectStationGrid.ColNameEnum.Preview).SetImage(imgKey)
End Using
End Sub
Private Sub GrdStations_Load(sender As Object, e As EventArgs) Handles GrdStations.Load
End Sub
#End Region
End Class
End Namespace