合并分支 'dev' 到 'test'
Dev 查看合并请求 !17
正在显示
1 个修改的文件
包含
77 行增加
和
87 行删除
@@ -701,14 +701,6 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | @@ -701,14 +701,6 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | ||
701 | file, h, _ := c.GetFile("file") | 701 | file, h, _ := c.GetFile("file") |
702 | companyId := c.GetUserCompany() | 702 | companyId := c.GetUserCompany() |
703 | 703 | ||
704 | - // Json数据解析 | ||
705 | - //jsonMap := make(map[string]interface{}) | ||
706 | - //err := json.Unmarshal([]byte(where), &jsonMap) | ||
707 | - //if err != nil { | ||
708 | - // logs.Error(err) | ||
709 | - // c.ResponseError(errors.New("json数据解析失败")) | ||
710 | - //} | ||
711 | - | ||
712 | if typeCode != "PARTNER_ORDER_FILE" { | 704 | if typeCode != "PARTNER_ORDER_FILE" { |
713 | c.ResponseError(errors.New("类型编码错误")) | 705 | c.ResponseError(errors.New("类型编码错误")) |
714 | } | 706 | } |
@@ -779,41 +771,53 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | @@ -779,41 +771,53 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | ||
779 | 771 | ||
780 | // 必填项校验 | 772 | // 必填项校验 |
781 | nullLine := make([]interface{}, 0) | 773 | nullLine := make([]interface{}, 0) |
774 | + nullCell := make([]interface{}, 0) | ||
782 | nullFlag := false | 775 | nullFlag := false |
783 | for i, row := range rows { | 776 | for i, row := range rows { |
784 | if i > 2 && row != nil { | 777 | if i > 2 && row != nil { |
785 | rowCnt++ | 778 | rowCnt++ |
786 | - if len(row) == constant.EXCEL_COLUMN { // 中间空字符校验 | 779 | + fmt.Print(len(row), "\n") |
780 | + if len(row) == constant.EXCEL_COLUMN { // 必填项内容为空 | ||
787 | var tmpRow = row | 781 | var tmpRow = row |
788 | var myRow []string | 782 | var myRow []string |
789 | for j, _ := range row { | 783 | for j, _ := range row { |
790 | if j != 7 { // 业务员抽成比例非必填 | 784 | if j != 7 { // 业务员抽成比例非必填 |
791 | if row[j] == "" || row[j] == " " { // 空字符补位 | 785 | if row[j] == "" || row[j] == " " { // 空字符补位 |
792 | tmpRow[j] = "" | 786 | tmpRow[j] = "" |
787 | + col := strconv.Itoa(j + 1) | ||
788 | + nullCell = append(nullCell, col) | ||
793 | nullFlag = true | 789 | nullFlag = true |
794 | } | 790 | } |
795 | } | 791 | } |
796 | } | 792 | } |
797 | if nullFlag { | 793 | if nullFlag { |
798 | - myRow = append(myRow, "必填项不能为空") // 错误信息 | ||
799 | s := strconv.Itoa(i + 1) | 794 | s := strconv.Itoa(i + 1) |
800 | - myRow = append(myRow, s) // 行号 | ||
801 | - myRow = append(myRow, tmpRow...) // 错误行数据 | 795 | + b := strings.Replace(strings.Trim(fmt.Sprint(nullCell), "[]"), " ", ",", -1) |
796 | + myRow = append(myRow, "第"+s+"行的第"+b+"列必填项为空") // 错误信息 | ||
797 | + myRow = append(myRow, s) // 行号 | ||
798 | + myRow = append(myRow, tmpRow...) // 错误行数据 | ||
802 | nullLine = append(nullLine, myRow) | 799 | nullLine = append(nullLine, myRow) |
803 | nullFlag = false | 800 | nullFlag = false |
804 | } | 801 | } |
805 | - } else if len(row) > 0 && len(row) < constant.EXCEL_COLUMN { // 尾部空字符校验 | 802 | + } else if len(row) > 0 && len(row) < constant.EXCEL_COLUMN { // 必填项不存在 |
806 | var myRow []string | 803 | var myRow []string |
807 | - for k := 0; k < constant.EXCEL_COLUMN-len(row); k++ { // 空字符补位 | ||
808 | - myRow = append(myRow, "") | ||
809 | - } | ||
810 | - myRow = append(myRow, "必填项不能为空") // 错误信息 | 804 | + myRow = append(myRow, "必填项为空") |
811 | s := strconv.Itoa(i + 1) | 805 | s := strconv.Itoa(i + 1) |
812 | myRow = append(myRow, s) // 行号 | 806 | myRow = append(myRow, s) // 行号 |
813 | myRow = append(myRow, row...) // 错误行数据 | 807 | myRow = append(myRow, row...) // 错误行数据 |
808 | + emptyCell := make([]interface{}, 0) | ||
809 | + // 错误信息 | ||
810 | + for k := 0; k < constant.EXCEL_COLUMN-len(row); k++ { // 空字符补位 | ||
811 | + myRow = append(myRow, "") | ||
812 | + } | ||
813 | + for k, cell := range myRow { | ||
814 | + if k != 0 && cell == "" { | ||
815 | + emptyCell = append(emptyCell, k-1) | ||
816 | + } | ||
817 | + } | ||
818 | + b := strings.Replace(strings.Trim(fmt.Sprint(emptyCell), "[]"), " ", ",", -1) | ||
819 | + myRow[0] = "第" + s + "行的第" + b + "列必填项为空" | ||
814 | nullLine = append(nullLine, myRow) | 820 | nullLine = append(nullLine, myRow) |
815 | - } else { | ||
816 | - | ||
817 | } | 821 | } |
818 | } | 822 | } |
819 | } | 823 | } |
@@ -838,17 +842,21 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | @@ -838,17 +842,21 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | ||
838 | if i > 2 && row != nil && len(row) == constant.EXCEL_COLUMN { // 数据行 | 842 | if i > 2 && row != nil && len(row) == constant.EXCEL_COLUMN { // 数据行 |
839 | var myRow []string | 843 | var myRow []string |
840 | for j, cell := range row { | 844 | for j, cell := range row { |
845 | + | ||
846 | + r := strconv.Itoa(i + 1) | ||
847 | + c := strconv.Itoa(j + 1) | ||
848 | + | ||
841 | switch j { | 849 | switch j { |
842 | case 0, 1, 2, 3, 4, 5, 8: // 订单号、发货单号、客户名称、订单区域、编号、合伙人、产品名称长度校验 | 850 | case 0, 1, 2, 3, 4, 5, 8: // 订单号、发货单号、客户名称、订单区域、编号、合伙人、产品名称长度校验 |
843 | { | 851 | { |
844 | cellStr := strings.TrimSpace(cell) | 852 | cellStr := strings.TrimSpace(cell) |
845 | lenCellStr := utf8.RuneCountInString(cellStr) | 853 | lenCellStr := utf8.RuneCountInString(cellStr) |
854 | + | ||
846 | if lenCellStr > 50 { | 855 | if lenCellStr > 50 { |
847 | var tmpRow []string | 856 | var tmpRow []string |
848 | - tmpRow = append(tmpRow, tableHeader[j+2]+"长度超过50位,请重新输入") // 错误信息 | ||
849 | - s := strconv.Itoa(i + 1) | ||
850 | - tmpRow = append(tmpRow, s) // 行号 | ||
851 | - tmpRow = append(tmpRow, row...) // 错误行数据 | 857 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列"+tableHeader[j+2]+"长度超过50位,请重新输入") // 错误信息 |
858 | + tmpRow = append(tmpRow, r) // 行号 | ||
859 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
852 | myRow = tmpRow | 860 | myRow = tmpRow |
853 | } | 861 | } |
854 | } | 862 | } |
@@ -856,139 +864,121 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | @@ -856,139 +864,121 @@ func (c *OrderInfoController) ImportOrderFromExcel() { | ||
856 | { | 864 | { |
857 | if !utils.IsContain(partnerType, cell) { | 865 | if !utils.IsContain(partnerType, cell) { |
858 | var tmpRow []string | 866 | var tmpRow []string |
859 | - tmpRow = append(tmpRow, "合伙人类型须为以下类型:事业合伙、业务合伙、研发合伙、业务-产品应用合伙") // 错误信息 | ||
860 | - s := strconv.Itoa(i + 1) | ||
861 | - tmpRow = append(tmpRow, s) // 行号 | ||
862 | - tmpRow = append(tmpRow, row...) // 错误行数据 | 867 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人类型错误,合伙人类型必须为以下类型:事业合伙、业务合伙、研发合伙、业务-产品应用合伙") // 错误信息 |
868 | + tmpRow = append(tmpRow, r) // 行号 | ||
869 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
863 | myRow = tmpRow | 870 | myRow = tmpRow |
864 | } | 871 | } |
865 | } | 872 | } |
866 | case 7: // 业务员抽成比例,非必填,精确到小数点后两位 | 873 | case 7: // 业务员抽成比例,非必填,精确到小数点后两位 |
867 | { | 874 | { |
868 | - var ( | ||
869 | - typeErrFlag bool | ||
870 | - lenErrFlag bool | ||
871 | - ratioErrFlag bool | ||
872 | - ) | ||
873 | if len(cell) > 0 { | 875 | if len(cell) > 0 { |
876 | + | ||
874 | // 参数类型转换 | 877 | // 参数类型转换 |
875 | shareRatio, err := strconv.ParseFloat(cell, 64) | 878 | shareRatio, err := strconv.ParseFloat(cell, 64) |
876 | if err != nil { | 879 | if err != nil { |
877 | - typeErrFlag = true | 880 | + var tmpRow []string |
881 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列业务员抽成比例格式错误,业务员抽成比例必须为数字") // 错误信息 | ||
882 | + tmpRow = append(tmpRow, r) // 行号 | ||
883 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
884 | + myRow = tmpRow | ||
878 | } | 885 | } |
879 | 886 | ||
880 | // 比例不能超过100% | 887 | // 比例不能超过100% |
881 | if shareRatio > 100 { | 888 | if shareRatio > 100 { |
882 | - ratioErrFlag = true | 889 | + var tmpRow []string |
890 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列业务员抽成比例超过限额,请输入正确的业务员抽成比例,并保留两位小数") // 错误信息 | ||
891 | + tmpRow = append(tmpRow, r) // 行号 | ||
892 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
893 | + myRow = tmpRow | ||
883 | } | 894 | } |
884 | 895 | ||
885 | // 长度校验 | 896 | // 长度校验 |
886 | regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$` | 897 | regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$` |
887 | ok := regexp.MustCompile(regexpStr).MatchString(cell) | 898 | ok := regexp.MustCompile(regexpStr).MatchString(cell) |
888 | if !ok { | 899 | if !ok { |
889 | - lenErrFlag = true | ||
890 | - } | ||
891 | - | ||
892 | - if typeErrFlag || lenErrFlag || ratioErrFlag { | ||
893 | var tmpRow []string | 900 | var tmpRow []string |
894 | - tmpRow = append(tmpRow, "业务员抽成比例格式错误,请输入正确的业务员抽成比例,保留两位小数") // 错误信息 | ||
895 | - s := strconv.Itoa(i + 1) | ||
896 | - tmpRow = append(tmpRow, s) // 行号 | ||
897 | - tmpRow = append(tmpRow, row...) // 错误行数据 | 901 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列业务员抽成比例超过最大长度,请输入正确的业务员抽成比例,并保留两位小数") // 错误信息 |
902 | + tmpRow = append(tmpRow, r) // 行号 | ||
903 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
898 | myRow = tmpRow | 904 | myRow = tmpRow |
899 | - typeErrFlag = false | ||
900 | - lenErrFlag = false | ||
901 | - ratioErrFlag = false | ||
902 | } | 905 | } |
903 | } | 906 | } |
904 | } | 907 | } |
905 | case 9: // 数量不超过16位正整数 | 908 | case 9: // 数量不超过16位正整数 |
906 | { | 909 | { |
907 | - var ( | ||
908 | - typeErrFlag bool | ||
909 | - lenErrFlag bool | ||
910 | - ) | ||
911 | - | ||
912 | //参数类型转换 | 910 | //参数类型转换 |
913 | orderNum, err := strconv.ParseInt(cell, 10, 64) | 911 | orderNum, err := strconv.ParseInt(cell, 10, 64) |
914 | if err != nil { | 912 | if err != nil { |
915 | - typeErrFlag = true | 913 | + var tmpRow []string |
914 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品数量格式错误,产品数量必须整数") // 错误信息 | ||
915 | + tmpRow = append(tmpRow, r) // 行号 | ||
916 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
917 | + myRow = tmpRow | ||
916 | } | 918 | } |
917 | 919 | ||
918 | // 长度校验 | 920 | // 长度校验 |
919 | if orderNum > 1e16 { | 921 | if orderNum > 1e16 { |
920 | - lenErrFlag = true | ||
921 | - } | ||
922 | - | ||
923 | - if typeErrFlag || lenErrFlag { | ||
924 | var tmpRow []string | 922 | var tmpRow []string |
925 | - tmpRow = append(tmpRow, "数量长度超过最大限制十六位整数,请重新填写") // 错误信息 | ||
926 | - s := strconv.Itoa(i + 1) | ||
927 | - tmpRow = append(tmpRow, s) // 行号 | ||
928 | - tmpRow = append(tmpRow, row...) // 错误行数据 | 923 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品数量长度超过最大限制十六位整数,请重新填写") // 错误信息 |
924 | + tmpRow = append(tmpRow, r) // 行号 | ||
925 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
929 | myRow = tmpRow | 926 | myRow = tmpRow |
930 | - typeErrFlag = false | ||
931 | - lenErrFlag = false | ||
932 | } | 927 | } |
933 | } | 928 | } |
934 | case 10: // 单价,精确到小数点后两位,小数点左侧最多可输入16位数字 | 929 | case 10: // 单价,精确到小数点后两位,小数点左侧最多可输入16位数字 |
935 | { | 930 | { |
931 | + | ||
936 | // 参数类型转换 | 932 | // 参数类型转换 |
937 | univalent, err := strconv.ParseFloat(cell, 64) | 933 | univalent, err := strconv.ParseFloat(cell, 64) |
938 | if err != nil { | 934 | if err != nil { |
939 | var tmpRow []string | 935 | var tmpRow []string |
940 | - tmpRow = append(tmpRow, "单价格式错误,请输入正确的单价,保留两位小数点,小数点前面不能超过十六位数字") // 错误信息 | ||
941 | - s := strconv.Itoa(i + 1) | ||
942 | - tmpRow = append(tmpRow, s) // 行号 | ||
943 | - tmpRow = append(tmpRow, row...) // 错误行数据 | 936 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列单价格式错误,产品单价必须为数字类型") // 错误信息 |
937 | + tmpRow = append(tmpRow, r) // 行号 | ||
938 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
944 | myRow = tmpRow | 939 | myRow = tmpRow |
945 | } | 940 | } |
941 | + | ||
946 | // 长度校验 | 942 | // 长度校验 |
947 | if univalent >= 1e16 { | 943 | if univalent >= 1e16 { |
948 | var tmpRow []string | 944 | var tmpRow []string |
949 | - tmpRow = append(tmpRow, "单价格式错误,请输入正确的单价,保留两位小数点,小数点前面不能超过十六位数字") // 错误信息 | ||
950 | - s := strconv.Itoa(i + 1) | ||
951 | - tmpRow = append(tmpRow, s) // 行号 | ||
952 | - tmpRow = append(tmpRow, row...) // 错误行数据 | 945 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品单价超过最大限制,产品单价小数点前面不能超过十六位数字,并保留两位小数") // 错误信息 |
946 | + tmpRow = append(tmpRow, r) // 行号 | ||
947 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
953 | myRow = tmpRow | 948 | myRow = tmpRow |
954 | } | 949 | } |
955 | } | 950 | } |
956 | case 11: // 合伙人分红比例,精确到小数点后两位 | 951 | case 11: // 合伙人分红比例,精确到小数点后两位 |
957 | { | 952 | { |
958 | - var ( | ||
959 | - typeErrFlag bool | ||
960 | - lenErrFlag bool | ||
961 | - ratioErrFlag bool | ||
962 | - ) | ||
963 | 953 | ||
964 | //参数类型转换 | 954 | //参数类型转换 |
965 | partnerRatio, err := strconv.ParseFloat(cell, 64) | 955 | partnerRatio, err := strconv.ParseFloat(cell, 64) |
966 | if err != nil { | 956 | if err != nil { |
967 | - typeErrFlag = true | 957 | + var tmpRow []string |
958 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人分红比例类型错误,合伙人分红比例必须为数字") // 错误信息 | ||
959 | + tmpRow = append(tmpRow, r) // 行号 | ||
960 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
961 | + myRow = tmpRow | ||
968 | } | 962 | } |
969 | 963 | ||
970 | // 合伙人分红比例超额 | 964 | // 合伙人分红比例超额 |
971 | if partnerRatio > 100 { | 965 | if partnerRatio > 100 { |
972 | - ratioErrFlag = true | 966 | + var tmpRow []string |
967 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人分红比例超过限额,请输入正确的合伙人分红比例,并保留两位小数") // 错误信息 | ||
968 | + tmpRow = append(tmpRow, r) // 行号 | ||
969 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
970 | + myRow = tmpRow | ||
973 | } | 971 | } |
974 | 972 | ||
975 | // 长度判断 | 973 | // 长度判断 |
976 | regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$` | 974 | regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$` |
977 | ok := regexp.MustCompile(regexpStr).MatchString(cell) | 975 | ok := regexp.MustCompile(regexpStr).MatchString(cell) |
978 | if !ok { | 976 | if !ok { |
979 | - lenErrFlag = true | ||
980 | - } | ||
981 | - | ||
982 | - if typeErrFlag || lenErrFlag || ratioErrFlag { | ||
983 | var tmpRow []string | 977 | var tmpRow []string |
984 | - tmpRow = append(tmpRow, "合伙人分红比例格式错误,请输入正确的合伙人分红比例,保留两位小数") // 错误信息 | ||
985 | - s := strconv.Itoa(i + 1) | ||
986 | - tmpRow = append(tmpRow, s) // 行号 | ||
987 | - tmpRow = append(tmpRow, row...) // 错误行数据 | 978 | + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人分红比例超过最大长度,请输入正确的合伙人分红比例,并保留两位小数") // 错误信息 |
979 | + tmpRow = append(tmpRow, r) // 行号 | ||
980 | + tmpRow = append(tmpRow, row...) // 错误行数据 | ||
988 | myRow = tmpRow | 981 | myRow = tmpRow |
989 | - typeErrFlag = false | ||
990 | - lenErrFlag = false | ||
991 | - ratioErrFlag = false | ||
992 | } | 982 | } |
993 | } | 983 | } |
994 | } | 984 | } |
-
请 注册 或 登录 后发表评论