13 changed files with 355 additions and 9 deletions
@ -0,0 +1,17 @@ |
|||||
|
package newsclass |
||||
|
|
||||
|
import ( |
||||
|
"key_performance_indicators/overall/publicmethod" |
||||
|
|
||||
|
"github.com/gin-gonic/gin" |
||||
|
) |
||||
|
|
||||
|
// 新闻类数据处理
|
||||
|
type ApiMethod struct{} |
||||
|
|
||||
|
// 系统内部审批处理
|
||||
|
func (a *ApiMethod) Index(c *gin.Context) { |
||||
|
outputCont := publicmethod.MapOut[string]() |
||||
|
outputCont["index"] = "新闻类数据处理入口" |
||||
|
publicmethod.Result(0, outputCont, c) |
||||
|
} |
||||
@ -0,0 +1,231 @@ |
|||||
|
package statistics |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"fmt" |
||||
|
"key_performance_indicators/models/modelshr" |
||||
|
"key_performance_indicators/overall" |
||||
|
"key_performance_indicators/overall/publicmethod" |
||||
|
"sort" |
||||
|
"strconv" |
||||
|
"time" |
||||
|
|
||||
|
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response" |
||||
|
"github.com/gin-gonic/gin" |
||||
|
) |
||||
|
|
||||
|
/* |
||||
|
* |
||||
|
@ 作者: 秦东 |
||||
|
@ 时间: 2023-11-08 11:22:10 |
||||
|
@ 功能: 行政组织年度成绩单 |
||||
|
@ 参数 |
||||
|
|
||||
|
# |
||||
|
|
||||
|
@ 返回值 |
||||
|
|
||||
|
# |
||||
|
|
||||
|
@ 方法原型 |
||||
|
|
||||
|
# |
||||
|
*/ |
||||
|
func (a *ApiMethod) OrgTargetAnnualStatistics(c *gin.Context) { |
||||
|
//获取登录人信息
|
||||
|
context, _ := publicmethod.LoginMyCont(c) |
||||
|
var requestData OrgAnnualStatistics |
||||
|
c.ShouldBindJSON(&requestData) |
||||
|
//获取行政组织
|
||||
|
var orgList []modelshr.AdministrativeOrganization |
||||
|
gromDb := overall.CONSTANT_DB_HR.Model(&modelshr.AdministrativeOrganization{}).Select("`id`,`name`,`sort`").Where("ispower = 1 AND state = 1 AND organization_type > 2") |
||||
|
if requestData.OrgId != "" { |
||||
|
gromDb = gromDb.Where("superior = ?", requestData.OrgId) |
||||
|
} else { |
||||
|
gromDb = gromDb.Where("superior = ?", context.Company) |
||||
|
} |
||||
|
err := gromDb.Find(&orgList).Error |
||||
|
if err != nil && len(orgList) < 1 { |
||||
|
response.Result(102, err, "没有查询到数据", c) |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
var orgAry []modelshr.AdministrativeOrganization |
||||
|
for _, ov := range orgList { |
||||
|
if ov.Id != 163 && ov.Id != 281 { |
||||
|
//获取下级行政组织是否有主行政部门
|
||||
|
sunOrgList, orgSunErr := getSunOrgList(ov.Id, "`id`", "`name`", "`sort`") |
||||
|
if orgSunErr == nil && len(sunOrgList) > 0 { |
||||
|
orgAry = append(orgAry, sunOrgList...) |
||||
|
} else { |
||||
|
orgAry = append(orgAry, ov) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//计算要查询的年份
|
||||
|
currentYear := publicmethod.ComputingTime(time.Now().Unix(), 1) //当前年
|
||||
|
todayYear := currentYear //今年
|
||||
|
if requestData.Years != "" { |
||||
|
yearInt64, _ := strconv.ParseInt(requestData.Years, 10, 64) |
||||
|
currentYear = yearInt64 |
||||
|
} |
||||
|
//计算月
|
||||
|
var monthTody []int64 |
||||
|
|
||||
|
if currentYear == todayYear { |
||||
|
monthTodyIng := publicmethod.ComputingTime(time.Now().Unix(), 3) |
||||
|
var montInt64 int64 |
||||
|
for montInt64 = 1; montInt64 <= monthTodyIng; montInt64++ { |
||||
|
monthTody = append(monthTody, montInt64) |
||||
|
} |
||||
|
} else { |
||||
|
var montInt64All int64 |
||||
|
for montInt64All = 1; montInt64All <= 12; montInt64All++ { |
||||
|
monthTody = append(monthTody, montInt64All) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//保证月份不为负数
|
||||
|
if len(monthTody) < 1 { |
||||
|
monthTody = append(monthTody, 1) |
||||
|
} |
||||
|
var sendList SendOrgAnnualStatistics |
||||
|
var orgTranscriptList OrgTranscript |
||||
|
for _, v := range monthTody { |
||||
|
sendList.XAxis = append(sendList.XAxis, fmt.Sprintf("%v月", v)) |
||||
|
} |
||||
|
for _, v := range orgAry { |
||||
|
sendList.Legend = append(sendList.Legend, v.Name) |
||||
|
syncProcess.Add(1) |
||||
|
go orgTranscriptList.CalculateGrades(v, currentYear, monthTody) |
||||
|
} |
||||
|
syncProcess.Wait() |
||||
|
readStatisticsData := orgTranscriptList.readTranscriptData() //读取通道数据
|
||||
|
if len(readStatisticsData) > 0 { |
||||
|
sendList.MaxScore = readStatisticsData[0].MaxScore |
||||
|
sendList.MinScore = readStatisticsData[0].MinScore |
||||
|
} |
||||
|
//根据维度序号排序
|
||||
|
sort.Slice(readStatisticsData, func(i, j int) bool { |
||||
|
return readStatisticsData[i].Scort < readStatisticsData[j].Scort |
||||
|
}) |
||||
|
for _, v := range readStatisticsData { |
||||
|
if sendList.MaxScore <= v.MaxScore { |
||||
|
sendList.MaxScore = v.MaxScore |
||||
|
} |
||||
|
if sendList.MinScore >= v.MinScore { |
||||
|
sendList.MinScore = v.MinScore |
||||
|
} |
||||
|
} |
||||
|
if sendList.MaxScore > 0 { |
||||
|
if sendList.MaxScore > 1 { |
||||
|
sendList.MaxScore = sendList.MaxScore + 1 |
||||
|
} else { |
||||
|
sendList.MaxScore = sendList.MaxScore + 0.1 |
||||
|
} |
||||
|
} else { |
||||
|
if sendList.MaxScore < -1 { |
||||
|
sendList.MaxScore = sendList.MaxScore + 1 |
||||
|
} else { |
||||
|
sendList.MaxScore = sendList.MaxScore + 0.1 |
||||
|
} |
||||
|
} |
||||
|
if sendList.MinScore > 0 { |
||||
|
if sendList.MinScore > 1 { |
||||
|
sendList.MinScore = sendList.MinScore - 1 |
||||
|
} else { |
||||
|
sendList.MinScore = sendList.MinScore - 0.1 |
||||
|
} |
||||
|
} else { |
||||
|
if sendList.MinScore < -1 { |
||||
|
sendList.MinScore = sendList.MinScore - 1 |
||||
|
} else { |
||||
|
sendList.MinScore = sendList.MinScore - 0.1 |
||||
|
} |
||||
|
} |
||||
|
sendList.Series = readStatisticsData |
||||
|
|
||||
|
publicmethod.Result(0, sendList, c) |
||||
|
} |
||||
|
func (o *OrgTranscript) CalculateGrades(orgInfo modelshr.AdministrativeOrganization, currentYear int64, months []int64) { |
||||
|
//锁操作
|
||||
|
o.mutext.Lock() |
||||
|
defer o.mutext.Unlock() |
||||
|
|
||||
|
var orgSictesCont SeriesList |
||||
|
orgSictesCont.Name = orgInfo.Name |
||||
|
orgSictesCont.Scort = orgInfo.Sort |
||||
|
// var monthOrgScore OrgTranscriptScore
|
||||
|
|
||||
|
var everyMonthScore countEveryDepartmentMonthScore |
||||
|
|
||||
|
for _, v := range months { |
||||
|
planCont, err := publicmethod.GetPlanVresion(orgInfo.Id, currentYear, v) |
||||
|
// fmt.Printf("planCont:%v\n%v\n", planCont, err)
|
||||
|
if err == nil { |
||||
|
var planVersioInfo []AddDutyNewCont |
||||
|
jsonErr := json.Unmarshal([]byte(planCont.Content), &planVersioInfo) |
||||
|
if jsonErr == nil { |
||||
|
syncProcessDepartTarget.Add(1) |
||||
|
//按月份计算
|
||||
|
go everyMonthScore.everyMonthCalculateNew(orgInfo.Id, currentYear, v, planVersioInfo) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
syncProcessDepartTarget.Wait() |
||||
|
everyMonthScoreList := everyMonthScore.readMyDayData() |
||||
|
if len(everyMonthScoreList) > 0 { |
||||
|
orgSictesCont.MaxScore = everyMonthScoreList[0].Score |
||||
|
orgSictesCont.MinScore = everyMonthScoreList[0].Score |
||||
|
} |
||||
|
sort.Slice(everyMonthScoreList, func(i, j int) bool { |
||||
|
return everyMonthScoreList[i].MonthVal < everyMonthScoreList[j].MonthVal |
||||
|
}) |
||||
|
// fmt.Printf("层级:%v\n", everyMonthScoreList)
|
||||
|
|
||||
|
for _, v := range everyMonthScoreList { |
||||
|
|
||||
|
if orgSictesCont.MaxScore <= v.Score { |
||||
|
orgSictesCont.MaxScore = v.Score |
||||
|
} |
||||
|
if orgSictesCont.MinScore > v.Score { |
||||
|
orgSictesCont.MinScore = v.Score |
||||
|
} |
||||
|
orgSictesCont.DataList = append(orgSictesCont.DataList, v.Score) |
||||
|
} |
||||
|
o.ScoreStatistics = append(o.ScoreStatistics, orgSictesCont) |
||||
|
syncProcess.Done() |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* |
||||
|
@ 作者: 秦东 |
||||
|
@ 时间: 2023-11-08 13:09:27 |
||||
|
@ 功能: 计算行政组织每月成绩 |
||||
|
@ 参数 |
||||
|
|
||||
|
# |
||||
|
|
||||
|
@ 返回值 |
||||
|
|
||||
|
# |
||||
|
|
||||
|
@ 方法原型 |
||||
|
|
||||
|
# |
||||
|
*/ |
||||
|
// func (o *OrgTranscriptScore) CalculateGrades(orgId, years, months int64) {
|
||||
|
// o.mutext.Lock()
|
||||
|
// defer o.mutext.Unlock()
|
||||
|
// var scoreInfo MonthOrgScore
|
||||
|
// scoreInfo.Months = months
|
||||
|
// planCont, err := publicmethod.GetPlanVresion(orgId, years, months)
|
||||
|
// if err == nil {
|
||||
|
// var planVersioInfo []AddDutyNewCont
|
||||
|
// jsonErr := json.Unmarshal([]byte(planCont.Content), &planVersioInfo)
|
||||
|
// }
|
||||
|
|
||||
|
// o.ScoreList = append(o.ScoreList, scoreInfo)
|
||||
|
// syncProcessDepartTarget.Done()
|
||||
|
// }
|
||||
@ -0,0 +1,18 @@ |
|||||
|
package newsclassrouter |
||||
|
|
||||
|
import ( |
||||
|
"key_performance_indicators/api/version1" |
||||
|
|
||||
|
"github.com/gin-gonic/gin" |
||||
|
) |
||||
|
|
||||
|
// 新闻类接口路由
|
||||
|
func (a *ApiRouter) RouterGroup(router *gin.RouterGroup) { |
||||
|
apiRouter := router.Group("news") |
||||
|
var newsClassRouter = version1.AppApiEntry.NewsClassApi |
||||
|
{ |
||||
|
apiRouter.GET("", newsClassRouter.Index) //入口
|
||||
|
apiRouter.POST("", newsClassRouter.Index) //入口
|
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,4 @@ |
|||||
|
package newsclassrouter |
||||
|
|
||||
|
//新闻类路由设定
|
||||
|
type ApiRouter struct{} |
||||
Loading…
Reference in new issue