423 lines
18 KiB
VB.net
423 lines
18 KiB
VB.net
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, _userInfo.UserName, 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, _userInfo.UserName, 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, _userInfo.UserName, 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 '当前操作项目站用户索引
|
||
project.UserName = _userInfo.UserName '当前操作项目站用户名称
|
||
|
||
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
|
||
'通过AUTS STUDIO添加机型后,需要调用网站API,更新网站缓存,否则网页不会显示新增的机型信息
|
||
'临时屏蔽,待新网站完成后此步骤重新启用
|
||
'’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 |