package worksiteclock import ( "errors" "time" "zhiyuan/models" "zhiyuan/pkg/app" "zhiyuan/pkg/db" "zhiyuan/pkg/utils" "zhiyuan/services/form" "zhiyuan/services/work/worksite" "zhiyuan/services/work/worksitenode" ) var WorkSiteClock models.WorkSiteClock func AddWorker(form form.WorkSiteClockAdd, workerID int) (int64, error) { worksitenodeInfo, err := worksitenode.GetInfoByID(form.SiteNodeId, nil, nil) if worksitenodeInfo == nil { return 0, errors.New("invalid worksitenode id") } if worksitenodeInfo.WorkerId != workerID { return 0, errors.New("账号权限有误") } if worksitenodeInfo.State == 4 { return 0, errors.New("节点已验收") } now := time.Now().Unix() if now < int64(worksitenodeInfo.StartTime) || now > int64(worksitenodeInfo.EndTime) { return 0, errors.New("不在节点工期内") } worksiteInfo, err := worksite.GetInfoByID(worksitenodeInfo.SiteId, nil, nil) if worksiteInfo == nil { return 0, errors.New("invalid worksite id") } if worksiteInfo.State == 2 { return 0, errors.New("项目已完工") } clocks, err := WorkSiteClock.GetMulti(map[string]interface{}{ "`site_id`": worksitenodeInfo.SiteId, "`site_node_id`": form.SiteNodeId, "`staff_type`": 0, "`staff_id`": workerID, "`created_at` >": "unix_timestamp(CURDATE())", }, nil, nil) if err != nil { return 0, errors.New("invalid") } if worksiteInfo.State == 0 { _, err = db.Update(worksiteInfo.TableName(), map[string]interface{}{"id": worksiteInfo.ID}, map[string]interface{}{"state": 1}) if err != nil { return 0, nil } } if worksitenodeInfo.State == 0 { _, err = db.Update(worksitenodeInfo.TableName(), map[string]interface{}{"id": worksitenodeInfo.ID}, map[string]interface{}{"state": 1}) if err != nil { return 0, nil } } workSiteClockMap := map[string]interface{}{ "`site_id`": worksitenodeInfo.SiteId, "`site_node_id`": form.SiteNodeId, "`staff_type`": 0, "`staff_id`": workerID, "`pictures`": form.Pictures, "`content`": form.Content, "`type`": len(clocks) % 2, } workSiteClockID, err := db.InsertOne(WorkSiteClock.TableName(), workSiteClockMap) if err != nil { return 0, nil } return workSiteClockID, nil } func AddAdmin(form form.WorkSiteClockAdd, adminID int) (int64, error) { worksitenodeInfo, err := worksitenode.GetInfoByID(form.SiteNodeId, nil, nil) if worksitenodeInfo == nil { return 0, errors.New("invalid worksitenode id") } if worksitenodeInfo.State == 4 { return 0, errors.New("节点已验收") } now := time.Now().Unix() if now < int64(worksitenodeInfo.StartTime) || now > int64(worksitenodeInfo.EndTime) { return 0, errors.New("不在节点工期内") } worksiteInfo, err := worksite.GetInfoByID(worksitenodeInfo.SiteId, nil, nil) if worksiteInfo == nil { return 0, errors.New("invalid worksite id") } if worksiteInfo.State == 2 { return 0, errors.New("项目已完工") } if worksiteInfo.ManagerId != adminID || worksiteInfo.DesignerId != adminID { return 0, errors.New("账号权限有误") } staff_type := 2 if worksiteInfo.ManagerId == adminID { staff_type = 1 } clocks, err := WorkSiteClock.GetMulti(map[string]interface{}{ "`site_id`": worksitenodeInfo.SiteId, "`site_node_id`": form.SiteNodeId, "`staff_type`": staff_type, "`staff_id`": adminID, "`created_at` >": "unix_timestamp(CURDATE())", }, nil, nil) if err != nil { return 0, errors.New("invalid") } if worksiteInfo.State == 0 { _, err = db.Update(worksiteInfo.TableName(), map[string]interface{}{"id": worksiteInfo.ID}, map[string]interface{}{"state": 1}) if err != nil { return 0, nil } } if worksitenodeInfo.State == 0 { _, err = db.Update(worksitenodeInfo.TableName(), map[string]interface{}{"id": worksitenodeInfo.ID}, map[string]interface{}{"state": 1}) if err != nil { return 0, nil } } workSiteClockMap := map[string]interface{}{ "`site_id`": worksitenodeInfo.SiteId, "`site_node_id`": form.SiteNodeId, "`staff_type`": staff_type, "`staff_id`": adminID, "`pictures`": form.Pictures, "`content`": form.Content, "`type`": len(clocks) % 2, } workSiteClockID, err := db.InsertOne(WorkSiteClock.TableName(), workSiteClockMap) if err != nil { return 0, nil } return workSiteClockID, nil } func EditByIDWorker(form form.WorkSiteClockEdit, id int, workerID int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } if info.State == 1 { return errors.New("该日报已审核") } if info.StaffType != 0 || info.StaffId != workerID { return errors.New("账号权限有误") } worksitenodeInfo, err := worksitenode.GetInfoByID(info.SiteNodeId, nil, nil) if worksitenodeInfo == nil { return errors.New("invalid worksitenode id") } if worksitenodeInfo.WorkerId != workerID { return errors.New("账号权限有误") } if worksitenodeInfo.State == 4 { return errors.New("节点已验收") } workSiteClockMap := map[string]interface{}{ "`pictures`": form.Pictures, "`content`": form.Content, } _, err = db.Update(WorkSiteClock.TableName(), map[string]interface{}{"id": id}, workSiteClockMap) return err } func EditByIDAdmin(form form.WorkSiteClockEdit, id int, adminID int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } if info.State == 1 { return errors.New("该日报已审核") } if info.StaffType == 0 || info.StaffId != adminID { return errors.New("账号权限有误") } worksitenodeInfo, err := worksitenode.GetInfoByID(info.SiteNodeId, nil, nil) if worksitenodeInfo == nil { return errors.New("invalid worksitenode id") } if worksitenodeInfo.State == 4 { return errors.New("节点已验收") } workSiteClockMap := map[string]interface{}{ "`pictures`": form.Pictures, "`content`": form.Content, } _, err = db.Update(WorkSiteClock.TableName(), map[string]interface{}{"id": id}, workSiteClockMap) return err } func DeleteByID(id int) error { info, _ := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } _, err := db.DeleteSoft(WorkSiteClock.TableName(), map[string]interface{}{"id": id}) return err } func VerifyByID(id int, adminID int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid worker id") } if info.State == 1 { return errors.New("该日报已审核") } worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil) if worksiteInfo == nil { return errors.New("invalid worksite id") } if worksiteInfo.ManagerId != adminID { return errors.New("账号权限有误") } workSiteClockMap := map[string]interface{}{ "state": 1, } _, err = db.Update(WorkSiteClock.TableName(), map[string]interface{}{"id": id}, workSiteClockMap) return err } func Count(where map[string]interface{}) (int64, error) { return db.Count(WorkSiteClock.TableName(), where) } func CountRaw(where string, param map[string]interface{}) (int64, error) { query := "`zy_work_site_clock` WHERE " + where return db.CountRaw(query, param) } func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.WorkSiteClock, error) { if page.PageNum > 0 && page.PageSize > 0 { where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize)) } return WorkSiteClock.GetMulti(where, fields, retVal) } func GetWorkSiteClocksRaw(where map[string]string, param map[string]interface{}, retVal interface{}) error { field := "SELECT `zy_work_site_clock`.*, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`name`,`zy_admin`.`username`) as `staff_name`, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`phone`,`zy_admin`.`phone`) as `staff_phone`, `zy_work_site_node`.`name` as `node_name` FROM `zy_work_site_clock` left join `zy_worker` on `zy_work_site_clock`.`staff_type` = 0 AND `zy_worker`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_admin` on `zy_work_site_clock`.`staff_type` <> 0 AND `zy_admin`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_work_site_node` on `zy_work_site_node`.`id` = `zy_work_site_clock`.`site_node_id` " return db.GetMultiRaw(field, where, param, retVal) } func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.WorkSiteClock, error) { return WorkSiteClock.GetOne(where, fields, retVal) } func GetWorkSiteClockOne(where map[string]string, param map[string]interface{}, retVal interface{}) error { field := "SELECT `zy_work_site_clock`.*, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`name`,`zy_admin`.`username`) as `staff_name`, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`phone`,`zy_admin`.`phone`) as as `staff_phone`, `zy_work_site_node`.`name` as `node_name` FROM `zy_work_site_clock` left join `zy_worker` on `zy_work_site_clock`.`staff_type` = 0 AND `zy_worker`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_admin` on `zy_work_site_clock`.`staff_type` <> 0 AND `zy_admin`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_work_site_node` on `zy_work_site_node`.`id` = `zy_work_site_clock`.`site_node_id` " where["_page_size"] = utils.ToStr(1) where["_page_num"] = utils.ToStr(1) return db.GetMultiRaw(field, where, param, retVal) } func GetWorkSiteClockByID(id int, retVal interface{}) error { where := map[string]string{ "where": "`zy_work_site_clock`.`id` = {{id}}", } param := map[string]interface{}{"id": id} return GetWorkSiteClockOne(where, param, retVal) } func GetInfoByID(id int, fields []string, retVal interface{}) (*models.WorkSiteClock, error) { return GetOne(map[string]interface{}{"id": id}, fields, retVal) }