|
|
@@ -2,7 +2,14 @@ package oilcontract
|
|
|
|
|
|
import (
|
|
|
"dashoo.cn/backend/api/business/oilcontract/contractReview"
|
|
|
+ "dashoo.cn/backend/api/business/workflow"
|
|
|
"encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "github.com/tealeg/xlsx"
|
|
|
+ "log"
|
|
|
+ "os"
|
|
|
+ "reflect"
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
|
@@ -433,7 +440,148 @@ func (this *OilContractController) GetEntity() {
|
|
|
this.Data["json"] = &model
|
|
|
this.ServeJSON()
|
|
|
}
|
|
|
+// @Title 从数据录入数据导出到word文档
|
|
|
+// @Description 数据存入word
|
|
|
+// @Success 200 {object} controllers.Request
|
|
|
+// @router /exportword/:id [post]
|
|
|
+func (this *OilContractController) DocExport() {
|
|
|
+ Id := this.Ctx.Input.Param(":id")
|
|
|
+ var model contract.OilContract
|
|
|
+ svc := contract.GetOilContractService(utils.DBE)
|
|
|
+ svc.GetEntityByIdBytbl(OilContractName, Id, &model)
|
|
|
+
|
|
|
+ var fileName string
|
|
|
+ var Url string
|
|
|
+ Url = utils.Cfg.MustValue("workflow", "basisModuleHost")
|
|
|
+ fileName = "合同表.docx"
|
|
|
+ svcActiviti := workflow.GetActivitiService(utils.DBE)
|
|
|
+ var data = structToMapDemo(model)
|
|
|
+
|
|
|
+ retDocUrl := svcActiviti.FillWordTemplate(data, Url, fileName)
|
|
|
+ var datainfo ErrorDataInfo
|
|
|
+ datainfo.Code = 0
|
|
|
+ datainfo.Item = retDocUrl
|
|
|
+ datainfo.Message = "打印成功"
|
|
|
+ this.Data["json"] = &datainfo
|
|
|
+ this.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+// @Title get 导入excel
|
|
|
+// @Description 数据存入word
|
|
|
+// @Success 200 {object} controllers.Request
|
|
|
+// @router /importexcel [get]
|
|
|
+func (this *OilContractController) ImportExcel() {
|
|
|
+ url := this.GetString("ExcelUrl")
|
|
|
+ var errorinfo ErrorInfo
|
|
|
+ if url == "" {
|
|
|
+ errorinfo.Code = -2
|
|
|
+ errorinfo.Message = "导入失败!"
|
|
|
+ this.Data["json"] = &errorinfo
|
|
|
+ this.ServeJSON()
|
|
|
+ }
|
|
|
+ session := utils.DBE.NewSession()
|
|
|
+ err := session.Begin()
|
|
|
+ svc := contract.GetOilContractSession(session)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ session.Rollback()
|
|
|
+ errorinfo.Code = -2
|
|
|
+ errorinfo.Message = "导入失败!"
|
|
|
+ this.Data["json"] = &errorinfo
|
|
|
+ this.ServeJSON()
|
|
|
+ }
|
|
|
+
|
|
|
+ _dir := utils.Cfg.MustValue("file", "tmplateDir") + "xlsx"
|
|
|
+ filename := strconv.Itoa(int(time.Now().Unix())) + ".xlsx"
|
|
|
+ utils.DownloadFile(url, filename, _dir)
|
|
|
+ t := time.Now()
|
|
|
+ filePath := utils.Cfg.MustValue("file", "tmplateDir") + "xlsx/" + filename
|
|
|
+ xlFile, err := xlsx.OpenFile(filePath)
|
|
|
+ var errLineNum string
|
|
|
+ //excelFileName := "F:/物资类项目与资质对照表-2017.xlsx"
|
|
|
+ if err != nil {
|
|
|
+ fmt.Printf("open failed: %s\n", err)
|
|
|
+ }
|
|
|
+ var sheet = xlFile.Sheets[0]
|
|
|
+
|
|
|
+ // 插入字段
|
|
|
+ //Fstrs := "ContractNo,ContractName,Amount,ContractType,ContractSonClass,SmallClass,SignedDate,Number,ChooseWay,ContractMark,Currency,BudgetAmount,PerformAmount,IsInternal,IsForeign,IsDeal,MoneyFlows,MoneyChannel,MoneyChannelSon,MoneyChannelSmall,SingUnit,Place,StartDate,EndDate,DisputeResolution,Remark,ProjectOwner,SubmitDate,SealName,PoNumber"
|
|
|
+ //columnArr := strings.Split(Fstrs, ",")
|
|
|
+
|
|
|
+ defer func() {
|
|
|
+ session.Close()
|
|
|
+ }()
|
|
|
+
|
|
|
+ codemap := make(map[string](map[string]int))
|
|
|
+ for i := 1; i < len(sheet.Rows); i++ {
|
|
|
+ lineNo := strconv.Itoa(i + 1)
|
|
|
+ fmt.Println(lineNo)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //this.OperationCell(svc, lineNo, columnArr, sheet.Rows[i].Cells, &errLineNum)
|
|
|
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ os.Remove(filePath)
|
|
|
+ if errLineNum != "" {
|
|
|
+ session.Rollback()
|
|
|
+ errorinfo.Code = -1
|
|
|
+ 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 *OilContractController) OperationCell(svc *contract.OilContractSession, lineNo string, columnArr []string, cellsArr []*xlsx.Cell, errLineNum *string) {
|
|
|
+
|
|
|
+ defer func() {
|
|
|
+ if err := recover(); err != nil {
|
|
|
+ log.Println("err"+lineNo, err)
|
|
|
+ *errLineNum += lineNo + ","
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ cellsArrLen := len(cellsArr)
|
|
|
+ var valstr = ""
|
|
|
+
|
|
|
+ for i := 0; i < cellsArrLen;i++ {
|
|
|
+ valstr += "'" + cellsArr[i].String() + "',"
|
|
|
+ }
|
|
|
+ valstr = strings.Trim(valstr, ",")
|
|
|
+ valstr = strings.Replace(valstr, "是", "1", -1)
|
|
|
+ log.Println(cellsArr[6].String() + "==" + valstr)
|
|
|
+ var columnstr= ""
|
|
|
+ for l := 0; l < cellsArrLen; l++ {
|
|
|
+ columnstr += columnArr[l] + ","
|
|
|
+ }
|
|
|
+ columnstr = strings.Trim(columnstr, ",")
|
|
|
+
|
|
|
+ //err := svc.InsertTmpOilBasisBuild(columnstr, valstr)
|
|
|
+ //if err != nil {
|
|
|
+ // panic(err)
|
|
|
+ //}
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func structToMapDemo(obj interface{}) map[string]interface{} {
|
|
|
+ obj1 := reflect.TypeOf(obj)
|
|
|
+ obj2 := reflect.ValueOf(obj)
|
|
|
+ var data = make(map[string]interface{})
|
|
|
+ for i := 0; i < obj1.NumField(); i++ {
|
|
|
+ data[obj1.Field(i).Name] = obj2.Field(i).Interface()
|
|
|
+ }
|
|
|
+ return data
|
|
|
+}
|
|
|
// @Title 添加
|
|
|
// @Description 新增
|
|
|
// @Param body body oilcontract.OilContract
|