feat(report):完成获取公示用数据接口的功能。

This commit is contained in:
徐涛
2022-08-24 11:26:17 +08:00
parent ad19169ac5
commit 4919c7152f
4 changed files with 289 additions and 0 deletions

View File

@@ -430,3 +430,156 @@ func (_ReportService) SearchReport(requestUser, requestPark, requestKeyword stri
Find(&records)
return records, total, err
}
func (_ReportService) AssembleReportPublicity(reportId string) (*model.Publicity, error) {
// 资料准备
var reportIndex = new(model.Report)
has, err := global.DBConn.ID(reportId).NoAutoCondition().Get(reportIndex)
if err != nil || !has {
return nil, exceptions.NewNotFoundErrorFromError("未找到指定的公示报表", err)
}
var summary = new(model.ReportSummary)
has, err = global.DBConn.ID(reportId).NoAutoCondition().Get(summary)
if err != nil || !has {
return nil, exceptions.NewNotFoundErrorFromError("未找到指定的公示报表概览", err)
}
var maintenanceFeeRecords = make([]model.WillDilutedFee, 0)
err = global.DBConn.Where(builder.Eq{"report_id": reportId}).Find(&maintenanceFeeRecords)
if err != nil {
return nil, exceptions.NewNotFoundErrorFromError("未能获取到公示报表对应的待摊薄费用信息", err)
}
var endUserDetails = make([]model.EndUserDetail, 0)
err = global.DBConn.Where(builder.Eq{"report_id": reportId}).Find(&endUserDetails)
if err != nil {
return nil, exceptions.NewNotFoundErrorFromError("未获取到公示报表对应的终端用户抄表信息", err)
}
parkDetail, err := ParkService.FetchParkDetail(reportIndex.ParkId)
if err != nil {
return nil, exceptions.NewNotFoundErrorFromError("未找到公示报表对应的园区信息", err)
}
userDetail, err := UserService.retreiveUserDetail(parkDetail.UserId)
if err != nil {
return nil, exceptions.NewNotFoundErrorFromError("未找到公示报表对应的企业信息", err)
}
// 组合数据
paidPart := model.PaidPart{
Overall: summary.Overall,
OverallPrice: summary.OverallPrice.Decimal,
ConsumptionFee: summary.ConsumptionFee.Decimal,
OverallFee: summary.OverallFee,
Critical: decimal.NewNullDecimal(summary.Critical),
CriticalPrice: summary.CriticalPrice,
CriticalFee: decimal.NewNullDecimal(summary.CriticalFee),
Peak: decimal.NewNullDecimal(summary.Peak),
PeakPrice: summary.PeakPrice,
PeakFee: decimal.NewNullDecimal(summary.PeakFee),
Flat: decimal.NewNullDecimal(summary.Flat),
FlatPrice: summary.FlatPrice,
FlatFee: decimal.NewNullDecimal(summary.FlatFee),
Valley: decimal.NewNullDecimal(summary.Valley),
ValleyPrice: summary.ValleyPrice,
ValleyFee: decimal.NewNullDecimal(summary.ValleyFee),
BasicFee: summary.BasicFee,
AdjustFee: summary.AdjustFee,
}
endUserSummary := model.EndUserOverallPart{
Overall: summary.CustomerConsumption.Decimal,
OverallPrice: summary.OverallPrice.Decimal,
OverallFee: summary.CustomerConsumptionFee.Decimal,
Critical: summary.CustomerConsumptionCritical,
CriticalPrice: summary.CriticalPrice,
CriticalFee: summary.CustomerConsumptionCriticalFee,
Peak: summary.CustomerConsumptionPeak,
PeakPrice: summary.PeakPrice,
PeakFee: summary.CustomerConsumptionPeakFee,
Flat: summary.CustomerConsumptionFlat,
FlatPrice: summary.FlatPrice,
FlatFee: summary.CustomerConsumptionFlatFee,
Valley: summary.CustomerConsumptionValley,
ValleyPrice: summary.ValleyPrice,
ValleyFee: summary.CustomerConsumptionValleyFee,
}
lossPart := model.LossPart{
Quantity: summary.Loss.Decimal,
Price: summary.OverallPrice.Decimal,
ConsumptionFee: summary.LossFee.Decimal,
Proportion: summary.LossProportion.Decimal,
}
publicSummary := model.PublicConsumptionOverallPart{
Overall: summary.PublicConsumption.Decimal,
OverallPrice: summary.OverallPrice.Decimal,
OverallFee: summary.PublicConsumptionFee.Decimal,
Critical: summary.PublicConsumptionCritical,
CriticalPrice: summary.CriticalPrice,
CriticalFee: summary.PublicConsumptionCriticalFee,
Peak: summary.PublicConsumptionPeak,
PeakPrice: summary.PeakPrice,
PeakFee: summary.PublicConsumptionPeakFee,
Flat: summary.PublicConsumptionFlat,
FlatPrice: summary.FlatPrice,
FlatFee: summary.PublicConsumptionFlatFee,
Valley: summary.PublicConsumptionValley,
ValleyPrice: summary.ValleyPrice,
ValleyFee: summary.PublicConsumptionValleyFee,
}
otherCollection := model.OtherShouldCollectionPart{
MaintenanceFee: summary.FinalDilutedOverall,
BasicFees: summary.BasicFee.Add(summary.AdjustFee),
}
finalMaintenance := lossPart.ConsumptionFee.Add(publicSummary.ConsumptionFee).Add(otherCollection.MaintenanceFee.Decimal).Add(otherCollection.BasicFees)
var maintenancePrice = decimal.Zero
if !endUserSummary.Overall.Equal(decimal.Zero) {
maintenancePrice = finalMaintenance.Div(endUserSummary.Overall).RoundBank(8)
}
var maintenanceProportion = decimal.Zero
if !paidPart.OverallFee.Equal(decimal.Zero) || !otherCollection.MaintenanceFee.Decimal.Equal(decimal.Zero) {
maintenanceProportion = finalMaintenance.Div(paidPart.OverallFee.Add(otherCollection.MaintenanceFee.Decimal)).RoundBank(8)
}
var priceRatio = decimal.Zero
if !summary.OverallPrice.Decimal.Equal(decimal.Zero) {
priceRatio = maintenancePrice.Div(summary.OverallPrice.Decimal).RoundBank(8)
}
maintenanceFees := model.MaintenancePart{
BasicFees: otherCollection.BasicFees,
LossFee: lossPart.ConsumptionFee,
PublicConsumptionFee: publicSummary.ConsumptionFee,
MaintenanceFee: otherCollection.MaintenanceFee.Decimal,
FinalMaintenance: finalMaintenance,
MaintenanceProportion: maintenanceProportion,
MaintenancePrice: maintenancePrice,
PriceRatio: priceRatio,
}
endUsers := lo.Map(
endUserDetails,
func(elem model.EndUserDetail, index int) model.EndUserSummary {
return model.EndUserSummary{
CustomerName: elem.CustomerName,
Address: elem.Address,
MeterId: elem.MeterId,
Overall: elem.Overall.Decimal,
OverallFee: elem.OverallFee.Decimal,
Critical: elem.Critical,
CriticalFee: elem.CriticalFee,
Peak: elem.Peak,
PeakFee: elem.PeakFee,
Valley: elem.Valley,
ValleyFee: elem.ValleyFee,
Maintenance: elem.FinalDiluted.Decimal,
}
},
)
return &model.Publicity{
Report: *reportIndex,
Park: *parkDetail,
User: *userDetail,
Paid: paidPart,
EndUser: endUserSummary,
Loss: lossPart,
PublicConsumptionOverall: publicSummary,
OtherCollections: otherCollection,
Maintenance: maintenanceFees,
EndUserDetails: endUsers,
}, nil
}