pkg.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package main
  2. import (
  3. "strings"
  4. "time"
  5. "unicode/utf8"
  6. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  7. )
  8. // 标讯分包基本信息-标讯版
  9. func CPBaseInfoFromBidding(tmp map[string]interface{}, tmpid string) map[string]interface{} {
  10. info := map[string]interface{}{}
  11. info["s_info_id"] = tmpid
  12. info["s_packagename"] = util.ObjToString(tmp["projectname"])
  13. if tmp["budget"] != nil {
  14. info["f_budget"] = util.Float64All(tmp["budget"])
  15. }
  16. if tmp["bidamount"] != nil {
  17. info["f_bidamount"] = util.Float64All(tmp["bidamount"])
  18. }
  19. info["d_createtime"] = time.Now().Format(util.Date_Full_Layout)
  20. return info
  21. }
  22. // 投标人相关信息-标讯版
  23. func CPBidderBiddingBaseInfo(tmp map[string]interface{}, tmpid string, pid int64) {
  24. s_winner := util.ObjToString(tmp["s_winner"])
  25. if s_winner == "" {
  26. return
  27. }
  28. info := map[string]interface{}{}
  29. info["s_info_id"] = tmpid
  30. info["i_package_id"] = pid
  31. info["d_createtime"] = time.Now().Format(util.Date_Full_Layout)
  32. wins := strings.Split(s_winner, ",")
  33. bidder_id, bidder_name, other_bidder_id := getWinsNameId(wins)
  34. info["s_bidder_id"] = bidder_id
  35. info["i_is_winner"] = 1
  36. if len(wins) > 1 {
  37. info["s_bidder_name"] = bidder_name
  38. info["s_other_bidder_name"] = s_winner
  39. info["s_other_bidder_id"] = other_bidder_id
  40. info["i_is_bidders"] = 1
  41. }
  42. //保存服务...
  43. saveBidderPool <- info
  44. //候选人相关情况
  45. o_win_ids, o_win_names := getWinerorder(tmp, wins[0])
  46. for k, v := range o_win_ids {
  47. o_info := map[string]interface{}{}
  48. o_info["s_info_id"] = tmpid
  49. o_info["i_package_id"] = pid
  50. o_info["s_bidder_id"] = v
  51. o_info["s_bidder_name"] = o_win_names[k]
  52. o_info["i_is_winner"] = 0
  53. o_info["d_updatetime"] = time.Now().Format(util.Date_Full_Layout)
  54. //保存服务...
  55. saveBidderPool <- info
  56. }
  57. }
  58. // 标讯分包标的物信息
  59. func CPBiddingPackageGoodsBaseInfo(tmp map[string]interface{}, tmpid string, pid int64) []map[string]interface{} {
  60. purchasinglist := IsMarkInterfaceMap(tmp["purchasinglist"])
  61. new_purlist := []map[string]interface{}{}
  62. for _, v := range purchasinglist {
  63. info := map[string]interface{}{}
  64. info["s_info_id"] = tmpid
  65. info["i_package_id"] = pid
  66. info["s_itemname"] = cleanLengthName(util.ObjToString(v["itemname"]), 255)
  67. info["s_brand"] = cleanLengthName(util.ObjToString(v["brandname"]), 255)
  68. info["s_model"] = cleanLengthName(util.ObjToString(v["model"]), 255)
  69. if number := util.IntAll(v["number"]); number > 0 && number < 1000000000 {
  70. info["i_num"] = number
  71. }
  72. if unitprice := util.Float64All(v["unitprice"]); unitprice > 0.0 && unitprice < 1000000000.0 {
  73. info["f_unit"] = unitprice
  74. }
  75. if totalprice := util.Float64All(v["totalprice"]); totalprice > 0.0 && totalprice < 1000000000.0 {
  76. info["f_totalprice"] = totalprice
  77. }
  78. info["d_createtime"] = time.Now().Format(util.Date_Full_Layout)
  79. new_purlist = append(new_purlist, info)
  80. }
  81. return new_purlist
  82. }
  83. // 标讯分包基本信息-分包版
  84. func CPBaseInfoFromPackage(pinfos map[string]interface{}, tmpid string) map[string]interface{} {
  85. info := map[string]interface{}{}
  86. info["s_info_id"] = tmpid
  87. for k, v := range pinfos {
  88. info["s_packagecode"] = k
  89. if pkg := util.ObjToMap(v); pkg != nil {
  90. info["s_packagename"] = util.ObjToString((*pkg)["name"])
  91. if (*pkg)["budget"] != nil {
  92. info["f_budget"] = util.Float64All((*pkg)["budget"])
  93. }
  94. if (*pkg)["bidamount"] != nil {
  95. info["f_bidamount"] = util.Float64All((*pkg)["bidamount"])
  96. }
  97. return info
  98. }
  99. }
  100. info["d_createtime"] = time.Now().Format(util.Date_Full_Layout)
  101. return info
  102. }
  103. // 投标人相关信息-分包版
  104. func CPBidderPackageBaseInfo(pinfos map[string]interface{}, tmp map[string]interface{}, tmpid string, pid int64, isF bool) {
  105. for _, v := range pinfos {
  106. pinfo := *util.ObjToMap(v)
  107. winner := util.ObjToString(pinfo["winner"])
  108. info := map[string]interface{}{}
  109. info["s_info_id"] = tmpid
  110. info["i_package_id"] = pid
  111. info["d_createtime"] = time.Now().Format(util.Date_Full_Layout)
  112. wins := strings.Split(winner, ",")
  113. bidder_id, bidder_name, other_bidder_id := getWinsNameId(wins)
  114. info["s_bidder_id"] = bidder_id
  115. info["i_is_winner"] = 1
  116. if len(wins) > 1 {
  117. info["s_bidder_name"] = bidder_name
  118. info["s_other_bidder_name"] = winner
  119. info["s_other_bidder_id"] = other_bidder_id
  120. info["i_is_bidders"] = 1
  121. }
  122. //保存服务...
  123. saveBidderPool <- info
  124. //候选人相关情况
  125. if isF {
  126. o_win_ids, o_win_names := getWinerorder(tmp, wins[0])
  127. for k, v := range o_win_ids {
  128. o_info := map[string]interface{}{}
  129. o_info["s_info_id"] = tmpid
  130. o_info["s_bidder_id"] = v
  131. o_info["s_bidder_name"] = o_win_names[k]
  132. o_info["i_is_winner"] = 0
  133. o_info["d_updatetime"] = time.Now().Format(util.Date_Full_Layout)
  134. //保存服务...
  135. saveBidderPool <- info
  136. }
  137. }
  138. }
  139. }
  140. // 获取所有投标人的相关标识
  141. func getWinsNameId(wins []string) (string, string, string) {
  142. win_id, win_name, win_ids := "", "", []string{}
  143. for k, v := range wins {
  144. code := GetNameId(v)
  145. if k == 0 {
  146. win_id = code
  147. win_name = v
  148. }
  149. win_ids = append(win_ids, code)
  150. }
  151. return win_id, win_name, strings.Join(win_ids, ",")
  152. }
  153. // 获取候选人相关信息
  154. func getWinerorder(tmp map[string]interface{}, win string) ([]string, []string) {
  155. o_win_names, o_win_ids := []string{}, []string{}
  156. winnerorder := IsMarkInterfaceMap(tmp["winnerorder"])
  157. for k, v := range winnerorder {
  158. if k >= 5 {
  159. break
  160. }
  161. entname := util.ObjToString(v["entname"])
  162. if entname != win {
  163. o_win_ids = append(o_win_ids, GetNameId(entname))
  164. o_win_names = append(o_win_names, entname)
  165. }
  166. }
  167. return o_win_ids, o_win_names
  168. }
  169. // 分包信息清洗与过滤...
  170. func filterPackageInfos(tmp map[string]interface{}) []map[string]interface{} {
  171. new_packages := []map[string]interface{}{}
  172. s_winner := util.ObjToString(tmp["s_winner"])
  173. if s_winner == "" {
  174. return new_packages
  175. }
  176. winArr := strings.Split(s_winner, ",")
  177. if packages := util.ObjToMap(tmp["package"]); packages != nil {
  178. for k, v := range *packages {
  179. if pkg := util.ObjToMap(v); pkg != nil && k != "" {
  180. if win := util.ObjToString((*pkg)["winner"]); win != "" {
  181. if isExistsWins(winArr, win) {
  182. new_packages = append(new_packages, map[string]interface{}{k: v})
  183. }
  184. }
  185. }
  186. }
  187. }
  188. return new_packages
  189. }
  190. // 是否存在单位
  191. func isExistsWins(winArr []string, win string) bool {
  192. win = cleaname(win)
  193. for _, v := range winArr {
  194. if v == win {
  195. return true
  196. }
  197. }
  198. return false
  199. }
  200. // 简易清洗...
  201. func cleaname(name string) string {
  202. return name
  203. }
  204. // 通用长度清洗
  205. func cleanLengthName(name string, l int) string {
  206. new_name := name
  207. if utf8.RuneCountInString(name) > l {
  208. new_name = string(([]rune(new_name))[:l])
  209. }
  210. return new_name
  211. }