|
@@ -4,12 +4,13 @@ import (
|
|
"context"
|
|
"context"
|
|
"database/sql"
|
|
"database/sql"
|
|
"fmt"
|
|
"fmt"
|
|
- "log"
|
|
|
|
"math"
|
|
"math"
|
|
"sort"
|
|
"sort"
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
|
+ "app.yhyue.com/moapp/jybase/redis"
|
|
|
|
+
|
|
. "app.yhyue.com/moapp/jybase/common"
|
|
. "app.yhyue.com/moapp/jybase/common"
|
|
. "app.yhyue.com/moapp/jybase/date"
|
|
. "app.yhyue.com/moapp/jybase/date"
|
|
"app.yhyue.com/moapp/jybase/encrypt"
|
|
"app.yhyue.com/moapp/jybase/encrypt"
|
|
@@ -39,27 +40,27 @@ type networkTreeChild struct {
|
|
CreateTime string `json:"createTime"`
|
|
CreateTime string `json:"createTime"`
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *networkTree) Len() int {
|
|
|
|
- return len(s.Children)
|
|
|
|
|
|
+func (n *networkTree) Len() int {
|
|
|
|
+ return len(n.Children)
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *networkTree) Less(i, j int) bool {
|
|
|
|
- if s.Name == "甲方" {
|
|
|
|
- return s.Children[i].CompanyName < s.Children[j].CompanyName
|
|
|
|
|
|
+func (n *networkTree) Less(i, j int) bool {
|
|
|
|
+ if n.Name == "甲方" {
|
|
|
|
+ return n.Children[i].CompanyName < n.Children[j].CompanyName
|
|
}
|
|
}
|
|
- it, err1 := time.ParseInLocation(Date_Full_Layout, s.Children[i].CreateTime, time.Local)
|
|
|
|
|
|
+ it, err1 := time.ParseInLocation(Date_Full_Layout, n.Children[i].CreateTime, time.Local)
|
|
if err1 != nil {
|
|
if err1 != nil {
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
- jt, err2 := time.ParseInLocation(Date_Full_Layout, s.Children[j].CreateTime, time.Local)
|
|
|
|
|
|
+ jt, err2 := time.ParseInLocation(Date_Full_Layout, n.Children[j].CreateTime, time.Local)
|
|
if err2 != nil {
|
|
if err2 != nil {
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
return it.Unix() < jt.Unix()
|
|
return it.Unix() < jt.Unix()
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *networkTree) Swap(i, j int) {
|
|
|
|
- s.Children[i], s.Children[j] = s.Children[j], s.Children[i]
|
|
|
|
|
|
+func (n *networkTree) Swap(i, j int) {
|
|
|
|
+ n.Children[i], n.Children[j] = n.Children[j], n.Children[i]
|
|
}
|
|
}
|
|
|
|
|
|
type projectInfo struct {
|
|
type projectInfo struct {
|
|
@@ -103,6 +104,40 @@ type myNetwork struct {
|
|
Create_time string
|
|
Create_time string
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+type nodeTree struct {
|
|
|
|
+ NAME string
|
|
|
|
+ ID string
|
|
|
|
+ SZ_PID0 string
|
|
|
|
+ SZ_PID1 string
|
|
|
|
+ SZ_PID2 string
|
|
|
|
+ SZ_PID3 string
|
|
|
|
+ CODE string
|
|
|
|
+ PCODE string
|
|
|
|
+ DATACOUNT int64
|
|
|
|
+ SZ_LEVEL int
|
|
|
|
+ SZ_LEAF int
|
|
|
|
+ TYPE string
|
|
|
|
+ MYID string
|
|
|
|
+ MYTYPE string
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+type nodeTrees []*nodeTree
|
|
|
|
+
|
|
|
|
+func (n *nodeTrees) Len() int {
|
|
|
|
+ return len(*n)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (n *nodeTrees) Less(i, j int) bool {
|
|
|
|
+ if (*n)[i].PCODE == (*n)[j].PCODE {
|
|
|
|
+ return (*n)[i].CODE < (*n)[j].CODE
|
|
|
|
+ }
|
|
|
|
+ return (*n)[i].PCODE < (*n)[j].PCODE
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (n *nodeTrees) Swap(i, j int) {
|
|
|
|
+ (*n)[i], (*n)[j] = (*n)[j], (*n)[i]
|
|
|
|
+}
|
|
|
|
+
|
|
//人脉库-添加/修改人脉
|
|
//人脉库-添加/修改人脉
|
|
func (n *network) AddOrUpdate(in *types.AddOrUpdateReq) *types.Reply {
|
|
func (n *network) AddOrUpdate(in *types.AddOrUpdateReq) *types.Reply {
|
|
reply := &types.Reply{Data: map[string]interface{}{
|
|
reply := &types.Reply{Data: map[string]interface{}{
|
|
@@ -392,19 +427,20 @@ func (n *network) AllProject(in *types.AllprojectReq) (reply *types.Reply) {
|
|
list[v.Itype-1].Children = append(list[v.Itype-1].Children, ntc)
|
|
list[v.Itype-1].Children = append(list[v.Itype-1].Children, ntc)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- convList := []map[string]interface{}{}
|
|
|
|
|
|
+ parentConvList := &nodeTrees{}
|
|
|
|
+ convList := &nodeTrees{}
|
|
for _, v := range list {
|
|
for _, v := range list {
|
|
- pm := map[string]interface{}{
|
|
|
|
- "CODE": v.Name,
|
|
|
|
- "NAME": v.Name,
|
|
|
|
- "SZ_PID0": v.Name,
|
|
|
|
- "SZ_LEVEL": 0,
|
|
|
|
- "DATACOUNT": 0,
|
|
|
|
|
|
+ pm := &nodeTree{
|
|
|
|
+ CODE: v.Name,
|
|
|
|
+ NAME: v.Name,
|
|
|
|
+ SZ_PID0: v.Name,
|
|
|
|
+ SZ_LEVEL: 0,
|
|
|
|
+ DATACOUNT: 0,
|
|
}
|
|
}
|
|
if len(v.Children) > 0 {
|
|
if len(v.Children) > 0 {
|
|
- pm["SZ_LEAF"] = 0
|
|
|
|
|
|
+ pm.SZ_LEAF = 0
|
|
} else {
|
|
} else {
|
|
- pm["SZ_LEAF"] = 1
|
|
|
|
|
|
+ pm.SZ_LEAF = 1
|
|
}
|
|
}
|
|
sort.Sort(v)
|
|
sort.Sort(v)
|
|
id, pType, pMyType, pMyId := "", "", "", ""
|
|
id, pType, pMyType, pMyId := "", "", "", ""
|
|
@@ -423,7 +459,32 @@ func (n *network) AllProject(in *types.AllprojectReq) (reply *types.Reply) {
|
|
pMyType += vv.Type
|
|
pMyType += vv.Type
|
|
myChildIds, myChildTypes := "", ""
|
|
myChildIds, myChildTypes := "", ""
|
|
if in.Id == "" && v.Name == "甲方" {
|
|
if in.Id == "" && v.Name == "甲方" {
|
|
|
|
+ cccNodes := []*nodeTree{}
|
|
|
|
+ cccIndexMap := map[string]int{}
|
|
for _, vvv := range firstpartyChild[vv.CompanyId] {
|
|
for _, vvv := range firstpartyChild[vv.CompanyId] {
|
|
|
|
+ cccIndex, cccOk := cccIndexMap[vvv.Name]
|
|
|
|
+ if cccOk {
|
|
|
|
+ cccNodes[cccIndex].ID += "," + vvv.CompanyId
|
|
|
|
+ cccNodes[cccIndex].MYID += "," + vvv.CompanyId
|
|
|
|
+ cccNodes[cccIndex].TYPE += ",firstparty"
|
|
|
|
+ cccNodes[cccIndex].MYTYPE += ",firstparty"
|
|
|
|
+ } else {
|
|
|
|
+ cccNodes = append(cccNodes, &nodeTree{
|
|
|
|
+ NAME: vvv.Name,
|
|
|
|
+ ID: vvv.CompanyId,
|
|
|
|
+ SZ_PID0: v.Name,
|
|
|
|
+ SZ_PID1: v.Name + ":" + myId,
|
|
|
|
+ SZ_PID2: v.Name + ":" + myId + ":" + vvv.Name,
|
|
|
|
+ CODE: v.Name + ":" + myId + ":" + vvv.Name,
|
|
|
|
+ PCODE: v.Name + ":" + myId,
|
|
|
|
+ SZ_LEVEL: 2,
|
|
|
|
+ SZ_LEAF: 0,
|
|
|
|
+ TYPE: "firstparty",
|
|
|
|
+ MYID: vvv.CompanyId,
|
|
|
|
+ MYTYPE: "firstparty",
|
|
|
|
+ })
|
|
|
|
+ cccIndexMap[vvv.Name] = len(cccNodes) - 1
|
|
|
|
+ }
|
|
if id != "" {
|
|
if id != "" {
|
|
id += ","
|
|
id += ","
|
|
}
|
|
}
|
|
@@ -440,6 +501,24 @@ func (n *network) AllProject(in *types.AllprojectReq) (reply *types.Reply) {
|
|
myChildTypes += ","
|
|
myChildTypes += ","
|
|
}
|
|
}
|
|
myChildTypes += vv.Type
|
|
myChildTypes += vv.Type
|
|
|
|
+ *convList = append(*convList, &nodeTree{
|
|
|
|
+ NAME: vvv.CompanyName,
|
|
|
|
+ ID: vvv.CompanyId,
|
|
|
|
+ SZ_PID0: v.Name,
|
|
|
|
+ SZ_PID1: v.Name + ":" + myId,
|
|
|
|
+ SZ_PID2: cccNodes[cccIndex].SZ_PID2,
|
|
|
|
+ SZ_PID3: v.Name + ":" + myId + ":" + vvv.Name + ":" + vvv.CompanyId,
|
|
|
|
+ CODE: v.Name + ":" + myId + ":" + vvv.Name + ":" + vvv.CompanyId,
|
|
|
|
+ PCODE: cccNodes[cccIndex].CODE,
|
|
|
|
+ SZ_LEVEL: 3,
|
|
|
|
+ SZ_LEAF: 1,
|
|
|
|
+ TYPE: "firstparty",
|
|
|
|
+ MYID: vvv.CompanyId,
|
|
|
|
+ MYTYPE: "firstparty",
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ for _, cccNode := range cccNodes {
|
|
|
|
+ *convList = append(*convList, cccNode)
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
if id != "" {
|
|
if id != "" {
|
|
@@ -453,32 +532,34 @@ func (n *network) AllProject(in *types.AllprojectReq) (reply *types.Reply) {
|
|
myChildIds = myId
|
|
myChildIds = myId
|
|
myChildTypes = vv.Type
|
|
myChildTypes = vv.Type
|
|
}
|
|
}
|
|
- cm := map[string]interface{}{
|
|
|
|
- "NAME": vv.CompanyName,
|
|
|
|
- "ID": myChildIds,
|
|
|
|
- "SZ_PID0": v.Name,
|
|
|
|
- "SZ_PID1": v.Name + ":" + myId,
|
|
|
|
- "CODE": v.Name + ":" + myId,
|
|
|
|
- "PCODE": v.Name,
|
|
|
|
- "DATACOUNT": vv.Count,
|
|
|
|
- "SZ_LEVEL": 1,
|
|
|
|
- "SZ_LEAF": 1,
|
|
|
|
- "TYPE": myChildTypes,
|
|
|
|
- "MYID": myId,
|
|
|
|
- "MYTYPE": vv.Type,
|
|
|
|
|
|
+ cm := &nodeTree{
|
|
|
|
+ NAME: vv.CompanyName,
|
|
|
|
+ ID: myChildIds,
|
|
|
|
+ SZ_PID0: v.Name,
|
|
|
|
+ SZ_PID1: v.Name + ":" + myId,
|
|
|
|
+ CODE: v.Name + ":" + myId,
|
|
|
|
+ PCODE: v.Name,
|
|
|
|
+ DATACOUNT: vv.Count,
|
|
|
|
+ SZ_LEVEL: 1,
|
|
|
|
+ SZ_LEAF: If(myChildIds == "", 1, 0).(int),
|
|
|
|
+ TYPE: myChildTypes,
|
|
|
|
+ MYID: myId,
|
|
|
|
+ MYTYPE: vv.Type,
|
|
}
|
|
}
|
|
- convList = append(convList, cm)
|
|
|
|
|
|
+ *convList = append(*convList, cm)
|
|
}
|
|
}
|
|
- pm["ID"] = id
|
|
|
|
- pm["TYPE"] = pType
|
|
|
|
- pm["MYTYPE"] = pMyType
|
|
|
|
- pm["MYID"] = pMyId
|
|
|
|
- convList = append(convList, pm)
|
|
|
|
|
|
+ pm.ID = id
|
|
|
|
+ pm.TYPE = pType
|
|
|
|
+ pm.MYTYPE = pMyType
|
|
|
|
+ pm.MYID = pMyId
|
|
|
|
+ *parentConvList = append(*parentConvList, pm)
|
|
}
|
|
}
|
|
|
|
+ sort.Sort(convList)
|
|
|
|
+ *parentConvList = append(*parentConvList, *convList...)
|
|
reply = &types.Reply{
|
|
reply = &types.Reply{
|
|
Data: map[string]interface{}{
|
|
Data: map[string]interface{}{
|
|
"count": count,
|
|
"count": count,
|
|
- "list": convList,
|
|
|
|
|
|
+ "list": parentConvList,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
return reply
|
|
return reply
|
|
@@ -691,7 +772,9 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
|
|
}
|
|
}
|
|
exportId += v
|
|
exportId += v
|
|
}
|
|
}
|
|
- export_url = "/subscribepay/network/projectExport?export_id=" + encrypt.SE.EncodeStringByCheck(exportId)
|
|
|
|
|
|
+ md5Id := GetMd5String(exportId)
|
|
|
|
+ redis.Put("newother", fmt.Sprintf("network_export_%s", md5Id), exportId, 259200)
|
|
|
|
+ export_url = "/subscribepay/network/projectExport?export_id=" + md5Id
|
|
}
|
|
}
|
|
url := ""
|
|
url := ""
|
|
if v.Qyxy_id != "" && (jump_type == "supplier" || jump_type == "adiffb") {
|
|
if v.Qyxy_id != "" && (jump_type == "supplier" || jump_type == "adiffb") {
|
|
@@ -860,7 +943,6 @@ func (n *network) Introduce_Firstparty(fpn map[string][]*firstpartyNetwork, entM
|
|
}
|
|
}
|
|
result[k].BuyerCount = int64(len(v))
|
|
result[k].BuyerCount = int64(len(v))
|
|
for _, vv := range v {
|
|
for _, vv := range v {
|
|
- log.Println(k, vv.CompanyName)
|
|
|
|
if entMonitor[vv.CompanyName] {
|
|
if entMonitor[vv.CompanyName] {
|
|
result[k].MonitorCount++
|
|
result[k].MonitorCount++
|
|
}
|
|
}
|