|
@@ -13,14 +13,16 @@ import (
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
- IndexProjectSet = "projectset" // 项目信息es index
|
|
|
- TypeProjectSet = "projectset" // 项目信息es type
|
|
|
- PositionTypeEnt = 1 // 职位类型企业
|
|
|
- PositionTypePersonal = 0 // 职位类型个人
|
|
|
- ButtonValueParticipate = 0 // 参标按钮 显示值 0-参标
|
|
|
- ButtonValueParticipated = 1 // 按钮显示值 列表页面 1-已参标 详情页 1-终止参标
|
|
|
- RoleEntManager = 1 // 企业管理员角色
|
|
|
- RoleDepartManager = 2 // 部门管理员角色
|
|
|
+ IndexProjectSet = "projectset" // 项目信息es index
|
|
|
+ TypeProjectSet = "projectset" // 项目信息es type
|
|
|
+ TableEntnicheUser = "entniche_user" // 企业用户表
|
|
|
+ PositionTypeEnt = 1 // 职位类型企业
|
|
|
+ PositionTypePersonal = 0 // 职位类型个人
|
|
|
+ ButtonValueParticipate = 0 // 参标按钮 显示值 0-参标
|
|
|
+ ButtonValueParticipated = 1 // 按钮显示值 列表页面 1-已参标
|
|
|
+ RoleEntManager = 1 // 企业管理员角色
|
|
|
+ RoleDepartManager = 2 // 部门管理员角色
|
|
|
+
|
|
|
)
|
|
|
|
|
|
type ParticipateBid struct {
|
|
@@ -66,34 +68,6 @@ func (p *ParticipateBid) GetProjectByInfoId(infoIds []string) *[]map[string]inte
|
|
|
|
|
|
}
|
|
|
|
|
|
-// HandlerProjectId 返回信息的映射集合,项目id列表
|
|
|
-func HandlerProjectId(projectInfos []map[string]interface{}, infoIds map[string]struct{}) (map[string]string, []string) {
|
|
|
- result := map[string]string{}
|
|
|
- projectIdList := []string{}
|
|
|
- // 记录infoid 和项目id 对应关系 用于最后处理返回的数据
|
|
|
- for i := 0; i < len(projectInfos); i++ {
|
|
|
- _id := common.ObjToString(projectInfos[i]["_id"])
|
|
|
- projectIdList = append(projectIdList, _id)
|
|
|
- list, b := projectInfos[i]["list"].([]interface{})
|
|
|
- if !b {
|
|
|
- continue
|
|
|
- }
|
|
|
- for j := 0; j < len(list); j++ {
|
|
|
- infoidMap := common.ObjToMap(list[j])
|
|
|
- if infoidMap == nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- infoid := common.ObjToString((*infoidMap)["infoid"])
|
|
|
- if _, ok := infoIds[infoid]; ok && infoid != "" {
|
|
|
- result[infoid] = _id
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return result, projectIdList
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
// PersonalExistProject 个人版要展示的参标按钮 查询出已经参标的项目信息 用于后边格式化数据
|
|
|
func (p *ParticipateBid) PersonalExistProject(projectId []string) map[string]struct{} {
|
|
|
// 1. 查询出已经参标的
|
|
@@ -106,7 +80,7 @@ func (p *ParticipateBid) PersonalExistProject(projectId []string) map[string]str
|
|
|
}
|
|
|
argStr := strings.Join(arg, ",")
|
|
|
query := "select project_id from participate_user where position_id = ? and project_id in (%s) and state>=0"
|
|
|
- rs := init.MainMysql.SelectBySql(query, fmt.Sprintf(query, argStr), value)
|
|
|
+ rs := init.BaseMysql.SelectBySql(query, fmt.Sprintf(query, argStr), value)
|
|
|
existProjectSet := map[string]struct{}{}
|
|
|
if rs != nil && len(*rs) > 0 { // 如果查到了 说明已经参标 这部分应该显示已参标
|
|
|
// 处理成map
|
|
@@ -118,7 +92,7 @@ func (p *ParticipateBid) PersonalExistProject(projectId []string) map[string]str
|
|
|
return existProjectSet
|
|
|
}
|
|
|
|
|
|
-// ListPersonalFormat 列表页个人 参标按钮 格式化数据
|
|
|
+// ListPersonalFormat 列表页个人版 参标按钮 格式化数据
|
|
|
func (p *ParticipateBid) ListPersonalFormat(existProjectSet map[string]struct{}, infoM map[string]string) []*bxcore.ShowInfo {
|
|
|
// 处理成 要返回的返回数据
|
|
|
var formatList []*bxcore.ShowInfo
|
|
@@ -138,15 +112,13 @@ func (p *ParticipateBid) ListPersonalFormat(existProjectSet map[string]struct{},
|
|
|
// DetailPersonalFormat 详情页个人版 按钮格式化数据
|
|
|
func (p *ParticipateBid) DetailPersonalFormat(existProjectSet map[string]struct{}) bxcore.ParticipateDetailInfo {
|
|
|
// 处理成 要返回的返回数据
|
|
|
- formatData := bxcore.ParticipateDetailInfo{
|
|
|
- ShowParticipate: true,
|
|
|
- }
|
|
|
- // 存在在说明已经参标 展示未终止参标
|
|
|
+ formatData := bxcore.ParticipateDetailInfo{}
|
|
|
+ // 存在在说明已经参标 显示终止参标
|
|
|
if len(existProjectSet) > 0 {
|
|
|
- formatData.ShowValue = ButtonValueParticipated
|
|
|
+ formatData.ShowStopParticipate = true
|
|
|
} else {
|
|
|
- // 不存在则说明 未参标 展示为参标
|
|
|
- formatData.ShowValue = ButtonValueParticipate
|
|
|
+ // 不存在则说明 未参标 参标按钮展示
|
|
|
+ formatData.ShowParticipate = true
|
|
|
}
|
|
|
return formatData
|
|
|
}
|
|
@@ -160,9 +132,9 @@ func (p *ParticipateBid) EntExistProject(projectId []string) map[string]string {
|
|
|
arg = append(arg, "?")
|
|
|
value = append(value, p.PositionId)
|
|
|
}
|
|
|
- argStr := strings.Join(arg, ",")
|
|
|
+ argStr := strings.Join(arg, ",") // todo
|
|
|
query := "select GROUP_CONCAT(ent_user_id) as personIds ,project_id from participate_user where ent_id=? and project_id in (%s) and state>=0 group by project_id "
|
|
|
- rs := init.MainMysql.SelectBySql(query, fmt.Sprintf(query, argStr), value)
|
|
|
+ rs := init.BaseMysql.SelectBySql(query, fmt.Sprintf(query, argStr), value)
|
|
|
existProjectMap := map[string]string{}
|
|
|
if rs != nil && len(*rs) > 0 { // 如果查到了 说明这个项目公司里面已经参标 处理一下信息用于后边判断是否是自己参标
|
|
|
// 处理成map
|
|
@@ -181,13 +153,13 @@ func (p *ParticipateBid) EntExistProject(projectId []string) map[string]string {
|
|
|
// - 有参标人 判断是否包含自己
|
|
|
// 如果包含自己 显示已参标
|
|
|
// 不包含自己 则判断企业是否允许多人参标 允许 则显示参标按钮 不允许 则不显示
|
|
|
-func (p ParticipateBid) ListEntFormat(existProjectMap, infoM map[string]string, isAllow bool) []*bxcore.ShowInfo {
|
|
|
+func (p *ParticipateBid) ListEntFormat(existProjectMap, infoM map[string]string, isAllow bool) []*bxcore.ShowInfo {
|
|
|
// 处理成 要返回的返回数据
|
|
|
var formatList []*bxcore.ShowInfo
|
|
|
for k, v := range infoM {
|
|
|
buttonValue := ButtonValueParticipate // 不存在时-显示参标
|
|
|
if userIds, ok := existProjectMap[v]; ok { // 存在时 说明项目在企业下已经参标 需要进一步判断
|
|
|
- // 判断已经存在的参标人中是否包含自己 // 包含时 显示成已参标
|
|
|
+ // 判断已经存在的参标人中是否包含自己 包含时 显示成已参标
|
|
|
if ContainId(userIds, common.InterfaceToStr(p.EntUserId)) {
|
|
|
buttonValue = ButtonValueParticipated
|
|
|
} else if isAllow { // 不包含自己时需要 进一步判断公司设置是否允许多人参标
|
|
@@ -207,55 +179,71 @@ func (p ParticipateBid) ListEntFormat(existProjectMap, infoM map[string]string,
|
|
|
|
|
|
}
|
|
|
|
|
|
-// DetailEntFormat 企业版 详情页数据格式化
|
|
|
+// DetailEntFormat 企业版 详情页数据格式化 返回数据 参标按钮 终止参标按钮 转给同事按钮 参标人姓名
|
|
|
// 判断企业下是否有参标人
|
|
|
-// - 无参标人 展示参标按钮
|
|
|
-// - 有参标人 判断是否包含本人 包含则展示 终止参标按钮 不包含则再判断用户身份
|
|
|
-// - 企业管理员 显示终止参标
|
|
|
-// - 部门管理员 如果参标人中有该部门的人员 显示终止参标 否则 判断是否允许多人参标 允许多人参标 显示参标按钮 否则不显示
|
|
|
-// - 员工: 判断是否允许多人参标 允许多人则展示 参标 不允许多人则不展示按钮
|
|
|
-func (p ParticipateBid) DetailEntFormat(existProjectMap map[string]string, isAllow bool) (formatData bxcore.ParticipateDetailInfo) {
|
|
|
+// - 无参标人 展示参标按钮 其余按钮不显示
|
|
|
+// - 有参标人 展示参标人信息
|
|
|
+// - 管理员 展示 转给同事、终止参标
|
|
|
+// - 包含自己 展示终止参标 不包含自己如果允许多人参标 展示参标按钮
|
|
|
+//
|
|
|
+func (p *ParticipateBid) DetailEntFormat(existProjectMap map[string]string, isAllow bool) (formatData bxcore.ParticipateDetailInfo) {
|
|
|
// 处理成 要返回的返回数据
|
|
|
- formatData = bxcore.ParticipateDetailInfo{
|
|
|
- ShowParticipate: true,
|
|
|
- }
|
|
|
+ formatData = bxcore.ParticipateDetailInfo{}
|
|
|
if len(existProjectMap) == 0 {
|
|
|
- // 不存在则说明 当前未参标 按钮展示为参标
|
|
|
- formatData.ShowValue = ButtonValueParticipate
|
|
|
+ // 无参标人 展示参标按钮 其余按钮不显示
|
|
|
+ formatData.ShowParticipate = true
|
|
|
return
|
|
|
}
|
|
|
persons := ""
|
|
|
- for _, v := range existProjectMap { // 这个是为了取参标人信息 列表页是多条数据 详情页这里 map里面只会有一条数据
|
|
|
+ for _, v := range existProjectMap { // 这是为了取参标人id信息 列表页是多条数据 详情页这里 map里面只会有一条数据
|
|
|
persons = v
|
|
|
break
|
|
|
}
|
|
|
- // todo 参标人信息 处理成姓名
|
|
|
-
|
|
|
- // 判断是不是自己
|
|
|
- // 是自己则展示终止参标
|
|
|
- if ContainId(persons, fmt.Sprint(p.EntUserId)) {
|
|
|
- formatData.ShowValue = ButtonValueParticipated
|
|
|
- return
|
|
|
+ // 参标人信息 处理成姓名
|
|
|
+ nameRs := GetNameByUserIds(persons)
|
|
|
+ if nameRs != nil && len(*nameRs) > 0 {
|
|
|
+ formatData.UserName = common.ObjToString((*nameRs)[0]["name"])
|
|
|
}
|
|
|
- // 不是自己则需要再 判断身份 员工 / 企业管理员 部门管理员
|
|
|
- switch p.EntRoleId {
|
|
|
- case RoleEntManager:
|
|
|
- // 如果是企业管理员 显示 终止参标
|
|
|
- formatData.ShowValue = ButtonValueParticipated
|
|
|
- case RoleDepartManager:
|
|
|
- // 如果是部门管理员 判断是否包含该部门下的 如果是 显示终止参标 如果不是 判断是否允许多人参标 允许 显示参标 不允许 则不显示
|
|
|
+ // 如果是管理员 显示 终止参标按钮 、转给同事按钮
|
|
|
+ if p.EntRoleId == RoleEntManager || p.EntRoleId == RoleDepartManager {
|
|
|
+ formatData.ShowStopParticipate = true
|
|
|
+ formatData.ShowTransfer = true
|
|
|
+ }
|
|
|
+ // 如果包含自己 显示终止参标按钮
|
|
|
+ if ContainId(persons, common.InterfaceToStr(p.EntUserId)) {
|
|
|
+ formatData.ShowStopParticipate = true
|
|
|
+ } else if isAllow { // 如果允许多人 显示参标按钮
|
|
|
+ formatData.ShowParticipate = true
|
|
|
+ }
|
|
|
+ return
|
|
|
|
|
|
- default:
|
|
|
- // 如果是员工 判断是否允许多人
|
|
|
- if isAllow {
|
|
|
- formatData.ShowValue = ButtonValueParticipate // 是 -显示参标
|
|
|
- } else {
|
|
|
- formatData.ShowParticipate = false // 否 不显示按钮
|
|
|
- }
|
|
|
+}
|
|
|
|
|
|
+// HandlerProjectId 返回信息的映射集合,项目id列表
|
|
|
+func HandlerProjectId(projectInfos []map[string]interface{}, infoIds map[string]struct{}) (map[string]string, []string) {
|
|
|
+ result := map[string]string{}
|
|
|
+ projectIdList := []string{}
|
|
|
+ // 记录infoid 和项目id 对应关系 用于最后处理返回的数据
|
|
|
+ for i := 0; i < len(projectInfos); i++ {
|
|
|
+ _id := common.ObjToString(projectInfos[i]["_id"])
|
|
|
+ projectIdList = append(projectIdList, _id)
|
|
|
+ list, b := projectInfos[i]["list"].([]interface{})
|
|
|
+ if !b {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ for j := 0; j < len(list); j++ {
|
|
|
+ infoidMap := common.ObjToMap(list[j])
|
|
|
+ if infoidMap == nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ infoid := common.ObjToString((*infoidMap)["infoid"])
|
|
|
+ if _, ok := infoIds[infoid]; ok && infoid != "" {
|
|
|
+ result[infoid] = _id
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- return
|
|
|
+ return result, projectIdList
|
|
|
|
|
|
}
|
|
|
|
|
@@ -273,7 +261,7 @@ func DecodeId(ids string) (result []string, resultSet map[string]struct{}) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// ContainId 用于判断已经参标的用户中是否包含自己
|
|
|
+// ContainId 用于判断给定的逗号分割的字符串中是否包含 目标的字符串
|
|
|
func ContainId(ids string, objId string) bool {
|
|
|
list := strings.Split(ids, ",")
|
|
|
for i := 0; i < len(list); i++ {
|
|
@@ -282,30 +270,16 @@ func ContainId(ids string, objId string) bool {
|
|
|
}
|
|
|
}
|
|
|
return false
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- 详情页参标信息展示
|
|
|
- 参标按钮:
|
|
|
-1. 判断身份 2. 根据标讯id 查询项目信息 同上
|
|
|
-3. 项目信息存在 则区分 个人 和 企业
|
|
|
-个人:
|
|
|
- 参标按钮 :项目参标人为空 否则展示终止参标
|
|
|
- 参标人姓名 : 不展示
|
|
|
- 转给同事按钮:不展示
|
|
|
-企业身份:
|
|
|
- 参标按钮:
|
|
|
- 判断企业下是否有参标人
|
|
|
- - 无参标人 展示参标按钮
|
|
|
- - 有参标人 当前用户是企业管理员 显示终止参标
|
|
|
- 当前用户是部门管理员 如果参标人中有该部门的人员 显示终止参标 否则 判断是否允许多人参标 允许多人参标 显示参标按钮 否则不显示
|
|
|
- 不是管理员:判断是否包含本人 包含则展示 终止参标按钮
|
|
|
- 不包含则判断是否允许多人参标 允许多人则展示 参标 不允许多人则不展示按钮
|
|
|
- 参标人姓名 :有参标人则展示
|
|
|
- 转给同事按钮 :判断是否是管理员(部门管理员/企业管理员)
|
|
|
- 是管理员则展示 否 则不展示
|
|
|
-*/
|
|
|
+// GetNameByUserIds 获取用户名字符串
|
|
|
+// 参数:逗号分割的用户id "11,22,333..."
|
|
|
+// 返回: "张三,李四,王五..."
|
|
|
+func GetNameByUserIds(ids string) *[]map[string]interface{} {
|
|
|
+ query := "select group_concat( name) from" + TableEntnicheUser + "where id in (" + ids + ") "
|
|
|
+ rs := init.MainMysql.SelectBySql(query)
|
|
|
+ return rs
|
|
|
+}
|
|
|
|
|
|
/*
|
|
|
投标状态更新
|