|
|
- package models
-
- import (
- "LAPP_LF_MOM_BACKEND/conf"
- "LAPP_LF_MOM_BACKEND/db"
- "LAPP_LF_MOM_BACKEND/utils"
- "bufio"
- "errors"
- "github.com/tealeg/xlsx"
- "log"
- "os"
- "path"
- "path/filepath"
- "strings"
- "time"
- "xorm.io/core"
- )
-
- type PrintTask struct {
- TaskId string
- TaskFile string // 保存打印文件的文件路径
- PrinterId string
- Printhead Printheadtab
- PrintdetailList []Printdetailtab
- }
-
- type ByteFile struct {
- ByteLine []byte
- }
-
- // 基于模板将打印任务转换成字节码输出
- func (t *PrintTask) GenBytesFile(conf *conf.EnvConfig) ([]ByteFile, error) {
- templatefile := filepath.Join(conf.TemplatePath, t.Printhead.Templatefile)
- f, err := os.Open(templatefile)
- defer f.Close()
-
- if err != nil {
- log.Printf("failed to open template file: %s due to: %v", templatefile, err)
- return nil, err
- }
-
- var results []ByteFile
- scanner := bufio.NewScanner(f)
- for scanner.Scan() {
- linetext := scanner.Text()
- for _, pd := range t.PrintdetailList {
- // -1 替换所有; 1 替换第一个; 5 替换前5个
- linetext = strings.Replace(linetext, pd.Varname, pd.Varvalue, -1)
- }
- var r ByteFile
- r.ByteLine = []byte(linetext)
- results = append(results, r)
- }
-
- return results, nil
- }
-
- // 基于模板将打印任务转换成打印文件输出
- func (t *PrintTask) GenPrintFile(conf *conf.EnvConfig) error {
- templatefile := filepath.Join(conf.TemplatePath, t.Printhead.Templatefile)
- f, err := os.Open(templatefile)
- defer f.Close()
-
- if err != nil {
- log.Printf("GenPrintFile: failed to open template file: %s due to: %v", templatefile, err)
- return err
- }
-
- // 获取替换文件的内容行
- var results []string
- scanner := bufio.NewScanner(f)
- for scanner.Scan() {
- linetext := scanner.Text()
- for _, pd := range t.PrintdetailList {
- // -1 替换所有; 1 替换第一个; 5 替换前5个
- linetext = strings.Replace(linetext, pd.Varname, pd.Varpos, -1)
- }
- results = append(results, linetext)
- }
-
- // 输出替换内容行到新建的打印文件
- fileext := path.Ext(templatefile)
- printfile := t.TaskId + fileext
- t.TaskFile = filepath.Join(conf.Inbox, printfile)
- fn, err := os.Create(t.TaskFile)
- defer fn.Close()
- if err != nil {
- log.Printf("GenPrintFile: failed to create print file for task: %s due to: %v", t.TaskId, err)
- return err
- }
- w := bufio.NewWriter(fn)
- for _, linetext := range results {
- _, err := w.WriteString(linetext)
- if err != nil {
- log.Printf("GenPrintFile: failed to write print file for task: %s due to: %v", t.TaskId, err)
- return err
- }
- }
- w.Flush()
-
- return nil
- }
-
- // 基于模板将打印任务转换成Excel文件输出
- func (t *PrintTask) GenExcelFile(conf *conf.EnvConfig) error {
- var (
- templatefile string
- xlFile *xlsx.File
- sheet *xlsx.Sheet
- row, col int
- err error
- )
-
- templatefile = filepath.Join(conf.TemplatePath, t.Printhead.Templatefile)
- xlFile, err = xlsx.OpenFile(templatefile)
- if err != nil {
- log.Printf("Failed to open the template file: %s due to: %v", templatefile, err)
- return err
- }
-
- // 获取模板文件的第一个sheet
- if len(xlFile.Sheets) <= 0 {
- log.Printf("The specified excel template : %s has no sheets!", t.Printhead.Templatefile)
- return errors.New("The specified excel template has no sheets!")
- } else {
- sheet = xlFile.Sheet[xlFile.Sheets[0].Name]
- }
-
- // 获取替换文件的内容行并替换Excel表格中的内容
- for _, pd := range t.PrintdetailList {
- // 替换单元格对应的内容
- row, col, _ = utils.GetExcelCellIntPos(pd.Varpos)
- sheet.Cell(row, col).Value = pd.Varvalue
- }
-
- // 输出替换内容行到新建的Excel文件
- fileext := path.Ext(templatefile)
- printfile := t.TaskId + fileext
- t.TaskFile = filepath.Join(conf.Inbox, printfile)
- err = xlFile.Save(t.TaskFile)
- if err != nil {
- log.Printf("GenExcelFile: failed to create excel file for task: %s due to: %v", t.TaskId, err)
- return err
- }
-
- return nil
- }
-
- // 获取打印任务
- func (t *PrintTask) GetPrintTaskList(stalist []string, prnlist []string, conf *conf.EnvConfig) ([]PrintTask, error) {
- var (
- tasklist []PrintTask
- printheadlist []Printheadtab
- err error
- )
- e := db.Eloquent.Master()
- // 获取所有开口的打印任务头
- if len(prnlist) > 0 {
- err = e.Where("finr = ?", conf.Finr).In("status", stalist).In("printerid", prnlist).OrderBy("printheadid").Find(&printheadlist)
- } else {
- err = e.Where("finr = ?", conf.Finr).In("status", stalist).OrderBy("printheadid").Find(&printheadlist)
- }
- if err != nil {
- log.Printf("failed to query printheadtab due to: %v", err)
- return nil, err
- }
- // 遍历打印任务头
- for _, p := range printheadlist {
- var t PrintTask
- t.Printhead = p
- t.Printhead.Clipped()
- t.TaskId = t.Printhead.Printheadid
- t.PrinterId = t.Printhead.Printerid
-
- var pdlist []Printdetailtab
- err := e.Where("finr = ? and printheadid = ?", conf.Finr, t.Printhead.Printheadid).OrderBy("pos").Find(&pdlist)
- if err != nil {
- log.Printf("failed to query printdetailtab due to: %v", err)
- return nil, err
- }
- for _, pd := range pdlist {
- pd.Clipped()
- t.PrintdetailList = append(t.PrintdetailList, pd)
- }
-
- tasklist = append(tasklist, t)
- }
-
- return tasklist, nil
- }
-
- // 关闭打印任务
- func (t *PrintTask) ChangePrintTaskStatus(task PrintTask, newStatus string) error {
- e := db.Eloquent.Master()
- task.Printhead.Status = newStatus
- task.Printhead.Lastmodif = time.Now().Format("20060102150405")
- _, err := e.Id(core.PK{task.Printhead.Finr, task.Printhead.Printheadid}).Cols("status", "lastmodif").Update(&task.Printhead)
- if err != nil {
- log.Printf("failed to change printerheadtab status for printheadid: %s", task.Printhead.Printheadid)
- return err
- }
- return nil
- }
|