package main import ( util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "strings" "time" "unicode/utf8" ) // 标讯分包基本信息-标讯版 func CPBaseInfoFromBidding(tmp map[string]interface{}, tmpid string) map[string]interface{} { info := map[string]interface{}{} info["s_info_id"] = tmpid info["s_packagename"] = util.ObjToString(tmp["projectname"]) if tmp["budget"] != nil { info["f_budget"] = util.Float64All(tmp["budget"]) } if tmp["bidamount"] != nil { info["f_bidamount"] = util.Float64All(tmp["bidamount"]) } info["d_createtime"] = time.Now().Format(util.Date_Full_Layout) return info } // 投标人相关信息-标讯版 func CPBidderBiddingBaseInfo(tmp map[string]interface{}, tmpid string, pid int64) { s_winner := util.ObjToString(tmp["s_winner"]) if s_winner == "" { return } info := map[string]interface{}{} info["s_info_id"] = tmpid info["i_package_id"] = pid info["d_createtime"] = time.Now().Format(util.Date_Full_Layout) wins := strings.Split(s_winner, ",") bidder_id, bidder_name, other_bidder_id := getWinsNameId(wins) info["s_bidder_id"] = bidder_id info["i_is_winner"] = 1 if len(wins) > 1 { info["s_bidder_name"] = bidder_name info["s_other_bidder_name"] = s_winner info["s_other_bidder_id"] = other_bidder_id info["i_is_bidders"] = 1 } //保存服务... InsertGlobalMysqlData("dwd_f_bid_package_bidder_baseinfo", info, tmpid) //候选人相关情况 o_win_ids, o_win_names := getWinerorder(tmp, wins[0]) for k, v := range o_win_ids { o_info := map[string]interface{}{} o_info["s_info_id"] = tmpid o_info["i_package_id"] = pid o_info["s_bidder_id"] = v o_info["s_bidder_name"] = o_win_names[k] o_info["i_is_winner"] = 0 o_info["d_updatetime"] = time.Now().Format(util.Date_Full_Layout) //保存服务... InsertGlobalMysqlData("dwd_f_bid_package_bidder_baseinfo", info, tmpid) } } // 标讯分包标的物信息 func CPBiddingPackageGoodsBaseInfo(tmp map[string]interface{}, tmpid string, pid int64) []map[string]interface{} { purchasinglist := IsMarkInterfaceMap(tmp["purchasinglist"]) new_purlist := []map[string]interface{}{} for _, v := range purchasinglist { info := map[string]interface{}{} info["s_info_id"] = tmpid info["i_package_id"] = pid info["s_itemname"] = cleanLengthName(util.ObjToString(v["itemname"]), 255) info["s_brand"] = cleanLengthName(util.ObjToString(v["brandname"]), 255) info["s_model"] = cleanLengthName(util.ObjToString(v["model"]), 255) if number := util.IntAll(v["number"]); number > 0 && number < 1000000000 { info["i_num"] = number } if unitprice := util.Float64All(v["unitprice"]); unitprice > 0.0 && unitprice < 1000000000.0 { info["f_unit"] = unitprice } if totalprice := util.Float64All(v["totalprice"]); totalprice > 0.0 && totalprice < 1000000000.0 { info["f_totalprice"] = totalprice } info["d_createtime"] = time.Now().Format(util.Date_Full_Layout) new_purlist = append(new_purlist, info) } return new_purlist } // 标讯分包基本信息-分包版 func CPBaseInfoFromPackage(pinfos map[string]interface{}, tmpid string) map[string]interface{} { info := map[string]interface{}{} info["s_info_id"] = tmpid for k, v := range pinfos { info["s_packagecode"] = k if pkg := util.ObjToMap(v); pkg != nil { info["s_packagename"] = util.ObjToString((*pkg)["name"]) if (*pkg)["budget"] != nil { info["f_budget"] = util.Float64All((*pkg)["budget"]) } if (*pkg)["bidamount"] != nil { info["f_bidamount"] = util.Float64All((*pkg)["bidamount"]) } return info } } info["d_createtime"] = time.Now().Format(util.Date_Full_Layout) return info } // 投标人相关信息-分包版 func CPBidderPackageBaseInfo(pinfos map[string]interface{}, tmp map[string]interface{}, tmpid string, pid int64, isF bool) { for _, v := range pinfos { pinfo := *util.ObjToMap(v) winner := util.ObjToString(pinfo["winner"]) info := map[string]interface{}{} info["s_info_id"] = tmpid info["i_package_id"] = pid info["d_createtime"] = time.Now().Format(util.Date_Full_Layout) wins := strings.Split(winner, ",") bidder_id, bidder_name, other_bidder_id := getWinsNameId(wins) info["s_bidder_id"] = bidder_id info["i_is_winner"] = 1 if len(wins) > 1 { info["s_bidder_name"] = bidder_name info["s_other_bidder_name"] = winner info["s_other_bidder_id"] = other_bidder_id info["i_is_bidders"] = 1 } //保存服务... InsertGlobalMysqlData("dwd_f_bid_package_bidder_baseinfo", info, tmpid) //候选人相关情况 if isF { o_win_ids, o_win_names := getWinerorder(tmp, wins[0]) for k, v := range o_win_ids { o_info := map[string]interface{}{} o_info["s_info_id"] = tmpid o_info["s_bidder_id"] = v o_info["s_bidder_name"] = o_win_names[k] o_info["i_is_winner"] = 0 o_info["d_updatetime"] = time.Now().Format(util.Date_Full_Layout) //保存服务... InsertGlobalMysqlData("dwd_f_bid_package_bidder_baseinfo", info, tmpid) } } } } // 获取所有投标人的相关标识 func getWinsNameId(wins []string) (string, string, string) { win_id, win_name, win_ids := "", "", []string{} for k, v := range wins { code := getNameId(v) if k == 0 { win_id = code win_name = v } win_ids = append(win_ids, code) } return win_id, win_name, strings.Join(win_ids, ",") } // 获取候选人相关信息 func getWinerorder(tmp map[string]interface{}, win string) ([]string, []string) { o_win_names, o_win_ids := []string{}, []string{} winnerorder := IsMarkInterfaceMap(tmp["winnerorder"]) for k, v := range winnerorder { if k >= 5 { break } entname := util.ObjToString(v["entname"]) if entname != win { o_win_ids = append(o_win_ids, getNameId(entname)) o_win_names = append(o_win_names, entname) } } return o_win_ids, o_win_names } // 分包信息清洗与过滤... func filterPackageInfos(tmp map[string]interface{}) []map[string]interface{} { new_packages := []map[string]interface{}{} s_winner := util.ObjToString(tmp["s_winner"]) if s_winner == "" { return new_packages } winArr := strings.Split(s_winner, ",") if packages := util.ObjToMap(tmp["package"]); packages != nil { for k, v := range *packages { if pkg := util.ObjToMap(v); pkg != nil && k != "" { if win := util.ObjToString((*pkg)["winner"]); win != "" { if isExistsWins(winArr, win) { new_packages = append(new_packages, map[string]interface{}{k: v}) } } } } } return new_packages } // 是否存在单位 func isExistsWins(winArr []string, win string) bool { win = cleaname(win) for _, v := range winArr { if v == win { return true } } return false } // 简易清洗... func cleaname(name string) string { return name } // 通用长度清洗 func cleanLengthName(name string, l int) string { new_name := name if utf8.RuneCountInString(name) > l { new_name = string(([]rune(new_name))[:l]) } return new_name }