From 0b3bcdad216e73b43dec04db4a4792efefef0e37 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 17 八月 2023 10:09:03 +0800
Subject: [PATCH] Merge branch 'zq'

---
 model/saleChance.go |  172 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 123 insertions(+), 49 deletions(-)

diff --git a/model/saleChance.go b/model/saleChance.go
index 1f88811..175ac2a 100644
--- a/model/saleChance.go
+++ b/model/saleChance.go
@@ -1,54 +1,63 @@
 package model
 
 import (
-	"aps_crm/constvar"
 	"aps_crm/pkg/mysqlx"
 	"gorm.io/gorm"
-	"time"
 )
 
 type (
 	SaleChance struct {
-		Id                 int                   `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		Name               string                `json:"name" gorm:"column:name;type:varchar(255);comment:鍏徃鍚嶇О"`
-		Number             string                `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞嚎绱㈢紪鍙�"`
-		ContactId          int                   `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:鑱旂郴浜篒D"`
-		ClientId           int                   `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
-		SalesSourcesId     int                   `json:"sales_sources_id" gorm:"column:sales_sources_id;type:int(11);comment:鍟嗘満鏉ユ簮ID"`
-		SaleTypeId         int                   `json:"sale_type_id" gorm:"column:sale_type_id;type:int(11);comment:鍟嗘満绫诲瀷ID"`
-		SaleStageId        int                   `json:"sale_stage_id" gorm:"column:sale_stage_id;type:int(11);comment:鍟嗘満闃舵ID"`
-		MemberId           int                   `json:"member_id" gorm:"column:member_id;type:int(11);comment:閿�鍞礋璐d汉ID"`
-		RegularCustomersId int                   `json:"regular_customers_id" gorm:"column:regular_customers_id;type:int(11);comment:甯稿ID"`
-		Competitors        string                `json:"competitors" gorm:"column:competitors;type:varchar(255);comment:绔炰簤瀵规墜"`
-		PossibilitiesId    int                   `json:"possibilities_id" gorm:"column:possibilities_id;type:int(11);comment:鍙兘鎬D"`
-		Budget             float64               `json:"budget" gorm:"column:budget;type:decimal(10,2);comment:棰勭畻"`
-		ProjectedAmount    float64               `json:"projected_amount" gorm:"column:projected_amount;type:decimal(10,2);comment:棰勮閲戦"`
-		Currency           constvar.CurrencyType `json:"currency" gorm:"column:currency;type:int(11);comment:璐у竵绫诲瀷"`
-		ExpectedTime       time.Time             `json:"expected_time" gorm:"column:expected_time;type:datetime;comment:棰勮鎴愪氦鏃堕棿"`
-		StatusId           int                   `json:"status_id" gorm:"column:status_id;type:int(11);comment:鐘舵�両D"`
-		PainPoints         string                `json:"pain_points" gorm:"column:pain_points;type:text;comment:鐥涚偣"`
-		WhetherEstablished string                `json:"whether_established" gorm:"column:whether_established;type:text;comment:鏄惁鎴愮珛"`
-		CapitalBudget      string                `json:"capital_budget" gorm:"column:capital_budget;type:text;comment:璧勯噾棰勭畻"`
-		KeyMaker           string                `json:"key_maker" gorm:"column:key_maker;type:text;comment:鍏抽敭浜�"`
-		KeyFactors         string                `json:"key_factors" gorm:"column:key_factors;type:text;comment:鍏抽敭鍥犵礌"`
-		Process            string                `json:"process" gorm:"column:process;type:text;comment:鍐崇瓥娴佺▼"`
-		Solutions          string                `json:"solutions" gorm:"column:solutions;type:text;comment:绔炰簤瀵规墜瑙e喅鏂规"`
-		Advantages         string                `json:"advantages" gorm:"column:advantages;type:text;comment:绔炰簤浼樺娍"`
-		Disadvantages      string                `json:"disadvantages" gorm:"column:disadvantages;type:text;comment:绔炰簤鍔e娍"`
-		Opportunities      string                `json:"opportunities" gorm:"column:opportunities;type:text;comment:绔炰簤鏈轰細"`
-		Threats            string                `json:"threats" gorm:"column:threats;type:text;comment:绔炰簤濞佽儊"`
-		DetailAddress      string                `json:"detail_address" gorm:"column:detail_address;type:text;comment:璇︾粏鍦板潃"`
-		Remark             string                `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
-		Contact            Contact               `json:"contact" gorm:"foreignKey:ContactId;references:Id"`
-		Client             Client                `json:"client" gorm:"foreignKey:ClientId;references:Id"`
-		SalesSources       SalesSources
+		Id                    int                    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name                  string                 `json:"name" gorm:"column:name;type:varchar(255);comment:鍏徃鍚嶇О"`
+		Number                string                 `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞嚎绱㈢紪鍙�"`
+		ContactId             int                    `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:鑱旂郴浜篒D"`
+		ClientId              int                    `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
+		SalesSourcesId        int                    `json:"sales_sources_id" gorm:"column:sales_sources_id;type:int(11);comment:鍟嗘満鏉ユ簮ID"`
+		SaleTypeId            int                    `json:"sale_type_id" gorm:"column:sale_type_id;type:int(11);comment:鍟嗘満绫诲瀷ID"`
+		SaleType              SaleType               `json:"sale_type" `
+		SaleStageId           int                    `json:"sale_stage_id" gorm:"column:sale_stage_id;type:int(11);comment:鍟嗘満闃舵ID"`
+		SaleStage             SaleStage              `json:"sale_stage" gorm:"foreignKey:SaleStageId;references:Id"`
+		MemberId              int                    `json:"member_id" gorm:"column:member_id;type:int(11);comment:閿�鍞礋璐d汉ID"`
+		Member                User                   `json:"member" gorm:"foreignKey:MemberId"`
+		RegularCustomersId    int                    `json:"regular_customers_id" gorm:"column:regular_customers_id;type:int(11);comment:甯稿ID"`
+		RegularCustomers      RegularCustomers       `json:"regular_customers"`
+		Competitors           string                 `json:"competitors" gorm:"column:competitors;type:varchar(255);comment:绔炰簤瀵规墜"`
+		PossibilitiesId       int                    `json:"possibilities_id" gorm:"column:possibilities_id;type:int(11);comment:鍙兘鎬D"`
+		Possibility           Possibility            `json:"possibility" gorm:"foreignKey:PossibilitiesId;references:Id"`
+		Budget                float64                `json:"budget" gorm:"column:budget;type:decimal(10,2);comment:棰勭畻"`
+		ProjectedAmount       float64                `json:"projected_amount" gorm:"column:projected_amount;type:decimal(10,2);comment:棰勮閲戦"`
+		Currency              int                    `json:"currency" gorm:"column:currency;type:int(11);comment:甯佺"`
+		ExpectedTime          *CustomTime            `json:"expected_time" gorm:"column:expected_time;type:datetime;comment:棰勮鎴愪氦鏃堕棿"`
+		StatusId              int                    `json:"status_id" gorm:"column:status_id;type:int(11);comment:鐘舵�両D"`
+		PainPoints            string                 `json:"pain_points" gorm:"column:pain_points;type:text;comment:鐥涚偣"`
+		WhetherEstablished    string                 `json:"whether_established" gorm:"column:whether_established;type:text;comment:鏄惁鎴愮珛"`
+		CapitalBudget         string                 `json:"capital_budget" gorm:"column:capital_budget;type:text;comment:璧勯噾棰勭畻"`
+		KeyMaker              string                 `json:"key_maker" gorm:"column:key_maker;type:text;comment:鍏抽敭浜�"`
+		KeyFactors            string                 `json:"key_factors" gorm:"column:key_factors;type:text;comment:鍏抽敭鍥犵礌"`
+		Process               string                 `json:"process" gorm:"column:process;type:text;comment:鍐崇瓥娴佺▼"`
+		Solutions             string                 `json:"solutions" gorm:"column:solutions;type:text;comment:绔炰簤瀵规墜瑙e喅鏂规"`
+		Advantages            string                 `json:"advantages" gorm:"column:advantages;type:text;comment:绔炰簤浼樺娍"`
+		Disadvantages         string                 `json:"disadvantages" gorm:"column:disadvantages;type:text;comment:绔炰簤鍔e娍"`
+		Opportunities         string                 `json:"opportunities" gorm:"column:opportunities;type:text;comment:绔炰簤鏈轰細"`
+		Threats               string                 `json:"threats" gorm:"column:threats;type:text;comment:绔炰簤濞佽儊"`
+		DetailAddress         string                 `json:"detail_address" gorm:"column:detail_address;type:text;comment:璇︾粏鍦板潃"`
+		Remark                string                 `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
+		Contact               Contact                `json:"contact" gorm:"foreignKey:ContactId;references:Id"`
+		Client                Client                 `json:"client" gorm:"foreignKey:ClientId;references:Id"`
+		CollectionProjections []CollectionProjection `json:"collection_projections" gorm:"foreignKey:SaleChanceId"`
+		SalesSources          SalesSources           `json:"sales_sources"`
 		Address
 		gorm.Model `json:"-"`
 	}
 
-	SaleChangeSearch struct {
+	SaleChanceSearch struct {
 		SaleChance
-		Orm *gorm.DB
+
+		Orm       *gorm.DB
+		SearchMap map[string]interface{}
+		OrderBy   string
+		PageNum   int
+		PageSize  int
 	}
 )
 
@@ -56,11 +65,11 @@
 	return "sale_chance"
 }
 
