沈阳玫苑物业管理后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

469 lines
15 KiB

  1. package models
  2. import (
  3. "lapp_-wy/db"
  4. "lapp_-wy/utils"
  5. "lapp_-wy/web/middleware/glog"
  6. "xorm.io/core"
  7. )
  8. type CSurveysheet struct {
  9. Cid int `json:"cid" xorm:"not null pk comment('公司ID') INT(11)"`
  10. Cnr int `json:"cnr" xorm:"not null pk comment('小区编号') INT(11)"`
  11. Surveysheetid string `json:"surveysheetid" xorm:"not null pk comment('调研问卷流水号') VARCHAR(40)"`
  12. Descr string `json:"descr" xorm:"default 'NULL' comment('描述') VARCHAR(255)"`
  13. Surveyyear string `json:"surveyyear" xorm:"not null comment('调研年份') VARCHAR(20)"`
  14. Surveydate string `json:"surveydate" xorm:"not null comment('调研日期') DATE"`
  15. Surveysamplecount int `json:"surveysamplecount" xorm:"not null comment('调研样例(问卷数)') INT(11)"`
  16. Surveyfinishedcount int `json:"surveyfinishedcount" xorm:"default NULL comment('调研已完成数') INT(11)"`
  17. Status int `json:"status" xorm:"default NULL comment('该调研问卷状态') INT(11)"`
  18. Surveyperson string `json:"surveyperson" xorm:"default 'NULL' comment('调研人') VARCHAR(40)"`
  19. Createtime string `json:"createtime" xorm:"default 'NULL' comment('创建时间') VARCHAR(40)"`
  20. Lastmodifytime string `json:"lastmodifytime" xorm:"default 'NULL' comment('最近更新时间') VARCHAR(40)"`
  21. Lastmodifyby string `json:"lastmodifyby" xorm:"default 'NULL' comment('修改人员') VARCHAR(40)"`
  22. Valst []CSurveysheetSubjectlst `json:"valst" xorm:"-"`
  23. }
  24. type Cvalst struct {
  25. SubjectType string `json:"subject_type"`
  26. CSurveysheetSubjectlst []CSurveysheetSubjectlst `json:"c_surveysheet_subjectlst"`
  27. }
  28. func (t *CSurveysheet) TableName() string {
  29. return "c_surveysheet"
  30. }
  31. // 清除string字段的右侧空格
  32. func (t *CSurveysheet) Clipped() {
  33. utils.TrimStruct(t, *t)
  34. }
  35. //增
  36. func (t *CSurveysheet) Add() error {
  37. engine := db.MasterEngine()
  38. session := engine.NewSession()
  39. defer session.Close()
  40. // add Begin() before any action
  41. err := session.Begin()
  42. if err != nil {
  43. return err
  44. }
  45. snr := new(Snrtab)
  46. snr.Cid = t.Cid
  47. id, err := snr.GetNextSnr("Sheetid")
  48. if err != nil {
  49. session.Rollback()
  50. return err
  51. }
  52. //添加题目
  53. Survey := new(CSurveysheet)
  54. Survey.Cid = t.Cid
  55. Survey.Cnr = t.Cnr
  56. Survey.Surveysheetid = id
  57. Survey.Descr = t.Descr
  58. Survey.Status = t.Status
  59. Survey.Surveyfinishedcount = t.Surveyfinishedcount
  60. Survey.Surveysamplecount = t.Surveysamplecount
  61. Survey.Surveydate = t.Surveydate
  62. Survey.Surveyyear = t.Surveyyear
  63. Survey.Surveyperson = t.Surveyperson
  64. Survey.Lastmodifyby = t.Lastmodifyby
  65. Survey.Createtime = t.Createtime
  66. Survey.Lastmodifytime = t.Lastmodifytime
  67. _, err = session.Table("c_surveysheet").Insert(Survey)
  68. if err != nil {
  69. glog.InfoExt("问题调研", "添加题目 err is :", err)
  70. session.Rollback()
  71. return err
  72. }
  73. pos := 0
  74. //添加问题
  75. for _, v := range t.Valst {
  76. pos += 1
  77. subject := new(CSurveysheetSubjectlst)
  78. subject.Cid = t.Cid
  79. subject.Cnr = t.Cnr
  80. subject.Subjectid = v.Subjectid
  81. subject.Pos = pos
  82. subject.Surveysheetid = id
  83. subject.Subjecttext = v.Subjecttext
  84. subject.Subjectpicture = v.Subjectpicture
  85. subject.Subjectvideo = v.Subjectvideo
  86. subject.Subjecttype = v.Subjecttype
  87. subject.SubjectCategoryid = v.SubjectCategoryid
  88. subject.Condition = v.Condition
  89. subject.Level = v.Level
  90. subject.Fsubjectid = v.Fsubjectid
  91. subject.Lastmodifyby = t.Lastmodifyby
  92. subject.Createtime = t.Createtime
  93. subject.Lastmodifytime = t.Lastmodifytime
  94. _, err = session.Table("c_surveysheet_subjectlst").Insert(subject)
  95. if err != nil {
  96. glog.InfoExt("问题调研", "添加问题 err is :", err)
  97. session.Rollback()
  98. return err
  99. }
  100. //查询答题
  101. datalist := make([]SubjectOptionlst, 0)
  102. err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, v.Subjectid).Find(&datalist)
  103. //构造数组
  104. sheets := make([]CSurveysheetOptionlst, 0)
  105. for _, vv := range datalist {
  106. sheet := CSurveysheetOptionlst{}
  107. sheet.Cid = t.Cid
  108. sheet.Cnr = t.Cnr
  109. sheet.Subjectid = vv.Subjectid
  110. sheet.Surveysheetid = id
  111. sheet.Optionid = vv.Optionid
  112. sheet.Optiontext = vv.Optiontext
  113. sheet.Optionpicture = vv.Optionpicture
  114. sheet.Optionvideo = vv.Optionvideo
  115. sheet.Optionvalue = vv.Optionvalue
  116. sheet.Optionfactor = vv.Optionfactor
  117. sheet.Optionvideo = t.Lastmodifyby
  118. sheet.Optiontype = vv.Optiontype
  119. sheet.Optioninput = vv.Optioninput
  120. sheet.Createtime = t.Createtime
  121. sheet.Lastmodifytime = t.Lastmodifytime
  122. sheets = append(sheets, sheet)
  123. }
  124. //添加
  125. _, err = session.Table("c_surveysheet_optionlst").Insert(&sheets)
  126. if err != nil {
  127. glog.InfoExt("问题调研", "添加 err is :", err)
  128. session.Rollback()
  129. return err
  130. }
  131. //查询是否有子题目
  132. sub := new(Subject)
  133. ok, err := engine.Table("subject").Where("cid = ? and fsubjectid = ?", t.Cid, v.Subjectid).Get(sub)
  134. if err != nil {
  135. session.Rollback()
  136. return err
  137. }
  138. if ok {
  139. //题目排序 +1
  140. pos += 1
  141. subj := new(CSurveysheetSubjectlst)
  142. subj.Cid = t.Cid
  143. subj.Cnr = t.Cnr
  144. subj.Subjectid = sub.Subjectid
  145. subj.Pos = pos
  146. subj.Surveysheetid = id
  147. subj.Level = 1
  148. subj.Fsubjectid = v.Subjectid
  149. subj.Condition = sub.Condition
  150. subj.Subjecttext = sub.Subjecttext
  151. subj.Subjectpicture = sub.Subjectpicture
  152. subj.Subjectvideo = sub.Subjectvideo
  153. subj.Subjecttype = sub.Subjecttype
  154. subj.SubjectCategoryid = sub.SubjectCategoryid
  155. subj.Lastmodifyby = t.Lastmodifyby
  156. subj.Createtime = t.Createtime
  157. subj.Lastmodifytime = t.Lastmodifytime
  158. _, err = session.Table("c_surveysheet_subjectlst").Insert(subj)
  159. if err != nil {
  160. glog.InfoExt("问题调研", "添加问题 err is :", err)
  161. session.Rollback()
  162. return err
  163. }
  164. //查询答题
  165. sdatalist := make([]SubjectOptionlst, 0)
  166. err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, sub.Subjectid).Find(&sdatalist)
  167. //构造数组
  168. sonsheets := make([]CSurveysheetOptionlst, 0)
  169. for _, vv := range sdatalist {
  170. sonsheet := CSurveysheetOptionlst{}
  171. sonsheet.Cid = t.Cid
  172. sonsheet.Cnr = t.Cnr
  173. sonsheet.Subjectid = vv.Subjectid
  174. sonsheet.Surveysheetid = id
  175. sonsheet.Optionid = vv.Optionid
  176. sonsheet.Optiontext = vv.Optiontext
  177. sonsheet.Optionpicture = vv.Optionpicture
  178. sonsheet.Optionvideo = vv.Optionvideo
  179. sonsheet.Optionvalue = vv.Optionvalue
  180. sonsheet.Optionfactor = vv.Optionfactor
  181. sonsheet.Optionvideo = t.Lastmodifyby
  182. sonsheet.Optiontype = vv.Optiontype
  183. sonsheet.Optioninput = vv.Optioninput
  184. sonsheet.Createtime = t.Createtime
  185. sonsheet.Lastmodifytime = t.Lastmodifytime
  186. sonsheets = append(sonsheets, sonsheet)
  187. }
  188. //添加
  189. _, err = session.Table("c_surveysheet_optionlst").Insert(&sonsheets)
  190. if err != nil {
  191. glog.InfoExt("问题调研", "添加 err is :", err)
  192. session.Rollback()
  193. return err
  194. }
  195. }
  196. }
  197. err = session.Commit()
  198. if err != nil {
  199. return err
  200. }
  201. return nil
  202. }
  203. //删
  204. func (t *CSurveysheet) Del() error {
  205. engine := db.MasterEngine()
  206. session := engine.NewSession()
  207. defer session.Close()
  208. // add Begin() before any action
  209. err := session.Begin()
  210. if err != nil {
  211. return err
  212. }
  213. //删除卷子
  214. _, err = session.ID(core.PK{t.Cid, t.Cnr, t.Surveysheetid}).Delete(&CSurveysheet{})
  215. if err != nil {
  216. session.Rollback()
  217. return err
  218. }
  219. //删除题目
  220. _, err = session.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr =? and surveysheetid = ?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&CSurveysheetSubjectlst{})
  221. if err != nil {
  222. session.Rollback()
  223. return err
  224. }
  225. //删除对应的题目选项
  226. _, err = session.Table("c_surveysheet_optionlst").Where("cid = ? and cnr = ? and surveysheetid =?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&SubjectOptionlst{})
  227. if err != nil {
  228. session.Rollback()
  229. return err
  230. }
  231. err = session.Commit()
  232. if err != nil {
  233. return err
  234. }
  235. return nil
  236. }
  237. //改
  238. func (t *CSurveysheet) Update() error {
  239. engine := db.MasterEngine()
  240. session := engine.NewSession()
  241. defer session.Close()
  242. // add Begin() before any action
  243. err := session.Begin()
  244. if err != nil {
  245. return err
  246. }
  247. _, err = session.Table("c_surveysheet").ID(core.PK{t.Cid, t.Cnr, t.Surveysheetid}).Update(t)
  248. if err != nil {
  249. return err
  250. }
  251. //删除题目
  252. _, err = session.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr =? and surveysheetid = ?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&CSurveysheetSubjectlst{})
  253. if err != nil {
  254. session.Rollback()
  255. return err
  256. }
  257. //删除对应的题目选项
  258. _, err = session.Table("c_surveysheet_optionlst").Where("cid = ? and cnr = ? and surveysheetid =?", t.Cid, t.Cnr, t.Surveysheetid).Delete(&SubjectOptionlst{})
  259. if err != nil {
  260. session.Rollback()
  261. return err
  262. }
  263. pos := 0
  264. //添加问题
  265. for _, v := range t.Valst {
  266. pos += 1
  267. subject := new(CSurveysheetSubjectlst)
  268. subject.Cid = t.Cid
  269. subject.Cnr = t.Cnr
  270. subject.Subjectid = v.Subjectid
  271. subject.Pos = pos
  272. subject.Surveysheetid = t.Surveysheetid
  273. subject.Subjecttext = v.Subjecttext
  274. subject.Subjectpicture = v.Subjectpicture
  275. subject.Subjectvideo = v.Subjectvideo
  276. subject.Subjecttype = v.Subjecttype
  277. subject.SubjectCategoryid = v.SubjectCategoryid
  278. subject.Condition = v.Condition
  279. subject.Level = v.Level
  280. subject.Fsubjectid = v.Fsubjectid
  281. subject.Lastmodifyby = t.Lastmodifyby
  282. subject.Createtime = t.Createtime
  283. subject.Lastmodifytime = t.Lastmodifytime
  284. _, err = session.Table("c_surveysheet_subjectlst").Insert(subject)
  285. if err != nil {
  286. glog.InfoExt("问题调研", "添加问题 err is :", err)
  287. session.Rollback()
  288. return err
  289. }
  290. //查询答题
  291. datalist := make([]SubjectOptionlst, 0)
  292. err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, v.Subjectid).Find(&datalist)
  293. //构造数组
  294. sheets := make([]CSurveysheetOptionlst, 0)
  295. for _, vv := range datalist {
  296. sheet := CSurveysheetOptionlst{}
  297. sheet.Cid = t.Cid
  298. sheet.Cnr = t.Cnr
  299. sheet.Subjectid = vv.Subjectid
  300. sheet.Surveysheetid = t.Surveysheetid
  301. sheet.Optionid = vv.Optionid
  302. sheet.Optiontext = vv.Optiontext
  303. sheet.Optionpicture = vv.Optionpicture
  304. sheet.Optionvideo = vv.Optionvideo
  305. sheet.Optionvalue = vv.Optionvalue
  306. sheet.Optionfactor = vv.Optionfactor
  307. sheet.Optionvideo = t.Lastmodifyby
  308. sheet.Optiontype = vv.Optiontype
  309. sheet.Optioninput = vv.Optioninput
  310. sheet.Createtime = t.Createtime
  311. sheet.Lastmodifytime = t.Lastmodifytime
  312. sheets = append(sheets, sheet)
  313. }
  314. //添加
  315. _, err = session.Table("c_surveysheet_optionlst").Insert(&sheets)
  316. if err != nil {
  317. glog.InfoExt("问题调研", "添加 err is :", err)
  318. session.Rollback()
  319. return err
  320. }
  321. //查询是否有子题目
  322. sub := new(Subject)
  323. ok, err := engine.Table("subject").Where("cid = ? and fsubjectid = ?", t.Cid, v.Subjectid).Get(sub)
  324. if err != nil {
  325. session.Rollback()
  326. return err
  327. }
  328. if ok {
  329. //题目排序 +1
  330. pos += 1
  331. subj := new(CSurveysheetSubjectlst)
  332. subj.Cid = t.Cid
  333. subj.Cnr = t.Cnr
  334. subj.Subjectid = sub.Subjectid
  335. subj.Pos = pos
  336. subj.Surveysheetid = t.Surveysheetid
  337. subj.Level = 1
  338. subj.Fsubjectid = v.Subjectid
  339. subj.Condition = sub.Condition
  340. subj.Subjecttext = sub.Subjecttext
  341. subj.Subjectpicture = sub.Subjectpicture
  342. subj.Subjectvideo = sub.Subjectvideo
  343. subj.Subjecttype = sub.Subjecttype
  344. subj.SubjectCategoryid = sub.SubjectCategoryid
  345. subj.Lastmodifyby = t.Lastmodifyby
  346. subj.Createtime = t.Createtime
  347. subj.Lastmodifytime = t.Lastmodifytime
  348. _, err = session.Table("c_surveysheet_subjectlst").Insert(subj)
  349. if err != nil {
  350. glog.InfoExt("问题调研", "添加问题 err is :", err)
  351. session.Rollback()
  352. return err
  353. }
  354. //查询答题
  355. sdatalist := make([]SubjectOptionlst, 0)
  356. err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, sub.Subjectid).Find(&sdatalist)
  357. //构造数组
  358. sonsheets := make([]CSurveysheetOptionlst, 0)
  359. for _, vv := range sdatalist {
  360. sonsheet := CSurveysheetOptionlst{}
  361. sonsheet.Cid = t.Cid
  362. sonsheet.Cnr = t.Cnr
  363. sonsheet.Subjectid = vv.Subjectid
  364. sonsheet.Surveysheetid = t.Surveysheetid
  365. sonsheet.Optionid = vv.Optionid
  366. sonsheet.Optiontext = vv.Optiontext
  367. sonsheet.Optionpicture = vv.Optionpicture
  368. sonsheet.Optionvideo = vv.Optionvideo
  369. sonsheet.Optionvalue = vv.Optionvalue
  370. sonsheet.Optionfactor = vv.Optionfactor
  371. sonsheet.Optionvideo = t.Lastmodifyby
  372. sonsheet.Optiontype = vv.Optiontype
  373. sonsheet.Optioninput = vv.Optioninput
  374. sonsheet.Createtime = t.Createtime
  375. sonsheet.Lastmodifytime = t.Lastmodifytime
  376. sonsheets = append(sonsheets, sonsheet)
  377. }
  378. //添加
  379. _, err = session.Table("c_surveysheet_optionlst").Insert(&sonsheets)
  380. if err != nil {
  381. glog.InfoExt("问题调研", "添加 err is :", err)
  382. session.Rollback()
  383. return err
  384. }
  385. }
  386. }
  387. err = session.Commit()
  388. if err != nil {
  389. return err
  390. }
  391. return nil
  392. }
  393. //查卷子
  394. func (t *CSurveysheet) SelectOne(level int) (CSurveysheet, error) {
  395. e := db.MasterEngine()
  396. var data CSurveysheet
  397. _, err := e.ID(core.PK{t.Cid, t.Cnr, t.Surveysheetid}).Get(&data)
  398. if err != nil {
  399. return data, err
  400. }
  401. datalist := make([]CSurveysheetSubjectlst, 0)
  402. if level > 0 {
  403. 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)
  404. } else {
  405. err = e.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr = ? and surveysheetid = ?", t.Cid, t.Cnr, t.Surveysheetid).Asc("subjecttype").Find(&datalist)
  406. }
  407. if err != nil {
  408. return data, err
  409. }
  410. for k, v := range datalist {
  411. list := make([]CSurveysheetOptionlst, 0)
  412. err = e.Table("c_surveysheet_optionlst").Where("cid = ? and cnr = ? and surveysheetid = ? and subjectid = ?", t.Cid, t.Cnr, t.Surveysheetid, v.Subjectid).Find(&list)
  413. if err != nil {
  414. return data, err
  415. }
  416. datalist[k].Valst = list
  417. }
  418. data.Valst = datalist
  419. return data, nil
  420. }
  421. //分页
  422. func (t *CSurveysheet) GetPage(pageSize int, pageIndex int) ([]CSurveysheet, int, error) {
  423. data := make([]CSurveysheet, 0)
  424. e := db.MasterEngine()
  425. query := e.Table("c_surveysheet").Where("cid = ? ", t.Cid)
  426. table := e.Table("c_surveysheet").Where("cid = ? ", t.Cid)
  427. if !utils.ValueIsEmpty(t.Descr) {
  428. Subjecttext := "%" + t.Descr + "%"
  429. query = query.And("descr like ?", Subjecttext)
  430. table = table.And("descr like ?", Subjecttext)
  431. }
  432. if t.Status > 0 {
  433. query = query.And("status = ?", t.Status)
  434. table = table.And("status = ?", t.Status)
  435. }
  436. Offset := (pageIndex - 1) * pageSize
  437. err := query.Limit(pageSize, Offset).Desc("createtime").Find(&data)
  438. pcount := new(CSurveysheet)
  439. count, err := table.Count(pcount)
  440. if err != nil {
  441. return data, 0, err
  442. }
  443. return data, int(count), nil
  444. }
  445. //查询调研问卷
  446. func (t *CSurveysheet) SelectArr() (data []CSurveysheet, err error) {
  447. e := db.MasterEngine()
  448. err = e.Table("c_surveysheet").Where("cid = ?", t.Cid).Find(&data)
  449. if err != nil {
  450. return data, err
  451. }
  452. return data, nil
  453. }