This commit is contained in:
2025-07-07 20:11:59 +08:00
parent ab0fdbc447
commit 06e3aa2eb3
2009 changed files with 193082 additions and 0 deletions

View File

@ -0,0 +1,762 @@
// ==========================================================================
// GFast自动生成logic操作代码。
// 生成日期2023-08-04 17:26:59
// 生成路径: internal/app/system/logic/plan_week.go
// 生成人gfast
// desc:周计划
// company:云南奇讯科技有限公司
// ==========================================================================
package logic
import (
"context"
"encoding/json"
"errors"
"fmt"
"github.com/gogf/gf/v2/crypto/gmd5"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"github.com/tiger1103/gfast/v3/api/v1/common/coryCommon"
"github.com/tiger1103/gfast/v3/api/v1/system"
comModel "github.com/tiger1103/gfast/v3/internal/app/common/model"
"github.com/tiger1103/gfast/v3/internal/app/system/dao"
ct "github.com/tiger1103/gfast/v3/internal/app/system/logic/context"
planWeekRealityLogic "github.com/tiger1103/gfast/v3/internal/app/system/logic/planWeekReality"
"github.com/tiger1103/gfast/v3/internal/app/system/model"
"github.com/tiger1103/gfast/v3/internal/app/system/model/do"
"github.com/tiger1103/gfast/v3/internal/app/system/service"
wxDao "github.com/tiger1103/gfast/v3/internal/app/wxApplet/dao"
"github.com/tiger1103/gfast/v3/library/liberr"
tool "github.com/tiger1103/gfast/v3/utility/coryUtils"
"golang.org/x/exp/constraints"
"math/big"
"reflect"
"sort"
"strconv"
"strings"
"time"
)
func init() {
service.RegisterPlanWeek(New())
}
func New() *sPlanWeek {
return &sPlanWeek{}
}
type sPlanWeek struct{}
func (s *sPlanWeek) WeeklyAndMonthlyReportDataGenerationFunc(ctx context.Context, req *system.WeeklyAndMonthlyReportDataGenerationReq) (res *system.WeeklyAndMonthlyReportDataGenerationRes, err error) {
res = new(system.WeeklyAndMonthlyReportDataGenerationRes)
err = g.Try(ctx, func(ctx context.Context) {
//1、工程进度查询限制
arrCount := strings.Split(model.PlanWeekNameStr, ", ")
arrCountStr := ""
for i, item := range arrCount {
arrCountStr += `"` + item + `"`
if i < len(arrCount)-1 {
arrCountStr += ", "
}
}
var powlr []*model.ProgressOfWorksListRes
if req.Type == "1" { //周报
for _, data := range req.PlanId {
var pwir *model.PlanWeekInfoRes
err = dao.PlanWeek.Ctx(ctx).Fields("start,end,plan_name").Where("plan_id", data).Scan(&pwir)
rt := model.DataAssemblyRequest{
ArrCount: arrCount,
ArrCountStr: arrCountStr,
PlanId: data,
ProjectId: req.ProjectId,
TypeStr: req.Type,
Start: pwir.Start,
End: pwir.End,
WeekName: pwir.PlanName,
}
pwlrTwo, err := DataAssemblyFunc(ctx, &rt)
if err != nil {
liberr.ErrIsNil(ctx, err)
return
}
//这里很多周报,每循环一次存放一次周报
powlr = append(powlr, pwlrTwo)
}
} else { //月报
maxStart := ""
minEnd := ""
for _, data := range req.PlanId {
var pwir *model.PlanWeekInfoRes
err := dao.PlanWeek.Ctx(ctx).Fields("start, end, plan_name").Where("plan_id", data).Scan(&pwir)
if err != nil {
// 处理错误
}
// 判断maxStart是否为空或者当前start是否比maxStart大
if maxStart == "" || pwir.Start > maxStart {
maxStart = pwir.Start
}
// 判断minEnd是否为空或者当前end是否比minEnd小
if minEnd == "" || pwir.End < minEnd {
minEnd = pwir.End
}
}
planids := ""
for i, item := range req.PlanId {
planids += `"` + item + `"`
if i < len(req.PlanId)-1 {
planids += ", "
}
}
rt := model.DataAssemblyRequest{
ArrCount: arrCount,
ArrCountStr: arrCountStr,
ProjectId: req.ProjectId,
TypeStr: req.Type,
Start: maxStart,
End: minEnd,
PlanIds: planids,
}
pwlrTwo, err := DataAssemblyFunc(ctx, &rt)
if err != nil {
liberr.ErrIsNil(ctx, err)
return
}
//这里很多周报,每循环一次存放一次周报
powlr = append(powlr, pwlrTwo)
}
//把所有周报返回回去
res.List = powlr
liberr.ErrIsNil(ctx, err, "获取数据失败")
})
return
}
// DataAssemblyFunc 【WeeklyAndMonthlyReportDataGenerationFunc】 数据组装
func DataAssemblyFunc(ctx context.Context, rt *model.DataAssemblyRequest) (pwlrTwo *model.ProgressOfWorksListRes, err error) {
g.Try(ctx, func(ctx context.Context) {
pwlrTwo = new(model.ProgressOfWorksListRes)
pwlrTwo.WeekName = rt.WeekName
/**
零、word开头数据组装
*/
var projectEntity *model.SysProjectInfoRes
dao.SysProject.Ctx(ctx).Where("id", rt.ProjectId).Fields("project_name,design_total").Scan(&projectEntity)
if projectEntity != nil {
pwlrTwo.ProjectName = projectEntity.ProjectName
} else {
err = errors.New("项目不存在")
return
}
pwlrTwo.Logo = "/resource/font/zmlogo.jpg"
if rt.TypeStr == "1" {
pwlrTwo.WeekOrMonth = "EPC总承包项目" + "周报"
} else {
pwlrTwo.WeekOrMonth = "EPC总承包项目" + "月报"
}
pwlrTwo.WeekOrMonthTime = rt.Start + " ~ " + rt.End
pwlrTwo.TextOne = "中煤科工重庆设计研究院(集团)有限公司"
pwlrTwo.TextTwo = pwlrTwo.ProjectName + "EPC总承包项目部"
pwlrTwo.GeneratedTime = tool.New().GetFormattedDateTime(time.Now())
if projectEntity.DesignTotal == 0 {
err = errors.New("请设置当前项目的设计总量")
liberr.ErrIsNil(ctx, err)
return
}
/**
一、工程进度
*/
rt.DesignTotal = projectEntity.DesignTotal
pwlrTwo.POWRList, err = progressOfWorks(ctx, rt)
/**
二、人力情况
*/
pwlrTwo.ManpowerText, err = manpowerSituation(ctx, rt.ProjectId, rt.Start, rt.End)
if err != nil {
err = errors.New("获取人力情况失败!")
liberr.ErrIsNil(ctx, err)
return
}
/**
三、机械情况
*/
pwlrTwo.MechanicalText, err = mechanicalEquipment(ctx, rt.ProjectId, rt.Start, rt.End)
if err != nil {
err = errors.New("获取机械设备失败!")
liberr.ErrIsNil(ctx, err)
return
}
/**
四、材料使用情况
*/
pwlrTwo.MIRList, err = MaterialCondition(ctx, rt.ProjectId, rt.Start, rt.End)
if err != nil {
err = errors.New("获取材料使用情况失败!")
liberr.ErrIsNil(ctx, err)
return
}
/**
五、质量情况
*/
pwlrTwo.Quality, err = QualitySituation(ctx, rt.ProjectId, rt.Start, rt.End)
if err != nil {
err = errors.New("获取质量情况失败!")
liberr.ErrIsNil(ctx, err)
return
}
/**
六、现场巡检照片
*/
pwlrTwo.Polling, err = FieldInspection(ctx, rt.ProjectId, rt.Start, rt.End)
if err != nil {
err = errors.New("获取现场巡检照片失败!")
liberr.ErrIsNil(ctx, err)
return
}
})
return
}
// progressOfWorks 【WeeklyAndMonthlyReportDataGenerationFunc】 一、工程进度
func progressOfWorks(ctx context.Context, rt *model.DataAssemblyRequest) (pwr []*model.ProgressOfWorksRes, err error) {
//1、查询有哪些符合的数据并且按照arrCount顺序排序
sqlTwo := ""
if rt.TypeStr == "1" {
sqlTwo = fmt.Sprintf("SELECT source_type FROM plan_week WHERE plan_id = '%s' and source_type in (%s) GROUP BY source_type", rt.PlanId, rt.ArrCountStr)
} else {
sqlTwo = fmt.Sprintf("SELECT source_type FROM plan_week WHERE plan_id in (%s) and source_type in (%s) GROUP BY source_type", rt.PlanIds, rt.ArrCountStr)
}
str := ""
for i := range rt.ArrCount {
if i == 0 {
sqlTwo = sqlTwo + " ORDER BY CASE"
}
str = str + fmt.Sprintf(" WHEN source_type = '%s' THEN %d", rt.ArrCount[i], i+1)
if i == len(rt.ArrCount)-1 {
sqlTwo = sqlTwo + str
sqlTwo = sqlTwo + " END;"
}
}
queryTwo, err := g.DB().Query(ctx, sqlTwo)
if err != nil {
return nil, err
}
//2、根据array去查询数据
for _, y := range queryTwo.Array() {
var pwrOne *model.ProgressOfWorksRes
sql := ""
if rt.TypeStr == "1" {
sql = fmt.Sprintf("SELECT (SELECT COUNT(1) FROM plan_week WHERE plan_id = '%s' and source_type = '%s' AND start >='%s' AND end <='%s') as planNum, (SELECT COUNT(1) FROM plan_week_reality WHERE plan_id = '%s' and source_type = '%s' AND start >='%s' AND end <='%s') as realityNum",
rt.PlanId, y, rt.Start, rt.End,
rt.PlanId, y, rt.Start, rt.End)
} else {
sql = fmt.Sprintf("SELECT (SELECT COUNT(1) FROM plan_week WHERE plan_id in (%s) and source_type = '%s' AND start >='%s' AND end <='%s') as planNum, (SELECT COUNT(1) FROM plan_week_reality WHERE plan_id in (%s) and source_type = '%s' AND start >='%s' AND end <='%s') as realityNum",
rt.PlanIds, y, rt.Start, rt.End,
rt.PlanIds, y, rt.Start, rt.End)
}
//本周计划+本周完成
query, err := g.DB().Query(ctx, sql)
if err != nil {
return nil, err
}
err = query[0].Struct(&pwrOne)
if err != nil {
return nil, err
}
if pwrOne != nil {
//名称、单位
pwrOne.Name, pwrOne.Unit = model.PlanWeekEnum(y.String())
//设计总量
pwrOne.DesignTotal = rt.DesignTotal
//累积完成
count, err := dao.PlanWeekReality.Ctx(ctx).Where("plan_id", rt.PlanId).Where("source_type", y).Count("id")
if err != nil {
return nil, err
}
pwrOne.AddUp = count
//累积完成百分比
if count == 0 {
pwrOne.Percentage = 0
} else {
// 定义大浮点数
numerator := big.NewFloat(100)
denominator := big.NewFloat(float64(pwrOne.DesignTotal))
result := big.NewFloat(float64(pwrOne.AddUp))
// 设置精度
precision := 100 // 设置为你需要的精度
numerator.SetPrec(uint(precision))
denominator.SetPrec(uint(precision))
result.SetPrec(uint(precision))
// 计算结果
result.Quo(result, denominator)
result.Mul(result, numerator)
// 截取到两位小数
resultRounded, _ := result.Float64()
if err != nil {
err = errors.New("计算百分比失败!")
return nil, err
} else {
pwrOne.Percentage = float64(int(resultRounded*100)) / 100 // 保留两位小数
}
}
}
pwr = append(pwr, pwrOne)
}
return
}
// manpowerSituation 【WeeklyAndMonthlyReportDataGenerationFunc】 二、人力情况
func manpowerSituation(ctx context.Context, projectId int64, start, end string) (str string, err error) {
var me []*model.ManpowerRes
err = wxDao.BusAttendance.Ctx(ctx).As("a").Fields("c.dict_label,COUNT(DISTINCT a.openid) as num").
LeftJoin("bus_construction_user", "b", "a.openid = b.openid").
LeftJoin("sys_dict_data", "c", "c.dict_type = 'type_of_work' and c.dict_value = b.type_of_work").
Where("a.commuter", "1").
Where("b.project_id", projectId).
WhereBetween("a.printing_date", start, end).
WhereNotNull("b.type_of_work").
Group("c.dict_label").
Scan(&me)
str = "1、本周投入人力"
number := 0
if len(me) == 0 {
str = "1、本周投入人力0"
}
for _, data := range me {
str = str + data.DictLabel + " " + strconv.Itoa(data.Num) + " 人,"
number = number + data.Num
}
str = str + "共计 " + strconv.Itoa(number) + " 人。"
return
}
// mechanicalEquipment 【WeeklyAndMonthlyReportDataGenerationFunc】 三、机械设备
func mechanicalEquipment(ctx context.Context, projectId int64, start, end string) (str string, err error) {
var mr []*model.MechanicalRes
err = dao.PlanWeekReality.Ctx(ctx).
Fields("name,sum(cnt) as num").
Where("project_id", projectId).
Where("source_type", "machine").
WhereGTE("start", start).
WhereLTE("end", end).
Group("name").Scan(&mr)
str = "1、本周投入机械"
number := 0
if len(mr) == 0 {
str = "1、本周投入机械0"
}
for _, data := range mr {
str = str + data.Name + " " + strconv.Itoa(data.Num) + " 台,"
number = number + data.Num
}
str = str + "共计 " + strconv.Itoa(number) + " 台。"
return
}
// MaterialCondition 【WeeklyAndMonthlyReportDataGenerationFunc】 四、材料情况
func MaterialCondition(ctx context.Context, projectId int64, start, end string) (mir []*model.MaterialInputRes, err error) {
err = dao.PlanWeekReality.Ctx(ctx).As("a").Fields("a.name,sum(b.number) as sumNum,sum(a.cnt) as useNum,c.weight_id as weight").
LeftJoin("bus_equipment_materials_inventory", "b", "a.source_id = b.equipment_materials_id").
LeftJoin("bus_equipment_materials", "c", "c.equipment_materials_id = a.source_id").
Where("a.project_id", projectId).
Where("a.source_type", "material").
Where("b.out_put", "2").
WhereGTE("a.start", start).
WhereLTE("a.end", end).
Group("a.source_id,a.name").Scan(&mir)
return
}
// QualitySituation 【WeeklyAndMonthlyReportDataGenerationFunc】 五、质量情况
func QualitySituation(ctx context.Context, projectId int64, start, end string) (qsr *model.QualitySituationRes, err error) {
qsr = new(model.QualitySituationRes)
err = g.Try(ctx, func(ctx context.Context) {
var qstr []*model.QualitySituationTwoRes
//1、查询出所有的状态
err = dao.BusQuality.Ctx(ctx).
Fields("created_at,quality_name,quality_explain,quality_document,quality_type").
Where("project_id", projectId).
WhereGTE("DATE_FORMAT(created_at,'%Y-%m-%d')", start).
WhereLTE("DATE_FORMAT(created_at,'%Y-%m-%d')", end).
Scan(&qstr)
var qstrTwo []*model.QualitySituationTwoRes
//2、根据判断条件将数据进行分流
for i := 0; i < len(qstr); {
resData := qstr[i]
typeStr := resData.QualitType
if typeStr == "1" {
//判断类型+是否合格
str := "送检"
if resData.QualityDocument != "" {
qstr[i].IsQualified = str + "文件不合格"
} else {
qstr[i].IsQualified = str + "文件合格"
}
qstr[i].TextStr = resData.CreatedAt + "," + resData.QualityName + "," + resData.QualityExplain + "," + resData.IsQualified + "。"
qstrTwo = append(qstrTwo, qstr[i])
qstr = append(qstr[:i], qstr[i+1:]...)
} else {
str := ""
if typeStr == "2" {
str = "质量"
}
if typeStr == "3" {
str = "整改"
}
if resData.QualityDocument != "" {
qstr[i].IsQualified = str + "文件不合格"
} else {
qstr[i].IsQualified = str + "文件合格"
}
qstr[i].TextStr = resData.CreatedAt + "," + resData.QualityName + "," + resData.QualityExplain + "," + resData.IsQualified + "。"
i++
}
}
qsr.ExamineList = qstr
qsr.InspectList = qstrTwo
liberr.ErrIsNil(ctx, err, "获取数据失败")
})
return
}
// FieldInspection 【WeeklyAndMonthlyReportDataGenerationFunc】 六、现场巡检照片
func FieldInspection(ctx context.Context, projectId int64, start, end string) (qsr *model.FieldInspectionRes, err error) {
qsr = new(model.FieldInspectionRes)
err = g.Try(ctx, func(ctx context.Context) {
//1、质量管理
var firr []*model.FieldInspectionResTwoRes
var firrEntity []*model.FieldInspectionResTwoRes
err = dao.BusQuality.Ctx(ctx).Fields("quality_name as pollingName,quality_document as document,quality_type as qualityType").
Where("project_id", projectId).
WhereGTE("DATE_FORMAT(created_at,'%Y-%m-%d')", start).
WhereLTE("DATE_FORMAT(created_at,'%Y-%m-%d')", end).
WhereNotNull("quality_document").
Scan(&firr)
for i := range firr {
split := strings.Split(firr[i].Document, ";")
for _, data := range split {
var uf *comModel.UpFile
err := json.Unmarshal([]byte(data), &uf)
if err != nil {
uf = new(comModel.UpFile)
uf.Name = firr[i].PollingName
uf.Url = firr[i].Document
}
if coryCommon.FlagImg(uf.Url) {
str := ""
if firr[i].QualityType == "1" {
str = "送检"
} else if firr[i].QualityType == "2" {
str = "质量检查"
} else {
str = "检查整改"
}
firrEntity = append(firrEntity, &model.FieldInspectionResTwoRes{
PollingName: str + "-" + firr[i].PollingName,
PollingImg: uf.Url,
})
}
}
}
//2、安全管理
var firrTwo []*model.FieldInspectionResTwoRes
var firrEntityTwo []*model.FieldInspectionResTwoRes
err = dao.BusSafety.Ctx(ctx).Fields("safety_name as pollingName,safety_document as document,safety_type as safetyType").
Where("project_id", projectId).
WhereGTE("DATE_FORMAT(created_at,'%Y-%m-%d')", start).
WhereLTE("DATE_FORMAT(created_at,'%Y-%m-%d')", end).
WhereNotNull("safety_document").
Scan(&firrTwo)
for i := range firrTwo {
//var ufList []*comModel.UpFile
split := strings.Split(firrTwo[i].Document, ";")
for _, data := range split {
var uf *comModel.UpFile
err := json.Unmarshal([]byte(data), &uf)
if err != nil {
uf = new(comModel.UpFile)
uf.Name = firrTwo[i].PollingName
uf.Url = firrTwo[i].Document
}
if coryCommon.FlagImg(uf.Url) {
str := ""
if firrTwo[i].SafetyType == "1" {
str = "例会"
} else if firrTwo[i].QualityType == "2" {
str = "检查"
} else if firrTwo[i].QualityType == "3" {
str = "整改"
} else {
str = "站例会"
}
firrEntityTwo = append(firrEntityTwo, &model.FieldInspectionResTwoRes{
PollingName: str + "-" + firrTwo[i].PollingName,
PollingImg: uf.Url,
})
}
}
}
if len(firrEntity) > 0 {
qsr.QualityList = firrEntity
}
if len(firrEntityTwo) > 0 {
qsr.SafetyList = firrEntityTwo
}
})
return
}
func (s *sPlanWeek) WeekAndWeekRealityListFunc(ctx context.Context, req *system.WeekAndWeekRealityListReq) (res *system.WeekAndWeekRealityListRes, err error) {
err = g.Try(ctx, func(ctx context.Context) {
res = new(system.WeekAndWeekRealityListRes)
var pwsr *system.PlanWeekSearchReq
pwsr = new(system.PlanWeekSearchReq)
pwsr.ProjectId = req.ProjectId
var pwrsr *system.PlanWeekRealitySearchReq
pwrsr = new(system.PlanWeekRealitySearchReq)
pwrsr.ProjectId = req.ProjectId
if len(req.DateRange) != 0 {
pwsr.DateRange = req.DateRange
pwrsr.DateRange = req.DateRange
}
listRes, err := s.List(ctx, pwsr)
if err == nil {
res.WeekList = listRes.List
}
list, err := planWeekRealityLogic.New().List(ctx, pwrsr)
if err == nil {
res.WeekRealityList = list.List
}
liberr.ErrIsNil(ctx, err, "获取数据失败")
})
return
}
func (s *sPlanWeek) PlanWeekGetInfoByPlanID(ctx context.Context, req *system.PlanWeekGetInfoByPlanIDReq) (res *system.PlanWeekGetInfoByPlanIDRes, err error) {
//TODO implement me
res = new(system.PlanWeekGetInfoByPlanIDRes)
res.List = []*model.Task{}
err = g.Try(ctx, func(ctx context.Context) {
if req.PlanWeekReality {
fmt.Println("需要获取真实的计划", req.SourceType)
//是否需要获取真实的
m := dao.PlanWeekReality.Ctx(ctx).WithAll().Where(dao.PlanWeekReality.Columns().PlanId, req.PlanID)
if req.SourceType != "" {
m = m.Where(dao.PlanWeekReality.Columns().SourceType, req.SourceType)
}
err = m.Scan(&res.List)
}
if len(res.List) == 0 {
fmt.Println("需要获取计划的计划", req.SourceType)
m := dao.PlanWeek.Ctx(ctx).WithAll().Where(dao.PlanWeek.Columns().PlanId, req.PlanID)
if req.SourceType != "" {
m = m.Where(dao.PlanWeek.Columns().SourceType, req.SourceType)
}
err = m.Scan(&res.List)
}
liberr.ErrIsNil(ctx, err, "获取数据失败")
})
return
}
func (s *sPlanWeek) List(ctx context.Context, req *system.PlanWeekSearchReq) (listRes *system.PlanWeekSearchRes, err error) {
listRes = new(system.PlanWeekSearchRes)
err = g.Try(ctx, func(ctx context.Context) {
m := dao.PlanWeek.Ctx(ctx).As("a").WithAll().
LeftJoin("plan_week_reality", "b", "a.plan_id=b.plan_id and a.source_type = b.source_type and a.name=b.name").
Fields("a.*,IF(b.status=2, b.status, a.status) as statusTwo")
if req.ProjectId != "" {
m = m.Where("a."+dao.PlanWeek.Columns().ProjectId+" = ?", req.ProjectId)
}
if len(req.DateRange) != 0 {
m = m.Where("date_format(a.start,'%Y-%m-%d') >= ? AND date_format(a.end,'%Y-%m-%d')<=?", req.DateRange[0], req.DateRange[1])
}
var res []*model.PlanWeekInfoRes
err = m.Fields(system.PlanWeekSearchRes{}).Scan(&res)
liberr.ErrIsNil(ctx, err, "获取数据失败")
listRes.List = []*model.PlanWeekListRes{}
var plans_map = make(map[string]*model.PlanWeekListRes)
for _, v := range res {
if v.StatusTwo == 2 {
v.Status = v.StatusTwo
}
//当前时间在周计划的开始时间~结束时间内,那么任务就是进行中
flag := WhetherItsInRange(v.Start, v.End)
if flag {
if v.StatusTwo == 2 {
v.Status = v.StatusTwo
} else {
v.Status = 1
}
}
pl := plans_map[v.PlanId]
if pl == nil {
pl = &model.PlanWeekListRes{}
pl.PlanID = v.PlanId
pl.PlanName = v.PlanName
pl.Start = v.Start
pl.Status = v.Status
pl.End = v.End
pl.ProjectId = v.ProjectId
pl.Tasks = []model.Task{}
plans_map[v.PlanId] = pl
}
tsk := model.Task{}
tsk.SourceId = v.SourceId
tsk.Name = v.Name
tsk.Table = v.Table
tsk.Status = v.Status
tsk.SourceType = v.SourceType
tsk.Cnt = v.Cnt
pl.Tasks = append(pl.Tasks, tsk)
/*listRes.List[k] = &model.PlanWeekListRes{
Id: v.Id,
ProjectId: v.ProjectId,
SourceId: v.SourceId,
Name: v.Name,
Start: v.Start,
End: v.End,
PlanName: v.PlanName,
PlanId: v.PlanId,
CreateBy: v.CreateBy,
UpdateBy: v.UpdateBy,
CreateAt: v.CreateAt,
UpdateAt: v.UpdateAt,
Table: v.Table,
Status: v.Status,
}*/
}
for _, plan := range plans_map {
listRes.List = append(listRes.List, plan)
}
sort.Slice(listRes.List, func(i, j int) bool {
return listRes.List[i].Start < listRes.List[j].Start
})
})
return
}
func WhetherItsInRange(startDateString, endDateString string) (flag bool) {
flag = false
// 解析开始日期字符串
startDate, err := time.Parse("2006-01-02", startDateString)
if err != nil {
fmt.Println("解析开始日期出错:", err)
return
}
// 手动设置开始日期的时分秒为 00:00:00
startDateTime := time.Date(startDate.Year(), startDate.Month(), startDate.Day(), 0, 0, 0, 0, time.UTC)
// 解析结束日期字符串
endDate, err := time.Parse("2006-01-02", endDateString)
if err != nil {
fmt.Println("解析结束日期出错:", err)
return
}
// 手动设置结束日期的时分秒为 23:59:59
endDateTime := time.Date(endDate.Year(), endDate.Month(), endDate.Day(), 23, 59, 59, 999999999, time.UTC)
// 获取当前时间
currentTime := time.Now()
// 检查当前时间是否在指定范围内 true在 false不在
if currentTime.After(startDateTime) && currentTime.Before(endDateTime) {
return true
} else {
return false
}
}
func sortSlice[T constraints.Ordered](s []T) {
sort.Slice(s, func(i, j int) bool {
val := reflect.ValueOf(s[i])
fmt.Println(val)
//typ := reflect.TypeOf(data)
return s[i] < s[j]
})
}
func (s *sPlanWeek) GetById(ctx context.Context, id int) (res *model.PlanWeekInfoRes, err error) {
err = g.Try(ctx, func(ctx context.Context) {
err = dao.PlanWeek.Ctx(ctx).WithAll().Where(dao.PlanWeek.Columns().Id, id).Scan(&res)
liberr.ErrIsNil(ctx, err, "获取信息失败")
})
return
}
func (s *sPlanWeek) Add(ctx context.Context, req *system.PlanWeekAddReq) (err error) {
if len(req.Tasks) == 0 {
err = errors.New("工作记录为空")
return
}
err = g.Try(ctx, func(ctx context.Context) {
var tasks []do.PlanWeek
CreateBy := ct.New().GetLoginUser(ctx).Id
for _, task := range req.Tasks {
t := do.PlanWeek{}
t.ProjectId = req.ProjectId
t.PlanName = req.PlanName
t.PlanId = gmd5.MustEncryptString(gtime.Datetime())
t.SourceId = task.SourceId
t.Name = task.Name
//t.Table = task.Table
t.CreateBy = CreateBy
t.UpdateBy = CreateBy
t.Start = req.Start
t.End = req.End
t.SourceType = task.SourceType
t.Cnt = task.Cnt
tasks = append(tasks, t)
}
_, err = dao.PlanWeek.Ctx(ctx).Insert(&tasks)
fmt.Println(err)
liberr.ErrIsNil(ctx, err, "添加失败")
})
return
}
func (s *sPlanWeek) Edit(ctx context.Context, req *system.PlanWeekEditReq) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.PlanWeek.Ctx(ctx).Where(dao.PlanWeek.Columns().PlanId, req.PlanID).Unscoped().Delete()
var tasks []do.PlanWeek
CreateBy := ct.New().GetLoginUser(ctx).Id
for _, task := range req.Tasks {
t := do.PlanWeek{}
t.ProjectId = req.ProjectId
t.PlanName = req.PlanName
t.PlanId = req.PlanID
t.SourceId = task.SourceId
t.Name = task.Name
//t.Table = task.Table
t.CreateBy = CreateBy
t.UpdateBy = CreateBy
t.Start = req.Start
t.End = req.End
t.SourceType = task.SourceType
t.Cnt = task.Cnt
tasks = append(tasks, t)
}
_, err = dao.PlanWeek.Ctx(ctx).Insert(&tasks)
liberr.ErrIsNil(ctx, err, "修改失败")
})
return
}
func (s *sPlanWeek) Delete(ctx context.Context, planID string) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.PlanWeek.Ctx(ctx).Unscoped().Delete(dao.PlanWeek.Columns().PlanId, planID)
_, err = dao.PlanWeekReality.Ctx(ctx).Unscoped().Delete(dao.PlanWeek.Columns().PlanId, planID)
liberr.ErrIsNil(ctx, err, "删除失败")
})
return err
})
return
}