product.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  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. ProductName string
  156. SourceId int
  157. ProductType string
  158. RiskLevel string
  159. PublishedTime string
  160. }
  161. func GetRiskLevel(productType string, id int) (riskLevel string, productName string, err error) {
  162. switch productType {
  163. case "report":
  164. var report *models.Report
  165. report, err = models.GetReportById(id)
  166. if err != nil {
  167. utils.FileLog.Error("获取报告失败,无法确认风险等级", err.Error())
  168. return
  169. }
  170. switch report.Source {
  171. case models.SourceHT:
  172. var permission models.Permission
  173. permission, err = models.GetPermissionByName(report.PlateName)
  174. if err != nil {
  175. utils.FileLog.Error("获取品种信息,无法确认风险等级", err.Error())
  176. return
  177. }
  178. return permission.RiskLevel, report.Title, nil
  179. case models.SourceETA:
  180. var permissionIds []int
  181. permissionIds, err = models.GetByPermissionIdsByClassifyId(report.ClassifyId)
  182. if err != nil {
  183. utils.FileLog.Error("获取品种信息,无法确认风险等级", err.Error())
  184. return
  185. }
  186. var permissions []models.Permission
  187. permissions, err = models.GetPermissionsWithRiskLevel(permissionIds)
  188. if err != nil {
  189. utils.FileLog.Error("获取品种信息,无法确认风险等级", err.Error())
  190. return
  191. }
  192. var riskNum int
  193. for _, permission := range permissions {
  194. if permission.RiskLevel == "" {
  195. continue
  196. }
  197. var parseErr error
  198. currentNum, parseErr := strconv.Atoi(permission.RiskLevel[1:])
  199. if parseErr != nil {
  200. continue
  201. }
  202. if currentNum > riskNum {
  203. riskNum = currentNum
  204. }
  205. }
  206. if riskNum > 0 {
  207. return fmt.Sprintf("R%d", riskNum), report.Title, nil
  208. }
  209. return
  210. }
  211. case "media":
  212. var media *models.Media
  213. media, err = models.GetMediaById("", id)
  214. if err != nil {
  215. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  216. return
  217. }
  218. var permissionsIds []int
  219. permissionsIds, err = models.GetPermissionIdsByMediaId(media.MediaType, id)
  220. if err != nil {
  221. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  222. return
  223. }
  224. var permissions []models.Permission
  225. permissions, err = models.GetPermissionsWithRiskLevel(permissionsIds)
  226. if err != nil {
  227. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  228. return
  229. }
  230. var riskNum int
  231. for _, permission := range permissions {
  232. if permission.RiskLevel == "" {
  233. continue
  234. }
  235. var parseErr error
  236. currentNum, parseErr := strconv.Atoi(permission.RiskLevel[1:])
  237. if parseErr != nil {
  238. continue
  239. }
  240. if currentNum > riskNum {
  241. riskNum = currentNum
  242. }
  243. }
  244. if riskNum > 0 {
  245. return fmt.Sprintf("R%d", riskNum), media.MediaName, nil
  246. }
  247. return
  248. case "package":
  249. var permission *models.Permission
  250. permission, err = models.GetPermissionByPermissionId(id)
  251. if err != nil {
  252. utils.FileLog.Error("获取套餐品种信息,无法确认风险等级", err.Error())
  253. return
  254. }
  255. if permission.RiskLevel == "" {
  256. return "", "", errors.New("当前品种未设置风测等级")
  257. }
  258. return permission.RiskLevel, "", nil
  259. default:
  260. var media *models.Media
  261. media, err = models.GetMediaById(models.MediaType(productType), id)
  262. if err != nil {
  263. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  264. return
  265. }
  266. var permissionsIds []int
  267. permissionsIds, err = models.GetPermissionIdsByMediaId(media.MediaType, id)
  268. if err != nil {
  269. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  270. return
  271. }
  272. var permissions []models.Permission
  273. permissions, err = models.GetPermissionsWithRiskLevel(permissionsIds)
  274. if err != nil {
  275. utils.FileLog.Error("获取媒体信息,无法确认风险等级", err.Error())
  276. return
  277. }
  278. var riskNum int
  279. for _, permission := range permissions {
  280. if permission.RiskLevel == "" {
  281. continue
  282. }
  283. var parseErr error
  284. currentNum, parseErr := strconv.Atoi(permission.RiskLevel[1:])
  285. if parseErr != nil {
  286. continue
  287. }
  288. if currentNum > riskNum {
  289. riskNum = currentNum
  290. }
  291. }
  292. if riskNum > 0 {
  293. return fmt.Sprintf("R%d", riskNum), media.MediaName, nil
  294. }
  295. return
  296. }
  297. return
  298. }