123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770 |
- package final
- import (
- "errors"
- "fmt"
- "math"
- "time"
- "zhiyuan/models"
- "zhiyuan/pkg/db"
- "zhiyuan/pkg/logger"
- "zhiyuan/pkg/utils"
- "zhiyuan/services/admin"
- "github.com/Knetic/govaluate"
- "github.com/gin-gonic/gin"
- )
- type FinalSiteAmount struct {
- ID int64 `json:"id" prop:"add:false"`
- SiteId int64 `json:"site_id" label:"套餐" type:"int" prop:"add edit" search:"="`
- Content string `json:"content" label:"内容" type:"string" prop:"edit"`
- ContractTotal float64 `json:"contract_total" label:"合同总金额" type:"float" prop:"add:false select:zy_final_site_amount.contract_total+sum(if(isnull(change.id),0,if(change.type2=2,-change.amount,change.amount)))"`
- Performance float64 `json:"performance" label:"业绩" type:"float" prop:"add:false"`
- Purchase float64 `json:"purchase" label:"代购" type:"float" prop:"add:false"`
- Custom float64 `json:"custom" label:"定制" type:"float" prop:"add:false"`
- PersonalCollect float64 `json:"personal_collect" label:"个性化汇总" type:"float" prop:"add:false"`
- PersonalMaterial float64 `json:"personal_material" label:"个性化材料" type:"float" prop:"add:false"`
- PersonalCustom float64 `json:"personal_custom" label:"个性化定制" type:"float" prop:"add:false"`
- SpecialItem float64 `json:"special_item" label:"特殊项目代购" type:"float" prop:"add:false"`
- DesignFree float64 `json:"design_free" label:"设计费" type:"float" prop:"add:false"`
- StartTime int64 `json:"starttime" label:"开工日期" type:"int" prop:"edit"`
- Duration int64 `json:"duration" label:"工期" type:"int" prop:"edit"`
- EndTime int64 `json:"endtime" label:"完工日期" type:"int" prop:"add:false" search:"="`
- Files string `json:"files" label:"文件上传" type:"string" prop:"edit"`
- CreatedId int64 `json:"created_id" label:"创建人员" type:"int" prop:"add:false" search:"="`
- DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
- CreatedAt int64 `json:"created_at" prop:"add:false"`
- UpdatedAt int64 `json:"updated_at" prop:"add:false"`
- db.BaseModel
- }
- func (FinalSiteAmount) TableName() string {
- return "zy_final_site_amount"
- }
- func (model FinalSiteAmount) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- return true
- }
- func (FinalSiteAmount) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
- site_id, _ := db.ToInt64(data["site_id"])
- var site FinalSite
- db.GetModel(map[string]interface{}{
- "id": site_id,
- "deleted_at": 0,
- }, &site)
- if site.ID == 0 {
- return errors.New("没有权限")
- }
- from := make(map[string]float64)
- var fields []FinalPkgField
- db.GetModel(map[string]interface{}{"pkg_id": site.PkgId}, &fields)
- for _, v := range fields {
- value, _ := db.ToFloat64(v.Value)
- from[v.Name] = value
- }
- data["content"] = utils.JsonEncode(from)
- data["contract_total"] = 0
- data["performance"] = 0
- data["created_id"] = c.GetInt("adminID")
- return nil
- }
- func (FinalSiteAmount) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
- var model FinalSiteAmount
- db.GetModel(map[string]interface{}{
- "id": id,
- "deleted_at": 0,
- }, &model)
- var site FinalSite
- db.GetModel(map[string]interface{}{
- "id": model.SiteId,
- "deleted_at": 0,
- }, &site)
- if !admin.CheckShop(int(site.ShopId), c.GetInt("adminID")) {
- return errors.New("没有权限")
- }
- if site.State == 1 {
- return errors.New("工地已开工")
- }
- /*project_direct_discount, _ := db.ToFloat64(data["project_direct_discount"])
- project_direct, _ := db.ToFloat64(data["project_direct"])
- quotation_discount := utils.FloatDiv(project_direct_discount, project_direct, 2)
- data["quotation_discount"] = quotation_discount
- material_purchase_total, _ := db.ToFloat64(data["material_purchase_total"])
- special_total, _ := db.ToFloat64(data["special_total"])
- taxes, _ := db.ToFloat64(data["taxes"])
- quotation_total := utils.FloatAddSlice([]float64{project_direct_discount, material_purchase_total, special_total, taxes}, 2)
- data["quotation_total"] = quotation_total
- contract_total, _ := db.ToFloat64(data["contract_total"])
- preferential_total := utils.FloatSub(quotation_total, contract_total, 2)
- data["preferential_total"] = preferential_total
- var site FinalSite
- db.GetModel(map[string]interface{}{
- "id": model.SiteId,
- "deleted_at": 0,
- }, &site)
- var pkg FinalPkg
- db.GetModel(map[string]interface{}{
- "id": site.PkgId,
- "deleted_at": 0,
- }, &pkg)
- design, _ := db.ToFloat64(data["design"])
- draw, _ := db.ToFloat64(data["draw"])
- must_draw := utils.FloatMul(pkg.Design, site.Area, 2)
- design_grant := utils.FloatMul(utils.FloatSub(utils.FloatAdd(design, draw, 2), must_draw, 2), quotation_discount, 2)
- design_grant = utils.FloatSub(design_grant, preferential_total, 2)
- if pkg.Discount > quotation_discount {
- diff := utils.FloatMul(project_direct, utils.FloatSub(pkg.Discount, quotation_discount, 2), 2)
- design_grant = utils.FloatAdd(design_grant, diff, 2)
- }
- data["design_grant"] = design_grant
- db.InsertModel(db.Type(FinalSiteAmountRecord{}), map[string]interface{}{
- "site_id": model.SiteId,
- "deposit": data["deposit"],
- "package": data["package"],
- "personal_total": data["personal_total"],
- "personal_material": data["personal_material"],
- "personal_custom": data["personal_custom"],
- "personal_build": data["personal_build"],
- "draw": data["draw"],
- "design": data["design"],
- "project_direct": data["project_direct"],
- "project_direct_discount": data["project_direct_discount"],
- "quotation_discount": data["quotation_discount"],
- "material_purchase_total": data["material_purchase_total"],
- "purchase": data["purchase"],
- "upgrade": data["upgrade"],
- "special_total": data["special_total"],
- "taxes": data["taxes"],
- "deduction": data["deduction"],
- "quotation_total": data["quotation_total"],
- "preferential_total": data["preferential_total"],
- "contract_total": data["contract_total"],
- "files": data["files"],
- "created_id": c.GetInt("adminID"),
- })*/
- starttime, _ := db.ToInt64(data["starttime"])
- duration, _ := db.ToInt64(data["duration"])
- if starttime == 0 {
- return errors.New("请输入开工时间")
- }
- if duration == 0 {
- return errors.New("请输入工期")
- }
- t := time.Unix(starttime, 0)
- t = t.AddDate(0, 0, int(duration)-1)
- endtime := t.Unix()
- err := db.UpdateModel(db.Type(site), site.ID, map[string]interface{}{
- "starttime": starttime,
- "endtime": endtime,
- })
- if err != nil {
- return err
- }
- from := utils.JsonDecode(db.ToString(data["content"])).ToMap()
- context, err := NewAmountContext(site, from)
- if err != nil {
- return err
- }
- contractTotal, performance, purchase, custom, personalCollect, personalMaterial, personalCustom, specialItem, designFree, err := context.Eval()
- if err != nil {
- return err
- }
- data["content"] = context.Save()
- data["contract_total"] = contractTotal
- data["performance"] = performance
- data["purchase"] = purchase
- data["custom"] = custom
- data["personal_collect"] = personalCollect
- data["personal_material"] = personalMaterial
- data["personal_custom"] = personalCustom
- data["special_item"] = specialItem
- data["design_free"] = designFree
- data["endtime"] = endtime
- db.InsertModel(db.Type(FinalSiteAmountRecord{}), map[string]interface{}{
- "site_id": model.SiteId,
- "content": data["content"],
- "contract_total": data["contract_total"],
- "performance": data["performance"],
- "purchase": data["purchase"],
- "custom": data["custom"],
- "personal_collect": data["personal_collect"],
- "personal_material": data["personal_material"],
- "personal_custom": data["personal_custom"],
- "special_item": data["special_item"],
- "design_free": data["design_free"],
- "starttime": data["starttime"],
- "duration": data["duration"],
- "endtime": data["endtime"],
- "files": data["files"],
- "created_id": c.GetInt("adminID"),
- })
- return nil
- }
- func (FinalSiteAmount) DelPrivilege(c *gin.Context, id int64) error {
- return nil
- }
- func (FinalSiteAmount) Page() bool {
- return false
- }
- func (FinalSiteAmount) Count() bool {
- return true
- }
- func (model FinalSiteAmount) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{
- {
- Model: FinalSiteChange{},
- As: "change",
- On: []string{"`change`.`site_id` = " + model.TableName() + ".`site_id`"},
- },
- }
- }
- func (model FinalSiteAmount) GroupBy() string {
- return fmt.Sprintf("`%s`.`id`", model.TableName())
- }
- type FinalSiteAmountDesignerStatist struct {
- DesignerId int64 `json:"designer_id" label:"设计师" prop:"select:site.designer_id"`
- DesignerName string `json:"designer_name" prop:"select:designer.username" search:"like"`
- DesignerPhone string `json:"designer_phone" prop:"select:designer.phone"`
- ContractTotal float64 `json:"contract_total" label:"合同金额" type:"float" prop:"select:sum(zy_final_site_amount.contract_total)"`
- Performance float64 `json:"performance" label:"业绩" type:"float" prop:"select:sum(zy_final_site_amount.performance)"`
- Purchase float64 `json:"purchase" label:"代购" type:"float" prop:"select:sum(zy_final_site_amount.purchase)"`
- Custom float64 `json:"custom" label:"定制" type:"float" prop:"select:sum(zy_final_site_amount.custom)"`
- PersonalCollect float64 `json:"personal_collect" label:"个性化汇总" type:"float" prop:"select:sum(zy_final_site_amount.personal_collect)"`
- PersonalMaterial float64 `json:"personal_material" label:"个性化材料" type:"float" prop:"select:sum(zy_final_site_amount.personal_material)"`
- PersonalCustom float64 `json:"personal_custom" label:"个性化定制" type:"float" prop:"select:sum(zy_final_site_amount.personal_custom)"`
- SpecialItem float64 `json:"special_item" label:"特殊项目代购" type:"float" prop:"select:sum(zy_final_site_amount.special_item)"`
- DesignFree float64 `json:"design_free" label:"设计费" type:"float" prop:"select:sum(zy_final_site_amount.design_free)"`
- db.BaseModel
- }
- func (FinalSiteAmountDesignerStatist) TableName() string {
- return "zy_final_site_amount"
- }
- func (model FinalSiteAmountDesignerStatist) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- if !admin.CheckAuth([]string{"final:finalsitecontract:performance"}, c.GetInt("adminID")) {
- adminID := s.Param(c.GetInt("adminID"))
- where := fmt.Sprintf("`site`.`designer_id` = %s", adminID)
- s.Where = append(s.Where, fmt.Sprintf("(%s)", where))
- }
- if signtime1s, ok := data["signtime1"]; ok {
- if signtime1, ok := db.ToInt64(signtime1s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` >= %s", s.Param(signtime1)))
- }
- }
- if signtime2s, ok := data["signtime2"]; ok {
- if signtime2, ok := db.ToInt64(signtime2s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` < %s", s.Param(signtime2+60*60*24)))
- }
- }
- return true
- }
- func (model FinalSiteAmountDesignerStatist) GroupBy() string {
- return "`site`.`designer_id`"
- }
- func (model FinalSiteAmountDesignerStatist) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{
- {
- Model: FinalSite{},
- As: "site",
- On: []string{"`site`.`id` = " + model.TableName() + ".`site_id`"},
- },
- {
- Model: JoinAdmin{},
- As: "designer",
- On: []string{"`designer`.`id` = `site`.`designer_id`"},
- },
- }
- }
- func (FinalSiteAmountDesignerStatist) Page() bool {
- return true
- }
- func (FinalSiteAmountDesignerStatist) Count() bool {
- return true
- }
- type FinalSiteAmountSalesmanStatist struct {
- SalesmanId float64 `json:"salesman_id" label:"业务员" prop:"select:site.salesman_id"`
- SalesmanName string `json:"salesman_name" prop:"select:salesman.username" search:"like"`
- SalesmanPhone string `json:"salesman_phone" prop:"select:salesman.phone"`
- ContractTotal float64 `json:"contract_total" label:"合同金额" type:"float" prop:"select:sum(zy_final_site_amount.contract_total)"`
- Performance float64 `json:"performance" label:"业绩" prop:"select:sum(zy_final_site_amount.performance)"`
- Purchase float64 `json:"purchase" label:"代购" type:"float" prop:"select:sum(zy_final_site_amount.purchase)"`
- Custom float64 `json:"custom" label:"定制" type:"float" prop:"select:sum(zy_final_site_amount.custom)"`
- PersonalCollect float64 `json:"personal_collect" label:"个性化汇总" type:"float" prop:"select:sum(zy_final_site_amount.personal_collect)"`
- PersonalMaterial float64 `json:"personal_material" label:"个性化材料" type:"float" prop:"select:sum(zy_final_site_amount.personal_material)"`
- PersonalCustom float64 `json:"personal_custom" label:"个性化定制" type:"float" prop:"select:sum(zy_final_site_amount.personal_custom)"`
- SpecialItem float64 `json:"special_item" label:"特殊项目代购" type:"float" prop:"select:sum(zy_final_site_amount.special_item)"`
- DesignFree float64 `json:"design_free" label:"设计费" type:"float" prop:"select:sum(zy_final_site_amount.design_free)"`
- db.BaseModel
- }
- func (FinalSiteAmountSalesmanStatist) TableName() string {
- return "zy_final_site_amount"
- }
- func (model FinalSiteAmountSalesmanStatist) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- if !admin.CheckAuth([]string{"final:finalsitecontract:performance"}, c.GetInt("adminID")) {
- adminID := s.Param(c.GetInt("adminID"))
- where := fmt.Sprintf("`site`.`salesman_id` = %s", adminID)
- s.Where = append(s.Where, fmt.Sprintf("(%s)", where))
- }
- if signtime1s, ok := data["signtime1"]; ok {
- if signtime1, ok := db.ToInt64(signtime1s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` >= %s", s.Param(signtime1)))
- }
- }
- if signtime2s, ok := data["signtime2"]; ok {
- if signtime2, ok := db.ToInt64(signtime2s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` < %s", s.Param(signtime2+60*60*24)))
- }
- }
- return true
- }
- func (model FinalSiteAmountSalesmanStatist) GroupBy() string {
- return "`site`.`salesman_id`"
- }
- func (model FinalSiteAmountSalesmanStatist) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{
- {
- Model: FinalSite{},
- As: "site",
- On: []string{"`site`.`id` = " + model.TableName() + ".`site_id`"},
- },
- {
- Model: JoinAdmin{},
- As: "salesman",
- On: []string{"`salesman`.`id` = `site`.`salesman_id`"},
- },
- }
- }
- func (FinalSiteAmountSalesmanStatist) Page() bool {
- return true
- }
- func (FinalSiteAmountSalesmanStatist) Count() bool {
- return true
- }
- type JoinDept struct {
- db.BaseModel
- }
- func (JoinDept) TableName() string {
- return "zy_dept"
- }
- type FinalSiteAmountDeptStatist struct {
- DeptId float64 `json:"dept_id" label:"部门" prop:"select:site.dept_id"`
- Name string `json:"name" prop:"select:concat(updept.name,'/',dept.name)" search:"like"`
- ContractTotal float64 `json:"contract_total" label:"合同金额" type:"float" prop:"select:sum(zy_final_site_amount.contract_total)"`
- Performance float64 `json:"performance" label:"业绩" prop:"select:sum(zy_final_site_amount.performance)"`
- Purchase float64 `json:"purchase" label:"代购" type:"float" prop:"select:sum(zy_final_site_amount.purchase)"`
- Custom float64 `json:"custom" label:"定制" type:"float" prop:"select:sum(zy_final_site_amount.custom)"`
- PersonalCollect float64 `json:"personal_collect" label:"个性化汇总" type:"float" prop:"select:sum(zy_final_site_amount.personal_collect)"`
- PersonalMaterial float64 `json:"personal_material" label:"个性化材料" type:"float" prop:"select:sum(zy_final_site_amount.personal_material)"`
- PersonalCustom float64 `json:"personal_custom" label:"个性化定制" type:"float" prop:"select:sum(zy_final_site_amount.personal_custom)"`
- SpecialItem float64 `json:"special_item" label:"特殊项目代购" type:"float" prop:"select:sum(zy_final_site_amount.special_item)"`
- DesignFree float64 `json:"design_free" label:"设计费" type:"float" prop:"select:sum(zy_final_site_amount.design_free)"`
- db.BaseModel
- }
- func (FinalSiteAmountDeptStatist) TableName() string {
- return "zy_final_site_amount"
- }
- func (model FinalSiteAmountDeptStatist) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- if !admin.CheckAuth([]string{"final:finalsitecontract:performance"}, c.GetInt("adminID")) {
- where := "1 = 2"
- s.Where = append(s.Where, fmt.Sprintf("(%s)", where))
- }
- if signtime1s, ok := data["signtime1"]; ok {
- if signtime1, ok := db.ToInt64(signtime1s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` >= %s", s.Param(signtime1)))
- }
- }
- if signtime2s, ok := data["signtime2"]; ok {
- if signtime2, ok := db.ToInt64(signtime2s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` < %s", s.Param(signtime2+60*60*24)))
- }
- }
- return true
- }
- func (model FinalSiteAmountDeptStatist) GroupBy() string {
- return "`site`.`dept_id`"
- }
- func (model FinalSiteAmountDeptStatist) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{
- {
- Model: FinalSite{},
- As: "site",
- On: []string{"`site`.`id` = " + model.TableName() + ".`site_id`"},
- },
- {
- Model: JoinDept{},
- As: "dept",
- On: []string{"`dept`.`id` = `site`.`dept_id`"},
- },
- {
- Model: JoinDept{},
- As: "updept",
- On: []string{"`updept`.`id` = `dept`.`pid`"},
- },
- }
- }
- func (FinalSiteAmountDeptStatist) Page() bool {
- return true
- }
- func (FinalSiteAmountDeptStatist) Count() bool {
- return true
- }
- type FinalSiteAmountShopStatist struct {
- ShopId float64 `json:"shop_id" label:"公司" prop:"select:site.shop_id"`
- Name string `json:"name" prop:"select:shop.shop_name" search:"like"`
- ContractTotal float64 `json:"contract_total" label:"合同金额" type:"float" prop:"select:sum(zy_final_site_amount.contract_total)"`
- Performance float64 `json:"performance" label:"业绩" prop:"select:sum(zy_final_site_amount.performance)"`
- Purchase float64 `json:"purchase" label:"代购" type:"float" prop:"select:sum(zy_final_site_amount.purchase)"`
- Custom float64 `json:"custom" label:"定制" type:"float" prop:"select:sum(zy_final_site_amount.custom)"`
- PersonalCollect float64 `json:"personal_collect" label:"个性化汇总" type:"float" prop:"select:sum(zy_final_site_amount.personal_collect)"`
- PersonalMaterial float64 `json:"personal_material" label:"个性化材料" type:"float" prop:"select:sum(zy_final_site_amount.personal_material)"`
- PersonalCustom float64 `json:"personal_custom" label:"个性化定制" type:"float" prop:"select:sum(zy_final_site_amount.personal_custom)"`
- SpecialItem float64 `json:"special_item" label:"特殊项目代购" type:"float" prop:"select:sum(zy_final_site_amount.special_item)"`
- DesignFree float64 `json:"design_free" label:"设计费" type:"float" prop:"select:sum(zy_final_site_amount.design_free)"`
- db.BaseModel
- }
- func (FinalSiteAmountShopStatist) TableName() string {
- return "zy_final_site_amount"
- }
- func (model FinalSiteAmountShopStatist) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- if !admin.CheckAuth([]string{"final:finalsitecontract:performance"}, c.GetInt("adminID")) {
- where := "1 = 2"
- s.Where = append(s.Where, fmt.Sprintf("(%s)", where))
- }
- if signtime1s, ok := data["signtime1"]; ok {
- if signtime1, ok := db.ToInt64(signtime1s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` >= %s", s.Param(signtime1)))
- }
- }
- if signtime2s, ok := data["signtime2"]; ok {
- if signtime2, ok := db.ToInt64(signtime2s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` < %s", s.Param(signtime2+60*60*24)))
- }
- }
- return true
- }
- func (model FinalSiteAmountShopStatist) GroupBy() string {
- return "`site`.`shop_id`"
- }
- func (model FinalSiteAmountShopStatist) OrderBy() string {
- return "`shop`.`order_at` desc"
- }
- func (model FinalSiteAmountShopStatist) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{
- {
- Model: FinalSite{},
- As: "site",
- On: []string{"`site`.`id` = " + model.TableName() + ".`site_id`"},
- },
- {
- Model: JoinShop{},
- As: "shop",
- On: []string{"`shop`.`id` = `site`.`shop_id`"},
- },
- }
- }
- func (FinalSiteAmountShopStatist) Page() bool {
- return true
- }
- func (FinalSiteAmountShopStatist) Count() bool {
- return true
- }
- type FinalSiteAmountStoreStatist struct {
- StoreId float64 `json:"store_id" label:"门店" prop:"select:shop.store_id"`
- Name string `json:"name" prop:"select:store.name" search:"like"`
- ContractTotal float64 `json:"contract_total" label:"合同金额" type:"float" prop:"select:sum(zy_final_site_amount.contract_total)"`
- Performance float64 `json:"performance" label:"业绩" prop:"select:sum(zy_final_site_amount.performance)"`
- Purchase float64 `json:"purchase" label:"代购" type:"float" prop:"select:sum(zy_final_site_amount.purchase)"`
- Custom float64 `json:"custom" label:"定制" type:"float" prop:"select:sum(zy_final_site_amount.custom)"`
- PersonalCollect float64 `json:"personal_collect" label:"个性化汇总" type:"float" prop:"select:sum(zy_final_site_amount.personal_collect)"`
- PersonalMaterial float64 `json:"personal_material" label:"个性化材料" type:"float" prop:"select:sum(zy_final_site_amount.personal_material)"`
- PersonalCustom float64 `json:"personal_custom" label:"个性化定制" type:"float" prop:"select:sum(zy_final_site_amount.personal_custom)"`
- SpecialItem float64 `json:"special_item" label:"特殊项目代购" type:"float" prop:"select:sum(zy_final_site_amount.special_item)"`
- DesignFree float64 `json:"design_free" label:"设计费" type:"float" prop:"select:sum(zy_final_site_amount.design_free)"`
- db.BaseModel
- }
- func (FinalSiteAmountStoreStatist) TableName() string {
- return "zy_final_site_amount"
- }
- func (model FinalSiteAmountStoreStatist) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
- if !admin.CheckAuth([]string{"final:finalsitecontract:performance"}, c.GetInt("adminID")) {
- where := "1 = 2"
- s.Where = append(s.Where, fmt.Sprintf("(%s)", where))
- }
- if signtime1s, ok := data["signtime1"]; ok {
- if signtime1, ok := db.ToInt64(signtime1s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` >= %s", s.Param(signtime1)))
- }
- }
- if signtime2s, ok := data["signtime2"]; ok {
- if signtime2, ok := db.ToInt64(signtime2s); ok {
- s.Where = append(s.Where, fmt.Sprintf("`site`.`signtime` < %s", s.Param(signtime2+60*60*24)))
- }
- }
- return true
- }
- func (model FinalSiteAmountStoreStatist) GroupBy() string {
- return "`shop`.`store_id`"
- }
- func (model FinalSiteAmountStoreStatist) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
- return []db.JoinModel{
- {
- Model: FinalSite{},
- As: "site",
- On: []string{"`site`.`id` = " + model.TableName() + ".`site_id`"},
- },
- {
- Model: JoinShop{},
- As: "shop",
- On: []string{"`shop`.`id` = `site`.`shop_id`"},
- },
- {
- Model: models.Store{},
- As: "store",
- On: []string{"`store`.`id` = `shop`.`store_id`"},
- },
- }
- }
- func (FinalSiteAmountStoreStatist) Page() bool {
- return true
- }
- func (FinalSiteAmountStoreStatist) Count() bool {
- return true
- }
- func (model FinalSiteAmountStoreStatist) OrderBy() string {
- return "`store`.`order_at` desc"
- }
- type AmountContext struct {
- ID int64 `json:"id" label:"ID"`
- Site FinalSite `json:"site" label:"工地"`
- Pkg FinalPkg `json:"pkg" label:"套餐"`
- Fields []FinalPkgField `json:"fields" label:"字段"`
- Froms map[string]float64 `json:"froms" label:"表单"`
- Calls []string `json:"calls"`
- }
- func NewAmountContext(site FinalSite, data map[string]interface{}) (*AmountContext, error) {
- context := new(AmountContext)
- var pkg FinalPkg
- db.GetModel(map[string]interface{}{"id": site.PkgId}, &pkg)
- var fields []FinalPkgField
- db.GetModel(map[string]interface{}{"pkg_id": site.PkgId}, &fields)
- context.ID = site.PkgId
- context.Site = site
- context.Pkg = pkg
- context.Fields = fields
- context.Froms = make(map[string]float64)
- context.Calls = make([]string, 0)
- for _, v := range context.Fields {
- if v.Type == 0 || v.Type == 1 {
- value, _ := db.ToFloat64(data[v.Name])
- if v.Type == 1 && value == 0 {
- return nil, errors.New("字段未填: " + v.Name)
- }
- context.Froms[v.Name] = value
- }
- }
- return context, nil
- }
- func (context *AmountContext) Get(name string) (interface{}, error) {
- for _, call := range context.Calls {
- if call == name {
- return nil, errors.New("circular reference: " + name)
- }
- }
- context.Calls = append(context.Calls, name)
- defer func() { context.Calls = context.Calls[:len(context.Calls)-1] }()
- if name == "面积" {
- return context.Site.Area, nil
- }
- if value, ok := context.Froms[name]; ok {
- return value, nil
- }
- for _, field := range context.Fields {
- if name == field.Name && field.Type == 2 {
- result, err := context.Exec(field.Value)
- if err != nil {
- return nil, err
- }
- value, _ := db.ToFloat64(result)
- context.Froms[name] = float64(math.Round(value*100) / 100)
- return value, nil
- }
- }
- return nil, errors.New("undeclared name: " + name)
- }
- func (context *AmountContext) Exec(expression string) (interface{}, error) {
- functions := map[string]govaluate.ExpressionFunction{}
- expr, err := govaluate.NewEvaluableExpressionWithFunctions(expression, functions)
- if err != nil {
- logger.Sugar.Infof("expr: %v error: %v", expression, err.Error())
- return nil, err
- }
- result, err := expr.Eval(context)
- if err != nil {
- logger.Sugar.Infof("expr: %v error: %v", expression, err.Error())
- return nil, err
- }
- return result, nil
- }
- func (context *AmountContext) Eval() (float64, float64, float64, float64, float64, float64, float64, float64, float64, error) {
- for _, field := range context.Fields {
- if _, ok := context.Froms[field.Name]; !ok && field.Type == 2 {
- result, err := context.Exec(field.Value)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- context.Froms[field.Name] = float64(math.Round(value*100) / 100)
- }
- }
- contractTotal := float64(0)
- if context.Pkg.ContractTotal != "" {
- result, err := context.Exec(context.Pkg.ContractTotal)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- contractTotal = float64(math.Round(value*100) / 100)
- }
- performance := float64(0)
- if context.Pkg.Performance != "" {
- result, err := context.Exec(context.Pkg.Performance)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- performance = float64(math.Round(value*100) / 100)
- }
- purchase := float64(0)
- if context.Pkg.Purchase != "" {
- result, err := context.Exec(context.Pkg.Purchase)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- purchase = float64(math.Round(value*100) / 100)
- }
- custom := float64(0)
- if context.Pkg.Custom != "" {
- result, err := context.Exec(context.Pkg.Custom)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- custom = float64(math.Round(value*100) / 100)
- }
- personalCollect := float64(0)
- if context.Pkg.PersonalCollect != "" {
- result, err := context.Exec(context.Pkg.PersonalCollect)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- personalCollect = float64(math.Round(value*100) / 100)
- }
- personalMaterial := float64(0)
- if context.Pkg.PersonalMaterial != "" {
- result, err := context.Exec(context.Pkg.PersonalMaterial)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- personalMaterial = float64(math.Round(value*100) / 100)
- }
- personalCustom := float64(0)
- if context.Pkg.PersonalCustom != "" {
- result, err := context.Exec(context.Pkg.PersonalCustom)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- personalCustom = float64(math.Round(value*100) / 100)
- }
- specialItem := float64(0)
- if context.Pkg.SpecialItem != "" {
- result, err := context.Exec(context.Pkg.SpecialItem)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- specialItem = float64(math.Round(value*100) / 100)
- }
- designFree := float64(0)
- if context.Pkg.DesignFree != "" {
- result, err := context.Exec(context.Pkg.DesignFree)
- if err != nil {
- return 0, 0, 0, 0, 0, 0, 0, 0, 0, err
- }
- value, _ := db.ToFloat64(result)
- designFree = float64(math.Round(value*100) / 100)
- }
- return contractTotal, performance, purchase, custom, personalCollect, personalMaterial, personalCustom, specialItem, designFree, nil
- }
- func (context *AmountContext) Save() string {
- return utils.JsonEncode(context.Froms)
- }
|