Browse Source

no message

xingzai 1 year ago
parent
commit
ba448b23ee

+ 35 - 1
models/company/company_contract.go

@@ -194,4 +194,38 @@ func GetCompanyContractUpgradePermissionCheckByContractId(companyId, companyCont
 	sql := `SELECT COUNT(1) AS count FROM company_contract_permission AS a WHERE a.company_id=? AND company_contract_id=? AND a.chart_permission_id=? AND a.is_upgrade=? `
 	err = o.Raw(sql, companyId, companyContractId, permissionId, isUpgrade).QueryRow(&count)
 	return
-}
+}
+
+type CompanyContractResp struct {
+	CompanyContractId int       `orm:"column(company_contract_id);pk" description:"客户合同id"`
+	ContractType      string    `description:"合同类型:枚举值:'新签合同','续约合同','补充协议'"`
+	ProductId         int       `description:"产品id"`
+	ProductName       string    `description:"产品名称"`
+	CompanyId         int       `description:"客户id"`
+	CompanyProductId  int       `description:"客户产品id"`
+	ContractCode      string    `description:"合同编码"`
+	StartDate         time.Time `description:"合同开始时间"`
+	EndDate           time.Time `description:"合同结束时间"`
+	Money             float64   `description:"合同金额"`
+	PayMethod         string    `description:"支付方式"`
+	PayChannel        string    `description:"支付渠道"`
+	ImgUrl            string    `description:"合同图片,多个用#隔开"`
+	CreateTime        time.Time `description:"合同创建时间"`
+	ModifyTime        time.Time `description:"合同修改时间"`
+	Status            int       `description:"状态"`
+	Source            string    `description:"合同来源,枚举值:上传附件、系统合同,默认上传附件"`
+	PackageType       int       `description:"套餐类型,0:无,1:大套餐,2:小套餐"`
+	RaiPackageType    int       `description:"权益套餐类型: 0-无; 1-70w大套餐; 2-45w大套餐"`
+}
+
+// 获取合同列表
+func GetCompanyContractList(condition string, pars []interface{}) (items []*CompanyContractResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_contract WHERE 1 = 1  `
+
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 49 - 0
models/company/company_contract_merge.go

@@ -0,0 +1,49 @@
+package company
+
+import (
+	//"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CompanyContractMerge struct {
+	CompanyContractId      int       `orm:"column(company_contract_merge_id);pk" description:"主键ID"`
+	ContractType           string    `description:"合同类型:枚举值:'新签合同','续约合同','补充协议'"`
+	ProductId              int       `description:"产品id"`
+	ProductName            string    `description:"产品名称"`
+	CompanyId              int       `description:"客户id"`
+	CompanyProductId       int       `description:"客户产品id"`
+	StartDate              string    `description:"合同开始时间"`
+	EndDate                string    `description:"合同结束时间"`
+	Money                  float64   `description:"合同金额"`
+	CreateTime             time.Time `description:"合同创建时间"`
+	ModifyTime             time.Time `description:"合同修改时间"`
+	CompanyContractIdGroup string    `description:"表company_contract合并的 company_contract_id"`
+	ChartPermissionName    string    `description:"权限类目名称"`
+}
+
+type CompanyContractMergeResp struct {
+	CompanyContractId      int       `orm:"column(company_contract_merge_id);pk" description:"主键ID"`
+	ContractType           string    `description:"合同类型:枚举值:'新签合同','续约合同','补充协议'"`
+	ProductId              int       `description:"产品id"`
+	ProductName            string    `description:"产品名称"`
+	CompanyId              int       `description:"客户id"`
+	CompanyProductId       int       `description:"客户产品id"`
+	StartDate              time.Time `description:"合同开始时间"`
+	EndDate                time.Time `description:"合同结束时间"`
+	Money                  float64   `description:"合同金额"`
+	CreateTime             time.Time `description:"合同创建时间"`
+	ModifyTime             time.Time `description:"合同修改时间"`
+	CompanyContractIdGroup string    `description:"表company_contract合并的 company_contract_id"`
+	ChartPermissionName    string    `description:"权限类目名称"`
+}
+
+// MultiAddCompanyContractMerge 批量添加合同合并之后的数据
+func MultiAddCompanyContractMerge(items []*CompanyContractMerge) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}

+ 1 - 0
models/db.go

@@ -235,6 +235,7 @@ func initCompany() {
 		new(company.CompanyPermissionLog),
 		new(company.CompanyReportPermission),
 		new(company.CompanyContract),
+		new(company.CompanyContractMerge), //续约合同,新签合同进行合并
 		new(company.CompanyContractPermission),
 		new(company.CompanyContractPermissionLog),
 		new(company.CompanyProduct),

+ 88 - 0
services/company_contract.go

@@ -0,0 +1,88 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+//func init() {
+//	InitCompanyContractMerge()
+//}
+
+// 初始化合并合同之后的数据脚本
+func InitCompanyContractMerge() {
+
+	var condition string
+	var pars []interface{}
+	condition = "  AND status = 1  AND  product_id = 2   "
+	companyContractList, err := company.GetCompanyContractList(condition, pars)
+
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	mapCompanyContractItems := make(map[int][]*company.CompanyContractResp)
+	for _, v := range companyContractList {
+		//fmt.Println(v)
+		mapCompanyContractItems[v.CompanyId] = append(mapCompanyContractItems[v.CompanyId], v)
+	}
+	var items []*company.CompanyContractMergeResp
+	for _, ContractItems := range mapCompanyContractItems {
+		item := new(company.CompanyContractMergeResp)
+		for k, v := range ContractItems {
+			item = new(company.CompanyContractMergeResp)
+			item.ContractType = v.ContractType
+			item.ProductId = v.ProductId
+			item.ProductName = v.ProductName
+			item.CompanyId = v.CompanyId
+			item.CompanyProductId = v.CompanyProductId
+			item.StartDate = v.StartDate
+			item.EndDate = v.EndDate
+			item.Money = v.Money
+			item.CompanyContractIdGroup += strconv.Itoa(v.CompanyContractId) + ","
+			if k == 0 {
+				items = append(items, item)
+			} else {
+				if v.CompanyId != items[len(items)-1].CompanyId {
+					items = append(items, item)
+				} else {
+					//续约的合同开始时间是否<上一次合同记录的结束时间 且间隔>6个月(180)天,那么就对两个合同进行合并
+					if item.StartDate.AddDate(0, 0, +180).Before(items[len(items)-1].EndDate) && item.EndDate.After(items[len(items)-1].EndDate) {
+						items[len(items)-1].Money += v.Money
+						items[len(items)-1].EndDate = v.EndDate
+						items[len(items)-1].CompanyContractIdGroup += strconv.Itoa(v.CompanyContractId) + ","
+					} else {
+						items = append(items, item)
+					}
+				}
+			}
+		}
+	}
+
+	var contractMergeitems []*company.CompanyContractMerge
+	for _, v := range items {
+		item := new(company.CompanyContractMerge)
+		item.ContractType = v.ContractType
+		item.ProductId = v.ProductId
+		item.ProductName = v.ProductName
+		item.CompanyId = v.CompanyId
+		item.CompanyProductId = v.CompanyProductId
+		item.StartDate = v.StartDate.Format(utils.FormatDate)
+		item.EndDate = v.EndDate.Format(utils.FormatDate)
+		item.Money = v.Money
+		item.CompanyContractIdGroup = strings.TrimRight(v.CompanyContractIdGroup, ",")
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		contractMergeitems = append(contractMergeitems, item)
+	}
+
+	err = company.MultiAddCompanyContractMerge(contractMergeitems)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+}