coverage.html 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>service: Go Coverage Report</title>
  6. <style>
  7. body {
  8. background: black;
  9. color: rgb(80, 80, 80);
  10. }
  11. body, pre, #legend span {
  12. font-family: Menlo, monospace;
  13. font-weight: bold;
  14. }
  15. #topbar {
  16. background: black;
  17. position: fixed;
  18. top: 0; left: 0; right: 0;
  19. height: 42px;
  20. border-bottom: 1px solid rgb(80, 80, 80);
  21. }
  22. #content {
  23. margin-top: 50px;
  24. }
  25. #nav, #legend {
  26. float: left;
  27. margin-left: 10px;
  28. }
  29. #legend {
  30. margin-top: 12px;
  31. }
  32. #nav {
  33. margin-top: 10px;
  34. }
  35. #legend span {
  36. margin: 0 5px;
  37. }
  38. .cov0 { color: rgb(192, 0, 0) }
  39. .cov1 { color: rgb(128, 128, 128) }
  40. .cov2 { color: rgb(116, 140, 131) }
  41. .cov3 { color: rgb(104, 152, 134) }
  42. .cov4 { color: rgb(92, 164, 137) }
  43. .cov5 { color: rgb(80, 176, 140) }
  44. .cov6 { color: rgb(68, 188, 143) }
  45. .cov7 { color: rgb(56, 200, 146) }
  46. .cov8 { color: rgb(44, 212, 149) }
  47. .cov9 { color: rgb(32, 224, 152) }
  48. .cov10 { color: rgb(20, 236, 155) }
  49. </style>
  50. </head>
  51. <body>
  52. <div id="topbar">
  53. <div id="nav">
  54. <select id="files">
  55. <option value="file0">jyBXSubscribe/rpc/model/service/entity.go (0.0%)</option>
  56. <option value="file1">jyBXSubscribe/rpc/model/service/matchjob.go (0.0%)</option>
  57. <option value="file2">jyBXSubscribe/rpc/model/service/subscribe.go (57.1%)</option>
  58. </select>
  59. </div>
  60. <div id="legend">
  61. <span>not tracked</span>
  62. <span class="cov0">not covered</span>
  63. <span class="cov8">covered</span>
  64. </div>
  65. </div>
  66. <div id="content">
  67. <pre class="file" id="file0" style="display: none">package service
  68. import (
  69. util "app.yhyue.com/moapp/jybase/common"
  70. . "app.yhyue.com/moapp/jybase/mongodb"
  71. "app.yhyue.com/moapp/jybase/mysql"
  72. "github.com/zeromicro/go-zero/core/logx"
  73. )
  74. func ClearEnt() <span class="cov0" title="0">{
  75. Ents = map[int]*Ent{}
  76. EntUsers = map[int]*EntUser{}
  77. EntUserDept = map[int]*EntDeptUser{}
  78. EntDeptUsers = map[int][]*EntDeptUser{}
  79. EntRuleUsers = map[string][]*EntRuleUser{}
  80. EntUserRules = map[int][]*EntRuleUser{}
  81. EntDepts = map[int]*EntDept{}
  82. EntParentDept = map[int][]*EntDeptParent{}
  83. EntChildDept = map[int][]*EntDeptParent{}
  84. EntDeptDis = map[int][]*EntDistribute{}
  85. }</span>
  86. //
  87. func InitEnt(mysql *mysql.Mysql, mgo *MongodbSim, dbName string, entId, entUserId int) <span class="cov0" title="0">{
  88. InitEnts(mysql, entId)
  89. InitEntUsers(mysql, entUserId)
  90. InitEntDeptUsers(mysql, entUserId)
  91. InitEntRuleUsers(mysql, entUserId)
  92. InitEntDepts(mysql, entId)
  93. InitEntDeptParents(mysql, entId)
  94. InitEntDistribute(mgo, dbName, entId)
  95. }</span>
  96. ///////////////////////
  97. var Ents = map[int]*Ent{}
  98. type Ent struct {
  99. Id int
  100. Model int
  101. Name string
  102. DeptParent map[int][]int
  103. IsNew int
  104. }
  105. func InitEnts(Mysql *mysql.Mysql, entId int) <span class="cov0" title="0">{
  106. list := Mysql.SelectBySql("select id,model,name from entniche_info where id=? and isNew=1 and status=1 and model in (1,2)", entId)
  107. if list == nil </span><span class="cov0" title="0">{
  108. return
  109. }</span>
  110. <span class="cov0" title="0">for _, v := range *list </span><span class="cov0" title="0">{
  111. id := util.IntAll(v["id"])
  112. Ents[id] = &amp;Ent{
  113. Id: id,
  114. Model: util.IntAll(v["model"]),
  115. Name: util.ObjToString(v["name"]),
  116. }
  117. }</span>
  118. <span class="cov0" title="0">logx.Info("entniche_info加载完成!")</span>
  119. }
  120. var EntDepts = map[int]*EntDept{}
  121. type EntDept struct {
  122. Id int
  123. Pid int
  124. Name string
  125. Nodiff int
  126. Subdis int
  127. }
  128. func InitEntDepts(Mysql *mysql.Mysql, entId int) <span class="cov0" title="0">{
  129. list := Mysql.SelectBySql(`select id,name,pid,subdis,nodiff from entniche_department where ent_id=?`, entId)
  130. if list == nil </span><span class="cov0" title="0">{
  131. return
  132. }</span>
  133. <span class="cov0" title="0">for _, v := range *list </span><span class="cov0" title="0">{
  134. id := util.IntAll(v["id"])
  135. EntDepts[id] = &amp;EntDept{
  136. Id: id,
  137. Pid: util.IntAll(v["pid"]),
  138. Nodiff: util.IntAll(v["nodiff"]),
  139. Subdis: util.IntAll(v["subdis"]),
  140. Name: util.ObjToString(v["name"]),
  141. }
  142. }</span>
  143. <span class="cov0" title="0">logx.Info("entniche_department加载完成!")</span>
  144. }
  145. var EntUsers = map[int]*EntUser{}
  146. type EntUser struct {
  147. Id int
  148. Name string
  149. Mail string
  150. Phone string
  151. Power int
  152. }
  153. func InitEntUsers(Mysql *mysql.Mysql, entUserId int) <span class="cov0" title="0">{
  154. list := Mysql.SelectBySql(`select id,name,mail,phone,power from entniche_user where id=?`, entUserId)
  155. if list == nil </span><span class="cov0" title="0">{
  156. return
  157. }</span>
  158. <span class="cov0" title="0">for _, v := range *list </span><span class="cov0" title="0">{
  159. id := util.IntAll(v["id"])
  160. EntUsers[id] = &amp;EntUser{
  161. Id: id,
  162. Name: util.ObjToString(v["name"]),
  163. Mail: util.ObjToString(v["mail"]),
  164. Phone: util.ObjToString(v["phone"]),
  165. Power: util.IntAll(v["power"]),
  166. }
  167. }</span>
  168. <span class="cov0" title="0">logx.Info("entniche_user加载完成!")</span>
  169. }
  170. //我所有的父部门
  171. var EntParentDept = map[int][]*EntDeptParent{}
  172. //我所有的子部门
  173. var EntChildDept = map[int][]*EntDeptParent{}
  174. type EntDeptParent struct {
  175. Id int
  176. Pid int
  177. }
  178. func InitEntDeptParents(Mysql *mysql.Mysql, entId int) <span class="cov0" title="0">{
  179. list := Mysql.SelectBySql(`select a.id,a.pid from entniche_department_parent a inner join entniche_department b on (a.id=b.id and b.ent_id=?)`, entId)
  180. if list == nil </span><span class="cov0" title="0">{
  181. return
  182. }</span>
  183. <span class="cov0" title="0">for _, v := range *list </span><span class="cov0" title="0">{
  184. id := util.IntAll(v["id"])
  185. pid := util.IntAll(v["pid"])
  186. EntParentDept[id] = append(EntParentDept[id], &amp;EntDeptParent{
  187. Id: id,
  188. Pid: pid,
  189. })
  190. EntChildDept[pid] = append(EntChildDept[pid], &amp;EntDeptParent{
  191. Id: id,
  192. Pid: pid,
  193. })
  194. }</span>
  195. <span class="cov0" title="0">logx.Info("entniche_department_parent加载完成!")</span>
  196. }
  197. var EntUserDept = map[int]*EntDeptUser{}
  198. var EntDeptUsers = map[int][]*EntDeptUser{}
  199. type EntDeptUser struct {
  200. UserId int
  201. DeptId int
  202. }
  203. func InitEntDeptUsers(Mysql *mysql.Mysql, entUserId int) <span class="cov0" title="0">{
  204. list := Mysql.SelectBySql(`select dept_id,user_id from entniche_department_user where user_id=?`, entUserId)
  205. if list == nil </span><span class="cov0" title="0">{
  206. return
  207. }</span>
  208. <span class="cov0" title="0">for _, v := range *list </span><span class="cov0" title="0">{
  209. user_id := util.IntAll(v["user_id"])
  210. dept_id := util.IntAll(v["dept_id"])
  211. entDeptUser := &amp;EntDeptUser{
  212. UserId: user_id,
  213. DeptId: dept_id,
  214. }
  215. EntUserDept[user_id] = entDeptUser
  216. EntDeptUsers[dept_id] = append(EntDeptUsers[dept_id], entDeptUser)
  217. }</span>
  218. <span class="cov0" title="0">logx.Info("entniche_department_user加载完成!")</span>
  219. }
  220. var EntRuleUsers = map[string][]*EntRuleUser{}
  221. var EntUserRules = map[int][]*EntRuleUser{}
  222. type EntRuleUser struct {
  223. UserId int
  224. RuleId string
  225. }
  226. func InitEntRuleUsers(Mysql *mysql.Mysql, entUserId int) <span class="cov0" title="0">{
  227. list := Mysql.SelectBySql(`select user_id,rule_id from entniche_user_rule where user_id=?`, entUserId)
  228. if list == nil </span><span class="cov0" title="0">{
  229. return
  230. }</span>
  231. <span class="cov0" title="0">for _, v := range *list </span><span class="cov0" title="0">{
  232. ruleId := util.ObjToString(v["rule_id"])
  233. userId := util.IntAll(v["user_id"])
  234. entRuleUser := &amp;EntRuleUser{
  235. UserId: userId,
  236. RuleId: ruleId,
  237. }
  238. EntRuleUsers[ruleId] = append(EntRuleUsers[ruleId], entRuleUser)
  239. EntUserRules[userId] = append(EntUserRules[userId], entRuleUser)
  240. }</span>
  241. <span class="cov0" title="0">logx.Info("entniche_user_rule加载完成!")</span>
  242. }
  243. var EntDeptDis = map[int][]*EntDistribute{}
  244. type EntDistribute struct {
  245. Id string
  246. DeptId int
  247. Area map[string]interface{}
  248. Buyerclass []interface{}
  249. Items []string
  250. }
  251. func InitEntDistribute(mgo *MongodbSim, dbName string, entId int) <span class="cov0" title="0">{
  252. sess := mgo.GetMgoConn()
  253. defer mgo.DestoryMongoConn(sess)
  254. it := sess.DB(dbName).C("entniche_distribute").Find(map[string]interface{}{
  255. "i_status": map[string]interface{}{"$ne": 1},
  256. "i_entid": entId,
  257. }).Select(map[string]interface{}{
  258. "_id": 1,
  259. "i_entid": 1,
  260. "i_deptid": 1,
  261. "a_items": 1,
  262. "o_area": 1,
  263. "a_buyerclass": 1,
  264. }).Iter()
  265. for temp := make(map[string]interface{}); it.Next(&amp;temp); </span><span class="cov0" title="0">{
  266. if temp["i_deptid"] == nil </span><span class="cov0" title="0">{
  267. continue</span>
  268. }
  269. <span class="cov0" title="0">deptId := util.IntAll(temp["i_deptid"])
  270. a_items, _ := temp["a_items"].([]interface{})
  271. o_area, _ := temp["o_area"].(map[string]interface{})
  272. a_buyerclass, _ := temp["a_buyerclass"].([]interface{})
  273. EntDeptDis[deptId] = append(EntDeptDis[deptId], &amp;EntDistribute{
  274. Id: BsonIdToSId(temp["_id"]),
  275. DeptId: deptId,
  276. Area: o_area,
  277. Buyerclass: a_buyerclass,
  278. Items: util.ObjArrToStringArr(a_items),
  279. })
  280. temp = make(map[string]interface{})</span>
  281. }
  282. }
  283. </pre>
  284. <pre class="file" id="file1" style="display: none">package service
  285. import (
  286. util "app.yhyue.com/moapp/jybase/common"
  287. . "app.yhyue.com/moapp/jybase/mongodb"
  288. "app.yhyue.com/moapp/jybase/mysql"
  289. "github.com/zeromicro/go-zero/core/logx"
  290. IC "jyBXSubscribe/rpc/init"
  291. )
  292. var Mysql *mysql.Mysql
  293. var Mgo *MongodbSim
  294. //用户基本信息
  295. type UserInfo struct {
  296. Entniche *Entniche
  297. SubSet map[string]interface{}
  298. }
  299. //
  300. type Entniche struct {
  301. EntId int //企业id
  302. EntName string //企业名称
  303. DeptId int //部门id
  304. DeptName string //部门名称
  305. DisId string //分发id
  306. UserId int
  307. }
  308. type MatchJob struct {
  309. }
  310. func (m *MatchJob) Start(entId, entUserId int) (map[string]interface{}, int) <span class="cov0" title="0">{
  311. defer util.Catch()
  312. defer ClearEnt()
  313. InitEnt(IC.MainMysql, &amp;IC.Mgo, "qfw", entId, entUserId)
  314. users := m.LoadSubSet(entId)
  315. return FinalSub(entUserId, users), EntUserDept[entUserId].DeptId
  316. }</span>
  317. func (m *MatchJob) LoadSubSet(entId int) map[*UserInfo]bool <span class="cov0" title="0">{
  318. defer util.Catch()
  319. Users := map[*UserInfo]bool{}
  320. sess := Mgo.GetMgoConn()
  321. defer Mgo.DestoryMongoConn(sess)
  322. it := sess.DB("qfw").C("entniche_rule").Find(map[string]interface{}{
  323. "i_entid": entId,
  324. }).Select(map[string]interface{}{
  325. "i_entid": 1,
  326. "i_deptid": 1,
  327. "i_userid": 1,
  328. "o_entniche": 1,
  329. }).Iter()
  330. for _temp := make(map[string]interface{}); it.Next(&amp;_temp); </span><span class="cov0" title="0">{
  331. func(temp map[string]interface{}) </span><span class="cov0" title="0">{
  332. entId := util.IntAll(temp["i_entid"])
  333. deptId := util.IntAll(temp["i_deptid"])
  334. userId := util.IntAll(temp["i_userid"])
  335. if entId == 0 || (deptId == 0 &amp;&amp; userId == 0) </span><span class="cov0" title="0">{
  336. return
  337. }</span> else<span class="cov0" title="0"> if Ents[entId] == nil </span><span class="cov0" title="0">{
  338. logx.Info("没有找到该企业", entId)
  339. return
  340. }</span>
  341. <span class="cov0" title="0">entName := Ents[entId].Name
  342. if deptId &gt; 0 &amp;&amp; EntDepts[deptId] == nil </span><span class="cov0" title="0">{
  343. logx.Info("没有找到该部门", entName, entId, deptId)
  344. return
  345. }</span>
  346. <span class="cov0" title="0">deptName := ""
  347. if EntDepts[deptId] != nil </span><span class="cov0" title="0">{
  348. deptName = EntDepts[deptId].Name
  349. }</span>
  350. <span class="cov0" title="0">subSet, _ := temp["o_entniche"].(map[string]interface{})
  351. if subSet == nil || len(subSet) == 0 </span><span class="cov0" title="0">{
  352. logx.Info("订阅设置为空,过滤掉", entName, entId, deptName, deptId, userId)
  353. return
  354. }</span>
  355. //
  356. <span class="cov0" title="0">if deptId &gt; 0 </span><span class="cov0" title="0">{ //部门订阅
  357. if Ents[entId].Model != 1 </span><span class="cov0" title="0">{
  358. logx.Info("不是统一订阅模式,过滤掉", entName, entId, deptName, deptId)
  359. return
  360. }</span> else<span class="cov0" title="0"> if EntDepts[deptId] == nil </span><span class="cov0" title="0">{
  361. logx.Info("没有找到该部门,过滤掉", entName, entId, deptName, deptId)
  362. return
  363. }</span> else<span class="cov0" title="0"> if EntDepts[deptId].Subdis == 0 </span><span class="cov0" title="0">{
  364. logx.Info("该部门的订阅分发没有开启,过滤掉", entName, entId, deptName, deptId)
  365. return
  366. }</span> else<span class="cov0" title="0"> if EntDepts[deptId].Nodiff == 0 &amp;&amp; EntDeptDis[deptId] == nil </span><span class="cov0" title="0">{
  367. logx.Info("该部门开启了订阅分发,没有开启全员无差别接收,但是没有分发规则,过滤掉", entName, entId, deptName, deptId)
  368. return
  369. }</span>
  370. //如果我的上级部门打开了订阅分发,并且开启了全员无差别接收,本部门规则无效
  371. <span class="cov0" title="0">for _, dept := range EntParentDept[deptId] </span><span class="cov0" title="0">{
  372. if EntDepts[dept.Pid].Subdis == 1 &amp;&amp; EntDepts[dept.Pid].Nodiff == 1 </span><span class="cov0" title="0">{
  373. logx.Info("我的上级部门", dept.Pid, "开启了订阅分发和全员无差别,过滤掉", entName, entId, deptName, deptId)
  374. return
  375. }</span>
  376. }
  377. } else<span class="cov0" title="0"> if userId &gt; 0 </span><span class="cov0" title="0">{ //个人订阅
  378. if Ents[entId].Model != 2 </span><span class="cov0" title="0">{
  379. logx.Info("不是个人订阅模式,过滤掉", entName, entId, userId)
  380. return
  381. }</span> else<span class="cov0" title="0"> if EntUsers[userId] == nil </span><span class="cov0" title="0">{
  382. logx.Info("没有找到该用户,过滤掉", entName, entId, userId)
  383. return
  384. }</span> else<span class="cov0" title="0"> if EntUsers[userId].Power == 0 </span><span class="cov0" title="0">{
  385. logx.Info("该用户没有权限,过滤掉", entName, entId, userId)
  386. return
  387. }</span>
  388. }
  389. <span class="cov0" title="0">user := &amp;UserInfo{
  390. Entniche: &amp;Entniche{
  391. EntId: entId,
  392. EntName: entName,
  393. DeptId: deptId,
  394. DeptName: deptName,
  395. UserId: userId,
  396. },
  397. SubSet: subSet,
  398. }
  399. logx.Info("加载订阅设置", "entId", entId, "entName", entName, "deptId", deptId, "deptName", deptName, "userId", userId)
  400. Users[user] = true
  401. if deptId &lt;= 0 </span><span class="cov0" title="0">{
  402. return
  403. }</span>
  404. //分发规则
  405. <span class="cov0" title="0">if EntDepts[deptId].Nodiff == 1 </span><span class="cov0" title="0">{
  406. logx.Info("该部门开启了全员无差别,分发规则无效", entName, entId, deptName, deptId)
  407. return
  408. }</span> else<span class="cov0" title="0"> if EntDeptDis[deptId] == nil </span><span class="cov0" title="0">{
  409. logx.Info("该部门没有分发规则", entName, entId, deptName, deptId)
  410. return
  411. }</span>
  412. <span class="cov0" title="0">itemMap := map[string]interface{}{}
  413. items, _ := subSet["a_items"].([]interface{})
  414. for _, v := range items </span><span class="cov0" title="0">{
  415. item, _ := v.(map[string]interface{})
  416. if item == nil </span><span class="cov0" title="0">{
  417. continue</span>
  418. }
  419. <span class="cov0" title="0">item_name, _ := item["s_item"].(string)
  420. if item_name == "" </span><span class="cov0" title="0">{
  421. continue</span>
  422. }
  423. <span class="cov0" title="0">itemMap[item_name] = item</span>
  424. }
  425. <span class="cov0" title="0">for _, dis := range EntDeptDis[deptId] </span><span class="cov0" title="0">{
  426. child_items := []interface{}{}
  427. for _, item_name := range dis.Items </span><span class="cov0" title="0">{
  428. if itemMap[item_name] == nil </span><span class="cov0" title="0">{
  429. continue</span>
  430. }
  431. <span class="cov0" title="0">child_items = append(child_items, itemMap[item_name])</span>
  432. }
  433. <span class="cov0" title="0">child_subSet := map[string]interface{}{}
  434. if len(dis.Buyerclass) &gt; 0 </span><span class="cov0" title="0">{
  435. child_subSet["a_buyerclass"] = dis.Buyerclass
  436. }</span>
  437. <span class="cov0" title="0">if len(dis.Area) &gt; 0 </span><span class="cov0" title="0">{
  438. child_subSet["o_area"] = dis.Area
  439. }</span>
  440. <span class="cov0" title="0">if len(child_items) &gt; 0 </span><span class="cov0" title="0">{
  441. child_subSet["a_items"] = child_items
  442. }</span>
  443. <span class="cov0" title="0">if len(child_subSet) == 0 </span><span class="cov0" title="0">{
  444. continue</span>
  445. }
  446. <span class="cov0" title="0">child_user := &amp;UserInfo{
  447. Entniche: &amp;Entniche{
  448. EntId: user.Entniche.EntId,
  449. EntName: user.Entniche.EntName,
  450. DeptId: user.Entniche.DeptId,
  451. DeptName: user.Entniche.DeptName,
  452. DisId: dis.Id,
  453. },
  454. SubSet: child_subSet,
  455. }
  456. Users[child_user] = true</span>
  457. }
  458. }(_temp)
  459. <span class="cov0" title="0">_temp = make(map[string]interface{})</span>
  460. }
  461. <span class="cov0" title="0">return Users</span>
  462. }
  463. func FinalSub(entUserId int, users map[*UserInfo]bool) map[string]interface{} <span class="cov0" title="0">{
  464. for k, _ := range users </span><span class="cov0" title="0">{
  465. if k.Entniche.DeptId &gt; 0 </span><span class="cov0" title="0">{
  466. k.Entniche.DeptName = EntDepts[k.Entniche.DeptId].Name
  467. staffIds := GetDeptUserIds(&amp;UserInfo{
  468. Entniche: &amp;Entniche{
  469. EntId: k.Entniche.EntId,
  470. EntName: k.Entniche.EntName,
  471. DeptId: k.Entniche.DeptId,
  472. DeptName: k.Entniche.DeptName,
  473. DisId: k.Entniche.DisId,
  474. },
  475. })
  476. if staffIds == nil </span><span class="cov0" title="0">{
  477. continue</span>
  478. }
  479. <span class="cov0" title="0">if staffIds[entUserId] </span><span class="cov0" title="0">{
  480. return k.SubSet
  481. }</span>
  482. } else<span class="cov0" title="0"> if k.Entniche.UserId &gt; 0 </span><span class="cov0" title="0">{
  483. return k.SubSet
  484. }</span> else<span class="cov0" title="0"> {
  485. continue</span>
  486. }
  487. }
  488. <span class="cov0" title="0">return nil</span>
  489. }
  490. func GetDeptUserIds(ui *UserInfo) map[int]bool <span class="cov0" title="0">{
  491. if EntDepts[ui.Entniche.DeptId].Subdis == 0 </span><span class="cov0" title="0">{
  492. logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "没有开启订阅分发,过滤掉")
  493. return nil
  494. }</span> else<span class="cov0" title="0"> if EntDepts[ui.Entniche.DeptId].Nodiff == 0 &amp;&amp; ui.Entniche.DisId == "" </span><span class="cov0" title="0">{
  495. logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "没有开启全员无差别接收,并且没有分发规则,过滤掉")
  496. return nil
  497. }</span>
  498. //对我的对着生效的用户
  499. <span class="cov0" title="0">myIds := map[int]bool{}
  500. //打开了全员无差别,下面所有员工都生效
  501. if EntDepts[ui.Entniche.DeptId].Nodiff == 1 </span><span class="cov0" title="0">{
  502. for _, v := range EntDeptUsers[ui.Entniche.DeptId] </span><span class="cov0" title="0">{
  503. myIds[v.UserId] = true
  504. }</span>
  505. <span class="cov0" title="0">for _, v := range EntChildDept[ui.Entniche.DeptId] </span><span class="cov0" title="0">{
  506. for _, vv := range EntDeptUsers[v.Id] </span><span class="cov0" title="0">{
  507. myIds[vv.UserId] = true
  508. }</span>
  509. }
  510. <span class="cov0" title="0">logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "该部门打开了全员无差别", len(myIds), "人接收")</span>
  511. } else<span class="cov0" title="0"> if ui.Entniche.DisId != "" </span><span class="cov0" title="0">{
  512. for _, v := range EntRuleUsers[ui.Entniche.DisId] </span><span class="cov0" title="0">{
  513. myIds[v.UserId] = true
  514. }</span>
  515. <span class="cov0" title="0">logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "该规则开启了订阅分发", ui.Entniche.DisId, "规则分发了", len(myIds), "人")</span>
  516. }
  517. //我的上级部门,过滤掉本部门的人
  518. <span class="cov0" title="0">for _, v := range EntParentDept[ui.Entniche.DeptId] </span><span class="cov0" title="0">{
  519. //看我的上级部门,有没有开启订阅分发
  520. if EntDepts[v.Pid].Subdis == 0 </span><span class="cov0" title="0">{
  521. continue</span>
  522. }
  523. //看我的上级部门,有没有全员无差别接收
  524. <span class="cov0" title="0">if EntDepts[v.Pid].Nodiff == 1 </span><span class="cov0" title="0">{
  525. logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, ui.Entniche.DisId, "上级部门", v.Pid, "打开了全员无差别开关,过滤掉")
  526. return nil
  527. }</span>
  528. //看我的上级部门,有没有对我设置规则
  529. <span class="cov0" title="0">for _, vv := range EntDeptDis[v.Pid] </span><span class="cov0" title="0">{
  530. for _, vvv := range EntRuleUsers[vv.Id] </span><span class="cov0" title="0">{
  531. _, ok := myIds[vvv.UserId]
  532. if !ok </span><span class="cov0" title="0">{
  533. continue</span>
  534. }
  535. <span class="cov0" title="0">delete(myIds, vvv.UserId)
  536. logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, "上级部门", v.Pid, "对我设置的有", vvv.RuleId, "分发规则,此规则作废", vvv.UserId)</span>
  537. }
  538. }
  539. }
  540. <span class="cov0" title="0">logx.Info(ui.Entniche.EntName, ui.Entniche.EntId, ui.Entniche.DeptName, ui.Entniche.DeptId, ui.Entniche.DisId, "该规则匹配到", len(myIds), "人")
  541. return myIds</span>
  542. }
  543. </pre>
  544. <pre class="file" id="file2" style="display: none">// @Description 订阅设置相关
  545. package service
  546. import (
  547. "errors"
  548. "jyBXSubscribe/entity"
  549. "log"
  550. "strconv"
  551. "app.yhyue.com/moapp/jybase/common"
  552. "app.yhyue.com/moapp/jybase/mongodb"
  553. "github.com/zeromicro/go-zero/core/logx"
  554. )
  555. //
  556. type SubseribeService struct {
  557. Mgo *mongodb.MongodbSim
  558. UserId string //mongodb 的用户id
  559. Types string //订阅信息产品类型 超级订阅、大会员、商机管理、免费订阅...
  560. Area map[string]interface{} //地区
  561. Buyerclass []string //采购单位类型
  562. Items []map[string]interface{} //关键词
  563. Infotype []string //信息类型
  564. Matchway string //匹配方式 1标题 2正文
  565. Projectmatch string //项目匹配 1开始 0关闭
  566. Ratemode string // 1:实时推送,2:每天9点推送,3:每周推送,4:每月推送 5:每日推送两次
  567. Apppush string //app推送 1开启 0关闭
  568. Mailpush string //邮箱推送 1开启 0关闭
  569. Mail string //邮箱
  570. }
  571. // @description 订阅设置相关修改
  572. // @param SubseribeService 用户信息相关
  573. // @return int64 是否成功 1成功 -1失败
  574. // @return error 错误信息
  575. //TODO 后期需要实现 查询各个身份的订阅设置修改[目前只实现了超级订阅]
  576. func (this *SubseribeService) Update() (int64, error) <span class="cov8" title="1">{
  577. if this.UserId == "" </span><span class="cov8" title="1">{
  578. return -1, errors.New(entity.UPDATE_ERROR_MSG)
  579. }</span>
  580. //查询条件
  581. <span class="cov8" title="1">query := map[string]interface{}{
  582. "_id": mongodb.StringTOBsonId(this.UserId),
  583. }
  584. //查询字段
  585. fields := `{"i_vip_status":1,"o_vipjy":1}`
  586. //查询用户信息
  587. r, ok := this.Mgo.FindOneByField(entity.User, query, fields)
  588. if !ok || r == nil || len(*r) == 0 </span><span class="cov0" title="0">{
  589. logx.Error("未找到用户")
  590. return -1, errors.New(entity.UPDATE_ERROR_MSG)
  591. }</span>
  592. //判断用户权益
  593. <span class="cov8" title="1">vip_status := common.Int64All((*r)["i_vip_status"])
  594. if vip_status &lt;= 0 </span><span class="cov0" title="0">{
  595. logx.Error("用户暂无权益")
  596. return -1, errors.New(entity.UPDATE_ERROR_MSG)
  597. }</span>
  598. //权益通过,获取要修改的参数
  599. <span class="cov8" title="1">setMap := map[string]interface{}{}
  600. if this.Area != nil </span><span class="cov8" title="1">{
  601. setMap["o_vipjy.o_area"] = this.Area
  602. }</span>
  603. <span class="cov8" title="1">if this.Buyerclass != nil </span><span class="cov0" title="0">{
  604. setMap["o_vipjy.a_buyerclass"] = this.Buyerclass
  605. }</span>
  606. <span class="cov8" title="1">if this.Items != nil </span><span class="cov8" title="1">{
  607. setMap["o_vipjy.a_items"] = this.Items
  608. }</span>
  609. <span class="cov8" title="1">if this.Infotype != nil </span><span class="cov0" title="0">{
  610. setMap["o_vipjy.a_infotype"] = this.Infotype
  611. }</span>
  612. <span class="cov8" title="1">if this.Matchway != "" </span><span class="cov0" title="0">{
  613. i_matchway, _ := strconv.Atoi(this.Matchway)
  614. setMap["o_vipjy.i_matchway"] = i_matchway
  615. }</span>
  616. <span class="cov8" title="1">if this.Projectmatch != "" </span><span class="cov0" title="0">{
  617. i_projectmatch, _ := strconv.Atoi(this.Projectmatch)
  618. setMap["o_vipjy.i_projectmatch"] = i_projectmatch
  619. }</span>
  620. <span class="cov8" title="1">if this.Ratemode != "" </span><span class="cov0" title="0">{
  621. i_ratemode, _ := strconv.Atoi(this.Ratemode)
  622. setMap["o_vipjy.i_ratemode"] = i_ratemode
  623. }</span>
  624. <span class="cov8" title="1">if this.Apppush != "" </span><span class="cov0" title="0">{
  625. i_apppush, _ := strconv.Atoi(this.Apppush)
  626. setMap["o_vipjy.i_apppush"] = i_apppush
  627. }</span>
  628. <span class="cov8" title="1">if this.Mailpush != "" </span><span class="cov0" title="0">{
  629. i_mailpush, _ := strconv.Atoi(this.Mailpush)
  630. setMap["o_vipjy.i_mailpush"] = i_mailpush
  631. }</span>
  632. <span class="cov8" title="1">if this.Mail != "" </span><span class="cov0" title="0">{
  633. setMap["o_vipjy.s_email"] = this.Mail
  634. }</span>
  635. <span class="cov8" title="1">log.Println(setMap)
  636. if ok := this.Mgo.UpdateById(entity.User, this.UserId, map[string]interface{}{
  637. "$set": setMap,
  638. }); ok </span><span class="cov8" title="1">{
  639. return 1, nil
  640. }</span>
  641. <span class="cov0" title="0">return -1, errors.New(entity.UPDATE_ERROR_MSG)</span>
  642. }
  643. </pre>
  644. </div>
  645. </body>
  646. <script>
  647. (function() {
  648. var files = document.getElementById('files');
  649. var visible;
  650. files.addEventListener('change', onChange, false);
  651. function select(part) {
  652. if (visible)
  653. visible.style.display = 'none';
  654. visible = document.getElementById(part);
  655. if (!visible)
  656. return;
  657. files.value = part;
  658. visible.style.display = 'block';
  659. location.hash = part;
  660. }
  661. function onChange() {
  662. select(files.value);
  663. window.scrollTo(0, 0);
  664. }
  665. if (location.hash != "") {
  666. select(location.hash.substr(1));
  667. }
  668. if (!visible) {
  669. select("file0");
  670. }
  671. })();
  672. </script>
  673. </html>