作者 tangxvhui

自查内容筛选结果

@@ -167,4 +167,48 @@ func (c *AuditController) GetChanceReviseLog() { @@ -167,4 +167,48 @@ func (c *AuditController) GetChanceReviseLog() {
167 return 167 return
168 } 168 }
169 169
170 -// GetChanceReviseLog 170 +//GetChanceCheckResultList 获取机会的自查内容的筛选结果列表
  171 +//@router /v1/audit/check_result/list
  172 +func (c *AuditController) GetChanceCheckResultList() {
  173 + var msg *protocol.ResponseMessage
  174 + defer func() {
  175 + c.ResposeJson(msg)
  176 + }()
  177 + type Parameter struct {
  178 + protocol.RequestPageInfo
  179 + CheckResultStatus int8 `json:"check_result_status"`
  180 + }
  181 + var param Parameter
  182 + if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
  183 + log.Error("json 解析失败", err)
  184 + msg = protocol.BadRequestParam("1")
  185 + return
  186 + }
  187 + companyId := c.GetCompanyId()
  188 + rspData := serveaudit.GetChanceCheckResultList(param.PageIndex, param.PageSize, companyId, param.CheckResultStatus)
  189 + msg = protocol.NewReturnResponse(rspData, nil)
  190 + return
  191 +}
  192 +
  193 +//GetChanceCheckResultInfo 获取机会的自查内容的筛选结果详情
  194 +//@router /v1/audit/check_result/info
  195 +func (c *AuditController) GetChanceCheckResultInfo() {
  196 + // var msg *protocol.ResponseMessage
  197 + // defer func() {
  198 + // c.ResposeJson(msg)
  199 + // }()
  200 + // type Parameter struct {
  201 + // protocol.RequestPageInfo
  202 + // CheckResultStatus int8 `json:"check_result_status"`
  203 + // }
  204 + // var param Parameter
  205 + // if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
  206 + // log.Error("json 解析失败", err)
  207 + // msg = protocol.BadRequestParam("1")
  208 + // return
  209 + // }
  210 + // companyId := c.GetCompanyId()
  211 + // rspData := serveaudit.GetChanceCheckResultList(param.PageIndex, param.PageSize, companyId, param.CheckResultStatus)
  212 + // msg = protocol.NewReturnResponse(rspData, nil)
  213 + return
  214 +}
