|
@@ -3,6 +3,7 @@ package controllers
|
|
|
import (
|
|
import (
|
|
|
"ERP_storage/Nats/NatsServer"
|
|
"ERP_storage/Nats/NatsServer"
|
|
|
"ERP_storage/conf"
|
|
"ERP_storage/conf"
|
|
|
|
|
+ "ERP_storage/dto"
|
|
|
"ERP_storage/logs"
|
|
"ERP_storage/logs"
|
|
|
"ERP_storage/models/Account"
|
|
"ERP_storage/models/Account"
|
|
|
"ERP_storage/models/Basic"
|
|
"ERP_storage/models/Basic"
|
|
@@ -943,67 +944,39 @@ func (c *ValidationController) Operation_Excel() {
|
|
|
c.Ctx.Output.Download(filePath, fileName)
|
|
c.Ctx.Output.Download(filePath, fileName)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 设备转移请求结构体
|
|
|
|
|
-type TransferValidationToolRequest struct {
|
|
|
|
|
- T_sn []string `json:"T_sn"`
|
|
|
|
|
- CurrentUser string `json:"CurrentUser"`
|
|
|
|
|
- TargetUser string `json:"TargetUser"`
|
|
|
|
|
- TransferRemark string `json:"TransferRemark"` // 转移备注
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// 设备转移结果结构体
|
|
|
|
|
-type TransferResult struct {
|
|
|
|
|
- T_sn string `json:"T_sn"`
|
|
|
|
|
- Success bool `json:"success"`
|
|
|
|
|
- Message string `json:"message"`
|
|
|
|
|
- Status string `json:"status"`
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// 检查所有转移结果是否都失败
|
|
// 检查所有转移结果是否都失败
|
|
|
-func allFailed(results []TransferResult) bool {
|
|
|
|
|
|
|
+func allSuccess(results []dto.TransferResult) bool {
|
|
|
for _, r := range results {
|
|
for _, r := range results {
|
|
|
- if r.Success {
|
|
|
|
|
|
|
+ if !r.Success {
|
|
|
return false
|
|
return false
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return true
|
|
return true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 检查是否有任何转移结果成功
|
|
|
|
|
-func anySuccess(results []TransferResult) bool {
|
|
|
|
|
- for _, r := range results {
|
|
|
|
|
- if r.Success {
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return false
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// 设备转移请求
|
|
// 设备转移请求
|
|
|
-func (c *ValidationController) TransferValidationTool() {
|
|
|
|
|
- var request TransferValidationToolRequest
|
|
|
|
|
- err := json.Unmarshal(c.Ctx.Input.RequestBody, &request)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
|
|
|
|
|
|
|
+func (c *ValidationController) Transfer() {
|
|
|
|
|
+
|
|
|
|
|
+ request := dto.TransferValidationToolReq{}
|
|
|
|
|
+
|
|
|
|
|
+ if err := c.ParseForm(&request); err != nil {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "参数错误"}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // 验证参数
|
|
|
|
|
- if len(request.T_sn) <= 0 {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
|
|
|
|
|
|
|
+ if err := json.Unmarshal([]byte(request.T_sn), &request.T_sn_List); err != nil {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "sn 参数错误"}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- if len(request.TargetUser) <= 0 {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "目标借出用户不能为空!", Data: nil}
|
|
|
|
|
|
|
+ if err := Validate(&request); err != nil {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if request.CurrentUser == request.TargetUser {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "目标用户不能与当前用户相同!", Data: nil}
|
|
|
|
|
|
|
+ if c.User.T_name == request.AcceptedUser {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "调用人不能与接收人相同!", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -1014,11 +987,11 @@ func (c *ValidationController) TransferValidationTool() {
|
|
|
valiRecord := validationtool.NewValidationToolRecord(o)
|
|
valiRecord := validationtool.NewValidationToolRecord(o)
|
|
|
BatchNumber := time.Now().Format("2006-01-02 15:04:05")
|
|
BatchNumber := time.Now().Format("2006-01-02 15:04:05")
|
|
|
|
|
|
|
|
- var results []TransferResult
|
|
|
|
|
|
|
+ var results []dto.TransferResult
|
|
|
|
|
|
|
|
// 遍历所有SN进行检查和更新
|
|
// 遍历所有SN进行检查和更新
|
|
|
- for _, sn := range request.T_sn {
|
|
|
|
|
- result := TransferResult{T_sn: sn, Success: false, Status: "failed"}
|
|
|
|
|
|
|
+ for _, sn := range request.T_sn_List {
|
|
|
|
|
+ result := dto.TransferResult{T_sn: sn, Success: false, Status: "failed"}
|
|
|
|
|
|
|
|
validation, err2 := vali.ReadValidationBytSn(sn)
|
|
validation, err2 := vali.ReadValidationBytSn(sn)
|
|
|
if err2 != nil {
|
|
if err2 != nil {
|
|
@@ -1031,15 +1004,15 @@ func (c *ValidationController) TransferValidationTool() {
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 检查设备当前状态是否为已出库
|
|
|
|
|
- if validation.T_state != validationtool.ValidationToolStateStockOut {
|
|
|
|
|
|
|
+ // 检查设备当前状态是否为已出库或已损坏状态
|
|
|
|
|
+ if validation.T_state != validationtool.ValidationToolStateStockOut && validation.T_state != validationtool.ValidationToolStateStockDamage {
|
|
|
result.Message = fmt.Sprintf("当前sn:%v 未出库,无法进行转移", sn)
|
|
result.Message = fmt.Sprintf("当前sn:%v 未出库,无法进行转移", sn)
|
|
|
results = append(results, result)
|
|
results = append(results, result)
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 检查当前借出用户是否匹配
|
|
// 检查当前借出用户是否匹配
|
|
|
- if validation.LendUser != request.CurrentUser {
|
|
|
|
|
|
|
+ if validation.LendUser != c.User.T_name {
|
|
|
result.Message = fmt.Sprintf("当前sn:%v 的借出用户与请求不符", sn)
|
|
result.Message = fmt.Sprintf("当前sn:%v 的借出用户与请求不符", sn)
|
|
|
results = append(results, result)
|
|
results = append(results, result)
|
|
|
continue
|
|
continue
|
|
@@ -1047,34 +1020,27 @@ func (c *ValidationController) TransferValidationTool() {
|
|
|
|
|
|
|
|
// 检查设备是否已经在转移中
|
|
// 检查设备是否已经在转移中
|
|
|
if validation.T_state == validationtool.ValidationToolStateTransferring {
|
|
if validation.T_state == validationtool.ValidationToolStateTransferring {
|
|
|
- result.Message = fmt.Sprintf("当前sn:%v 正在转移中,请等待对方确认或取消当前转移", sn)
|
|
|
|
|
|
|
+ result.Message = fmt.Sprintf("当前sn:%v 正在转移中,请等待对方确认或取消当前转移[%s->%s]", sn, c.User.T_name, request.AcceptedUser)
|
|
|
results = append(results, result)
|
|
results = append(results, result)
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 修改设备状态和备注,记录转移信息
|
|
|
|
|
- originalRemark := validation.T_remark
|
|
|
|
|
- transferInfo := fmt.Sprintf("[转移请求] 从 %s 转移至 %s", request.CurrentUser, request.TargetUser)
|
|
|
|
|
- if len(request.TransferRemark) > 0 {
|
|
|
|
|
- transferInfo += fmt.Sprintf(",备注:%s", request.TransferRemark)
|
|
|
|
|
- }
|
|
|
|
|
- if len(originalRemark) > 0 {
|
|
|
|
|
- validation.T_remark = originalRemark + "\n" + transferInfo
|
|
|
|
|
- } else {
|
|
|
|
|
- validation.T_remark = transferInfo
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
// 设置转移中的状态
|
|
// 设置转移中的状态
|
|
|
validation.T_state = validationtool.ValidationToolStateTransferring
|
|
validation.T_state = validationtool.ValidationToolStateTransferring
|
|
|
-
|
|
|
|
|
- cols := []string{"T_remark", "T_state"}
|
|
|
|
|
- err = vali.UpdateValidationTool(validation, cols...)
|
|
|
|
|
|
|
+ validation.T_remark = request.Remark
|
|
|
|
|
+ cols := []string{"T_remark", "T_state", "T_remark"}
|
|
|
|
|
+ err := vali.UpdateValidationTool(validation, cols...)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
result.Message = fmt.Sprintf("更新设备sn:%v 状态失败", sn)
|
|
result.Message = fmt.Sprintf("更新设备sn:%v 状态失败", sn)
|
|
|
results = append(results, result)
|
|
results = append(results, result)
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ var separator string
|
|
|
|
|
+ if len(request.Remark) > 0 {
|
|
|
|
|
+ separator = " "
|
|
|
|
|
+ }
|
|
|
|
|
+ validation.T_remark = request.Remark + fmt.Sprintf("%s正在转移[%s->%s]", separator, c.User.T_name, request.AcceptedUser)
|
|
|
_, err = valiRecord.ADD(validation, BatchNumber)
|
|
_, err = valiRecord.ADD(validation, BatchNumber)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
result.Message = fmt.Sprintf("保存sn:%v 历史记录失败", sn)
|
|
result.Message = fmt.Sprintf("保存sn:%v 历史记录失败", sn)
|
|
@@ -1082,92 +1048,69 @@ func (c *ValidationController) TransferValidationTool() {
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
result.Success = true
|
|
result.Success = true
|
|
|
- result.Status = "pending"
|
|
|
|
|
|
|
+ result.Status = validationtool.TransferPending
|
|
|
result.Message = fmt.Sprintf("sn:%v 转移请求已发送", sn)
|
|
result.Message = fmt.Sprintf("sn:%v 转移请求已发送", sn)
|
|
|
results = append(results, result)
|
|
results = append(results, result)
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if anySuccess(results) {
|
|
|
|
|
- // 创建转移记录到新表
|
|
|
|
|
- snListJSON, err := json.Marshal(request.T_sn)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- o.Rollback()
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn列表序列化失败!", Data: nil}
|
|
|
|
|
- c.ServeJSON()
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- transferRecord := validationtool.ValidationToolTransfer{
|
|
|
|
|
- T_sn: string(snListJSON),
|
|
|
|
|
- FromUser: request.CurrentUser,
|
|
|
|
|
- ToUser: request.TargetUser,
|
|
|
|
|
- Status: "pending",
|
|
|
|
|
- Remark: request.TransferRemark,
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 任意一个不成功都回滚
|
|
|
|
|
+ if !allSuccess(results) {
|
|
|
|
|
+ o.Rollback() // 如果没有一个成功,则回滚所有操作
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "转移失败!", Data: results}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- transferTool := validationtool.NewValidationToolTransfer(o)
|
|
|
|
|
- _, err = transferTool.Add(&transferRecord)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- o.Rollback()
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "创建转移记录失败!", Data: nil}
|
|
|
|
|
- c.ServeJSON()
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ transferRecord := validationtool.ValidationToolTransfer{
|
|
|
|
|
+ TransferSn: request.T_sn,
|
|
|
|
|
+ TransferUser: c.User.T_name,
|
|
|
|
|
+ TransferUserUid: c.User.T_uuid,
|
|
|
|
|
+ AcceptedUser: request.AcceptedUser,
|
|
|
|
|
+ AcceptedUserUid: request.AcceptedUserUid,
|
|
|
|
|
+ Status: validationtool.TransferPending,
|
|
|
|
|
+ TransferRemark: request.Remark,
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- err = o.Commit() // 提交事务
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- o.Rollback() // 回滚事务
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
|
|
|
|
|
- c.ServeJSON()
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ transferTool := validationtool.NewValidationToolTransfer(o)
|
|
|
|
|
+ _, err := transferTool.Add(&transferRecord)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "创建转移记录失败!", Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "转移请求", request.T_sn)
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "批量转移请求处理完成", Data: results}
|
|
|
|
|
|
|
+ err = o.Commit() // 提交事务
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ o.Rollback() // 回滚事务
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- o.Rollback() // 如果没有一个成功,则回滚所有操作
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "所有SN转移失败", Data: results}
|
|
|
|
|
|
|
+ NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "发起转移", request.T_sn)
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: "发起转移成功", Data: results}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 确认接收设备请求结构体
|
|
|
|
|
-type ConfirmTransferValidationTool struct {
|
|
|
|
|
- T_sn []string `json:"T_sn"`
|
|
|
|
|
- ConfirmUser string `json:"ConfirmUser"` // 确认接收的用户
|
|
|
|
|
- // 添加设备信息字段用于比对
|
|
|
|
|
- DeviceInfo map[string]interface{} `json:"DeviceInfo"` // 设备信息用于比对
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// 设备一致性比对结果结构体
|
|
|
|
|
-type DeviceComparisonResult struct {
|
|
|
|
|
- Field string `json:"field"`
|
|
|
|
|
- Expected string `json:"expected"`
|
|
|
|
|
- Actual string `json:"actual"`
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// 确认接收设备
|
|
// 确认接收设备
|
|
|
-func (c *ValidationController) ConfirmTransferValidationTool() {
|
|
|
|
|
- var request ConfirmTransferValidationTool
|
|
|
|
|
- err := json.Unmarshal(c.Ctx.Input.RequestBody, &request)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
|
|
|
|
|
- c.ServeJSON()
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
|
|
+func (c *ValidationController) ConfirmAccepted() {
|
|
|
|
|
+ var request dto.ConfirmTransferValidationToolReq
|
|
|
|
|
|
|
|
- // 验证参数
|
|
|
|
|
- if len(request.T_sn) <= 0 {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
|
|
|
|
|
|
|
+ if err := c.ParseForm(&request); err != nil {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "参数错误"}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- if len(request.ConfirmUser) <= 0 {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "确认用户不能为空!", Data: nil}
|
|
|
|
|
|
|
+ //if err := json.Unmarshal([]byte(request.T_sn), &request.T_sn_List); err != nil {
|
|
|
|
|
+ // c.Data["json"] = lib.JSONS{Code: 202, Msg: "sn 参数错误"}
|
|
|
|
|
+ // c.ServeJSON()
|
|
|
|
|
+ // return
|
|
|
|
|
+ //}
|
|
|
|
|
+ if err := Validate(&request); err != nil {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -1177,113 +1120,195 @@ func (c *ValidationController) ConfirmTransferValidationTool() {
|
|
|
vali := validationtool.NewValidationTool(o)
|
|
vali := validationtool.NewValidationTool(o)
|
|
|
valiRecord := validationtool.NewValidationToolRecord(o)
|
|
valiRecord := validationtool.NewValidationToolRecord(o)
|
|
|
BatchNumber := time.Now().Format("2006-01-02 15:04:05")
|
|
BatchNumber := time.Now().Format("2006-01-02 15:04:05")
|
|
|
|
|
+ transfer := validationtool.NewValidationToolTransfer(o)
|
|
|
|
|
+
|
|
|
|
|
+ // 查询待处理的转移记录
|
|
|
|
|
+ transferRecord, err := transfer.GetPendingTransferById(request.TransferId)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 没有待确认的转移请求", request.T_sn), Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- // 查询设备信息
|
|
|
|
|
- validation, err2 := vali.ReadValidationBytSn(request.T_sn)
|
|
|
|
|
- if err2 != nil {
|
|
|
|
|
|
|
+ // 检查确认用户是否为目标用户
|
|
|
|
|
+ if transferRecord.AcceptedUser != c.User.T_name {
|
|
|
o.Rollback()
|
|
o.Rollback()
|
|
|
- if err2.Error() == orm.ErrNoRows.Error() {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 未入库", request.T_sn), Data: nil}
|
|
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "您不是当前调用单的目标接收用户", Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ transferRecord_R := validationtool.ValidationToolTransferTo_R(transferRecord)
|
|
|
|
|
+ // 遍历所有SN进行检查和更新
|
|
|
|
|
+ for _, sn := range transferRecord_R.TransferSn {
|
|
|
|
|
+
|
|
|
|
|
+ // 查询设备信息
|
|
|
|
|
+ validation, err2 := vali.ReadValidationBytSn(sn)
|
|
|
|
|
+ if err2 != nil {
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ if err2.Error() == orm.ErrNoRows.Error() {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 未入库", sn), Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ } else {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("查询sn:%v 失败", sn), Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查设备是否在转移中
|
|
|
|
|
+ if validation.T_state != validationtool.ValidationToolStateTransferring {
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 不在转移状态", sn), Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
- } else {
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("查询sn:%v 失败", request.T_sn), Data: nil}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 更新借出用户
|
|
|
|
|
+ validation.LendUser = c.User.T_name
|
|
|
|
|
+ // 将状态改回已出库
|
|
|
|
|
+ validation.T_state = validationtool.ValidationToolStateStockOut
|
|
|
|
|
+ validation.T_project = request.Project
|
|
|
|
|
+ validation.T_remark = request.Remark
|
|
|
|
|
+
|
|
|
|
|
+ cols := []string{"LendUser", "T_project", "T_state", "T_remark"}
|
|
|
|
|
+ err = vali.UpdateValidationTool(validation, cols...)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var separator string
|
|
|
|
|
+ if len(request.Remark) > 0 {
|
|
|
|
|
+ separator = " "
|
|
|
|
|
+ }
|
|
|
|
|
+ validation.T_remark = request.Remark + fmt.Sprintf("%s确认已接收[%s->%s]", separator, transferRecord.TransferUser, c.User.T_name)
|
|
|
|
|
+ validation.T_state = validationtool.ValidationToolStateAccepted
|
|
|
|
|
+ _, err = valiRecord.ADD(validation, BatchNumber)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ o.Rollback() // 回滚事务
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 检查设备是否在转移中
|
|
|
|
|
- if validation.T_state != validationtool.ValidationToolStateTransferring {
|
|
|
|
|
|
|
+ transferRecord.Status = validationtool.TransferCompleted
|
|
|
|
|
+ transferRecord.AcceptedNumber = request.Number
|
|
|
|
|
+ transferRecord.AcceptedRemark = request.Remark
|
|
|
|
|
+ transferRecord.AcceptedTime = time.Now()
|
|
|
|
|
+ transferTool := validationtool.NewValidationToolTransfer(o)
|
|
|
|
|
+ err = transferTool.Update(transferRecord, "Status", "AcceptedRemark", "AcceptedNumber", "AcceptedTime")
|
|
|
|
|
+ if err != nil {
|
|
|
o.Rollback()
|
|
o.Rollback()
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 不在转移状态", request.T_sn), Data: nil}
|
|
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "更新转移记录失败!", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 查询待处理的转移记录
|
|
|
|
|
|
|
+ err = o.Commit() // 提交事务
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ o.Rollback() // 回滚事务
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "确认转移", request.TransferId)
|
|
|
|
|
+
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: "设备转移确认成功!", Data: request.TransferId}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 取消调用
|
|
|
|
|
+func (c *ValidationController) CancelTransfer() {
|
|
|
|
|
+ TransferId, _ := c.GetInt("TransferId")
|
|
|
|
|
+
|
|
|
|
|
+ o := orm.NewOrm()
|
|
|
|
|
+ o.Begin()
|
|
|
|
|
+ vali := validationtool.NewValidationTool(o)
|
|
|
|
|
+ valiRecord := validationtool.NewValidationToolRecord(o)
|
|
|
|
|
+ BatchNumber := time.Now().Format("2006-01-02 15:04:05")
|
|
|
transfer := validationtool.NewValidationToolTransfer(o)
|
|
transfer := validationtool.NewValidationToolTransfer(o)
|
|
|
- transferRecord, err := transfer.GetPendingTransferBySn(request.T_sn)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 查询待处理的转移记录
|
|
|
|
|
+ transferRecord, err := transfer.GetPendingTransferById(TransferId)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
o.Rollback()
|
|
o.Rollback()
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 没有待确认的转移请求", request.T_sn), Data: nil}
|
|
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "查询调用记录失败", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 检查确认用户是否为目标用户
|
|
// 检查确认用户是否为目标用户
|
|
|
- if transferRecord.ToUser != request.ConfirmUser {
|
|
|
|
|
|
|
+ if transferRecord.TransferUser != c.User.T_name {
|
|
|
o.Rollback()
|
|
o.Rollback()
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("您不是当前sn:%v 的目标接收用户", request.T_sn), Data: nil}
|
|
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "您不是当前转移单的发起用户", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+ transferRecord_R := validationtool.ValidationToolTransferTo_R(transferRecord)
|
|
|
|
|
+ // 遍历所有SN进行检查和更新
|
|
|
|
|
+ for _, sn := range transferRecord_R.TransferSn {
|
|
|
|
|
|
|
|
- // 设备一致性比对
|
|
|
|
|
- var comparisonResults []DeviceComparisonResult
|
|
|
|
|
-
|
|
|
|
|
- // 如果提供了设备信息进行比对
|
|
|
|
|
- if request.DeviceInfo != nil {
|
|
|
|
|
- // 比对T_iccid
|
|
|
|
|
- if iccid, ok := request.DeviceInfo["T_iccid"].(string); ok && iccid != validation.T_iccid {
|
|
|
|
|
- comparisonResults = append(comparisonResults, DeviceComparisonResult{
|
|
|
|
|
- Field: "T_iccid",
|
|
|
|
|
- Expected: validation.T_iccid,
|
|
|
|
|
- Actual: iccid,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ // 查询设备信息
|
|
|
|
|
+ validation, err2 := vali.ReadValidationBytSn(sn)
|
|
|
|
|
+ if err2 != nil {
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ if err2.Error() == orm.ErrNoRows.Error() {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 未入库", sn), Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ } else {
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("查询sn:%v 失败", sn), Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 比对T_imei
|
|
|
|
|
- if imei, ok := request.DeviceInfo["T_imei"].(string); ok && imei != validation.T_imei {
|
|
|
|
|
- comparisonResults = append(comparisonResults, DeviceComparisonResult{
|
|
|
|
|
- Field: "T_imei",
|
|
|
|
|
- Expected: validation.T_imei,
|
|
|
|
|
- Actual: imei,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ // 检查设备是否在转移中
|
|
|
|
|
+ if validation.T_state != validationtool.ValidationToolStateTransferring {
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 不在转移状态", sn), Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 比对T_class
|
|
|
|
|
- if class, ok := request.DeviceInfo["T_class"]; ok {
|
|
|
|
|
- classStr := fmt.Sprintf("%v", class)
|
|
|
|
|
- if classStr != fmt.Sprintf("%v", validation.T_class) {
|
|
|
|
|
- comparisonResults = append(comparisonResults, DeviceComparisonResult{
|
|
|
|
|
- Field: "T_class",
|
|
|
|
|
- Expected: fmt.Sprintf("%v", validation.T_class),
|
|
|
|
|
- Actual: classStr,
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 更新借出用户
|
|
|
|
|
+ validation.LendUser = c.User.T_name
|
|
|
|
|
+ // 将状态改回已出库
|
|
|
|
|
+ validation.T_state = validationtool.ValidationToolStateStockOut
|
|
|
|
|
|
|
|
- // 如果比对结果不一致,返回不一致信息
|
|
|
|
|
- if len(comparisonResults) > 0 {
|
|
|
|
|
|
|
+ cols := []string{"LendUser", "T_state"}
|
|
|
|
|
+ err = vali.UpdateValidationTool(validation, cols...)
|
|
|
|
|
+ if err != nil {
|
|
|
o.Rollback()
|
|
o.Rollback()
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "设备信息比对不一致", Data: comparisonResults}
|
|
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- // 更新借出用户
|
|
|
|
|
- validation.LendUser = request.ConfirmUser
|
|
|
|
|
- // 将状态改回已出库
|
|
|
|
|
- validation.T_state = validationtool.ValidationToolStateStockOut
|
|
|
|
|
- // 在备注中记录转移确认信息
|
|
|
|
|
- confirmInfo := fmt.Sprintf("[转移完成] %s 确认接收", request.ConfirmUser)
|
|
|
|
|
- validation.T_remark += "\n" + confirmInfo
|
|
|
|
|
-
|
|
|
|
|
- cols := []string{"LendUser", "T_remark", "T_state"}
|
|
|
|
|
- err = vali.UpdateValidationTool(validation, cols...)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- o.Rollback()
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
|
|
|
|
|
- c.ServeJSON()
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ validation.T_remark = "取消转移"
|
|
|
|
|
+ validation.T_state = validationtool.ValidationToolStateCancelTransfer
|
|
|
|
|
+ _, err = valiRecord.ADD(validation, BatchNumber)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ o.Rollback() // 回滚事务
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- _, err = valiRecord.ADD(validation, BatchNumber)
|
|
|
|
|
|
|
+ transferRecord.Status = validationtool.TransferCanceled
|
|
|
|
|
+ transferTool := validationtool.NewValidationToolTransfer(o)
|
|
|
|
|
+ err = transferTool.Update(transferRecord, "Status")
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- o.Rollback() // 回滚事务
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
|
|
|
|
|
|
|
+ o.Rollback()
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 1201, Msg: "更新转移记录失败!", Data: nil}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -1296,19 +1321,65 @@ func (c *ValidationController) ConfirmTransferValidationTool() {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "确认转移", []string{request.T_sn})
|
|
|
|
|
|
|
+ NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "取消转移", TransferId)
|
|
|
|
|
+
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: "设备取消转移成功!", Data: TransferId}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- // 返回转移结果
|
|
|
|
|
- result := TransferResult{
|
|
|
|
|
- T_sn: request.T_sn,
|
|
|
|
|
- Success: true,
|
|
|
|
|
- Message: "设备转移确认成功!",
|
|
|
|
|
- Status: "completed",
|
|
|
|
|
|
|
+// GetTransferRecords 获取转移人的转移记录
|
|
|
|
|
+// @router /transfer/records [get]
|
|
|
|
|
+func (c *ValidationController) TransferRecords_List() {
|
|
|
|
|
+ // 分页参数 初始化
|
|
|
|
|
+ page, _ := c.GetInt("page")
|
|
|
|
|
+ if page < 1 {
|
|
|
|
|
+ page = 1
|
|
|
}
|
|
}
|
|
|
|
|
+ page_z, _ := c.GetInt("page_z")
|
|
|
|
|
+ if page_z < 1 {
|
|
|
|
|
+ page_z = conf.Page_size
|
|
|
|
|
+ }
|
|
|
|
|
+ status := c.GetString("status")
|
|
|
|
|
+ // 查询转移记录
|
|
|
|
|
+ o := orm.NewOrm()
|
|
|
|
|
+ vali := validationtool.NewValidationToolTransfer(o)
|
|
|
|
|
+ R_List, R_cnt := vali.GetTransferRecordsByUser(c.User.T_uuid, status, page, page_z)
|
|
|
|
|
+ var r_jsons lib.R_JSONS
|
|
|
|
|
+ r_jsons.Num = R_cnt
|
|
|
|
|
+ r_jsons.Data = R_List
|
|
|
|
|
+ r_jsons.Page = page
|
|
|
|
|
+ r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
|
|
|
|
|
|
|
|
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "设备转移确认成功!", Data: result}
|
|
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
|
|
|
c.ServeJSON()
|
|
c.ServeJSON()
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// ... existing code ...
|
|
|
|
|
|
|
+// GetPendingRecords 获取接收人的待接收记录
|
|
|
|
|
+// @router /transfer/pending [get]
|
|
|
|
|
+func (c *ValidationController) AcceptedRecords_List() {
|
|
|
|
|
+ // 分页参数 初始化
|
|
|
|
|
+ page, _ := c.GetInt("page")
|
|
|
|
|
+ if page < 1 {
|
|
|
|
|
+ page = 1
|
|
|
|
|
+ }
|
|
|
|
|
+ page_z, _ := c.GetInt("page_z")
|
|
|
|
|
+ if page_z < 1 {
|
|
|
|
|
+ page_z = conf.Page_size
|
|
|
|
|
+ }
|
|
|
|
|
+ status := c.GetString("status")
|
|
|
|
|
+ // 查询待接收记录
|
|
|
|
|
+ o := orm.NewOrm()
|
|
|
|
|
+ vali := validationtool.NewValidationToolTransfer(o)
|
|
|
|
|
+ R_List, R_cnt := vali.GetAcceptedRecordsByUser(c.User.T_uuid, status, page, page_z)
|
|
|
|
|
+ var r_jsons lib.R_JSONS
|
|
|
|
|
+ r_jsons.Num = R_cnt
|
|
|
|
|
+ r_jsons.Data = R_List
|
|
|
|
|
+ r_jsons.Page = page
|
|
|
|
|
+ r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
|
|
|
|
|
+
|
|
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
|
|
|
|
|
+ c.ServeJSON()
|
|
|
|
|
+ return
|
|
|
|
|
+}
|