123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package cases
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models"
  5. "spaceofcheng/services/models/cases"
  6. "spaceofcheng/services/models/customer"
  7. "spaceofcheng/services/models/model"
  8. "spaceofcheng/services/models/system"
  9. "spaceofcheng/services/service"
  10. "spaceofcheng/services/utils"
  11. )
  12. // CaseServ 系统处理
  13. type CaseServ struct {
  14. ctx *utils.Context
  15. dao *cases.CaseDAO
  16. userdao *system.UserDAO
  17. customerdao *customer.CustomerDAO
  18. }
  19. // NewCaseServ 初始化
  20. func NewCaseServ(ctx *utils.Context) *CaseServ {
  21. return &CaseServ{
  22. ctx: ctx,
  23. dao: cases.NewCaseDAO(ctx),
  24. userdao: system.NewUserDAO(ctx),
  25. customerdao: customer.NewCustomerDAO(ctx),
  26. }
  27. }
  28. const (
  29. CONFTYPE_GOODS = "goods"
  30. )
  31. // GetCases 获取案场列表
  32. func (s *CaseServ) GetCases(caseids, casename string, page, pageSize int) (map[string]interface{}, error) {
  33. if pageSize == 0 {
  34. pageSize = service.PAGENUM
  35. }
  36. if page == 0 {
  37. page = 1
  38. }
  39. cases, err := s.dao.GetCaseList(caseids, casename, page, pageSize)
  40. if err != nil {
  41. utils.LogError("获取案场信息失败: " + err.Error())
  42. return nil, errors.New("获取案场信息失败")
  43. }
  44. total, err := s.dao.GetCaseCount(caseids, casename)
  45. if err != nil {
  46. utils.LogError("获取案场信息失败: " + err.Error())
  47. return nil, errors.New("获取案场信息失败")
  48. }
  49. return map[string]interface{}{
  50. "list": cases,
  51. "pagesize": pageSize,
  52. "pagenum": total,
  53. "page": page,
  54. }, err
  55. }
  56. // GetCaseByID 根据案场id获取案场
  57. func (s *CaseServ) GetCaseByID(caseid string) (*model.SysCase, error) {
  58. caseinfo, err := s.dao.GetCaseByID(caseid)
  59. if err != nil {
  60. utils.LogError("获取案场信息失败: " + err.Error())
  61. return nil, errors.New("获取案场信息失败")
  62. }
  63. return caseinfo, nil
  64. }
  65. // SaveCase 保存案场
  66. func (s *CaseServ) SaveCase(caseinfo model.SysCase) (*model.SysCase, error) {
  67. var newInfo *model.SysCase
  68. var err error
  69. if caseinfo.CaseName == "" {
  70. return nil, errors.New("请填写案场名称!")
  71. }
  72. if caseinfo.CaseAddress == "" {
  73. return nil, errors.New("请填写案场地址!")
  74. }
  75. if caseinfo.CaseIcon == "" {
  76. return nil, errors.New("请上传案场图片!")
  77. }
  78. if caseinfo.Coordinate == "" {
  79. return nil, errors.New("案场在地图上的位置不明确,请在地图上抓取地址获取经纬度!")
  80. }
  81. if caseinfo.CaseId == "" {
  82. newInfo, err = s.dao.AddCase(caseinfo)
  83. if err != nil {
  84. utils.LogError("保存案场信息失败: " + err.Error())
  85. return nil, errors.New("保存案场信息失败")
  86. }
  87. // 新增之后保存用户对应案场
  88. var userCase = model.SysUserCase{
  89. CaseId: newInfo.CaseId,
  90. UserId: newInfo.CreateUser,
  91. CaseName: newInfo.CaseName,
  92. IsBelong: 0,
  93. IsCreated: 1,
  94. }
  95. err = s.userdao.SaveUserCase(userCase)
  96. if err != nil {
  97. utils.LogError("保存案场信息失败: " + err.Error())
  98. return nil, errors.New("保存案场信息失败")
  99. }
  100. // 新增管理员对应案场
  101. if newInfo.CreateUser != "1" {
  102. var userCase = model.SysUserCase{
  103. CaseId: newInfo.CaseId,
  104. UserId: models.ADMIN_ID,
  105. CaseName: newInfo.CaseName,
  106. IsBelong: 0,
  107. IsCreated: 0,
  108. }
  109. err = s.userdao.SaveUserCase(userCase)
  110. if err != nil {
  111. utils.LogError("保存案场信息失败: " + err.Error())
  112. return nil, errors.New("保存案场信息失败")
  113. }
  114. }
  115. // 新增案场配置信息
  116. var conf = model.SysCaseConf{
  117. CaseId: newInfo.CaseId,
  118. ConfType: CONFTYPE_GOODS,
  119. }
  120. _, err = s.dao.SaveCaseConf(conf)
  121. } else {
  122. err = s.dao.UpdateCase(caseinfo)
  123. newInfo = &caseinfo
  124. if err != nil {
  125. utils.LogError("保存案场信息失败: " + err.Error())
  126. return nil, errors.New("保存案场信息失败")
  127. }
  128. err = s.dao.UpdateUserCaseName(caseinfo)
  129. }
  130. if err != nil {
  131. utils.LogError("保存案场信息失败: " + err.Error())
  132. return nil, errors.New("保存案场信息失败")
  133. }
  134. return newInfo, nil
  135. }
  136. // DelCase 删除案场
  137. func (s *CaseServ) DelCase(caseid string) error {
  138. err := s.dao.DelCase(caseid)
  139. if err != nil {
  140. utils.LogError("删除案场信息失败: " + err.Error())
  141. return errors.New("删除案场信息失败")
  142. }
  143. return nil
  144. }
  145. // GetAllCasesAndSales 获取所有案场
  146. func (s *CaseServ) GetAllCasesAndSales(org string) (map[string]interface{}, error) {
  147. cs, err := s.dao.GetCaseByOrg(org)
  148. if err != nil {
  149. utils.LogError("获取案场列表失败: " + err.Error())
  150. return nil, errors.New("获取案场列表失败")
  151. }
  152. csIDs := []string{}
  153. for _, c := range cs {
  154. csIDs = append(csIDs, c.CaseId)
  155. }
  156. users, err := s.dao.GetCaseUserByType(csIDs, models.USERTYPE_SALES)
  157. if err != nil {
  158. utils.LogError("获取案场销售失败: " + err.Error())
  159. return nil, errors.New("获取案场销售失败")
  160. }
  161. manager, err := s.dao.GetCaseUserByType(csIDs, models.USERTYPE_MANAGER)
  162. return map[string]interface{}{
  163. "cases": cs,
  164. "sales": users,
  165. "manager": manager,
  166. }, nil
  167. }
  168. // GetCaseConf 获取案场配置信息
  169. func (s *CaseServ) GetCaseConf(caseid, conftype string) (*model.SysCaseConf, error) {
  170. conf, err := s.dao.GetConfByCase(caseid, conftype)
  171. if err != nil {
  172. utils.LogError("获取配置信息失败: " + err.Error())
  173. return nil, errors.New("获取配置信息失败")
  174. }
  175. return conf, nil
  176. }
  177. // UpdateCaseConf 修改案场配置信息
  178. func (s *CaseServ) UpdateCaseConf(caseid, conftype string, status int) error {
  179. var conf = model.SysCaseConf{
  180. CaseId: caseid,
  181. ConfType: conftype,
  182. Status: status,
  183. }
  184. err := s.dao.UpdateCaseConf(conf)
  185. return err
  186. }