lining %!s(int64=6) %!d(string=hai) anos
pai
achega
430d1f4bde

+ 14 - 2
src/dashoo.cn/backend/api/business/oilsupplier/goodsaptitude/oilgoodsaptitudeSession.go

@@ -26,7 +26,7 @@ func (s *OilGoodsAptitudeSession) InstrOilGoodsAptitudeClass(cellsArr []interfac
 
 }
 
-func (s *OilGoodsAptitudeSession) SelectGoodsAptitudeClassCode(code string) string {
+func (s *OilGoodsAptitudeSession) SelectTmpGoodsAptitudeClassCode(code string) string {
 	sql := "select Id from tmp_OilGoodsAptitudeClass where Code='" + code + "'"
 	id, _ := s.Session.QueryString(sql)
 	if id == nil {
@@ -35,9 +35,21 @@ func (s *OilGoodsAptitudeSession) SelectGoodsAptitudeClassCode(code string) stri
 	return id[0]["Id"]
 }
 
-func (s *OilGoodsAptitudeSession) InsertGoodsAptitude(parentId, fcode, val string) error {
+func (s *OilGoodsAptitudeSession) InsertTmpGoodsAptitude(parentId, fcode, val string) error {
 	sql := "INSERT INTO `tmp_OilGoodsAptitude` (Edition,ClassId," + fcode + ") "
 	sql += " VALUES ('1',"+ parentId +"," + val + ")"
 	_, err := s.Session.Query(sql)
 	return err
+}
+
+func (s *OilGoodsAptitudeSession) TruncateTable(tableName string) error {
+	sql := "TRUNCATE TABLE " + tableName
+	_,err := s.Session.Query(sql)
+	return err
+}
+
+func (s *OilGoodsAptitudeSession) InsertGoodsAptitude(fromTableName, toTableName string) error {
+	sql := "INSERT INTO " + toTableName + " SELECT * FROM " + fromTableName
+	_,err := s.Session.Query(sql)
+	return err
 }

+ 177 - 55
src/dashoo.cn/backend/api/controllers/oilsupplier/goodsaptitude.go

@@ -1185,15 +1185,46 @@ func (this *OilGoodsAptitudeController) ExportExcelAll2019() {
 // @router /importexcel [get]
 func (this *OilGoodsAptitudeController) ImportExcel() {
 
-	t := time.Now()
 
 	url := this.GetString("ExcelUrl")
-
-	_dir := utils.Cfg.MustValue("file", "tmplateDir") + "xlsx"
-	utils.DownloadFile(url, "temp.xlsx", _dir)
+	var errorinfo ErrorInfo
+	if url == "" {
+		errorinfo.Code = -2
+		errorinfo.Message = "导入失败!"
+		this.Data["json"] = &errorinfo
+		this.ServeJSON()
+	}
 
 	session := utils.DBE.NewSession()
 	err := session.Begin()
+	sessionsvc := goodsaptitude.GetOilGoodsAptitudeSession(session)
+	defer func() {
+		session.Close()
+	}()
+
+	err = sessionsvc.TruncateTable(Tmp_OilGoodsAptitudeName)
+
+	if err != nil {
+		session.Rollback()
+		errorinfo.Code = -2
+		errorinfo.Message = "导入失败!"
+		this.Data["json"] = &errorinfo
+		this.ServeJSON()
+	}
+
+	err = sessionsvc.TruncateTable(Tmp_OilGoodsAptitudeClassName)
+
+	if err != nil {
+		session.Rollback()
+		errorinfo.Code = -2
+		errorinfo.Message = "导入失败!"
+		this.Data["json"] = &errorinfo
+		this.ServeJSON()
+	}
+
+	_dir := utils.Cfg.MustValue("file", "tmplateDir") + "xlsx"
+	utils.DownloadFile(url, "temp.xlsx", _dir)
+	t := time.Now()
 	filePath := utils.Cfg.MustValue("file", "tmplateDir") + "xlsx/temp.xlsx"
 	xlFile, err := xlsx.OpenFile(filePath)
 
@@ -1205,10 +1236,10 @@ func (this *OilGoodsAptitudeController) ImportExcel() {
 	var sheet = xlFile.Sheets[0]
 
 	svc := goodsaptitude.GetOilGoodsAptitudeService(utils.DBE)
-	sessionsvc := goodsaptitude.GetOilGoodsAptitudeSession(session)
 	Fstrs := svc.GetFCode()
 	Fstrs = "GoodsLevel,GoodsDesc,Standard,CompanyType," + Fstrs
 	columnArr := strings.Split(Fstrs, ",")
+    errLineNum := ""
 
 	codemap := make(map[string]int)
 	for i := 3; i < len(sheet.Rows); i++ {
@@ -1216,76 +1247,167 @@ func (this *OilGoodsAptitudeController) ImportExcel() {
 
 		parentId := 0
 		classId := 0
-		for j := 0;j < 4; j++ {
-			cellstr := cellsArr[j].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 j != 0 {
-					upcellstr := cellsArr[j -1].String()
-					upcellArr := strings.Fields(upcellstr)
-					parentId = codemap[upcellArr[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
 				}
-				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 {
-					session.Rollback()
-					log.Println("Rollback1")
-					elapsed := time.Since(t)
-					fmt.Println(elapsed)
-					return
-				}
-				classId = entity.Id
-				if j != 3 {
-					codemap[cellArr[0]] = entity.Id
+				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 strings.TrimSpace(cellsArr[3].String()) != "" {
-			var valstr = ""
-			for k := 4; k < len(cellsArr); k++ {
-				valstr += "'" + cellsArr[k].String() + "',"
+			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 < len(cellsArr) - 4; l++ {
+			for l := 0; l < cellsArrLen - 4; l++ {
 				columnstr += columnArr[l] + ","
 			}
 			columnstr = strings.Trim(columnstr, ",")
 
-			err = sessionsvc.InsertGoodsAptitude(strconv.Itoa(classId), columnstr, valstr)
+			err = sessionsvc.InsertTmpGoodsAptitude(strconv.Itoa(classId), columnstr, valstr)
 			if err != nil {
-				session.Rollback()
+				errLineNum += strconv.Itoa(i + 1) + ","
 				log.Println("Rollback2")
 				elapsed := time.Since(t)
 				fmt.Println(elapsed)
-				return
+				break
 			}
 		}
 
 	}
-	defer func() {
-		session.Close()
-		os.Remove(filePath)
-	}()
+	os.Remove(filePath)
+
+	if errLineNum != "" {
+		session.Rollback()
+		errorinfo.Code = -1
+		errorinfo.Message = "导入失败!错误行号:" + errLineNum
+		this.Data["json"] = &errorinfo
+		this.ServeJSON()
+	}
+
 	session.Commit()
 	elapsed := time.Since(t)
-	fmt.Println(elapsed)
+	log.Println(elapsed)
+	errorinfo.Code = 0
+	errorinfo.Message = "导入成功!"
+	this.Data["json"] = &errorinfo
+	this.ServeJSON()
+}
+
+// @Title get 清空导入的信息
+// @Description get SampleType by token
+// @Success 200 {object} sampletype.SampleType
+// @router /truncateimport [get]
+func (this *OilGoodsAptitudeController) TruncateImport() {
+	session := utils.DBE.NewSession()
+	err := session.Begin()
+	defer session.Close()
+	svc := goodsaptitude.GetOilGoodsAptitudeSession(session)
+	err = svc.TruncateTable(Tmp_OilGoodsAptitudeName)
+
+	var errorinfo ErrorInfo
+	if err != nil{
+		session.Rollback()
+		errorinfo.Code = -1
+		errorinfo.Message = "删除失败!"
+		this.Data["json"] = &errorinfo
+		this.ServeJSON()
+	}
+
+	err = svc.TruncateTable(Tmp_OilGoodsAptitudeClassName)
+	if err != nil{
+		session.Rollback()
+		errorinfo.Code = -1
+		errorinfo.Message = "删除失败!"
+		this.Data["json"] = &errorinfo
+		this.ServeJSON()
+	}
+
+	session.Commit()
+	errorinfo.Code = 0
+	errorinfo.Message = "删除成功!"
+	this.Data["json"] = &errorinfo
+	this.ServeJSON()
+
+}
+
+// @Title 将导入的数据 导入到正式表
+// @Description get SampleType by token
+// @Success 200 {object} sampletype.SampleType
+// @router /insertgoodsaptitude [get]
+func (this *OilGoodsAptitudeController) InsertGoodsAptitude() {
+
+	session := utils.DBE.NewSession()
+	err := session.Begin()
+
+	defer session.Close()
+	svc := goodsaptitude.GetOilGoodsAptitudeSession(session)
+	err = svc.InsertGoodsAptitude(Tmp_OilGoodsAptitudeName, OilGoodsAptitudeName)
+
+	var errinfo ErrorInfo
+	if err != nil {
+		session.Rollback()
+		errinfo.Code = -1
+		errinfo.Message = "跟新失败!"
+		this.Data["josn"] = &errinfo
+		this.ServeJSON()
+	}
+
+	err = svc.InsertGoodsAptitude(Tmp_OilGoodsAptitudeClassName, OilGoodsAptitudeClassName)
+	if err != nil {
+		session.Rollback()
+		errinfo.Code = -1
+		errinfo.Message = "跟新失败!"
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	}
+
+	session.Commit()
+
+	errinfo.Code = 0
+	errinfo.Message = "跟新成功!"
+	this.Data["json"] = &errinfo
+	this.ServeJSON()
+
 }

+ 6 - 0
src/dashoo.cn/frontend_web/src/api/oilsupplier/goodsaptitude.js

@@ -99,5 +99,11 @@ export default {
       method: 'GET',
       params: params
     })
+  },
+  insertGoodsAptitude (myAxios) {
+    return myAxios({
+      url: '/goodsaptitude/insertgoodsaptitude',
+      method: 'GET'
+    })
   }
 }

+ 47 - 2
src/dashoo.cn/frontend_web/src/pages/oilsupplier/goodsaptitude/index.vue

@@ -294,7 +294,9 @@
             <i class="icon icon-table2"></i> 物资类项目与资质对照表(新导入)
           </span>
           <span style="float: right;">
-            <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;">清空所有导入
+            <el-button type="warning" size="mini" style="margin-left:10px; margin-top: -4px;">清空所有导入
+            </el-button>
+            <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @click="confirmImport()">确认跟新
             </el-button>
           </span>
           <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
@@ -445,6 +447,9 @@
         <el-button size="mini" type="primary" @click="importhandleSearch">查 询</el-button>
       </span>
     </el-dialog>
+    <el-dialog title="错误行号" :visible.sync="errorDialogVisible" width="720px">
+      <el-input type="textarea" autosize placeholder="请输入内容" v-model="textarea"></el-input>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -466,6 +471,7 @@
 
     data () {
       return {
+        textarea: '',
         showimportvisible: false,
         Excelurl: '',
         uploadshow: false,
@@ -476,6 +482,7 @@
         deptsetVisible: false,
         dialogVisible: false,
         importDialogVisible: false,
+        errorDialogVisible: false,
         // 列表数据
         entityList: [],
         // 分页参数
@@ -788,6 +795,30 @@
       this.getDictOptions()
     },
     methods: {
+      confirmImport () {
+        this.$confirm('此操作将更新原有数据, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          api.insertGoodsAptitude(this.$axios).then(res => {
+            console.log(res, '++++++')
+            if (res.data.code === 0) {
+              this.$message({
+                type: 'success',
+                message: res.data.message
+              })
+              this.showimportvisible = false
+              this.initDatas()
+            } else {
+              this.$message({
+                type: 'warning',
+                message: res.data.message
+              })
+            }
+          })
+        })
+      },
       showimport () {
         this.initImportDatas()
         this.showimportvisible = true
@@ -797,7 +828,21 @@
           ExcelUrl: this.Excelurl
         }
         api.importExcel(params, this.$axios).then(res => {
-
+          this.uploadshow = false
+          if (res.data.code === 0) {
+            this.$message({
+              type: 'success',
+              message: res.data.message
+            })
+          } else if (res.data.code === -1) {
+            this.errorDialogVisible = true
+            this.textarea = res.data.message
+          } else if (res.data.code === -2) {
+            this.$message({
+              type: 'warning',
+              message: res.data.message
+            })
+          }
         })
       },
       uploadrequest (option) {