Explorar el Código

导入异常处理

lining hace 6 años
padre
commit
4c664c6f9e

+ 9 - 0
src/dashoo.cn/backend/api/business/oilsupplier/goodsaptitude/oilgoodsaptitudeSession.go

@@ -52,4 +52,13 @@ func (s *OilGoodsAptitudeSession) InsertGoodsAptitude(fromTableName, toTableName
 	sql := "INSERT INTO " + toTableName + " SELECT * FROM " + fromTableName
 	_,err := s.Session.Query(sql)
 	return err
+}
+
+func (s *OilGoodsAptitudeSession) GetFCode() string {
+	sql := "select group_concat(Code ORDER BY SortCode) FCodes from `Base_TableHeader` where CategoryCode= '01'"
+	results, err :=s.Session.QueryString(sql)
+	if err != nil {
+		return ""
+	}
+	return results[0]["FCodes"]
 }

+ 90 - 88
src/dashoo.cn/backend/api/controllers/oilsupplier/goodsaptitude.go

@@ -1197,12 +1197,9 @@ func (this *OilGoodsAptitudeController) ImportExcel() {
 
 	session := utils.DBE.NewSession()
 	err := session.Begin()
-	sessionsvc := goodsaptitude.GetOilGoodsAptitudeSession(session)
-	defer func() {
-		session.Close()
-	}()
+	svc := goodsaptitude.GetOilGoodsAptitudeSession(session)
 
-	err = sessionsvc.TruncateTable(Tmp_OilGoodsAptitudeName)
+	err = svc.TruncateTable(Tmp_OilGoodsAptitudeName)
 
 	if err != nil {
 		session.Rollback()
@@ -1212,7 +1209,7 @@ func (this *OilGoodsAptitudeController) ImportExcel() {
 		this.ServeJSON()
 	}
 
-	err = sessionsvc.TruncateTable(Tmp_OilGoodsAptitudeClassName)
+	err = svc.TruncateTable(Tmp_OilGoodsAptitudeClassName)
 
 	if err != nil {
 		session.Rollback()
@@ -1227,7 +1224,7 @@ func (this *OilGoodsAptitudeController) ImportExcel() {
 	t := time.Now()
 	filePath := utils.Cfg.MustValue("file", "tmplateDir") + "xlsx/temp.xlsx"
 	xlFile, err := xlsx.OpenFile(filePath)
-
+	var errLineNum string
 
 	//excelFileName := "F:/物资类项目与资质对照表-2017.xlsx"
 	if err != nil {
@@ -1235,86 +1232,18 @@ func (this *OilGoodsAptitudeController) ImportExcel() {
 	}
 	var sheet = xlFile.Sheets[0]
 
-	svc := goodsaptitude.GetOilGoodsAptitudeService(utils.DBE)
 	Fstrs := svc.GetFCode()
 	Fstrs = "GoodsLevel,GoodsDesc,Standard,CompanyType," + Fstrs
 	columnArr := strings.Split(Fstrs, ",")
-    errLineNum := ""
+
+	defer func() {
+		session.Close()
+	}()
 
 	codemap := make(map[string]int)
 	for i := 3; i < len(sheet.Rows); i++ {
-		cellsArr := sheet.Rows[i].Cells
-
-		parentId := 0
-		classId := 0
-		cellsArrLen := len(cellsArr)
-		cellD := strings.TrimSpace(cellsArr[3].String())
-		var valstr = ""
-		for idx, cell := range cellsArr {
-			if idx < 4 {
-				cellstr := cell.String()
-				//fmt.Printf("%s\n", cellstr)
-				if strings.TrimSpace(cellstr) == "" {
-					break
-				}
-				cellArr := strings.Fields(cellstr)
-
-				//id := sessionsvc.SelectGoodsAptitudeClassCode(cellArr[0])
-
-				var entity goodsaptitudeclass.Tmp_OilGoodsAptitudeClass
-				_, has := codemap[cellArr[0]]
-				if !has {
-					if idx != 0 {
-						upcellstr := cellsArr[idx -1].String()
-						upcellArr := strings.Fields(upcellstr)
-						parentId = codemap[upcellArr[0]]
-					}
-					entity.Code = cellArr[0]
-					entity.Name = cellArr[1]
-					entity.Edition = "1"
-					entity.ParentId = parentId
-					entity.CreateUserId, _ = utils.StrTo(this.User.Id).Int()
-					entity.CreateBy = this.User.Realname
-					entity.CreateOn = time.Now()
-
-					_, err := sessionsvc.InsertEntityBytbl(Tmp_OilGoodsAptitudeClassName, &entity)
-					if err != nil {
-						errLineNum += strconv.Itoa(i + 1) + ","
-						log.Println("Rollback1")
-						elapsed := time.Since(t)
-						fmt.Println(elapsed)
-						break
-					}
-					classId = entity.Id
-					if idx != 3 {
-						codemap[cellArr[0]] = entity.Id
-					}
-				}
-			}
-			if idx >= 4 {
-				valstr += "'" + cellsArr[idx].String() + "',"
-			}
-		}
-		if cellD != "" {
-			valstr = strings.Trim(valstr, ",")
-			valstr = strings.Replace(valstr, "是", "1", -1)
-			log.Println(cellsArr[3].String() + "==" + valstr)
-			var columnstr = ""
-			for l := 0; l < cellsArrLen - 4; l++ {
-				columnstr += columnArr[l] + ","
-			}
-			columnstr = strings.Trim(columnstr, ",")
-
-			err = sessionsvc.InsertTmpGoodsAptitude(strconv.Itoa(classId), columnstr, valstr)
-			if err != nil {
-				errLineNum += strconv.Itoa(i + 1) + ","
-				log.Println("Rollback2")
-				elapsed := time.Since(t)
-				fmt.Println(elapsed)
-				break
-			}
-		}
-
+		lineNo := strconv.Itoa(i + 1)
+		this.OperationCell(svc, lineNo, columnArr, codemap, sheet.Rows[i].Cells, &errLineNum)
 	}
 	os.Remove(filePath)
 
@@ -1324,15 +1253,88 @@ func (this *OilGoodsAptitudeController) ImportExcel() {
 		errorinfo.Message = "导入失败!错误行号:" + errLineNum
 		this.Data["json"] = &errorinfo
 		this.ServeJSON()
+	} else {
+		session.Commit()
+		elapsed := time.Since(t)
+		log.Println(elapsed)
+		errorinfo.Code = 0
+		errorinfo.Message = "导入成功!"
+		this.Data["json"] = &errorinfo
+		this.ServeJSON()
+	}
+}
+
+func (this *OilGoodsAptitudeController) OperationCell(svc *goodsaptitude.OilGoodsAptitudeSession, lineNo string, columnArr []string, codemap map[string]int, cellsArr []*xlsx.Cell, errLineNum *string) {
+
+	defer func() {
+		if err := recover(); err != nil {
+			log.Println("err" + lineNo, err)
+			*errLineNum += lineNo + ","
+		}
+	}()
+	parentId := 0
+	classId := 0
+	cellsArrLen := len(cellsArr)
+	cellD := strings.TrimSpace(cellsArr[3].String())
+	var valstr = ""
+	for idx, cell := range cellsArr {
+		if idx < 4 {
+			cellstr := cell.String()
+			//fmt.Printf("%s\n", cellstr)
+			if strings.TrimSpace(cellstr) == "" {
+				break
+			}
+			cellArr := strings.Fields(cellstr)
+
+			//id := sessionsvc.SelectGoodsAptitudeClassCode(cellArr[0])
+
+			var entity goodsaptitudeclass.Tmp_OilGoodsAptitudeClass
+			_, has := codemap[cellArr[0]]
+			if !has {
+				if idx != 0 {
+					upcellstr := cellsArr[idx -1].String()
+					upcellArr := strings.Fields(upcellstr)
+					parentId = codemap[upcellArr[0]]
+				}
+				entity.Code = cellArr[0]
+				entity.Name = cellArr[1]
+				entity.Edition = "1"
+				entity.ParentId = parentId
+				entity.CreateUserId, _ = utils.StrTo(this.User.Id).Int()
+				entity.CreateBy = this.User.Realname
+				entity.CreateOn = time.Now()
+
+				_, err := svc.InsertEntityBytbl(Tmp_OilGoodsAptitudeClassName, &entity)
+				if err != nil {
+					panic(err)
+					break
+				}
+				classId = entity.Id
+				if idx != 3 {
+					codemap[cellArr[0]] = entity.Id
+				}
+			}
+		}
+		if idx >= 4 {
+			valstr += "'" + cellsArr[idx].String() + "',"
+		}
+	}
+	if cellD != "" {
+		valstr = strings.Trim(valstr, ",")
+		valstr = strings.Replace(valstr, "是", "1", -1)
+		log.Println(cellsArr[3].String() + "==" + valstr)
+		var columnstr = ""
+		for l := 0; l < cellsArrLen - 4; l++ {
+			columnstr += columnArr[l] + ","
+		}
+		columnstr = strings.Trim(columnstr, ",")
+
+		err := svc.InsertTmpGoodsAptitude(strconv.Itoa(classId), columnstr, valstr)
+		if err != nil {
+			panic(err)
+		}
 	}
 
-	session.Commit()
-	elapsed := time.Since(t)
-	log.Println(elapsed)
-	errorinfo.Code = 0
-	errorinfo.Message = "导入成功!"
-	this.Data["json"] = &errorinfo
-	this.ServeJSON()
 }
 
 // @Title get 清空导入的信息

+ 6 - 4
src/dashoo.cn/frontend_web/src/pages/oilsupplier/goodsaptitude/index.vue

@@ -40,7 +40,7 @@
         </el-form>
       </div>
       <el-table :data="entityList" id="rebateSetTable" size="mini" border height="calc(100vh - 243px)"
-        style="width: 100%" @sort-change="orderby">
+        style="width: 100%" @sort-change="orderby" v-loading="importloading" >
         <el-table-column label="操作" min-width="200" align="center" fixed="right">
           <template slot-scope="scope">
             <router-link :to="'/oilsupplier/goodsaptitude/' + scope.row.Id + '/operation'">
@@ -447,7 +447,7 @@
         <el-button size="mini" type="primary" @click="importhandleSearch">查 询</el-button>
       </span>
     </el-dialog>
-    <el-dialog title="错误行号" :visible.sync="errorDialogVisible" width="720px">
+    <el-dialog title="导入失败" :visible.sync="errorDialogVisible" :close-on-click-modal = "false" width="720px">
       <el-input type="textarea" autosize placeholder="请输入内容" v-model="textarea"></el-input>
     </el-dialog>
   </div>
@@ -471,6 +471,7 @@
 
     data () {
       return {
+        importloading: false,
         textarea: '',
         showimportvisible: false,
         Excelurl: '',
@@ -802,7 +803,6 @@
           type: 'warning'
         }).then(() => {
           api.insertGoodsAptitude(this.$axios).then(res => {
-            console.log(res, '++++++')
             if (res.data.code === 0) {
               this.$message({
                 type: 'success',
@@ -824,11 +824,13 @@
         this.showimportvisible = true
       },
       uploadExcel () {
+        this.importloading = true
+        this.uploadshow = false
         let params = {
           ExcelUrl: this.Excelurl
         }
         api.importExcel(params, this.$axios).then(res => {
-          this.uploadshow = false
+          this.importloading = false
           if (res.data.code === 0) {
             this.$message({
               type: 'success',