作者 陈志颖

fix:任务多状态搜索

... ... @@ -180,6 +180,7 @@ func (employeeService *EmployeeService) ListEmployee(listEmployeeQuery *query.Li
if err := listEmployeeQuery.ValidateQuery(); err != nil {
return nil, application.ThrowError(application.ARG_ERROR, err.Error())
}
transactionContext, err := factory.CreateTransactionContext(nil)
if err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
... ...
... ... @@ -36,3 +36,11 @@ func CreateCashPoolDao(options map[string]interface{}) (*dao.CashPoolDao, error)
}
return dao.NewCashPoolDao(transactionContext)
}
func CreateListIntervalDao(options map[string]interface{}) (*dao.ListIntervalDao, error) {
var transactionContext *pg.TransactionContext
if value, ok := options["transactionContext"]; ok {
transactionContext = value.(*pg.TransactionContext)
}
return dao.NewListIntervalDao(transactionContext)
}
\ No newline at end of file
... ...
... ... @@ -8,6 +8,7 @@ import (
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/listInterval/command"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/listInterval/query"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/dao"
"time"
)
... ... @@ -40,6 +41,16 @@ func (listIntervalService *ListIntervalService) CreateListInterval(createListInt
listIntervalRepository = value
}
// 排行榜管理DAO初始化
var listIntervalDao *dao.ListIntervalDao
if value, err := factory.CreateListIntervalDao(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
} else {
listIntervalDao = value
}
// 获取当前最新排行榜时间
listListIntervalQuery := &query.ListListIntervalQuery {
CompanyId: createListIntervalCommand.CompanyId,
... ... @@ -56,6 +67,10 @@ func (listIntervalService *ListIntervalService) CreateListInterval(createListInt
startTime := time.Date(createListIntervalCommand.ListIntervalStartTime.Local().Year(), createListIntervalCommand.ListIntervalStartTime.Local().Month(), createListIntervalCommand.ListIntervalStartTime.Local().Day(), 0, 0, 0, 0, time.Local)
endTime := time.Date(createListIntervalCommand.ListIntervalEndTime.Local().Year(), createListIntervalCommand.ListIntervalEndTime.Local().Month(), createListIntervalCommand.ListIntervalEndTime.Local().Day(), 23, 59, 59, 0, time.Local)
ok := listIntervalDao.RankPeriodCheckTime(startTime.UnixNano() / 1e6, endTime.UnixNano() / 1e6, 0)
if !ok {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "年榜时间不能重叠")
}
// 判断年榜时间是否和上个年榜重叠
if len(listIntervals) > 0 {
... ... @@ -193,6 +208,7 @@ func (listIntervalService *ListIntervalService) UpdateListInterval(updateListInt
transactionContext.RollbackTransaction()
}()
// 排行榜管理仓储初始化
var listIntervalRepository domain.ListIntervalRepository
if value, err := factory.CreateListIntervalRepository(map[string]interface{}{
"transactionContext": transactionContext,
... ... @@ -202,6 +218,16 @@ func (listIntervalService *ListIntervalService) UpdateListInterval(updateListInt
listIntervalRepository = value
}
// 排行榜管理DAO初始化
var listIntervalDao *dao.ListIntervalDao
if value, err := factory.CreateListIntervalDao(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
} else {
listIntervalDao = value
}
// 获取当前年榜
listIntervalFound, err := listIntervalRepository.FindOne(map[string]interface{}{"listId": updateListIntervalCommand.ListIntervalId})
if err != nil {
... ... @@ -211,64 +237,28 @@ func (listIntervalService *ListIntervalService) UpdateListInterval(updateListInt
return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateListIntervalCommand.ListIntervalId)))
}
// 获取榜单命令
listListIntervalQuery := &query.ListListIntervalQuery {
CompanyId: listIntervalFound.CompanyId,
}
//获取所有年榜
_, listIntervals, err := listIntervalRepository.Find(tool_funs.SimpleStructToMap(listListIntervalQuery))
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
var currentListIntervalIndex int
//// 获取所有年榜
//listListIntervalQuery := &query.ListListIntervalQuery {
// CompanyId: listIntervalFound.CompanyId,
//}
////获取所有年榜
//_, listIntervals, err := listIntervalRepository.Find(tool_funs.SimpleStructToMap(listListIntervalQuery))
//if err != nil {
// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
//}
//
//var currentListIntervalIndex int
// 当前更新的开始结束时间
startTime := time.Date(updateListIntervalCommand.ListIntervalStartTime.Local().Year(), updateListIntervalCommand.ListIntervalStartTime.Local().Month(), updateListIntervalCommand.ListIntervalStartTime.Local().Day(), 0, 0, 0, 0, time.Local)
endTime := time.Date(updateListIntervalCommand.ListIntervalEndTime.Local().Year(), updateListIntervalCommand.ListIntervalEndTime.Local().Month(), updateListIntervalCommand.ListIntervalEndTime.Local().Day(), 23, 59, 59, 0, time.Local)
updateListIntervalCommand.ListIntervalStartTime = startTime
updateListIntervalCommand.ListIntervalEndTime = endTime
// 判断年榜时间是否和上个年榜重叠
if len(listIntervals) > 0 {
// 找到当前排行榜所处位置
for i, listInterval := range listIntervals {
if listInterval.ListIntervalId == listIntervalFound.ListIntervalId {
currentListIntervalIndex = i
}
}
if currentListIntervalIndex == 0 && len(listIntervals) > 1 { // 当前排行榜在首位,且不止一个活动
// 上一个活动开始结束时间
//lastIntervalStartTime := listIntervals[currentListIntervalIndex + 1].IntervalStartTime.Local()
lastIntervalEndTime := listIntervals[currentListIntervalIndex + 1].IntervalEndTime.Local()
if startTime.Before(lastIntervalEndTime) || startTime.Equal(lastIntervalEndTime) { // 开始时间重叠判断
ok := listIntervalDao.RankPeriodCheckTime(startTime.UnixNano() / 1e6, endTime.UnixNano() / 1e6, listIntervalFound.ListIntervalId)
if !ok {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "年榜时间不能重叠")
}
} else if currentListIntervalIndex != 0 { // 当前排行榜不在首位
fmt.Print(currentListIntervalIndex, "\n")
// 上一个年榜开始结束时间
lastIntervalStartTime := listIntervals[currentListIntervalIndex + 1].IntervalStartTime.Local()
lastIntervalEndTime := listIntervals[currentListIntervalIndex + 1].IntervalEndTime.Local()
fmt.Print(lastIntervalEndTime,"\n")
// 下一个年榜开始结束时间
nextIntervalStartTime := listIntervals[currentListIntervalIndex - 1].IntervalStartTime.Local()
fmt.Print(nextIntervalStartTime, "\n")
nextIntervalEndTime := listIntervals[currentListIntervalIndex - 1].IntervalEndTime.Local()
fmt.Print(startTime, "\n")
fmt.Print(endTime, "\n")
if startTime.After(lastIntervalStartTime) && startTime.Before(lastIntervalEndTime) || endTime.After(nextIntervalStartTime) && endTime.Before(nextIntervalEndTime) {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "年榜时间不能重叠")
}
}
if err := listIntervalFound.Update(tool_funs.SimpleStructToMap(updateListIntervalCommand)); err != nil {
return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
... ... @@ -281,19 +271,69 @@ func (listIntervalService *ListIntervalService) UpdateListInterval(updateListInt
}
return listIntervalUpdated, nil
}
} else { // 正常更新
if err := listIntervalFound.Update(tool_funs.SimpleStructToMap(updateListIntervalCommand)); err != nil {
return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
}
if listIntervalUpdated, err := listIntervalRepository.Save(listIntervalFound); err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
} else {
if err := transactionContext.CommitTransaction(); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
return listIntervalUpdated, nil
}
}
// 判断年榜时间是否和上个年榜重叠
//if len(listIntervals) > 0 {
// // 找到当前排行榜所处位置
// for i, listInterval := range listIntervals {
// if listInterval.ListIntervalId == listIntervalFound.ListIntervalId {
// currentListIntervalIndex = i
// }
// }
//
// if currentListIntervalIndex == 0 && len(listIntervals) > 1 { // 当前排行榜在首位,且不止一个活动
// // 上一个活动开始结束时间
// //lastIntervalStartTime := listIntervals[currentListIntervalIndex + 1].IntervalStartTime.Local()
// lastIntervalEndTime := listIntervals[currentListIntervalIndex + 1].IntervalEndTime.Local()
//
// if startTime.Before(lastIntervalEndTime) || startTime.Equal(lastIntervalEndTime) { // 开始时间重叠判断
// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "年榜时间不能重叠")
// }
// } else if currentListIntervalIndex != 0 { // 当前排行榜不在首位
// fmt.Print(currentListIntervalIndex, "\n")
//
// // 上一个年榜开始结束时间
// lastIntervalStartTime := listIntervals[currentListIntervalIndex + 1].IntervalStartTime.Local()
// lastIntervalEndTime := listIntervals[currentListIntervalIndex + 1].IntervalEndTime.Local()
// fmt.Print(lastIntervalEndTime,"\n")
//
// // 下一个年榜开始结束时间
// nextIntervalStartTime := listIntervals[currentListIntervalIndex - 1].IntervalStartTime.Local()
// fmt.Print(nextIntervalStartTime, "\n")
// nextIntervalEndTime := listIntervals[currentListIntervalIndex - 1].IntervalEndTime.Local()
//
// fmt.Print(startTime, "\n")
// fmt.Print(endTime, "\n")
//
// if startTime.After(lastIntervalStartTime) && startTime.Before(lastIntervalEndTime) || endTime.After(nextIntervalStartTime) && endTime.Before(nextIntervalEndTime) {
// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "年榜时间不能重叠")
// }
// }
//
// if err := listIntervalFound.Update(tool_funs.SimpleStructToMap(updateListIntervalCommand)); err != nil {
// return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
// }
// if listIntervalUpdated, err := listIntervalRepository.Save(listIntervalFound); err != nil {
// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
// } else {
// if err := transactionContext.CommitTransaction(); err != nil {
// return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
// }
// return listIntervalUpdated, nil
// }
//} else { // 正常更新
// if err := listIntervalFound.Update(tool_funs.SimpleStructToMap(updateListIntervalCommand)); err != nil {
// return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
// }
// if listIntervalUpdated, err := listIntervalRepository.Save(listIntervalFound); err != nil {
// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
// } else {
// if err := transactionContext.CommitTransaction(); err != nil {
// return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
// }
// return listIntervalUpdated, nil
// }
//}
}
// 移除排行榜时间
... ...
... ... @@ -23,6 +23,8 @@ type SearchTaskCommand struct {
TaskStatus int `json:"taskStatus,omitempty"`
// 任务状态ID列表
TaskStates []int `json:"taskStates,omitempty"`
// 任务状态ID列表
TaskStatuss []int `json:"taskStatuss,omitempty"`
// 项目归属
ProjectBelongs []int `json:"projectBelongs,omitempty"`
// 客户价值
... ...
... ... @@ -134,6 +134,9 @@ func (unifiedUserCenterService *UnifiedUserCenterService) SyncEmployeeCallback(s
if value, ok := addEmployee["status"]; ok {
status = int(value.(float64))
}
// TODO 增加员工判断
employee := &domain.Employee{
CompanyId: companyId,
EmployeeInfo: &domain.EmployeeInfo{
... ... @@ -146,6 +149,7 @@ func (unifiedUserCenterService *UnifiedUserCenterService) SyncEmployeeCallback(s
Status: status,
SuMoney: 0,
}
if _, err := employeeRepository.Save(employee); err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
... ...
package dao
import (
"fmt"
"github.com/go-pg/pg"
pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
)
type ListIntervalDao struct {
transactionContext *pgTransaction.TransactionContext
}
// 榜单时间管理
func (dao *ListIntervalDao) RankPeriodCheckTime(startTime int64, endTime int64, idNot int) bool {
tx := dao.transactionContext.PgTx
cnt, err := tx.Query(
pg.Scan(),
`SELECT count(*) FROM list_interval
WHERE id <> ?
AND
(
(UNIX_TIMESTAMP(start_time) BETWEEN ? AND ?)
OR
(UNIX_TIMESTAMP(end_time) BETWEEN ? AND ?)
OR
(? BETWEEN CAST(list_interval_start_time AS TIMESTAMP) AND CAST(list_interval_end_time AS TIMESTAMP))
OR
(? BETWEEN CAST(list_interval_start_time AS TIMESTAMP) AND CAST(list_interval_end_time AS TIMESTAMP))
)
LIMIT 1 `,
idNot, startTime, endTime, startTime, endTime, startTime, endTime)
if err != nil {
fmt.Errorf(err.Error())
return false
}
if cnt != nil {
return false
}
return true
}
func NewListIntervalDao(transactionContext *pgTransaction.TransactionContext) (*ListIntervalDao, error) {
if transactionContext == nil {
return nil, fmt.Errorf("transactionContext参数不能为nil")
} else {
return &ListIntervalDao{
transactionContext: transactionContext,
}, nil
}
}
\ No newline at end of file
... ...
... ... @@ -124,6 +124,15 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int
return q, nil
})
}
if taskStatuss, ok := queryOptions["taskStatuss"]; ok && len(taskStatuss.([]int)) != 0 {
//query = query.WhereGroup(func(q *orm.Query) (*orm.Query, error) {
// for _, value := range taskStatuss.([]int) {
// q = q.WhereOr("task.task_status = ?", value)
// }
// return q, nil
//})
query = query.Where(`task.task_status IN (?)`, pg.In(taskStatuss.([]int64)))
}
if taskType, ok := queryOptions["taskType"]; ok && (taskType != 0) {
query = query.Where(`task.task_type = ?`, taskType)
}
... ...