product.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package services
  2. import (
  3. "errors"
  4. "eta/eta_mini_crm_ht/models"
  5. "eta/eta_mini_crm_ht/utils"
  6. "fmt"
  7. "strconv"
  8. "time"
  9. )
  10. var (
  11. tranMediaMap = map[models.MediaType]string{
  12. models.Video: "视频",
  13. models.Audio: "音频",
  14. }
  15. )
  16. func GetUnsetProductCountByCondition(productType string, permissionIds []int, condition string, pars []interface{}) (total int, ids []int, err error) {
  17. setIds, err := models.GetProductSourceIdsByProductType(productType)
  18. if err != nil {
  19. return
  20. }
  21. switch productType {
  22. case "report":
  23. return getReportIdsByCondition(setIds, permissionIds, condition, pars)
  24. case "media":
  25. return getMediaIdsByCondition(setIds, permissionIds, condition, pars)
  26. default:
  27. err = errors.New("不支持的产品类型查询")
  28. return
  29. }
  30. }
  31. func getReportIdsByCondition(setIds []int, permissionIds []int, condition string, pars []interface{}) (total int, filterIds []int, err error) {
  32. permissionNames, err := models.GetPermissionNamesWithRiskLevel(permissionIds)
  33. var conditionHT string
  34. var conditionETA string
  35. if err != nil {
  36. utils.FileLog.Error("查询品种名称失败", err.Error)
  37. return
  38. }
  39. if len(permissionNames) > 0 {
  40. conditionHT = "(source ='HT' and plate_name in (" + utils.GetOrmReplaceHolder(len(permissionNames)) + "))"
  41. }
  42. filterPermissionIds, err := models.FilterPermissionIdsWithRiskLevel(permissionIds)
  43. if err != nil {
  44. utils.FileLog.Error("过滤品种Id失败", err.Error)
  45. return
  46. }
  47. classifyCondition := utils.GetOrmReplaceHolder(len(filterPermissionIds))
  48. var classifyPars []interface{}
  49. classifyPars = append(classifyPars, filterPermissionIds)
  50. classifyIds, err := models.GetClassifyIdsByPermissionIds(classifyCondition, classifyPars)
  51. if len(classifyIds) > 0 {
  52. conditionETA = "(source ='ETA' and classify_id in (" + utils.GetOrmReplaceHolder(len(classifyIds)) + "))"
  53. }
  54. if conditionHT != "" {
  55. if conditionETA != "" {
  56. condition += "and ( " + conditionHT + " or " + conditionETA + ")"
  57. pars = append(pars, permissionNames)
  58. pars = append(pars, classifyIds)
  59. } else {
  60. condition += "and " + conditionHT
  61. pars = append(pars, permissionNames)
  62. }
  63. } else {
  64. if conditionETA != "" {
  65. condition += "and " + conditionETA
  66. pars = append(pars, classifyIds)
  67. }
  68. }
  69. var ids []int
  70. ids, err = models.GetReportIdsByCondition(condition, pars)
  71. if err != nil {
  72. utils.FileLog.Error("查询报告Id失败", err.Error)
  73. return
  74. }
  75. filterMap := make(map[int]bool)
  76. for _, filterId := range setIds {
  77. filterMap[filterId] = true
  78. }
  79. for _, id := range ids {
  80. if !filterMap[id] {
  81. filterIds = append(filterIds, id)
  82. total++
  83. }
  84. }
  85. return
  86. }
  87. func getMediaIdsByCondition(setIds []int, permissionIds []int, condition string, pars []interface{}) (total int, filterIds []int, err error) {
  88. filterPermissionIds, err := models.FilterPermissionIdsWithRiskLevel(permissionIds)
  89. if err != nil {
  90. utils.FileLog.Error("过滤品种id失败", err.Error)
  91. return
  92. }
  93. mediaIds, err := models.GetMediaIdIdsByPermissionId(filterPermissionIds)
  94. if err != nil {
  95. utils.FileLog.Error("过滤媒体Id失败", err.Error)
  96. return
  97. }
  98. if condition != "" {
  99. condition += "and id in (" + utils.GetOrmReplaceHolder(len(mediaIds)) + ")"
  100. pars = append(pars, mediaIds)
  101. mediaIds, err = models.GetMediaIdsByCondition(condition, pars)
  102. }
  103. filterMap := make(map[int]bool)
  104. for _, filterId := range setIds {
  105. filterMap[filterId] = true
  106. }
  107. for _, id := range mediaIds {
  108. if !filterMap[id] {
  109. total++
  110. filterIds = append(filterIds, id)
  111. }
  112. }
  113. return
  114. }
  115. func GetUnsetProductByCondition(productType string, ids []int, sortCondition string, startSize int, pageSize int) (products []*ProductView, err error) {
  116. switch productType {
  117. case "report":
  118. var reports []models.Report
  119. reports, err = models.GetReportByIds(sortCondition, ids, startSize, pageSize)
  120. if err != nil {
  121. utils.FileLog.Error("查询报告产品失败", err.Error)
  122. return
  123. }
  124. for _, report := range reports {
  125. products = append(products, &ProductView{
  126. ProductName: report.Title,
  127. SourceId: report.Id,
  128. ProductType: "report",
  129. PublishedTime: report.PublishedTime,
  130. })
  131. }
  132. return
  133. case "media":
  134. var medias []models.Media
  135. medias, err = models.GetMediasById(ids, sortCondition, startSize, pageSize)
  136. if err != nil {
  137. utils.FileLog.Error("查询报告产品失败", err.Error)
  138. return
  139. }
  140. for _, media := range medias {
  141. products = append(products, &ProductView{
  142. ProductName: media.MediaName,
  143. SourceId: media.Id,
  144. ProductType: string(media.MediaType),
  145. PublishedTime: media.PublishedTime.Format(time.DateTime),
  146. })
  147. }
  148. return
  149. default:
  150. err = errors.New("不支持的产品类型查询")
  151. return
  152. }
  153. }
  154. type ProductView struct {
  155. Id int
  156. ProductName string
  157. SourceId int
  158. ProductType string
  159. RiskLevel string
  160. PublishedTime string
  161. UpdatedTime string
  162. Price string
  163. SaleStatus string
  164. }
  165. func GetRiskLevel(productType string, id int) (riskLevel string, productName string, err error) {
  166. switch productType {
  167. case "report":
  168. var report *models.Report
  169. report, err = models.GetReportById(id)
  170. if err != nil {
  171. utils.FileLog.Error("获取报告失败,无法确认风险等级", err.Error())
  172. return
  173. }
  174. switch report.Source {
  175. case models.SourceHT:
  176. var permission models.Permission
  177. permission, err = models.GetPermissionByName(report.PlateName)
  178. if err != nil {
  179. utils.FileLog.Error("获取品种信息,无法确认风险等级", err.Error())
  180. return
  181. }
  182. return permission.RiskLevel, report.Title, nil
  183. case models.SourceETA:
  184. var permissionIds []int
  185. permissionIds, err = models.GetByPermissionIdsByClassifyId(report.ClassifyId)
  186. if err != nil {
  187. utils.FileLog.Error("获取品种信息,无法确认风险等级", err.Error())
  188. return
  189. }
  190. var permissions []models.Permission
  191. permissions, err = models.GetPermissionsWithRiskLevel(permissionIds)
  192. if err != nil {
  193. utils.FileLog.Error("获取品种信息,无法确认风险等级", err.Error())
  194. return
  195. }
  196. var riskNum int
  197. for _, permission := range permissions {
  198. if permission.RiskLevel == "" {
  199. continue
  200. }
  201. var parseErr error
  202. currentNum, parseErr := strconv.Atoi(permission.RiskLevel[1:])
  203. if parseErr != nil {
  204. continue
  205. }
  206. if currentNum > riskNum {
  207. riskNum = currentNum
  208. }
  209. }
  210. if riskNum > 0 {
  211. return fmt.Sprintf("R%d", riskNum), report.Title, nil
  212. }
  213. return
  214. }
  215. case "media":
  216. var media *models.Media
  217. media, err = models.GetMediaById("", id)
  218. if err != nil {
  219. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  220. return
  221. }
  222. var permissionsIds []int
  223. permissionsIds, err = models.GetPermissionIdsByMediaId(media.MediaType, id)
  224. if err != nil {
  225. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  226. return
  227. }
  228. var permissions []models.Permission
  229. permissions, err = models.GetPermissionsWithRiskLevel(permissionsIds)
  230. if err != nil {
  231. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  232. return
  233. }
  234. var riskNum int
  235. for _, permission := range permissions {
  236. if permission.RiskLevel == "" {
  237. continue
  238. }
  239. var parseErr error
  240. currentNum, parseErr := strconv.Atoi(permission.RiskLevel[1:])
  241. if parseErr != nil {
  242. continue
  243. }
  244. if currentNum > riskNum {
  245. riskNum = currentNum
  246. }
  247. }
  248. if riskNum > 0 {
  249. return fmt.Sprintf("R%d", riskNum), media.MediaName, nil
  250. }
  251. return
  252. case "package":
  253. var permission *models.Permission
  254. permission, err = models.GetPermissionByPermissionId(id)
  255. if err != nil {
  256. utils.FileLog.Error("获取套餐品种信息,无法确认风险等级", err.Error())
  257. return
  258. }
  259. if permission.RiskLevel == "" {
  260. return "", "", errors.New("当前品种未设置风测等级")
  261. }
  262. return permission.RiskLevel, permission.Name, nil
  263. default:
  264. var media *models.Media
  265. media, err = models.GetMediaById(models.MediaType(productType), id)
  266. if err != nil {
  267. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  268. return
  269. }
  270. var permissionsIds []int
  271. permissionsIds, err = models.GetPermissionIdsByMediaId(media.MediaType, id)
  272. if err != nil {
  273. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  274. return
  275. }
  276. var permissions []models.Permission
  277. permissions, err = models.GetPermissionsWithRiskLevel(permissionsIds)
  278. if err != nil {
  279. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  280. return
  281. }
  282. var riskNum int
  283. for _, permission := range permissions {
  284. if permission.RiskLevel == "" {
  285. continue
  286. }
  287. var parseErr error
  288. currentNum, parseErr := strconv.Atoi(permission.RiskLevel[1:])
  289. if parseErr != nil {
  290. continue
  291. }
  292. if currentNum > riskNum {
  293. riskNum = currentNum
  294. }
  295. }
  296. if riskNum > 0 {
  297. return fmt.Sprintf("R%d", riskNum), media.MediaName, nil
  298. }
  299. return
  300. }
  301. return
  302. }