update: all

main
Leo 9 hours ago
parent 9db8871787
commit df44c079a5

@ -2,16 +2,22 @@ package cmd
import ( import (
"cu-helper/cus-eng-con-sys/config" "cu-helper/cus-eng-con-sys/config"
"cu-helper/cus-eng-con-sys/cryptokit"
"cu-helper/cus-eng-con-sys/model" "cu-helper/cus-eng-con-sys/model"
"cu-helper/cus-eng-con-sys/service" "cu-helper/cus-eng-con-sys/service"
"strings"
"time"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
"github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/init/initkit" "github.com/mizuki1412/go-core-kit/init/initkit"
"github.com/mizuki1412/go-core-kit/library/commonkit" "github.com/mizuki1412/go-core-kit/library/commonkit"
"github.com/mizuki1412/go-core-kit/library/filekit" "github.com/mizuki1412/go-core-kit/library/filekit"
"github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/mizuki1412/go-core-kit/service/logkit" "github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/spf13/cast"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"time"
) )
func init() { func init() {
@ -25,7 +31,23 @@ var engSysCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd) initkit.BindFlags(cmd)
config.Init() config.Init()
run() pro := configkit.Get(config.EngProcess, "")
if pro == "" {
run()
}
client := resty.New().SetRetryCount(5).SetRetryWaitTime(15 * time.Second)
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewTaskTodo(cast.ToString(pro))
form := f.GenReqParam()
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/workflow/taskToDo.action")
if err != nil {
panic(exception.New(err.Error()))
}
dataOri := strings.Trim(resp.String(), `"`)
data := cryptokit.Decrypt(dataOri)
_ = filekit.WriteFile("kr.json", []byte(data))
}, },
} }
@ -75,4 +97,5 @@ func run() {
func defFlagsEng(cmd *cobra.Command) { func defFlagsEng(cmd *cobra.Command) {
cmd.Flags().String(config.EngSysSid, "", "Specify the sid") cmd.Flags().String(config.EngSysSid, "", "Specify the sid")
cmd.Flags().String(config.EngProcess, "", "Specify the process")
} }

@ -2,14 +2,16 @@ package cmd
import ( import (
"fmt" "fmt"
"log"
"path/filepath"
"strings"
"time"
"github.com/mizuki1412/go-core-kit/class/exception" "github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/init/initkit" "github.com/mizuki1412/go-core-kit/init/initkit"
"github.com/mizuki1412/go-core-kit/service/configkit" "github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/xuri/excelize/v2" "github.com/xuri/excelize/v2"
"path/filepath"
"strings"
"time"
) )
func init() { func init() {
@ -22,16 +24,107 @@ var gcoCmd = &cobra.Command{
Short: "Generate construction order", Short: "Generate construction order",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd) initkit.BindFlags(cmd)
handleGco() tp := configkit.GetString("gco.type", "kr")
if tp == "kr" {
handleGcoKr()
} else if tp == "lx" {
handleGcoLx()
}
}, },
} }
func defFlagsGco(cmd *cobra.Command) { func defFlagsGco(cmd *cobra.Command) {
cmd.Flags().String("gco.template", "", "*Specify the template used to generate construction order") 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") cmd.Flags().String("gco.file", "", "*Specify the file used to generate construction order")
cmd.Flags().String("gco.type", "", "*Specify the type used to generate construction order")
}
func handleGcoLx() {
templatePath := configkit.GetString("gco.template", "/Users/leo/Desktop/归档/集客零星/模板.xlsx")
filePath := configkit.GetString("gco.file", "/Users/leo/Desktop/归档/集客零星/集客零星资源归档.xlsx")
src, err := excelize.OpenFile(filePath)
if err != nil {
panic(exception.New(err.Error()))
}
defer src.Close()
rows, err := src.GetRows("施工单2026年") // todo 每年修改
if err != nil {
panic(exception.New("缺少 Sheet施工单2026年")) // todo 每年修改
}
// 跳过表头
for i, row := range rows {
if i == 0 {
continue
}
// 防止越界
getVal := func(idx int) string {
if idx >= len(row) {
return ""
}
return strings.TrimSpace(row[idx])
}
// Y列索引24标记为1
if getVal(24) != "1" {
continue
}
// 打开模板
tpl, err := excelize.OpenFile(templatePath)
if err != nil {
log.Println("打开模板失败:", err)
continue
}
sheet := "Sheet1"
// 映射填充
_ = tpl.SetCellValue(sheet, "B2", getVal(2)) // C -> B2
_ = tpl.SetCellValue(sheet, "B3", getVal(0)) // A -> B3
_ = tpl.SetCellValue(sheet, "B4", getVal(12)) // M -> B4
_ = tpl.SetCellValue(sheet, "D4", getVal(13)) // N -> D4
_ = tpl.SetCellValue(sheet, "B5", getVal(3)) // D -> B5
_ = tpl.SetCellValue(sheet, "B6", getVal(14)) // O -> B6
_ = tpl.SetCellValue(sheet, "B7", getVal(10)) // K -> B7
_ = tpl.SetCellValue(sheet, "D7", getVal(11)) // L -> D7
_ = tpl.SetCellValue(sheet, "B8", getVal(8)) // I -> B8
_ = tpl.SetCellValue(sheet, "B9", getVal(9)) // J -> B9
// 文件名B列-C列.xlsx
fileName := fmt.Sprintf("%s-%s.xlsx", getVal(1), getVal(2))
// 清理非法文件名字符
fileName = strings.ReplaceAll(fileName, "/", "_")
fileName = strings.ReplaceAll(fileName, "\\", "_")
fileName = strings.ReplaceAll(fileName, ":", "_")
fileName = strings.ReplaceAll(fileName, "*", "_")
fileName = strings.ReplaceAll(fileName, "?", "_")
fileName = strings.ReplaceAll(fileName, "\"", "_")
fileName = strings.ReplaceAll(fileName, "<", "_")
fileName = strings.ReplaceAll(fileName, ">", "_")
fileName = strings.ReplaceAll(fileName, "|", "_")
// 保存路径(默认保存在模板同目录)
outPath := filepath.Join(filepath.Dir(templatePath), "施工单", fileName)
if err := tpl.SaveAs(outPath); err != nil {
log.Println("保存失败:", outPath, err)
_ = tpl.Close()
continue
}
_ = tpl.Close()
fmt.Println("生成施工单:", outPath)
}
fmt.Println("全部生成完成")
} }
func handleGco() { func handleGcoKr() {
templatePath := configkit.GetString("gco.template", "/Users/leo/Desktop/归档/公众扩容/施工单模板.xlsx") templatePath := configkit.GetString("gco.template", "/Users/leo/Desktop/归档/公众扩容/施工单模板.xlsx")
filePath := configkit.GetString("gco.file", "/Users/leo/Downloads/扩容需求表.xlsx") filePath := configkit.GetString("gco.file", "/Users/leo/Downloads/扩容需求表.xlsx")
src, err := excelize.OpenFile(filePath) src, err := excelize.OpenFile(filePath)
@ -58,7 +151,11 @@ func handleGco() {
} }
// 必要字段 // 必要字段
var dVal, eVal, fVal, gVal, dPrefix string var bVal, dVal, eVal, fVal, gVal, lVal, dPrefix string
if len(row) > 1 {
bVal = strings.TrimSpace(row[1])
}
if len(row) > 3 { if len(row) > 3 {
dVal = strings.TrimSpace(row[3]) dVal = strings.TrimSpace(row[3])
@ -81,6 +178,9 @@ func handleGco() {
if len(row) > 6 { if len(row) > 6 {
gVal = strings.TrimSpace(row[6]) gVal = strings.TrimSpace(row[6])
} }
if len(row) > 11 {
lVal = strings.TrimSpace(row[11])
}
// 打开模板(每次都打开一次,保证生成多份文件不会覆盖) // 打开模板(每次都打开一次,保证生成多份文件不会覆盖)
tpl, err := excelize.OpenFile(templatePath) tpl, err := excelize.OpenFile(templatePath)
@ -108,7 +208,7 @@ func handleGco() {
// 输出文件名F列 + D列 // 输出文件名F列 + D列
outName := "" outName := ""
if fVal == "" || fVal == "等无条件自动工单" { if fVal == "" || fVal == "等无条件自动工单" || fVal == "需下" {
outName = fmt.Sprintf("%s.xlsx", dVal) outName = fmt.Sprintf("%s.xlsx", dVal)
} else { } else {
outName = fmt.Sprintf("%s-%s.xlsx", dVal, fVal) outName = fmt.Sprintf("%s-%s.xlsx", dVal, fVal)
@ -125,6 +225,11 @@ func handleGco() {
outName = finishDateStr + "需完成" + outName outName = finishDateStr + "需完成" + outName
} }
thisMonth := time.Now().Format("2006.01") thisMonth := time.Now().Format("2006.01")
bVal = strings.TrimSuffix(bVal, "网格")
if lVal == "市公司整批扩容二级分光器清单" {
outName = "(" + bVal + ")" + outName
thisMonth = "批量二级" + time.Now().Format("2006.1.2")
}
outPath := filepath.Join(filepath.Dir(templatePath), "施工单", thisMonth, outName) outPath := filepath.Join(filepath.Dir(templatePath), "施工单", thisMonth, outName)
err = tpl.SaveAs(outPath) err = tpl.SaveAs(outPath)
if err != nil { if err != nil {
@ -132,7 +237,6 @@ func handleGco() {
} }
tpl.Close() tpl.Close()
fmt.Println("生成施工单:", outPath) fmt.Println("生成施工单:", outPath)
} }

@ -0,0 +1,280 @@
package cmd
import (
"fmt"
"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"
"regexp"
"strconv"
"strings"
"time"
)
func init() {
rootCmd.AddCommand(gcpCmd)
defFlagsGcp(gcpCmd)
}
var gcpCmd = &cobra.Command{
Use: "gcp",
Short: "Generate construction plan",
Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd)
templatePath := configkit.GetString("gcp.template", "/Users/leo/Desktop/归档/公众扩容/在途工单通报/模板.xlsx")
filePath1 := configkit.GetString("gcp.file1", "/Users/leo/Downloads/宽带在途工单进展反馈表.xlsx")
filePath2 := configkit.GetString("gcp.file2", "/Users/leo/Downloads/扩容需求表.xlsx")
_ = ProcessExcelData(filePath1, filePath2, templatePath)
},
}
func defFlagsGcp(cmd *cobra.Command) {
cmd.Flags().String("gcp.template", "", "*Specify the template used to generate construction plan")
cmd.Flags().String("gcp.file1", "", "*Specify the file1 used to generate construction plan")
cmd.Flags().String("gcp.file2", "", "*Specify the file2 used to generate construction plan")
}
// ====================== 对外入口 ======================
func ProcessExcelData(broadbandPath string, expansionPath string, templatePath string) error {
template, err := excelize.OpenFile(templatePath)
if err != nil {
return err
}
defer template.Close()
dateFmt := "yyyy年mm月dd日"
dateStyle, err := template.NewStyle(&excelize.Style{
CustomNumFmt: &dateFmt,
})
if err != nil {
return err
}
templateSheet := template.GetSheetName(0)
writeRow := 2 // 模板从第2行写
today := time.Now()
// ---------------- 宽带在途工单 ----------------
if err := processBroadband(template, templateSheet, broadbandPath, &writeRow, today, dateStyle); err != nil {
return err
}
// ---------------- 扩容需求表 ----------------
if err := processExpansion(template, templateSheet, expansionPath, &writeRow, today, dateStyle); err != nil {
return err
}
filename := time.Now().Format("20060102") + ".xlsx"
return template.SaveAs("/Users/leo/Desktop/归档/公众扩容/在途工单通报/通报表格/" + filename)
}
// ====================== 宽带在途 ======================
func processBroadband(template *excelize.File, templateSheet string, path string, writeRow *int, today time.Time, dateStyle int) error {
f, err := excelize.OpenFile(path)
if err != nil {
return err
}
defer f.Close()
sheet := f.GetSheetName(0)
rows, err := f.GetRows(sheet)
if err != nil {
return err
}
reDay := regexp.MustCompile(`(\d+)`)
for i := 1; i < len(rows); i++ {
row := rows[i]
// A列 == 西湖
if getCell(row, 0) != "西湖" {
continue
}
// O列 == 需建设处理
if getCell(row, 14) != "需建设处理" {
continue
}
// D列 → 地址
address := getCell(row, 3)
if address == "" {
continue
}
// H列 → 填报日期
dateStr, err := f.GetCellValue(sheet, fmt.Sprintf("H%d", i+1))
if err != nil || dateStr == "" {
continue
}
reportTime, err := parseExcelTime(dateStr)
if err != nil {
continue
}
// 写模板
template.SetCellValue(templateSheet, fmt.Sprintf("A%d", *writeRow), address)
template.SetCellValue(templateSheet, fmt.Sprintf("F%d", *writeRow), reportTime)
template.SetCellStyle(
templateSheet,
fmt.Sprintf("F%d", *writeRow),
fmt.Sprintf("F%d", *writeRow),
dateStyle,
)
// S列X日通
colS := getCell(row, 18)
if m := reDay.FindStringSubmatch(colS); len(m) == 2 {
days, _ := strconv.Atoi(m[1])
// C列几日通
template.SetCellValue(templateSheet, fmt.Sprintf("C%d", *writeRow), days)
// D列需完成日期
finishDate := reportTime.AddDate(0, 0, days)
template.SetCellValue(templateSheet, fmt.Sprintf("D%d", *writeRow), finishDate)
template.SetCellStyle(
templateSheet,
fmt.Sprintf("D%d", *writeRow),
fmt.Sprintf("D%d", *writeRow),
dateStyle,
)
// E列是否超时
if today.After(finishDate) {
template.SetCellValue(templateSheet, fmt.Sprintf("E%d", *writeRow), "是")
} else {
template.SetCellValue(templateSheet, fmt.Sprintf("E%d", *writeRow), "否")
}
}
// G列工单历时
duration := int(today.Sub(reportTime).Hours() / 24)
if duration < 0 {
duration = 0
}
template.SetCellValue(templateSheet, fmt.Sprintf("G%d", *writeRow), duration)
*writeRow++
}
return nil
}
// ====================== 扩容需求 ======================
func processExpansion(template *excelize.File, templateSheet string, path string, writeRow *int, today time.Time, dateStyle int) error {
f, err := excelize.OpenFile(path)
if err != nil {
return err
}
defer f.Close()
sheet := f.GetSheetName(0)
rows, err := f.GetRows(sheet)
if err != nil {
return err
}
for i := 1; i < len(rows); i++ {
row := rows[i]
// P列为空
if strings.TrimSpace(getCell(row, 15)) != "" {
continue
}
// X列 == 1
if getCell(row, 23) != "1" {
continue
}
//D列 → 地址
address := getCell(row, 3)
if address == "" {
continue
}
// N列 → 填报日期
dateStr, err := f.GetCellValue(sheet, fmt.Sprintf("N%d", i+1))
if err != nil || dateStr == "" {
continue
}
reportTime, err := parseExcelTime(dateStr)
if err != nil {
continue
}
template.SetCellValue(templateSheet, fmt.Sprintf("A%d", *writeRow), address)
template.SetCellValue(templateSheet, fmt.Sprintf("F%d", *writeRow), reportTime)
template.SetCellStyle(
templateSheet,
fmt.Sprintf("F%d", *writeRow),
fmt.Sprintf("F%d", *writeRow),
dateStyle,
)
// G列工单历时
duration := int(today.Sub(reportTime).Hours() / 24)
if duration < 0 {
duration = 0
}
template.SetCellValue(templateSheet, fmt.Sprintf("G%d", *writeRow), duration)
*writeRow++
}
return nil
}
// ====================== 工具函数 ======================
func parseExcelTime(val string) (time.Time, error) {
val = strings.TrimSpace(val)
if val == "" {
return time.Time{}, fmt.Errorf("empty time")
}
// 1⃣ Excel 原生数值(最优先)
if f, err := strconv.ParseFloat(val, 64); err == nil {
return excelize.ExcelDateToTime(f, false)
}
// 2⃣ 中文日期11月23日 / 11月23号
reCN := regexp.MustCompile(`^(\d{1,2})月(\d{1,2})([日号])?$`)
if m := reCN.FindStringSubmatch(val); len(m) > 0 {
month, _ := strconv.Atoi(m[1])
day, _ := strconv.Atoi(m[2])
//todo
year := 0
if month >= 11 {
year = 2025 // 默认用当前年
}
year = time.Now().Year() // 默认用当前年
return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local), nil
}
// 3⃣ 常见字符串格式
layouts := []string{
"2006-01-02",
"2006/01/02",
"2006-01-02 15:04",
"2006/01/02 15:04",
"2006-01-02 15:04:05",
"2006/01/02 15:04:05",
}
for _, layout := range layouts {
if t, err := time.ParseInLocation(layout, val, time.Local); err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("cannot parse time: %s", val)
}
// 安全取单元格
func getCell(row []string, idx int) string {
if idx >= len(row) {
return ""
}
return strings.TrimSpace(row[idx])
}

@ -3,6 +3,7 @@ package cmd
import ( import (
"cu-helper/wms/common" "cu-helper/wms/common"
"cu-helper/wms/service" "cu-helper/wms/service"
"github.com/mizuki1412/go-core-kit/init/initkit" "github.com/mizuki1412/go-core-kit/init/initkit"
"github.com/mizuki1412/go-core-kit/service/logkit" "github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -19,9 +20,8 @@ var highOpticalLossCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd) initkit.BindFlags(cmd)
m1 := service.ReqGetHighOptLossUnderList() m1 := service.ReqGetHighOptLossUnderList()
m2 := service.ReqGetHighOptLossHistoryList()
logkit.Info("拿到光衰数据,开始生成...") logkit.Info("拿到光衰数据,开始生成...")
common.GenExcelFile(m1, m2) common.GenExcelFile(m1)
}, },
} }

@ -1,6 +1,9 @@
package cmd package cmd
import ( import (
"strings"
"time"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
"github.com/mizuki1412/go-core-kit/class/exception" "github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/init/initkit" "github.com/mizuki1412/go-core-kit/init/initkit"
@ -10,8 +13,6 @@ import (
"github.com/spf13/cast" "github.com/spf13/cast"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"strings"
"time"
) )
func init() { func init() {
@ -73,11 +74,11 @@ func runIOM() {
treeZhuang := gjson.Get(resp.String(), "data").Array() treeZhuang := gjson.Get(resp.String(), "data").Array()
for _, zhuang := range treeZhuang { for _, zhuang := range treeZhuang {
//拿幢获取单元 //拿幢获取单元
//zhuangHao := gjson.Get(zhuang.String(), "name").String() zhuangHao := gjson.Get(zhuang.String(), "name").String()
//TODO ALL: ALL的时候注释掉 //TODO ALL: ALL的时候注释掉
//if zhuangHao == "0幢" || zhuangHao == "0号楼" { if zhuangHao == "0幢" || zhuangHao == "0号楼" {
// continue continue
//} }
_ = commonkit.RecoverFuncWrapper(func() { _ = commonkit.RecoverFuncWrapper(func() {
resp, err = client.R(). resp, err = client.R().
SetHeaders(map[string]string{ SetHeaders(map[string]string{
@ -144,106 +145,9 @@ func runIOM() {
for _, shi := range treeShi { for _, shi := range treeShi {
_ = commonkit.RecoverFuncWrapper(func() { _ = commonkit.RecoverFuncWrapper(func() {
//TODO ALL: 如果删除全部,注释if,只运行else //TODO ALL: 如果删除全部,注释if,只运行else
//if cast.ToInt(temp) >= 3 { //大于等于3层的每个室取消关联
// //大于等于3层的每个室取消关联 name := gjson.Get(shi.String(), "name").String()
// resp, err = client.R(). if name != "101室" && name != "201室" && name != "301室" && name != "401室" {
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetQueryParams(map[string]string{
// "regionId": "A",
// "districtId": districtId,
// "standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// "roadId": "11",
// }).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
// if err != nil || resp.IsError() {
// panic(exception.New("获取地址详情失败"))
// }
// //判断用户是否为0设备是否有关联
// userCount := gjson.Get(resp.String(), "0.userCount").String()
// eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
// if userCount == "0" && eqptCount != "0" {
// //用户为0,并且有设备关联
// resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetQueryParams(map[string]string{
// "regionId": "A",
// "standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// }).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts")
// if err != nil || resp.IsError() {
// panic(exception.New("获取设备详情失败"))
// }
// nodeID := gjson.Get(resp.String(), "0.eqptNodeId").Int()
// //取消关联
// resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetBody(map[string]interface{}{
// "eqptNodeIds": []int64{nodeID},
// "standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// "oldAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// "regionId": "A",
// }).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
// logkit.Info("已取消关联:" + gjson.Get(shi.String(), "detailName").String())
// //删除单独一室
// m := shi.Map()
// resultMap := make(map[string]interface{})
// for k, v := range m {
// resultMap[k] = v.Value()
// }
// resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
// if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
// panic(exception.New("Invalid失败"))
// }
// logkit.Info("已删除室:" + gjson.Get(shi.String(), "detailName").String())
// } else {
// logkit.Info("@@@存在用户/无设备@@@" + gjson.Get(shi.String(), "detailName").String())
// }
//} else {
//小于3层的除了101、102、201、202以及商铺的不取消其他取消并invalid
//TODO ALL: 如果删除全部,name和下面的if判断2行
//name := gjson.Get(shi.String(), "name").String()
//if name != "101室" && name != "102室" && name != "201室" && name != "202室" && !strings.Contains(name, "商铺") {
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"districtId": districtId,
"standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
"roadId": "11",
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
if err != nil || resp.IsError() {
panic(exception.New("获取地址详情失败"))
}
//判断用户是否为0设备是否有关联
userCount := gjson.Get(resp.String(), "0.userCount").String()
eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
if userCount == "0" && eqptCount != "0" {
//用户为0,并且有设备关联
resp, err = client.R(). resp, err = client.R().
SetHeaders(map[string]string{ SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
@ -253,151 +157,249 @@ func runIOM() {
}). }).
SetQueryParams(map[string]string{ SetQueryParams(map[string]string{
"regionId": "A", "regionId": "A",
"districtId": districtId,
"standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(), "standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts") "roadId": "11",
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
if err != nil || resp.IsError() { if err != nil || resp.IsError() {
panic(exception.New("获取设备详情失败")) panic(exception.New("获取地址详情失败"))
}
var nodeIDs []int64
gjson.Parse(resp.String()).ForEach(func(key, value gjson.Result) bool {
nodeIDs = append(nodeIDs, value.Get("eqptNodeId").Int())
return true // 返回true以继续遍历
})
//取消关联
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(map[string]interface{}{
"eqptNodeIds": nodeIDs,
"standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
"oldAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
logkit.Info("已取消关联:" + gjson.Get(shi.String(), "detailName").String())
//删除单独一室
m := shi.Map()
resultMap := make(map[string]interface{})
for k, v := range m {
resultMap[k] = v.Value()
} }
resp, err = client.R(). //判断用户是否为0设备是否有关联
SetHeaders(map[string]string{ userCount := gjson.Get(resp.String(), "0.userCount").String()
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
"Content-Type": "application/json;charset=UTF-8", if userCount == "0" && eqptCount != "0" {
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), //用户为0,并且有设备关联
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", resp, err = client.R().
}). SetHeaders(map[string]string{
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid") "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { "Content-Type": "application/json;charset=UTF-8",
panic(exception.New("Invalid失败")) "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts")
if err != nil || resp.IsError() {
panic(exception.New("获取设备详情失败"))
}
nodeID := gjson.Get(resp.String(), "0.eqptNodeId").Int()
//取消关联
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(map[string]interface{}{
"eqptNodeIds": []int64{nodeID},
"standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
"oldAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
logkit.Info("已取消关联:" + gjson.Get(shi.String(), "detailName").String())
//删除单独一室
m := shi.Map()
resultMap := make(map[string]interface{})
for k, v := range m {
resultMap[k] = v.Value()
}
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除室:" + gjson.Get(shi.String(), "detailName").String())
} else {
logkit.Info("@@@存在用户/无设备@@@" + gjson.Get(shi.String(), "detailName").String())
} }
logkit.Info("已删除室:" + gjson.Get(shi.String(), "detailName").String()) //} else {
} else { // //小于3层的除了101、102、201、202以及商铺的不取消其他取消并invalid
logkit.Info("@@@存在用户/无设备@@@" + gjson.Get(shi.String(), "detailName").String()) // //TODO ALL: 如果删除全部,name和下面的if判断2行
logkit.Info("用户数:" + userCount + ",设备数:" + eqptCount) // name := gjson.Get(shi.String(), "name").String()
// if name != "101室" && name != "102室" && name != "201室" && name != "202室" && !strings.Contains(name, "商铺") {
// resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetQueryParams(map[string]string{
// "regionId": "A",
// "districtId": districtId,
// "standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// "roadId": "11",
// }).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
// if err != nil || resp.IsError() {
// panic(exception.New("获取地址详情失败"))
// }
// //判断用户是否为0设备是否有关联
// userCount := gjson.Get(resp.String(), "0.userCount").String()
// eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
// if userCount == "0" && eqptCount != "0" {
// //用户为0,并且有设备关联
// resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetQueryParams(map[string]string{
// "regionId": "A",
// "standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// }).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts")
// if err != nil || resp.IsError() {
// panic(exception.New("获取设备详情失败"))
// }
// var nodeIDs []int64
// gjson.Parse(resp.String()).ForEach(func(key, value gjson.Result) bool {
// nodeIDs = append(nodeIDs, value.Get("eqptNodeId").Int())
// return true // 返回true以继续遍历
// })
// //取消关联
// resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetBody(map[string]interface{}{
// "eqptNodeIds": nodeIDs,
// "standardAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// "oldAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// "regionId": "A",
// }).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
// logkit.Info("已取消关联:" + gjson.Get(shi.String(), "detailName").String())
// //删除单独一室
// m := shi.Map()
// resultMap := make(map[string]interface{})
// for k, v := range m {
// resultMap[k] = v.Value()
// }
// resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
// if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
// panic(exception.New("Invalid失败"))
// }
// logkit.Info("已删除室:" + gjson.Get(shi.String(), "detailName").String())
// } else {
// logkit.Info("@@@存在用户/无设备@@@" + gjson.Get(shi.String(), "detailName").String())
// logkit.Info("用户数:" + userCount + ",设备数:" + eqptCount)
// }
// }
} }
//}
//}
}) })
} }
//处理完每个室后对于大于等于3层的直接删除整层删除前要先POST验证如果还有用户会报错拦截 //处理完每个室后对于大于等于3层的直接删除整层删除前要先POST验证如果还有用户会报错拦截
//TODO ALL:如果要删除全部注释if //TODO ALL:如果要删除全部注释if
//if cast.ToInt(temp) >= 3 { //if cast.ToInt(temp) >= 2 {
m := ceng.Map() // m := ceng.Map()
resultMap := make(map[string]interface{}) // resultMap := make(map[string]interface{})
for k, v := range m { // for k, v := range m {
resultMap[k] = v.Value() // resultMap[k] = v.Value()
} // }
resp, err = client.R(). // resp, err = client.R().
SetHeaders(map[string]string{ // SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), // "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8", // "Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), // "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", // "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}). // }).
SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid") // SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { // if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("有用户,无法删除层:" + gjson.Get(ceng.String(), "detailName").String())) // panic(exception.New("有用户,无法删除层:" + gjson.Get(ceng.String(), "detailName").String()))
} // }
resp, err = client.R(). // resp, err = client.R().
SetHeaders(map[string]string{ // SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), // "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8", // "Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), // "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", // "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}). // }).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid") // SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { // if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败")) // panic(exception.New("Invalid失败"))
} // }
logkit.Info("已删除整层:" + gjson.Get(ceng.String(), "detailName").String()) // logkit.Info("已删除整层:" + gjson.Get(ceng.String(), "detailName").String())
//} //}
}) })
} }
//处理完每个层后删除每个单元删除前要先POST验证如果还有用户会报错拦截 //处理完每个层后删除每个单元删除前要先POST验证如果还有用户会报错拦截
m := danyuan.Map() //m := danyuan.Map()
resultMap := make(map[string]interface{}) //resultMap := make(map[string]interface{})
for k, v := range m { //for k, v := range m {
resultMap[k] = v.Value() // resultMap[k] = v.Value()
} //}
resp, err = client.R(). //resp, err = client.R().
SetHeaders(map[string]string{ // SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), // "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8", // "Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), // "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", // "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}). // }).
SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid") // SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { //if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("有用户,无法删除单元:" + gjson.Get(danyuan.String(), "detailName").String())) // panic(exception.New("有用户,无法删除单元:" + gjson.Get(danyuan.String(), "detailName").String()))
} //}
resp, err = client.R(). //resp, err = client.R().
SetHeaders(map[string]string{ // SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), // "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8", // "Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), // "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", // "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}). // }).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid") // SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { //if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败")) // panic(exception.New("Invalid失败"))
} //}
logkit.Info("已删除整单元:" + gjson.Get(danyuan.String(), "detailName").String()) //logkit.Info("已删除整单元:" + gjson.Get(danyuan.String(), "detailName").String())
}) })
} }
//处理完每个单元后删除每幢删除前要先POST验证如果还有用户会报错拦截 //处理完每个单元后删除每幢删除前要先POST验证如果还有用户会报错拦截
m := zhuang.Map() //m := zhuang.Map()
resultMap := make(map[string]interface{}) //resultMap := make(map[string]interface{})
for k, v := range m { //for k, v := range m {
resultMap[k] = v.Value() // resultMap[k] = v.Value()
} //}
resp, err = client.R(). //resp, err = client.R().
SetHeaders(map[string]string{ // SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), // "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8", // "Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), // "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", // "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}). // }).
SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid") // SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { //if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("有用户,无法删除幢:" + gjson.Get(zhuang.String(), "detailName").String())) // panic(exception.New("有用户,无法删除幢:" + gjson.Get(zhuang.String(), "detailName").String()))
} //}
resp, err = client.R(). //resp, err = client.R().
SetHeaders(map[string]string{ // SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), // "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8", // "Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), // "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", // "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}). // }).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid") // SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { //if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败")) // panic(exception.New("Invalid失败"))
} //}
logkit.Info("已删除整幢:" + gjson.Get(zhuang.String(), "detailName").String()) //logkit.Info("已删除整幢:" + gjson.Get(zhuang.String(), "detailName").String())
}) })
} }
} }

@ -0,0 +1,392 @@
package cmd
import (
"github.com/go-resty/resty/v2"
"github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/init/initkit"
"github.com/mizuki1412/go-core-kit/library/commonkit"
"github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/spf13/cast"
"github.com/spf13/cobra"
"github.com/tidwall/gjson"
"github.com/xuri/excelize/v2"
"time"
)
func init() {
rootCmd.AddCommand(iom3Cmd)
defFlagsIOM3(iom3Cmd)
}
var iom3Cmd = &cobra.Command{
Use: "iom3",
Short: "Batch processing operations of the iom",
Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd)
res := readExcelWaitDel()
runIOM3(res)
},
}
func defFlagsIOM3(cmd *cobra.Command) {
cmd.Flags().String("token", "", "*Specify the token of IOM")
cmd.Flags().String("file", "", "*Specify the path of IOM file")
}
var client = resty.New().SetRetryCount(5).SetRetryWaitTime(20 * time.Second)
func runIOM3(data map[string][][]string) {
//先处理11级地址
data11 := data["11"]
for _, v := range data11 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid(v[3], v[0], v[1], v[2])
})
}
data10 := data["10"]
for _, v := range data10 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
data9 := data["9"]
for _, v := range data9 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
data8 := data["8"]
for _, v := range data8 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
data7 := data["7"]
for _, v := range data7 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
}
func queryEqptsAndInvalid(districtId, standardAddrId, roadId, parentId string) {
//获取上一级地址
resp, err := client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(map[string]interface{}{
"districtId": districtId,
"parentAddrId": parentId,
"regionId": "A",
"roadId": roadId,
}).Post("http://132.151.25.19:15609/prod-api/address/standard/list/tree")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("获取TreeThis失败"))
}
treeThis := gjson.Get(resp.String(), "data").Array()
for _, this := range treeThis {
if this.Get("standardAddrId").String() != standardAddrId {
continue
}
logkit.Info("开始处理:" + this.Get("detailName").String())
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"districtId": districtId,
"standardAddrId": standardAddrId,
"roadId": roadId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
if err != nil || resp.IsError() {
panic(exception.New("获取地址详情失败"))
}
//判断用户是否为0设备是否有关联
userCount := gjson.Get(resp.String(), "0.userCount").String()
eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
if userCount == "0" {
if eqptCount != "0" {
//用户为0,并且有设备关联,取消关联后删除
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"standardAddrId": standardAddrId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts")
if err != nil || resp.IsError() {
panic(exception.New("获取设备详情失败"))
}
nodeID := gjson.Get(resp.String(), "0.eqptNodeId").Int()
//取消关联
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(map[string]interface{}{
"eqptNodeIds": []int64{nodeID},
"standardAddrId": standardAddrId,
"oldAddrId": standardAddrId,
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
logkit.Info("已取消关联:" + gjson.Get(this.String(), "detailName").String())
m := this.Map()
resultMap := make(map[string]interface{})
for k, v := range m {
resultMap[k] = v.Value()
}
//resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid")
//if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
// panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "detailName").String()))
//}
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
} else {
//用户为0,并且没有设备关联,直接删除
m := this.Map()
resultMap := make(map[string]interface{})
for k, v := range m {
resultMap[k] = v.Value()
}
//resp, err = client.R().
// SetHeaders(map[string]string{
// "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
// "Content-Type": "application/json;charset=UTF-8",
// "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
// "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
// }).
// SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid")
//if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
// panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "detailName").String()))
//}
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
}
} else {
logkit.Info("@@@存在用户@@@" + gjson.Get(this.String(), "detailName").String())
}
break
}
}
func queryEqptsAndInvalid2(districtId, standardAddrId, roadId, parentId string) {
//获取上一级地址
resp, err := client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(map[string]interface{}{
"districtId": districtId,
"parentAddrId": parentId,
"regionId": "A",
"roadId": roadId,
}).Post("http://132.151.25.19:15609/prod-api/address/standard/list/tree")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("获取TreeThis失败"))
}
treeThis := gjson.Get(resp.String(), "data").Array()
for _, this := range treeThis {
if this.Get("standardAddrId").String() != standardAddrId {
continue
}
logkit.Info("开始处理:" + this.Get("detailName").String())
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"districtId": districtId,
"standardAddrId": standardAddrId,
"roadId": roadId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
if err != nil || resp.IsError() {
panic(exception.New("获取地址详情失败"))
}
//判断用户是否为0设备是否有关联
userCount := gjson.Get(resp.String(), "0.userCount").String()
eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
if userCount == "0" {
if eqptCount != "0" {
//用户为0,并且有设备关联,取消关联后删除
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"standardAddrId": standardAddrId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts")
if err != nil || resp.IsError() {
panic(exception.New("获取设备详情失败"))
}
nodeID := gjson.Get(resp.String(), "0.eqptNodeId").Int()
//取消关联
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(map[string]interface{}{
"eqptNodeIds": []int64{nodeID},
"standardAddrId": standardAddrId,
"oldAddrId": standardAddrId,
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
logkit.Info("已取消关联:" + gjson.Get(this.String(), "detailName").String())
m := this.Map()
resultMap := make(map[string]interface{})
for k, v := range m {
resultMap[k] = v.Value()
}
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "detailName").String()))
}
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
} else {
//用户为0,并且没有设备关联,直接删除
m := this.Map()
resultMap := make(map[string]interface{})
for k, v := range m {
resultMap[k] = v.Value()
}
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/standard/confirm/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "detailName").String()))
}
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).
SetBody(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
}
} else {
logkit.Info("@@@存在用户@@@" + gjson.Get(this.String(), "detailName").String())
}
break
}
}
func readExcelWaitDel() map[string][][]string {
// 打开 Excel 文件
f, err := excelize.OpenFile(configkit.GetString("file", "/Users/leo/Downloads/标准地址0112J待删除.xlsx"))
if err != nil {
logkit.Fatal(err)
}
defer func() {
// 关闭文件
if err := f.Close(); err != nil {
logkit.Fatal(err)
}
}()
var result [][]string
m := make(map[string][][]string)
// 获取 Excel 表的行
rows, err := f.GetRows("标准地址")
if err != nil {
logkit.Fatal(err)
}
// 遍历每一行,从第二行开始
for i, row := range rows {
if i == 0 {
// 跳过标题行
continue
}
if len(row) >= 14 { // 确保至少有 4 列
currentRow := []string{row[0], row[3], row[5], row[14]} //0标准地址id 3地址层级 5上级地址id 14区县编码
result = append(result, currentRow)
m[row[3]] = append(m[row[3]], currentRow)
}
}
return m
}

