package salary_calculator import ( "enterprise/common/dao" "enterprise/common/model" "enterprise/common/registry" log "github.com/sirupsen/logrus" "github.com/smbrave/goutil" "github.com/spf13/cast" "time" ) const ( SalaryCalculatorOperation = "operation" //运营计算工资的方法 ) type SalaryCalculator1000 struct { corp *model.Corp user *model.StaffUser } func NewSalaryCalculator1000(corp *model.Corp, user *model.StaffUser) registry.SalaryCalculator { return &SalaryCalculator1000{ corp: corp, user: user, } } func (s *SalaryCalculator1000) Calculate(salary *model.StaffSalary) map[string]interface{} { data := make(map[string]interface{}) data["adProfit"] = s.getAdOwnerProfit(salary) data["appIncRate10024"] = s.getAppIncRate(salary, 10024) return data } func (s *SalaryCalculator1000) getAdOwnerProfit(salary *model.StaffSalary) float64 { monthTime, _ := time.ParseInLocation("200601", salary.Month, time.Local) startDay := monthTime.Format("2006-01-02") endDay := monthTime.AddDate(0, 1, -1).Format("2006-01-02") datas, err := dao.NewUnifyAdData().QueryOwnerData(s.user.Username, startDay, endDay) if err != nil { log.Errorf("db error :%s", err.Error()) return 0 } sumProfitAmount := int64(0) for _, data := range datas { sumProfitAmount += data.PayAmount - data.Cost } totalProfit := cast.ToFloat64(goutil.FormatMoney(sumProfitAmount)) return totalProfit } func (s *SalaryCalculator1000) getAppIncRate(salary *model.StaffSalary, appid int64) float64 { monthTime, _ := time.ParseInLocation("200601", salary.Month, time.Local) sumProfitAmount1 := int64(0) sumProfitAmount2 := int64(0) //本月 datas, err := dao.NewUnifyKctData().QueryData(monthTime.Format("2006-01-02"), monthTime.AddDate(0, 1, -1).Format("2006-01-02")) if err != nil { log.Errorf("db error :%s", err.Error()) return 0 } for _, data := range datas { sumProfitAmount1 += data.PayAmount - data.RefundAmount - data.Cost } //上月 datas, err = dao.NewUnifyKctData().QueryData(monthTime.AddDate(0, -1, 0).Format("2006-01-02"), monthTime.AddDate(0, 0, -1).Format("2006-01-02")) if err != nil { log.Errorf("db error :%s", err.Error()) return 0 } for _, data := range datas { sumProfitAmount2 += data.PayAmount - data.RefundAmount - data.Cost } salary.SetExtra("sumProfitAmount1", sumProfitAmount1) salary.SetExtra("sumProfitAmount2", sumProfitAmount2) return float64(sumProfitAmount1) / float64(sumProfitAmount2) }