作者 陈志颖

合并分支 'dev' 到 'test'

Dev



查看合并请求 !17
@@ -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)
  795 + b := strings.Replace(strings.Trim(fmt.Sprint(nullCell), "[]"), " ", ",", -1)
  796 + myRow = append(myRow, "第"+s+"行的第"+b+"列必填项为空") // 错误信息
800 myRow = append(myRow, s) // 行号 797 myRow = append(myRow, s) // 行号
801 myRow = append(myRow, tmpRow...) // 错误行数据 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,16 +842,20 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -838,16 +842,20 @@ 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) // 行号 857 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列"+tableHeader[j+2]+"长度超过50位,请重新输入") // 错误信息
  858 + tmpRow = append(tmpRow, r) // 行号
851 tmpRow = append(tmpRow, row...) // 错误行数据 859 tmpRow = append(tmpRow, row...) // 错误行数据
852 myRow = tmpRow 860 myRow = tmpRow
853 } 861 }
@@ -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) // 行号 867 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人类型错误,合伙人类型必须为以下类型:事业合伙、业务合伙、研发合伙、业务-产品应用合伙") // 错误信息
  868 + tmpRow = append(tmpRow, r) // 行号
862 tmpRow = append(tmpRow, row...) // 错误行数据 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) // 行号 901 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列业务员抽成比例超过最大长度,请输入正确的业务员抽成比例,并保留两位小数") // 错误信息
  902 + tmpRow = append(tmpRow, r) // 行号
897 tmpRow = append(tmpRow, row...) // 错误行数据 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) // 行号 923 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品数量长度超过最大限制十六位整数,请重新填写") // 错误信息
  924 + tmpRow = append(tmpRow, r) // 行号
928 tmpRow = append(tmpRow, row...) // 错误行数据 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) // 行号 936 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列单价格式错误,产品单价必须为数字类型") // 错误信息
  937 + tmpRow = append(tmpRow, r) // 行号
943 tmpRow = append(tmpRow, row...) // 错误行数据 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) // 行号 945 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列产品单价超过最大限制,产品单价小数点前面不能超过十六位数字,并保留两位小数") // 错误信息
  946 + tmpRow = append(tmpRow, r) // 行号
952 tmpRow = append(tmpRow, row...) // 错误行数据 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) // 行号 978 + tmpRow = append(tmpRow, "第"+r+"行第"+c+"列合伙人分红比例超过最大长度,请输入正确的合伙人分红比例,并保留两位小数") // 错误信息
  979 + tmpRow = append(tmpRow, r) // 行号
987 tmpRow = append(tmpRow, row...) // 错误行数据 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 }