package models import ( "lapp_-wy/db" "lapp_-wy/utils" "lapp_-wy/web/middleware/glog" "xorm.io/core" ) type CSurveysheet struct { Cid int `json:"cid" xorm:"not null pk comment('公司ID') INT(11)"` Cnr int `json:"cnr" xorm:"not null pk comment('小区编号') INT(11)"` Surveysheetid string `json:"surveysheetid" xorm:"not null pk comment('调研问卷流水号') VARCHAR(40)"` Descr string `json:"descr" xorm:"default 'NULL' comment('描述') VARCHAR(255)"` Surveyyear string `json:"surveyyear" xorm:"not null comment('调研年份') VARCHAR(20)"` Surveydate string `json:"surveydate" xorm:"not null comment('调研日期') DATE"` Surveysamplecount int `json:"surveysamplecount" xorm:"not null comment('调研样例(问卷数)') INT(11)"` Surveyfinishedcount int `json:"surveyfinishedcount" xorm:"default NULL comment('调研已完成数') INT(11)"` Status int `json:"status" xorm:"default NULL comment('该调研问卷状态') INT(11)"` Surveyperson string `json:"surveyperson" xorm:"default 'NULL' comment('调研人') VARCHAR(40)"` Createtime string `json:"createtime" xorm:"default 'NULL' comment('创建时间') VARCHAR(40)"` Lastmodifytime string `json:"lastmodifytime" xorm:"default 'NULL' comment('最近更新时间') VARCHAR(40)"` Lastmodifyby string `json:"lastmodifyby" xorm:"default 'NULL' comment('修改人员') VARCHAR(40)"` Valst []CSurveysheetSubjectlst `json:"valst" xorm:"-"` } type Cvalst struct { SubjectType string `json:"subject_type"` CSurveysheetSubjectlst []CSurveysheetSubjectlst `json:"c_surveysheet_subjectlst"` } func (t *CSurveysheet) TableName() string { return "c_surveysheet" } // 清除string字段的右侧空格 func (t *CSurveysheet) Clipped() { utils.TrimStruct(t, *t) } //增 func (t *CSurveysheet) Add() error { engine := db.MasterEngine() session := engine.NewSession() defer session.Close() // add Begin() before any action err := session.Begin() if err != nil { return err } snr := new(Snrtab) snr.Cid = t.Cid id, err := snr.GetNextSnr("Sheetid") if err != nil { session.Rollback() return err } //添加题目 Survey := new(CSurveysheet) Survey.Cid = t.Cid Survey.Cnr = t.Cnr Survey.Surveysheetid = id Survey.Descr = t.Descr Survey.Status = t.Status Survey.Surveyfinishedcount = t.Surveyfinishedcount Survey.Surveysamplecount = t.Surveysamplecount Survey.Surveydate = t.Surveydate Survey.Surveyyear = t.Surveyyear Survey.Surveyperson = t.Surveyperson Survey.Lastmodifyby = t.Lastmodifyby Survey.Createtime = t.Createtime Survey.Lastmodifytime = t.Lastmodifytime _, err = session.Table("c_surveysheet").Insert(Survey) if err != nil { glog.InfoExt("问题调研", "添加题目 err is :", err) session.Rollback() return err } pos := 0 //添加问题 for _, v := range t.Valst { pos += 1 subject := new(CSurveysheetSubjectlst) subject.Cid = t.Cid subject.Cnr = t.Cnr subject.Subjectid = v.Subjectid subject.Pos = pos subject.Surveysheetid = id subject.Subjecttext = v.Subjecttext subject.Subjectpicture = v.Subjectpicture subject.Subjectvideo = v.Subjectvideo subject.Subjecttype = v.Subjecttype subject.SubjectCategoryid = v.SubjectCategoryid subject.Condition = v.Condition subject.Level = v.Level subject.Fsubjectid = v.Fsubjectid subject.Lastmodifyby = t.Lastmodifyby subject.Createtime = t.Createtime subject.Lastmodifytime = t.Lastmodifytime _, err = session.Table("c_surveysheet_subjectlst").Insert(subject) if err != nil { glog.InfoExt("问题调研", "添加问题 err is :", err) session.Rollback() return err } //查询答题 datalist := make([]SubjectOptionlst, 0) err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, v.Subjectid).Find(&datalist) //构造数组 sheets := make([]CSurveysheetOptionlst, 0) for _, vv := range datalist { sheet := CSurveysheetOptionlst{} sheet.Cid = t.Cid sheet.Cnr = t.Cnr sheet.Subjectid = vv.Subjectid sheet.Surveysheetid = id sheet.Optionid = vv.Optionid sheet.Optiontext = vv.Optiontext sheet.Optionpicture = vv.Optionpicture sheet.Optionvideo = vv.Optionvideo sheet.Optionvalue = vv.Optionvalue sheet.Optionfactor = vv.Optionfactor sheet.Optionvideo = t.Lastmodifyby sheet.Optiontype = vv.Optiontype sheet.Optioninput = vv.Optioninput sheet.Createtime = t.Createtime sheet.Lastmodifytime = t.Lastmodifytime sheets = append(sheets, sheet) } //添加 _, err = session.Table("c_surveysheet_optionlst").Insert(&sheets) if err != nil { glog.InfoExt("问题调研", "添加 err is :", err) session.Rollback() return err } //查询是否有子题目 sub := new(Subject) ok, err := engine.Table("subject").Where("cid = ? and fsubjectid = ?", t.Cid, v.Subjectid).Get(sub) if err != nil { session.Rollback() return err } if ok { //题目排序 +1 pos += 1 subj := new(CSurveysheetSubjectlst) subj.Cid = t.Cid subj.Cnr = t.Cnr subj.Subjectid = sub.Subjectid subj.Pos = pos subj.Surveysheetid = id subj.Level = 1 subj.Fsubjectid = v.Subjectid subj.Condition = sub.Condition subj.Subjecttext = sub.Subjecttext subj.Subjectpicture = sub.Subjectpicture subj.Subjectvideo = sub.Subjectvideo subj.Subjecttype = sub.Subjecttype subj.SubjectCategoryid = sub.SubjectCategoryid subj.Lastmodifyby = t.Lastmodifyby subj.Createtime = t.Createtime subj.Lastmodifytime = t.Lastmodifytime _, err = session.Table("c_surveysheet_subjectlst").Insert(subj) if err != nil { glog.InfoExt("问题调研", "添加问题 err is :", err) session.Rollback() return err } //查询答题 sdatalist := make([]SubjectOptionlst, 0) err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, sub.Subjectid).Find(&sdatalist) //构造数组 sonsheets := make([]CSurveysheetOptionlst, 0) for _, vv := range sdatalist { sonsheet := CSurveysheetOptionlst{} sonsheet.Cid = t.Cid sonsheet.Cnr = t.Cnr sonsheet.Subjectid = vv.Subjectid sonsheet.Surveysheetid = id sonsheet.Optionid = vv.Optionid sonsheet.Optiontext = vv.Optiontext sonsheet.Optionpicture = vv.Optionpicture sonsheet.Optionvideo = vv.Optionvideo sonsheet.Optionvalue = vv.Optionvalue sonsheet.Optionfactor = vv.Optionfactor sonsheet.Optionvideo = t.Lastmodifyby sonsheet.Optiontype = vv.Optiontype sonsheet.Optioninput = vv.Optioninput sonsheet.Createtime = t.Createtime sonsheet.Lastmodifytime = t.Lastmodifytime sonsheets = append(sonsheets, sonsheet) } //添加 _, err = session.Table("c_surveysheet_optionlst").Insert(&sonsheets) if err != nil { glog.InfoExt("问题调研", "添加 err is :", err) session.Rollback() return err } } } err = session.Commit() if err != nil { return err } return nil } //删 func (t *CSurveysheet) Del() error { engine := db.MasterEngine() session := engine.NewSession() defer session.Close() // add Begin() before any action err := session.Begin() if err != nil { return err } //删除卷子 _, err = session.ID(core.PK{t.Cid, t.Cnr, t.Surveysheetid}).Delete(&CSurveysheet{}) if err != nil { session.Rollback() return err } //删除题目 _, err = session.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr =? and surveysheetid = ?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&CSurveysheetSubjectlst{}) if err != nil { session.Rollback() return err } //删除对应的题目选项 _, err = session.Table("c_surveysheet_optionlst").Where("cid = ? and cnr = ? and surveysheetid =?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&SubjectOptionlst{}) if err != nil { session.Rollback() return err } err = session.Commit() if err != nil { return err } return nil } //改 func (t *CSurveysheet) Update() error { engine := db.MasterEngine() session := engine.NewSession() defer session.Close() // add Begin() before any action err := session.Begin() if err != nil { return err } _, err = session.Table("c_surveysheet").ID(core.PK{t.Cid, t.Cnr, t.Surveysheetid}).Update(t) if err != nil { return err } //删除题目 _, err = session.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr =? and surveysheetid = ?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&CSurveysheetSubjectlst{}) if err != nil { session.Rollback() return err } //删除对应的题目选项 _, err = session.Table("c_surveysheet_optionlst").Where("cid = ? and cnr = ? and surveysheetid =?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&SubjectOptionlst{}) if err != nil { session.Rollback() return err } pos := 0 //添加问题 for _, v := range t.Valst { pos += 1 subject := new(CSurveysheetSubjectlst) subject.Cid = t.Cid subject.Cnr = t.Cnr subject.Subjectid = v.Subjectid subject.Pos = pos subject.Surveysheetid = t.Surveysheetid subject.Subjecttext = v.Subjecttext subject.Subjectpicture = v.Subjectpicture subject.Subjectvideo = v.Subjectvideo subject.Subjecttype = v.Subjecttype subject.SubjectCategoryid = v.SubjectCategoryid subject.Condition = v.Condition subject.Level = v.Level subject.Fsubjectid = v.Fsubjectid subject.Lastmodifyby = t.Lastmodifyby subject.Createtime = t.Createtime subject.Lastmodifytime = t.Lastmodifytime _, err = session.Table("c_surveysheet_subjectlst").Insert(subject) if err != nil { glog.InfoExt("问题调研", "添加问题 err is :", err) session.Rollback() return err } //查询答题 datalist := make([]SubjectOptionlst, 0) err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, v.Subjectid).Find(&datalist) //构造数组 sheets := make([]CSurveysheetOptionlst, 0) for _, vv := range datalist { sheet := CSurveysheetOptionlst{} sheet.Cid = t.Cid sheet.Cnr = t.Cnr sheet.Subjectid = vv.Subjectid sheet.Surveysheetid = t.Surveysheetid sheet.Optionid = vv.Optionid sheet.Optiontext = vv.Optiontext sheet.Optionpicture = vv.Optionpicture sheet.Optionvideo = vv.Optionvideo sheet.Optionvalue = vv.Optionvalue sheet.Optionfactor = vv.Optionfactor sheet.Optionvideo = t.Lastmodifyby sheet.Optiontype = vv.Optiontype sheet.Optioninput = vv.Optioninput sheet.Createtime = t.Createtime sheet.Lastmodifytime = t.Lastmodifytime sheets = append(sheets, sheet) } //添加 _, err = session.Table("c_surveysheet_optionlst").Insert(&sheets) if err != nil { glog.InfoExt("问题调研", "添加 err is :", err) session.Rollback() return err } //查询是否有子题目 sub := new(Subject) ok, err := engine.Table("subject").Where("cid = ? and fsubjectid = ?", t.Cid, v.Subjectid).Get(sub) if err != nil { session.Rollback() return err } if ok { //题目排序 +1 pos += 1 subj := new(CSurveysheetSubjectlst) subj.Cid = t.Cid subj.Cnr = t.Cnr subj.Subjectid = sub.Subjectid subj.Pos = pos subj.Surveysheetid = t.Surveysheetid subj.Level = 1 subj.Fsubjectid = v.Subjectid subj.Condition = sub.Condition subj.Subjecttext = sub.Subjecttext subj.Subjectpicture = sub.Subjectpicture subj.Subjectvideo = sub.Subjectvideo subj.Subjecttype = sub.Subjecttype subj.SubjectCategoryid = sub.SubjectCategoryid subj.Lastmodifyby = t.Lastmodifyby subj.Createtime = t.Createtime subj.Lastmodifytime = t.Lastmodifytime _, err = session.Table("c_surveysheet_subjectlst").Insert(subj) if err != nil { glog.InfoExt("问题调研", "添加问题 err is :", err) session.Rollback() return err } //查询答题 sdatalist := make([]SubjectOptionlst, 0) err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, sub.Subjectid).Find(&sdatalist) //构造数组 sonsheets := make([]CSurveysheetOptionlst, 0) for _, vv := range sdatalist { sonsheet := CSurveysheetOptionlst{} sonsheet.Cid = t.Cid sonsheet.Cnr = t.Cnr sonsheet.Subjectid = vv.Subjectid sonsheet.Surveysheetid = t.Surveysheetid sonsheet.Optionid = vv.Optionid sonsheet.Optiontext = vv.Optiontext sonsheet.Optionpicture = vv.Optionpicture sonsheet.Optionvideo = vv.Optionvideo sonsheet.Optionvalue = vv.Optionvalue sonsheet.Optionfactor = vv.Optionfactor sonsheet.Optionvideo = t.Lastmodifyby sonsheet.Optiontype = vv.Optiontype sonsheet.Optioninput = vv.Optioninput sonsheet.Createtime = t.Createtime sonsheet.Lastmodifytime = t.Lastmodifytime sonsheets = append(sonsheets, sonsheet) } //添加 _, err = session.Table("c_surveysheet_optionlst").Insert(&sonsheets) if err != nil { glog.InfoExt("问题调研", "添加 err is :", err) session.Rollback() return err } } } err = session.Commit() if err != nil { return err } return nil } //查卷子 func (t *CSurveysheet) SelectOne(level int) (CSurveysheet, error) { e := db.MasterEngine() var data CSurveysheet _, err := e.ID(core.PK{t.Cid, t.Cnr, t.Surveysheetid}).Get(&data) if err != nil { return data, err } datalist := make([]CSurveysheetSubjectlst, 0) if level > 0 { err = e.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr = ? and surveysheetid = ? and level != 1", t.Cid, t.Cnr, t.Surveysheetid).Asc("subjecttype").Find(&datalist) } else { err = e.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr = ? and surveysheetid = ?", t.Cid, t.Cnr, t.Surveysheetid).Asc("subjecttype").Find(&datalist) } if err != nil { return data, err } for k, v := range datalist { list := make([]CSurveysheetOptionlst, 0) err = e.Table("c_surveysheet_optionlst").Where("cid = ? and cnr = ? and surveysheetid = ? and subjectid = ?", t.Cid, t.Cnr, t.Surveysheetid, v.Subjectid).Find(&list) if err != nil { return data, err } datalist[k].Valst = list } data.Valst = datalist return data, nil } //分页 func (t *CSurveysheet) GetPage(pageSize int, pageIndex int) ([]CSurveysheet, int, error) { data := make([]CSurveysheet, 0) e := db.MasterEngine() query := e.Table("c_surveysheet").Where("cid = ? ", t.Cid) table := e.Table("c_surveysheet").Where("cid = ? ", t.Cid) if !utils.ValueIsEmpty(t.Descr) { Subjecttext := "%" + t.Descr + "%" query = query.And("descr like ?", Subjecttext) table = table.And("descr like ?", Subjecttext) } if t.Status > 0 { query = query.And("status = ?", t.Status) table = table.And("status = ?", t.Status) } Offset := (pageIndex - 1) * pageSize err := query.Limit(pageSize, Offset).Desc("createtime").Find(&data) pcount := new(CSurveysheet) count, err := table.Count(pcount) if err != nil { return data, 0, err } return data, int(count), nil } //查询调研问卷 func (t *CSurveysheet) SelectArr() (data []CSurveysheet, err error) { e := db.MasterEngine() err = e.Table("c_surveysheet").Where("cid = ?", t.Cid).Find(&data) if err != nil { return data, err } return data, nil }