290 lines
11 KiB
VB.net
290 lines
11 KiB
VB.net
Imports System.Reflection
|
|
Imports System.Runtime.Remoting.Metadata.W3cXsd2001
|
|
Imports System.Text
|
|
Imports MySql.Data.MySqlClient
|
|
|
|
Public Class mainform
|
|
Private Sub mainform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Me.Text = "DUALSONIC Authentication Register Program Ver 1.1.0"
|
|
End Sub
|
|
|
|
Private PackOk As Boolean = False
|
|
Private StateOk As Boolean = False
|
|
|
|
Private Const COL_COUNT As Byte = 19
|
|
|
|
Private Sub BtnOrderSearch_Click(sender As Object, e As EventArgs) Handles btnOrderSearch.Click
|
|
lbWait.Visible = True
|
|
lbWait.Refresh()
|
|
dgvNormal.Rows.Clear()
|
|
mcDate.Enabled = False
|
|
|
|
Dim genuineProductDtos = GetGenuineDatasByDate(mcDate.SelectionStart)
|
|
|
|
If genuineProductDtos.Count > 0 Then
|
|
For Each genuineProductDto As GenuineProductDto In genuineProductDtos
|
|
Dim RowData(COL_COUNT) As String
|
|
|
|
RowData(0) = genuineProductDto.Seq
|
|
RowData(1) = genuineProductDto.ModelCode
|
|
RowData(2) = genuineProductDto.Model
|
|
RowData(3) = genuineProductDto.InvoiceNumber
|
|
RowData(4) = genuineProductDto.PackingSn
|
|
RowData(5) = genuineProductDto.BodySn
|
|
RowData(6) = genuineProductDto.FaceSn
|
|
RowData(7) = genuineProductDto.EyeSn
|
|
RowData(8) = genuineProductDto.BuyRental
|
|
RowData(9) = genuineProductDto.CountryCode
|
|
RowData(10) = genuineProductDto.ManufactureDate
|
|
RowData(11) = genuineProductDto.BuyDate
|
|
RowData(12) = genuineProductDto.SalesStore
|
|
RowData(13) = genuineProductDto.SalesOrderNo
|
|
RowData(14) = genuineProductDto.OrderName
|
|
RowData(15) = genuineProductDto.RecipientName
|
|
RowData(16) = genuineProductDto.OrderHp
|
|
RowData(17) = genuineProductDto.OrderAddress
|
|
RowData(18) = genuineProductDto.Note
|
|
|
|
dgvNormal.Rows.Add(RowData)
|
|
Next
|
|
MsgBox("총 건수: " & genuineProductDtos.Count)
|
|
Else
|
|
MsgBox("진행한 일반 포장건이 존재하지 않습니다.", vbExclamation)
|
|
|
|
If PackOk = False And StateOk = False Then
|
|
mcDate.Enabled = True
|
|
End If
|
|
End If
|
|
|
|
lbWait.Visible = False
|
|
lbWait.Refresh()
|
|
End Sub
|
|
|
|
Private Function GetGenuineDatasByDate(targetDate As Date) As List(Of GenuineProductDto)
|
|
Dim results = FindSerialsByDate(targetDate)
|
|
|
|
Dim individualSerials = results.Item1
|
|
Dim bundledSerials = results.Item2
|
|
|
|
Dim genuineProductDtoMap As New Dictionary(Of String, GenuineProductDto)
|
|
|
|
For Each serial In individualSerials
|
|
Dim genuineProductDto As New GenuineProductDto(serial)
|
|
genuineProductDtoMap(serial) = genuineProductDto
|
|
Next
|
|
|
|
FillGenuineProductDto(individualSerials, bundledSerials, genuineProductDtoMap)
|
|
|
|
Return genuineProductDtoMap.Values.ToList()
|
|
End Function
|
|
|
|
Private Sub FillGenuineProductDto(individualSerials As List(Of String), bundledSerials As List(Of String), dtoMap As Dictionary(Of String, GenuineProductDto))
|
|
Dim inClauses = BuildInClauses(individualSerials, maxPerQuery:=100)
|
|
Dim likeClauses = BuildLikeClauses(bundledSerials, maxPerClause:=100, field:="Serial_Number")
|
|
|
|
FillFromOrderTblByLike(dtoMap, likeClauses)
|
|
FillFromOrderTblByIn(dtoMap, inClauses)
|
|
FillFromProductTbl(dtoMap, inClauses)
|
|
FillFromProdData(dtoMap, inClauses)
|
|
End Sub
|
|
|
|
Private Function BuildInClauses(serials As IEnumerable(Of String), maxPerQuery As Integer) As List(Of String)
|
|
Dim inClauseList As New List(Of String)()
|
|
Dim temp As New List(Of String)()
|
|
|
|
For Each sn In serials.Distinct()
|
|
temp.Add("'" & sn.Replace("'", "''") & "'")
|
|
If temp.Count >= maxPerQuery Then
|
|
inClauseList.Add("(" & String.Join(",", temp) & ")")
|
|
temp.Clear()
|
|
End If
|
|
Next
|
|
|
|
If temp.Count > 0 Then
|
|
inClauseList.Add("(" & String.Join(",", temp) & ")")
|
|
End If
|
|
|
|
Return inClauseList
|
|
End Function
|
|
|
|
Private Function BuildLikeClauses(serials As List(Of String), maxPerClause As Integer, field As String) As List(Of String)
|
|
Dim likeClauses As New List(Of String)()
|
|
Dim temp As New List(Of String)()
|
|
|
|
For Each sn In serials.Distinct()
|
|
If Not String.IsNullOrWhiteSpace(sn) Then
|
|
Dim cleanedSn = sn.Trim().Replace("'", "''")
|
|
temp.Add(field & " LIKE '%" & cleanedSn & "%'")
|
|
End If
|
|
|
|
If temp.Count >= maxPerClause Then
|
|
likeClauses.Add(String.Join(" OR ", temp))
|
|
temp.Clear()
|
|
End If
|
|
Next
|
|
|
|
If temp.Count > 0 Then
|
|
likeClauses.Add(String.Join(" OR ", temp))
|
|
End If
|
|
|
|
Return likeClauses
|
|
End Function
|
|
|
|
Private Sub BtnCsv_Click(sender As Object, e As EventArgs) Handles btnCsv.Click
|
|
Try
|
|
lbsave.Text = "변환중.."
|
|
lbsave.Visible = True
|
|
lbsave.Refresh()
|
|
|
|
If dgvNormal.Rows.Count = 1 Then
|
|
MsgBox("먼저 데이터를 불러와 주십시오.", vbExclamation)
|
|
Else
|
|
' 파일 경로 설정
|
|
Dim FilePath As String = System.AppDomain.CurrentDomain.BaseDirectory & "\AuthData"
|
|
If Dir(FilePath, vbDirectory) = "" Then
|
|
MkDir(FilePath)
|
|
End If
|
|
|
|
' 파일 이름 설정
|
|
Dim FileName As String = FilePath & "\Auth_N_" & mcDate.SelectionStart & ".csv"
|
|
Dim WriteData As String = String.Empty
|
|
|
|
' CSV의 헤더
|
|
Dim StartData As String = "seq,model_code,model,invoice_number,packing_sn,body_sn,face_sn,eye_sn,buy_rental,country_code,manufacture_date,buy_date,sales_store,sales_order_no,order_name,recipient_name,order_hp,order_address,note"
|
|
WriteData = StartData & vbCrLf
|
|
|
|
' 데이터를 추가
|
|
For i = 0 To dgvNormal.Rows.Count - 2
|
|
' 각 셀의 값을 따옴표로 감싸고, 콤마를 포함하는지 확인
|
|
Dim SaveData As String = String.Join(",", dgvNormal.Rows(i).Cells.Cast(Of DataGridViewCell).Select(Function(cell) EncloseInQuotesIfNeeded(cell.Value.ToString)))
|
|
|
|
' 데이터를 줄바꿈하면서 추가
|
|
WriteData &= SaveData & vbCrLf
|
|
Next
|
|
|
|
' 파일에 쓰기
|
|
System.IO.File.WriteAllText(FileName, WriteData, System.Text.Encoding.UTF8)
|
|
|
|
MsgBox("변환 완료!", vbInformation)
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
MsgBox(".csv 로 변환하는데 오류가 발생하였습니다." & vbCrLf & ex.Message)
|
|
End Try
|
|
|
|
lbsave.Visible = False
|
|
lbsave.Refresh()
|
|
End Sub
|
|
|
|
' 콤마가 있는 필드에 대해 이중 따옴표로 감싸는 함수
|
|
Private Function EncloseInQuotesIfNeeded(value As String) As String
|
|
' 값에 콤마 또는 따옴표가 포함되어 있으면 따옴표로 감싼다
|
|
If value.Contains(",") OrElse value.Contains("""") Then
|
|
' 따옴표를 이스케이프하기 위해 따옴표 두 개로 변경 (CSV 규칙에 맞게)
|
|
value = value.Replace("""", """""")
|
|
Return $"""{value}"""
|
|
Else
|
|
Return value
|
|
End If
|
|
End Function
|
|
|
|
Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
|
|
lbsave.Text = "저장중.."
|
|
lbsave.Visible = True
|
|
lbsave.Refresh()
|
|
|
|
If dgvNormal.Rows.Count = 1 Then
|
|
MsgBox("불러온 데이터가 존재하지 않습니다. 데이터를 먼저 불러와 주십시오.", vbExclamation)
|
|
Else
|
|
Dim UpdateData As String = String.Empty
|
|
|
|
For i = 0 To dgvNormal.Rows.Count - 2
|
|
|
|
Dim RowData As String = String.Empty
|
|
|
|
For n = 1 To dgvNormal.ColumnCount - 1
|
|
|
|
If RowData = String.Empty Then
|
|
|
|
If String.IsNullOrWhiteSpace(dgvNormal.Rows(i).Cells(n).Value.ToString) Then
|
|
RowData = "NULL"
|
|
Else
|
|
dgvNormal.Rows(i).Cells(n).Value = dgvNormal.Rows(i).Cells(n).Value.ToString.Replace("'", "''")
|
|
RowData = "'" & dgvNormal.Rows(i).Cells(n).Value.ToString & "'"
|
|
End If
|
|
|
|
Else
|
|
|
|
If String.IsNullOrWhiteSpace(dgvNormal.Rows(i).Cells(n).Value.ToString) Then
|
|
RowData = RowData & "," & "NULL"
|
|
Else
|
|
dgvNormal.Rows(i).Cells(n).Value = dgvNormal.Rows(i).Cells(n).Value.ToString.Replace("'", "''")
|
|
RowData = RowData & "," & "'" & dgvNormal.Rows(i).Cells(n).Value.ToString & "'"
|
|
End If
|
|
|
|
End If
|
|
|
|
Next
|
|
|
|
If UpdateData = String.Empty Then
|
|
UpdateData = "(" & RowData & ")"
|
|
Else
|
|
UpdateData = UpdateData & "," & vbCrLf & "(" & RowData & ")"
|
|
End If
|
|
|
|
Next
|
|
|
|
Const ColName As String = "(model_code,model,invoice_number,packing_sn,body_sn,face_sn,eye_sn,buy_rental,country_code,manufacture_date,buy_date,sales_store,sales_order_no,order_name,recipient_name,order_hp,order_address,note)"
|
|
|
|
UpdateData = "INSERT INTO fm_genuine" & ColName & " VALUES " & UpdateData
|
|
|
|
If SSHCommand(UpdateData) Then
|
|
MsgBox("저장 완료 !", vbInformation)
|
|
Else
|
|
MsgBox("저장 실패 !", vbCritical)
|
|
End If
|
|
End If
|
|
|
|
lbsave.Visible = False
|
|
lbsave.Refresh()
|
|
End Sub
|
|
|
|
Private Sub BtnLoad_Click(sender As Object, e As EventArgs) Handles btnLoad.Click
|
|
lbWait.Visible = True
|
|
lbWait.Refresh()
|
|
|
|
dgvNormal.Rows.Clear()
|
|
|
|
Dim DBCmd As String = "SELECT seq,model_code,model,invoice_number,packing_sn,body_sn,face_sn,eye_sn,buy_rental,country_code,manufacture_date,buy_date,sales_store,sales_order_no,order_name,recipient_name,order_hp,order_address,note FROM fm_genuine WHERE buy_date = '" & mcDate.SelectionStart & "'"
|
|
|
|
If SSHQueryReader(DBCmd) Then
|
|
Dim RowNum As Short = (sshDataQuery.Length / COL_COUNT) - 1
|
|
Dim ColNum As Byte = COL_COUNT - 1
|
|
Dim SqlCount As Short = 0
|
|
|
|
For i = 0 To RowNum
|
|
|
|
Dim RowData(ColNum) As String
|
|
|
|
For n = 0 To ColNum
|
|
RowData(n) = sshDataQuery(SqlCount)
|
|
|
|
SqlCount += 1
|
|
Next
|
|
|
|
dgvNormal.Rows.Add(RowData)
|
|
|
|
Next
|
|
Else
|
|
MsgBox("등록된 데이터가 존재하지 않습니다.", vbExclamation)
|
|
End If
|
|
|
|
lbWait.Visible = False
|
|
lbWait.Refresh()
|
|
End Sub
|
|
Private Sub BtnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click
|
|
mcDate.Enabled = True
|
|
dgvNormal.Rows.Clear()
|
|
End Sub
|
|
End Class
|