feature: gen_con_order

main
Leo 2 months ago
parent d47ce375af
commit 96323a5305

@ -0,0 +1,140 @@
package cmd
import (
"fmt"
"github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/init/initkit"
"github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/spf13/cobra"
"github.com/xuri/excelize/v2"
"path/filepath"
"strings"
"time"
)
func init() {
rootCmd.AddCommand(gcoCmd)
defFlagsGco(gcoCmd)
}
var gcoCmd = &cobra.Command{
Use: "gco",
Short: "Generate construction order",
Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd)
handleGco()
},
}
func defFlagsGco(cmd *cobra.Command) {
cmd.Flags().String("gco.template", "", "*Specify the template used to generate construction order")
cmd.Flags().String("gco.file", "", "*Specify the file used to generate construction order")
}
func handleGco() {
templatePath := configkit.GetString("gco.template", "/Users/leo/Desktop/归档/公众扩容/施工单模板.xlsx")
filePath := configkit.GetString("gco.file", "/Users/leo/Downloads/扩容需求表.xlsx")
src, err := excelize.OpenFile(filePath)
if err != nil {
panic(exception.New(err.Error()))
}
defer src.Close()
rows, err := src.GetRows("扩容需求表")
if err != nil {
panic(exception.New("缺少 Sheet扩容需求表"))
}
// 今天日期
today := time.Now().Format("2006.01.02")
today = strings.ReplaceAll(today, "-", ".")
for i, row := range rows {
if i == 0 {
continue // 跳过表头
}
// V 列 index = 21
if len(row) <= 22 || strings.TrimSpace(row[22]) != "1" {
continue
}
// 必要字段
var dVal, eVal, fVal, gVal, dPrefix string
if len(row) > 3 {
dVal = strings.TrimSpace(row[3])
// D列 去掉“新增”及之后部分
if idx := strings.Index(dVal, "新增"); idx != -1 {
dPrefix = dVal[:idx]
} else {
dPrefix = dVal
}
}
if len(row) > 4 {
eVal = strings.TrimSpace(row[4])
}
if len(row) > 5 {
fVal = strings.TrimSpace(row[5])
}
if len(row) > 6 {
gVal = strings.TrimSpace(row[6])
}
// 打开模板(每次都打开一次,保证生成多份文件不会覆盖)
tpl, err := excelize.OpenFile(templatePath)
if err != nil {
panic(exception.New("缺少 Sheet扩容需求表"))
}
sheet := "Sheet1"
// 写入日期
tpl.SetCellValue(sheet, "B5", today)
tpl.SetCellValue(sheet, "B15", today)
// 写入 D 列
tpl.SetCellValue(sheet, "B2", dVal)
tpl.SetCellValue(sheet, "B12", dVal)
// 写入 E 列
tpl.SetCellValue(sheet, "B9", eVal)
tpl.SetCellValue(sheet, "B19", eVal)
// 写入 D 去掉新增之前部分
tpl.SetCellValue(sheet, "B6", dPrefix)
tpl.SetCellValue(sheet, "B16", dPrefix)
// 输出文件名F列 + D列
outName := ""
if fVal == "" {
outName = fmt.Sprintf("%s.xlsx", dVal)
} else {
outName = fmt.Sprintf("%s-%s.xlsx", dVal, fVal)
}
finishDate := time.Now()
if gVal == "全覆盖" {
finishDateStr := finishDate.AddDate(0, 0, 2).Format("1月2日")
outName = finishDateStr + "需完成" + outName
} else if gVal == "部分覆盖" {
finishDateStr := finishDate.AddDate(0, 0, 5).Format("1月2日")
outName = finishDateStr + "需完成" + outName
} else if gVal == "未覆盖" {
finishDateStr := finishDate.AddDate(0, 0, 15).Format("1月2日")
outName = finishDateStr + "需完成" + outName
}
thisMonth := time.Now().Format("2006.01")
outPath := filepath.Join(filepath.Dir(templatePath), "施工单", thisMonth, outName)
err = tpl.SaveAs(outPath)
if err != nil {
panic(exception.New(err.Error()))
}
tpl.Close()
fmt.Println("生成施工单:", outPath)
}
fmt.Println("全部生成完成")
}
Loading…
Cancel
Save