123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940 |
- package fms
- import (
- "fmt"
- "hongze/fms_api/global"
- "hongze/fms_api/models/base"
- "hongze/fms_api/models/crm"
- "hongze/fms_api/utils"
- "time"
- )
- // ContractRegister 合同登记表
- type ContractRegister struct {
- ContractRegisterId int `gorm:"primaryKey;column:contract_register_id" json:"contract_register_id" description:"登记ID"`
- ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
- RelateContractCode string `gorm:"column:relate_contract_code" json:"relate_contract_code" description:"关联合同编号"`
- RelateContractMainCode string `gorm:"column:relate_contract_main_code" json:"relate_contract_main_code" description:"关联主合同编号"`
- CrmContractId int `gorm:"column:crm_contract_id" json:"crm_contract_id" description:"CRM系统-合同ID"`
- ContractSource int `gorm:"column:contract_source" json:"contract_source" description:"合同来源: 0-非系统合同导入; 1-CRM合同导入"`
- CompanyName string `gorm:"column:company_name" json:"company_name" description:"客户名称"`
- ActualCompanyName string `gorm:"column:actual_company_name" json:"actual_company_name" description:"实际使用方"`
- ProductIds string `gorm:"column:product_ids" json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
- SellerId int `gorm:"column:seller_id" json:"seller_id" description:"CRM系统-销售ID"`
- SellerName string `gorm:"column:seller_name" json:"seller_name" description:"CRM系统-销售名称"`
- RaiSellerId int `gorm:"column:rai_seller_id" json:"rai_seller_id" description:"CRM系统-权益销售ID"`
- RaiSellerName string `gorm:"column:rai_seller_name" json:"rai_seller_name" description:"CRM系统-权益销售名称"`
- ContractType int `gorm:"column:contract_type" json:"contract_type" description:"合同类型: 1-新签; 2-续约; 3-代付; 4-补充协议"`
- ContractAmount float64 `gorm:"column:contract_amount" json:"contract_amount" description:"合同金额"`
- InvoicedAmount float64 `gorm:"column:invoiced_amount" json:"invoiced_amount" description:"开票金额"`
- PaymentAmount float64 `gorm:"column:payment_amount" json:"payment_amount" description:"到款金额"`
- CurrencyUnit string `gorm:"column:currency_unit" json:"currency_unit" description:"货币国际代码"`
- RMBRate float64 `gorm:"column:rmb_rate" json:"rmb_rate" description:"人民币汇率(create_time当日)"`
- StartDate time.Time `gorm:"column:start_date" json:"start_date" description:"合同开始日期"`
- EndDate time.Time `gorm:"column:end_date" json:"end_date" description:"合同结束日期"`
- SignDate time.Time `gorm:"column:sign_date" json:"sign_date" description:"合同签订日期"`
- AgreedPayTime string `gorm:"column:agreed_pay_time" json:"agreed_pay_time" description:"约定付款时间(如:生效日起10日内)"`
- ContractStatus int `gorm:"column:contract_status" json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
- RegisterStatus int `gorm:"column:register_status" json:"register_status" description:"登记状态: 1-进行中; 2-已完成;"`
- Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
- ServiceRemark string `gorm:"column:service_remark" json:"service_remark" description:"套餐备注信息"`
- HasPayment int `gorm:"column:has_payment" json:"has_payment" description:"是否有代付: 0-无; 1-有"`
- HasInvoice int `gorm:"column:has_invoice" json:"has_invoice" description:"是否需要开票到款: 0-无; 1-有"`
- NewCompany int `gorm:"column:new_company" json:"new_company" description:"是否为新客户: 0-否; 1-是"`
- IsDeleted int `gorm:"column:is_deleted" json:"is_deleted" description:"是否已删除: 0-正常; 1-已删除"`
- ActualPayCompanies string `gorm:"column:actual_pay_companies" json:"actual_pay_companies" description:"合同关联的所有代付方名称, 英文逗号拼接"`
- base.TimeBase
- }
- func (c *ContractRegister) TableName() string {
- return "contract_register"
- }
- func (c *ContractRegister) Create() (err error) {
- err = global.DEFAULT_MYSQL.Create(c).Error
- return
- }
- func (c *ContractRegister) AddInBatches(list []*ContractRegister) (err error) {
- err = global.DEFAULT_MYSQL.CreateInBatches(list, len(list)).Error
- return
- }
- func (c *ContractRegister) Update(updateCols []string) (err error) {
- err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error
- return
- }
- func (c *ContractRegister) Fetch(id int) (item *ContractRegister, err error) {
- err = global.DEFAULT_MYSQL.Model(c).Where("is_deleted = 0 AND contract_register_id = ?", id).First(&item).Error
- return
- }
- func (c *ContractRegister) FetchByCondition(condition string, pars []interface{}) (item *ContractRegister, err error) {
- err = global.DEFAULT_MYSQL.Model(c).
- Where("is_deleted = 0").
- Where(condition, pars...).
- First(&item).Error
- return
- }
- func (c *ContractRegister) List(condition string, pars []interface{}) (list []*ContractRegister, err error) {
- list = make([]*ContractRegister, 0)
- err = global.DEFAULT_MYSQL.Model(c).
- Where("is_deleted = 0").
- Where("register_status <> 0").
- Where(condition, pars...).
- Find(&list).Error
- return
- }
- func (c *ContractRegister) PageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractRegister, err error) {
- results = make([]*ContractRegister, 0)
- query := global.DEFAULT_MYSQL.Model(c).
- Where("is_deleted = 0").
- Where(condition, pars...)
- query.Count(&count)
- if len(page.GetOrderItemsString()) > 0 {
- query = query.Order(page.GetOrderItemsString())
- }
- err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
- return
- }
- // ContractRegisterListReq 合同登记列表请求体
- type ContractRegisterListReq struct {
- Keyword string `json:"keyword" form:"keyword" binding:"omitempty" description:"关键词"`
- StartDate string `json:"start_date" form:"start_date" binding:"omitempty,datetime=2006-01-02" description:"合同开始日期"`
- EndDate string `json:"end_date" form:"end_date" binding:"omitempty,datetime=2006-01-02" description:"合同结束日期"`
- ServiceTypes string `json:"service_types" form:"service_types" description:"套餐类型"`
- ContractType string `json:"contract_type" form:"contract_type" description:"合同类型"`
- RegisterStatus int `json:"register_status" form:"register_status" description:"登记状态"`
- ListParam int `json:"list_param" form:"list_param" description:"套餐类型: 0-全部; 1-ficc; 2-权益"`
- base.PageReq
- }
- // ContractRegisterItem 合同登记
- type ContractRegisterItem struct {
- ContractRegisterId int `json:"contract_register_id" description:"登记ID"`
- ContractCode string `json:"contract_code" description:"合同编号"`
- RelateContractCode string `json:"relate_contract_code" description:"关联合同编号"`
- CrmContractId int `json:"crm_contract_id" description:"CRM系统-合同ID"`
- ContractSource int `json:"contract_source" description:"合同来源: 0-非系统合同导入; 1-CRM合同导入"`
- CompanyName string `json:"company_name" description:"客户名称"`
- ActualCompanyName string `json:"actual_company_name" description:"实际使用方"`
- ProductIds string `json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
- SellerId int `json:"seller_id" description:"CRM系统-销售ID"`
- SellerName string `json:"seller_name" description:"CRM系统-销售名称"`
- RaiSellerId int `json:"rai_seller_id" description:"CRM系统-权益销售ID"`
- RaiSellerName string `json:"rai_seller_name" description:"CRM系统-权益销售名称"`
- ContractType int `json:"contract_type" description:"合同类型: 1-新签; 2-续约"`
- ContractAmount float64 `json:"contract_amount" description:"合同金额"`
- InvoicedAmount float64 `json:"invoiced_amount" description:"开票金额"`
- PaymentAmount float64 `json:"payment_amount" description:"到款金额"`
- CurrencyUnit string `json:"currency_unit" description:"货币国际代码"`
- RMBRate float64 `json:"rmb_rate" description:"人民币汇率(create_time当日)"`
- StartDate string `json:"start_date" description:"合同开始日期"`
- EndDate string `json:"end_date" description:"合同结束日期"`
- SignDate string `json:"sign_date" description:"合同签订日期"`
- AgreedPayTime string `json:"agreed_pay_time" description:"约定付款时间(如:生效日起10日内)"`
- ContractStatus int `json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
- RegisterStatus int `json:"register_status" description:"登记状态: 1-进行中; 2-已完成;"`
- Remark string `json:"remark" description:"备注信息"`
- ServiceRemark string `json:"service_remark" description:"套餐备注信息"`
- HasPayment int `json:"has_payment" description:"是否有代付: 0-无; 1-有"`
- HasInvoice int `json:"has_invoice" description:"是否需要开票到款: 0-无; 1-有"`
- NewCompany int `json:"new_company" description:"是否为新客户: 0-否; 1-是"`
- ActualPayCompanies string `json:"actual_pay_companies" description:"合同关联的所有代付方名称, 英文逗号拼接"`
- CreateTime string `json:"create_time" description:"登记时间"`
- SellerIds string `json:"seller_ids"`
- }
- // ContractRegisterList 合同登记列表
- type ContractRegisterList struct {
- *ContractRegisterItem
- ContractTypeString string `json:"contract_type_string" description:"合同类型"`
- ServicesName string `json:"services" description:"套餐名称"`
- InvoiceList []*ContractInvoiceItem `json:"invoice_list" description:"开票信息"`
- PaymentList []*ContractInvoiceItem `json:"payment_list" description:"到款信息"`
- }
- // ContractRegisterDelReq 合同登记-删除请求体
- type ContractRegisterDelReq struct {
- ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
- }
- // ContractRegisterUpdateStatusReq 合同登记-修改合同状态请求体
- type ContractRegisterUpdateStatusReq struct {
- ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
- ContractStatus int `json:"contract_status" binding:"oneof=1 2 3 4 5" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回; 4-已终止, 5-邮件备案"`
- }
- // ContractRegisterAddReq 新增合同登记请求体
- type ContractRegisterAddReq struct {
- ContractCode string `json:"contract_code" binding:"required" description:"合同编号"`
- RelateContractCode string `json:"relate_contract_code" description:"关联合同编号"`
- RelateContractMainCode string `json:"relate_contract_main_code" description:"关联主合同编号"`
- CrmContractId int `json:"crm_contract_id" description:"CRM系统-合同ID"`
- ContractSource int `json:"contract_source" binding:"oneof=0 1" description:"合同来源: 0-非系统合同导入; 1-CRM合同导入"`
- CompanyName string `json:"company_name" binding:"required" description:"客户名称"`
- SellerIds string `json:"seller_ids" binding:"required" description:"CRM系统-销售ID"`
- ContractType int `json:"contract_type" binding:"oneof=1 2 3 4" description:"合同类型: 1-新签; 2-续约; 3-代付; 4-补充协议"`
- ContractAmount float64 `json:"contract_amount" binding:"required" description:"合同金额"`
- CurrencyUnit string `json:"currency_unit" binding:"required" description:"货币单位"`
- StartDate string `json:"start_date" binding:"required" description:"合同开始日期"`
- EndDate string `json:"end_date" binding:"required" description:"合同结束日期"`
- SignDate string `json:"sign_date" description:"合同签订日期"`
- AgreedPayTime string `json:"agreed_pay_time" description:"约定付款时间(如:生效日起10日内)"`
- ContractStatus int `json:"contract_status" binding:"oneof=1 2 3 4 5" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回; 4-已终止; 5-邮件备案"`
- Remark string `json:"remark" description:"备注信息"`
- ProductIds string `json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
- ServiceRemark string `json:"service_remark" description:"套餐备注"`
- HasPayment int `json:"has_payment" description:"是否有代付: 0-无; 1-有"`
- HasInvoice int `json:"has_invoice" description:"是否需要开票到款流程: 0-无; 1-有"`
- Supplement int `json:"supplement" description:"是否为补录合同: 0-否; 1-是"`
- ContractRegisterId int `json:"contract_register_id" description:"登记ID"`
- Services []ContractServiceAddReq `json:"services" description:"服务套餐内容"`
- ServiceAmount []ContractServiceAmountAddReq `json:"service_amount" description:"服务套餐金额"`
- ActualPayCompanies string `json:"actual_pay_companies" description:"合同关联的所有代付方名称, 英文逗号拼接"`
- }
- // ContractRegisterEditReq 编辑合同登记请求体
- type ContractRegisterEditReq struct {
- ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
- ContractRegisterAddReq
- }
- // CreateContractRegisterAndServices 新增合同登记及套餐
- func CreateContractRegisterAndServices(item *ContractRegister, serviceDetail []*ContractServiceAndDetail, serviceAmount []*ContractServiceAmount) (err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 合同登记
- tx.Create(item)
- //nowTime := time.Now().Local()
- for i := 0; i < len(serviceDetail); i++ {
- // 合同服务
- t := serviceDetail[i]
- contractService := &ContractService{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceTemplateId: t.ServiceTemplateId,
- Title: t.Title,
- Value: t.Value,
- TableValue: t.TableValue,
- HasDetail: t.HasDetail,
- ChartPermissionId: t.ChartPermissionId,
- ChartPermissionIds: t.ChartPermissionIds,
- }
- contractService.Set()
- tx.Create(contractService)
- //// 合同服务详情
- //for j := 0; j < len(t.Detail); j++ {
- // contractServiceDetail := t.Detail[j]
- // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
- // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
- // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
- // contractServiceDetail.CreateTime = nowTime
- // tx.Create(contractServiceDetail)
- // t.Detail[j] = contractServiceDetail
- //}
- }
- for i := 0; i < len(serviceAmount); i++ {
- // 合同服务
- t := serviceAmount[i]
- tmp := &ContractServiceAmount{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceAmount: t.ServiceAmount,
- CurrencyUnit: t.CurrencyUnit,
- }
- tx.Create(tmp)
- }
- return
- }
- // UpdateContractRegister 更新合同登记
- func UpdateContractRegister(item *ContractRegister, updateCols []string, serviceDetail []*ContractServiceAndDetail,
- invoiceList []*ContractInvoice, invoiceUpdateCols []string, invoiceHandleType int, serviceAmount []*ContractServiceAmount) (err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 更新合同登记
- if e := tx.Model(item).Select(updateCols).Updates(item).Error; e != nil {
- err = e
- return
- }
- // 删除原服务及详情信息
- sql := `DELETE FROM contract_service WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- sql = `DELETE FROM contract_service_detail WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- sql = `DELETE FROM contract_service_amount WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- // 新增合同服务
- //nowTime := time.Now().Local()
- for i := 0; i < len(serviceDetail); i++ {
- // 合同服务
- t := serviceDetail[i]
- contractService := &ContractService{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceTemplateId: t.ServiceTemplateId,
- Title: t.Title,
- Value: t.Value,
- TableValue: t.TableValue,
- HasDetail: t.HasDetail,
- ChartPermissionId: t.ChartPermissionId,
- ChartPermissionIds: t.ChartPermissionIds,
- }
- contractService.Set()
- tx.Create(contractService)
- //// 合同服务详情
- //for j := 0; j < len(t.Detail); j++ {
- // contractServiceDetail := t.Detail[j]
- // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
- // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
- // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
- // contractServiceDetail.CreateTime = nowTime
- // tx.Create(contractServiceDetail)
- // t.Detail[j] = contractServiceDetail
- //}
- }
- for i := 0; i < len(serviceAmount); i++ {
- // 合同服务
- t := serviceAmount[i]
- tmp := &ContractServiceAmount{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceAmount: t.ServiceAmount,
- CurrencyUnit: t.CurrencyUnit,
- }
- tx.Create(tmp)
- }
- // 开票到款操作类型: 0-无; 1-更新; 2-删除;
- if invoiceHandleType == 2 {
- sql = `UPDATE contract_invoice SET is_deleted = 1 WHERE contract_register_id = ?`
- if e := tx.Exec(sql, item.ContractRegisterId).Error; e != nil {
- err = e
- return
- }
- }
- if invoiceHandleType == 1 {
- for i := range invoiceList {
- if e := tx.Model(invoiceList[i]).Select(invoiceUpdateCols).Updates(invoiceList[i]).Error; e != nil {
- err = e
- return
- }
- }
- }
- return
- }
- // ContractRegisterDetailReq 合同登记-详情请求体
- type ContractRegisterDetailReq struct {
- ContractRegisterId int `json:"contract_register_id" form:"contract_register_id" binding:"required,gte=1"`
- }
- // ContractRegisterDetail 合同登记详情
- type ContractRegisterDetail struct {
- *ContractRegisterItem
- ServiceList []*ContractServiceAndDetail `json:"service_list" description:"合同服务及详情"`
- InvoiceList []*ContractInvoiceItem `json:"invoice_list" description:"开票信息"`
- PaymentList []*ContractInvoiceItem `json:"payment_list" description:"到款信息"`
- Logs []*ContractRegisterLogItem `json:"logs" description:"登记日志"`
- ServiceAmountList []*ContractServiceAmountItem `json:"service_amount_list" description:"合同套餐金额"`
- }
- // GetContractRegisterItemById 获取合同登记信息
- func GetContractRegisterItemById(id int) (result *ContractRegisterItem, err error) {
- item := new(ContractRegister)
- err = global.DEFAULT_MYSQL.Model(ContractRegister{}).
- Where("is_deleted = 0 AND contract_register_id = ?", id).
- First(&item).Error
- if err != nil && err != utils.ErrNoRow {
- return
- }
- result = formatContractRegister2Item(item)
- return
- }
- // GetContractRegisterItemPageList 获取合同登记列表-分页
- func GetContractRegisterItemPageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractRegisterItem, err error) {
- list := make([]*ContractRegister, 0)
- query := global.DEFAULT_MYSQL.Table("contract_register").
- Where("is_deleted = 0").
- Where("register_status <> 0").
- Where(condition, pars...)
- query.Count(&count)
- if len(page.GetOrderItemsString()) > 0 {
- query = query.Order(page.GetOrderItemsString())
- }
- err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&list).Error
- if err != nil {
- return
- }
- for i := range list {
- results = append(results, formatContractRegister2Item(list[i]))
- }
- return
- }
- // formatContractRegister2Item 格式化ContractRegister
- func formatContractRegister2Item(item *ContractRegister) (formatItem *ContractRegisterItem) {
- formatItem = new(ContractRegisterItem)
- formatItem.ContractRegisterId = item.ContractRegisterId
- formatItem.ContractCode = item.ContractCode
- formatItem.RelateContractCode = item.RelateContractCode
- formatItem.CrmContractId = item.CrmContractId
- formatItem.ContractSource = item.ContractSource
- formatItem.CompanyName = item.CompanyName
- formatItem.ActualCompanyName = item.ActualCompanyName
- formatItem.ProductIds = item.ProductIds
- formatItem.SellerId = item.SellerId
- formatItem.SellerName = item.SellerName
- formatItem.RaiSellerId = item.RaiSellerId
- formatItem.RaiSellerName = item.RaiSellerName
- formatItem.ContractType = item.ContractType
- formatItem.ContractAmount = item.ContractAmount
- formatItem.InvoicedAmount = item.InvoicedAmount
- formatItem.PaymentAmount = item.PaymentAmount
- formatItem.CurrencyUnit = item.CurrencyUnit
- formatItem.RMBRate = item.RMBRate
- formatItem.StartDate = utils.TimeTransferString(utils.FormatDate, item.StartDate)
- formatItem.EndDate = utils.TimeTransferString(utils.FormatDate, item.EndDate)
- formatItem.SignDate = utils.TimeTransferString(utils.FormatDate, item.SignDate)
- formatItem.AgreedPayTime = item.AgreedPayTime
- formatItem.ContractStatus = item.ContractStatus
- formatItem.RegisterStatus = item.RegisterStatus
- formatItem.Remark = item.Remark
- formatItem.ServiceRemark = item.ServiceRemark
- formatItem.HasPayment = item.HasPayment
- formatItem.HasInvoice = item.HasInvoice
- formatItem.NewCompany = item.NewCompany
- formatItem.ActualPayCompanies = item.ActualPayCompanies
- formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime)
- return
- }
- // CreateImportContractRegister 新增导入的合同登记及套餐、开票到款信息
- func CreateImportContractRegister(item *ContractRegister, serviceList []*ContractService, invoiceList []*ContractInvoice, serviceAmountList []*ContractServiceAmount) (newId int, err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 新增合同登记
- if e := tx.Create(item).Error; e != nil {
- err = e
- return
- }
- newId = item.ContractRegisterId
- // 新增套餐
- if len(serviceList) > 0 {
- // 过滤重复的数组
- serviceMap := make(map[int]struct{})
- addServiceList := make([]*ContractService, 0)
- for i := range serviceList {
- if _, ok := serviceMap[serviceList[i].ServiceTemplateId]; !ok {
- serviceList[i].ContractRegisterId = newId
- addServiceList = append(addServiceList, serviceList[i])
- serviceMap[serviceList[i].ServiceTemplateId] = struct{}{}
- }
- }
- if e := tx.CreateInBatches(addServiceList, len(addServiceList)).Error; e != nil {
- err = e
- return
- }
- }
- // 新增合同套餐金额相关信息
- if len(serviceAmountList) > 0 {
- for i := range serviceAmountList {
- serviceAmountList[i].ContractRegisterId = newId
- }
- if e := tx.CreateInBatches(serviceAmountList, len(serviceAmountList)).Error; e != nil {
- err = e
- return
- }
- }
- // 新增开票/到款
- if len(invoiceList) > 0 {
- for i := range invoiceList {
- invoiceList[i].ContractRegisterId = newId
- }
- if e := tx.CreateInBatches(invoiceList, len(invoiceList)).Error; e != nil {
- err = e
- return
- }
- }
- return
- }
- func GetContractInfoByRegisterIds(registerIds []int) (list []ContractRegister, err error) {
- err = global.DEFAULT_MYSQL.Model(ContractRegister{}).
- Where("is_deleted = 0 AND contract_register_id in ?", registerIds).
- Find(&list).Error
- return
- }
- // CreateContractRegisterAndServices 新增合同登记及套餐
- func CreateContractRegisterAndServicesAndPayMent(item *ContractRegister, serviceDetail []*ContractServiceAndDetail) (err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 合同登记
- //tx.Create(item)
- //nowTime := time.Now().Local()
- for i := 0; i < len(serviceDetail); i++ {
- // 合同服务
- t := serviceDetail[i]
- contractService := &ContractService{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceTemplateId: t.ServiceTemplateId,
- Title: t.Title,
- Value: t.Value,
- TableValue: t.TableValue,
- HasDetail: t.HasDetail,
- ChartPermissionId: t.ChartPermissionId,
- ChartPermissionIds: t.ChartPermissionIds,
- }
- contractService.Set()
- tx.Create(contractService)
- //// 合同服务详情
- //for j := 0; j < len(t.Detail); j++ {
- // contractServiceDetail := t.Detail[j]
- // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
- // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
- // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
- // contractServiceDetail.CreateTime = nowTime
- // tx.Create(contractServiceDetail)
- // t.Detail[j] = contractServiceDetail
- //}
- }
- return
- }
- type CheckContractNameReq struct {
- CompanyName string `json:"company_name" form:"company_name" description:"客户名称"`
- StartDate string `json:"start_date" form:"start_date" description:"合同开始日期"`
- EndDate string `json:"end_date" form:"end_date" description:"合同结束日期"`
- SellerIds string `json:"seller_ids" form:"seller_ids" binding:"required" description:"CRM系统-销售ID"`
- }
- type CheckContractNameResp struct {
- Exist int `json:"exist" description:"是否存在相似的合同:0不存在,1存在"`
- }
- // UpdateContractPreRegister 更新合同预登记
- func UpdateContractPreRegister(item *ContractRegister, updateCols []string, serviceDetail []*ContractServiceAndDetail,
- invoiceList []*ContractInvoice, invoiceUpdateCols []string, delInvoiceIds, delPreRegisterIds []int, ppList []*ContractPreRegister, sellerItem *crm.SellerAdminWithGroupTeam, registerType int) (err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 更新合同登记
- if e := tx.Model(item).Select(updateCols).Updates(item).Error; e != nil {
- err = e
- return
- }
- // 删除原服务及详情信息
- sql := `DELETE FROM contract_service WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- // 新增合同服务
- //nowTime := time.Now().Local()
- for i := 0; i < len(serviceDetail); i++ {
- // 合同服务
- t := serviceDetail[i]
- contractService := &ContractService{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceTemplateId: t.ServiceTemplateId,
- Title: t.Title,
- Value: t.Value,
- TableValue: t.TableValue,
- HasDetail: t.HasDetail,
- ChartPermissionId: t.ChartPermissionId,
- ChartPermissionIds: t.ChartPermissionIds,
- }
- contractService.Set()
- tx.Create(contractService)
- //// 合同服务详情
- //for j := 0; j < len(t.Detail); j++ {
- // contractServiceDetail := t.Detail[j]
- // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
- // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
- // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
- // contractServiceDetail.CreateTime = nowTime
- // tx.Create(contractServiceDetail)
- // t.Detail[j] = contractServiceDetail
- //}
- }
- for i := range invoiceList {
- fmt.Println("invoiceList[i].SellerName",invoiceList[i].SellerName)
- fmt.Println("invoiceList[i].SellerId",invoiceList[i].SellerId)
- if invoiceList[i].ContractInvoiceId == 0 {
- if e := invoiceList[i].Create(); e != nil {
- err = e
- return
- }
- if len(ppList) > 0 {
- pp := &ContractPreRegister{
- PreRegisterId: invoiceList[i].PreRegisterId,
- }
- fmt.Println("PreRegisterId:", pp.PreRegisterId)
- fmt.Println("invoiceList[i].ContractInvoiceId:", invoiceList[i].ContractInvoiceId)
- ppUpdateCols := make([]string, 0)
- if invoiceList[i].InvoiceType == 3 {
- pp.InvoiceId = invoiceList[i].ContractInvoiceId
- ppUpdateCols = append(ppUpdateCols, "InvoiceId")
- } else {
- pp.ArriveId = invoiceList[i].ContractInvoiceId
- ppUpdateCols = append(ppUpdateCols, "ArriveId")
- }
- if e := pp.Update(ppUpdateCols); e != nil {
- err = e
- return
- }
- }
- } else {
- if e := tx.Model(invoiceList[i]).Select(invoiceUpdateCols).Updates(invoiceList[i]).Error; e != nil {
- err = e
- return
- }
- }
- }
- //更新另一类型的invoice表数据
- invoiceItem := ContractInvoice{
- ContractRegisterId: item.ContractRegisterId,
- StartDate: item.StartDate,
- EndDate: item.EndDate,
- CurrencyUnit: item.CurrencyUnit,
- SellerId: sellerItem.SellerId,
- SellerName: sellerItem.SellerName,
- SellerGroupId: sellerItem.GroupId,
- SellerGroupName: sellerItem.GroupName,
- SellerTeamId: sellerItem.TeamId,
- SellerTeamName: sellerItem.TeamName,
- }
- if registerType == 3{
- tx.Model(&invoiceItem).Select([]string{"StartDate", "EndDate", "CurrencyUnit","SellerId",
- "SellerName","SellerGroupId","SellerGroupName","SellerTeamId","SellerTeamName"}).Where("contract_register_id = ? AND invoice_type = 4", item.ContractRegisterId).Updates(invoiceItem)
- } else {
- tx.Model(&invoiceItem).Select([]string{"StartDate", "EndDate", "CurrencyUnit"}).Where("contract_register_id", item.ContractRegisterId).Updates(invoiceItem)
- }
- //pp := &ContractPreRegister{}
- //ppItem, e := pp.Fetch(ppList[0].PreRegisterId)
- //if e != nil {
- // err = e
- //}
- //otherInvoiceItem := ContractInvoice{}
- //if ppList[0].InvoiceType == ContractInvoiceTypePreMake {
- // otherInvoiceItem.ContractInvoiceId = ppItem.ArriveId
- // if ppItem.ArriveId > 0 {
- // //如果是开票类型,那么更新预登记里的预到款销售信息
- // otherInvoiceItem.SellerId = invoiceList[0].SellerId
- // otherInvoiceItem.SellerName = invoiceList[0].SellerName
- // otherInvoiceItem.SellerGroupId = invoiceList[0].SellerGroupId
- // otherInvoiceItem.SellerGroupName = invoiceList[0].SellerGroupName
- // otherInvoiceItem.SellerTeamId = invoiceList[0].SellerTeamId
- // otherInvoiceItem.SellerTeamName = invoiceList[0].SellerTeamName
- // }
- // tx.Model(&otherInvoiceItem).Select([]string{"SellerId", "SellerName", "SellerGroupId","SellerGroupName","SellerTeamId","SellerTeamName"}).Updates(otherInvoiceItem)
- //}
- //删除
- if len(delInvoiceIds) > 0 {
- for _, id := range delInvoiceIds {
- ob := ContractInvoice{ContractInvoiceId: id}
- tx.Model(&ob).Delete(ob)
- }
- }
- if len(delPreRegisterIds) > 0 {
- for _, id := range delPreRegisterIds {
- ob := ContractPreRegister{PreRegisterId: id}
- tx.Model(&ob).Delete(ob)
- }
- }
- return
- }
- // UpdateContractRegister 预登记保存和更新
- func UpdateContractRegisterPre(item *ContractRegister, updateCols []string, serviceDetail []*ContractServiceAndDetail,
- invoiceList []*ContractInvoice, invoiceUpdateCols []string, invoiceHandleType int, ppList []*ContractPreRegister) (err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 更新合同登记
- if e := tx.Model(item).Select(updateCols).Updates(item).Error; e != nil {
- err = e
- return
- }
- // 删除原服务及详情信息
- sql := `DELETE FROM contract_service WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- sql = `DELETE FROM contract_service_detail WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- sql = `DELETE FROM contract_service_amount WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- // 新增合同服务
- //nowTime := time.Now().Local()
- for i := 0; i < len(serviceDetail); i++ {
- // 合同服务
- t := serviceDetail[i]
- contractService := &ContractService{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceTemplateId: t.ServiceTemplateId,
- Title: t.Title,
- Value: t.Value,
- TableValue: t.TableValue,
- HasDetail: t.HasDetail,
- ChartPermissionId: t.ChartPermissionId,
- ChartPermissionIds: t.ChartPermissionIds,
- }
- contractService.Set()
- tx.Create(contractService)
- //// 合同服务详情
- //for j := 0; j < len(t.Detail); j++ {
- // contractServiceDetail := t.Detail[j]
- // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
- // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
- // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
- // contractServiceDetail.CreateTime = nowTime
- // tx.Create(contractServiceDetail)
- // t.Detail[j] = contractServiceDetail
- //}
- }
- productId := 0
- if len(invoiceList) > 0 {
- productId = invoiceList[0].ServiceProductId
- }
- pp := &ContractPreRegister{}
- ppItem, e := pp.Fetch(ppList[0].PreRegisterId)
- if e != nil {
- err = e
- }
- //更新同一预登记记录下的productid
- otherInvoiceItem := ContractInvoice{
- ServiceProductId: productId,
- }
- if ppList[0].InvoiceType == ContractInvoiceTypePreMake {
- otherInvoiceItem.ContractInvoiceId = ppItem.ArriveId
- if ppItem.ArriveId > 0 {
- //如果是开票类型,那么更新预登记里的预到款销售信息
- otherInvoiceItem.SellerId = invoiceList[0].SellerId
- otherInvoiceItem.SellerName = invoiceList[0].SellerName
- otherInvoiceItem.SellerGroupId = invoiceList[0].SellerGroupId
- otherInvoiceItem.SellerGroupName = invoiceList[0].SellerGroupName
- otherInvoiceItem.SellerTeamId = invoiceList[0].SellerTeamId
- otherInvoiceItem.SellerTeamName = invoiceList[0].SellerTeamName
- }
- tx.Model(&otherInvoiceItem).Select([]string{"ServiceProductId","SellerId", "SellerName", "SellerGroupId","SellerGroupName","SellerTeamId","SellerTeamName"}).Updates(otherInvoiceItem)
- } else {
- otherInvoiceItem.ContractInvoiceId = ppItem.InvoiceId
- tx.Model(&otherInvoiceItem).Select([]string{"ServiceProductId"}).Updates(otherInvoiceItem)
- }
- //更新另一类型的invoice表数据
- invoiceItem := ContractInvoice{
- ContractRegisterId: item.ContractRegisterId,
- StartDate: item.StartDate,
- EndDate: item.EndDate,
- CurrencyUnit: item.CurrencyUnit,
- }
- tx.Model(&invoiceItem).Select([]string{"StartDate", "EndDate", "CurrencyUnit"}).Where("contract_register_id", item.ContractRegisterId).Updates(invoiceItem)
- // 开票到款操作类型: 0-无; 1-更新; 2-新增;
- if invoiceHandleType == 2 {
- for _, v := range invoiceList {
- if e := v.Create(); e != nil {
- err = e
- return
- }
- if len(ppList) > 0 {
- pp := &ContractPreRegister{
- PreRegisterId: ppList[0].PreRegisterId,
- }
- ppUpdateCols := make([]string, 0)
- if v.InvoiceType == 3 {
- pp.InvoiceId = v.ContractInvoiceId
- ppUpdateCols = append(ppUpdateCols, "InvoiceId")
- } else {
- pp.ArriveId = v.ContractInvoiceId
- ppUpdateCols = append(ppUpdateCols, "ArriveId")
- }
- if e := pp.Update(ppUpdateCols); e != nil {
- err = e
- return
- }
- }
- }
- }
- if invoiceHandleType == 1 {
- for i := range invoiceList {
- if e := tx.Model(invoiceList[i]).Select(invoiceUpdateCols).Updates(invoiceList[i]).Error; e != nil {
- err = e
- return
- }
- }
- }
- return
- }
- // UpdateSupplementContractPreRegister 更新补录合同预登记
- func UpdateSupplementContractPreRegister(item *ContractRegister, serviceAmountList []*ContractServiceAmount, serviceDetail []*ContractServiceAndDetail) (err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- for i := 0; i < len(serviceAmountList); i++ {
- // 合同服务
- t := serviceAmountList[i]
- tmp := &ContractServiceAmount{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceAmount: t.ServiceAmount,
- CurrencyUnit: t.CurrencyUnit,
- }
- if e := tmp.Create(); e != nil {
- err = e
- return
- }
- }
- // 删除原服务及详情信息
- sql := `DELETE FROM contract_service WHERE contract_register_id = ?`
- tx.Exec(sql, item.ContractRegisterId)
- // 新增合同服务
- //nowTime := time.Now().Local()
- for i := 0; i < len(serviceDetail); i++ {
- // 合同服务
- t := serviceDetail[i]
- contractService := &ContractService{
- ContractRegisterId: item.ContractRegisterId,
- ProductId: t.ProductId,
- ServiceTemplateId: t.ServiceTemplateId,
- Title: t.Title,
- Value: t.Value,
- TableValue: t.TableValue,
- HasDetail: t.HasDetail,
- ChartPermissionId: t.ChartPermissionId,
- ChartPermissionIds: t.ChartPermissionIds,
- }
- contractService.Set()
- tx.Create(contractService)
- //// 合同服务详情
- //for j := 0; j < len(t.Detail); j++ {
- // contractServiceDetail := t.Detail[j]
- // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
- // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
- // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
- // contractServiceDetail.CreateTime = nowTime
- // tx.Create(contractServiceDetail)
- // t.Detail[j] = contractServiceDetail
- //}
- }
- return
- }
- type CheckContractDuplicateReq struct {
- CompanyName string `json:"company_name" form:"company_name" description:"客户名称"`
- StartDate string `json:"start_date" form:"start_date" description:"合同开始日期"`
- EndDate string `json:"end_date" form:"end_date" description:"合同结束日期"`
- Services []ContractServiceAddReq `json:"services" description:"服务套餐内容"`
- }
- func CheckContractDuplicate(condition string, pars []interface{}) (list []*ContractRegister,err error) {
- query := global.DEFAULT_MYSQL.Table("contract_register AS a").
- Select("a.* ").
- Joins(" JOIN contract_service AS b ON a.contract_register_id = b.contract_register_id ").
- Where(condition, pars...).
- Group("a.contract_register_id")
- err = query.Find(&list).Error
- return
- }
- type CheckContractDuplicateResp struct {
- Exist int `json:"exist" description:"是否存在重复的合同:0不存在,1存在"`
- }
- func CheckContractServiceDuplicate(registerIds []int) (ids []*string, err error) {
- err = global.DEFAULT_MYSQL.Table("contract_service").
- Select("GROUP_CONCAT(service_template_id ORDER BY service_template_id) AS ids ").
- Where("contract_register_id IN (?)", registerIds).
- Group("contract_register_id").Scan(&ids).Error
- return
- }
|