bugfix:去掉任务管理表中任务字段
This commit is contained in:
parent
3e1739d5c0
commit
142bf642dd
@ -273,33 +273,34 @@ func convertToTaskAssignRecordInfo(record *dao.TaskAssignRecordsResponse) *bundl
|
||||
// - 查询条件优先使用艺人编号(customerNum),为空时使用手机号(telNum)
|
||||
// - 返回同时包含“套餐类型”和“增值类型”的余额与待发数量,均按视频/图文/数据分析三类区分
|
||||
func (b *BundleProvider) GetArtistBundleBalance(_ context.Context, req *bundle.ArtistBundleBalanceRequest) (*bundle.ArtistBundleBalanceResponse, error) {
|
||||
// 参数校验
|
||||
// 参数校验:艺人编号与手机号不能同时为空
|
||||
if req.CustomerNum == "" && req.TelNum == "" {
|
||||
return nil, fmt.Errorf("艺人编号和手机号不能同时为空")
|
||||
}
|
||||
|
||||
// 组装查询参数(逻辑层/DAO层使用 SubNum 与 TelNum)
|
||||
pendingReq := &dao.PendingAndBalanceRequest{
|
||||
SubNum: req.CustomerNum, // 映射 customerNum -> SubNum
|
||||
TelNum: req.TelNum, // 映射 telNum -> TelNum
|
||||
// 仅使用艺人编号进行查询(与DAO层 GetRemainingPendingBySubNum 一致)
|
||||
subNum := req.CustomerNum
|
||||
if subNum == "" {
|
||||
// 暂不支持通过手机号查询剩余待发数据
|
||||
return nil, fmt.Errorf("暂不支持通过手机号查询剩余待发数据,请传入艺人编号")
|
||||
}
|
||||
|
||||
// 调用逻辑层:查询待发数量与任务余额(区分套餐/增值)
|
||||
resp, err := logic.GetPendingAndTaskBalances(pendingReq)
|
||||
// 调用逻辑层:仅查询剩余待发数量(区分套餐/增值)
|
||||
resp, err := logic.GetArtistRemainingPending(subNum)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 映射为proto响应结构(套餐/增值分别返回视频/图文/数据分析的余额与待发数量)
|
||||
// 组装proto响应:非DAO返回字段统一置为0
|
||||
return &bundle.ArtistBundleBalanceResponse{
|
||||
// 套餐类型余额
|
||||
BundleVideoBalance: int32(resp.BundleVideoBalance),
|
||||
BundleImageBalance: int32(resp.BundleImageBalance),
|
||||
BundleDataAnalysisBalance: int32(resp.BundleDataAnalysisBalance),
|
||||
// 增值类型余额
|
||||
IncreaseVideoBalance: int32(resp.IncreaseVideoBalance),
|
||||
IncreaseImageBalance: int32(resp.IncreaseImageBalance),
|
||||
IncreaseDataAnalysisBalance: int32(resp.IncreaseDataAnalysisBalance),
|
||||
// 套餐类型余额(暂置0)
|
||||
BundleVideoBalance: 0,
|
||||
BundleImageBalance: 0,
|
||||
BundleDataAnalysisBalance: 0,
|
||||
// 增值类型余额(暂置0)
|
||||
IncreaseVideoBalance: 0,
|
||||
IncreaseImageBalance: 0,
|
||||
IncreaseDataAnalysisBalance: 0,
|
||||
// 套餐类型待发数量
|
||||
BundlePendingVideoCount: int32(resp.PendingBundleVideoCount),
|
||||
BundlePendingImageCount: int32(resp.PendingBundleImageCount),
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,8 @@ import (
|
||||
"fmt"
|
||||
"micro-bundle/internal/dao"
|
||||
commonErr "micro-bundle/pkg/err"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GetValidArtistList 查询套餐状态为有效中的艺人列表
|
||||
@ -78,10 +80,8 @@ func GetPendingTaskList(req *dao.TaskQueryRequest) ([]*dao.TaskQueryResponse, in
|
||||
// 3. 转换为响应结构体
|
||||
var recordResponse []*dao.TaskQueryResponse
|
||||
for _, record := range record {
|
||||
// 计算聚合的待发数量:视频、图文、数据分析
|
||||
videoTotal := record.PendingBundleLimitVideoExpiredCount + record.PendingBundleLimitVideoCount + record.PendingIncreaseLimitVideoExpiredCount + record.PendingIncreaseLimitVideoCount + record.PendingBundleVideoCount + record.PendingIncreaseVideoCount
|
||||
imageTotal := record.PendingBundleLimitImageExpiredCount + record.PendingBundleLimitImageCount + record.PendingIncreaseLimitImageExpiredCount + record.PendingIncreaseLimitImageCount + record.PendingBundleImageCount + record.PendingIncreaseImageCount
|
||||
dataTotal := record.PendingBundleLimitDataAnalysisExpiredCount + record.PendingBundleLimitDataAnalysisCount + record.PendingIncreaseLimitDataAnalysisExpiredCount + record.PendingIncreaseLimitDataAnalysisCount + record.PendingBundleDataAnalysisCount + record.PendingIncreaseDataAnalysisCount
|
||||
// 从TaskBalance表计算待发任务数量:任务余额 - 消耗数量
|
||||
videoTotal, imageTotal, dataTotal := calculatePendingFromTaskBalance(record.SubNum)
|
||||
|
||||
// 根据 SubNum 和 TelNum 查询对应的员工正在进行中的任务和已完成任务数量
|
||||
progressTaskCount, completeTaskCount, err := dao.GetTaskAssigneeInfo(record.TaskAssigneeNum)
|
||||
@ -114,6 +114,67 @@ func GetPendingTaskList(req *dao.TaskQueryRequest) ([]*dao.TaskQueryResponse, in
|
||||
}
|
||||
}
|
||||
|
||||
// 4. 处理待发数量相关的排序(在Logic层处理,因为这些数据从TaskBalance表计算)
|
||||
if req.SortBy != "" && req.SortType != "" {
|
||||
sortType := req.SortType
|
||||
if sortType != "asc" && sortType != "desc" && sortType != "ASC" && sortType != "DESC" {
|
||||
sortType = "DESC"
|
||||
}
|
||||
|
||||
switch req.SortBy {
|
||||
case "pending_video_count", "pendingVideoCount":
|
||||
sort.Slice(recordResponse, func(i, j int) bool {
|
||||
if strings.ToUpper(sortType) == "ASC" {
|
||||
return recordResponse[i].PendingVideoCount < recordResponse[j].PendingVideoCount
|
||||
}
|
||||
return recordResponse[i].PendingVideoCount > recordResponse[j].PendingVideoCount
|
||||
})
|
||||
case "pending_post_count", "pendingPostCount":
|
||||
sort.Slice(recordResponse, func(i, j int) bool {
|
||||
if strings.ToUpper(sortType) == "ASC" {
|
||||
return recordResponse[i].PendingPostCount < recordResponse[j].PendingPostCount
|
||||
}
|
||||
return recordResponse[i].PendingPostCount > recordResponse[j].PendingPostCount
|
||||
})
|
||||
case "pending_data_count", "pendingDataCount":
|
||||
sort.Slice(recordResponse, func(i, j int) bool {
|
||||
if strings.ToUpper(sortType) == "ASC" {
|
||||
return recordResponse[i].PendingDataCount < recordResponse[j].PendingDataCount
|
||||
}
|
||||
return recordResponse[i].PendingDataCount > recordResponse[j].PendingDataCount
|
||||
})
|
||||
case "progress_task_count", "progressTaskCount":
|
||||
sort.Slice(recordResponse, func(i, j int) bool {
|
||||
if strings.ToUpper(sortType) == "ASC" {
|
||||
return recordResponse[i].ProgressTaskCount < recordResponse[j].ProgressTaskCount
|
||||
}
|
||||
return recordResponse[i].ProgressTaskCount > recordResponse[j].ProgressTaskCount
|
||||
})
|
||||
case "complete_task_count", "completeTaskCount":
|
||||
sort.Slice(recordResponse, func(i, j int) bool {
|
||||
if strings.ToUpper(sortType) == "ASC" {
|
||||
return recordResponse[i].CompleteTaskCount < recordResponse[j].CompleteTaskCount
|
||||
}
|
||||
return recordResponse[i].CompleteTaskCount > recordResponse[j].CompleteTaskCount
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 5. 分页(在排序后进行)
|
||||
total = int64(len(recordResponse))
|
||||
if req.PageSize > 0 && req.Page > 0 {
|
||||
offset := (req.Page - 1) * req.PageSize
|
||||
if offset < len(recordResponse) {
|
||||
end := offset + req.PageSize
|
||||
if end > len(recordResponse) {
|
||||
end = len(recordResponse)
|
||||
}
|
||||
recordResponse = recordResponse[offset:end]
|
||||
} else {
|
||||
recordResponse = []*dao.TaskQueryResponse{}
|
||||
}
|
||||
}
|
||||
|
||||
return recordResponse, total, nil
|
||||
}
|
||||
|
||||
@ -160,49 +221,17 @@ func UpdatePendingCount(req *dao.UpdatePendingCountRequest) error {
|
||||
return commonErr.ReturnError(nil, "艺人套餐已过期", "该艺人没有有效的套餐,无法修改待发数量")
|
||||
}
|
||||
|
||||
// 查询艺人当前任务余额与待发汇总,校验待发数量和余额的总和是否足够
|
||||
resp, err := dao.GetUserPendingAndTaskBalances(&dao.PendingAndBalanceRequest{
|
||||
SubNum: req.SubNum,
|
||||
TelNum: req.TelNum,
|
||||
})
|
||||
// 查询艺人当前任务余额,校验余额的总和是否足够
|
||||
resp, err := dao.GetRemainingPendingBySubNum(req.SubNum)
|
||||
if err != nil {
|
||||
return commonErr.ReturnError(err, "查询艺人任务余额失败", "查询艺人任务余额失败: ")
|
||||
}
|
||||
|
||||
// 计算当前待发数量(聚合所有类型)
|
||||
curVideo := resp.PendingBundleVideoCount + resp.PendingIncreaseVideoCount
|
||||
curImage := resp.PendingBundleImageCount + resp.PendingIncreaseImageCount
|
||||
curData := resp.PendingBundleDataAnalysisCount + resp.PendingIncreaseDataAnalysisCount
|
||||
|
||||
// 计算可用余额(套餐 + 增值)
|
||||
availVideo := resp.BundleVideoBalance + resp.IncreaseVideoBalance
|
||||
availImage := resp.BundleImageBalance + resp.IncreaseImageBalance
|
||||
availData := resp.BundleDataAnalysisBalance + resp.IncreaseDataAnalysisBalance
|
||||
|
||||
// 校验:当前待发数量 + 艺人余额 >= 目标数量
|
||||
// 这确保了可以优先扣减待发数量,不足时再扣减余额
|
||||
totalAvailVideo := curVideo + availVideo
|
||||
totalAvailImage := curImage + availImage
|
||||
totalAvailData := curData + availData
|
||||
|
||||
if req.PendingVideoCount > totalAvailVideo {
|
||||
return commonErr.ReturnError(nil, "视频任务数量不足",
|
||||
fmt.Sprintf("目标待发视频数量(%d)超出当前待发数量(%d)和可用余额(%d)的总和(%d)",
|
||||
req.PendingVideoCount, curVideo, availVideo, totalAvailVideo))
|
||||
}
|
||||
if req.PendingPostCount > totalAvailImage {
|
||||
return commonErr.ReturnError(nil, "图文任务数量不足",
|
||||
fmt.Sprintf("目标待发图文数量(%d)超出当前待发数量(%d)和可用余额(%d)的总和(%d)",
|
||||
req.PendingPostCount, curImage, availImage, totalAvailImage))
|
||||
}
|
||||
if req.PendingDataCount > totalAvailData {
|
||||
return commonErr.ReturnError(nil, "数据分析任务数量不足",
|
||||
fmt.Sprintf("目标待发数据分析数量(%d)超出当前待发数量(%d)和可用余额(%d)的总和(%d)",
|
||||
req.PendingDataCount, curData, availData, totalAvailData))
|
||||
}
|
||||
fmt.Println(resp)
|
||||
|
||||
// 2. 调用DAO层更新待发数量
|
||||
return dao.UpdatePendingCount(req)
|
||||
// return dao.UpdatePendingCount(req)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetRecentAssignRecords 查询最近被指派记录
|
||||
@ -304,14 +333,54 @@ func GetTaskAssignRecordsList(req *dao.TaskAssignRecordsQueryRequest) ([]*dao.Ta
|
||||
return recordResponse, total, nil
|
||||
}
|
||||
|
||||
// // GetArtistBundleBalance 查询艺人套餐剩余数量
|
||||
// func GetArtistBundleBalance(req *dao.ArtistBundleBalanceRequest) (*dao.ArtistBundleBalanceResponse, error) {
|
||||
// return dao.GetArtistBundleBalance(req)
|
||||
// }
|
||||
|
||||
// GetPendingAndTaskBalances 查询艺人当前的待发数量与任务余额(区分套餐/增值)
|
||||
// 根据艺人的编号 SubNum 或手机号 TelNum 进行查询,优先使用编号
|
||||
// 返回的数据会区分为“套餐类型”和“增值类型”两大类,涵盖视频/图文/数据分析三种任务
|
||||
func GetPendingAndTaskBalances(req *dao.PendingAndBalanceRequest) (*dao.PendingAndBalanceResponse, error) {
|
||||
return dao.GetUserPendingAndTaskBalances(req)
|
||||
// 新增:查询艺人剩余待发数量(区分套餐/增值,共6个字段)
|
||||
func GetArtistRemainingPending(subNum string) (*dao.ArtistRemainingPendingResponse, error) {
|
||||
if strings.TrimSpace(subNum) == "" {
|
||||
return nil, commonErr.ReturnError(nil, "查询参数错误", "艺人编号不能为空")
|
||||
}
|
||||
return dao.GetRemainingPendingBySubNum(subNum)
|
||||
}
|
||||
|
||||
// calculatePendingFromTaskBalance 从TaskBalance表计算待发任务数量
|
||||
func calculatePendingFromTaskBalance(subNum string) (videoTotal, imageTotal, dataTotal int) {
|
||||
// 查询用户的任务余额
|
||||
taskBalance, err := dao.GetTaskBalanceBySubNum(subNum)
|
||||
if err != nil || taskBalance == nil {
|
||||
return 0, 0, 0
|
||||
}
|
||||
|
||||
// 计算视频类待发数量:总余额 - 消耗数量
|
||||
videoTotal = (taskBalance.TaskBundleVideoNumber - taskBalance.TaskBundleVideoConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseVideoNumber - taskBalance.TaskIncreaseVideoConsumptionNumber) +
|
||||
(taskBalance.TaskBundleLimitVideoNumber - taskBalance.TaskBundleLimitVideoConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseLimitVideoNumber - taskBalance.TaskIncreaseLimitVideoConsumptionNumber) +
|
||||
(taskBalance.TaskBundleLimitVideoExpiredNumber - taskBalance.TaskBundleLimitVideoExpiredConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseLimitVideoExpiredNumber - taskBalance.TaskIncreaseLimitVideoExpiredConsumptionNumber)
|
||||
if videoTotal < 0 {
|
||||
videoTotal = 0
|
||||
}
|
||||
|
||||
// 计算图片类待发数量:总余额 - 消耗数量
|
||||
imageTotal = (taskBalance.TaskBundleImageNumber - taskBalance.TaskBundleImageConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseImageNumber - taskBalance.TaskIncreaseImageConsumptionNumber) +
|
||||
(taskBalance.TaskBundleLimitImageNumber - taskBalance.TaskBundleLimitImageConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseLimitImageNumber - taskBalance.TaskIncreaseLimitImageConsumptionNumber) +
|
||||
(taskBalance.TaskBundleLimitImageExpiredNumber - taskBalance.TaskBundleLimitImageExpiredConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseLimitImageExpiredNumber - taskBalance.TaskIncreaseLimitImageExpiredConsumptionNumber)
|
||||
if imageTotal < 0 {
|
||||
imageTotal = 0
|
||||
}
|
||||
|
||||
// 计算数据分析类待发数量:总余额 - 消耗数量
|
||||
dataTotal = (taskBalance.TaskBundleDataAnalysisNumber - taskBalance.TaskBundleDataAnalysisConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseDataAnalysisNumber - taskBalance.TaskIncreaseDataAnalysisConsumptionNumber) +
|
||||
(taskBalance.TaskBundleLimitDataAnalysisNumber - taskBalance.TaskBundleLimitDataAnalysisConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseLimitDataAnalysisNumber - taskBalance.TaskIncreaseLimitDataAnalysisConsumptionNumber) +
|
||||
(taskBalance.TaskBundleLimitDataAnalysisExpiredNumber - taskBalance.TaskBundleLimitDataAnalysisExpiredConsumptionNumber) +
|
||||
(taskBalance.TaskIncreaseLimitDataAnalysisExpiredNumber - taskBalance.TaskIncreaseLimitDataAnalysisExpiredConsumptionNumber)
|
||||
if dataTotal < 0 {
|
||||
dataTotal = 0
|
||||
}
|
||||
|
||||
return videoTotal, imageTotal, dataTotal
|
||||
}
|
||||
|
@ -12,30 +12,6 @@ type TaskManagement struct {
|
||||
TelNum string `gorm:"column:tel_num;comment:手机号;index:idx_tel_num;index:idx_sub_tel,priority:2" json:"telNum"`
|
||||
ArtistName string `gorm:"column:artist_name;comment:艺人名称;index:idx_artist_name" json:"artistName"`
|
||||
|
||||
// ===== 待发视频类任务 =====
|
||||
PendingBundleVideoCount int `gorm:"column:pending_bundle_video_count;comment:待发非限制类型套餐权益视频数量" json:"pendingBundleVideoCount"`
|
||||
PendingIncreaseVideoCount int `gorm:"column:pending_increase_video_count;comment:待发非限制类型增值权益视频数量" json:"pendingIncreaseVideoCount"`
|
||||
PendingBundleLimitVideoCount int `gorm:"column:pending_bundle_limit_video_count;comment:待发套餐权益限制类型非过期视频数量" json:"pendingBundleLimitVideoCount"`
|
||||
PendingIncreaseLimitVideoCount int `gorm:"column:pending_increase_limit_video_count;comment:待发增值权益限制类型非过期视频数量" json:"pendingIncreaseLimitVideoCount"`
|
||||
PendingBundleLimitVideoExpiredCount int `gorm:"column:pending_bundle_limit_video_expired_count;comment:待发套餐权益限制类型会过期视频数量" json:"pendingBundleLimitVideoExpiredCount"`
|
||||
PendingIncreaseLimitVideoExpiredCount int `gorm:"column:pending_increase_limit_video_expired_count;comment:待发增值权益限制类型会过期视频数量" json:"pendingIncreaseLimitVideoExpiredCount"`
|
||||
|
||||
// ===== 待发图片类任务 =====
|
||||
PendingBundleImageCount int `gorm:"column:pending_bundle_image_count;comment:待发非限制类型套餐权益图片数量" json:"pendingBundleImageCount"`
|
||||
PendingIncreaseImageCount int `gorm:"column:pending_increase_image_count;comment:待发非限制类型增值权益图片数量" json:"pendingIncreaseImageCount"`
|
||||
PendingBundleLimitImageCount int `gorm:"column:pending_bundle_limit_image_count;comment:待发套餐权益限制类型非过期图片数量" json:"pendingBundleLimitImageCount"`
|
||||
PendingIncreaseLimitImageCount int `gorm:"column:pending_increase_limit_image_count;comment:待发增值权益限制类型非过期图片数量" json:"pendingIncreaseLimitImageCount"`
|
||||
PendingBundleLimitImageExpiredCount int `gorm:"column:pending_bundle_limit_image_expired_count;comment:待发套餐权益限制类型会过期图片数量" json:"pendingBundleLimitImageExpiredCount"`
|
||||
PendingIncreaseLimitImageExpiredCount int `gorm:"column:pending_increase_limit_image_expired_count;comment:待发增值权益限制类型会过期图片数量" json:"pendingIncreaseLimitImageExpiredCount"`
|
||||
|
||||
// ===== 待发数据分析类任务 =====
|
||||
PendingBundleDataAnalysisCount int `gorm:"column:pending_bundle_data_analysis_count;comment:待发非限制类型套餐权益数据分析数量" json:"pendingBundleDataAnalysisCount"`
|
||||
PendingIncreaseDataAnalysisCount int `gorm:"column:pending_increase_data_analysis_count;comment:待发非限制类型增值权益数据分析数量" json:"pendingIncreaseDataAnalysisCount"`
|
||||
PendingBundleLimitDataAnalysisCount int `gorm:"column:pending_bundle_limit_data_analysis_count;comment:待发套餐权益限制类型非过期数据分析数量" json:"pendingBundleLimitDataAnalysisCount"`
|
||||
PendingIncreaseLimitDataAnalysisCount int `gorm:"column:pending_increase_limit_data_analysis_count;comment:待发增值权益限制类型非过期数据分析数量" json:"pendingIncreaseLimitDataAnalysisCount"`
|
||||
PendingBundleLimitDataAnalysisExpiredCount int `gorm:"column:pending_bundle_limit_data_analysis_expired_count;comment:待发套餐权益限制类型会过期数据分析数量" json:"pendingBundleLimitDataAnalysisExpiredCount"`
|
||||
PendingIncreaseLimitDataAnalysisExpiredCount int `gorm:"column:pending_increase_limit_data_analysis_expired_count;comment:待发增值权益限制类型会过期数据分析数量" json:"pendingIncreaseLimitDataAnalysisExpiredCount"`
|
||||
|
||||
LastTaskAssignee string `gorm:"column:last_task_assignee;comment:最后一次的任务指派人" json:"lastTaskAssignee"`
|
||||
TaskAssigneeNum string `gorm:"column:task_assignee_num;comment:任务指派人账号" json:"taskAssigneeNum"`
|
||||
ProgressCount int `gorm:"column:progress_count;comment:进行中的任务数量" json:"progressCount"`
|
||||
|
Loading…
Reference in New Issue
Block a user