|
|
@@ -7,6 +7,7 @@ import (
|
|
|
"ColdVerify_server/lib/wx"
|
|
|
"ColdVerify_server/logs"
|
|
|
"ColdVerify_server/models/Account"
|
|
|
+ "ColdVerify_server/models/Certificate"
|
|
|
"ColdVerify_server/models/Device"
|
|
|
"ColdVerify_server/models/InfoCollection"
|
|
|
"ColdVerify_server/models/System"
|
|
|
@@ -36,6 +37,343 @@ type TaskController struct {
|
|
|
beego.Controller
|
|
|
}
|
|
|
|
|
|
+// 导入Excel创建任务并写入模版数据
|
|
|
+func (c *TaskController) Import_Tasks() {
|
|
|
+ file, _, err := c.GetFile("file")
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 203, Msg: "读取上传文件失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+
|
|
|
+ xlsx, err := excelize.OpenReader(file)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 203, Msg: "Excel 文件解析失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ _ = xlsx.Close()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sheetName := c.GetString("sheet")
|
|
|
+ if len(sheetName) == 0 {
|
|
|
+ sheets := xlsx.GetSheetList()
|
|
|
+ if len(sheets) == 0 {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 203, Msg: "Excel 文件为空!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sheetName = sheets[0]
|
|
|
+ }
|
|
|
+
|
|
|
+ rows, err := xlsx.GetRows(sheetName)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 203, Msg: "读取 Excel 内容失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(rows) < 2 {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 203, Msg: "Excel 中缺少数据行!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ headers := rows[0]
|
|
|
+ successIDs := make([]string, 0)
|
|
|
+ skippedRows := make([]int, 0)
|
|
|
+ failedRows := make([]string, 0)
|
|
|
+
|
|
|
+ for idx := 1; idx < len(rows); idx++ {
|
|
|
+ rowCells := rows[idx]
|
|
|
+ rowData := make(map[string]string, len(headers))
|
|
|
+ nonEmpty := false
|
|
|
+ for colIdx, header := range headers {
|
|
|
+ header = strings.TrimSpace(header)
|
|
|
+ if len(header) == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ value := ""
|
|
|
+ if colIdx < len(rowCells) {
|
|
|
+ value = strings.TrimSpace(rowCells[colIdx])
|
|
|
+ }
|
|
|
+ if len(value) > 0 {
|
|
|
+ nonEmpty = true
|
|
|
+ }
|
|
|
+ rowData[header] = value
|
|
|
+ }
|
|
|
+ if !nonEmpty {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ companyName := strings.TrimSpace(rowData["公司名称"])
|
|
|
+ taskName := strings.TrimSpace(rowData["任务名称"])
|
|
|
+ if len(companyName) == 0 || len(taskName) == 0 {
|
|
|
+ skippedRows = append(skippedRows, idx+1)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if rowData["布点图片"] == "" {
|
|
|
+ skippedRows = append(skippedRows, idx+1)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ taskID, err := c.importTaskRow(rowData)
|
|
|
+ if err != nil {
|
|
|
+ failedRows = append(failedRows, fmt.Sprintf("第%d行: %v", idx+1, err))
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ successIDs = append(successIDs, taskID)
|
|
|
+ }
|
|
|
+
|
|
|
+ msg := fmt.Sprintf("导入完成, 成功 %d 条, 跳过 %d 条, 失败 %d 条", len(successIDs), len(skippedRows), len(failedRows))
|
|
|
+ respData := map[string]interface{}{
|
|
|
+ "success_ids": successIDs,
|
|
|
+ "skipped_rows": skippedRows,
|
|
|
+ }
|
|
|
+ if len(failedRows) > 0 {
|
|
|
+ respData["failed_rows"] = failedRows
|
|
|
+ }
|
|
|
+
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: msg, Data: respData}
|
|
|
+ c.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+func (c *TaskController) importTaskRow(row map[string]string) (string, error) {
|
|
|
+ templateName := strings.TrimSpace(row["模版名称"])
|
|
|
+ lastOpenBracket := strings.LastIndex(templateName, "[")
|
|
|
+ lastCloseBracket := strings.LastIndex(templateName, "]")
|
|
|
+ if lastOpenBracket == -1 || lastCloseBracket == -1 || lastOpenBracket >= lastCloseBracket {
|
|
|
+ return "", fmt.Errorf("模版名称中未找到模版ID")
|
|
|
+ }
|
|
|
+ templateID := templateName[lastOpenBracket+1 : lastCloseBracket]
|
|
|
+ if len(templateID) == 0 {
|
|
|
+ return "", fmt.Errorf("模版ID为空")
|
|
|
+ }
|
|
|
+
|
|
|
+ vt, ok := VerifyTemplate.Read_VerifyTemplate(templateID)
|
|
|
+ if !ok {
|
|
|
+ return "", fmt.Errorf("模版不存在: %s", templateID)
|
|
|
+ }
|
|
|
+
|
|
|
+ taskUID := strings.TrimSpace(row["唯一标识"])
|
|
|
+ if len(taskUID) == 0 {
|
|
|
+ return "", fmt.Errorf("唯一标识缺失")
|
|
|
+ }
|
|
|
+ existingTask, taskExists := Task.Read_Task_ByUid(taskUID)
|
|
|
+
|
|
|
+ companyName := strings.TrimSpace(row["公司名称"])
|
|
|
+ if len(companyName) == 0 {
|
|
|
+ return "", fmt.Errorf("公司名称缺失")
|
|
|
+ }
|
|
|
+
|
|
|
+ cachedUser, found, err := Account.GetCompanyFromCache(companyName)
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("公司数据读取失败: %w", err)
|
|
|
+ }
|
|
|
+ var user Account.User
|
|
|
+ if !found {
|
|
|
+ newUser := Account.User{
|
|
|
+ T_name: companyName,
|
|
|
+ T_pass: Account.DefaultCompanyPasswordHash,
|
|
|
+ T_passstr: Account.DefaultCompanyPasswordPlain,
|
|
|
+ T_Show: 1,
|
|
|
+ T_State: 1,
|
|
|
+ T_pid: 0,
|
|
|
+ }
|
|
|
+ newID, ok := Account.Add_User(newUser)
|
|
|
+ if !ok {
|
|
|
+ return "", fmt.Errorf("自动创建公司失败")
|
|
|
+ }
|
|
|
+ if err := Account.UpdateUserPath(int(newID)); err != nil {
|
|
|
+ logs.Error("更新新公司路径失败:", err)
|
|
|
+ }
|
|
|
+ createdUser, is := Account.Read_User_ById(int(newID))
|
|
|
+ if !is {
|
|
|
+ return "", fmt.Errorf("获取新公司信息失败")
|
|
|
+ }
|
|
|
+ user = createdUser
|
|
|
+ Account.UpsertCompanyCache(user)
|
|
|
+ } else {
|
|
|
+ user = cachedUser
|
|
|
+ }
|
|
|
+
|
|
|
+ resolveAdminUUID := func(fieldName, fallback string, strict bool) (string, error) {
|
|
|
+ value, ok := row[fieldName]
|
|
|
+ if !ok || len(strings.TrimSpace(value)) == 0 {
|
|
|
+ return fallback, nil
|
|
|
+ }
|
|
|
+ admin, err := Account.EnsureAdminByName(strings.TrimSpace(value), "")
|
|
|
+ if err != nil {
|
|
|
+ if strict {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+ logs.Error(fieldName+" 负责人处理失败:", err)
|
|
|
+ return fallback, nil
|
|
|
+ }
|
|
|
+ return admin.T_uuid, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ taskName := strings.TrimSpace(row["任务名称"])
|
|
|
+ if len(taskName) == 0 {
|
|
|
+ return "", fmt.Errorf("任务名称缺失")
|
|
|
+ }
|
|
|
+ snValue := strings.TrimSpace(row["SN"])
|
|
|
+
|
|
|
+ classPath := ""
|
|
|
+ if vt.T_class > 0 {
|
|
|
+ if cls, err := VerifyTemplate.Read_VerifyTemplateClass_ById(vt.T_class); err == nil {
|
|
|
+ p := cls.T_path
|
|
|
+ p = strings.Trim(p, "/")
|
|
|
+ p = strings.TrimPrefix(p, "0/")
|
|
|
+ classPath = p
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ schemeFallback := ""
|
|
|
+ collectionFallback := ""
|
|
|
+ reportingFallback := ""
|
|
|
+ deliveryFallback := ""
|
|
|
+ projectFallback := ""
|
|
|
+ categoryFallback := ""
|
|
|
+ deviceTypeFallback := ""
|
|
|
+ verifyTypeFallback := ""
|
|
|
+ if taskExists {
|
|
|
+ schemeFallback = existingTask.T_scheme
|
|
|
+ collectionFallback = existingTask.T_collection
|
|
|
+ reportingFallback = existingTask.T_reporting
|
|
|
+ deliveryFallback = existingTask.T_delivery
|
|
|
+ projectFallback = existingTask.T_project
|
|
|
+ categoryFallback = existingTask.T_category
|
|
|
+ deviceTypeFallback = existingTask.T_device_type
|
|
|
+ verifyTypeFallback = existingTask.T_verify_type
|
|
|
+ }
|
|
|
+
|
|
|
+ schemeUUID, err := resolveAdminUUID("实施方案", schemeFallback, false)
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("实施方案负责人创建失败: %w", err)
|
|
|
+ }
|
|
|
+ collectionUUID, err := resolveAdminUUID("数据采集", collectionFallback, true)
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("数据采集负责人创建失败: %w", err)
|
|
|
+ }
|
|
|
+ reportingUUID, err := resolveAdminUUID("报告编辑", reportingFallback, true)
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("报告编辑负责人创建失败: %w", err)
|
|
|
+ }
|
|
|
+ deliveryUUID, err := resolveAdminUUID("交付审核", deliveryFallback, false)
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("交付审核负责人创建失败: %w", err)
|
|
|
+ }
|
|
|
+ projectUUID, _ := resolveAdminUUID("项目负责人", projectFallback, false)
|
|
|
+
|
|
|
+ categoryValue := strings.TrimSpace(row["类别"])
|
|
|
+ if len(categoryValue) == 0 {
|
|
|
+ categoryValue = categoryFallback
|
|
|
+ }
|
|
|
+
|
|
|
+ deviceTypeValue := strings.TrimSpace(row["设备类型"])
|
|
|
+ if len(deviceTypeValue) == 0 {
|
|
|
+ deviceTypeValue = deviceTypeFallback
|
|
|
+ } else {
|
|
|
+ if mapped, ok := Task.DeviceTypeMap[deviceTypeValue]; ok {
|
|
|
+ deviceTypeValue = mapped
|
|
|
+ } else {
|
|
|
+ deviceTypeValue = deviceTypeValue
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ verifyTypeValue := strings.TrimSpace(row["验证类型"])
|
|
|
+ if len(verifyTypeValue) == 0 {
|
|
|
+ verifyTypeValue = verifyTypeFallback
|
|
|
+ }
|
|
|
+
|
|
|
+ taskRecord := Task.Task{
|
|
|
+ T_Distributor_id: user.T_Distributor_id,
|
|
|
+ T_uuid: user.T_uuid,
|
|
|
+ T_name: taskName,
|
|
|
+ T_VerifyTemplate_id: templateID,
|
|
|
+ T_VerifyTemplate_class: classPath,
|
|
|
+ T_sn: snValue,
|
|
|
+ T_uid: taskUID,
|
|
|
+ T_scheme: schemeUUID,
|
|
|
+ T_collection: collectionUUID,
|
|
|
+ T_reporting: reportingUUID,
|
|
|
+ T_delivery: deliveryUUID,
|
|
|
+ T_project: projectUUID,
|
|
|
+ T_category: categoryValue,
|
|
|
+ T_device_type: deviceTypeValue,
|
|
|
+ T_verify_type: verifyTypeValue,
|
|
|
+ }
|
|
|
+
|
|
|
+ var taskID string
|
|
|
+ if taskExists {
|
|
|
+ taskRecord.Id = existingTask.Id
|
|
|
+ taskRecord.T_task_id = existingTask.T_task_id
|
|
|
+ taskRecord.T_State = existingTask.T_State
|
|
|
+ if ok := Task.Update_Task(taskRecord, "T_Distributor_id", "T_uuid", "T_name", "T_VerifyTemplate_id", "T_VerifyTemplate_class", "T_sn", "T_uid", "T_scheme", "T_collection", "T_reporting", "T_delivery", "T_project", "T_category", "T_device_type", "T_verify_type"); !ok {
|
|
|
+ return "", fmt.Errorf("更新任务失败")
|
|
|
+ }
|
|
|
+ taskID = existingTask.T_task_id
|
|
|
+ } else {
|
|
|
+ dc := Device.DeviceClass{
|
|
|
+ T_uuid: user.T_uuid,
|
|
|
+ T_State: 1,
|
|
|
+ }
|
|
|
+ classID, ok := Device.Add_DeviceClass(dc)
|
|
|
+ if !ok {
|
|
|
+ return "", fmt.Errorf("创建分类失败")
|
|
|
+ }
|
|
|
+ taskRecord.T_class = int(classID)
|
|
|
+ taskRecord.T_State = 1
|
|
|
+ taskRecord.T_deadline = time.Now().AddDate(0, 2, 0).Format("2006-01-02")
|
|
|
+ if len(strings.TrimSpace(taskRecord.T_device_type)) > 0 {
|
|
|
+ number, err := Task.GenerateNextT_report_number(taskRecord.T_device_type)
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("生成报告编号失败: %w", err)
|
|
|
+ }
|
|
|
+ taskRecord.T_report_number = number
|
|
|
+ }
|
|
|
+
|
|
|
+ if newID, ok := Task.Add_Task(taskRecord); !ok {
|
|
|
+ return "", fmt.Errorf("创建任务失败")
|
|
|
+ } else {
|
|
|
+ taskID = newID
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ mapList, _ := VerifyTemplate.Read_VerifyTemplateMap_List(templateID, 0, 0)
|
|
|
+ labelMap := make(map[string]VerifyTemplate.VerifyTemplateMap_R, len(mapList))
|
|
|
+ for _, m := range mapList {
|
|
|
+ labelMap[m.T_name] = m
|
|
|
+ }
|
|
|
+
|
|
|
+ dataList := make([]VerifyTemplate.VerifyTemplateMapData, 0, len(row))
|
|
|
+ for key, val := range row {
|
|
|
+ if vtm, exists := labelMap[key]; exists {
|
|
|
+ dataList = append(dataList, VerifyTemplate.VerifyTemplateMapData{
|
|
|
+ T_source: vtm.T_source,
|
|
|
+ T_task_id: taskID,
|
|
|
+ T_VerifyTemplate_id: templateID,
|
|
|
+ T_VerifyTemplateMap_id: vtm.T_id,
|
|
|
+ T_value: val,
|
|
|
+ T_Required: vtm.T_Required,
|
|
|
+ T_Construction: vtm.T_Construction,
|
|
|
+ T_flow_sort: vtm.T_flow_sort,
|
|
|
+ T_max_time: vtm.T_max_time,
|
|
|
+ T_min_time: vtm.T_min_time,
|
|
|
+ T_start_time: int64(vtm.T_start_time),
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(dataList) > 0 {
|
|
|
+ if _, ok := VerifyTemplate.AddOrUpdate_VerifyTemplateMapData(dataList); !ok {
|
|
|
+ return "", fmt.Errorf("写入模版数据失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return taskID, nil
|
|
|
+}
|
|
|
+
|
|
|
// 列表 -
|
|
|
func (c *TaskController) List() {
|
|
|
// 验证登录 User_is, User_r
|
|
|
@@ -1135,6 +1473,18 @@ func (c *TaskController) Up() {
|
|
|
clos = append(clos, "T_VerifyTemplate_class")
|
|
|
}
|
|
|
if len(T_VerifyTemplate_id) > 0 {
|
|
|
+ // 保存旧的 T_VerifyTemplate_id
|
|
|
+ old_T_VerifyTemplate_id := r.T_VerifyTemplate_id
|
|
|
+ // 判断旧的模版id与新模版id是否一致,如果不一致则复制旧模板数据到新模板
|
|
|
+ if old_T_VerifyTemplate_id != T_VerifyTemplate_id && len(old_T_VerifyTemplate_id) > 0 {
|
|
|
+ // 创建新任务对象用于复制数据
|
|
|
+ new_task := r
|
|
|
+ new_task.T_VerifyTemplate_id = T_VerifyTemplate_id
|
|
|
+ _, err := CopyMapData(r, new_task, 0)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("复制旧模板数据到新模板失败", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
r.T_VerifyTemplate_id = T_VerifyTemplate_id
|
|
|
clos = append(clos, "T_VerifyTemplate_id")
|
|
|
}
|
|
|
@@ -3098,7 +3448,7 @@ func (c *TaskController) Copy() {
|
|
|
T_name: T_name,
|
|
|
T_VerifyTemplate_class: r.T_VerifyTemplate_class,
|
|
|
T_VerifyTemplate_id: r.T_VerifyTemplate_id,
|
|
|
- T_deadline: r.T_deadline,
|
|
|
+ T_deadline: time.Now().AddDate(0, 2, 0).Format("2006-01-02"),
|
|
|
T_scheme: r.T_scheme,
|
|
|
T_collection: r.T_collection,
|
|
|
T_reporting: r.T_reporting,
|
|
|
@@ -3130,6 +3480,24 @@ func (c *TaskController) Copy() {
|
|
|
c.ServeJSON()
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+ // 复制 DeviceClassList
|
|
|
+ err := CopyDeviceClassList(r, var_)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("复制设备列表失败", err)
|
|
|
+ }
|
|
|
+ // 自动填写备注
|
|
|
+ err = AutoFillDeviceClassRemark(T_paste_task_id)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("自动填写设备备注失败", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 自动填写布点
|
|
|
+ err = AutoFillDeploy(T_paste_task_id, 0)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("自动填写布点失败", err)
|
|
|
+ }
|
|
|
+
|
|
|
NatsServer.Create_Local_Table(T_paste_task_id)
|
|
|
Task.Redis_Task_T_report_number_DelK(var_.T_report_number) // 删除redis内的任务编号
|
|
|
|
|
|
@@ -3457,3 +3825,134 @@ func (c *TaskController) SyncPDFWatermark() {
|
|
|
c.ServeJSON()
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// 复制设备列表
|
|
|
+func CopyDeviceClassList(copy_task, paste_task Task.Task) error {
|
|
|
+ // 读取源任务的设备列表
|
|
|
+ copyList, _ := Device.Read_DeviceClassList_OrderList(copy_task.T_class, "", "", "", 0, 9999)
|
|
|
+
|
|
|
+ // 遍历源任务的设备列表,为每个设备创建新的 DeviceClassList 并添加到目标任务
|
|
|
+ for _, v := range copyList {
|
|
|
+ // 读取证书信息
|
|
|
+ var pdf Certificate.CertificatePdf
|
|
|
+ pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(v.T_id, "")
|
|
|
+ if len(pdfList) > 0 {
|
|
|
+ pdf = pdfList[0]
|
|
|
+ }
|
|
|
+
|
|
|
+ var_ := Device.DeviceClassList{
|
|
|
+ T_class: paste_task.T_class,
|
|
|
+ T_id: v.T_id,
|
|
|
+ T_sn: v.T_sn,
|
|
|
+ T_failure_time: pdf.T_failure_time,
|
|
|
+ T_pdf: pdf.T_pdf,
|
|
|
+ T_Certificate_sn: pdf.T_Certificate_sn,
|
|
|
+ T_remark: v.T_remark,
|
|
|
+ T_terminal: v.T_terminal,
|
|
|
+ T_State: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ _, is := Device.Add_DeviceClassList(var_)
|
|
|
+ if !is {
|
|
|
+ return fmt.Errorf("添加设备列表失败: %s", v.T_id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 自动填写设备备注
|
|
|
+func AutoFillDeviceClassRemark(T_task_id string) error {
|
|
|
+ task, is := Task.Read_Task(T_task_id)
|
|
|
+ if !is {
|
|
|
+ return fmt.Errorf("读取任务失败: %s", T_task_id)
|
|
|
+ }
|
|
|
+
|
|
|
+ verifyTemplate, is := VerifyTemplate.Read_VerifyTemplate(task.T_VerifyTemplate_id)
|
|
|
+ if !is {
|
|
|
+ return fmt.Errorf("读取验证模板失败: %s", task.T_VerifyTemplate_id)
|
|
|
+ }
|
|
|
+ verifyTemplate_R := VerifyTemplate.VerifyTemplateToVerifyTemplate_R(verifyTemplate)
|
|
|
+ T_deploy_list := verifyTemplate_R.T_deploy_list
|
|
|
+
|
|
|
+ // 循环查询布点
|
|
|
+ deviceClassRemarkMap := make(map[int][]string)
|
|
|
+ deviceClassList := Device.Read_DeviceClassList_List_id_By_Terminal(task.T_class, false)
|
|
|
+ for _, deploy := range T_deploy_list {
|
|
|
+ if len(deploy.T_scope) > 0 {
|
|
|
+ dcl := FilterByRange(deviceClassList, deploy.T_scope)
|
|
|
+ for _, dc := range dcl {
|
|
|
+ deviceClassRemarkMap[dc.Id] = append(deviceClassRemarkMap[dc.Id], deploy.T_name)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, deviceClass := range deviceClassList {
|
|
|
+ if remark, ok := deviceClassRemarkMap[deviceClass.Id]; ok {
|
|
|
+ deviceClass.T_remark = strings.Join(remark, "|")
|
|
|
+ if !Device.Update_DeviceClassList(deviceClass, "T_remark") {
|
|
|
+ return fmt.Errorf("修改备注失败: %d", deviceClass.Id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 自动填写布点
|
|
|
+func AutoFillDeploy(T_task_id string, T_source int) error {
|
|
|
+ task, is := Task.Read_Task(T_task_id)
|
|
|
+ if !is {
|
|
|
+ return fmt.Errorf("读取任务失败: %s", T_task_id)
|
|
|
+ }
|
|
|
+
|
|
|
+ verifyTemplate, is := VerifyTemplate.Read_VerifyTemplate(task.T_VerifyTemplate_id)
|
|
|
+ if !is {
|
|
|
+ return fmt.Errorf("读取验证模板失败: %s", task.T_VerifyTemplate_id)
|
|
|
+ }
|
|
|
+ verifyTemplate_R := VerifyTemplate.VerifyTemplateToVerifyTemplate_R(verifyTemplate)
|
|
|
+
|
|
|
+ Map_List := VerifyTemplate.Read_VerifyTemplateMap_List_For_Data(task.T_VerifyTemplate_id, T_source, 0)
|
|
|
+ MapData := VerifyTemplate.Read_VerifyTemplateMapData_List(T_source, T_task_id, task.T_VerifyTemplate_id, Map_List)
|
|
|
+ T_deploy_list := verifyTemplate_R.T_deploy_list
|
|
|
+
|
|
|
+ // 循环查询布点
|
|
|
+ deployMap := make(map[string]string)
|
|
|
+ for _, deploy := range T_deploy_list {
|
|
|
+ deviceClassList := Device.Read_DeviceClassList_List_ByT_remark(task.T_class, deploy.T_name)
|
|
|
+ var snList []string
|
|
|
+ for _, v := range deviceClassList {
|
|
|
+ snList = append(snList, v.T_sn)
|
|
|
+ }
|
|
|
+ deployMap[deploy.T_name] = strings.Join(snList, "|")
|
|
|
+ }
|
|
|
+ MapDataList := make([]VerifyTemplate.VerifyTemplateMapData, 0)
|
|
|
+
|
|
|
+ for _, v := range MapData {
|
|
|
+ if snList, ok := deployMap[v.T_name]; ok {
|
|
|
+ val := VerifyTemplate.VerifyTemplateMapData{
|
|
|
+ T_source: v.T_source,
|
|
|
+ T_task_id: task.T_task_id,
|
|
|
+ T_VerifyTemplate_id: task.T_VerifyTemplate_id,
|
|
|
+ T_VerifyTemplateMap_id: v.T_VerifyTemplateMap_id,
|
|
|
+ T_Required: v.T_Required,
|
|
|
+ T_Construction: v.T_Construction,
|
|
|
+ T_flow_sort: v.T_flow_sort,
|
|
|
+ T_max_time: v.T_max_time,
|
|
|
+ T_min_time: v.T_min_time,
|
|
|
+
|
|
|
+ T_value: snList,
|
|
|
+ T_start_time: v.T_start_time,
|
|
|
+ }
|
|
|
+ MapDataList = append(MapDataList, val)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(MapDataList) > 0 {
|
|
|
+ _, is := VerifyTemplate.AddOrUpdate_VerifyTemplateMapData_ADD_History(MapDataList, T_source, "", 0, 0, 0)
|
|
|
+ if !is {
|
|
|
+ return fmt.Errorf("保存布点数据失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|