quality_service.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "strconv"
  7. "time"
  8. "github.com/kataras/iris/v12"
  9. "go.mod/comm"
  10. "go.mod/conf"
  11. "go.mod/dao"
  12. "go.mod/datasource"
  13. "go.mod/models"
  14. "go.mod/web/viewmodels"
  15. )
  16. type QualityService interface {
  17. Get(id int, pid int, pageNo int, pageSize int) ([]viewmodels.QualityList, int64)
  18. Post(data models.CmQuality) error
  19. Del(id int) error
  20. GetDetail(id int, pid int) viewmodels.QualityDetail
  21. GetSurvey(projectId int, bidsectionId int) map[string]interface{}
  22. ValidRule(ctx iris.Context) (viewmodels.Quality, error)
  23. }
  24. // //返回service操作类
  25. type qualityService struct {
  26. daoQuality *dao.QualityDao
  27. daoQualityAudit *dao.QualityAuditDao
  28. daoProjectAccount *dao.ProjectAccountDao
  29. daoAnnex *dao.AnnexDao
  30. daoRule *dao.RuleDao
  31. daoApprover *dao.ApproverDao
  32. validDetail string
  33. }
  34. //创建项目用户service
  35. func NewQualityService() QualityService {
  36. return &qualityService{
  37. validDetail: "/api/quality/detail",
  38. daoQuality: dao.NewQualityDao(datasource.InstanceDbMaster()),
  39. daoAnnex: dao.NewAnnexDao(datasource.InstanceDbMaster()),
  40. daoQualityAudit: dao.NewQualityAuditDao(datasource.InstanceDbMaster()),
  41. daoProjectAccount: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  42. daoApprover: dao.NewApproverDao(datasource.InstanceDbMaster()),
  43. }
  44. }
  45. func (s *qualityService) Get(id int, pid int, pageNo int, pageSize int) ([]viewmodels.QualityList, int64) {
  46. datalist, total := s.daoQuality.GetListByBid(id, pageNo, pageSize)
  47. qualityList := make([]viewmodels.QualityList, 0)
  48. for _, item := range datalist {
  49. qualityVM := viewmodels.QualityList{}
  50. qualityVM.Code = item.Code
  51. account := s.daoProjectAccount.Get(item.Uid, pid)
  52. qualityVM.AuditName = account.Name
  53. qualityVM.CreateTime = item.CreateTime.Format(conf.SysTimeform)
  54. qualityVM.Demand = item.Demand
  55. id, _ := comm.AesEncrypt(strconv.Itoa(item.Id), conf.SignSecret)
  56. qualityVM.Id = id
  57. qualityVM.Inspection = item.Inspection
  58. qualityVM.InspectionDetail = item.InspectionDetail
  59. qualityVM.Position = item.Position
  60. qualityVM.Status = item.Status
  61. counts, _ := s.daoAnnex.GetCount(3, item.Id)
  62. qualityVM.FileCounts = counts
  63. qualityList = append(qualityList, qualityVM)
  64. }
  65. return qualityList, total
  66. }
  67. // post请求,插入单条数据
  68. func (s *qualityService) Post(data models.CmQuality) error {
  69. has := s.daoQuality.FindByCode(data.Code)
  70. if has {
  71. return errors.New("该编号已存在!")
  72. }
  73. Inserted, err := s.daoQuality.InsertRecord(data)
  74. if Inserted == true {
  75. return nil
  76. }
  77. return err
  78. }
  79. // delete请求,删除数据
  80. func (s *qualityService) Del(id int) error {
  81. Deleted, err := s.daoQuality.DeleteRecord(id)
  82. if Deleted == true {
  83. return nil
  84. }
  85. return err
  86. }
  87. // 详情页数据拼装
  88. func (s *qualityService) GetDetail(id int, pid int) viewmodels.QualityDetail {
  89. qualityData := s.daoQuality.FindById(id)
  90. qualityId, _ := comm.AesEncrypt(strconv.Itoa(qualityData.Id), conf.SignSecret)
  91. bid, _ := comm.AesEncrypt(strconv.Itoa(qualityData.BidsectionId), conf.SignSecret)
  92. uid, _ := comm.AesEncrypt(strconv.Itoa(qualityData.Uid), conf.SignSecret)
  93. data := viewmodels.QualityDetail{}
  94. data.Id = qualityId
  95. data.BidsectionId = bid
  96. data.Uid = uid
  97. data.Code = qualityData.Code
  98. data.Inspection = qualityData.Inspection
  99. data.InspectionDetail = qualityData.InspectionDetail
  100. data.Demand = qualityData.Demand
  101. account := s.daoProjectAccount.Get(qualityData.Uid, pid)
  102. data.AuditName = account.Name
  103. data.CreateTime = qualityData.CreateTime
  104. data.Times = qualityData.Times
  105. data.Status = qualityData.Status
  106. fileList, total := s.daoAnnex.GetList(3, qualityData.Id, 1, conf.PageSize)
  107. // 加密id
  108. fileArr := make([]viewmodels.AnnexListView, 0)
  109. for _, item := range fileList {
  110. fileListVM := viewmodels.AnnexListView{}
  111. fileId, _ := comm.AesEncrypt(item.Id, conf.SignSecret)
  112. fileListVM.Id = fileId
  113. uid, _ := comm.AesEncrypt(item.AccountId, conf.SignSecret)
  114. fileListVM.AccountId = uid
  115. fileListVM.AccountName = item.AccountName
  116. fileListVM.CreateTime = item.CreateTime
  117. fileListVM.FileName = item.FileName
  118. fileListVM.FilePath = item.FilePath
  119. fileArr = append(fileArr, fileListVM)
  120. }
  121. fileVM := viewmodels.FileStruct{}
  122. fileVM.FileList = fileArr
  123. fileVM.Total = total
  124. data.File = fileVM
  125. auditors := s.daoApprover.GetAuditorsWithOwner(qualityData.BidsectionId, int(1), qualityData.Id, account.Id)
  126. encryptAuditors := make([]viewmodels.Auditors, 0)
  127. for _, item := range auditors {
  128. auditorVM := viewmodels.Auditors{}
  129. if item.Id != "" {
  130. id, _ := comm.AesEncrypt(item.Id, conf.SignSecret)
  131. auditorVM.Id = id
  132. }
  133. auditId, _ := comm.AesEncrypt(item.AuditId, conf.SignSecret)
  134. auditorVM.AuditId = auditId
  135. auditorVM.Name = item.Name
  136. auditorVM.Position = item.Position
  137. auditorVM.Mobile = item.Mobile
  138. auditorVM.AuditOrder = item.AuditOrder
  139. auditorVM.AccountGroup = item.AccountGroup
  140. auditorVM.Progress = item.Progress
  141. auditorVM.Company = item.Company
  142. auditorVM.Status = item.Status
  143. encryptAuditors = append(encryptAuditors, auditorVM)
  144. }
  145. auditHistory := s.daoQualityAudit.GetAuditHistory(qualityData.Id, qualityData.Times)
  146. data.AuditHistory = auditHistory
  147. // 整改单
  148. rectifiedInfo, _ := s.daoQualityAudit.GetLastedOrder(qualityData.Id)
  149. data.RectifiedInfo = rectifiedInfo
  150. // 最新审批人信息
  151. latestAuditor := s.daoApprover.GetLastedAuditor(qualityData.BidsectionId, 1, qualityData.Id)
  152. data.LatestdAuditor = latestAuditor
  153. data.Auditors = encryptAuditors
  154. return data
  155. }
  156. // 安全概况
  157. func (s *qualityService) GetSurvey(projectId int, bidsectionId int) map[string]interface{} {
  158. // 1.获得安全巡检
  159. year := time.Now().Year()
  160. qualityList := s.daoQuality.GetTypeYear(bidsectionId, year)
  161. // 2.初始化
  162. rectifylist := make([]models.CmQuality, 0)
  163. rectifyTotal := 0
  164. approvalTotal := 0
  165. rectifyedTotal := 0
  166. // 3.当年数据初始化
  167. submitData := map[string]float64{
  168. fmt.Sprintf("%d-01", year): 0,
  169. fmt.Sprintf("%d-02", year): 0,
  170. fmt.Sprintf("%d-03", year): 0,
  171. fmt.Sprintf("%d-04", year): 0,
  172. fmt.Sprintf("%d-05", year): 0,
  173. fmt.Sprintf("%d-06", year): 0,
  174. fmt.Sprintf("%d-07", year): 0,
  175. fmt.Sprintf("%d-08", year): 0,
  176. fmt.Sprintf("%d-09", year): 0,
  177. fmt.Sprintf("%d-10", year): 0,
  178. fmt.Sprintf("%d-11", year): 0,
  179. fmt.Sprintf("%d-12", year): 0,
  180. }
  181. rectifyedData := submitData
  182. for _, item := range qualityList {
  183. if item.Status == 2 {
  184. rectifylist = append(rectifylist, item)
  185. rectifyTotal++
  186. }
  187. if item.Status == 1 {
  188. approvalTotal++
  189. }
  190. if item.Status == 4 {
  191. rectifyedTotal++
  192. }
  193. if item.Status == 0 {
  194. submitData[item.CreateTime.Format(conf.SysTimeformMonth)] = submitData[item.CreateTime.Format(conf.SysTimeformMonth)] + 1
  195. }
  196. if item.Status == 4 {
  197. rectifyedData[item.CreateTime.Format(conf.SysTimeformMonth)] = rectifyedData[item.CreateTime.Format(conf.SysTimeformMonth)] + 1
  198. }
  199. }
  200. // 整改占总数比例 - 完成整改/提交巡检
  201. surveryData := map[string]interface{}{
  202. "rectifylist": rectifylist,
  203. "rectifyTotal": rectifyTotal,
  204. "approvalTotal": approvalTotal,
  205. "rectifyedTotal": rectifyedTotal,
  206. "submitData": submitData,
  207. "rectifyedData": rectifyedData,
  208. }
  209. return surveryData
  210. }
  211. // 规则校验
  212. func (s *qualityService) ValidRule(ctx iris.Context) (viewmodels.Quality, error) {
  213. qualityVaild := viewmodels.Quality{}
  214. // fmt.Println("---------------------------safeVaild", safeVaild)
  215. if ctx.Method() == "GET" {
  216. err := ctx.ReadForm(&qualityVaild)
  217. if err != nil {
  218. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  219. return qualityVaild, err
  220. }
  221. if ctx.Path() == s.validDetail {
  222. // 一样要传id,所以用delete的方法判断
  223. err = qualityVaild.ValidateQualityDelete()
  224. } else {
  225. err = qualityVaild.ValidateQualityList()
  226. }
  227. return qualityVaild, err
  228. }
  229. if ctx.Method() == "POST" {
  230. err := ctx.ReadJSON(&qualityVaild)
  231. if err != nil {
  232. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  233. return qualityVaild, err
  234. }
  235. err = qualityVaild.ValidateQualityCreate()
  236. return qualityVaild, err
  237. // if ctx.Path() == s.validCreate {
  238. // }
  239. // if ctx.Path() == s.validFile {
  240. // err = safeVaild.ValidateFile()
  241. // return safeVaild, err
  242. // }
  243. }
  244. if ctx.Method() == "PUT" {
  245. err := ctx.ReadForm(&qualityVaild)
  246. if err != nil {
  247. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  248. return qualityVaild, err
  249. }
  250. err = qualityVaild.ValidateQualityDelete()
  251. return qualityVaild, err
  252. }
  253. return qualityVaild, nil
  254. }