project_account_dao.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. /*
  2. * @description:项目用户数据库操作
  3. * @Author: CP
  4. * @Date: 2020-08-31 15:57:04
  5. * @FilePath: \construction_management\dao\project_account_dao.go
  6. */
  7. package dao
  8. import (
  9. "errors"
  10. "log"
  11. "time"
  12. "github.com/go-xorm/xorm"
  13. "go.mod/models"
  14. "go.mod/web/viewmodels"
  15. )
  16. //数据库操作引擎
  17. type ProjectAccountDao struct {
  18. engine *xorm.Engine
  19. }
  20. //获得一个DAO对象
  21. func NewProjectAccountDao(engine *xorm.Engine) *ProjectAccountDao {
  22. return &ProjectAccountDao{
  23. engine: engine,
  24. }
  25. }
  26. //CmProjectAccount 设置的值获得数据-弃用
  27. // func (d *ProjectAccountDao) GetOne(data *models.CmProjectAccount) *models.CmProjectAccount {
  28. // //data := data
  29. // //Get取到值后,会自动赋值到data中
  30. // ok, err := d.engine.
  31. // Where("account = ?", data.Account).
  32. // Get(data)
  33. // if ok && err == nil {
  34. // return data
  35. // } else {
  36. // data.Id = 0
  37. // return data
  38. // }
  39. // }
  40. // 根据账号获得数据
  41. func (d *ProjectAccountDao) GetAccount(account string) *models.CmProjectAccount {
  42. data := &models.CmProjectAccount{}
  43. ok, err := d.engine.
  44. Where("account = ?", account).
  45. Get(data)
  46. if ok && err == nil {
  47. return data
  48. } else {
  49. data.Id = 0
  50. return data
  51. }
  52. }
  53. func (d *ProjectAccountDao) GetAccountByAuth(account string, projectId int) *models.CmProjectAccount {
  54. data := &models.CmProjectAccount{}
  55. ok, err := d.engine.
  56. Where("account = ? and project_id = ? and jl_auth = 1", account, projectId).
  57. Get(data)
  58. if ok && err == nil {
  59. return data
  60. } else {
  61. data.Id = 0
  62. return data
  63. }
  64. }
  65. func (d *ProjectAccountDao) GetAccountProjectId(account string, projectId int) *models.CmProjectAccount {
  66. data := &models.CmProjectAccount{}
  67. ok, err := d.engine.
  68. Where("account = ? and project_id = ?", account, projectId).
  69. Get(data)
  70. if ok && err == nil {
  71. return data
  72. } else {
  73. data.Id = 0
  74. return data
  75. }
  76. }
  77. func (d *ProjectAccountDao) GetAdmin(projectId int) *models.CmProjectAccount {
  78. data := &models.CmProjectAccount{}
  79. ok, err := d.engine.
  80. Where("is_admin = 1 and project_id = ?", projectId).
  81. Get(data)
  82. if ok && err == nil {
  83. return data
  84. } else {
  85. data.Id = 0
  86. return data
  87. }
  88. }
  89. //id获得数据
  90. func (d *ProjectAccountDao) Get(id int, projectId int) *models.CmProjectAccount {
  91. data := &models.CmProjectAccount{Id: id, ProjectId: projectId}
  92. ok, err := d.engine.Get(data)
  93. if ok && err == nil {
  94. return data
  95. } else {
  96. data.Id = 0
  97. return data
  98. }
  99. }
  100. // 获得项目下的账号信息
  101. func (d *ProjectAccountDao) GetAll(projectId int) []models.CmProjectAccount {
  102. datalist := make([]models.CmProjectAccount, 0)
  103. err := d.engine.
  104. Where("project_id = ?", projectId).
  105. Desc("id").
  106. Find(&datalist)
  107. if err != nil {
  108. return datalist
  109. } else {
  110. return datalist
  111. }
  112. }
  113. func (d *ProjectAccountDao) GetInId(ids string, name string) []models.CmProjectAccount {
  114. datalist := make([]models.CmProjectAccount, 0)
  115. err := d.engine.
  116. Where("id in ( "+ids+" ) ").
  117. And("account like ? or name like ? or company like ? or mobile like ?", name+"%", name+"%", name+"%", name+"%").
  118. Desc("id").
  119. Find(&datalist)
  120. if err != nil {
  121. return datalist
  122. } else {
  123. return datalist
  124. }
  125. }
  126. // 检索 账号姓名单位手机
  127. func (d *ProjectAccountDao) Search(name string, projectId int) []models.CmProjectAccount {
  128. datalist := make([]models.CmProjectAccount, 0)
  129. err := d.engine.
  130. Where("project_id = ? ", projectId).
  131. And("account like ? or name like ? or mobile like ?", "%"+name+"%", "%"+name+"%", "%"+name+"%").
  132. // And("account like ? or name like ? or company like ? or mobile like ?", "%"+name+"%", "%"+name+"%", "%"+name+"%", "%"+name+"%").
  133. Desc("id").
  134. Find(&datalist)
  135. if err != nil {
  136. return datalist
  137. } else {
  138. return datalist
  139. }
  140. }
  141. // 同步计量账号
  142. func (d *ProjectAccountDao) JlSync(accountList []map[string]interface{}, projectId int) error {
  143. var (
  144. accountName string
  145. err error
  146. flag bool
  147. accountItemId int
  148. )
  149. accountListNow := make([]models.CmProjectAccount, 0)
  150. err = d.engine.
  151. Where("project_id=? ", projectId).
  152. Find(&accountListNow)
  153. session := d.engine.NewSession()
  154. defer session.Close()
  155. err = session.Begin()
  156. if err != nil {
  157. return errors.New("同步出错-db")
  158. }
  159. // 库里没有账号数据,全部新增
  160. if len(accountListNow) == 0 {
  161. for _, item := range accountList {
  162. accountGroup := int(item["accountGroup"].(float64))
  163. // 新增
  164. account := &models.CmProjectAccount{}
  165. account.JlAuth = 1
  166. account.ProjectId = projectId
  167. account.Account = item["account"].(string)
  168. account.Password = "JL"
  169. account.AccountGroup = accountGroup
  170. account.Name = item["name"].(string)
  171. account.Company = item["company"].(string)
  172. account.Position = item["role"].(string)
  173. account.Mobile = item["mobile"].(string)
  174. account.Telephone = item["telephone"].(string)
  175. account.Enable = 1
  176. account.CreateTime = time.Now()
  177. if _, err = session.Insert(account); err != nil {
  178. session.Rollback()
  179. log.Println("同步计量账号新增 error=", err)
  180. return errors.New("创建账号出错")
  181. }
  182. }
  183. // 有数据 存在的授权,不存新增
  184. } else {
  185. for _, item := range accountList {
  186. accountGroup := int(item["accountGroup"].(float64))
  187. accountName = item["account"].(string)
  188. flag = false
  189. for _, accountItem := range accountListNow {
  190. // 已存在相同账号
  191. if accountItem.Account == accountName {
  192. accountItemId = accountItem.Id
  193. flag = true
  194. break
  195. }
  196. }
  197. if flag {
  198. if _, err = session.Exec("UPDATE cm_project_account SET `jl_auth` = 1 where id = ? ", accountItemId); err != nil {
  199. session.Rollback()
  200. log.Println("同步计量账号 授权 error=", err)
  201. return errors.New("账号授权出错")
  202. }
  203. } else {
  204. // 新增
  205. account := &models.CmProjectAccount{}
  206. account.JlAuth = 1
  207. account.ProjectId = projectId
  208. account.Account = accountName
  209. account.Password = "JL"
  210. account.AccountGroup = accountGroup
  211. account.Name = item["name"].(string)
  212. account.Company = item["company"].(string)
  213. account.Position = item["role"].(string)
  214. account.Mobile = item["mobile"].(string)
  215. account.Telephone = item["telephone"].(string)
  216. account.Enable = 1
  217. account.CreateTime = time.Now()
  218. if _, err = session.Insert(account); err != nil {
  219. session.Rollback()
  220. log.Println("同步计量账号新增 error=", err)
  221. return errors.New("创建账号出错")
  222. }
  223. }
  224. }
  225. }
  226. // 过滤已存在的账号-项目但没有授权的,设置为授权
  227. if err = session.Commit(); err != nil {
  228. session.Rollback()
  229. return errors.New("移动出错-db")
  230. }
  231. return nil
  232. }
  233. // 新增
  234. func (d *ProjectAccountDao) Add(data *models.CmProjectAccount) error {
  235. _, err := d.engine.Insert(data)
  236. return err
  237. }
  238. //更新
  239. func (d *ProjectAccountDao) Update(data *models.CmProjectAccount, columns []string) error {
  240. //_, err := d.engine.Id(data.Id).MustCols(columns...).Update(data)
  241. _, err := d.engine.Where("id = ? and project_id = ? ", data.Id, data.ProjectId).MustCols(columns...).Update(data)
  242. if err != nil {
  243. return errors.New("更新账号失败")
  244. }
  245. return nil
  246. }
  247. // 物理删除
  248. func (d *ProjectAccountDao) Delete(data *models.CmProjectAccount) error {
  249. _, err := d.engine.Where("id = ? and project_id = ? ", data.Id, data.ProjectId).Delete(data)
  250. if err != nil {
  251. return errors.New("删除到账号失败")
  252. }
  253. return nil
  254. }
  255. // 查找
  256. func (d *ProjectAccountDao) FindById(id int) (viewmodels.ProjectInfo, error) {
  257. projectInfo := viewmodels.ProjectInfo{}
  258. _, err := d.engine.Sql("select p.`name` as project_name, p.`code`, p.`create_time`, a.`mobile`, a.`name` from `cm_project` as p, `cm_project_account` as a where p.`user_id` = a.`id` and p.`id` = ?", id).Get(&projectInfo)
  259. return projectInfo, err
  260. }