-func NewSaleChangeSearch() *SaleChangeSearch {
-	return &SaleChangeSearch{Orm: mysqlx.GetDB()}
+func NewSaleChanceSearch() *SaleChanceSearch {
+	return &SaleChanceSearch{Orm: mysqlx.GetDB()}
 }
 
-func (slf *SaleChangeSearch) build() *gorm.DB {
+func (slf *SaleChanceSearch) build() *gorm.DB {
 	var db = slf.Orm.Model(&SaleChance{})
 	if slf.Id > 0 {
 		db = db.Where("id = ?", slf.Id)
@@ -69,45 +78,110 @@
 		db = db.Where("name = ?", slf.Name)
 	}
 
+	if len(slf.SearchMap) > 0 {
+		for key, value := range slf.SearchMap {
+			switch v := value.(type) {
+			case string:
+				if key == "name" || key == "number" {
+					db = db.Where(key+" LIKE ?", "%"+v+"%")
+				}
+
+				if key == "client_name" {
+					db = db.Joins("Client").Where("Client.name LIKE ?", "%"+v+"%")
+				}
+
+				if key == "contact_name" {
+					db = db.Joins("Contact").Where("Contact.name LIKE ?", "%"+v+"%")
+				}
+
+				if key == "member_name" {
+					db = db.Joins("User").Where("User.username LIKE ?", "%"+v+"%")
+				}
+
+				if key == "sale_stage" {
+					db = db.Joins("SaleStage").Where("SaleStage.name LIKE ?", "%"+v+"%")
+				}
+
+				if key == "possibilities" {
+					db = db.Joins("Possibilities").Where("Possibilities.name LIKE ?", "%"+v+"%")
+				}
+
+				if key == "expected_time" {
+					db = db.Where("expected_time LIKE ?", "%"+v+"%")
+				}
+
+			case int:
+			case float64:
+				if key == "member_id" || key == "budget" || key == "projected_amount" {
+					db = db.Where(key+" = ?", v)
+				}
+			}
+		}
+	}
+
 	return db
 }
 
-func (slf *SaleChangeSearch) Create(record *SaleChance) (err error) {
+func (slf *SaleChanceSearch) Create(record *SaleChance) (err error) {
 	var db = slf.build()
 	err = db.Create(record).Error
 	return
 }
 
-func (slf *SaleChangeSearch) Update(record *SaleChance) (err error) {
+func (slf *SaleChanceSearch) Update(record *SaleChance) (err error) {
 	var db = slf.build()
 	err = db.Updates(record).Error
 	return
 }
 
-func (slf *SaleChangeSearch) Delete() (err error) {
+func (slf *SaleChanceSearch) Delete() (err error) {
 	var db = slf.build()
 	err = db.Delete(&SaleChance{}).Error
 	return
 }
 
-func (slf *SaleChangeSearch) Find() (record SaleChance, err error) {
+func (slf *SaleChanceSearch) Find() (record SaleChance, err error) {
 	var db = slf.build()
 	err = db.First(&record).Error
 	return
 }
 
-func (slf *SaleChangeSearch) FindAll() (record []*SaleChance, err error) {
+func (slf *SaleChanceSearch) FindAll() ([]*SaleChance, int64, error) {
 	var db = slf.build()
-	err = db.Preload("Client").Preload("Contact").Find(&record).Error
-	return
+	var records = make([]*SaleChance, 0)
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		return records, total, err
+	}
+	if slf.PageNum > 0 && slf.PageSize > 0 {
+		db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
+	}
+
+	err := db.Preload("SaleType").Preload("RegularCustomers").Preload("SalesSources").Preload("Member").Preload("SaleStage").Preload("Possibility").Preload("CollectionProjections").Preload("Client").Preload("Contact").Order("id desc").Find(&records).Error
+	return records, total, err
 }
 
-func (slf *SaleChangeSearch) SetId(id int) *SaleChangeSearch {
+func (slf *SaleChanceSearch) SetId(id int) *SaleChanceSearch {
 	slf.Id = id
 	return slf
 }
 
-func (slf *SaleChangeSearch) SetName(name string) *SaleChangeSearch {
+func (slf *SaleChanceSearch) SetName(name string) *SaleChanceSearch {
 	slf.Name = name
 	return slf
 }
+
+func (slf *SaleChanceSearch) SetPage(page, size int) *SaleChanceSearch {
+	slf.PageNum, slf.PageSize = page, size
+	return slf
+}
+
+func (slf *SaleChanceSearch) SetOrder(order string) *SaleChanceSearch {
+	slf.OrderBy = order
+	return slf
+}
+
+func (slf *SaleChanceSearch) SetSearchMap(searchMap map[string]interface{}) *SaleChanceSearch {
+	slf.SearchMap = searchMap
+	return slf
+}

--
Gitblit v1.8.0