作者 陈志颖

fix:修改表格内容校验,增加列显示

@@ -779,28 +779,28 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -779,28 +779,28 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
779 779
780 // 必填项校验 780 // 必填项校验
781 nullLine := make([]interface{}, 0) 781 nullLine := make([]interface{}, 0)
782 - nullFlag := false  
783 for i, row := range rows { 782 for i, row := range rows {
784 if i > 2 && row != nil { 783 if i > 2 && row != nil {
785 rowCnt++ 784 rowCnt++
786 if len(row) == constant.EXCEL_COLUMN { // 中间空字符校验 785 if len(row) == constant.EXCEL_COLUMN { // 中间空字符校验
  786 + // 单个空格
  787 +
  788 + // 多个空格
  789 +
787 var tmpRow = row 790 var tmpRow = row
788 var myRow []string 791 var myRow []string
789 for j, _ := range row { 792 for j, _ := range row {
790 if j != 7 { // 业务员抽成比例非必填 793 if j != 7 { // 业务员抽成比例非必填
791 - if row[j] == "" || row[j] == " " { // 空字符补位 794 + if row[j] == "" || row[j] == " " { // 空字符补位s
792 tmpRow[j] = "" 795 tmpRow[j] = ""
793 - nullFlag = true  
794 - }  
795 - }  
796 - }  
797 - if nullFlag {  
798 - myRow = append(myRow, "必填项不能为空") // 错误信息  
799 - s := strconv.Itoa(i + 1)  
800 - myRow = append(myRow, s) // 行号 796 + r := strconv.Itoa(i + 1)
  797 + c := strconv.Itoa(j + 1)
  798 + myRow = append(myRow, "第"+r+"行的第"+c+"列必填项为空") // 错误信息
  799 + myRow = append(myRow, r) // 行号
801 myRow = append(myRow, tmpRow...) // 错误行数据 800 myRow = append(myRow, tmpRow...) // 错误行数据
802 nullLine = append(nullLine, myRow) 801 nullLine = append(nullLine, myRow)
803 - nullFlag = false 802 + }
  803 + }
804 } 804 }
805 } else if len(row) > 0 && len(row) < constant.EXCEL_COLUMN { // 尾部空字符校验 805 } else if len(row) > 0 && len(row) < constant.EXCEL_COLUMN { // 尾部空字符校验
806 var myRow []string 806 var myRow []string
@@ -838,16 +838,20 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -838,16 +838,20 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
838 if i > 2 && row != nil && len(row) == constant.EXCEL_COLUMN { // 数据行 838 if i > 2 && row != nil && len(row) == constant.EXCEL_COLUMN { // 数据行
839 var myRow []string 839 var myRow []string
840 for j, cell := range row { 840 for j, cell := range row {
  841 +
  842 + r := strconv.Itoa(i + 1)
  843 + c := strconv.Itoa(j + 1)
  844 +
841 switch j { 845 switch j {
842 case 0, 1, 2, 3, 4, 5, 8: // 订单号、发货单号、客户名称、订单区域、编号、合伙人、产品名称长度校验 846 case 0, 1, 2, 3, 4, 5, 8: // 订单号、发货单号、客户名称、订单区域、编号、合伙人、产品名称长度校验
843 { 847 {
844 cellStr := strings.TrimSpace(cell) 848 cellStr := strings.TrimSpace(cell)
845 lenCellStr := utf8.RuneCountInString(cellStr) 849 lenCellStr := utf8.RuneCountInString(cellStr)
  850 +
846 if lenCellStr > 50 { 851 if lenCellStr > 50 {
847 var tmpRow []string 852 var tmpRow []string
848 - tmpRow = append(tmpRow, tableHeader[j+2]+"长度超过50位,请重新输入") // 错误信息  
849 - s := strconv.Itoa(i + 1)  
850 - tmpRow = append(tmpRow, s) // 行号 853 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列"+tableHeader[j+2]+"长度超过50位,请重新输入") // 错误信息
  854 + tmpRow = append(tmpRow, r) // 行号
851 tmpRow = append(tmpRow, row...) // 错误行数据 855 tmpRow = append(tmpRow, row...) // 错误行数据
852 myRow = tmpRow 856 myRow = tmpRow
853 } 857 }
@@ -856,139 +860,121 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -856,139 +860,121 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
856 { 860 {
857 if !utils.IsContain(partnerType, cell) { 861 if !utils.IsContain(partnerType, cell) {
858 var tmpRow []string 862 var tmpRow []string
859 - tmpRow = append(tmpRow, "合伙人类型须为以下类型:事业合伙、业务合伙、研发合伙、业务-产品应用合伙") // 错误信息  
860 - s := strconv.Itoa(i + 1)  
861 - tmpRow = append(tmpRow, s) // 行号 863 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人类型错误,合伙人类型必须为以下类型:事业合伙、业务合伙、研发合伙、业务-产品应用合伙") // 错误信息
  864 + tmpRow = append(tmpRow, r) // 行号
862 tmpRow = append(tmpRow, row...) // 错误行数据 865 tmpRow = append(tmpRow, row...) // 错误行数据
863 myRow = tmpRow 866 myRow = tmpRow
864 } 867 }
865 } 868 }
866 case 7: // 业务员抽成比例,非必填,精确到小数点后两位 869 case 7: // 业务员抽成比例,非必填,精确到小数点后两位
867 { 870 {
868 - var (  
869 - typeErrFlag bool  
870 - lenErrFlag bool  
871 - ratioErrFlag bool  
872 - )  
873 if len(cell) > 0 { 871 if len(cell) > 0 {
  872 +
874 // 参数类型转换 873 // 参数类型转换
875 shareRatio, err := strconv.ParseFloat(cell, 64) 874 shareRatio, err := strconv.ParseFloat(cell, 64)
876 if err != nil { 875 if err != nil {
877 - typeErrFlag = true 876 + var tmpRow []string
  877 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列业务员抽成比例格式错误,业务员抽成比例必须为数字") // 错误信息
  878 + tmpRow = append(tmpRow, r) // 行号
  879 + tmpRow = append(tmpRow, row...) // 错误行数据
  880 + myRow = tmpRow
878 } 881 }
879 882
880 // 比例不能超过100% 883 // 比例不能超过100%
881 if shareRatio > 100 { 884 if shareRatio > 100 {
882 - ratioErrFlag = true 885 + var tmpRow []string
  886 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列业务员抽成比例超过限额,请输入正确的业务员抽成比例,并保留两位小数") // 错误信息
  887 + tmpRow = append(tmpRow, r) // 行号
  888 + tmpRow = append(tmpRow, row...) // 错误行数据
  889 + myRow = tmpRow
883 } 890 }
884 891
885 // 长度校验 892 // 长度校验
886 regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$` 893 regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$`
887 ok := regexp.MustCompile(regexpStr).MatchString(cell) 894 ok := regexp.MustCompile(regexpStr).MatchString(cell)
888 if !ok { 895 if !ok {
889 - lenErrFlag = true  
890 - }  
891 -  
892 - if typeErrFlag || lenErrFlag || ratioErrFlag {  
893 var tmpRow []string 896 var tmpRow []string
894 - tmpRow = append(tmpRow, "业务员抽成比例格式错误,请输入正确的业务员抽成比例,保留两位小数") // 错误信息  
895 - s := strconv.Itoa(i + 1)  
896 - tmpRow = append(tmpRow, s) // 行号 897 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列业务员抽成比例超过最大长度,请输入正确的业务员抽成比例,并保留两位小数") // 错误信息
  898 + tmpRow = append(tmpRow, r) // 行号
897 tmpRow = append(tmpRow, row...) // 错误行数据 899 tmpRow = append(tmpRow, row...) // 错误行数据
898 myRow = tmpRow 900 myRow = tmpRow
899 - typeErrFlag = false  
900 - lenErrFlag = false  
901 - ratioErrFlag = false  
902 } 901 }
903 } 902 }
904 } 903 }
905 case 9: // 数量不超过16位正整数 904 case 9: // 数量不超过16位正整数
906 { 905 {
907 - var (  
908 - typeErrFlag bool  
909 - lenErrFlag bool  
910 - )  
911 -  
912 //参数类型转换 906 //参数类型转换
913 orderNum, err := strconv.ParseInt(cell, 10, 64) 907 orderNum, err := strconv.ParseInt(cell, 10, 64)
914 if err != nil { 908 if err != nil {
915 - typeErrFlag = true 909 + var tmpRow []string
  910 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品数量格式错误,产品数量必须整数") // 错误信息
  911 + tmpRow = append(tmpRow, r) // 行号
  912 + tmpRow = append(tmpRow, row...) // 错误行数据
  913 + myRow = tmpRow
916 } 914 }
917 915
918 // 长度校验 916 // 长度校验
919 if orderNum > 1e16 { 917 if orderNum > 1e16 {
920 - lenErrFlag = true  
921 - }  
922 -  
923 - if typeErrFlag || lenErrFlag {  
924 var tmpRow []string 918 var tmpRow []string
925 - tmpRow = append(tmpRow, "数量长度超过最大限制十六位整数,请重新填写") // 错误信息  
926 - s := strconv.Itoa(i + 1)  
927 - tmpRow = append(tmpRow, s) // 行号 919 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品数量长度超过最大限制十六位整数,请重新填写") // 错误信息
  920 + tmpRow = append(tmpRow, r) // 行号
928 tmpRow = append(tmpRow, row...) // 错误行数据 921 tmpRow = append(tmpRow, row...) // 错误行数据
929 myRow = tmpRow 922 myRow = tmpRow
930 - typeErrFlag = false  
931 - lenErrFlag = false  
932 } 923 }
933 } 924 }
934 case 10: // 单价,精确到小数点后两位,小数点左侧最多可输入16位数字 925 case 10: // 单价,精确到小数点后两位,小数点左侧最多可输入16位数字
935 { 926 {
  927 +
936 // 参数类型转换 928 // 参数类型转换
937 univalent, err := strconv.ParseFloat(cell, 64) 929 univalent, err := strconv.ParseFloat(cell, 64)
938 if err != nil { 930 if err != nil {
939 var tmpRow []string 931 var tmpRow []string
940 - tmpRow = append(tmpRow, "单价格式错误,请输入正确的单价,保留两位小数点,小数点前面不能超过十六位数字") // 错误信息  
941 - s := strconv.Itoa(i + 1)  
942 - tmpRow = append(tmpRow, s) // 行号 932 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列单价格式错误,产品单价必须为数字类型") // 错误信息
  933 + tmpRow = append(tmpRow, r) // 行号
943 tmpRow = append(tmpRow, row...) // 错误行数据 934 tmpRow = append(tmpRow, row...) // 错误行数据
944 myRow = tmpRow 935 myRow = tmpRow
945 } 936 }
  937 +
946 // 长度校验 938 // 长度校验
947 if univalent >= 1e16 { 939 if univalent >= 1e16 {
948 var tmpRow []string 940 var tmpRow []string
949 - tmpRow = append(tmpRow, "单价格式错误,请输入正确的单价,保留两位小数点,小数点前面不能超过十六位数字") // 错误信息  
950 - s := strconv.Itoa(i + 1)  
951 - tmpRow = append(tmpRow, s) // 行号 941 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品单价超过最大限制,产品单价小数点前面不能超过十六位数字,并保留两位小数") // 错误信息
  942 + tmpRow = append(tmpRow, r) // 行号
952 tmpRow = append(tmpRow, row...) // 错误行数据 943 tmpRow = append(tmpRow, row...) // 错误行数据
953 myRow = tmpRow 944 myRow = tmpRow
954 } 945 }
955 } 946 }
956 case 11: // 合伙人分红比例,精确到小数点后两位 947 case 11: // 合伙人分红比例,精确到小数点后两位
957 { 948 {
958 - var (  
959 - typeErrFlag bool  
960 - lenErrFlag bool  
961 - ratioErrFlag bool  
962 - )  
963 949
964 //参数类型转换 950 //参数类型转换
965 partnerRatio, err := strconv.ParseFloat(cell, 64) 951 partnerRatio, err := strconv.ParseFloat(cell, 64)
966 if err != nil { 952 if err != nil {
967 - typeErrFlag = true 953 + var tmpRow []string
  954 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人分红比例类型错误,合伙人分红比例必须为数字") // 错误信息
  955 + tmpRow = append(tmpRow, r) // 行号
  956 + tmpRow = append(tmpRow, row...) // 错误行数据
  957 + myRow = tmpRow
968 } 958 }
969 959
970 // 合伙人分红比例超额 960 // 合伙人分红比例超额
971 if partnerRatio > 100 { 961 if partnerRatio > 100 {
972 - ratioErrFlag = true 962 + var tmpRow []string
  963 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人分红比例超过限额,请输入正确的合伙人分红比例,并保留两位小数") // 错误信息
  964 + tmpRow = append(tmpRow, r) // 行号
  965 + tmpRow = append(tmpRow, row...) // 错误行数据
  966 + myRow = tmpRow
973 } 967 }
974 968
975 // 长度判断 969 // 长度判断
976 regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$` 970 regexpStr := `^(100|[1-9]\d|\d)(.\d{1,2})?$`
977 ok := regexp.MustCompile(regexpStr).MatchString(cell) 971 ok := regexp.MustCompile(regexpStr).MatchString(cell)
978 if !ok { 972 if !ok {
979 - lenErrFlag = true  
980 - }  
981 -  
982 - if typeErrFlag || lenErrFlag || ratioErrFlag {  
983 var tmpRow []string 973 var tmpRow []string
984 - tmpRow = append(tmpRow, "合伙人分红比例格式错误,请输入正确的合伙人分红比例,保留两位小数") // 错误信息  
985 - s := strconv.Itoa(i + 1)  
986 - tmpRow = append(tmpRow, s) // 行号 974 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人分红比例超过最大长度,请输入正确的合伙人分红比例,并保留两位小数") // 错误信息
  975 + tmpRow = append(tmpRow, r) // 行号
987 tmpRow = append(tmpRow, row...) // 错误行数据 976 tmpRow = append(tmpRow, row...) // 错误行数据
988 myRow = tmpRow 977 myRow = tmpRow
989 - typeErrFlag = false  
990 - lenErrFlag = false  
991 - ratioErrFlag = false  
992 } 978 }
993 } 979 }
994 } 980 }