package final import ( "errors" "fmt" "github.com/gogf/gf/v2/util/gconv" "strings" "time" "zhiyuan/models" "zhiyuan/pkg/db" "zhiyuan/pkg/logger" "zhiyuan/pkg/utils" "zhiyuan/pkg/weixin/mp" "zhiyuan/services/admin" admin2 "zhiyuan/services/final/admin" "zhiyuan/services/user" "github.com/gin-gonic/gin" "github.com/gogf/gf/v2/os/gtime" ) type FinalSite struct { ID int64 `json:"id" prop:"add:false"` PkgId int64 `json:"pkg_id" label:"套餐" type:"int" prop:"add:false edit:false" search:"multiple"` TypeId int64 `json:"type_id" label:"开工类型" type:"int" prop:"add:false edit:false" search:"multiple"` Username string `json:"username" label:"业主姓名" type:"string" prop:"add edit" search:"like"` Phone string `json:"phone" label:"手机号码" type:"string" prop:"add edit" search:"like"` AreaId int64 `json:"area_id" label:"区域" type:"int" prop:"add edit" search:"multiple"` CustomerId int64 `json:"customer_id" label:"客户" type:"int" prop:"edit:false" search:"="` OrderId int64 `json:"order_id" label:"合同" type:"int" prop:"edit:false" search:"="` Village string `json:"village" label:"小区名称" type:"string" prop:"edit" search:"like"` Address string `json:"address" label:"房屋地址" type:"string" prop:"edit" search:"like"` RoomNo string `json:"room_no" label:"楼栋房号" type:"string" prop:"edit" search:"like"` Areacode string `json:"areacode" label:"区划代码" type:"string" prop:"edit" search:"rightlike"` Name string `json:"name" label:"名称" type:"string" prop:"add:false select:concat(zy_final_site.village,'\\t',zy_final_site.address,'\\t',zy_final_site.room_no)" search:"like"` Room1 int64 `json:"room_1" label:"户型" type:"int" prop:"add:false edit:false" search:"="` Room2 int64 `json:"room_2" label:"户型" type:"int" prop:"add:false edit:false" search:"="` Room3 int64 `json:"room_3" label:"户型" type:"int" prop:"add:false edit:false" search:"="` Room4 int64 `json:"room_4" label:"户型" type:"int" prop:"add:false edit:false" search:"="` Room5 int64 `json:"room_5" label:"户型" type:"int" prop:"add:false edit:false" search:"="` Names string `json:"names" label:"名称" type:"string" prop:"add:false select:concat(zy_final_site.village,zy_final_site.address,zy_final_site.room_no)" search:"like"` Area float64 `json:"area" label:"面积" type:"float" prop:"add:false edit:false"` ShopId int64 `json:"shop_id" label:"门店" type:"int" prop:"add:false edit:false" search:"multiple"` ManagerId int64 `json:"manager_id" label:"项目经理" type:"int" prop:"edit" search:"multiple"` ProjectLeaderId int64 `json:"project_leader_id" label:"工程队长" type:"int" prop:"edit" search:"multiple"` DesignerId int64 `json:"designer_id" label:"设计师" type:"int" prop:"edit" search:"multiple"` StartTime int64 `json:"starttime" label:"开工日期" type:"int" prop:"add edit" search:"="` EndTime int64 `json:"endtime" label:"完工日期" type:"int" prop:""` CreatedId int64 `json:"created_id" label:"创建人员" type:"int" prop:"add:false" search:"="` ChangeState int64 `json:"change_state" label:"状态" type:"int" prop:"add:false edit" default:"0" search:"="` ChangeRemark string `json:"change_remark" label:"变更备注" type:"string" prop:"add:false edit"` Remark string `json:"remark" label:"备注" type:"string" prop:"add:false edit:false"` Activity string `json:"activity" label:"活动" type:"string" prop:"add:false edit:false"` Attachment string `json:"attachment" label:"附件" type:"string" prop:"add:false edit:false"` DeptId int64 `json:"dept_id" label:"归属部门" type:"int" prop:"add:false edit:false" search:"multiple"` SalesmanId int64 `json:"salesman_id" label:"业务员" type:"int" prop:"add:false edit:false" search:"multiple"` State int64 `json:"state" label:"状态" type:"int" prop:"add:false edit" default:"2"` ContactTime int64 `json:"contacttime" label:"接触时间" type:"int" prop:"edit" search:"="` StoreTime int64 `json:"storetime" label:"到店时间" type:"int" prop:"edit" search:"="` SignTime int64 `json:"signtime" label:"签订时间" type:"int" prop:"edit" 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 (FinalSite) TableName() string { return "zy_final_site" } func (model FinalSite) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { s.Where = append(s.Where, fmt.Sprintf("`%s`.`state` in %s and `%s`.`manager_id` != %s", model.TableName(), s.Param([]int64{1, 2}), model.TableName(), s.Param(0))) if !admin.IsSuperAdmin(c.GetInt("adminID")) { adminID := s.Param(c.GetInt("adminID")) where := fmt.Sprintf("`%s`.`manager_id` = %s OR `%s`.`project_leader_id` = %s OR `%s`.`created_id` = %s", model.TableName(), adminID, model.TableName(), adminID, model.TableName(), adminID) if admin.CheckAuth([]string{"work:worksite:view"}, c.GetInt("adminID")) { where = fmt.Sprintf("%s OR FIND_IN_SET(`%s`.`shop_id`, %s)", where, model.TableName(), "0") } s.Where = append(s.Where, fmt.Sprintf("(%s)", where)) } if search, ok := data["search"]; ok { search = s.Param(fmt.Sprintf("%%%s%%", search)) s.Where = append(s.Where, fmt.Sprintf("`%s`.`username` LIKE %s OR `%s`.`phone` LIKE %s OR concat(`%s`.`village`,`%s`.`address`,`%s`.`room_no`) LIKE %s", model.TableName(), search, model.TableName(), search, model.TableName(), model.TableName(), model.TableName(), search)) } if starttime1s, ok := data["starttime1"]; ok { if starttime1, ok := db.ToInt64(starttime1s); ok { s.Where = append(s.Where, fmt.Sprintf("`%s`.`starttime` >= %s", model.TableName(), s.Param(starttime1))) } } if starttime2s, ok := data["starttime2"]; ok { if starttime2, ok := db.ToInt64(starttime2s); ok { s.Where = append(s.Where, fmt.Sprintf("`%s`.`starttime` < %s", model.TableName(), s.Param(starttime2+60*60*24))) } } if endtime1s, ok := data["endtime1"]; ok { if endtime1, ok := db.ToInt64(endtime1s); ok { s.Where = append(s.Where, fmt.Sprintf("`%s`.`endtime` >= %s", model.TableName(), s.Param(endtime1))) } } if endtime2s, ok := data["endtime2"]; ok { if endtime2, ok := db.ToInt64(endtime2s); ok { s.Where = append(s.Where, fmt.Sprintf("`%s`.`endtime` < %s", model.TableName(), s.Param(endtime2+60*60*24))) } } return true } func (FinalSite) OnePrivilege(c *gin.Context, id int64) bool { return true } func (FinalSite) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error { var model FinalSite db.GetModel(map[string]interface{}{ "village": data["village"], "room_no": data["room_no"], "deleted_at": 0, }, &model) if model.ID != 0 { return errors.New("工地已存在") } user, err := user.GetOne(map[string]interface{}{"phone": data["phone"]}, nil, nil) if err != nil { return errors.New("获取用户信息失败") } if user == nil { return errors.New("用户未关注公众号") } data["created_id"] = c.GetInt("adminID") return nil } func (FinalSite) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) { //todo 添加工地 //加载节假日 holidays := admin2.LoadHolidays() fmt.Println("000000 holidays 00000000000", holidays) // 查询套餐表 //field := " select * from zy_mat_pick " //db.GetMultiRaw(field, map[string]interface{}{ // "pkg_id": post["pkg_id"], //}, map[string]interface{}{}, &checkList) checkList, err := db.GetModelMap(db.Type(models.WorkQualityAcceptItem{}), map[string]interface{}{"state": 1}, nil) if err != nil { errors.New("施工节点未找到") return } siteStart := gtime.New(utils.ToInt(post["starttime"])).Format("Y-m-d") fmt.Println("开始时间", siteStart) var siteCompletionTime string sql := "INSERT INTO zy_mat_pick_work(site_id,pick_id,`name`,pictures,photograph,room_type,`cycle`,example_at) VALUES " for _, item := range checkList { //fmt.Println(item) domain := "https://image.nczyzs.com/" result := strings.ReplaceAll(utils.ToStr(item["pictures"]), domain, "") sql += "(" sql += utils.ToStr(id) + "," sql += utils.ToStr(item["id"]) + "," //accept_item_id sql += "'" + utils.ToStr(item["content"]) + "'," //施工名称 sql += "'" + result + "'," //图片 sql += "'" + utils.ToStr(item["photograph"]) + "'," //施工标准 sql += utils.ToStr(item["quality_accept_id"]) + "," sql += utils.ToStr(item["days"]) + "," endDate, _ := admin2.CalculateEndDate(holidays, siteStart, gconv.Int(item["days"])) sql += "'" + endDate + "'" //_ = fmt.Sprintf("节点:%s ,工期:%d, 结束节点:%s", item["pick_name"], item["cycle"], endDate) //gt1 := gtime.New(post["starttime"]).Add(gconv.Duration(gconv.Int(pkg["cycle"]) * 86400)) sql += ")," siteCompletionTime = endDate } //移除最后一个逗号 if len(sql) > 0 { sql = sql[:len(sql)-1] } _, err = db.InsertRaw(sql, nil) fmt.Println("添加工地", sql) if err == nil { MatPickWork{}.AddAfter(c, id, data, data) } //更新工地的完工时间 err = db.UpdateModels(db.Type(FinalSite{}), map[string]interface{}{ "id": id, "deleted_at": 0, }, map[string]interface{}{ "endtime": gtime.New(siteCompletionTime).Unix(), //回写完工日期 }) fmt.Println("最终完工时间", siteCompletionTime) //if err != nil { // app.ErrorMsg(c, err.Error(), nil) // return //} //var model FinalSite //db.GetModel(map[string]interface{}{ // "id": id, // "deleted_at": 0, //}, &model) // //address := model.Address //if model.Village != " " { // address += " " + model.Village //} //if model.RoomNo != " " { // address += " " + model.RoomNo //} //switch model.ShopId { //case 9, 13, 14, 18: // SendSiteMessage(1003, id, address, "工地已创建,请及时下单") //case 10, 12, 15: // SendSiteMessage(1004, id, address, "工地已创建,请及时下单") //case 6, 16: // SendSiteMessage(1257, id, address, "工地已创建,请及时下单") //case 7, 17: // SendSiteMessage(1173, id, address, "工地已创建,请及时下单") //} } func (FinalSite) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { //开工的工地不允许修改套餐,检查工地表开工时间和当前时间做对比 //site, err := db.GetOneModelMap(db.Type(FinalSite{}), map[string]interface{}{"id": post["id"]}, nil) //if err != nil { // return errors.New("工地未找到") //} //startTime, _ := db.ToInt64(site["starttime"]) //curTime := time.Now().Unix() // //if data["pkg_id"] != site["pkg_id"] && curTime > startTime { // return errors.New("工地已开工,套餐无法变更") //} //删除原有工作,写入新工作 //var MatPickWork MatPickWork //_, err = db.Delete(MatPickWork.TableName(), map[string]interface{}{"site_id": id}) // //sql := "INSERT INTO zy_mat_pick_work(site_id,pkg_id,pick_id,room_type,manager_id) SELECT {{site_id}},pkg_id,id,room_type,{{manager_id}} FROM zy_mat_pick WHERE pkg_id={{pkg_id}}" //_, err = db.InsertRaw(sql, map[string]interface{}{"site_id": id, "pkg_id": post["pkg_id"], "manager_id": data["manager_id"]}) //if err == nil { // MatPickWork.EditAfter(c, id, data, data) //} return nil } func (FinalSite) DelPrivilege(c *gin.Context, id int64) error { return nil } func (FinalSite) Page() bool { return false } func (FinalSite) Count() bool { return true } func (model FinalSite) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{} } func (model FinalSite) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } type JoinAdmin struct { db.BaseModel } func (JoinAdmin) TableName() string { return "zy_admin" } type FinalSiteMobile struct { ManagerName string `json:"manager_name" type:"string" prop:"select:manager.username"` ManagerPhone string `json:"manager_phone" type:"string" prop:"select:manager.phone"` ManagerHeadImgUrl string `json:"manager_headimgurl" type:"string" prop:"select:manager.headimgurl"` DesignerName string `json:"designer_name" type:"string" prop:"select:designer.username"` DesignerPhone string `json:"designer_phone" type:"string" prop:"select:designer.phone"` DesignerHeadImgUrl string `json:"designer_headimgurl" type:"string" prop:"select:designer.headimgurl"` SalesmanName string `json:"salesman_name" type:"string" prop:"select:salesman.username"` SalesmanPhone string `json:"salesman_phone" type:"string" prop:"select:salesman.phone"` SalesmanHeadImgUrl string `json:"salesman_headimgurl" type:"string" prop:"select:salesman.headimgurl"` TableCount int64 `json:"table_count" type:"int" prop:"select:count(distinct(if(pickwork.deleted_at=0,pickwork.id,NULL)))"` Uncount int64 `json:"uncount" type:"int" prop:"select:count(distinct(IF((pickwork.deleted_at=0)AND(pickwork.item_status=0),pickwork.id,NULL)))"` HandleCount int64 `json:"handle_count" type:"int" prop:"select:count(distinct(IF((pickwork.deleted_at=0)AND(pickwork.item_status=2),pickwork.id,NULL)))"` FinishCount int64 `json:"finish_count" type:"int" prop:"select:count(distinct(IF((pickwork.deleted_at=0)AND(pickwork.item_status=1),pickwork.id,NULL)))"` //HandleCount int64 `json:"handle_count" type:"int" prop:"select:count(distinct(IF((pickwork.state>0)AND(finalsitetable.state<5),finalsitetable.id,NULL)))"` //FinishCount int64 `json:"finish_count" type:"int" prop:"select:count(distinct(IF(finalsitetable.state=5,finalsitetable.id,NULL)))"` //Count1 int64 `json:"count1" type:"int" prop:"select:count(distinct(IF(finalsitetable.state=1,finalsitetable.id,NULL)))"` //Count2 int64 `json:"count2" type:"int" prop:"select:count(distinct(IF(finalsitetable.state=2,finalsitetable.id,NULL)))"` //Count3 int64 `json:"count3" type:"int" prop:"select:count(distinct(IF(finalsitetable.state=3,finalsitetable.id,NULL)))"` //Count4 int64 `json:"count4" type:"int" prop:"select:count(distinct(IF(finalsitetable.state=4,finalsitetable.id,NULL)))"` SettleID int64 `json:"settle_id" type:"int" prop:"select:finalsettle.id"` SettleTotal float64 `json:"settle_total" type:"float" prop:"select:finalsettle.total"` SettleState int64 `json:"settle_state" type:"int" prop:"select:finalsettle.state"` SettleCreatedAt int64 `json:"settle_created_at" type:"int" prop:"select:finalsettle.created_at"` ShopName string `json:"shop_name" type:"string" prop:"select:shop.shop_name"` CollectInfo string `json:"collect_info" type:"string" prop:"select:shop.collect_info"` FinalSite } func (model FinalSiteMobile) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { if state, ok := data["state"]; ok { if n, ok := db.ToInt64(state); ok { switch n { case 1: s.Having = append(s.Having, "count(IF((pickwork.item_status=0)OR(pickwork.item_status=2)OR(pickwork.item_status=3),pickwork.id,NULL))") case 2: s.Having = append(s.Having, "count(IF((pickwork.item_status=0)OR(pickwork.item_status=2),pickwork.id,NULL)) = 0 ") case 3: //s.Having = append(s.Having, "count(IF(pickwork.item_status==1,pickwork.id,NULL)) = 0") case 4: //s.Having = append(s.Having, "count(IF(finalsitetable.state=1,finalsitetable.id,NULL)) != 0") case 5: //s.Having = append(s.Having, "count(IF(finalsitetable.state=2,finalsitetable.id,NULL)) != 0") case 6: //s.Having = append(s.Having, "count(IF(finalsitetable.state=3,finalsitetable.id,NULL)) != 0") case 7: //s.Having = append(s.Having, "count(IF(finalsitetable.state=4,finalsitetable.id,NULL)) != 0") } } } if admin.CheckAuth([]string{"work:worksite:view"}, c.GetInt("adminID")) { s.Where = append(s.Where, fmt.Sprintf("(`manager`.`audit_id` = %s OR `manager`.`audit_id` = %s)", s.Param(c.GetInt("adminID")), s.Param(0))) fmt.Println(":", c.GetInt("adminID")) fmt.Println("我有权限") } return model.FinalSite.ListPrivilege(c, data, s) } func (model FinalSiteMobile) ListAfter(c *gin.Context, data map[string]interface{}, list []map[string]interface{}) []map[string]interface{} { for n, item := range list { siteId := item["id"] params := make(map[string]interface{}) params["site_id"] = siteId query := " SELECT w.room_type, a.name AS room_type_name,COUNT(w.id) AS total,SUM(CASE WHEN w.item_status = 1 THEN 1 ELSE 0 END) AS completed FROM zy_mat_pick_work w LEFT JOIN zy_work_quality_accept a ON w.room_type = a.id WHERE w.site_id = {{site_id}} AND w.deleted_at = 0 GROUP BY w.room_type, a.name ORDER BY w.room_type" params["adminID"] = c.GetInt("adminID") checkList, _ := db.QueryMap(query, params, nil) list[n]["static"] = checkList } return list } func (model FinalSiteMobile) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model FinalSiteMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return append(model.FinalSite.LeftJoin(data, s), db.JoinModel{ Model: JoinAdmin{}, As: "manager", On: []string{"`manager`.`id` = " + model.TableName() + ".`manager_id`"}, }, db.JoinModel{ Model: JoinAdmin{}, As: "designer", On: []string{"`designer`.`id` = " + model.TableName() + ".`designer_id`"}, }, db.JoinModel{ Model: JoinAdmin{}, As: "salesman", On: []string{"`salesman`.`id` = " + model.TableName() + ".`salesman_id`"}, }, db.JoinModel{ Model: JoinShop{}, As: "shop", On: []string{"`shop`.`id` = " + model.TableName() + ".`shop_id`"}, }, db.JoinModel{ Model: FinalMaterial{}, As: "finalmaterial", On: []string{"`finalmaterial`.`site_id` = " + model.TableName() + ".`id` AND `finalmaterial`.`deleted_at` = 0"}, }, db.JoinModel{ Model: MatPickWork{}, As: "pickwork", On: []string{"`pickwork`.`site_id` = " + model.TableName() + ".`id`"}, }, db.JoinModel{ Model: FinalSettle{}, As: "finalsettle", On: []string{"`finalsettle`.`site_id` = " + model.TableName() + ".`id` AND `finalsettle`.`deleted_at` = 0"}, }) } type FinalSiteSupplier struct { ManagerName string `json:"manager_name" type:"string" prop:"select:manager.username"` ManagerPhone string `json:"manager_phone" type:"string" prop:"select:manager.phone"` ManagerHeadImgUrl string `json:"manager_headimgurl" type:"string" prop:"select:manager.headimgurl"` MaterialCount int64 `json:"count" type:"int" prop:"select:count(distinct(finalmaterial.id))"` Count2 int64 `json:"count2" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=2,finalmaterial.id,NULL)))"` Count3 int64 `json:"count3" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=3,finalmaterial.id,NULL)))"` Count4 int64 `json:"count4" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=4,finalmaterial.id,NULL)))"` Count5 int64 `json:"count5" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=5,finalmaterial.id,NULL)))"` Count6 int64 `json:"count6" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=6,finalmaterial.id,NULL)))"` Count7 int64 `json:"count7" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=7,finalmaterial.id,NULL)))"` Count8 int64 `json:"count8" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=8,finalmaterial.id,NULL)))"` Count9 int64 `json:"count9" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=9,finalmaterial.id,NULL)))"` Count10 int64 `json:"count10" type:"int" prop:"select:count(distinct(IF(finalmaterial.state=10,finalmaterial.id,NULL)))"` FinalSite } func (model FinalSiteSupplier) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { if state, ok := data["state"]; ok { if n, ok := db.ToInt64(state); ok { switch n { case 2: s.Having = append(s.Having, "count(IF(finalmaterial.state=2,finalmaterial.id,NULL)) != 0") case 3: s.Having = append(s.Having, "count(IF(finalmaterial.state=3,finalmaterial.id,NULL)) != 0") case 4: s.Having = append(s.Having, "count(IF(finalmaterial.state=4,finalmaterial.id,NULL)) != 0") case 5: s.Having = append(s.Having, "count(IF(finalmaterial.state=5,finalmaterial.id,NULL)) != 0") case 6: s.Having = append(s.Having, "count(IF(finalmaterial.state=6,finalmaterial.id,NULL)) != 0") case 7: s.Having = append(s.Having, "count(IF(finalmaterial.state=7,finalmaterial.id,NULL)) != 0") case 8: s.Having = append(s.Having, "count(IF(finalmaterial.state=8,finalmaterial.id,NULL)) != 0") case 9: s.Having = append(s.Having, "count(IF(finalmaterial.state=9,finalmaterial.id,NULL)) != 0") case 10: s.Having = append(s.Having, "count(IF(finalmaterial.state=10,finalmaterial.id,NULL)) != 0") } } } s.Where = append(s.Where, fmt.Sprintf("`finalmaterial`.`supplier_id` = %s", s.Param(c.GetInt("adminID")))) if search, ok := data["search"]; ok { search = s.Param(fmt.Sprintf("%%%s%%", search)) s.Where = append(s.Where, fmt.Sprintf("`%s`.`username` LIKE %s OR `%s`.`phone` LIKE %s OR concat(`%s`.`village`,`%s`.`address`,`%s`.`room_no`) LIKE %s", model.TableName(), search, model.TableName(), search, model.TableName(), model.TableName(), model.TableName(), search)) } return true } func (model FinalSiteSupplier) ListAfter(c *gin.Context, data map[string]interface{}, list []map[string]interface{}) []map[string]interface{} { ids := make([]int64, 0) idmap := make(map[int64]int) for i, v := range list { id, _ := db.ToInt64(v["id"]) ids = append(ids, id) idmap[id] = i } datas, _ := db.GetModelMap(db.Type(FinalMaterialItemSupplier{}), map[string]interface{}{ "finalmaterial.site_id in ": ids, "finalmaterial.supplier_id": c.GetInt("adminID"), fmt.Sprintf("`%s`.`deleted_at`", FinalMaterialItemSupplier{}.TableName()): 0, }, nil) for _, v := range datas { id, _ := db.ToInt64(v["site_id"]) mid, _ := db.ToInt64(v["material_id"]) if n, ok := idmap[id]; ok { materials := make([]map[string]interface{}, 0) if ms, ok := list[n]["materials"].([]map[string]interface{}); ok { materials = ms } findmaterial := false for i, m := range materials { materialid, _ := db.ToInt64(m["id"]) if materialid == mid { findmaterial = true items := make([]map[string]interface{}, 0) if is, ok := m["items"].([]map[string]interface{}); ok { items = is } items = append(items, v) materials[i]["items"] = items break } } if !findmaterial { material := map[string]interface{}{ "id": v["material_id"], "name": v["name"], "type": v["type"], "budget": v["budget"], "budget_type": v["budget_type"], "total": v["total"], "state": v["state"], "receipt_date": v["receipt_date"], "items": []map[string]interface{}{v}, } materials = append(materials, material) } list[n]["materials"] = materials } } return list } func (model FinalSiteSupplier) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model FinalSiteSupplier) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{ { Model: JoinAdmin{}, As: "manager", On: []string{"`manager`.`id` = " + model.TableName() + ".`manager_id`"}, }, { Model: FinalMaterial{}, As: "finalmaterial", On: []string{"`finalmaterial`.`site_id` = " + model.TableName() + ".`id` AND `finalmaterial`.`state` > 1 AND `finalmaterial`.`deleted_at` = 0"}, }, } } func SendSiteMessage(adminID int, siteId int64, address string, text string) error { logger.Sugar.Infof("SendSiteMessage, send: %v %v %v %v", adminID, siteId, address, text) client, err := mp.NewClient(1) if err != nil { return err } adminInfo, err := admin.GetInfoByID(adminID, nil, nil) if err != nil { return err } if adminInfo == nil || adminInfo.OpenId == "" { return nil } url := "" if siteId != 0 { url = "https://jz.nczyzs.com/final/#/detail/" + db.ToString(siteId) } ret, err := client.SendTemplateMessage(adminInfo.OpenId, "0tdzToVtXoCUrafmN-ub9J69HKKCfUWEsCan-WkuPKk", url, map[string]interface{}{ "character_string1": map[string]interface{}{ "value": db.ToString(siteId), }, "thing2": map[string]interface{}{ "value": utils.SubStr(address, 0, 20), }, "thing5": map[string]interface{}{ "value": utils.SubStr(text, 0, 20), }, }) logger.Sugar.Infof("SendSiteMessage, ret: %v %v", ret, err) return err } func SendSiteWorkMessage(adminID int, siteId int64, text string) error { return nil logger.Sugar.Infof("SendSiteWorkMessage, send: %v %v %v %v", adminID, siteId, text) client, err := mp.NewClient(1) if err != nil { return err } adminInfo, err := admin.GetInfoByID(adminID, nil, nil) if err != nil { return err } if adminInfo == nil || adminInfo.OpenId == "" { return nil } url := "" if siteId != 0 { url = "https://jz.nczyzs.com/final/#/detail/" + db.ToString(siteId) } ret, err := client.SendTemplateMessage(adminInfo.OpenId, "0tdzToVtXoCUrafmN-ub9J69HKKCfUWEsCan-WkuPKk", url, map[string]interface{}{ "character_string1": map[string]interface{}{ "value": db.ToString(siteId), }, "thing5": map[string]interface{}{ "value": utils.SubStr(text, 0, 20), }, }) logger.Sugar.Infof("SendSiteWorkMessage, ret: %v %v", ret, err) return err } type JoinWriteControl struct { db.BaseModel } func (JoinWriteControl) TableName() string { return "(select `id`,`site_id` from `zy_final_site_control` where `deleted_at` = 0 and `created_at` != `updated_at` group by `site_id`)" } type JoinPriceControl struct { db.BaseModel } func (JoinPriceControl) TableName() string { return "(select `id`,`site_id` from `zy_final_manager_price` where `deleted_at` = 0 group by `site_id`)" } type JoinApplyControl struct { db.BaseModel } func (JoinApplyControl) TableName() string { return "(select `id`, `site_id`, group_concat(concat(`name`, if(`settle_state` = 1,\"结算\", \"\"))) as `name`, count(`id`) as `manager_count` from (select `zy_final_site_control`.`id`, `zy_final_site_control`.`site_id`, `type`.`name` as `name`, IF((`zy_final_site_control`.`budget`!=0)and(count(distinct(IF(`table`.`state`<2,`table`.`id`,NULL)))=0)and(count(distinct(IF(`table`.`type`=1,`table`.`id`,NULL)))<`type`.`living_count`)and(count(distinct(IF(`table`.`type`=0,`table`.`id`,NULL)))=0)and((`type`.`living_settlement`=0)or(not(isnull(`livingpayment`.`id`)))),1,0) as `living_state`, IF((`zy_final_site_control`.`budget`!=0)and(count(distinct(IF(`table`.`state`<2,`table`.`id`,NULL)))=0)and((`type`.`settle_change`=0)or(`site`.`change_state`=1))and((`type`.`settlement`=0)or(not(isnull(`settlepayment`.`id`))))and(count(distinct(IF(`table`.`type`=0,`table`.`id`,NULL)))=0),1,0) as `settle_state`, count(`zy_final_site_control`.`id`) as `manager_count` from `zy_final_site_control` left join `zy_final_type` as `type` on `type`.`id` = `zy_final_site_control`.`type_id` left join `zy_final_site` as `site` on `site`.`id` = `zy_final_site_control`.`site_id` left join `zy_final_site_table` as `table` on `table`.`type_id` = `zy_final_site_control`.`type_id` and `table`.`site_id` = `zy_final_site_control`.`site_id` and `table`.`state` != -1 and `table`.`deleted_at` = 0 left join `zy_final_site_payment` as `livingpayment` on `livingpayment`.`type_id` = `type`.`living_settlement` and `livingpayment`.`site_id` = `zy_final_site_control`.`site_id` and `livingpayment`.`state` = 1 and `livingpayment`.`deleted_at` = 0 left join `zy_final_site_payment` as `settlepayment` on `settlepayment`.`type_id` = `type`.`settlement` and `settlepayment`.`site_id` = `zy_final_site_control`.`site_id` and `settlepayment`.`state` = 1 and `settlepayment`.`deleted_at` = 0 and `zy_final_site_control`.`deleted_at` = 0 group by `zy_final_site_control`.`id`) as `control` where `living_state` = 1 or `settle_state` = 1 group by `site_id`)" } type JoinStatistTable struct { db.BaseModel } func (JoinStatistTable) TableName() string { return "(select `zy_final_site_table`.`id`,`zy_final_site_table`.`site_id`, group_concat(concat(`type`.`name`, if(`zy_final_site_table`.`type` = 1,\"生活费\", \"结算\"))) as `name`, sum(if(`zy_final_site_table`.`state` = 0, 1, 0)) as `manager_count`, sum(if(`zy_final_site_table`.`state` = 1, 1, 0)) as `leader_count`, sum(if(`zy_final_site_table`.`state` = 2 or `zy_final_site_table`.`state` = 4, 1, 0)) as `finance_count`, sum(if(`zy_final_site_table`.`state` = 3, 1, 0)) as `shopowner_count`, sum(if(`zy_final_site_table`.`state` = 2, 1, 0)) as `incomplete_collect_count` from `zy_final_site_table` left join `zy_final_type` as `type` on `type`.`id` = `zy_final_site_table`.`type_id` where `zy_final_site_table`.`state` != 5 and `zy_final_site_table`.`state` != -1 and `zy_final_site_table`.`deleted_at` = 0 group by `zy_final_site_table`.`site_id`)" } type JoinStatistMaterial struct { db.BaseModel } func (JoinStatistMaterial) TableName() string { return "(select `zy_final_material`.`id`,`zy_final_material`.`site_id`, group_concat(`finalmatauxiliary`.`name`) as `name`, count(`zy_final_material`.`id`) as `manager_count` from `zy_final_material` left join `zy_final_mat_auxiliary` as `finalmatauxiliary` on `finalmatauxiliary`.`id` = `zy_final_material`.`type_id` where `zy_final_material`.`budget` != 0 and `zy_final_material`.`state` = 0 and `zy_final_material`.`deleted_at` = 0 group by `zy_final_material`.`site_id`)" } type JoinStatistOrder struct { db.BaseModel } func (JoinStatistOrder) TableName() string { return "(select `zy_final_material_order`.`id`,`zy_final_material_order`.`site_id`, group_concat(concat(`supplier`.`name`, \" \", `zy_final_material_order`.`order_no`)) as `name`, sum(if((`zy_final_material_order`.`state` in (9,0,2,5,11) and `zy_final_material_order`.`process_id` = 0) OR (`process`.`type` = 6 AND `process`.`check_at3` = 0), 1, 0)) as `supplier_count`, sum(if((`zy_final_material_order`.`state` in (8,1,3,4,6) and `zy_final_material_order`.`process_id` = 0) OR (`process`.`type` = 6 AND `process`.`check_at2` = 0) OR (`process`.`type` = 14 AND `process`.`check_at` = 0) OR (`process`.`type` = 7 AND `process`.`check_at2` = 0 AND `zy_final_material_order`.`created_id` = `finalsite`.`manager_id`), 1, 0)) as `manager_count`, sum(if(`zy_final_material_order`.`state` = 7 and `zy_final_material_order`.`process_id` = 0, 1, 0)) as `leader_count`, sum(if(`process`.`type` = 7 AND `process`.`check_at2` = 0 AND `zy_final_material_order`.`created_id` != `finalsite`.`manager_id`, 1, 0)) as `place_count`, sum(if((`process`.`type` = 7 AND `process`.`check_at` = 0) OR (`process`.`type` = 12 AND `process`.`check_at` = 0), 1, 0)) as `audit_count` from `zy_final_material_order` left join `zy_final_supplier` as `supplier` on `supplier`.`id` = `zy_final_material_order`.`supplier_id` left join `zy_final_material_order_process` as `process` on `process`.`id` = `zy_final_material_order`.`process_id` left join `zy_final_site` as `finalsite` on `finalsite`.`id` = `zy_final_material_order`.`site_id` where `zy_final_material_order`.`state` != 7 and `zy_final_material_order`.`state` != 11 and `zy_final_material_order`.`state` != 12 and `zy_final_material_order`.`state` != -1 and `zy_final_material_order`.`deleted_at` = 0 group by `zy_final_material_order`.`site_id`)" } type JoinStatistOrderAll struct { db.BaseModel } func (JoinStatistOrderAll) TableName() string { return "(select `zy_final_material_order`.`id`,`zy_final_material_order`.`site_id`, sum(if(`settle`.`state` = 2, 1, 0)) as `incomplete_collect_count`, sum(if(`zy_final_material_order`.`state` = 0, 1, 0)) as `state0_count`, sum(if(`zy_final_material_order`.`state` = 1, 1, 0)) as `state1_count`, sum(if(`zy_final_material_order`.`state` = 2, 1, 0)) as `state2_count`, sum(if(`zy_final_material_order`.`state` = 3, 1, 0)) as `state3_count`, sum(if(`zy_final_material_order`.`state` = 4, 1, 0)) as `state4_count`, sum(if(`zy_final_material_order`.`state` = 5, 1, 0)) as `state5_count`, sum(if(`zy_final_material_order`.`state` = 6, 1, 0)) as `state6_count`, sum(if(`zy_final_material_order`.`state` = 7, 1, 0)) as `state7_count`, sum(if(`zy_final_material_order`.`state` = 8, 1, 0)) as `state8_count`, sum(if(`zy_final_material_order`.`state` = 9, 1, 0)) as `state9_count`, sum(if(`zy_final_material_order`.`state` = 10, 1, 0)) as `state10_count`, sum(if(`zy_final_material_order`.`state` = 11, 1, 0)) as `state11_count`, sum(if(`zy_final_material_order`.`state` = 12, 1, 0)) as `state12_count` from `zy_final_material_order` left join `zy_final_material_settle` as `settle` on `settle`.`id` = `zy_final_material_order`.`settle_id` and `settle`.`deleted_at` = 0 where `zy_final_material_order`.`deleted_at` = 0 group by `zy_final_material_order`.`site_id`)" } type JoinStatistPayment struct { db.BaseModel } func (JoinStatistPayment) TableName() string { return "(select `zy_final_site_payment`.`id`,`zy_final_site_payment`.`site_id`, group_concat(`type`.`name`) as `name`, count(`zy_final_site_payment`.`id`) as `finance_count` from `zy_final_site_payment` left join `zy_final_payment_type` as `type` on `type`.`id` = `zy_final_site_payment`.`type_id` where `zy_final_site_payment`.`state` = 0 and `zy_final_site_payment`.`deleted_at` = 0 group by `zy_final_site_payment`.`site_id`)" } type JoinStatistSettle struct { db.BaseModel } func (JoinStatistSettle) TableName() string { return "(select `id`,`site_id`, `state`, `manager_price`, `worker_price`, `auxiliary_price`, `subsidy_price`, `total`, sum(if(`zy_final_settle`.`state` in (0,2), 1, 0)) as `manager_count`, sum(if(`zy_final_settle`.`state` = 1, 1, 0)) as `customer_count`, sum(if(`zy_final_settle`.`state` in (3,5), 1, 0)) as `finance_count`, sum(if(`zy_final_settle`.`state` = 4, 1, 0)) as `shopowner_count` from `zy_final_settle` where `state` != 0 and `deleted_at` = 0 group by `site_id`)" } type FinalSiteStatist struct { WriteControl int64 `json:"write_control" type:"int" prop:"select:if(isnull(price.id),1,0)" search:"="` //由原來的wirte改成price ApplyControl int64 `json:"apply_control" type:"int" prop:"select:if(isnull(apply.id),0,1)" search:"="` ApplyControlName string `json:"apply_control_name" type:"string" prop:"select:apply.name" search:"="` IncompleteTable int64 `json:"incomplete_table" type:"int" prop:"select:if(isnull(table.id),0,1)" search:"="` IncompleteTableName string `json:"incomplete_table_name" type:"string" prop:"select:table.name" search:"="` NoOrder int64 `json:"no_order" type:"int" prop:"select:if(isnull(material.id),0,1)" search:"="` NoOrderName string `json:"no_order_name" type:"string" prop:"select:material.name" search:"="` IncompleteOrder int64 `json:"incomplete_order" type:"int" prop:"select:if(isnull(order.id),0,1)" search:"="` IncompleteOrderName string `json:"incomplete_order_name" type:"string" prop:"select:order.name" search:"="` IncompletePayment int64 `json:"incomplete_payment" type:"int" prop:"select:if(isnull(payment.id),0,1)" search:"="` IncompletePaymentName string `json:"incomplete_payment_name" type:"string" prop:"select:payment.name" search:"="` IncompleteChange int64 `json:"incomplete_change" type:"int" prop:"select:if(zy_final_site.change_state=1,0,1)" search:"="` Total float64 `json:"total" label:"金额" type:"float" prop:"select:settle.total"` ManagerPrice float64 `json:"manager_price" label:"承包额" type:"float" prop:"select:settle.manager_price"` WorkerPrice float64 `json:"worker_price" label:"工人" type:"float" prop:"select:settle.worker_price"` AuxiliaryPrice float64 `json:"auxiliary_price" label:"辅材" type:"float" prop:"select:settle.auxiliary_price"` SubsidyPrice float64 `json:"subsidy_price" label:"补贴" type:"float" prop:"select:settle.subsidy_price"` SettleState int64 `json:"settle_state" label:"状态" type:"int" prop:"select:ifnull(settle.state,0)" search:"="` AreaName string `json:"area_name" type:"string" prop:"select:area.name" search:"="` ShopName string `json:"shop_name" type:"string" prop:"select:shop.shop_name"` DeptName string `json:"dept_name" prop:"select:dept.name"` ManagerName string `json:"manager_name" type:"string" prop:"select:manager.username"` ManagerPhone string `json:"manager_phone" type:"string" prop:"select:manager.phone"` ProjectLeaderName string `json:"project_leader_name" type:"string" prop:"select:project_leader.username"` ProjectLeaderPhone string `json:"project_leader_phone" type:"string" prop:"select:project_leader.phone"` DesignerName string `json:"designer_name" type:"string" prop:"select:designer.username"` DesignerPhone string `json:"designer_phone" type:"string" prop:"select:designer.phone"` SalesmanName string `json:"salesman_name" type:"string" prop:"select:salesman.username"` SalesmanPhone string `json:"salesman_phone" type:"string" prop:"select:salesman.phone"` PkgName string `json:"pkg_name" type:"string" prop:"select:pkg.name"` ManagerCount int64 `json:"manager_count" type:"int" prop:"select:if(isnull(apply.manager_count),0,apply.manager_count)+if(isnull(table.manager_count),0,table.manager_count)+if(isnull(material.manager_count),0,material.manager_count)+if(isnull(order.manager_count),0,order.manager_count)+if(isnull(material.manager_count),0,material.manager_count)+if(isnull(settle.manager_count),0,settle.manager_count)" search:"="` LeaderCount int64 `json:"leader_count" type:"int" prop:"select:if(isnull(table.leader_count),0,table.leader_count)+if(isnull(order.leader_count),0,order.leader_count)" search:"="` FinanceCount int64 `json:"finance_count" type:"int" prop:"select:if(isnull(table.finance_count),0,table.finance_count)+if(isnull(payment.finance_count),0,payment.finance_count)+if(isnull(settle.finance_count),0,settle.finance_count)" search:"="` AuditCount int64 `json:"audit_count" type:"int" prop:"select:if(isnull(order.audit_count),0,order.audit_count)+if(isnull(write.id),1,0)+if(zy_final_site.change_state=1,0,1)" search:"="` ShopownerCount int64 `json:"shopowner_count" type:"int" prop:"select:if(isnull(table.shopowner_count),0,table.shopowner_count)+if(isnull(settle.shopowner_count),0,settle.shopowner_count)" search:"="` CustomerCount int64 `json:"customer_count" type:"int" prop:"select:if(isnull(settle.customer_count),0,settle.customer_count)" search:"="` PlaceCount int64 `json:"place_count" type:"int" prop:"select:if(isnull(order.place_count),0,order.place_count)" search:"="` SupplierCount int64 `json:"supplier_count" type:"int" prop:"select:if(isnull(order.supplier_count),0,order.supplier_count)" search:"="` TableIncompleteCollectCount int64 `json:"table_incomplete_collect_count" type:"int" prop:"select:if(isnull(table.incomplete_collect_count),0,table.incomplete_collect_count)" search:"="` OrderIncompleteCollectCount int64 `json:"order_incomplete_collect_count" type:"int" prop:"select:if(isnull(orderall.incomplete_collect_count),0,orderall.incomplete_collect_count)" search:"="` OrderState0Count int64 `json:"order_state0_count" type:"int" prop:"select:if(isnull(orderall.state0_count),0,orderall.state0_count)" search:"="` OrderState1Count int64 `json:"order_state1_count" type:"int" prop:"select:if(isnull(orderall.state1_count),0,orderall.state1_count)" search:"="` OrderState2Count int64 `json:"order_state2_count" type:"int" prop:"select:if(isnull(orderall.state2_count),0,orderall.state2_count)" search:"="` OrderState3Count int64 `json:"order_state3_count" type:"int" prop:"select:if(isnull(orderall.state3_count),0,orderall.state3_count)" search:"="` OrderState4Count int64 `json:"order_state4_count" type:"int" prop:"select:if(isnull(orderall.state4_count),0,orderall.state4_count)" search:"="` OrderState5Count int64 `json:"order_state5_count" type:"int" prop:"select:if(isnull(orderall.state5_count),0,orderall.state5_count)" search:"="` OrderState6Count int64 `json:"order_state6_count" type:"int" prop:"select:if(isnull(orderall.state6_count),0,orderall.state6_count)" search:"="` OrderState7Count int64 `json:"order_state7_count" type:"int" prop:"select:if(isnull(orderall.state7_count),0,orderall.state7_count)" search:"="` OrderState8Count int64 `json:"order_state8_count" type:"int" prop:"select:if(isnull(orderall.state8_count),0,orderall.state8_count)" search:"="` OrderState9Count int64 `json:"order_state9_count" type:"int" prop:"select:if(isnull(orderall.state9_count),0,orderall.state9_count)" search:"="` OrderState10Count int64 `json:"order_state10_count" type:"int" prop:"select:if(isnull(orderall.state10_count),0,orderall.state10_count)" search:"="` OrderState11Count int64 `json:"order_state11_count" type:"int" prop:"select:if(isnull(orderall.state11_count),0,orderall.state11_count)" search:"="` OrderState12Count int64 `json:"order_state12_count" type:"int" prop:"select:if(isnull(orderall.state12_count),0,orderall.state12_count)" search:"="` FinalSite } func (model FinalSiteStatist) GroupBy() string { return "" } func (model FinalSiteStatist) ExportFields() []db.ExportField { return []db.ExportField{ { Label: "ID", Name: "id", Width: 10, }, { Label: "业主姓名", Name: "username", Width: 10, }, { Label: "手机号码", Name: "phone", Width: 20, }, { Label: "区域", Name: "area_name", Width: 10, }, { Label: "工地", Name: "address", Width: 30, }, { Label: "户型", Name: "room", Width: 30, }, { Label: "门店", Name: "shop_name", Width: 15, }, { Label: "部门", Name: "dept_name", Width: 15, }, { Label: "设计师", Name: "designer_name", Width: 10, }, { Label: "业务员", Name: "salesman_name", Width: 10, }, { Label: "项目经理", Name: "manager_name", Width: 10, }, { Label: "工程队长", Name: "project_leader_name", Width: 10, }, { Label: "开工日期", Name: "starttime", Width: 20, }, { Label: "完工日期", Name: "endtime", Width: 15, }, { Label: "套餐", Name: "pkg_name", Width: 20, }, { Label: "控额", Name: "write_control", Width: 10, }, { Label: "工人申请", Name: "apply_control", Width: 10, }, { Label: "工人项目", Name: "incomplete_table", Width: 10, }, { Label: "辅材下单", Name: "no_order", Width: 10, }, { Label: "材料订单", Name: "incomplete_order", Width: 10, }, { Label: "结款", Name: "incomplete_payment", Width: 10, }, { Label: "变更", Name: "incomplete_change", Width: 10, }, { Label: "未申请工人项目", Name: "apply_control_name", Width: 20, }, { Label: "未完成工人项目", Name: "incomplete_table_name", Width: 20, }, { Label: "未下单辅材", Name: "no_order_name", Width: 20, }, { Label: "未完成订单", Name: "incomplete_order_name", Width: 20, }, { Label: "未完成结款", Name: "incomplete_payment_name", Width: 20, }, { Label: "结算金额", Name: "settle_total", Width: 20, }, { Label: "结算状态", Name: "settle_state", Width: 20, }, { Label: "项目经理未完成", Name: "manager_count", Width: 20, }, { Label: "工程队长未完成", Name: "leader_count", Width: 20, }, { Label: "财务未完成", Name: "finance_count", Width: 20, }, { Label: "成控未完成", Name: "audit_count", Width: 20, }, { Label: "店长未完成", Name: "shopowner_count", Width: 20, }, { Label: "客服未完成", Name: "customer_count", Width: 20, }, { Label: "下单员未完成", Name: "place_count", Width: 20, }, { Label: "材料商未完成", Name: "supplier_count", Width: 20, }, { Label: "工人待汇总", Name: "table_incomplete_collect_count", Width: 20, }, { Label: "材料待汇总", Name: "order_incomplete_collect_count", Width: 20, }, { Label: "材料待备货", Name: "order_state0_count", Width: 20, }, { Label: "材料已备货", Name: "order_state1_count", Width: 20, }, { Label: "材料待配送", Name: "order_state2_count", Width: 20, }, { Label: "材料待收货", Name: "order_state3_count", Width: 20, }, { Label: "材料已收货", Name: "order_state4_count", Width: 20, }, { Label: "材料待安装", Name: "order_state5_count", Width: 20, }, { Label: "材料待验收", Name: "order_state6_count", Width: 20, }, { Label: "材料已完成", Name: "order_state7_count", Width: 20, }, { Label: "材料已下单", Name: "order_state8_count", Width: 20, }, { Label: "材料待测量", Name: "order_state9_count", Width: 20, }, { Label: "材料待审核", Name: "order_state10_count", Width: 20, }, { Label: "材料待结算", Name: "order_state11_count", Width: 20, }, { Label: "材料已结算", Name: "order_state12_count", Width: 20, }, } } func (FinalSiteStatist) ExportValue(row map[string]interface{}, rowIndex int, field db.ExportField, data []map[string]interface{}) string { switch field.Name { case "address": worksite := /*db.ToString(v["address"]) + " " +*/ db.ToString(row["village"]) + "" + db.ToString(row["room_no"]) if worksite == "" { worksite = db.ToString(row["address"]) } if db.ToString(row["area"]) != "" { worksite += " " + db.ToString(row["area"]) + "㎡" } return worksite case "room": return db.ToString(row["room_1"]) + "室 " + db.ToString(row["room_2"]) + "厅 " + db.ToString(row["room_3"]) + "厨 " + db.ToString(row["room_4"]) + "卫 " + db.ToString(row["room_5"]) + "阳台" case "starttime": starttime, _ := db.ToInt64(row["starttime"]) if starttime == 0 { return "" } t := time.Unix(starttime, 0).Local() return t.Format("2006-01-02 15:04") case "endtime": endtime, _ := db.ToInt64(row["endtime"]) if endtime == 0 { return "" } t := time.Unix(endtime, 0).Local() return t.Format("2006-01-02") case "write_control": write_control, _ := db.ToInt64(row["write_control"]) if write_control == 1 { return "未完成" } return "已完成" case "apply_control": apply_control, _ := db.ToInt64(row["apply_control"]) if apply_control == 1 { return "未完成" } return "已完成" case "incomplete_table": incomplete_table, _ := db.ToInt64(row["incomplete_table"]) if incomplete_table == 1 { return "未完成" } return "已完成" case "no_order": no_order, _ := db.ToInt64(row["no_order"]) if no_order == 1 { return "未完成" } return "已完成" case "incomplete_order": incomplete_order, _ := db.ToInt64(row["incomplete_order"]) if incomplete_order == 1 { return "未完成" } return "已完成" case "incomplete_payment": incomplete_payment, _ := db.ToInt64(row["incomplete_payment"]) if incomplete_payment == 1 { return "未完成" } return "已完成" case "incomplete_change": incomplete_change, _ := db.ToInt64(row["incomplete_change"]) if incomplete_change == 1 { return "未完成" } return "已完成" case "settle_total": settle_total := "" manager_price, _ := db.ToFloat64(row["manager_price"]) if manager_price != 0 { settle_total += "承包额:" + db.ToString(manager_price) + "\n" } worker_price, _ := db.ToFloat64(row["worker_price"]) if worker_price != 0 { settle_total += "工人:" + db.ToString(worker_price) + "\n" } auxiliary_price, _ := db.ToFloat64(row["auxiliary_price"]) if auxiliary_price != 0 { settle_total += "辅材:" + db.ToString(auxiliary_price) + "\n" } subsidy_price, _ := db.ToFloat64(row["subsidy_price"]) if subsidy_price != 0 { settle_total += "补贴:" + db.ToString(subsidy_price) + "\n" } total, _ := db.ToFloat64(row["total"]) if total != 0 { settle_total += "金额:" + db.ToString(total) + "\n" } return settle_total case "settle_state": settle_state, _ := db.ToInt64(row["settle_state"]) switch settle_state { case 0: return "未发起" case 1: return "客服回访" case 2: return "项目经理确认" case 3: return "财务审核" case 4: return "店长审核" case 5: return "财务付款" case 6: return "已完成" } return "" } return db.ToString(row[field.Name]) } func (model FinalSiteStatist) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{ { Model: FinalArea{}, As: "area", On: []string{"`area`.`id` = " + model.TableName() + ".`area_id`"}, }, { Model: JoinShop{}, As: "shop", On: []string{"`shop`.`id` = " + model.TableName() + ".`shop_id`"}, }, { Model: JoinDept{}, As: "dept", On: []string{"`dept`.`id` = " + model.TableName() + ".`dept_id`"}, }, { Model: JoinAdmin{}, As: "manager", On: []string{"`manager`.`id` = " + model.TableName() + ".`manager_id`"}, }, { Model: JoinAdmin{}, As: "project_leader", On: []string{"`project_leader`.`id` = " + model.TableName() + ".`project_leader_id`"}, }, { Model: JoinAdmin{}, As: "designer", On: []string{"`designer`.`id` = " + model.TableName() + ".`designer_id`"}, }, { Model: JoinAdmin{}, As: "salesman", On: []string{"`salesman`.`id` = " + model.TableName() + ".`salesman_id`"}, }, { Model: FinalPkg{}, As: "pkg", On: []string{"`pkg`.`id` = " + model.TableName() + ".`pkg_id`"}, }, { Model: JoinWriteControl{}, As: "write", On: []string{"`write`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinPriceControl{}, As: "price", On: []string{"`price`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinApplyControl{}, As: "apply", On: []string{"`apply`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinStatistTable{}, As: "table", On: []string{"`table`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinStatistMaterial{}, As: "material", On: []string{"`material`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinStatistOrder{}, As: "order", On: []string{"`order`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinStatistOrderAll{}, As: "orderall", On: []string{"`orderall`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinStatistPayment{}, As: "payment", On: []string{"`payment`.`site_id` = " + model.TableName() + ".`id`"}, }, { Model: JoinStatistSettle{}, As: "settle", On: []string{"`settle`.`site_id` = " + model.TableName() + ".`id`"}, }, } }