Files
bj_power/bj_power_mes/internal/logic/processseq.go
T

58 lines
1.4 KiB
Go
Raw Normal View History

package logic
import (
"errors"
"sort"
"strconv"
"strings"
)
// FullProcessSeq 全部 12 个工位的完整组合(按顺序执行)
const FullProcessSeq = "1,2,3,4,5,6,7,8,9,10,11,12"
// ParseProcessSeq 解析工位组合字符串为升序去重的工位码列表。
// 唯一格式:逗号分隔 "1,3,5" / "10,11,12"。传送带不回走,故组合天然按工位号升序执行。
func ParseProcessSeq(s string) []int {
s = strings.TrimSpace(s)
if s == "" {
return nil
}
seen := map[int]bool{}
out := make([]int, 0, 12)
for _, p := range strings.Split(s, ",") {
p = strings.TrimSpace(p)
if p == "" {
continue
}
n, err := strconv.Atoi(p)
if err != nil || n < 1 || n > 12 || seen[n] {
continue
}
seen[n] = true
out = append(out, n)
}
sort.Ints(out)
return out
}
// NormalizeProcessSeq 规范化:解析后重排为逗号分隔升序,非法/空返回空串。
func NormalizeProcessSeq(s string) string {
codes := ParseProcessSeq(s)
if len(codes) == 0 {
return ""
}
parts := make([]string, len(codes))
for i, c := range codes {
parts[i] = strconv.Itoa(c)
}
return strings.Join(parts, ",")
}
// ValidateProcessSeq 校验工位组合:非空、1~12 升序执行。
func ValidateProcessSeq(s string) error {
if len(ParseProcessSeq(s)) == 0 {
return errors.New("工位组合不能为空,请至少选择一个工位")
}
return nil
}