constvar/serviceCollectionPlan.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
model/serviceCollectionPlan.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
model/serviceOrder.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service/receipt.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
constvar/serviceCollectionPlan.go
@@ -15,6 +15,14 @@ type CollectionStatus int const ( CollectionStatusUnCollected CollectionStatus = 1 //待收款 CollectionStatusCollected CollectionStatus = 2 //已收款 CollectionStatusUnCollected CollectionStatus = 1 //待收款 CollectionStatusSubCollected CollectionStatus = 2 //部分收款 CollectionStatusCollected CollectionStatus = 3 //已收款 ) type CollectionSourceType int const ( CollectionSourceTypeSaleDetails CollectionSourceType = 1 //销售明细 CollectionSourceTypeServiceContract CollectionSourceType = 2 //服务合同 ) model/serviceCollectionPlan.go
@@ -13,19 +13,22 @@ type ( // ServiceCollectionPlan 收款计划 ServiceCollectionPlan struct { Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` CollectionType int `gorm:"collection_type" json:"collectionType"` // 类型(1 计划收款日期 2 项目状态) SourceType int `gorm:"source_type" json:"sourceType"` // 源单类型(1销售明细2服务合同3销售发票) SourceId int `gorm:"source_id" json:"sourceId"` // 源单id PrincipalId int `gorm:"principal_id" json:"principalId"` // 收款负责人ID Term int `gorm:"term" json:"term"` // 期次 Percent decimal.Decimal `gorm:"percent" json:"percent"` // 比例 Amount decimal.Decimal `gorm:"amount" json:"amount"` // 金额 MoneyType string `gorm:"money_type" json:"moneyType"` // 币种 CollectionDate time.Time `gorm:"collection_date" json:"collectionDate"` // 计划收款日期 Remark string `gorm:"remark" json:"remark"` // 备注 Status constvar.CollectionStatus `gorm:"status" json:"status"` // 状态(1未收2已收) FileId int `gorm:"file_id" json:"fileId"` // 附件id Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` CollectionType int `gorm:"collection_type" json:"collectionType"` // 类型(1 计划收款日期 2 项目状态) SourceType constvar.CollectionSourceType `gorm:"source_type" json:"sourceType"` // 源单类型(1销售明细2服务合同3销售发票) SourceId int `gorm:"source_id" json:"sourceId"` // 源单id PrincipalId int `gorm:"principal_id" json:"principalId"` // 收款负责人ID Term int `gorm:"term" json:"term"` // 期次 Percent decimal.Decimal `gorm:"percent" json:"percent"` // 比例 Amount decimal.Decimal `gorm:"amount" json:"amount"` // 金额 MoneyType string `gorm:"money_type" json:"moneyType"` // 币种 CollectionDate time.Time `gorm:"collection_date" json:"collectionDate"` // 计划收款日期 Remark string `gorm:"remark" json:"remark"` // 备注 Status constvar.CollectionStatus `gorm:"status" json:"status"` // 状态(1未收2部分已收3已收) AmountReceivable decimal.Decimal `gorm:"column:amount_receivable;type:decimal(12,2);comment:应收金额" json:"amountReceivable"` // 应收金额 AmountReceived decimal.Decimal `gorm:"column:amount_received;type:decimal(12,2);comment:已收金额" json:"amountReceived"` // 已收金额 AmountTotal decimal.Decimal `gorm:"column:amount_total;type:decimal(12,2);comment:总额" json:"amountTotal"` // 总额 FileId int `gorm:"file_id" json:"fileId"` // 附件id } // ServiceCollectionPlanSearch 收款计划搜索条件 @@ -145,6 +148,38 @@ return records, total, err } func (slf *ServiceCollectionPlanSearch) UpdateByMap(upMap map[string]interface{}) error { var ( db = slf.build() ) if err := db.Updates(upMap).Error; err != nil { return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) } return nil } func (slf *ServiceCollectionPlanSearch) UpdateStatusAndAmount(collection *ServiceCollectionPlan, receiveAmount decimal.Decimal) error { receivedAmount := collection.AmountReceived.Add(receiveAmount) var status constvar.CollectionStatus if receiveAmount.GreaterThanOrEqual(collection.AmountTotal) { status = constvar.CollectionStatusCollected } else { status = constvar.CollectionStatusSubCollected } receivableAmount := collection.AmountTotal.Add(receivedAmount) err := slf.SetId(collection.Id).UpdateByMap(map[string]interface{}{ "status": status, "amount_received": receivedAmount, "amount_receivable": receivableAmount}) if err != nil { return err } return nil } // InitDefaultData 初始化数据 func (slf *ServiceCollectionPlanSearch) InitDefaultData() error { var ( model/serviceOrder.go
@@ -39,7 +39,7 @@ FaultType FaultType `gorm:"foreignKey:FaultTypeId"` SeverityId int `gorm:"column:severity_id;type:int;not null;default:0;comment:严重程度id" json:"severity"` // 严重程度id Severity Severity `gorm:"foreignKey:SeverityId"` ServiceOrderStatusId int `gorm:"column:service_order_status_id;type:int;not null;default:0;comment:服务单状态id" json:"status"` // 处理状态 ServiceOrderStatusId int `gorm:"column:service_order_status_id;type:int;not null;default:0;comment:服务单状态id" json:"serviceOrderStatusId"` // 处理状态 ServiceOrderStatus ServiceOrderStatus `gorm:"foreignKey:ServiceOrderStatusId"` ExpectTime string `gorm:"column:expect_time;type:varchar(255);not null;default:'';comment:希望处理时间" json:"expectTime"` // 希望处理时间 RealTime string `gorm:"column:real_time;type:varchar(255);not null;default:'';comment:实际处理时间" json:"realTime"` // 实际处理时间 service/receipt.go
@@ -17,22 +17,45 @@ func (ReceiptService) AddReceipt(receipt *model.Receipt) int { var moneyAdder model.MoneyAdder var sourceId int var collection *model.ServiceCollectionPlan var err error switch receipt.SourceType { case constvar.ReceiptSourceTypeSalesDetails: moneyAdder = model.NewSalesDetailsSearch() sourceId = receipt.SourceId case constvar.ReceiptSourceTypeServiceContract: moneyAdder = model.NewServiceContractSearch() sourceId = receipt.SourceId case constvar.ReceiptSourceTypeCollectionPlan: collection, err = model.NewServiceCollectionPlanSearch().SetId(receipt.SourceId).First() if err != nil { return ecode.DBErr } sourceId = collection.SourceId switch collection.SourceType { case constvar.CollectionSourceTypeSaleDetails: moneyAdder = model.NewSalesDetailsSearch() case constvar.CollectionSourceTypeServiceContract: moneyAdder = model.NewServiceContractSearch() } } err := model.WithTransaction(func(db *gorm.DB) error { err = model.WithTransaction(func(db *gorm.DB) error { err := model.NewReceiptSearch().SetOrm(db).Create(receipt) if err != nil { return err } err = moneyAdder.AmountReceivableAdd(db, receipt.SourceId, decimal.Zero.Sub(receipt.Amount).Round(2)) if receipt.SourceType == constvar.ReceiptSourceTypeCollectionPlan { err = model.NewServiceCollectionPlanSearch().SetOrm(db).UpdateStatusAndAmount(collection, receipt.Amount) if err != nil { return err } } err = moneyAdder.AmountReceivableAdd(db, sourceId, decimal.Zero.Sub(receipt.Amount).Round(2)) if err != nil { return err } err = moneyAdder.AmountReceivedAdd(db, receipt.SourceId, receipt.Amount.Round(2)) err = moneyAdder.AmountReceivedAdd(db, sourceId, receipt.Amount.Round(2)) if err != nil { return err } @@ -50,23 +73,46 @@ return ecode.DBErr } var moneyAdder model.MoneyAdder var sourceId int var collection *model.ServiceCollectionPlan switch receipt.SourceType { case constvar.ReceiptSourceTypeSalesDetails: moneyAdder = model.NewSalesDetailsSearch() sourceId = receipt.SourceId case constvar.ReceiptSourceTypeServiceContract: moneyAdder = model.NewServiceContractSearch() sourceId = receipt.SourceId case constvar.ReceiptSourceTypeCollectionPlan: collection, err = model.NewServiceCollectionPlanSearch().SetId(receipt.SourceId).First() if err != nil { return ecode.DBErr } sourceId = collection.SourceId switch collection.SourceType { case constvar.CollectionSourceTypeSaleDetails: moneyAdder = model.NewSalesDetailsSearch() case constvar.CollectionSourceTypeServiceContract: moneyAdder = model.NewServiceContractSearch() } } err = model.WithTransaction(func(db *gorm.DB) error { err := model.NewReceiptSearch().SetId(id).Delete() err := model.NewReceiptSearch().SetOrm(db).SetId(id).Delete() if err != nil { return err } err = moneyAdder.AmountReceivableAdd(db, receipt.SourceId, receipt.Amount.Round(2)) if receipt.SourceType == constvar.ReceiptSourceTypeCollectionPlan { err = model.NewServiceCollectionPlanSearch().SetOrm(db).UpdateStatusAndAmount(collection, decimal.Zero.Sub(receipt.Amount)) if err != nil { return err } } err = moneyAdder.AmountReceivableAdd(db, sourceId, receipt.Amount.Round(2)) if err != nil { return err } err = moneyAdder.AmountReceivedAdd(db, receipt.SourceId, decimal.Zero.Sub(receipt.Amount).Round(2)) err = moneyAdder.AmountReceivedAdd(db, sourceId, decimal.Zero.Sub(receipt.Amount).Round(2)) if err != nil { return err } @@ -110,23 +156,45 @@ return ecode.DBErr } var moneyAdder model.MoneyAdder var sourceId int var collection *model.ServiceCollectionPlan switch receipt.SourceType { case constvar.ReceiptSourceTypeSalesDetails: moneyAdder = model.NewSalesDetailsSearch() sourceId = receipt.SourceId case constvar.ReceiptSourceTypeServiceContract: moneyAdder = model.NewServiceContractSearch() sourceId = receipt.SourceId case constvar.ReceiptSourceTypeCollectionPlan: collection, err = model.NewServiceCollectionPlanSearch().SetId(receipt.SourceId).First() if err != nil { return ecode.DBErr } sourceId = collection.SourceId switch collection.SourceType { case constvar.CollectionSourceTypeSaleDetails: moneyAdder = model.NewSalesDetailsSearch() case constvar.CollectionSourceTypeServiceContract: moneyAdder = model.NewServiceContractSearch() } } err = model.WithTransaction(func(db *gorm.DB) error { err := model.NewReceiptSearch().SetId(receipt.Id).Save(receipt) err = model.NewReceiptSearch().SetId(receipt.Id).Save(receipt) if err != nil { return err } diffAmount := receipt.Amount.Sub(old.Amount) err = moneyAdder.AmountReceivedAdd(db, receipt.SourceId, diffAmount.Round(2)) if receipt.SourceType == constvar.ReceiptSourceTypeCollectionPlan { err = model.NewServiceCollectionPlanSearch().SetOrm(db).UpdateStatusAndAmount(collection, diffAmount) if err != nil { return err } } err = moneyAdder.AmountReceivedAdd(db, sourceId, diffAmount.Round(2)) if err != nil { return err } err = moneyAdder.AmountReceivableAdd(db, receipt.SourceId, decimal.Zero.Sub(diffAmount).Round(2)) err = moneyAdder.AmountReceivableAdd(db, sourceId, decimal.Zero.Sub(diffAmount).Round(2)) if err != nil { return err }