@@ -35,6 +35,8 @@ type Chance struct { @@ -35,6 +35,8 @@ type Chance struct {
35 Code string `orm:"column(code)" description:"机会编码"` 35 Code string `orm:"column(code)" description:"机会编码"`
36 Status int8 `orm:"column(status)" description:"机会状态 1:开启 2:关闭"` 36 Status int8 `orm:"column(status)" description:"机会状态 1:开启 2:关闭"`
37 SelfChecks string `orm:"column(self_checks)" description:"自查内容"` 37 SelfChecks string `orm:"column(self_checks)" description:"自查内容"`
  38 + CheckResultStatus int8 ` orm:"column(check_result_status)"`
  39 + CheckTime time.Time `orm:"column(check_time);type(timestamp);"`
38 } 40 }
39 41
40 func (t *Chance) TableName() string { 42 func (t *Chance) TableName() string {
@@ -95,6 +97,19 @@ var ChanceStatusMap = map[int8]string{ @@ -95,6 +97,19 @@ var ChanceStatusMap = map[int8]string{
95 ChanceStatusForbid: "已关闭", 97 ChanceStatusForbid: "已关闭",
96 } 98 }
97 99
  100 +//机会自查内容筛选状态 【1:待处理未设置】【2:通过】【3:不通过】
  101 +const (
  102 + CheckResultStatusWait int8 = 1
  103 + CheckResultStatusPass int8 = 2
  104 + CheckResultStatusNOPass int8 = 3
  105 +)
  106 +
  107 +var CheckResultStatusMap = map[int8]string{
  108 + CheckResultStatusWait: "未设置",
  109 + CheckResultStatusPass: "通过",
  110 + CheckResultStatusNOPass: "未通过",
  111 +}
  112 +
98 //ChanceSelfCheck chance表中SelfChecks字段的json结构 113 //ChanceSelfCheck chance表中SelfChecks字段的json结构
99 type ChanceSelfCheck struct { 114 type ChanceSelfCheck struct {
100 ChickItem string `json:"checkItem"` 115 ChickItem string `json:"checkItem"`
  1 +package models
  2 +
  3 +import (
  4 + "time"
  5 +
  6 + "github.com/astaxie/beego/orm"
  7 +)
  8 +
  9 +type ChanceCheckResult struct {
  10 + Id int `orm:"column(id);pk"`
  11 + ChanceId int64 `orm:"column(chance_id)"`
  12 + GroupId int64 `orm:"column(group_id);null"`
  13 + Pid int64 `orm:"column(pid)"`
  14 + CheckItem string `orm:"column(check_item);size(20);null" description:"检查项"`
  15 + Answer string `orm:"column(answer);size(50);null" description:"回答"`
  16 + Reason string `orm:"column(reason);size(200);null" description:"理由"`
  17 + UserCompanyId int64 `orm:"column(user_company_id);null"`
  18 + CreateAt time.Time `orm:"column(create_at);type(timestamp);null"`
  19 +}
  20 +
  21 +func (t *ChanceCheckResult) TableName() string {
  22 + return "chance_check_result"
  23 +}
  24 +
  25 +func init() {
  26 + orm.RegisterModel(new(ChanceCheckResult))
  27 +}
  28 +
  29 +// GetChanceCheckResultById retrieves ChanceCheckResult by Id. Returns error if
  30 +// Id doesn't exist
  31 +func GetChanceCheckResultById(id int) (v *ChanceCheckResult, err error) {
  32 + o := orm.NewOrm()
  33 + v = &ChanceCheckResult{Id: id}
  34 + if err = o.Read(v); err == nil {
  35 + return v, nil
  36 + }
  37 + return nil, err
  38 +}
  39 +
  40 +func GetChanceCheckResultByChancce(chanceId int64) ([]ChanceCheckResult, error) {
  41 + var (
  42 + err error
  43 + data []ChanceCheckResult
  44 + )
  45 + o := orm.NewOrm()
  46 + _, err = o.QueryTable(&ChanceCheckResult{}).
  47 + Filter("chance_id", chanceId).
  48 + All(&data)
  49 + return data, err
  50 +}
@@ -293,3 +293,41 @@ type ChanceFlowLog struct { @@ -293,3 +293,41 @@ type ChanceFlowLog struct {
293 NickName string `json:"nick_name" orm:"column(nick_name)"` 293 NickName string `json:"nick_name" orm:"column(nick_name)"`
294 Code int `json:"code" orm:"column(code)"` 294 Code int `json:"code" orm:"column(code)"`
295 } 295 }
  296 +
  297 +//ReponseChanceCheckResult 响应筛选结果详情
  298 +type ReponseChanceCheckResult struct {
  299 + CustomItem []string `json:"custom_item"`
  300 + CheckData []ChanceCheckResultData `json:"check_data"`
  301 +}
  302 +
  303 +// ChanceCheckResultData 筛选结果详情数据
  304 +type ChanceCheckResultData struct {
  305 + Total string `json:"total"`
  306 + CheckItem string `json:"check_item"`
  307 + CustomItemData map[string]string `json:"custom_item_data"`
  308 +}
  309 +
  310 +//ResponseChanceCheckResultList 响应自查内容筛选结果列表
  311 +type ResponseChanceCheckResultList struct {
  312 + ResponsePageInfo
  313 + List []RspCheckResultList `json:"lists"`
  314 +}
  315 +
  316 +type RspCheckResultList struct {
  317 + Id string `json:"id"` //机会的id
  318 + Code string `json:"code" `
  319 + ChanceType string `json:"chance_type"` //一级分类
  320 + TemplateName string `json:"template_name"` //二级分类
  321 + UserName string `json:"user_name"` // 提交人
  322 + Department string `json:"department"` //提交部门
  323 + CreateTime string `json:"create_time"` //提交时间
  324 + PublishStatus int `json:"publish_status"` //公开状态
  325 + PublishStatusName string `json:"publish_status_name"` //
  326 + ReviewStatus int8 `json:"review_status"` //审批状态
  327 + ReviewStatusName string `json:"review_status_name"`
  328 + Status int8 `json:"status"` //开启、关闭状态
  329 + StatusName string `json:"status_name"`
  330 + DiscoveryScore string `json:"discovery_score"`
  331 + CommentTotal string `json:"comment_total"`
  332 + CheckResultStatusName string `json:"check_result_status_name"` //自查内容筛选状态
  333 +}
@@ -107,6 +107,7 @@ func init() { @@ -107,6 +107,7 @@ func init() {
107 beego.NSRouter("/info", &controllers.AuditController{}, "post:AuditInfo"), 107 beego.NSRouter("/info", &controllers.AuditController{}, "post:AuditInfo"),
108 beego.NSRouter("/allow_forbid", &controllers.AuditController{}, "post:AllowForbidAudit"), 108 beego.NSRouter("/allow_forbid", &controllers.AuditController{}, "post:AllowForbidAudit"),
109 beego.NSRouter("/revise/info", &controllers.AuditController{}, "post:GetChanceReviseLog"), 109 beego.NSRouter("/revise/info", &controllers.AuditController{}, "post:GetChanceReviseLog"),
  110 + beego.NSRouter("/check_result/list", &controllers.AuditController{}, "post:GetChanceCheckResultList"),
110 ), 111 ),
111 beego.NSNamespace("/rank", 112 beego.NSNamespace("/rank",
112 beego.NSRouter("/type/list", &controllers.RankController{}, "post:GetRankType"), 113 beego.NSRouter("/type/list", &controllers.RankController{}, "post:GetRankType"),
@@ -14,22 +14,6 @@ import ( @@ -14,22 +14,6 @@ import (
14 "time" 14 "time"
15 ) 15 )
16 16
17 -type SqlData struct {  
18 - Id int64 `orm:"column(id)"`  
19 - UserId int64 `orm:"column(user_id)"`  
20 - NickName string `orm:"column(nick_name)"`  
21 - DepartmentId int64 `orm:"column(department_id)"`  
22 - AuditTemplateId int64 `orm:"column(audit_template_id)"`  
23 - ChanceTypeId int `orm:"column(chance_type_id)"`  
24 - PublishStatus int `orm:"column(publish_status)"`  
25 - CreateAt string `orm:"column(create_at)"`  
26 - ReviewStatus int8 `orm:"column(review_status)"`  
27 - Status int8 `orm:"column(status)"`  
28 - DiscoveryScore string `orm:"column(discovery_score)"`  
29 - CommentTotal string `orm:"column(comment_total)"`  
30 - Code string `orm:"column(code)"`  
31 -}  
32 -  
33 func getAuditUserHasPermission(userid int64, usercompanyid int64) ( 17 func getAuditUserHasPermission(userid int64, usercompanyid int64) (
34 serverabc.PermissionOptionObject, error) { 18 serverabc.PermissionOptionObject, error) {
35 var permissionObject serverabc.PermissionOptionObject 19 var permissionObject serverabc.PermissionOptionObject
@@ -155,7 +139,21 @@ func buildSqlForAuditList(usercompanyid int64, companyid int64, userid int64) st @@ -155,7 +139,21 @@ func buildSqlForAuditList(usercompanyid int64, companyid int64, userid int64) st
155 } 139 }
156 140
157 func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64) (protocol.ResponseAuditList, error) { 141 func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64) (protocol.ResponseAuditList, error) {
158 - 142 + type SqlData struct {
  143 + Id int64 `orm:"column(id)"`
  144 + UserId int64 `orm:"column(user_id)"`
  145 + NickName string `orm:"column(nick_name)"`
  146 + DepartmentId int64 `orm:"column(department_id)"`
  147 + AuditTemplateId int64 `orm:"column(audit_template_id)"`
  148 + ChanceTypeId int `orm:"column(chance_type_id)"`
  149 + PublishStatus int `orm:"column(publish_status)"`
  150 + CreateAt string `orm:"column(create_at)"`
  151 + ReviewStatus int8 `orm:"column(review_status)"`
  152 + Status int8 `orm:"column(status)"`
  153 + DiscoveryScore string `orm:"column(discovery_score)"`
  154 + CommentTotal string `orm:"column(comment_total)"`
  155 + Code string `orm:"column(code)"`
  156 + }
159 var ( 157 var (
160 datasql = strings.Builder{} 158 datasql = strings.Builder{}
161 countsql = strings.Builder{} 159 countsql = strings.Builder{}
  1 +package audit
  2 +
  3 +import (
  4 + "fmt"
  5 + "oppmg/common/log"
  6 + "oppmg/models"
  7 + "oppmg/protocol"
  8 + "oppmg/utils"
  9 +)
  10 +
  11 +//GetChanceCheckResultInfo 获取机会详情
  12 +func GetChanceCheckResultInfo(chanceId int64, companyid int64) (protocol.ReponseChanceCheckResult, error) {
  13 + var (
  14 + chanceData *models.Chance
  15 + err error
  16 + )
  17 + rsp := protocol.ReponseChanceCheckResult{
  18 + CustomItem: []string{},
  19 + CheckData: []protocol.ChanceCheckResultData{},
  20 + }
  21 + chanceData, err = models.GetChanceById(chanceId)
  22 + if err != nil {
  23 + log.Error("获取机会数据失败,err:%s", err)
  24 + return rsp, protocol.NewErrWithMessage("1")
  25 + }
  26 + if chanceData.CompanyId != companyid {
  27 + log.Error("机会的公司数据无法对应")
  28 + return rsp, protocol.NewErrWithMessage("1")
  29 + }
  30 + if chanceData.CheckResultStatus < models.CheckResultStatusWait {
  31 + log.Error("机会的自查内容筛选状态错误")
  32 + return rsp, protocol.NewErrWithMessage("1")
  33 + }
  34 + var (
  35 + checkResultData []models.ChanceCheckResult
  36 + )
  37 + checkResultData, err = models.GetChanceCheckResultByChancce(chanceId)
  38 + if err != nil {
  39 + log.Error("未获得指定的机会自查内容筛选结果,err;%s", err)
  40 + return rsp, nil
  41 + }
  42 + //组装响应数据
  43 + //定义动态数据列
  44 + customItems := utils.NewArraySetString()
  45 + //自查内容项
  46 + checkItems := utils.NewArraySetString()
  47 + _ = checkResultData
  48 + _ = customItems
  49 + _ = checkItems
  50 + return rsp, err
  51 +}
  52 +
  53 +func GetChanceCheckResultList(pageIndex int, pageSize int, companyId int64, checkResultStatus int8) protocol.ResponseChanceCheckResultList {
  54 + type SqlData struct {
  55 + Id int64 `orm:"column(id)"`
  56 + UserId int64 `orm:"column(user_id)"`
  57 + NickName string `orm:"column(nick_name)"`
  58 + DepartmentId int64 `orm:"column(department_id)"`
  59 + AuditTemplateId int64 `orm:"column(audit_template_id)"`
  60 + ChanceTypeId int `orm:"column(chance_type_id)"`
  61 + PublishStatus int `orm:"column(publish_status)"`
  62 + CreateAt string `orm:"column(create_at)"`
  63 + ReviewStatus int8 `orm:"column(review_status)"`
  64 + Status int8 `orm:"column(status)"`
  65 + DiscoveryScore string `orm:"column(discovery_score)"`
  66 + CommentTotal string `orm:"column(comment_total)"`
  67 + Code string `orm:"column(code)"`
  68 + CheckResultStatus int8 `orm:"column(check_result_status)"`
  69 + }
  70 +
  71 + returnData := protocol.ResponseChanceCheckResultList{
  72 + ResponsePageInfo: protocol.ResponsePageInfo{
  73 + TotalPage: 0,
  74 + CurrentPage: pageIndex,
  75 + },
  76 + List: make([]protocol.RspCheckResultList, 0),
  77 + }
  78 + datasql := `SELECT a.id,a.department_id,a.audit_template_id,a.chance_type_id
  79 + ,a.publish_status,a.create_at,a.review_status,a.status,a.check_result_status
  80 + ,a.discovery_score,a.comment_total ,a.code,d.nick_name,d.id as user_id
  81 + FROM chance AS a
  82 + LEFt JOIN user_company AS c ON c.id = a.user_id
  83 + LEFt JOIN user AS d ON c.user_id = d.id
  84 + where a.company_id=? `
  85 + countsql := ` SELECT count(*) FROM chance as a
  86 + where a.company_id=? `
  87 + cond := []interface{}{companyId}
  88 + if checkResultStatus > 0 {
  89 + datasql += ` AND a.check_result_status=? `
  90 + countsql += ` AND a.check_result_status=? `
  91 + cond = append(cond, checkResultStatus)
  92 + } else {
  93 + datasql += ` AND a.check_result_status>0 `
  94 + countsql += ` AND a.check_result_status>0 `
  95 + }
  96 + dataStart := (pageIndex - 1) * pageSize
  97 + datasql += fmt.Sprintf(` ORDER BY a.create_at DESC limit %d,%d `, dataStart, pageSize)
  98 + var (
  99 + cnt int
  100 + sqldata []SqlData
  101 + err error
  102 + )
  103 + err = utils.ExecuteQueryOne(&cnt, countsql, cond...)
  104 + if err != nil {
  105 + log.Error("EXCUTE SQL ERR:%s", err)
  106 + return returnData
  107 + }
  108 + if cnt <= 0 {
  109 + return returnData
  110 + }
  111 + err = utils.ExecuteQueryAll(&sqldata, datasql, cond...)
  112 + if err != nil {
  113 + log.Error("EXCUTE SQL ERR:%s", err)
  114 + return returnData
  115 + }
  116 + for _, v := range sqldata {
  117 + item := protocol.RspCheckResultList{
  118 + Id: fmt.Sprint(v.Id),
  119 + Status: v.Status,
  120 + StatusName: models.ChanceStatusMap[v.Status],
  121 + PublishStatus: v.PublishStatus,
  122 + PublishStatusName: models.ChancePublishStatusMap[v.PublishStatus],
  123 + ReviewStatus: v.ReviewStatus,
  124 + ReviewStatusName: models.ChanceReviewStatusMap[v.ReviewStatus],
  125 + Code: v.Code,
  126 + DiscoveryScore: v.DiscoveryScore,
  127 + CommentTotal: v.CommentTotal,
  128 + UserName: v.NickName,
  129 + CreateTime: v.CreateAt,
  130 + CheckResultStatusName: models.CheckResultStatusMap[v.CheckResultStatus],
  131 + }
  132 + if d, err := models.GetDepartmentById(v.DepartmentId); err == nil {
  133 + item.Department = d.Name
  134 + }
  135 + if ct, err := models.GetChanceTypeById(v.ChanceTypeId); err == nil {
  136 + item.ChanceType = ct.Name
  137 + }
  138 + if tp, err := models.GetAuditTemplateById(v.AuditTemplateId); err == nil {
  139 + item.TemplateName = tp.Name
  140 + }
  141 + returnData.List = append(returnData.List, item)
  142 +
  143 + }
  144 + returnData.TotalPage = cnt
  145 + returnData.CurrentPage = pageIndex
  146 + return returnData
  147 +}
@@ -75,3 +75,49 @@ func ArrayInt64Unique(s []int64) []int64 { @@ -75,3 +75,49 @@ func ArrayInt64Unique(s []int64) []int64 {
75 } 75 }
76 return newS 76 return newS
77 } 77 }
  78 +
  79 +//ArraySetString 构建元素不重复的数组
  80 +//可按需扩展
  81 +type ArraySetString struct {
  82 + m map[string]int
  83 +}
  84 +
  85 +func NewArraySetString() ArraySetString {
  86 + return ArraySetString{
  87 + m: make(map[string]int),
  88 + }
  89 +}
  90 +func (set *ArraySetString) Has(str string) bool {
  91 + if _, ok := set.m[str]; ok {
  92 + return true
  93 + }
  94 + return false
  95 +}
  96 +
  97 +//Add 追加元素
  98 +func (set *ArraySetString) Add(str string) {
  99 + if _, ok := set.m[str]; ok {
  100 + return
  101 + }
  102 + l := len(set.m)
  103 + set.m[str] = l
  104 +}
  105 +
  106 +//Remove 移除指定元素
  107 +func (set *ArraySetString) Remove(str string) {
  108 + delete(set.m, str)
  109 +}
  110 +
  111 +//Len 元素长度
  112 +func (set *ArraySetString) Len() int {
  113 + return len(set.m)
  114 +}
  115 +
  116 +//ToSlice 转换为切片输出
  117 +func (set *ArraySetString) ToSlice() []string {
  118 + newSlice := make([]string, len(set.m))
  119 + for k, v := range set.m {
  120 + newSlice[v] = k
  121 + }
  122 + return newSlice
  123 +}