forked from free-lancers/electricity_bill_calc_service
feat(report):完成获取公示用数据接口的功能。
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user