quality_dao.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. /*
  2. * @description: 安全巡检数据库操作相关
  3. * @Author: LanJianRong
  4. * @Date: 2020-11-20
  5. * @FilePath: \construction_management\dao\quality_dao.go
  6. */
  7. package dao
  8. import (
  9. "errors"
  10. "fmt"
  11. "time"
  12. "github.com/go-xorm/xorm"
  13. "go.mod/models"
  14. "go.mod/web/viewmodels"
  15. )
  16. //数据库操作引擎
  17. type QualityDao struct {
  18. engine *xorm.Engine
  19. }
  20. //获得一个DAO对象
  21. func NewQualityDao(engine *xorm.Engine) *QualityDao {
  22. return &QualityDao{
  23. engine: engine,
  24. }
  25. }
  26. func (d *QualityDao) GetInIdJoinAccount(ids []int) []viewmodels.QualityList {
  27. datalist := make([]viewmodels.QualityList, 0)
  28. err := d.engine.
  29. Table("`cm_quality` as cs").
  30. Select("cs.id, cs.`create_time`, cs.`inspection_detail`, cs.`inspection`,cs.code, cs.status, pa.`name` as `audit_name`, pa.`position`,cs.`bidsection_id`").
  31. In("cs.id", ids).
  32. // Where("cs.id in ( "+ids+" ) ").
  33. Join("left", "cm_project_account as pa", "pa.id = cs.uid").
  34. Desc("id").
  35. Find(&datalist)
  36. if err != nil {
  37. return datalist
  38. } else {
  39. return datalist
  40. }
  41. // datalist := make([]models.CmQuality, 0)
  42. // err := d.engine.
  43. // Where("id in ( " + ids + " ) ").
  44. // Desc("id").
  45. // Find(&datalist)
  46. // if err != nil {
  47. // return datalist
  48. // } else {
  49. // return datalist
  50. // }
  51. }
  52. func (d *QualityDao) FindById(id int) *models.CmQuality {
  53. data := &models.CmQuality{Id: id}
  54. ok, err := d.engine.Get(data)
  55. if ok && err == nil {
  56. return data
  57. } else {
  58. data.Id = 0
  59. return data
  60. }
  61. }
  62. // id获得数据
  63. func (d *QualityDao) GetListByBid(id int, pageNo int, pageSize int) ([]models.CmQuality, int64) {
  64. dataList := make([]models.CmQuality, 0)
  65. start := (pageNo - 1) * pageSize
  66. total, err := d.engine.
  67. Where("bidsection_id=?", id).
  68. Asc("id").
  69. Limit(pageSize, start).
  70. FindAndCount(&dataList)
  71. if err != nil {
  72. return dataList, 0
  73. }
  74. return dataList, total
  75. }
  76. // 插入单条记录
  77. func (d *QualityDao) InsertRecord(data models.CmQuality) (bool, error) {
  78. affected, err := d.engine.InsertOne(data)
  79. return affected > 0, err
  80. }
  81. // 删除记录
  82. func (d *QualityDao) DeleteRecord(id int) error {
  83. session := d.engine.NewSession()
  84. defer session.Close()
  85. err := session.Begin()
  86. if err != nil {
  87. session.Rollback()
  88. return err
  89. }
  90. quality := &models.CmQuality{Id: id}
  91. _, err = session.Get(quality)
  92. if err != nil {
  93. session.Rollback()
  94. return err
  95. }
  96. bidsectionId := quality.BidsectionId
  97. _, err = session.ID(id).Delete(quality)
  98. if err != nil {
  99. session.Rollback()
  100. return err
  101. }
  102. // 计算当前安全巡检总数
  103. _, err = session.Exec("update `cm_tree` set `quality_total` = if(`quality_total` >= 1, `quality_total` - 1, 0), `quality_rectification` = if(`quality_rectification` >= 1, `quality_rectification` - 1, 0) where `bidsection_id` = ?", bidsectionId)
  104. if err != nil {
  105. session.Rollback()
  106. return err
  107. }
  108. err = session.Commit()
  109. return err
  110. }
  111. // 根据code获取记录
  112. func (d *QualityDao) FindByCode(code string) bool {
  113. data := &models.CmQuality{Code: code}
  114. has, _ := d.engine.Get(data)
  115. return has
  116. }
  117. // 筛选出应用了当前规则的条数
  118. func (d *QualityDao) CountRuleCode(bid int) (int64, error) {
  119. data := &models.CmQuality{}
  120. total, err := d.engine.Where("`bidsection_id` = ?", bid).Count(data)
  121. if err != nil {
  122. total = 0
  123. }
  124. return total, err
  125. }
  126. // 更改status
  127. func (d *QualityDao) ChangeStatus(id int, status int, inspection string, inspectionDetail string, demand string, createTime time.Time) error {
  128. data := &models.CmQuality{Status: status, Inspection: inspection, InspectionDetail: inspectionDetail, Demand: demand, CreateTime: createTime}
  129. _, err := d.engine.ID(id).Cols("status", " inspection", "inspection_detail", "demand", "create_time").Update(data)
  130. return err
  131. }
  132. // 获得某状态下的安全
  133. func (d *QualityDao) GetStatus(bidsectionId int, status int) []models.CmQuality {
  134. datalist := make([]models.CmQuality, 0)
  135. _ = d.engine.
  136. Where("bidsection_id = ? and status=? ", bidsectionId, status).
  137. Desc("id").
  138. Find(&datalist)
  139. return datalist
  140. }
  141. // 获得某年份下的安全
  142. func (d *QualityDao) GetTypeYear(bidsectionId int, year int) []viewmodels.QualitySurveyList {
  143. startYear := fmt.Sprintf("%d-01-01:00.00.00", year)
  144. endYear := fmt.Sprintf("%d-12-31:23.59.59", year)
  145. datalist := make([]viewmodels.QualitySurveyList, 0)
  146. _ = d.engine.Table("`cm_quality` as cs").
  147. // Select("cs.data_id as id, cs.`update_time`, s.`inspection_detail`, cs.status, pa.`name` as `audit_name`").
  148. // Where("cs.bidsection_id = ? and status=1 and progress=1 and data_type=2 and cs.update_time>='"+startYear+"' and cs.update_time<='"+endYear+"' ", bidsectionId).
  149. // Join("left", "cm_quality as s", "s.id = cs.data_id").
  150. // Join("left", "cm_project_account as pa", "pa.id = cs.uid").
  151. // , s.`update_time` , pa.`name` as `audit_name`
  152. Select("cs.id , cs.`create_time`, cs.`inspection_detail`, cs.status").
  153. Where("cs.bidsection_id = ? and cs.create_time>='"+startYear+"' and cs.create_time<='"+endYear+"' ", bidsectionId).
  154. // Join("left", "cm_approver as s", "cs.id = s.data_id and s.data_id=2").
  155. // Join("left", "cm_project_account as pa", "pa.id = s.audit_id").
  156. Desc("id").
  157. Find(&datalist)
  158. // _ = d.engine.
  159. // Where("bidsection_id = ? and create_time>='"+startYear+"' and create_time<='"+endYear+"' ", bidsectionId).
  160. // Desc("id").
  161. // Find(&datalist)
  162. return datalist
  163. }
  164. // 获得某状态下的安全
  165. func (d *QualityDao) GetStatusByProjectAndAccount(projectId int, projectAccountId int, status int) []models.CmQuality {
  166. datalist := make([]models.CmQuality, 0)
  167. _ = d.engine.
  168. Where("project_id = ? and audit_id= ? and status=? ", projectId, projectAccountId, status).
  169. Desc("id").
  170. Find(&datalist)
  171. return datalist
  172. }
  173. // 事务-创建新的安全巡检记录
  174. func (d *QualityDao) CreateQuality(data models.CmQuality) error {
  175. session := d.engine.NewSession()
  176. defer session.Close()
  177. err := session.Begin()
  178. if err != nil {
  179. session.Rollback()
  180. return err
  181. }
  182. quality := models.CmQuality{}
  183. has, err := session.Where("code = ? and bidsection_id = ?", data.Code, data.BidsectionId).Get(&quality)
  184. // err或者code存在都回滚
  185. if err != nil {
  186. session.Rollback()
  187. return err
  188. }
  189. if has == true {
  190. session.Rollback()
  191. return errors.New("该编号已存在!")
  192. }
  193. _, err = session.Insert(data)
  194. if err != nil {
  195. session.Rollback()
  196. return err
  197. }
  198. // 更新cm_tree中的quality_total、quality_rectification
  199. _, err = session.Exec("update `cm_tree` set `quality_total` = `quality_total` + 1 , `quality_rectification` = `quality_rectification` + 1 where `bidsection_id` = ?", data.BidsectionId)
  200. if err != nil {
  201. session.Rollback()
  202. return err
  203. }
  204. err = session.Commit()
  205. if err != nil {
  206. return err
  207. }
  208. return nil
  209. }