package worksitenode import ( "errors" "time" "zhiyuan/models" "zhiyuan/pkg/app" "zhiyuan/pkg/db" "zhiyuan/pkg/utils" "zhiyuan/services/form" "zhiyuan/services/work/worker" "zhiyuan/services/work/worknode" "zhiyuan/services/work/worksite" ) var WorkSiteNode models.WorkSiteNode func Add(form form.WorkSiteNodeAdd, adminID int) (int64, error) { worksiteInfo, err := worksite.GetInfoByID(form.SiteId, nil, nil) if worksiteInfo == nil { return 0, errors.New("invalid worksite id") } if worksiteInfo.State != 0 { return 0, errors.New("项目已开工") } if form.StartTime > form.EndTime || form.StartTime < worksiteInfo.StartTime || form.EndTime < worksiteInfo.StartTime || form.StartTime > worksiteInfo.EndTime || form.EndTime > worksiteInfo.EndTime { return 0, errors.New("工期设置有误") } worknodeInfo, err := worknode.GetInfoByID(form.NodeId, nil, nil) if worknodeInfo == nil || worknodeInfo.State == 0 { return 0, errors.New("invalid worknode id") } workSiteNodeMap := map[string]interface{}{ "`site_id`": form.SiteId, "`node_id`": form.NodeId, "`name`": form.Name, "`starttime`": form.StartTime, "`endtime`": form.EndTime, "`process_ids`": form.ProcessIds, "`return_visit_id`": form.ReturnVisitID, "`quality_accept_id`": form.QualityAcceptID, "`mark`": form.Mark, } workSiteNodeID, err := db.InsertOne(WorkSiteNode.TableName(), workSiteNodeMap) if err != nil { return 0, nil } return workSiteNodeID, nil } func EditByID(form form.WorkSiteNodeEdit, id int, adminID int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } if info.State == 4 { return errors.New("节点已验收") } worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil) if worksiteInfo == nil { return errors.New("invalid worksite id") } if worksiteInfo.State != 0 { return errors.New("项目已开工") } if form.StartTime > form.EndTime || form.StartTime < worksiteInfo.StartTime || form.EndTime < worksiteInfo.StartTime || form.StartTime > worksiteInfo.EndTime || form.EndTime > worksiteInfo.EndTime { return errors.New("工期设置有误") } workSiteNodeMap := map[string]interface{}{ "`name`": form.Name, "`starttime`": form.StartTime, "`endtime`": form.EndTime, "`process_ids`": form.ProcessIds, "`return_visit_id`": form.ReturnVisitID, "`quality_accept_id`": form.QualityAcceptID, "`mark`": form.Mark, } _, err = db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap) return err } func EditQualityTimeByID(form form.WorkSiteNodeQualityTime, id int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } workSiteNodeMap := map[string]interface{}{ "`quality_time`": form.QualityTime, } _, err = db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap) return err } func QualityCheck(id int, adminID int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } workSiteNodeMap := map[string]interface{}{ "`quality_id`": adminID, "`quality_at`": time.Now().Unix(), } _, err = db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap) return err } func DeleteByID(id int, adminID int) error { info, _ := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } worksiteInfo, _ := worksite.GetInfoByID(info.SiteId, nil, nil) if worksiteInfo == nil { return errors.New("invalid worksite id") } if worksiteInfo.State != 0 { return errors.New("项目已开工") } _, err := db.DeleteSoft(WorkSiteNode.TableName(), map[string]interface{}{"id": id}) return err } func DispatchByID(form form.WorkSiteNodeWorkerID, id int, adminID int) error { info, _ := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } //if info.State == 4 { // return errors.New("节点已验收") //} //if info.WorkerId != 0 { // return errors.New("已指派工人") //} worknodeInfo, _ := worknode.GetInfoByID(info.NodeId, nil, nil) if worknodeInfo == nil { return errors.New("invalid worknode id") } worksiteInfo, _ := worksite.GetInfoByID(info.SiteId, nil, nil) if worksiteInfo == nil { return errors.New("invalid worksite id") } //if worksiteInfo.ManagerId != adminID { // return errors.New("账号权限有误") //} if worksiteInfo.State == 2 { return errors.New("项目已完工") } if typeInfo, _ := worker.GetOneRaw(map[string]string{"where": "id={{worker_id}} AND FIND_IN_SET({{type_id}}, type_ids)"}, map[string]interface{}{"type_id": worknodeInfo.WorkTypeId, "worker_id": form.WorkerID}, nil); typeInfo == nil { return errors.New("工人工种有误") } workSiteNodeMap := map[string]interface{}{ "`worker_id`": form.WorkerID, } _, err := db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap) return err } func StartByID(id int, adminID int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } if info.State != 0 { return errors.New("节点状态有误") } worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil) if worksiteInfo == nil { return errors.New("invalid worksite id") } if worksiteInfo.State == 3 { return errors.New("项目已停工") } now := time.Now().Unix() if worksiteInfo.State == 0 { _, err = db.Update(worksiteInfo.TableName(), map[string]interface{}{"id": worksiteInfo.ID}, map[string]interface{}{ "real_starttime": now, "state": 1, }) if err != nil { return err } } _, err = db.Update(info.TableName(), map[string]interface{}{"id": info.ID}, map[string]interface{}{ "real_starttime": now, "state": 1, }) if err != nil { return err } return nil } func ReturnVisitByID(forms form.ReturnVisitFrom, id int, adminID int) error { info, err := GetInfoByID(id, nil, nil) if info == nil { return errors.New("invalid id") } //if info.State != 3 { // return errors.New("节点状态有误") //} if info.ReturnVisitID == 0 { return errors.New("节点无需回访") } //if info.ReturnVisitContent != "" { // return errors.New("节点已回访") //} worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil) if worksiteInfo == nil { return errors.New("invalid worksite id") } //if worksiteInfo.State != 1 { // return errors.New("项目未开工") //} data := map[string]interface{}{ "return_visit_content": utils.JsonEncode(forms.ReturnVisit), } if info.ReturnVisitContent == "" { data["return_visit_admin_id"] = adminID data["return_visit_time"] = time.Now().Unix() } _, err = db.Update(info.TableName(), map[string]interface{}{"id": info.ID}, data) if err != nil { return err } return nil } func Count(where map[string]interface{}) (int64, error) { return db.Count(WorkSiteNode.TableName(), where) } func CountRaw(where string, param map[string]interface{}) (int64, error) { query := "`zy_work_site_node` WHERE " + where return db.CountRaw(query, param) } func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.WorkSiteNode, error) { if page.PageNum > 0 && page.PageSize > 0 { where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize)) } return WorkSiteNode.GetMulti(where, fields, retVal) } func GetWorkSiteNodesRaw(where map[string]string, param map[string]interface{}, retVal interface{}) error { field := "SELECT `zy_work_site_node`.*, `zy_work_node`.`color`, `zy_work_node`.`logo`, `zy_worker`.`name` as `worker_name`, `zy_worker`.`phone` as `worker_phone`, `zy_admin`.`username` as `return_visit_name`, `zy_admin`.`phone` as `return_visit_phone`, `zy_admin`.`headimgurl` as `return_visit_headimgurl` FROM `zy_work_site_node` left join `zy_work_node` on `zy_work_node`.`id` = `zy_work_site_node`.`node_id` left join `zy_worker` on `zy_worker`.`id` = `zy_work_site_node`.`worker_id` left join `zy_admin` on `zy_admin`.`id` = `zy_work_site_node`.`return_visit_admin_id` " return db.GetMultiRaw(field, where, param, retVal) } func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.WorkSiteNode, error) { return WorkSiteNode.GetOne(where, fields, retVal) } func GetWorkSiteNodeOne(where map[string]string, param map[string]interface{}, retVal interface{}) error { field := "SELECT `zy_work_site_node`.*, `zy_work_node`.`color`, `zy_work_node`.`logo`, `zy_work_node`.`work_type_id`, `zy_worker`.`name` as `worker_name`, `zy_worker`.`phone` as `worker_phone`, `zy_work_type`.`name` as `work_type_name`, `zy_admin`.`username` as `return_visit_name`, `zy_admin`.`phone` as `return_visit_phone`, `zy_admin`.`headimgurl` as `return_visit_headimgurl` FROM `zy_work_site_node` left join `zy_work_node` on `zy_work_node`.`id` = `zy_work_site_node`.`node_id` left join `zy_worker` on `zy_worker`.`id` = `zy_work_site_node`.`worker_id` left join `zy_admin` on `zy_admin`.`id` = `zy_work_site_node`.`return_visit_admin_id` left join `zy_work_type` on `zy_work_type`.`id` = `zy_work_node`.`work_type_id` " where["_page_size"] = utils.ToStr(1) where["_page_num"] = utils.ToStr(1) where["_group_by"] = "`zy_work_site_node`.`id`" return db.GetMultiRaw(field, where, param, retVal) } func GetWorkSiteNodeByID(id int, retVal interface{}) error { where := map[string]string{ "where": "`zy_work_site_node`.`id` = {{id}}", } param := map[string]interface{}{"id": id} return GetWorkSiteNodeOne(where, param, retVal) } func GetInfoByID(id int, fields []string, retVal interface{}) (*models.WorkSiteNode, error) { return GetOne(map[string]interface{}{"id": id}, fields, retVal) }