worksite.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package worksite
  2. import (
  3. "errors"
  4. "time"
  5. "zhiyuan/models"
  6. "zhiyuan/pkg/app"
  7. "zhiyuan/pkg/db"
  8. adminParam "zhiyuan/pkg/param/admin"
  9. "zhiyuan/pkg/utils"
  10. "zhiyuan/services/admin"
  11. "zhiyuan/services/form"
  12. )
  13. var WorkSite models.WorkSite
  14. func Add(form form.WorkSiteAdd, createdId int) (int64, error) {
  15. pkg := models.GetWorkPkgModel(int64(form.PkgId), false)
  16. if pkg == nil {
  17. return 0, errors.New("套餐不存在")
  18. }
  19. workSiteMap := map[string]interface{}{
  20. "`pkg_id`": form.PkgId,
  21. "`username`": form.Username,
  22. "`phone`": form.Phone,
  23. "`village`": form.Village,
  24. "`address`": form.Address,
  25. "`room_no`": form.RoomNo,
  26. "`area`": form.Area,
  27. "`longitude`": form.Longitude,
  28. "`latitude`": form.Latitude,
  29. //"`admin_ids`": form.AdminIds,
  30. "`starttime`": form.StartTime,
  31. "`endtime`": form.StartTime + int(pkg.Days-1)*86400,
  32. "`discount`": form.Discount,
  33. "`promotion`": form.Promotion,
  34. "`gifts`": form.Gifts,
  35. "`other`": form.Other,
  36. "`hose`": form.Hose,
  37. "`bear`": form.Bear,
  38. "`created_id`": createdId,
  39. }
  40. workSiteID, err := db.InsertOne(WorkSite.TableName(), workSiteMap)
  41. if err != nil {
  42. return 0, err
  43. }
  44. for _, node := range pkg.Nodes {
  45. workSiteNodeMap := map[string]interface{}{
  46. "`site_id`": workSiteID,
  47. "`node_id`": node.NodeId,
  48. "`name`": node.Name,
  49. "`starttime`": form.StartTime + int(node.Startday-1)*86400,
  50. "`endtime`": form.StartTime + int(node.Startday+node.Days-2)*86400,
  51. "`process_ids`": node.ProcessIds,
  52. "`quality_accept_id`": node.QualityAcceptID,
  53. "`return_visit_id`": node.ReturnVisitID,
  54. "`mark`": node.Mark,
  55. }
  56. _, err := db.InsertOne(models.WorkSiteNode{}.TableName(), workSiteNodeMap)
  57. if err != nil {
  58. return 0, err
  59. }
  60. }
  61. return workSiteID, nil
  62. }
  63. func EditByID(form form.WorkSiteEdit, id int) error {
  64. info, err := GetInfoByID(id, nil, nil)
  65. if info == nil {
  66. return errors.New("invalid id")
  67. }
  68. workSiteMap := map[string]interface{}{
  69. "`username`": form.Username,
  70. "`phone`": form.Phone,
  71. "`village`": form.Village,
  72. "`address`": form.Address,
  73. "`room_no`": form.RoomNo,
  74. "`area`": form.Area,
  75. "`longitude`": form.Longitude,
  76. "`latitude`": form.Latitude,
  77. //"`admin_ids`": form.AdminIds,
  78. "`discount`": form.Discount,
  79. "`promotion`": form.Promotion,
  80. "`gifts`": form.Gifts,
  81. "`other`": form.Other,
  82. "`hose`": form.Hose,
  83. "`bear`": form.Bear,
  84. }
  85. _, err = db.Update(WorkSite.TableName(), map[string]interface{}{"id": id}, workSiteMap)
  86. return err
  87. }
  88. func DeleteByID(id int) error {
  89. info, _ := GetInfoByID(id, nil, nil)
  90. if info == nil {
  91. return errors.New("invalid id")
  92. }
  93. _, err := db.DeleteSoft(WorkSite.TableName(), map[string]interface{}{"id": id})
  94. return err
  95. }
  96. func DispatchByID(form form.WorkSiteAdminID, id int) error {
  97. info, err := GetInfoByID(id, nil, nil)
  98. if err != nil || info == nil {
  99. return errors.New("invalid id")
  100. }
  101. if roleInfo, _ := admin.GetOneRaw(map[string]string{"where": "id={{admin_id}} AND FIND_IN_SET({{role_id}}, role_ids)"}, map[string]interface{}{"role_id": form.RoleID, "admin_id": form.AdminID}, nil); roleInfo == nil {
  102. return errors.New("账号角色有误")
  103. }
  104. workSiteMap := make(map[string]interface{})
  105. switch form.RoleID {
  106. case adminParam.SupervisorRoleId:
  107. workSiteMap["manager_id"] = form.AdminID
  108. case adminParam.DesignerRoleId:
  109. workSiteMap["designer_id"] = form.AdminID
  110. case adminParam.SalesmanRoleId:
  111. workSiteMap["salesman_id"] = form.AdminID
  112. case adminParam.ManagerRoleId:
  113. workSiteMap["project_manager_id"] = form.AdminID
  114. case adminParam.LeaderRoleId:
  115. workSiteMap["project_leader_id"] = form.AdminID
  116. case adminParam.ServicerRoleId:
  117. workSiteMap["servicer_id"] = form.AdminID
  118. case adminParam.QualityRoleId:
  119. workSiteMap["quality_id"] = form.AdminID
  120. case adminParam.AssistantRoleId:
  121. workSiteMap["assistant_id"] = form.AdminID
  122. default:
  123. return errors.New("invalid roleID")
  124. }
  125. _, err = db.Update(WorkSite.TableName(), map[string]interface{}{"id": id}, workSiteMap)
  126. return err
  127. }
  128. func StartByID(id int, adminID int) error {
  129. info, err := GetInfoByID(id, nil, nil)
  130. if info == nil {
  131. return errors.New("invalid id")
  132. }
  133. if info.State != 0 {
  134. return errors.New("节点状态有误")
  135. }
  136. now := time.Now().Unix()
  137. _, err = db.Update(info.TableName(), map[string]interface{}{"id": info.ID}, map[string]interface{}{
  138. "real_starttime": now,
  139. "state": 1,
  140. })
  141. if err != nil {
  142. return err
  143. }
  144. return nil
  145. }
  146. func EditTime(form form.WorkSiteTime, id int, adminID int) error {
  147. info, err := GetInfoByID(id, nil, nil)
  148. if info == nil {
  149. return errors.New("invalid id")
  150. }
  151. if info.State != 0 {
  152. return errors.New("项目已开工")
  153. }
  154. if form.StartTime > form.EndTime {
  155. return errors.New("工期设置有误")
  156. }
  157. workSiteMap := map[string]interface{}{
  158. "`starttime`": form.StartTime,
  159. "`endtime`": form.EndTime,
  160. }
  161. _, err = db.Update(WorkSite.TableName(), map[string]interface{}{"id": id}, workSiteMap)
  162. return err
  163. }
  164. func Count(where map[string]interface{}) (int64, error) {
  165. return db.Count(WorkSite.TableName(), where)
  166. }
  167. func CountRaw(where string, param map[string]interface{}) (int64, error) {
  168. query := "`zy_work_site` WHERE " + where
  169. return db.CountRaw(query, param)
  170. }
  171. func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.WorkSite, error) {
  172. if page.PageNum > 0 && page.PageSize > 0 {
  173. where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
  174. }
  175. return WorkSite.GetMulti(where, fields, retVal)
  176. }
  177. func GetWorkSitesRaw(where map[string]string, param map[string]interface{}, retVal interface{}) error {
  178. field := "SELECT `zy_work_site`.*, `manager`.`username` as `manager_name`, `manager`.`phone` as `manager_phone`, `designer`.`username` as `designer_name`, `designer`.`phone` as `designer_phone`, `created`.`username` as `created_name`, group_concat(`zy_admin`.`username` separator ',') as `admin_names` FROM `zy_work_site` left join `zy_admin` as `manager` on `manager`.`id` = `zy_work_site`.`manager_id` left join `zy_admin` as `designer` on `designer`.`id` = `zy_work_site`.`designer_id` left join `zy_admin` as `created` on `created`.`id` = `zy_work_site`.`created_id` left join `zy_admin` on FIND_IN_SET(`zy_admin`.`id`, `zy_work_site`.`admin_ids`) "
  179. return db.GetMultiRaw(field, where, param, retVal)
  180. }
  181. func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.WorkSite, error) {
  182. return WorkSite.GetOne(where, fields, retVal)
  183. }
  184. func GetWorkSiteOne(where map[string]string, param map[string]interface{}, retVal interface{}) error {
  185. field := "SELECT `zy_work_site`.*, `manager`.`username` as `manager_name`, `manager`.`phone` as `manager_phone`, `designer`.`username` as `designer_name`, `designer`.`phone` as `designer_phone`, `created`.`username` as `created_name`, group_concat(`zy_admin`.`username` separator ',') as `admin_names` FROM `zy_work_site` left join `zy_admin` as `manager` on `manager`.`id` = `zy_work_site`.`manager_id` left join `zy_admin` as `designer` on `designer`.`id` = `zy_work_site`.`designer_id` left join `zy_admin` as `created` on `created`.`id` = `zy_work_site`.`created_id` left join `zy_admin` on FIND_IN_SET(`zy_admin`.`id`, `zy_work_site`.`admin_ids`) "
  186. where["_page_size"] = utils.ToStr(1)
  187. where["_page_num"] = utils.ToStr(1)
  188. return db.GetMultiRaw(field, where, param, retVal)
  189. }
  190. func GetWorkSiteByID(id int, retVal interface{}) error {
  191. where := map[string]string{
  192. "where": "`zy_work_site`.`id` = {{id}}",
  193. }
  194. param := map[string]interface{}{"id": id}
  195. return GetWorkSiteOne(where, param, retVal)
  196. }
  197. func GetInfoByID(id int, fields []string, retVal interface{}) (*models.WorkSite, error) {
  198. return GetOne(map[string]interface{}{"id": id}, fields, retVal)
  199. }