@ -40,11 +40,14 @@ var exchangeArr []*exchange
type exchange struct { type exchange struct {
changeNo string changeNo string
backDateNo string
rootOrderNo string
inProject string inProject string
outProject string outProject string
goodsName string goodsName string
unit string unit string
productsNums float64 productsNums float64
realNum float64
realPrice float64 realPrice float64
remainderRealAmount float64 remainderRealAmount float64
inOut string inOut string
@ -65,7 +68,7 @@ func handleList() {
"pageNum": "1", "pageNum": "1",
"pageSize": "8000", "pageSize": "8000",
"type": "out", "type": "out",
}).Post("https://inneruscm.chinaunicom.cn:10003/api/biz-service-order/outer/v1.0/bizChange/findChangeOrderForPage") }).Post("https://uscmxc.chinaunicom.cn:10003/api/biz-service-order/outer/v1.0/bizChange/findChangeOrderForPage")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "success").Bool() != true { if err != nil || resp.IsError() || gjson.Get(resp.String(), "success").Bool() != true {
panic(exception.New("获取调拨(调出)列表失败")) panic(exception.New("获取调拨(调出)列表失败"))
} }
@ -84,9 +87,11 @@ func handleList() {
//} //}
id := v.Get("id").String() id := v.Get("id").String()
changeNo := v.Get("changeNo").String() changeNo := v.Get("changeNo").String()
backDateNo := v.Get("backDateNo").String()
rootOrderNo := v.Get("rootOrderNo").String()
note := v.Get("note").String() note := v.Get("note").String()
_ = commonkit.RecoverFuncWrapper(func() { _ = commonkit.RecoverFuncWrapper(func() {
getDetail(id, "out", changeNo, inProject, outProject, note) getDetail(id, "out", changeNo, backDateNo, rootOrderNo, inProject, outProject, note)
}) })
} }
resp, err = supplyClient.R(). resp, err = supplyClient.R().
@ -100,7 +105,7 @@ func handleList() {
"pageNum": "1", "pageNum": "1",
"pageSize": "8000", "pageSize": "8000",
"type": "in", "type": "in",
}).Post("https://inneruscm.chinaunicom.cn:10003/api/biz-service-order/outer/v1.0/bizChange/findChangeOrderForPage") }).Post("https://uscmxc.chinaunicom.cn:10003/api/biz-service-order/outer/v1.0/bizChange/findChangeOrderForPage")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "success").Bool() != true { if err != nil || resp.IsError() || gjson.Get(resp.String(), "success").Bool() != true {
panic(exception.New("获取调拨(调入)列表失败")) panic(exception.New("获取调拨(调入)列表失败"))
} }
@ -118,14 +123,16 @@ func handleList() {
//} //}
id := v.Get("id").String() id := v.Get("id").String()
changeNo := v.Get("changeNo").String() changeNo := v.Get("changeNo").String()
backDateNo := v.Get("backDateNo").String()
rootOrderNo := v.Get("rootOrderNo").String()
note := v.Get("note").String() note := v.Get("note").String()
_ = commonkit.RecoverFuncWrapper(func() { _ = commonkit.RecoverFuncWrapper(func() {
getDetail(id, "in", changeNo, inProject, outProject, note) getDetail(id, "in", changeNo, backDateNo, rootOrderNo, inProject, outProject, note)
}) })
} }
} }
func getDetail(id, inOut, changeNo, inProject, outProject, note string) { func getDetail(id, inOut, changeNo, backDateNo, rootOrderNo, inProject, outProject, note string) {
//time.Sleep(200 * time.Millisecond) //time.Sleep(200 * time.Millisecond)
resp, err := supplyClient.R(). resp, err := supplyClient.R().
SetHeaders(map[string]string{ SetHeaders(map[string]string{
@ -135,19 +142,23 @@ func getDetail(id, inOut, changeNo, inProject, outProject, note string) {
}).SetBody(map[string]string{ }).SetBody(map[string]string{
"id": id, "id": id,
"type": inOut, "type": inOut,
}).Post("https://inneruscm.chinaunicom.cn:10003/api/biz-service-order/outer/v1.0/bizChange/findChangeOrderDetailed") }).Post("https://uscmxc.chinaunicom.cn:10003/api/biz-service-order/outer/v1.0/bizChange/findChangeOrderDetailed")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "success").Bool() != true { if err != nil || resp.IsError() || gjson.Get(resp.String(), "success").Bool() != true {
panic(exception.New("获取详情失败! " + changeNo)) panic(exception.New("获取详情失败! " + changeNo))
} }
detailList := gjson.Get(resp.String(), "data.changeOrderProduct").Array() detailList := gjson.Get(resp.String(), "data.changeOrderProduct").Array()
for _, v := range detailList { for _, v := range detailList {
goodsName := v.Get("goodsName").String() goodsName := v.Get("goodsName").String()
unit := v.Get("unit").String() unit := v.Get("unit").String()
productsNums := v.Get("productsNums").String() productsNums := v.Get("productsNums").String()
realPrice := v.Get("realPrice").String() realPrice := v.Get("realPrice").String()
productsAmount := v.Get("productsAmount").String() productsAmount := v.Get("productsAmount").String()
realNum := v.Get("realNums").String()
ex := new(exchange) ex := new(exchange)
ex.changeNo = changeNo ex.changeNo = changeNo
ex.backDateNo = backDateNo
ex.rootOrderNo = rootOrderNo
ex.inProject = inProject ex.inProject = inProject
ex.outProject = outProject ex.outProject = outProject
ex.goodsName = goodsName ex.goodsName = goodsName
@ -156,6 +167,7 @@ func getDetail(id, inOut, changeNo, inProject, outProject, note string) {
ex.realPrice = cast.ToFloat64(realPrice) ex.realPrice = cast.ToFloat64(realPrice)
ex.remainderRealAmount = cast.ToFloat64(productsAmount) ex.remainderRealAmount = cast.ToFloat64(productsAmount)
ex.note = note ex.note = note
ex.realNum = cast.ToFloat64(realNum)
if inOut == "in" { if inOut == "in" {
ex.inOut = "调入" ex.inOut = "调入"
} else if inOut == "out" { } else if inOut == "out" {
@ -172,7 +184,7 @@ func genExcelFile() {
f := excelize.NewFile() f := excelize.NewFile()
// 设置表头 // 设置表头
headers := []string{"序号", "调拨单号", "物资名称", "单位", "数量", "单价", "总价", "调出项目", "调入项目", "调入调出"} headers := []string{"序号", "原采购订单", "调拨单号", "调拨源", "物资名称", "单位", "数量", "剩/转固数量", "单价", "总价", "调出项目", "调入项目", "调入调出", "备注"}
for i, header := range headers { for i, header := range headers {
cell, _ := excelize.CoordinatesToCellName(i+1, 1) cell, _ := excelize.CoordinatesToCellName(i+1, 1)
f.SetCellValue("Sheet1", cell, header) f.SetCellValue("Sheet1", cell, header)
@ -180,22 +192,25 @@ func genExcelFile() {
// 填充数据 // 填充数据
for i, ex := range exchangeArr { for i, ex := range exchangeArr {
row := i + 2 // 数据从第2行开始 row := i + 2 // 数据从第2行开始
f.SetCellValue("Sheet1", "A"+strconv.Itoa(row), i+1) // 序号 f.SetCellValue("Sheet1", "A"+strconv.Itoa(row), i+1) // 序号
f.SetCellValue("Sheet1", "B"+strconv.Itoa(row), ex.changeNo) // 调拨单号 f.SetCellValue("Sheet1", "B"+strconv.Itoa(row), ex.rootOrderNo)
f.SetCellValue("Sheet1", "C"+strconv.Itoa(row), ex.goodsName) // 物资名称 f.SetCellValue("Sheet1", "C"+strconv.Itoa(row), ex.changeNo) // 调拨单号
f.SetCellValue("Sheet1", "D"+strconv.Itoa(row), ex.unit) // 单位 f.SetCellValue("Sheet1", "D"+strconv.Itoa(row), ex.backDateNo) // 调拨源
f.SetCellValue("Sheet1", "E"+strconv.Itoa(row), ex.productsNums) // 数量 f.SetCellValue("Sheet1", "E"+strconv.Itoa(row), ex.goodsName) // 物资名称
f.SetCellValue("Sheet1", "F"+strconv.Itoa(row), ex.realPrice) // 单价 f.SetCellValue("Sheet1", "F"+strconv.Itoa(row), ex.unit) // 单位
f.SetCellValue("Sheet1", "G"+strconv.Itoa(row), ex.remainderRealAmount) // 总价 f.SetCellValue("Sheet1", "G"+strconv.Itoa(row), ex.productsNums) // 数量
f.SetCellValue("Sheet1", "H"+strconv.Itoa(row), ex.outProject) // 调出项目 f.SetCellValue("Sheet1", "H"+strconv.Itoa(row), ex.realNum) //剩/转固数量
f.SetCellValue("Sheet1", "I"+strconv.Itoa(row), ex.inProject) // 调入项目 f.SetCellValue("Sheet1", "I"+strconv.Itoa(row), ex.realPrice) // 单价
f.SetCellValue("Sheet1", "J"+strconv.Itoa(row), ex.inOut) f.SetCellValue("Sheet1", "J"+strconv.Itoa(row), ex.remainderRealAmount) // 总价
f.SetCellValue("Sheet1", "K"+strconv.Itoa(row), ex.note) // 调入调出 f.SetCellValue("Sheet1", "K"+strconv.Itoa(row), ex.outProject) // 调出项目
f.SetCellValue("Sheet1", "L"+strconv.Itoa(row), ex.inProject) // 调入项目
f.SetCellValue("Sheet1", "M"+strconv.Itoa(row), ex.inOut)
f.SetCellValue("Sheet1", "N"+strconv.Itoa(row), ex.note) // 备注
} }
// 保存文件 // 保存文件
if err := f.SaveAs("/Users/leo/Documents/erp调拨-all.xlsx"); err != nil { if err := f.SaveAs("/Users/leo/Documents/erp调拨-syj.xlsx"); err != nil {
panic(exception.New("保存文件失败...")) panic(exception.New("保存文件失败..."))
} }
} }

@ -1,16 +1,21 @@
package cmd package cmd
import ( import (
"crypto/md5"
"encoding/base64"
"encoding/hex"
"encoding/json"
"fmt" "fmt"
"log"
"strconv"
"time"
"github.com/mizuki1412/go-core-kit/class/exception" "github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/service/logkit" "github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/spf13/cast" "github.com/spf13/cast"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"github.com/xuri/excelize/v2" "github.com/xuri/excelize/v2"
"log"
"strconv"
"time"
) )
func init() { func init() {
@ -21,14 +26,44 @@ var testCmd = &cobra.Command{
Use: "test", Use: "test",
Short: "Only for test", Short: "Only for test",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
extractColumnsLoss() fff()
}, },
} }
func md5str(s string) string {
h := md5.Sum([]byte(s))
return hex.EncodeToString(h[:])
}
func getToken(timestamp, systemCode string) string {
return md5str(timestamp + systemCode)
}
func getPostKey(data interface{}) string {
b, _ := json.Marshal(data)
return base64.StdEncoding.EncodeToString(b)
}
func fff() {
systemCode := "3axgoA2bKgTjANbCPaeKMkeGe/8uTzyv17kjLC0CWV7fyM3keJwlg0WWyeYsXCWrm40/i7cL1TMsY4zThYj3dkKEnmCqRhMiRYJ7n/0l0dMLsKeFHDStUL1HSfQ/WjFQ9cWnR5Jm/MUD/F2w9SkmOTwU5jT6zZ7gG2SV3AzCh/IFo+BE7KWY1tkrH+xCPRWGRDCOHOGAI8JbDHSBMpbvU2eWTUfZyjMTzzvTu++3CN6OWMqigMP3O07NkcKXhhn9L4CJtigxPdTBN3ubKLRGcId+7JmJGvI4sCJBMEky913nDtqyr/8iORDZI7xT/QUUQYBwSs2ys5HsbJv7C7jAURUt5UhTS0CRqTxVlkUKm6iS0/e6MxODvcIYb6eUopOTzUhQu7KSj4CELD9v3oxJXARN+kXLFZ3LukRTe8Oo+PgTxZS2jgc5hMLpT4G9eBkHXoIPrx8ddGwik2q1xhSX1VviJSU5JtM6HtM1m5BfBV0" // 👈 从前端拿到
timestamp := "20260415123456000" // 按页面格式生成
token := getToken(timestamp, systemCode)
data := map[string]interface{}{
"evtTime": timestamp,
"token": token,
}
postKey := getPostKey(data)
fmt.Println("token:", token)
fmt.Println("postKey:", postKey)
}
func extractColumnsLoss() { func extractColumnsLoss() {
// 打开 Excel 文件 // 打开 Excel 文件
f, err := excelize.OpenFile("/Users/leo/Documents/竣工与调度光衰单 (79).xlsx") f, err := excelize.OpenFile("/Users/leo/Documents/竣工与调度光衰单 (21).xlsx")
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -56,9 +91,9 @@ func extractColumnsLoss() {
for i, row := range data { for i, row := range data {
resp, err := lawClient.R(). resp, err := lawClient.R().
SetHeaders(map[string]string{ SetHeaders(map[string]string{
"Authorization": "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxNTY1NzE3NTEyNCIsInVzZXJJZCI6IjE2NjUiLCJuYW1lIjoi6K646ZyW5Y2TIiwiZXhwIjoxNzQyMjE0NTI2LCJuYmYiOjE3NDIxOTY1MjZ9.eVclGWTTxAVOjvV9NK4T_FCF2DngXkz_g6JYz2Ik4H8oLZW9Q1iEW3WLtwVUCiyW1qPLIITictdFzAeM6sbT7Wmvg4HbOHJNWxNJtkoB8xAAFBBE9r9ri8cXUz_Actt5WAhM5K4U42ed0TLtifC1KuXxgwMRervaqxuWBzjzhQY", "Authorization": "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxNTY1NzE3NTEyNCIsInVzZXJJZCI6IjE2NjUiLCJuYW1lIjoi6K646ZyW5Y2TIiwiZXhwIjoxNzYxOTE2NTAwLCJuYmYiOjE3NjE4OTg1MDB9.DBqqShxxp5dwLrKYzuKFneRnqQub5V5ocbwFSAa5DvmHww3iWWAHLRD9bPkoE20CSDqcVjOj2MjkttaT3EarYqVhPxTdXtS0rddWTZaRDiMkO5GOFRvdlb-404h2YCUtxoubM0033v9jBKF_VgjMphUo_w8VjizqzcouucBlNtE",
"Content-type": "application/json;charset=UTF-8", "Content-type": "application/json;charset=UTF-8",
"Cookie": "Admin-Token=eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxNTY1NzE3NTEyNCIsInVzZXJJZCI6IjE2NjUiLCJuYW1lIjoi6K646ZyW5Y2TIiwiZXhwIjoxNzQyMjE0NTI2LCJuYmYiOjE3NDIxOTY1MjZ9.eVclGWTTxAVOjvV9NK4T_FCF2DngXkz_g6JYz2Ik4H8oLZW9Q1iEW3WLtwVUCiyW1qPLIITictdFzAeM6sbT7Wmvg4HbOHJNWxNJtkoB8xAAFBBE9r9ri8cXUz_Actt5WAhM5K4U42ed0TLtifC1KuXxgwMRervaqxuWBzjzhQY; sysName=%E8%AE%B8%E9%9C%96%E5%8D%93", "Cookie": "Admin-Token=eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxNTY1NzE3NTEyNCIsInVzZXJJZCI6IjE2NjUiLCJuYW1lIjoi6K646ZyW5Y2TIiwiZXhwIjoxNzYxOTE2NTAwLCJuYmYiOjE3NjE4OTg1MDB9.DBqqShxxp5dwLrKYzuKFneRnqQub5V5ocbwFSAa5DvmHww3iWWAHLRD9bPkoE20CSDqcVjOj2MjkttaT3EarYqVhPxTdXtS0rddWTZaRDiMkO5GOFRvdlb-404h2YCUtxoubM0033v9jBKF_VgjMphUo_w8VjizqzcouucBlNtE; sysName=%E8%AE%B8%E9%9C%96%E5%8D%93",
}).SetBody(map[string]interface{}{ }).SetBody(map[string]interface{}{
"endTime": cast.ToString(time.Now().Format("2006-01-02")), "endTime": cast.ToString(time.Now().Format("2006-01-02")),
"eqpLoid": row, "eqpLoid": row,
@ -71,14 +106,24 @@ func extractColumnsLoss() {
fmt.Println(err) fmt.Println(err)
} else { } else {
res := gjson.Get(resp.String(), "data.rows").Array() res := gjson.Get(resp.String(), "data.rows").Array()
f.SetCellValue("{worksheet}", "AZ"+strconv.Itoa(i+2), res[0].Get("onu_rx_power").String()) if len(res) > 0 {
f.SetCellValue("{worksheet}", "BA"+strconv.Itoa(i+2), res[1].Get("onu_rx_power").String()) f.SetCellValue("{worksheet}", "AZ"+strconv.Itoa(i+2), res[0].Get("onu_rx_power").String())
f.SetCellValue("{worksheet}", "BB"+strconv.Itoa(i+2), res[2].Get("onu_rx_power").String()) }
f.SetCellValue("{worksheet}", "BC"+strconv.Itoa(i+2), res[3].Get("onu_rx_power").String()) if len(res) > 1 {
f.SetCellValue("{worksheet}", "BD"+strconv.Itoa(i+2), res[4].Get("onu_rx_power").String()) f.SetCellValue("{worksheet}", "BA"+strconv.Itoa(i+2), res[1].Get("onu_rx_power").String())
}
if len(res) > 2 {
f.SetCellValue("{worksheet}", "BB"+strconv.Itoa(i+2), res[2].Get("onu_rx_power").String())
}
if len(res) > 3 {
f.SetCellValue("{worksheet}", "BC"+strconv.Itoa(i+2), res[3].Get("onu_rx_power").String())
}
if len(res) > 4 {
f.SetCellValue("{worksheet}", "BD"+strconv.Itoa(i+2), res[4].Get("onu_rx_power").String())
}
} }
} }
if err := f.SaveAs("/Users/leo/Documents/竣工与调度光衰单 (79).xlsx"); err != nil { if err := f.SaveAs("/Users/leo/Documents/竣工与调度光衰单 (21).xlsx"); err != nil {
fmt.Println(err) fmt.Println(err)
} }
logkit.Info("生成结束...") logkit.Info("生成结束...")

@ -3,9 +3,12 @@
"dir": "/Users/leo/go/src/leo/project/cu-helper" "dir": "/Users/leo/go/src/leo/project/cu-helper"
}, },
"eng": { "eng": {
"step": "YSQR", "sid": "a18e5e46-8097-4bb9-90c1-725de26ed0c6",
"pro": "XQXJ", "pro": "",
"sid": "d6bacfb8-4d1f-45aa-ae29-56ecc43dc9af" "projLX": "CNA25AC0000277.3301",
"projKR": "CMA26CE0000006.3301",
"projXQ": "",
"projLY": ""
}, },
"wms": { "wms": {
"token": "D6228DF68B10DC7B9FD89F30948785EA" "token": "D6228DF68B10DC7B9FD89F30948785EA"

@ -15,4 +15,7 @@ const (
ProcessYSJF = "YSJFProcess" ProcessYSJF = "YSJFProcess"
) )
const (
EngProcess = "eng.pro"
)
const UrlPrefix = "http://10.202.2.108:8086" const UrlPrefix = "http://10.202.2.108:8086"

@ -45,7 +45,7 @@ func NewPDMPushProcess(processInsId, taskId, taskTitle string) *PDMPushProcess {
pdmPushProcess.PdmProjReceiverId = "3083564" pdmPushProcess.PdmProjReceiverId = "3083564"
pdmPushProcess.BuildModel = "ZJ" pdmPushProcess.BuildModel = "ZJ"
pdmPushProcess.SupervisorProviderId = "309320681" pdmPushProcess.SupervisorProviderId = "309320681"
pdmPushProcess.SupervisorReceiverId = "3098707" pdmPushProcess.SupervisorReceiverId = "3102931"
pdmPushProcess.Ranstr = cryptokit.RandomStr(true, 10, 32) pdmPushProcess.Ranstr = cryptokit.RandomStr(true, 10, 32)
pdmPushProcess.Timestamp = cryptokit.GetTimeStamp() pdmPushProcess.Timestamp = cryptokit.GetTimeStamp()
return pdmPushProcess return pdmPushProcess

@ -44,7 +44,7 @@ func NewStartActProcess(proInsId, taskId string) *StartActProcess {
startActProcess.ProcessInstanceId = proInsId startActProcess.ProcessInstanceId = proInsId
startActProcess.TaskId = taskId startActProcess.TaskId = taskId
startActProcess.TaskDefinitionKey = "GCSG" startActProcess.TaskDefinitionKey = "GCSG"
startActProcess.Assignee = "3105305" //可修改,张子杰 //todo 零星不一样 startActProcess.Assignee = "3104398" //可修改,张子杰 //todo 零星不一样
startActProcess.Comment = "请施工" startActProcess.Comment = "请施工"
startActProcess.HandleType = "1" startActProcess.HandleType = "1"
startActProcess.Withdraw = "1" startActProcess.Withdraw = "1"

@ -0,0 +1,75 @@
package model
import (
"cu-helper/cus-eng-con-sys/cryptokit"
"reflect"
)
/*
/zjgd/frm/workflow/taskToDo.action
*/
/*
1
*/
type TaskTodo struct {
Start string `map:"start"`
Length string `map:"length"`
Title string `map:"title"`
LinkName string `map:"linkName"`
CreateTimeStart string `map:"createTimeStart"`
CreateTimeEnd string `map:"createTimeEnd"`
DbStartFlag string `map:"dbStartFlag"`
Ranstr string `map:"ranstr"`
Timestamp string `map:"timestamp"`
}
func NewTaskTodo(process string) *TaskTodo {
taskTodo := new(TaskTodo)
taskTodo.Start = "1"
taskTodo.Length = "9999"
taskTodo.Title = ""
taskTodo.LinkName = process
taskTodo.CreateTimeStart = ""
taskTodo.CreateTimeEnd = ""
taskTodo.DbStartFlag = ""
taskTodo.Ranstr = cryptokit.RandomStr(true, 10, 32)
taskTodo.Timestamp = cryptokit.GetTimeStamp()
return taskTodo
}
// GenReqParam 返回加密后的请求参数
func (th *TaskTodo) GenReqParam() map[string]string {
th.encrypt()
return th.structToMap()
}
func (th *TaskTodo) structToMap() map[string]string {
result := make(map[string]string)
t := reflect.TypeOf(*th)
v := reflect.ValueOf(*th)
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
// Use the tag value as the key in the map, if it exists; otherwise, use the field name.
tag := field.Tag.Get("map")
if tag == "" {
tag = field.Name
}
result[tag] = value.String()
}
return result
}
func (th *TaskTodo) encrypt() {
v := reflect.ValueOf(th).Elem()
for i := 0; i < v.NumField(); i++ {
field := v.Field(i)
if field.CanSet() {
field.SetString(cryptokit.Encrypt(field.String()))
}
}
}

@ -23,8 +23,8 @@ type UpdateActInfoOrgAndStaff struct {
func NewUpdateActInfoOrgAndStaff(actId string) *UpdateActInfoOrgAndStaff { func NewUpdateActInfoOrgAndStaff(actId string) *UpdateActInfoOrgAndStaff {
updateActInfoOrgAndStaff := new(UpdateActInfoOrgAndStaff) updateActInfoOrgAndStaff := new(UpdateActInfoOrgAndStaff)
updateActInfoOrgAndStaff.ActStartOrgId = "3105305" //todo 张子杰 零星需改 updateActInfoOrgAndStaff.ActStartOrgId = "3104398" //todo 鱼饼 零星需改
updateActInfoOrgAndStaff.ActOrgCode = "309320240" //todo 张子杰 零星需改 updateActInfoOrgAndStaff.ActOrgCode = "1538688" //todo 余秉 零星需改
updateActInfoOrgAndStaff.ActId = actId updateActInfoOrgAndStaff.ActId = actId
updateActInfoOrgAndStaff.Ranstr = cryptokit.RandomStr(true, 10, 32) updateActInfoOrgAndStaff.Ranstr = cryptokit.RandomStr(true, 10, 32)
updateActInfoOrgAndStaff.Timestamp = cryptokit.GetTimeStamp() updateActInfoOrgAndStaff.Timestamp = cryptokit.GetTimeStamp()

@ -3,8 +3,9 @@ package model
import ( import (
"cu-helper/cus-eng-con-sys/cryptokit" "cu-helper/cus-eng-con-sys/cryptokit"
"cu-helper/cus-eng-con-sys/util" "cu-helper/cus-eng-con-sys/util"
"github.com/mizuki1412/go-core-kit/service/logkit"
"reflect" "reflect"
"github.com/mizuki1412/go-core-kit/service/logkit"
) )
/* /*
@ -51,7 +52,7 @@ func NewUpdatePdmProduction(touzi, remandId, html, taskTitle string) *UpdatePdmP
updatePdmProduction.ResourceType = "undefined" updatePdmProduction.ResourceType = "undefined"
updatePdmProduction.IsNewNational = "0" updatePdmProduction.IsNewNational = "0"
updatePdmProduction.SupervisorProviderId = "309320681" //监理(可修改) updatePdmProduction.SupervisorProviderId = "309320681" //监理(可修改)
updatePdmProduction.SupervisorReceiverId = "3098707" //监理(可修改) updatePdmProduction.SupervisorReceiverId = "3102931" //监理(可修改)
updatePdmProduction.Ranstr = cryptokit.RandomStr(true, 10, 32) updatePdmProduction.Ranstr = cryptokit.RandomStr(true, 10, 32)
updatePdmProduction.Timestamp = cryptokit.GetTimeStamp() updatePdmProduction.Timestamp = cryptokit.GetTimeStamp()
logkit.Info(taskTitle + " 投资:" + remandTouzi + "元") logkit.Info(taskTitle + " 投资:" + remandTouzi + "元")

@ -2,16 +2,17 @@ package common
import ( import (
"fmt" "fmt"
"os"
"path/filepath"
"strings"
"time"
"github.com/mizuki1412/go-core-kit/class/exception" "github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/library/mathkit" "github.com/mizuki1412/go-core-kit/library/mathkit"
"github.com/mizuki1412/go-core-kit/service/configkit" "github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/mizuki1412/go-core-kit/service/logkit" "github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/spf13/cast" "github.com/spf13/cast"
"github.com/xuri/excelize/v2" "github.com/xuri/excelize/v2"
"os"
"path/filepath"
"strings"
"time"
) )
type summary struct { type summary struct {
@ -52,7 +53,7 @@ func GenExcelFile() {
} }
} }
// Save the file // Save the file
if err := f.SaveAs("/Users/leo/Documents/ERP材料核对/材料汇总(" + time.Now().Format("1月2日") + ").xlsx"); err != nil { if err := f.SaveAs("/Users/leo/Desktop/归档/ERP材料核对/材料汇总(" + time.Now().Format("1月2日") + ").xlsx"); err != nil {
panic(exception.New(err.Error())) panic(exception.New(err.Error()))
} }
logkit.Info("生成结束...") logkit.Info("生成结束...")

@ -6,7 +6,7 @@ import "github.com/mizuki1412/go-core-kit/class/exception"
func getMatType(matName string) string { func getMatType(matName string) string {
switch matName { switch matName {
case "光缆_GYTA-4B1.3": case "光缆_GYTA-4B1.3", "光缆_GYXTS-4B1.3":
return "C" return "C"
case "光缆_GYTA-4B1.3(m)": case "光缆_GYTA-4B1.3(m)":
return "C~" return "C~"
@ -14,7 +14,7 @@ func getMatType(matName string) string {
return "D" return "D"
case "光缆_GYTA-6B1.3(m)": case "光缆_GYTA-6B1.3(m)":
return "D~" return "D~"
case "光缆_GYTA-12B1.3", "光缆_GYTS - 12B1.3": case "光缆_GYTA-12B1.3", "光缆_GYTS - 12B1.3", "光缆_GYXTS-12B1.3":
return "E" return "E"
case "光缆_GYTA-12B1.3(m)": case "光缆_GYTA-12B1.3(m)":
return "E~" return "E~"
@ -36,20 +36,22 @@ func getMatType(matName string) string {
return "O" return "O"
case "光分路器_盒式封装(报价包括SC连接器插头以1.5m长的G.657A2B6a2、d2.0mm尾纤为基础) 1×16", "光分路器_托盘式封装(报价包括光纤适配器以1.5m长的G.657A2B6a2、d2.0mm尾纤SC/UPC类型适配器及插头为基础) 1×16", "光分路器_盒式封装 1×16", "光分路器_托盘式封装 1×16": case "光分路器_盒式封装(报价包括SC连接器插头以1.5m长的G.657A2B6a2、d2.0mm尾纤为基础) 1×16", "光分路器_托盘式封装(报价包括光纤适配器以1.5m长的G.657A2B6a2、d2.0mm尾纤SC/UPC类型适配器及插头为基础) 1×16", "光分路器_盒式封装 1×16", "光分路器_托盘式封装 1×16":
return "P" return "P"
case "光分路器_盒式封装(报价包括SC连接器插头以1.5m长的G.657A2B6a2、d2.0mm尾纤为基础) 1×32", "光分路器_托盘式封装(报价包括光纤适配器以1.5m长的G.657A2B6a2、d2.0mm尾纤SC/UPC类型适配器及插头为基础) 1×32", "光分路器_PLC 盒式 1×32 FC/UPC d2.0 1.5m": case "光分路器_盒式封装(报价包括SC连接器插头以1.5m长的G.657A2B6a2、d2.0mm尾纤为基础) 1×32", "光分路器_托盘式封装(报价包括光纤适配器以1.5m长的G.657A2B6a2、d2.0mm尾纤SC/UPC类型适配器及插头为基础) 1×32", "光分路器_PLC 盒式 1×32 FC/UPC d2.0 1.5m", "光分路器_插片式封装(报价包括光纤适配器以1.5m长的G.657A2B6a2、d2.0mm尾纤SC/UPC类型适配器及插头为基础) 1×32":
return "Q" return "Q"
case "光分路器_盒式封装(报价包括SC连接器插头以1.5m长的G.657A2B6a2、d2.0mm尾纤为基础) 1×64", "光分路器_托盘式封装(报价包括光纤适配器以1.5m长的G.657A2B6a2、d2.0mm尾纤SC/UPC类型适配器及插头为基础) 1×64", "光分路器_盒式封装 1×64", "光分路器_托盘式封装 1×64": case "光分路器_盒式封装(报价包括SC连接器插头以1.5m长的G.657A2B6a2、d2.0mm尾纤为基础) 1×64", "光分路器_托盘式封装(报价包括光纤适配器以1.5m长的G.657A2B6a2、d2.0mm尾纤SC/UPC类型适配器及插头为基础) 1×64", "光分路器_盒式封装 1×64", "光分路器_托盘式封装 1×64":
return "R" return "R"
case "光缆交接箱满配箱型005:传统型-落地式-复合材料SMC箱体-144芯_1030×570×310含底座", "144芯传统光缆交接箱SMC)_SC或FC型_含底座、14块12芯熔配一体化托盘组件束状纤、12个直熔单元": case "光缆交接箱满配箱型005:传统型-落地式-复合材料SMC箱体-144芯_1030×570×310含底座", "144芯传统光缆交接箱SMC)_SC或FC型_含底座、14块12芯熔配一体化托盘组件束状纤、12个直熔单元":
return "T" return "T"
case "光缆交接箱满配箱型006:传统型-落地式-复合材料SMC箱体-288芯_1550×760×370含底座", "288芯传统光缆交接箱SMC)_SC或FC型_含底座、28块12芯熔配一体化托盘组件束状纤、12个直熔单元": case "光缆交接箱满配箱型006:传统型-落地式-复合材料SMC箱体-288芯_1550×760×370含底座", "288芯传统光缆交接箱SMC)_SC或FC型_含底座、28块12芯熔配一体化托盘组件束状纤、12个直熔单元", "传统型光缆交接箱SMC箱体288芯_1200x760x370含满配喉箍、内背装件、线环组件、跳纤存储单元等未单独列出的所有必配零部件":
return "U" return "U"
case "光缆交接箱满配箱型008:传统型-落地式-复合材料SMC箱体-576芯双面_1550×760×630含底座", "576芯双面传统光缆交接箱SMC)_SC或FC型_含底座、56块12芯熔配一体化托盘组件束状纤、24个直熔单元": case "光缆交接箱满配箱型008:传统型-落地式-复合材料SMC箱体-576芯双面_1550×760×630含底座", "576芯双面传统光缆交接箱SMC)_SC或FC型_含底座、56块12芯熔配一体化托盘组件束状纤、24个直熔单元":
return "V" return "V"
case "SMC非金属光缆分纤箱-16路壁挂/抱杆_385x295x110mm-2个1:8插片式安装位-满配", "SMC非金属光缆分纤箱-12芯壁挂/抱杆_ 345x235x100mm-1个1:8盒式安装位-满配", "室外型壁挂式光纤分线箱(镀锌板)_12芯": case "SMC非金属光缆分纤箱-16路壁挂/抱杆_385x295x110mm-2个1:8插片式安装位-满配", "SMC非金属光缆分纤箱-12芯壁挂/抱杆_ 345x235x100mm-1个1:8盒式安装位-满配", "室外型壁挂式光纤分线箱(镀锌板)_12芯":
return "W" return "W"
case "室外型壁挂式光纤分线箱(镀锌板)_24芯": case "室外型壁挂式光纤分线箱(镀锌板)_24芯", "SMC非金属光缆分纤箱-24芯壁挂/抱杆_ 385x295x110mm-2个1:8盒式安装位-满配":
return "X" return "X"
case "盒式光纤分线箱_钣金550*400*130_熔接96芯配线96芯分光64路":
return "AA"
case "光缆接头盒_双端 12芯 4孔 架空", "光缆接头盒_双端 12芯 4孔 管道": case "光缆接头盒_双端 12芯 4孔 架空", "光缆接头盒_双端 12芯 4孔 管道":
return "AE" return "AE"
case "光缆接头盒_双端 24芯 4孔 管道", "光缆接头盒_双端 24芯 4孔 架空": case "光缆接头盒_双端 24芯 4孔 管道", "光缆接头盒_双端 24芯 4孔 架空":
@ -58,7 +60,7 @@ func getMatType(matName string) string {
return "AG" return "AG"
case "光跳纤_SC/PC接头": case "光跳纤_SC/PC接头":
return "AU" return "AU"
case "基准光跳纤1米外护套3mm不含接头_G.652型": case "基准光跳纤1米外护套3mm不含接头_G.652型", "基准光跳纤1米外护套2mm不含接头_G.652型":
return "AV" return "AV"
case "光跳纤_FC/PC接头": case "光跳纤_FC/PC接头":
return "AW" return "AW"
@ -82,28 +84,38 @@ func getMatType(matName string) string {
return "AX" return "AX"
case "光纤配线架_熔配一体化托盘12芯_公开市场", "综合配线架_熔配一体化托盘 12芯_公开市场": case "光纤配线架_熔配一体化托盘12芯_公开市场", "综合配线架_熔配一体化托盘 12芯_公开市场":
return "AY" return "AY"
case "熔配一体化子框_48芯": case "熔配一体化子框_48芯", "光纤配线架_48芯ODF配线架_带门含12芯熔配一体化子框4盘FC适配器含尾纤":
return "AZ" return "AZ"
case "光纤配线架_2000×840×300mm线路侧配置-满配576芯_FC型含8个72芯机框48块12芯熔配一体化托盘组件束状纤", "光纤配线架_2200x600x300mm线路侧配置-满配504芯_FC型含42块12芯熔配一体化托盘组件束状纤、3个存储单元": case "光纤配线架_2000×840×300mm线路侧配置-满配576芯_FC型含8个72芯机框48块12芯熔配一体化托盘组件束状纤", "光纤配线架_2200x600x300mm线路侧配置-满配504芯_FC型含42块12芯熔配一体化托盘组件束状纤、3个存储单元":
return "BA" return "BA"
case "华为-扩容-MDU-GPON MDU-LAN设备B+光模块_OSG020201含华为接入FTTx及铜线软件V2.00", "华为-扩容-MDU-XG PON MDU-LAN设备N1光模块_OSX10GG201含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G EPON MDU-LAN设备PR30光模块_OSX10GE202含华为接入FTTx及铜线软件V2.00", "扩容-MDU-XG PON MDU-LAN设备N1光模块_OSX10GG201含华为接入FTTx及铜线软件V2.00": case "华为-扩容-MDU-GPON MDU-LAN设备B+光模块_OSG020201含华为接入FTTx及铜线软件V2.00", "华为-扩容-MDU-XG PON MDU-LAN设备N1光模块_OSX10GG201含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G EPON MDU-LAN设备PR30光模块_OSX10GE202含华为接入FTTx及铜线软件V2.00", "扩容-MDU-XG PON MDU-LAN设备N1光模块_OSX10GG201含华为接入FTTx及铜线软件V2.00", "百兆光模块-_单纤单模20KM可支持数字诊断", "千兆单纤光模块_USFP-Gb/SS1x-D-R":
return "BB" return "BB"
case "华为-扩容-MDU-XG PON MDU-LAN盒式设备24端口GE_MA5821-24*GE口含华为接入FTTx及铜线软件V2.00", "扩容-MDU-XG PON MDU-LAN盒式设备24端口GE_MA5821-24*GE口含华为接入FTTx及铜线软件V2.00": case "华为-扩容-MDU-XG PON MDU-LAN盒式设备24端口GE_MA5821-24*GE口含华为接入FTTx及铜线软件V2.00", "扩容-MDU-XG PON MDU-LAN盒式设备24端口GE_MA5821-24*GE口含华为接入FTTx及铜线软件V2.00":
return "BC" return "BC"
case "华为-扩容-MDU-XG PON MDU-LAN盒式设备24端口GE+24端口POTS_MA5822-24*GE口+24*POTS口含华为接入FTTx及铜线软件V2.00", "扩容-MDU-XG PON MDU-LAN盒式设备24端口GE+24端口POTS_MA5822-24*GE口+24*POTS口含华为接入FTTx及铜线软件V2.00": case "华为-扩容-MDU-XG PON MDU-LAN盒式设备24端口GE+24端口POTS_MA5822-24*GE口+24*POTS口含华为接入FTTx及铜线软件V2.00", "扩容-MDU-XG PON MDU-LAN盒式设备24端口GE+24端口POTS_MA5822-24*GE口+24*POTS口含华为接入FTTx及铜线软件V2.00":
return "BD" return "BD"
case "扩容-MDU-10G PON MDU-LAN插卡设备POTS业务接口板64路POTS_MA5616-ASPB含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G PON MDU-LAN插卡设备系统软件_MA5616-H83SSYS01600含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G PON MDU-LAN插卡设备主机_MA5616含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G PON MDU-LAN插卡设备主控板含单PON口,适用于XG PON_MA5616-H833XP1A02含华为接入FTTx及铜线软件V2.00": case "扩容-MDU-10G PON MDU-LAN插卡设备POTS业务接口板64路POTS_MA5616-ASPB含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G PON MDU-LAN插卡设备系统软件_MA5616-H83SSYS01600含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G PON MDU-LAN插卡设备主机_MA5616含华为接入FTTx及铜线软件V2.00", "扩容-MDU-10G PON MDU-LAN插卡设备主控板含单PON口,适用于XG PON_MA5616-H833XP1A02含华为接入FTTx及铜线软件V2.00", "华为_有线接入设备.PON光传输设备_GPON MDU-DSL插卡设备主控板(MA5616)_CCUDG":
return "BE" return "BE"
case "华为-扩容-安装材料费_安装材料费(1%)", "安装材料费(以成交价为基准进行计算,仅在新建场景使用)_安装材料费(1%)": case "华为-扩容-安装材料费_安装材料费(1%)", "安装材料费(以成交价为基准进行计算,仅在新建场景使用)_安装材料费(1%)":
return "BF" return "BF"
case "华为-扩容-督导调测费_督导费(3%)", "督导调测费(以成交价为基准进行计算)_督导费(3%)": case "华为-扩容-督导调测费_督导费(3%)", "督导调测费(以成交价为基准进行计算)_督导费(3%)":
return "BG" return "BG"
case "光纤收发器_EB200-SD1", "光纤收发器_EB200-SD1C", "光纤收发器_EB200-SS1": case "华为_有线接入设备.PON光传输设备_E/GPON OLT设备上联光模块GE/10km(MA5680T/MA5683T)_OSG010001":
return "BH" return "BH"
case "金属光缆终端盒-12芯壁挂282*135*50mm_可装适配器12芯-满配", "光缆终端盒_12芯含法兰盘/适配器型、金属)": case "光纤收发器_EB200-SD1", "光纤收发器_EB200-SD1C", "光纤收发器_EB200-SS1", "千兆光纤收发器-_可网管,两个SFP接口支持掉电告警 端口自适应,不含光模块":
return "BI" return "BI"
case "数字通信电缆_超5类4对UTP电缆 HSYV5E 4*2*0.5": case "单槽小机箱-_220V交流供电或-48V直流供电":
return "BJ" return "BJ"
case "金属光缆终端盒-12芯壁挂282*135*50mm_可装适配器12芯-满配", "光缆终端盒_12芯含法兰盘/适配器型、金属)", "塑料光缆终端盒-12芯壁挂300*150*54_可装适配器12芯-满配":
return "BK"
case "数字通信电缆_超5类4对UTP电缆 HSYV5E 4*2*0.5":
return "BL"
case "搬运费_普通":
return "BM"
case "100对110语音配线架模块_100对110语音配线架模块":
return "BN"
case "光纤适配器_FC/PCSC/PC可选用于免跳纤光交":
return "BO"
default: default:
panic(exception.New(matName + " 无该类型材料,请添加!!!")) panic(exception.New(matName + " 无该类型材料,请添加!!!"))
return "" return ""

@ -3,17 +3,17 @@ package common
import ( import (
"cu-helper/wms/service" "cu-helper/wms/service"
"fmt" "fmt"
"github.com/mizuki1412/go-core-kit/library/mathkit" "path/filepath"
"strconv"
"time"
"github.com/mizuki1412/go-core-kit/service/configkit" "github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/mizuki1412/go-core-kit/service/logkit" "github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/spf13/cast" "github.com/spf13/cast"
"github.com/xuri/excelize/v2" "github.com/xuri/excelize/v2"
"path/filepath"
"strconv"
"time"
) )
func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*service.HighOptLossHistory) { func GenExcelFile(m1 map[string]*service.HighOptLossUnder) {
// Open the Excel file // Open the Excel file
open := configkit.GetString("loss.open", "") open := configkit.GetString("loss.open", "")
if open == "" { if open == "" {
@ -45,28 +45,6 @@ func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*servic
Bold: true, Bold: true,
}, },
}) })
styleRedFMT, err := f.NewStyle(&excelize.Style{
Alignment: &excelize.Alignment{
Horizontal: "center",
Vertical: "center",
},
Border: []excelize.Border{
{Type: "top", Style: 1, Color: "000000"},
{Type: "bottom", Style: 1, Color: "000000"},
{Type: "left", Style: 1, Color: "000000"},
{Type: "right", Style: 1, Color: "000000"},
},
Fill: excelize.Fill{
Type: "pattern",
Color: []string{"C00000"}, // RGB(192,0,0)
Pattern: 1,
},
Font: &excelize.Font{
Color: "FFFFFF", // 白色
Bold: true,
},
NumFmt: 10, // 或使用自定义格式代码:"0.00%"
})
styleYellow, err := f.NewStyle(&excelize.Style{ styleYellow, err := f.NewStyle(&excelize.Style{
Alignment: &excelize.Alignment{ Alignment: &excelize.Alignment{
Horizontal: "center", Horizontal: "center",
@ -107,27 +85,6 @@ func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*servic
Bold: true, Bold: true,
}, },
}) })
styleGreenFMT, err := f.NewStyle(&excelize.Style{
Alignment: &excelize.Alignment{
Horizontal: "center",
Vertical: "center",
},
Border: []excelize.Border{
{Type: "top", Style: 1, Color: "000000"},
{Type: "bottom", Style: 1, Color: "000000"},
{Type: "left", Style: 1, Color: "000000"},
{Type: "right", Style: 1, Color: "000000"},
},
Fill: excelize.Fill{
Type: "pattern",
Color: []string{"92D050"}, // RGB(146,208,80)
Pattern: 1,
},
Font: &excelize.Font{
Bold: true,
},
NumFmt: 10, // 或使用自定义格式代码:"0.00%"
})
// Cut and paste data from E4:E25 to C4:C25 // Cut and paste data from E4:E25 to C4:C25
//TODO //TODO
@ -176,17 +133,7 @@ func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*servic
f.SetCellStyle("汇总", "G"+strconv.Itoa(i), "G"+strconv.Itoa(i), styleRed) f.SetCellStyle("汇总", "G"+strconv.Itoa(i), "G"+strconv.Itoa(i), styleRed)
} }
f.SetCellValue("汇总", "H"+strconv.Itoa(i), data.Book) f.SetCellValue("汇总", "H"+strconv.Itoa(i), data.Book)
if data.Book == 0 { f.SetCellValue("汇总", "I"+strconv.Itoa(i), data.ApplyCount)
f.SetCellStyle("汇总", "H"+strconv.Itoa(i), "H"+strconv.Itoa(i), styleRed)
}
if data.Book > 0 {
f.SetCellStyle("汇总", "H"+strconv.Itoa(i), "H"+strconv.Itoa(i), styleGreen)
}
if data.Book == 0 && data.UnderCount == 0 {
f.SetCellStyle("汇总", "H"+strconv.Itoa(i), "H"+strconv.Itoa(i), styleGreen)
}
f.SetCellValue("汇总", "I"+strconv.Itoa(i), data.CantCount)
f.SetCellValue("汇总", "J"+strconv.Itoa(i), data.ApplyCount)
} else { } else {
f.SetCellValue("汇总", "E"+strconv.Itoa(i), 0) f.SetCellValue("汇总", "E"+strconv.Itoa(i), 0)
f.SetCellStyle("汇总", "E"+strconv.Itoa(i), "E"+strconv.Itoa(i), styleGreen) f.SetCellStyle("汇总", "E"+strconv.Itoa(i), "E"+strconv.Itoa(i), styleGreen)
@ -195,48 +142,7 @@ func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*servic
f.SetCellValue("汇总", "G"+strconv.Itoa(i), 0) f.SetCellValue("汇总", "G"+strconv.Itoa(i), 0)
f.SetCellStyle("汇总", "G"+strconv.Itoa(i), "G"+strconv.Itoa(i), styleGreen) f.SetCellStyle("汇总", "G"+strconv.Itoa(i), "G"+strconv.Itoa(i), styleGreen)
f.SetCellValue("汇总", "H"+strconv.Itoa(i), 0) f.SetCellValue("汇总", "H"+strconv.Itoa(i), 0)
f.SetCellStyle("汇总", "H"+strconv.Itoa(i), "H"+strconv.Itoa(i), styleGreen)
f.SetCellValue("汇总", "I"+strconv.Itoa(i), 0) f.SetCellValue("汇总", "I"+strconv.Itoa(i), 0)
f.SetCellValue("汇总", "J"+strconv.Itoa(i), 0)
}
if data, ok := m2[key]; ok {
f.SetCellValue("汇总", "K"+strconv.Itoa(i), data.Count)
if data1, ok1 := m1[key]; ok1 {
//有归档+有在途
f.SetCellValue("汇总", "L"+strconv.Itoa(i), data.Count+data1.Count)
v := mathkit.FloatRound(float64(data.Count)/(float64(data.Count)+float64(data1.Count)), 4)
f.SetCellValue("汇总", "M"+strconv.Itoa(i), v)
if v < 0.8 {
f.SetCellStyle("汇总", "M"+strconv.Itoa(i), "M"+strconv.Itoa(i), styleRedFMT)
}
if v >= 0.8 {
f.SetCellStyle("汇总", "M"+strconv.Itoa(i), "M"+strconv.Itoa(i), styleGreenFMT)
}
} else {
//有归档+无在途
f.SetCellValue("汇总", "L"+strconv.Itoa(i), data.Count)
v := mathkit.FloatRound(float64(data.Count)/(float64(data.Count)), 4)
f.SetCellValue("汇总", "M"+strconv.Itoa(i), v)
if v < 0.8 {
f.SetCellStyle("汇总", "M"+strconv.Itoa(i), "M"+strconv.Itoa(i), styleRedFMT)
}
if v >= 0.8 {
f.SetCellStyle("汇总", "M"+strconv.Itoa(i), "M"+strconv.Itoa(i), styleGreenFMT)
}
}
} else {
f.SetCellValue("汇总", "K"+strconv.Itoa(i), 0)
if data1, ok1 := m1[key]; ok1 {
//无归档+有在途
f.SetCellValue("汇总", "L"+strconv.Itoa(i), data1.Count)
f.SetCellValue("汇总", "M"+strconv.Itoa(i), 0)
f.SetCellStyle("汇总", "M"+strconv.Itoa(i), "M"+strconv.Itoa(i), styleRedFMT)
} else {
//无归档+无在途
f.SetCellValue("汇总", "L"+strconv.Itoa(i), 0)
f.SetCellValue("汇总", "M"+strconv.Itoa(i), 1)
f.SetCellStyle("汇总", "M"+strconv.Itoa(i), "M"+strconv.Itoa(i), styleGreenFMT)
}
} }
} }
@ -267,8 +173,8 @@ func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*servic
f.SetCellStyle("汇总", dCell, dCell, styleGreen) f.SetCellStyle("汇总", dCell, dCell, styleGreen)
} }
} }
// Sum columns C:H and place the results in row 26 // Sum columns C:I and place the results in row 26
for col := 'C'; col <= 'L'; col++ { for col := 'C'; col <= 'I'; col++ {
//TODO //TODO
sumCell := string(col) + "26" sumCell := string(col) + "26"
//TODO //TODO
@ -277,7 +183,7 @@ func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*servic
} }
// Recalculate the sum for each cell to ensure it appears without manual intervention // Recalculate the sum for each cell to ensure it appears without manual intervention
for col := 'C'; col <= 'L'; col++ { for col := 'C'; col <= 'I'; col++ {
//TODO //TODO
sumCell := string(col) + "26" sumCell := string(col) + "26"
value, err := f.CalcCellValue("汇总", sumCell) value, err := f.CalcCellValue("汇总", sumCell)
@ -287,11 +193,6 @@ func GenExcelFile(m1 map[string]*service.HighOptLossUnder, m2 map[string]*servic
f.SetCellValue("汇总", sumCell, cast.ToInt(value)) f.SetCellValue("汇总", sumCell, cast.ToInt(value))
} }
} }
//TODO 3行
done, _ := f.GetCellValue("汇总", "K26")
total, _ := f.GetCellValue("汇总", "L26")
f.SetCellValue("汇总", "M26", mathkit.FloatRound(cast.ToFloat64(done)/cast.ToFloat64(total), 4))
//设置表头 //设置表头
content := fmt.Sprintf("西湖智家光衰通报:%s", time.Now().Format("1月2日")) content := fmt.Sprintf("西湖智家光衰通报:%s", time.Now().Format("1月2日"))
f.SetCellValue("汇总", "A1", content) f.SetCellValue("汇总", "A1", content)

@ -1,61 +0,0 @@
package model
import (
"reflect"
"time"
)
/*
http://132.151.160.87:10010/wms-zj/gshuaiOrderQueryW/getOrderInfo.do
*/
/*
*/
type GetHighOptLossHistoryList struct {
Page string `map:"page"`
Rows string `map:"rows"`
OrgId string `map:"orgId"`
BusiType string `map:"busiType"`
QueryFlag string `map:"queryFlag"`
StartTime string `map:"startTime"`
EndTime string `map:"endTime"`
QueryType string `map:"queryType"`
WorkAction string `map:"workAction"`
}
func NewGetHighOptLossHistoryList() *GetHighOptLossHistoryList {
getHighOptLossHistoryList := new(GetHighOptLossHistoryList)
getHighOptLossHistoryList.Page = "1"
getHighOptLossHistoryList.Rows = "10000"
getHighOptLossHistoryList.OrgId = "330106"
getHighOptLossHistoryList.BusiType = "11"
getHighOptLossHistoryList.QueryFlag = "2"
getHighOptLossHistoryList.StartTime = "2024-12-28 15:40:49" //TODO 以后每年要修改这个
getHighOptLossHistoryList.EndTime = time.Now().Format("2006-01-02 15:04:05")
getHighOptLossHistoryList.QueryType = "-1"
getHighOptLossHistoryList.WorkAction = "0"
return getHighOptLossHistoryList
}
func (th *GetHighOptLossHistoryList) GenReqParam() map[string]string {
return th.structToMap()
}
func (th *GetHighOptLossHistoryList) structToMap() map[string]string {
result := make(map[string]string)
t := reflect.TypeOf(*th)
v := reflect.ValueOf(*th)
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
// Use the tag value as the key in the map, if it exists; otherwise, use the field name.
tag := field.Tag.Get("map")
if tag == "" {
tag = field.Name
}
result[tag] = value.String()
}
return result
}

@ -2,7 +2,6 @@ package model
import ( import (
"reflect" "reflect"
"time"
) )
/* /*
@ -14,30 +13,26 @@ http://132.151.160.87:10010/wms-zj/gshuaiOrderQueryW/getOrderInfo.do
*/ */
type GetHighOptLossUnderList struct { type GetHighOptLossUnderList struct {
Page string `map:"page"` OrgId string `map:"orgId"`
Rows string `map:"rows"` BookFlag string `map:"bookFlag"`
OrgId string `map:"orgId"` OrderParam string `map:"orderparam"`
BusiType string `map:"busiType"` OrderDesc string `map:"orderDesc"`
QueryFlag string `map:"queryFlag"` ReceiveFlag string `map:"receiveFlag"`
StartTime string `map:"startTime"` Rows string `map:"rows"`
EndTime string `map:"endTime"` Page string `map:"page"`
OrdStatus string `map:"ordStatus"` QueryType string `map:"queryType"`
QueryType string `map:"queryType"`
WorkAction string `map:"workAction"`
} }
func NewGetHighOptLossUnderList() *GetHighOptLossUnderList { func NewGetHighOptLossUnderList() *GetHighOptLossUnderList {
getHighOptLossUnderList := new(GetHighOptLossUnderList) getHighOptLossUnderList := new(GetHighOptLossUnderList)
getHighOptLossUnderList.Page = "1"
getHighOptLossUnderList.Rows = "10000"
getHighOptLossUnderList.OrgId = "330106" getHighOptLossUnderList.OrgId = "330106"
getHighOptLossUnderList.BusiType = "11" getHighOptLossUnderList.BookFlag = "-1"
getHighOptLossUnderList.QueryFlag = "1" getHighOptLossUnderList.OrderParam = "ACCEPT_TIME"
getHighOptLossUnderList.StartTime = "2024-12-28 15:40:49" //TODO 以后每年要修改这个 getHighOptLossUnderList.OrderDesc = "DESC"
getHighOptLossUnderList.EndTime = time.Now().Format("2006-01-02 15:04:05") getHighOptLossUnderList.ReceiveFlag = "0"
getHighOptLossUnderList.OrdStatus = "0" getHighOptLossUnderList.Rows = "10000"
getHighOptLossUnderList.Page = "1"
getHighOptLossUnderList.QueryType = "-1" getHighOptLossUnderList.QueryType = "-1"
getHighOptLossUnderList.WorkAction = "0"
return getHighOptLossUnderList return getHighOptLossUnderList
} }

@ -2,10 +2,11 @@ package service
import ( import (
"cu-helper/wms/model" "cu-helper/wms/model"
"time"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
"github.com/mizuki1412/go-core-kit/class/exception" "github.com/mizuki1412/go-core-kit/class/exception"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"time"
) )
//获取光衰数据列表 //获取光衰数据列表
@ -13,18 +14,13 @@ import (
// HighOptLossUnder 在途光衰单 // HighOptLossUnder 在途光衰单
type HighOptLossUnder struct { type HighOptLossUnder struct {
Count int //所有在途单 Count int //所有在途单
UnderCount int //施工中在途单,包含不可处理 UnderCount int //施工中在途单
ApplyCount int //人工回访在途单 ApplyCount int //人工回访在途单
CantCount int //回单不可处理
DurationOverSeven int DurationOverSeven int
DurationOverFifteen int DurationOverFifteen int
Book int Book int
} }
type HighOptLossHistory struct {
Count int
}
// ReqGetHighOptLossUnderList 查询在途光衰单(包含施工中、人工回访、综合调度等全部未归档状态) // ReqGetHighOptLossUnderList 查询在途光衰单(包含施工中、人工回访、综合调度等全部未归档状态)
func ReqGetHighOptLossUnderList() map[string]*HighOptLossUnder { func ReqGetHighOptLossUnderList() map[string]*HighOptLossUnder {
h := model.NewHeader() h := model.NewHeader()
@ -33,7 +29,7 @@ func ReqGetHighOptLossUnderList() map[string]*HighOptLossUnder {
form := f.GenReqParam() form := f.GenReqParam()
client := resty.New().SetRetryCount(5).SetRetryWaitTime(10 * time.Second) client := resty.New().SetRetryCount(5).SetRetryWaitTime(10 * time.Second)
resp, err := client.R(). resp, err := client.R().
SetHeaders(header).SetFormData(form).Post("http://132.151.160.87:10010/wms-zj/gshuaiOrderQueryW/getOrderInfo.do") SetHeaders(header).SetFormData(form).Post("http://132.151.160.87:10010/wms-zj/gShuaiReply/gshuaiOrderReplyListAjax.do")
if err != nil { if err != nil {
panic(exception.New(err.Error())) panic(exception.New(err.Error()))
} }
@ -44,58 +40,22 @@ func ReqGetHighOptLossUnderList() map[string]*HighOptLossUnder {
m[v.Get("DEAL_MAN").String()] = &HighOptLossUnder{} m[v.Get("DEAL_MAN").String()] = &HighOptLossUnder{}
} }
m[v.Get("DEAL_MAN").String()].Count++ m[v.Get("DEAL_MAN").String()].Count++
if v.Get("STATUS").String() == "施工处理" { if v.Get("STATUS_NAME").String() == "施工处理" {
m[v.Get("DEAL_MAN").String()].UnderCount++ m[v.Get("DEAL_MAN").String()].UnderCount++
if v.Get("REPLY_TYPE").String() == "不可处理" || v.Get("REPLY_TYPE").String() == "不可整治" {
m[v.Get("DEAL_MAN").String()].CantCount++
m[v.Get("DEAL_MAN").String()].UnderCount--
}
duration := v.Get("TIMELONGS").Int() duration := v.Get("TIMELONGS").Int()
if duration >= 604800 { if duration >= 604800 {
m[v.Get("DEAL_MAN").String()].DurationOverSeven++ m[v.Get("DEAL_MAN").String()].DurationOverSeven++
if v.Get("REPLY_TYPE").String() == "不可处理" || v.Get("REPLY_TYPE").String() == "不可整治" {
m[v.Get("DEAL_MAN").String()].DurationOverSeven--
}
} }
if duration >= 1296000 { if duration >= 1296000 {
m[v.Get("DEAL_MAN").String()].DurationOverFifteen++ m[v.Get("DEAL_MAN").String()].DurationOverFifteen++
if v.Get("REPLY_TYPE").String() == "不可处理" || v.Get("REPLY_TYPE").String() == "不可整治" {
m[v.Get("DEAL_MAN").String()].DurationOverFifteen--
}
} }
if v.Get("BOOK_TIME").String() != "" { if v.Get("BOOK_TIME").String() != "" {
m[v.Get("DEAL_MAN").String()].Book++ m[v.Get("DEAL_MAN").String()].Book++
if v.Get("REPLY_TYPE").String() == "不可处理" || v.Get("REPLY_TYPE").String() == "不可整治" {
m[v.Get("DEAL_MAN").String()].Book--
}
} }
} }
if v.Get("STATUS").String() == "人工回访" { if v.Get("STATUS_NAME").String() == "人工回访" {
m[v.Get("DEAL_MAN").String()].ApplyCount++ m[v.Get("DEAL_MAN").String()].ApplyCount++
} }
} }
return m return m
} }
// ReqGetHighOptLossHistoryList 查询历史光衰单
func ReqGetHighOptLossHistoryList() map[string]*HighOptLossHistory {
h := model.NewHeader()
header := h.GenReqParam()
f := model.NewGetHighOptLossHistoryList()
form := f.GenReqParam()
client := resty.New().SetRetryCount(5).SetRetryWaitTime(10 * time.Second)
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post("http://132.151.160.87:10010/wms-zj/gshuaiOrderQueryW/getOrderInfo.do")
if err != nil {
panic(exception.New(err.Error()))
}
data := gjson.Get(resp.String(), "list").Array()
m := make(map[string]*HighOptLossHistory)
for _, v := range data {
if m[v.Get("DEAL_MAN").String()] == nil {
m[v.Get("DEAL_MAN").String()] = &HighOptLossHistory{}
}
m[v.Get("DEAL_MAN").String()].Count++
}
return m
}

Loading…
Cancel
Save