refactor: 代码优化
- 历史生产记录查询修改 - 定时初始化车间生产记录
正在显示
15 个修改的文件
包含
302 行增加
和
31 行删除
| @@ -37,6 +37,9 @@ func (crontabService *CrontabService) initTask() { | @@ -37,6 +37,9 @@ func (crontabService *CrontabService) initTask() { | ||
| 37 | }) | 37 | }) |
| 38 | task.AddTask("PullPrdMoK3cloud", PullPrdMoK3cloud) | 38 | task.AddTask("PullPrdMoK3cloud", PullPrdMoK3cloud) |
| 39 | 39 | ||
| 40 | + autoInitWorkshopProductRecord := task.NewTask("AutoInitWorkshopProductRecord", "0 0 */4 * * *", AutoInitWorkshopProductRecord) | ||
| 41 | + task.AddTask("AutoInitWorkshopProductRecord", autoInitWorkshopProductRecord) | ||
| 42 | + | ||
| 40 | autoApproveAttendanceRecord := task.NewTask("autoApproveAttendanceRecord", "0 */2 * * * *", AutoApproveProductAttendanceRecord) | 43 | autoApproveAttendanceRecord := task.NewTask("autoApproveAttendanceRecord", "0 */2 * * * *", AutoApproveProductAttendanceRecord) |
| 41 | task.AddTask("autoApproveAttendanceRecord", autoApproveAttendanceRecord) | 44 | task.AddTask("autoApproveAttendanceRecord", autoApproveAttendanceRecord) |
| 42 | 45 |
| 1 | +package crontab | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/linmadan/egglib-go/transaction/pg" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/dao" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/repository" | ||
| 13 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" | ||
| 14 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
| 15 | + "time" | ||
| 16 | +) | ||
| 17 | + | ||
| 18 | +// AutoInitWorkshopProductRecord 自动初始化车间生产记录 | ||
| 19 | +func AutoInitWorkshopProductRecord(ctx context.Context) error { | ||
| 20 | + defer func() { | ||
| 21 | + if r := recover(); r != nil { | ||
| 22 | + log.Logger.Error(fmt.Sprintf("%v", r), map[string]interface{}{"task": "自动初始化车间生产记录"}) | ||
| 23 | + } | ||
| 24 | + }() | ||
| 25 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 26 | + if err != nil { | ||
| 27 | + return err | ||
| 28 | + } | ||
| 29 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 30 | + return err | ||
| 31 | + } | ||
| 32 | + defer func() { | ||
| 33 | + if err != nil { | ||
| 34 | + log.Logger.Error("【自动初始化车间生产记录】 失败:" + err.Error()) | ||
| 35 | + } | ||
| 36 | + transactionContext.RollbackTransaction() | ||
| 37 | + }() | ||
| 38 | + log.Logger.Debug("【自动初始化车间生产记录】 启动") | ||
| 39 | + _, workshop, err := factory.FastPgWorkshop(transactionContext, constant.MANUFACTURE_DEFAULT_WORKSHOPID) | ||
| 40 | + if err != nil { | ||
| 41 | + return err | ||
| 42 | + } | ||
| 43 | + productPlanDispatchRecordDao, _ := dao.NewProductPlanDispatchRecord(transactionContext.(*pg.TransactionContext)) | ||
| 44 | + productPlans, err := productPlanDispatchRecordDao.ProductPlans(constant.MANUFACTURE_DEFAULT_COMPANYID, | ||
| 45 | + constant.MANUFACTURE_DEFAULT_ORGID, | ||
| 46 | + constant.MANUFACTURE_DEFAULT_WORKSHOPID, | ||
| 47 | + utils.GetZeroTimeWithLocal(time.Now(), time.UTC), "") | ||
| 48 | + if err != nil { | ||
| 49 | + return err | ||
| 50 | + } | ||
| 51 | + if len(productPlans) == 0 { | ||
| 52 | + log.Logger.Debug("【自动初始化车间生产记录】 当天执行计划为空") | ||
| 53 | + return nil | ||
| 54 | + } | ||
| 55 | + workshopProductRecordDao, _ := dao.NewWorkshopProductRecordDao(transactionContext.(*pg.TransactionContext)) | ||
| 56 | + workshopProductRecordRepository, _ := repository.NewWorkshopProductRecordRepository(transactionContext.(*pg.TransactionContext)) | ||
| 57 | + lines := workshop.GetProductLines(domain.NotDeleted) | ||
| 58 | + for _, line := range lines { | ||
| 59 | + for _, section := range line.ProductSections { | ||
| 60 | + if !(section.SectionName == domain.ProductSection1 || section.SectionName == domain.ProductSection2) { | ||
| 61 | + continue | ||
| 62 | + } | ||
| 63 | + if section.Removed == domain.Deleted { | ||
| 64 | + continue | ||
| 65 | + } | ||
| 66 | + workstation := domain.NewWorkStation(workshop, line, section) | ||
| 67 | + cid := constant.MANUFACTURE_DEFAULT_COMPANYID | ||
| 68 | + oid := constant.MANUFACTURE_DEFAULT_ORGID | ||
| 69 | + for _, plan := range productPlans { | ||
| 70 | + var workshopProductRecord *domain.WorkshopProductRecord | ||
| 71 | + workshopProductRecord, err = workshopProductRecordDao.WorkshopProductRecord(cid, oid, workstation.WorkStationId, plan.ProductPlanId, time.Now()) | ||
| 72 | + if err == domain.ErrorNotFound { | ||
| 73 | + workshopProductRecord = domainService.NewWorkshopProductRecord(&domain.ProductRecord{ | ||
| 74 | + CompanyId: constant.MANUFACTURE_DEFAULT_COMPANYID, | ||
| 75 | + OrgId: constant.MANUFACTURE_DEFAULT_ORGID, | ||
| 76 | + WorkStation: workstation, | ||
| 77 | + CreatedAt: time.Now(), | ||
| 78 | + ProductRecordInfo: &domain.ProductRecordInfo{ | ||
| 79 | + ProductPlanId: plan.ProductPlanId, | ||
| 80 | + PlanProductName: plan.PlanProductName, | ||
| 81 | + BatchNumber: plan.BatchNumber, | ||
| 82 | + }, | ||
| 83 | + }, plan) | ||
| 84 | + if workshopProductRecord, err = workshopProductRecordRepository.Save(workshopProductRecord); err != nil { | ||
| 85 | + return err | ||
| 86 | + } | ||
| 87 | + log.Logger.Debug(fmt.Sprintf("【自动初始化车间生产记录】 工位:%v(%v) 初始产能:%v kg 日期:%v ID:%v", | ||
| 88 | + workshopProductRecord.WorkStation.WorkStationId, workshopProductRecord.WorkStation.SectionName, | ||
| 89 | + workshopProductRecord.ProductWeigh, workshopProductRecord.ProductRecordInfo.ProductDate, workshopProductRecord.WorkshopProductRecordId)) | ||
| 90 | + continue | ||
| 91 | + } | ||
| 92 | + if err != nil { | ||
| 93 | + log.Logger.Error(err.Error()) | ||
| 94 | + return nil | ||
| 95 | + } | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | + } | ||
| 99 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
| 100 | + return err | ||
| 101 | + } | ||
| 102 | + return nil | ||
| 103 | +} |
| @@ -5,11 +5,13 @@ import ( | @@ -5,11 +5,13 @@ import ( | ||
| 5 | "github.com/linmadan/egglib-go/core/application" | 5 | "github.com/linmadan/egglib-go/core/application" |
| 6 | "github.com/linmadan/egglib-go/transaction/pg" | 6 | "github.com/linmadan/egglib-go/transaction/pg" |
| 7 | "github.com/linmadan/egglib-go/utils/tool_funs" | 7 | "github.com/linmadan/egglib-go/utils/tool_funs" |
| 8 | + "github.com/linmadan/egglib-go/utils/xtime" | ||
| 8 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | 9 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" |
| 9 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/command" | 10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/command" |
| 10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/dto" | 11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/dto" |
| 11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/query" | 12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/query" |
| 12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 13 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
| 14 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/dao" | ||
| 13 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | 15 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" |
| 14 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" | 16 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" |
| 15 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" | 17 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" |
| @@ -514,6 +516,26 @@ func (productPlanService *ProductPlanService) ReturnMaterial(returnMaterialComma | @@ -514,6 +516,26 @@ func (productPlanService *ProductPlanService) ReturnMaterial(returnMaterialComma | ||
| 514 | 516 | ||
| 515 | productRecordService, _ := domainService.NewPGProductRecordService(transactionContext.(*pg.TransactionContext)) | 517 | productRecordService, _ := domainService.NewPGProductRecordService(transactionContext.(*pg.TransactionContext)) |
| 516 | 518 | ||
| 519 | + productRecordDao, _ := dao.NewProductRecordDao(transactionContext.(*pg.TransactionContext)) | ||
| 520 | + begin := xtime.BeginningOfDay() | ||
| 521 | + end := time.Now() | ||
| 522 | + workstationId := domain.WorkstationKey(returnMaterialCommand.WorkshopId, returnMaterialCommand.LineId, returnMaterialCommand.SectionId) | ||
| 523 | + totalReceive, err := productRecordDao.ProductWeightStatics(returnMaterialCommand.CompanyId, returnMaterialCommand.OrgId, domain.RecordTypeReceiveMaterial, returnMaterialCommand.ProductPlanId, workstationId, begin, end) | ||
| 524 | + if err != nil { | ||
| 525 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 526 | + } | ||
| 527 | + totalReturn, err := productRecordDao.ProductWeightStatics(returnMaterialCommand.CompanyId, returnMaterialCommand.OrgId, domain.RecordTypeReturnMaterial, returnMaterialCommand.ProductPlanId, workstationId, begin, end) | ||
| 528 | + if err != nil { | ||
| 529 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 530 | + } | ||
| 531 | + allowReturn := totalReceive - totalReturn | ||
| 532 | + if totalReturn+returnMaterialCommand.Weigh > totalReceive { | ||
| 533 | + if allowReturn > 0 { | ||
| 534 | + return nil, application.ThrowError(application.BUSINESS_ERROR, fmt.Sprintf("当天累计退料大于累计领料,当前只允许退料 %v kg", totalReceive-totalReturn)) | ||
| 535 | + } | ||
| 536 | + return nil, application.ThrowError(application.BUSINESS_ERROR, fmt.Sprintf("当天累计退料大于累计领料")) | ||
| 537 | + } | ||
| 538 | + | ||
| 517 | _, err = productRecordService.SubmitProductRecord(domain.RecordTypeReturnMaterial, tool_funs.SimpleStructToMap(returnMaterialCommand)) | 539 | _, err = productRecordService.SubmitProductRecord(domain.RecordTypeReturnMaterial, tool_funs.SimpleStructToMap(returnMaterialCommand)) |
| 518 | if err != nil { | 540 | if err != nil { |
| 519 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 541 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| @@ -4,6 +4,7 @@ import ( | @@ -4,6 +4,7 @@ import ( | ||
| 4 | "github.com/linmadan/egglib-go/utils/xtime" | 4 | "github.com/linmadan/egglib-go/utils/xtime" |
| 5 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 5 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" | 6 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" |
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
| 7 | ) | 8 | ) |
| 8 | 9 | ||
| 9 | // HistoryProductRecord 历史生成记录 | 10 | // HistoryProductRecord 历史生成记录 |
| @@ -29,13 +30,16 @@ type HistoryProductRecord struct { | @@ -29,13 +30,16 @@ type HistoryProductRecord struct { | ||
| 29 | func (d *HistoryProductRecord) LoadDto(m *domain.ProductRecord) *HistoryProductRecord { | 30 | func (d *HistoryProductRecord) LoadDto(m *domain.ProductRecord) *HistoryProductRecord { |
| 30 | d.ProductRecordId = m.ProductRecordId | 31 | d.ProductRecordId = m.ProductRecordId |
| 31 | d.ProductWorker = m.ProductWorker | 32 | d.ProductWorker = m.ProductWorker |
| 32 | - d.Weight = utils.Round(m.ProductRecordInfo.WeighBefore, 1) | 33 | + d.Weight = utils.Round(m.ProductRecordInfo.Original, 1) |
| 33 | d.Status = m.ProductRecordInfo.ApproveStatus | 34 | d.Status = m.ProductRecordInfo.ApproveStatus |
| 34 | d.PlanProductName = m.ProductRecordInfo.PlanProductName | 35 | d.PlanProductName = m.ProductRecordInfo.PlanProductName |
| 35 | d.BatchNumber = m.ProductRecordInfo.BatchNumber | 36 | d.BatchNumber = m.ProductRecordInfo.BatchNumber |
| 36 | d.CreatedAt = m.CreatedAt.Local().Format("2006-01-02 15:04:05") | 37 | d.CreatedAt = m.CreatedAt.Local().Format("2006-01-02 15:04:05") |
| 37 | d.ProductRecordType = m.ProductRecordType | 38 | d.ProductRecordType = m.ProductRecordType |
| 38 | - if m.ProductRecordType != domain.RecordTypeSecondLevelWeigh && m.ProductRecordInfo.ApproveStatus == domain.ProductRecordNotApprove && !xtime.BeginningOfDay().Equal(xtime.New(m.CreatedAt).BeginningOfDay()) { | 39 | + if m.ProductRecordType != domain.RecordTypeSecondLevelWeigh && |
| 40 | + m.ProductRecordInfo.ApproveStatus == domain.ProductRecordNotApprove && | ||
| 41 | + !(xtime.BeginningOfDay().Equal(xtime.New(m.CreatedAt.Local()).BeginningOfDay())) { | ||
| 42 | + log.Logger.Debug("not equal", map[string]interface{}{"t1": xtime.BeginningOfDay(), "t2": xtime.New(m.CreatedAt.Local()).BeginningOfDay()}) | ||
| 39 | d.Status = domain.ProductRecordLogged | 43 | d.Status = domain.ProductRecordLogged |
| 40 | } | 44 | } |
| 41 | return d | 45 | return d |
| @@ -27,12 +27,12 @@ type HistoryProductRecordQuery struct { | @@ -27,12 +27,12 @@ type HistoryProductRecordQuery struct { | ||
| 27 | PageNumber int `cname:"页码" json:"pageNumber,omitempty"` | 27 | PageNumber int `cname:"页码" json:"pageNumber,omitempty"` |
| 28 | // 页数 | 28 | // 页数 |
| 29 | PageSize int `cname:"页数" json:"pageSize,omitempty"` | 29 | PageSize int `cname:"页数" json:"pageSize,omitempty"` |
| 30 | - // 车间名称 | ||
| 31 | - //WorkshopName string `cname:"车间名称" json:"workshopName"` | ||
| 32 | - // 批号 | ||
| 33 | - //BatchNumber string `cname:"批号" json:"batchNumber"` | ||
| 34 | - // 姓名 | ||
| 35 | - //UserName string `cname:"姓名" json:"userName"` | 30 | + // 车间ID |
| 31 | + WorkshopId int `cname:"车间ID" json: workshopId,omitempty"` | ||
| 32 | + // 生产线ID | ||
| 33 | + LineId int `cname:"生产线ID" json:"lineId,omitempty"` | ||
| 34 | + // 工段ID | ||
| 35 | + SectionId int `json:"sectionId,omitempty"` | ||
| 36 | // 生产记录类型:1:领料 2:退料 4:称重 8:二级品称重 | 36 | // 生产记录类型:1:领料 2:退料 4:称重 8:二级品称重 |
| 37 | ProductRecordType int `cname:"生产记录类型:1:领料 2:退料 4:称重 8:二级品称重" json:"productRecordType"` | 37 | ProductRecordType int `cname:"生产记录类型:1:领料 2:退料 4:称重 8:二级品称重" json:"productRecordType"` |
| 38 | // 生产线名称 | 38 | // 生产线名称 |
| @@ -92,11 +92,19 @@ func (cmd *HistoryProductRecordQuery) Valid(validation *validation.Validation) { | @@ -92,11 +92,19 @@ func (cmd *HistoryProductRecordQuery) Valid(validation *validation.Validation) { | ||
| 92 | cmd.ProductBeginTime = t | 92 | cmd.ProductBeginTime = t |
| 93 | cmd.ProductEndTime = t.AddDate(0, 0, 1) | 93 | cmd.ProductEndTime = t.AddDate(0, 0, 1) |
| 94 | } | 94 | } |
| 95 | - if cmd.Status == domain.ProductRecordLogged { | 95 | + if cmd.Status == domain.ProductRecordNotApprove { |
| 96 | + cmd.Status = domain.ProductRecordNotApprove | ||
| 97 | + if xtime.IsZero(cmd.ProductBeginTime) || xtime.BeforeEqual(cmd.ProductBeginTime, xtime.BeginningOfDay()) { | ||
| 98 | + cmd.ProductBeginTime = xtime.BeginningOfDay() | ||
| 99 | + } | ||
| 100 | + } else if cmd.Status == domain.ProductRecordLogged { | ||
| 96 | cmd.Status = domain.ProductRecordNotApprove | 101 | cmd.Status = domain.ProductRecordNotApprove |
| 97 | if len(cmd.Date) == 0 && xtime.IsZero(cmd.ProductEndTime) { | 102 | if len(cmd.Date) == 0 && xtime.IsZero(cmd.ProductEndTime) { |
| 98 | cmd.ProductEndTime = xtime.BeginningOfDay() | 103 | cmd.ProductEndTime = xtime.BeginningOfDay() |
| 99 | } | 104 | } |
| 105 | + if len(cmd.Date) > 0 && !xtime.BeforeEqual(cmd.ProductEndTime, xtime.BeginningOfDay()) { | ||
| 106 | + cmd.Status = domain.ProductRecordLogged | ||
| 107 | + } | ||
| 100 | } | 108 | } |
| 101 | } | 109 | } |
| 102 | 110 |
| @@ -14,6 +14,7 @@ var HTTP_PORT int = 8081 | @@ -14,6 +14,7 @@ var HTTP_PORT int = 8081 | ||
| 14 | var CACHE_PREFIX = "allied-creation-manufacture-dev" | 14 | var CACHE_PREFIX = "allied-creation-manufacture-dev" |
| 15 | var LOG_LEVEL = "debug" | 15 | var LOG_LEVEL = "debug" |
| 16 | var LOG_FILE = "app.log" | 16 | var LOG_FILE = "app.log" |
| 17 | +var PPROF_ON = true | ||
| 17 | 18 | ||
| 18 | //天联共创基础模块 | 19 | //天联共创基础模块 |
| 19 | var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" //"http://allied-creation-basic-dev.fjmaimaimai.com" | 20 | var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" //"http://allied-creation-basic-dev.fjmaimaimai.com" |
| @@ -45,5 +46,6 @@ func init() { | @@ -45,5 +46,6 @@ func init() { | ||
| 45 | SERVICE_ENV = Configurator.DefaultString("SERVICE_ENV", SERVICE_ENV) | 46 | SERVICE_ENV = Configurator.DefaultString("SERVICE_ENV", SERVICE_ENV) |
| 46 | HTTP_PORT = Configurator.DefaultInt("HTTP_PORT", HTTP_PORT) | 47 | HTTP_PORT = Configurator.DefaultInt("HTTP_PORT", HTTP_PORT) |
| 47 | SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV) | 48 | SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV) |
| 49 | + PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) | ||
| 48 | CACHE_PREFIX = SERVICE_NAME | 50 | CACHE_PREFIX = SERVICE_NAME |
| 49 | } | 51 | } |
| @@ -80,7 +80,9 @@ func (productAttendanceRecord *ProductAttendanceRecord) ComputeWorkTimeBefore(pr | @@ -80,7 +80,9 @@ func (productAttendanceRecord *ProductAttendanceRecord) ComputeWorkTimeBefore(pr | ||
| 80 | if !productAttendanceRecord.SignOut.After(productAttendanceRecord.SignIn) { | 80 | if !productAttendanceRecord.SignOut.After(productAttendanceRecord.SignIn) { |
| 81 | return 0 | 81 | return 0 |
| 82 | } | 82 | } |
| 83 | - wt := utils.Round(productAttendanceRecord.SignOut.Sub(productAttendanceRecord.SignIn).Hours(), 2) | 83 | + signIn := roundTime(productAttendanceRecord.SignIn) |
| 84 | + signOut := roundTime(productAttendanceRecord.SignOut) | ||
| 85 | + wt := utils.Round(signOut.Sub(signIn).Hours(), 2) | ||
| 84 | if productCalendar == nil { | 86 | if productCalendar == nil { |
| 85 | return roundWorkTime(wt) | 87 | return roundWorkTime(wt) |
| 86 | } | 88 | } |
| @@ -108,6 +110,20 @@ func roundWorkTime(wt float64) float64 { | @@ -108,6 +110,20 @@ func roundWorkTime(wt float64) float64 { | ||
| 108 | return i | 110 | return i |
| 109 | } | 111 | } |
| 110 | 112 | ||
| 113 | +func roundTime(t time.Time) time.Time { | ||
| 114 | + hour, min, _ := t.Local().Clock() | ||
| 115 | + y, m, d := t.Local().Date() | ||
| 116 | + newTime := time.Date(y, m, d, hour, 0, 0, 0, time.Local) | ||
| 117 | + if min < 11 { | ||
| 118 | + min = 0 | ||
| 119 | + } else if min >= 11 && min < 41 { | ||
| 120 | + min = 30 | ||
| 121 | + } else { | ||
| 122 | + min = 60 | ||
| 123 | + } | ||
| 124 | + return newTime.Add(time.Minute * time.Duration(min)) | ||
| 125 | +} | ||
| 126 | + | ||
| 111 | func (productAttendanceRecord *ProductAttendanceRecord) SetProductTimeByProductCalendar(productCalendar *ProductCalendar) error { | 127 | func (productAttendanceRecord *ProductAttendanceRecord) SetProductTimeByProductCalendar(productCalendar *ProductCalendar) error { |
| 112 | now := xtime.New(productAttendanceRecord.SignIn) | 128 | now := xtime.New(productAttendanceRecord.SignIn) |
| 113 | productAttendanceRecord.ProductDate = now.BeginningOfDay() | 129 | productAttendanceRecord.ProductDate = now.BeginningOfDay() |
| @@ -11,7 +11,7 @@ const ( | @@ -11,7 +11,7 @@ const ( | ||
| 11 | ) | 11 | ) |
| 12 | 12 | ||
| 13 | const ( | 13 | const ( |
| 14 | - ProductSection1 = "打料" | 14 | + ProductSection1 = "制模" |
| 15 | ProductSection2 = "成型" | 15 | ProductSection2 = "成型" |
| 16 | ProductSection3 = "穿串" | 16 | ProductSection3 = "穿串" |
| 17 | ProductSection4 = "包装" | 17 | ProductSection4 = "包装" |
| @@ -29,7 +29,7 @@ func NewProductPlanDispatchRecord(transactionContext *pgTransaction.TransactionC | @@ -29,7 +29,7 @@ func NewProductPlanDispatchRecord(transactionContext *pgTransaction.TransactionC | ||
| 29 | // 日期 | 29 | // 日期 |
| 30 | // 产品编号 | 30 | // 产品编号 |
| 31 | // 调度状态 status | 31 | // 调度状态 status |
| 32 | -func (dao *ProductPlanDispatchRecordDao) DeviceProductPlan(companyId, orgId int, workStationId string, date time.Time, productCode string, status int) (*domain.ProductPlanDispatchRecord, error) { | 32 | +func (dao *ProductPlanDispatchRecordDao) ProductPlanDispatchRecord(companyId, orgId int, workStationId string, date time.Time, productCode string, status int) (*domain.ProductPlanDispatchRecord, error) { |
| 33 | tx := dao.transactionContext.PgTx | 33 | tx := dao.transactionContext.PgTx |
| 34 | productPlanDispatchRecordModel := new(models.ProductPlanDispatchRecord) | 34 | productPlanDispatchRecordModel := new(models.ProductPlanDispatchRecord) |
| 35 | query := sqlbuilder.BuildQuery(tx.Model(productPlanDispatchRecordModel), map[string]interface{}{}) | 35 | query := sqlbuilder.BuildQuery(tx.Model(productPlanDispatchRecordModel), map[string]interface{}{}) |
| @@ -37,7 +37,9 @@ func (dao *ProductPlanDispatchRecordDao) DeviceProductPlan(companyId, orgId int, | @@ -37,7 +37,9 @@ func (dao *ProductPlanDispatchRecordDao) DeviceProductPlan(companyId, orgId int, | ||
| 37 | query.Where("org_id = ?", orgId) | 37 | query.Where("org_id = ?", orgId) |
| 38 | query.Where("work_station->>'workStationId'=?", workStationId) | 38 | query.Where("work_station->>'workStationId'=?", workStationId) |
| 39 | query.Where("product_date = ?", date) | 39 | query.Where("product_date = ?", date) |
| 40 | + if status > 0 { | ||
| 40 | query.Where("plan_dispatch_status = ?", status) | 41 | query.Where("plan_dispatch_status = ?", status) |
| 42 | + } | ||
| 41 | query.Where("plan_dispatch_record_ext->>'productCode'=?", productCode) | 43 | query.Where("plan_dispatch_record_ext->>'productCode'=?", productCode) |
| 42 | query.Order("updated_at desc") | 44 | query.Order("updated_at desc") |
| 43 | if err := query.First(); err != nil { | 45 | if err := query.First(); err != nil { |
| @@ -53,3 +55,57 @@ func (dao *ProductPlanDispatchRecordDao) DeviceProductPlan(companyId, orgId int, | @@ -53,3 +55,57 @@ func (dao *ProductPlanDispatchRecordDao) DeviceProductPlan(companyId, orgId int, | ||
| 53 | return transform.TransformToProductPlanDispatchRecordDomainModelFromPgModels(productPlanDispatchRecordModel) | 55 | return transform.TransformToProductPlanDispatchRecordDomainModelFromPgModels(productPlanDispatchRecordModel) |
| 54 | } | 56 | } |
| 55 | } | 57 | } |
| 58 | + | ||
| 59 | +func (dao *ProductPlanDispatchRecordDao) ProductPlan(companyId, orgId int, workshopId int, date time.Time, productCode string) (*domain.ProductPlan, error) { | ||
| 60 | + tx := dao.transactionContext.PgTx | ||
| 61 | + productPlan := new(models.ProductPlan) | ||
| 62 | + query := sqlbuilder.BuildQuery(tx.Model(productPlan), map[string]interface{}{}) | ||
| 63 | + query.Where("company_id = ?", companyId) | ||
| 64 | + query.Where("org_id = ?", orgId) | ||
| 65 | + query.Where("workshop->>'workshopId'='?'", workshopId) | ||
| 66 | + query.Where("product_date = ?", date) | ||
| 67 | + if len(productCode) > 0 { | ||
| 68 | + query.Where("ext #>>'{productPlanExt,productCode}'=?", productCode) | ||
| 69 | + } | ||
| 70 | + query.Order("updated_at desc") | ||
| 71 | + if err := query.First(); err != nil { | ||
| 72 | + if err.Error() == "pg: no rows in result set" { | ||
| 73 | + return nil, domain.ErrorNotFound | ||
| 74 | + } else { | ||
| 75 | + return nil, err | ||
| 76 | + } | ||
| 77 | + } | ||
| 78 | + if productPlan.ProductPlanId == 0 { | ||
| 79 | + return nil, nil | ||
| 80 | + } else { | ||
| 81 | + return transform.TransformToProductPlanDomainModelFromPgModels(productPlan) | ||
| 82 | + } | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +func (dao *ProductPlanDispatchRecordDao) ProductPlans(companyId, orgId int, workshopId int, date time.Time, productCode string) ([]*domain.ProductPlan, error) { | ||
| 86 | + tx := dao.transactionContext.PgTx | ||
| 87 | + productPlan := new(models.ProductPlan) | ||
| 88 | + query := sqlbuilder.BuildQuery(tx.Model(productPlan), map[string]interface{}{}) | ||
| 89 | + query.Where("company_id = ?", companyId) | ||
| 90 | + query.Where("org_id = ?", orgId) | ||
| 91 | + query.Where("workshop->>'workshopId'='?'", workshopId) | ||
| 92 | + query.Where("product_date = ?", date) | ||
| 93 | + if len(productCode) > 0 { | ||
| 94 | + query.Where("ext #>>'{productPlanExt,productCode}'=?", productCode) | ||
| 95 | + } | ||
| 96 | + query.Order("updated_at desc") | ||
| 97 | + var productPlanModels = make([]*models.ProductPlan, 0) | ||
| 98 | + var productPlans = make([]*domain.ProductPlan, 0) | ||
| 99 | + if err := query.Select(&productPlanModels); err != nil { | ||
| 100 | + return productPlans, err | ||
| 101 | + } else { | ||
| 102 | + for _, productPlanModel := range productPlanModels { | ||
| 103 | + if productPlan, err := transform.TransformToProductPlanDomainModelFromPgModels(productPlanModel); err != nil { | ||
| 104 | + return productPlans, err | ||
| 105 | + } else { | ||
| 106 | + productPlans = append(productPlans, productPlan) | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + return productPlans, nil | ||
| 110 | + } | ||
| 111 | +} |
| @@ -117,7 +117,7 @@ select sum(a.weight) item_total,max(sname) sname from ( | @@ -117,7 +117,7 @@ select sum(a.weight) item_total,max(sname) sname from ( | ||
| 117 | and product_record_info->>'approveStatus'='2' | 117 | and product_record_info->>'approveStatus'='2' |
| 118 | and created_at >=? | 118 | and created_at >=? |
| 119 | and created_at <? | 119 | and created_at <? |
| 120 | - and work_station->>'sectionName' in ('打料','成型','穿串','包装') | 120 | + and work_station->>'sectionName' in ('制模','成型','穿串','包装') |
| 121 | ) a | 121 | ) a |
| 122 | group by a.workStationId | 122 | group by a.workStationId |
| 123 | ) | 123 | ) |
| @@ -127,10 +127,31 @@ select sname,round(item_total/(select sum(item_total) from item_product)*100, 0) | @@ -127,10 +127,31 @@ select sname,round(item_total/(select sum(item_total) from item_product)*100, 0) | ||
| 127 | ) | 127 | ) |
| 128 | --select * from item_product_rate | 128 | --select * from item_product_rate |
| 129 | select a.sname, coalesce(b.rate,0) rate from ( | 129 | select a.sname, coalesce(b.rate,0) rate from ( |
| 130 | - select unnest(ARRAY ['打料','成型','穿串','包装']) sname | 130 | + select unnest(ARRAY ['制模','成型','穿串','包装']) sname |
| 131 | ) a left join item_product_rate b on a.sname=b.sname`) | 131 | ) a left join item_product_rate b on a.sname=b.sname`) |
| 132 | if _, err := tx.Query(result, sql, companyId, orgId, workshopId, beginTime, endTime); err != nil { | 132 | if _, err := tx.Query(result, sql, companyId, orgId, workshopId, beginTime, endTime); err != nil { |
| 133 | return err | 133 | return err |
| 134 | } | 134 | } |
| 135 | return nil | 135 | return nil |
| 136 | } | 136 | } |
| 137 | + | ||
| 138 | +// ProductWeightStatics 产能统计 | ||
| 139 | +func (dao *ProductRecordDao) ProductWeightStatics(companyId, orgId, productRecordType, productPlanId int, workstationId string, beginTime time.Time, endTime time.Time) (float64, error) { | ||
| 140 | + | ||
| 141 | + tx := dao.transactionContext.PgTx | ||
| 142 | + var result = struct { | ||
| 143 | + Total float64 | ||
| 144 | + }{} | ||
| 145 | + sql := fmt.Sprintf(` | ||
| 146 | +select coalesce(sum(cast(product_record_info->>'original' as DECIMAL)),0) total | ||
| 147 | +from manufacture.product_records | ||
| 148 | +where company_id = ? and org_id = ? and product_record_type = ? | ||
| 149 | +and work_station->>'workStationId' = ? | ||
| 150 | +and product_record_info->>'productPlanId' = '?' | ||
| 151 | +and created_at >= ? and created_at < ? | ||
| 152 | +`) | ||
| 153 | + if _, err := tx.QueryOne(&result, sql, companyId, orgId, productRecordType, workstationId, productPlanId, beginTime, endTime); err != nil { | ||
| 154 | + return 0, err | ||
| 155 | + } | ||
| 156 | + return result.Total, nil | ||
| 157 | +} |
| @@ -11,7 +11,7 @@ import ( | @@ -11,7 +11,7 @@ import ( | ||
| 11 | ) | 11 | ) |
| 12 | 12 | ||
| 13 | const ( | 13 | const ( |
| 14 | - ProductSection1 = "打料" | 14 | + ProductSection1 = "制模" //打料更新为制模 |
| 15 | ProductSection2 = "成型" | 15 | ProductSection2 = "成型" |
| 16 | ProductSection3 = "穿串" | 16 | ProductSection3 = "穿串" |
| 17 | ProductSection4 = "包装" | 17 | ProductSection4 = "包装" |
| @@ -298,7 +298,7 @@ func (ptr *PGProductRecordService) WorkshopProductStatics(productRecord *domain. | @@ -298,7 +298,7 @@ func (ptr *PGProductRecordService) WorkshopProductStatics(productRecord *domain. | ||
| 298 | workshopProductRecordDao, _ := dao.NewWorkshopProductRecordDao(ptr.transactionContext) | 298 | workshopProductRecordDao, _ := dao.NewWorkshopProductRecordDao(ptr.transactionContext) |
| 299 | workshopProductRecord, err = workshopProductRecordDao.WorkshopProductRecord(cid, oid, productRecord.WorkStation.WorkStationId, planId, productRecord.CreatedAt) | 299 | workshopProductRecord, err = workshopProductRecordDao.WorkshopProductRecord(cid, oid, productRecord.WorkStation.WorkStationId, planId, productRecord.CreatedAt) |
| 300 | if err == domain.ErrorNotFound { | 300 | if err == domain.ErrorNotFound { |
| 301 | - workshopProductRecord = newWorkshopProductRecord(productRecord, productPlan) | 301 | + workshopProductRecord = NewWorkshopProductRecord(productRecord, productPlan) |
| 302 | } else { | 302 | } else { |
| 303 | if err != nil { | 303 | if err != nil { |
| 304 | log.Logger.Error(err.Error()) | 304 | log.Logger.Error(err.Error()) |
| @@ -310,9 +310,9 @@ func (ptr *PGProductRecordService) WorkshopProductStatics(productRecord *domain. | @@ -310,9 +310,9 @@ func (ptr *PGProductRecordService) WorkshopProductStatics(productRecord *domain. | ||
| 310 | workshopProductRecord.ProductWeigh, productRecord.ProductRecordInfo.Weigh, productRecord.ProductRecordInfo.Original)) | 310 | workshopProductRecord.ProductWeigh, productRecord.ProductRecordInfo.Weigh, productRecord.ProductRecordInfo.Original)) |
| 311 | workshopProductRecord.UpdateProductWeigh(productRecord) | 311 | workshopProductRecord.UpdateProductWeigh(productRecord) |
| 312 | // 打料 跟 成型工段的初始产能是批次的产能 | 312 | // 打料 跟 成型工段的初始产能是批次的产能 |
| 313 | - if productRecord.WorkStation.SectionName == ProductSection1 && productRecord.WorkStation.SectionName == ProductSection2 { | ||
| 314 | - workshopProductRecord.AddPlanProductWeight(productPlan.PlanDevoted.Weight, productPlan.ProductPlanId) | ||
| 315 | - } | 313 | + //if productRecord.WorkStation.SectionName == ProductSection1 || productRecord.WorkStation.SectionName == ProductSection2 { |
| 314 | + // workshopProductRecord.AddPlanProductWeight(productPlan.PlanDevoted.Weight, productPlan.ProductPlanId) | ||
| 315 | + //} | ||
| 316 | 316 | ||
| 317 | if workshopProductRecord, err = workshopProductRecordRepository.Save(workshopProductRecord); err != nil { | 317 | if workshopProductRecord, err = workshopProductRecordRepository.Save(workshopProductRecord); err != nil { |
| 318 | // TODO:异常处理 | 318 | // TODO:异常处理 |
| @@ -321,8 +321,8 @@ func (ptr *PGProductRecordService) WorkshopProductStatics(productRecord *domain. | @@ -321,8 +321,8 @@ func (ptr *PGProductRecordService) WorkshopProductStatics(productRecord *domain. | ||
| 321 | return nil, nil | 321 | return nil, nil |
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | -// newEmployeeProductRecord 员工生产记录 | ||
| 325 | -func newWorkshopProductRecord(productRecord *domain.ProductRecord, productPlan *domain.ProductPlan) *domain.WorkshopProductRecord { | 324 | +// NewWorkshopProductRecord 车间生产记录 |
| 325 | +func NewWorkshopProductRecord(productRecord *domain.ProductRecord, productPlan *domain.ProductPlan) *domain.WorkshopProductRecord { | ||
| 326 | record := &domain.WorkshopProductRecord{ | 326 | record := &domain.WorkshopProductRecord{ |
| 327 | CompanyId: productRecord.CompanyId, | 327 | CompanyId: productRecord.CompanyId, |
| 328 | OrgId: productRecord.OrgId, | 328 | OrgId: productRecord.OrgId, |
| @@ -347,7 +347,7 @@ func newWorkshopProductRecord(productRecord *domain.ProductRecord, productPlan * | @@ -347,7 +347,7 @@ func newWorkshopProductRecord(productRecord *domain.ProductRecord, productPlan * | ||
| 347 | } | 347 | } |
| 348 | // 打料、成型有初始值 | 348 | // 打料、成型有初始值 |
| 349 | if productRecord.WorkStation.SectionName == ProductSection1 || productRecord.WorkStation.SectionName == ProductSection2 { | 349 | if productRecord.WorkStation.SectionName == ProductSection1 || productRecord.WorkStation.SectionName == ProductSection2 { |
| 350 | - record.ProductWeigh = productPlan.PlanDevoted.Weight | 350 | + record.AddPlanProductWeight(productPlan.PlanDevoted.Weight, productPlan.ProductPlanId) |
| 351 | } | 351 | } |
| 352 | return record | 352 | return record |
| 353 | } | 353 | } |
| @@ -78,7 +78,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | @@ -78,7 +78,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | ||
| 78 | // 封箱机、串串机需要定位到批次 | 78 | // 封箱机、串串机需要定位到批次 |
| 79 | if record.DeviceType == domain.DeviceTypeChuanChuanJi { //record.DeviceType == domain.DeviceTypeFengXiangJi || | 79 | if record.DeviceType == domain.DeviceTypeChuanChuanJi { //record.DeviceType == domain.DeviceTypeFengXiangJi || |
| 80 | datetime, _ := time.ParseInLocation("2006-01-02", deviceRunningData.Date, time.Local) | 80 | datetime, _ := time.ParseInLocation("2006-01-02", deviceRunningData.Date, time.Local) |
| 81 | - if plan, err = ptr.findDeviceProductPlan(companyId, orgId, workStation.WorkStationId, utils.GetZeroTimeWithLocal(datetime, time.UTC), deviceRunningData.ProductType); err != nil { | 81 | + if plan, err = ptr.findProductPlanAndActive(companyId, orgId, workStation, utils.GetZeroTimeWithLocal(datetime, time.UTC), deviceRunningData.ProductType); err != nil { |
| 82 | log.Logger.Error(err.Error(), map[string]interface{}{"workstation": workStation, "product_code": deviceRunningData.ProductType}) | 82 | log.Logger.Error(err.Error(), map[string]interface{}{"workstation": workStation, "product_code": deviceRunningData.ProductType}) |
| 83 | } else { | 83 | } else { |
| 84 | planId = plan.PlanDispatchRecordExt.ProductPlanId | 84 | planId = plan.PlanDispatchRecordExt.ProductPlanId |
| @@ -326,20 +326,29 @@ func (ptr *PGWorkshopDataConsumeService) saveDeviceDailyRunningRecord(companyId, | @@ -326,20 +326,29 @@ func (ptr *PGWorkshopDataConsumeService) saveDeviceDailyRunningRecord(companyId, | ||
| 326 | } | 326 | } |
| 327 | 327 | ||
| 328 | // 查找设备的生产计划,如果计划没有上线的话将他上线 | 328 | // 查找设备的生产计划,如果计划没有上线的话将他上线 |
| 329 | -func (ptr *PGWorkshopDataConsumeService) findDeviceProductPlan(companyId, orgId int, workStationId string, date time.Time, productCode string) (*domain.ProductPlanDispatchRecord, error) { | 329 | +func (ptr *PGWorkshopDataConsumeService) findProductPlanAndActive(companyId, orgId int, workStation *domain.WorkStation, date time.Time, productCode string) (*domain.ProductPlanDispatchRecord, error) { |
| 330 | planDispatchRecordDao, _ := dao.NewProductPlanDispatchRecord(ptr.transactionContext) | 330 | planDispatchRecordDao, _ := dao.NewProductPlanDispatchRecord(ptr.transactionContext) |
| 331 | planDispatchRecordRepository, _ := repository.NewProductPlanDispatchRecordRepository(ptr.transactionContext) | 331 | planDispatchRecordRepository, _ := repository.NewProductPlanDispatchRecordRepository(ptr.transactionContext) |
| 332 | - var setPlanOnline = false | ||
| 333 | - record, err := planDispatchRecordDao.DeviceProductPlan(companyId, orgId, workStationId, date, productCode, domain.PlanOnline) | 332 | + record, err := planDispatchRecordDao.ProductPlanDispatchRecord(companyId, orgId, workStation.WorkStationId, date, productCode, 0) |
| 333 | + // 未找到当前工段的调度计划,从计划管理查询是否有匹配记录,如果有在调度计划中上线 | ||
| 334 | + var productPlan *domain.ProductPlan | ||
| 334 | if err == domain.ErrorNotFound { | 335 | if err == domain.ErrorNotFound { |
| 335 | - if record, err = planDispatchRecordDao.DeviceProductPlan(companyId, orgId, workStationId, date, productCode, domain.PlanOffline); err != nil { | 336 | + if productPlan, err = planDispatchRecordDao.ProductPlan(companyId, orgId, workStation.WorkshopId, date, productCode); err == nil && productPlan != nil { |
| 337 | + var productPlanDispatch = domain.NewProductPlanDispatchRecord(productPlan, workStation) | ||
| 338 | + if productPlanDispatch, err = planDispatchRecordRepository.Save(productPlanDispatch); err != nil { | ||
| 339 | + return nil, err | ||
| 340 | + } | ||
| 341 | + return productPlanDispatch, nil | ||
| 342 | + } | ||
| 336 | return nil, err | 343 | return nil, err |
| 337 | - } else { | ||
| 338 | - setPlanOnline = true | ||
| 339 | } | 344 | } |
| 345 | + if err != nil { | ||
| 346 | + return nil, err | ||
| 347 | + } | ||
| 348 | + if record != nil && record.PlanDispatchStatus == domain.PlanOffline { | ||
| 349 | + if err = record.ChangeStatus(domain.PlanOnline); err != nil { | ||
| 350 | + return nil, err | ||
| 340 | } | 351 | } |
| 341 | - if setPlanOnline { | ||
| 342 | - record.ChangeStatus(domain.PlanOnline) | ||
| 343 | if record, err = planDispatchRecordRepository.Save(record); err != nil { | 352 | if record, err = planDispatchRecordRepository.Save(record); err != nil { |
| 344 | return nil, err | 353 | return nil, err |
| 345 | } | 354 | } |
| @@ -147,12 +147,18 @@ func (repository *ProductRecordRepository) Find(queryOptions map[string]interfac | @@ -147,12 +147,18 @@ func (repository *ProductRecordRepository) Find(queryOptions map[string]interfac | ||
| 147 | query.SetWhereByQueryOption("company_id = ?", "companyId") | 147 | query.SetWhereByQueryOption("company_id = ?", "companyId") |
| 148 | query.SetWhereByQueryOption("org_id = ?", "orgId") | 148 | query.SetWhereByQueryOption("org_id = ?", "orgId") |
| 149 | query.SetWhereByQueryOption("product_record_type & ? >0", "productRecordType") | 149 | query.SetWhereByQueryOption("product_record_type & ? >0", "productRecordType") |
| 150 | + query.SetWhereByQueryOption("work_station->>'workshopId'='?'", "workshopId") | ||
| 151 | + query.SetWhereByQueryOption("work_station->>'lineId'='?'", "lineId") | ||
| 152 | + query.SetWhereByQueryOption("work_station->>'sectionId'='?'", "sectionId") | ||
| 150 | if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int)) > 0 { | 153 | if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int)) > 0 { |
| 151 | query.Where(`org_id in (?)`, pg.In(v)) | 154 | query.Where(`org_id in (?)`, pg.In(v)) |
| 152 | } | 155 | } |
| 153 | if v, ok := queryOptions["userName"]; ok && len(v.(string)) > 0 { | 156 | if v, ok := queryOptions["userName"]; ok && len(v.(string)) > 0 { |
| 154 | query.Where(fmt.Sprintf(`product_worker->>'userName' like '%%%v%%'`, v)) | 157 | query.Where(fmt.Sprintf(`product_worker->>'userName' like '%%%v%%'`, v)) |
| 155 | } | 158 | } |
| 159 | + if v, ok := queryOptions["productWorkerId"]; ok && v.(int) > 0 { | ||
| 160 | + query.Where(`product_worker->>'userId' = '?'`, v) | ||
| 161 | + } | ||
| 156 | if v, ok := queryOptions["workshopName"]; ok && len(v.(string)) > 0 { | 162 | if v, ok := queryOptions["workshopName"]; ok && len(v.(string)) > 0 { |
| 157 | query.Where(fmt.Sprintf(`work_station->>'workshopName' like '%%%v%%'`, v)) | 163 | query.Where(fmt.Sprintf(`work_station->>'workshopName' like '%%%v%%'`, v)) |
| 158 | } | 164 | } |
| @@ -3,6 +3,9 @@ package beego | @@ -3,6 +3,9 @@ package beego | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/beego/beego/v2/server/web" | 4 | "github.com/beego/beego/v2/server/web" |
| 5 | "github.com/linmadan/egglib-go/web/beego/filters" | 5 | "github.com/linmadan/egglib-go/web/beego/filters" |
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | ||
| 7 | + "net/http" | ||
| 8 | + "net/http/pprof" | ||
| 6 | "os" | 9 | "os" |
| 7 | "strconv" | 10 | "strconv" |
| 8 | 11 | ||
| @@ -39,6 +42,22 @@ func init() { | @@ -39,6 +42,22 @@ func init() { | ||
| 39 | web.BConfig.Listen.HTTPSPort = port | 42 | web.BConfig.Listen.HTTPSPort = port |
| 40 | } | 43 | } |
| 41 | } | 44 | } |
| 45 | + | ||
| 46 | + if constant.PPROF_ON { | ||
| 47 | + web.Handler("/debug/pprof/", http.HandlerFunc(pprof.Index)) | ||
| 48 | + web.Handler("/debug/cmdline", http.HandlerFunc(pprof.Cmdline)) | ||
| 49 | + web.Handler("/debug/profile", http.HandlerFunc(pprof.Profile)) | ||
| 50 | + web.Handler("/debug/symbol", http.HandlerFunc(pprof.Symbol)) | ||
| 51 | + web.Handler("/debug/trace", http.HandlerFunc(pprof.Trace)) | ||
| 52 | + | ||
| 53 | + web.Handler("/debug/allocs", pprof.Handler("allocs")) | ||
| 54 | + web.Handler("/debug/block", pprof.Handler("block")) | ||
| 55 | + web.Handler("/debug/goroutine", pprof.Handler("goroutine")) | ||
| 56 | + web.Handler("/debug/heap", pprof.Handler("heap")) | ||
| 57 | + web.Handler("/debug/mutex", pprof.Handler("mutex")) | ||
| 58 | + web.Handler("/debug/threadcreate", pprof.Handler("threadcreate")) | ||
| 59 | + } | ||
| 60 | + | ||
| 42 | web.BConfig.Listen.HTTPSCertFile = "./config/fjmaimaimai.com_bundle.crt" | 61 | web.BConfig.Listen.HTTPSCertFile = "./config/fjmaimaimai.com_bundle.crt" |
| 43 | web.BConfig.Listen.HTTPSKeyFile = "./config/fjmaimaimai.com.key" | 62 | web.BConfig.Listen.HTTPSKeyFile = "./config/fjmaimaimai.com.key" |
| 44 | web.InsertFilter("/*", web.BeforeExec, filters.AllowCors()) | 63 | web.InsertFilter("/*", web.BeforeExec, filters.AllowCors()) |
| @@ -154,6 +154,8 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context) | @@ -154,6 +154,8 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context) | ||
| 154 | Response(ctx, nil, err) | 154 | Response(ctx, nil, err) |
| 155 | return | 155 | return |
| 156 | } | 156 | } |
| 157 | + case "13": | ||
| 158 | + crontab.AutoInitWorkshopProductRecord(nil) | ||
| 157 | } | 159 | } |
| 158 | Response(ctx, nil, nil) | 160 | Response(ctx, nil, nil) |
| 159 | } | 161 | } |
-
请 注册 或 登录 后发表评论