作者 yangfu

refactor: 功能优化

* 统计功能优化
* 物料管理调整
  1 +select count(*) from manufacture.device_running_record where device_running_record_id <=2000000
  2 +select count(*) from manufacture.device_collections where created_at <'2022-6-01 16:00:00'
  3 +
  4 +--1.备份设备运行数据-按数量
  5 +-- 备份数据 2000000
  6 +select * into table manufacture.device_running_record_0_2000
  7 +from manufacture.device_running_record
  8 +where device_running_record_id <=2000000
  9 +-- 删除数据
  10 +delete from manufacture.device_running_record where device_running_record_id <=2000000;
  11 +-- 重建索引
  12 +reindex table manufacture.device_running_record;
  13 +
  14 +
  15 +
  16 +--2.备份设备采集数据-按时间
  17 +-- 备份数据 2000000
  18 +select * into table manufacture.device_collections_history
  19 +from manufacture.device_collections
  20 +where created_at <'2022-6-01 16:00:00'
  21 +-- 删除数据
  22 +delete from manufacture.device_collections where created_at <'2022-6-01 16:00:00';
  23 +-- 重建索引
  24 +reindex table manufacture.device_collections;
  25 +
  26 +
  27 +--3.查看备份情况
  28 +select count(*) from manufacture.device_running_record_0_2000
  29 +select count(*) from manufacture.device_collections_history
  30 +select count(*) from manufacture.device_collections where created_at <'2022-6-01 16:00:00'
@@ -3,9 +3,12 @@ package main @@ -3,9 +3,12 @@ package main
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 "github.com/beego/beego/v2/server/web" 5 "github.com/beego/beego/v2/server/web"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/crontab"
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" 7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis"
8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/mqtt"
  11 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/task"
9 "time" 12 "time"
10 13
11 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" 14 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant"
@@ -27,11 +30,11 @@ func main() { @@ -27,11 +30,11 @@ func main() {
27 log.Logger.Info("server start ....") 30 log.Logger.Info("server start ....")
28 log.Logger.Debug(fmt.Sprintf("ENABLE_KAFKA_LOG:%v", constant.ENABLE_KAFKA_LOG)) 31 log.Logger.Debug(fmt.Sprintf("ENABLE_KAFKA_LOG:%v", constant.ENABLE_KAFKA_LOG))
29 32
30 - //go mqtt.Start(log.Logger)  
31 - //go task.Run()  
32 - //cron := crontab.NewCrontabService(nil)  
33 - //cron.StartCrontabTask()  
34 - //defer cron.StopCrontabTask() 33 + go mqtt.Start(log.Logger)
  34 + go task.Run()
  35 + cron := crontab.NewCrontabService(nil)
  36 + cron.StartCrontabTask()
  37 + defer cron.StopCrontabTask()
35 time.Sleep(time.Second) 38 time.Sleep(time.Second)
36 log.Logger.Info("server start!") 39 log.Logger.Info("server start!")
37 web.Run() 40 web.Run()
@@ -4,6 +4,7 @@ import ( @@ -4,6 +4,7 @@ import (
4 "fmt" 4 "fmt"
5 "github.com/beego/beego/v2/core/validation" 5 "github.com/beego/beego/v2/core/validation"
6 "reflect" 6 "reflect"
  7 + "regexp"
7 "strings" 8 "strings"
8 ) 9 )
9 10
@@ -33,7 +34,20 @@ type CreateProductMaterialCommand struct { @@ -33,7 +34,20 @@ type CreateProductMaterialCommand struct {
33 } 34 }
34 35
35 func (createProductMaterialCommand *CreateProductMaterialCommand) Valid(validation *validation.Validation) { 36 func (createProductMaterialCommand *CreateProductMaterialCommand) Valid(validation *validation.Validation) {
36 - //validation.SetError("CustomValid", "未实现的自定义认证") 37 + createProductMaterialCommand.MaterialNumber = strings.ToUpper(createProductMaterialCommand.MaterialNumber)
  38 + match, err := regexp.MatchString("^[A-Z0-9]+$", createProductMaterialCommand.MaterialNumber)
  39 + if !match {
  40 + validation.Error("物料编码只允许数字加大写字母组合")
  41 + return
  42 + }
  43 + if err != nil {
  44 + validation.Error(err.Error())
  45 + return
  46 + }
  47 + if len([]rune(createProductMaterialCommand.Specification)) > 50 {
  48 + validation.Error("规格最多允许50个字符")
  49 + return
  50 + }
37 } 51 }
38 52
39 func (createProductMaterialCommand *CreateProductMaterialCommand) ValidateCommand() error { 53 func (createProductMaterialCommand *CreateProductMaterialCommand) ValidateCommand() error {
@@ -36,7 +36,10 @@ type UpdateProductMaterialCommand struct { @@ -36,7 +36,10 @@ type UpdateProductMaterialCommand struct {
36 } 36 }
37 37
38 func (updateProductMaterialCommand *UpdateProductMaterialCommand) Valid(validation *validation.Validation) { 38 func (updateProductMaterialCommand *UpdateProductMaterialCommand) Valid(validation *validation.Validation) {
39 - //validation.SetError("CustomValid", "未实现的自定义认证") 39 + if len([]rune(updateProductMaterialCommand.Specification)) > 50 {
  40 + validation.Error("规格最多允许50个字符")
  41 + return
  42 + }
40 } 43 }
41 44
42 func (updateProductMaterialCommand *UpdateProductMaterialCommand) ValidateCommand() error { 45 func (updateProductMaterialCommand *UpdateProductMaterialCommand) ValidateCommand() error {
@@ -91,7 +91,7 @@ func (productMaterialService *ProductMaterialService) GetProductMaterial(operate @@ -91,7 +91,7 @@ func (productMaterialService *ProductMaterialService) GetProductMaterial(operate
91 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getProductMaterialQuery.ProductMaterialId))) 91 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getProductMaterialQuery.ProductMaterialId)))
92 } else { 92 } else {
93 materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext)) 93 materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
94 - productMaterialGroupIdNames, _, err := materialService.AllMaterialGroupParent(operateInfo, productMaterial.ProductMaterialGroupId) 94 + productMaterialGroupIdNames, _, err := materialService.AllMaterialGroupParentByBacktracking(operateInfo, productMaterial.ProductMaterialGroupId)
95 if err != nil { 95 if err != nil {
96 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 96 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
97 } 97 }
@@ -25,7 +25,6 @@ func (dao *DeviceDailyRunningRecordDao) TimeSectionRunningRecord(companyId, orgI @@ -25,7 +25,6 @@ func (dao *DeviceDailyRunningRecordDao) TimeSectionRunningRecord(companyId, orgI
25 25
26 tx := dao.transactionContext.PgTx 26 tx := dao.transactionContext.PgTx
27 sql := fmt.Sprintf(` 27 sql := fmt.Sprintf(`
28 -  
29 WITH ts_product as( 28 WITH ts_product as(
30 select sum(a.weight) total,a.ts from ( 29 select sum(a.weight) total,a.ts from (
31 select 30 select
@@ -47,8 +46,8 @@ WITH ts_product as( @@ -47,8 +46,8 @@ WITH ts_product as(
47 -- select * from ts_product 46 -- select * from ts_product
48 , ts_product_list as ( 47 , ts_product_list as (
49 select d.ts,ts_product.total from ( 48 select d.ts,ts_product.total from (
50 - select to_char(c.ts::timestamp at time ZONE 'Asia/shanghai','mm-dd') ts from (  
51 - select generate_series(to_timestamp(?,'YYYY-MM-DD HH24:MI:SS'),to_timestamp(?,'YYYY-MM-DD HH24:MI:SS'),'1 day') ts 49 + select to_char(c.ts,'mm-dd') ts from (
  50 + select generate_series(to_timestamp(?,'YYYY-MM-DD HH24:MI:SS') at time ZONE 'Asia/shanghai',to_timestamp(?,'YYYY-MM-DD HH24:MI:SS') at time ZONE 'Asia/shanghai','1 day') ts
52 ) c ) d left join ts_product on d.ts = ts_product.ts 51 ) c ) d left join ts_product on d.ts = ts_product.ts
53 ) 52 )
54 SELECT ts, coalesce(total,0) total 53 SELECT ts, coalesce(total,0) total
@@ -100,7 +100,7 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[ @@ -100,7 +100,7 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[
100 beginTime = xtime.BeginningOfDay() //time.Now().Add(-time.Hour*5) 100 beginTime = xtime.BeginningOfDay() //time.Now().Add(-time.Hour*5)
101 endTime = time.Now() 101 endTime = time.Now()
102 ) 102 )
103 - if !xtime.IsZero(request.Date.Time()) { 103 + if !xtime.IsZero(request.Date.Time()) && !request.Date.Time().Equal(beginTime) {
104 beginTime = request.Date.Time().AddDate(0, 0, -1) 104 beginTime = request.Date.Time().AddDate(0, 0, -1)
105 endTime = request.Date.Time() 105 endTime = request.Date.Time()
106 } 106 }
@@ -162,13 +162,13 @@ func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map @@ -162,13 +162,13 @@ func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map
162 Total float64 `json:"total"` 162 Total float64 `json:"total"`
163 } 163 }
164 var ( 164 var (
165 - beingTime = xtime.BeginningOfDay().AddDate(0, 0, -5)  
166 - endTime = xtime.BeginningOfDay().AddDate(0, 0, 1) 165 + beingTime = xtime.BeginningOfDay().AddDate(0, 0, -6)
  166 + endTime = xtime.BeginningOfDay().AddDate(0, 0, 1).Add(-time.Second)
167 ) 167 )
168 - //if !xtime.IsZero(time.Time(request.Date)) {  
169 - // beingTime = request.Date.Time().AddDate(0, 0, -5)  
170 - // endTime = request.Date.Time().AddDate(0, 0, 1)  
171 - //} 168 + if !xtime.IsZero(time.Time(request.Date)) {
  169 + beingTime = request.Date.Time().AddDate(0, 0, -6)
  170 + endTime = request.Date.Time().AddDate(0, 0, 1).Add(-time.Second)
  171 + }
172 workshop, err := workshopRepository.FindOne(map[string]interface{}{"workshopId": request.WorkshopId}) 172 workshop, err := workshopRepository.FindOne(map[string]interface{}{"workshopId": request.WorkshopId})
173 if err != nil || workshop == nil { 173 if err != nil || workshop == nil {
174 return nil, nil 174 return nil, nil
@@ -215,6 +215,34 @@ func (ptr *PGMaterialService) AllMaterialGroupParent(opt *domain.OperateInfo, pr @@ -215,6 +215,34 @@ func (ptr *PGMaterialService) AllMaterialGroupParent(opt *domain.OperateInfo, pr
215 return result, listId, err 215 return result, listId, err
216 } 216 }
217 217
  218 +func (ptr *PGMaterialService) AllMaterialGroupParentByBacktracking(opt *domain.OperateInfo, productMaterialGroupId int) ([]*domain.ProductMaterialGroup, []int, error) {
  219 + var (
  220 + err error
  221 + listId []int
  222 + productMaterialGroup *domain.ProductMaterialGroup
  223 + productMaterialGroupRepository, _ = repository.NewProductMaterialGroupRepository(ptr.transactionContext)
  224 + pid = productMaterialGroupId
  225 + mapExists = make(map[int]int)
  226 + )
  227 + var result = make([]*domain.ProductMaterialGroup, 0)
  228 + for {
  229 + if pid == 0 {
  230 + break
  231 + }
  232 + if _, exists := mapExists[pid]; exists {
  233 + break
  234 + }
  235 + mapExists[pid] = pid
  236 + productMaterialGroup, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": pid, "allWithDeleted": "1"})
  237 + if err != nil || productMaterialGroup == nil {
  238 + return nil, listId, fmt.Errorf("物料分组不存在")
  239 + }
  240 + pid = productMaterialGroup.Pid
  241 + result = append([]*domain.ProductMaterialGroup{productMaterialGroup}, result...)
  242 + }
  243 + return result, listId, err
  244 +}
  245 +
218 func NewPGMaterialService(transactionContext *pgTransaction.TransactionContext) (*PGMaterialService, error) { 246 func NewPGMaterialService(transactionContext *pgTransaction.TransactionContext) (*PGMaterialService, error) {
219 if transactionContext == nil { 247 if transactionContext == nil {
220 return nil, fmt.Errorf("transactionContext参数不能为nil") 248 return nil, fmt.Errorf("transactionContext参数不能为nil")
@@ -120,6 +120,9 @@ func (repository *ProductMaterialGroupRepository) FindOne(queryOptions map[strin @@ -120,6 +120,9 @@ func (repository *ProductMaterialGroupRepository) FindOne(queryOptions map[strin
120 query.SetWhereByQueryOption("product_material_group_id = ?", "productMaterialGroupId") 120 query.SetWhereByQueryOption("product_material_group_id = ?", "productMaterialGroupId")
121 query.SetWhereByQueryOption("company_id = ?", "companyId") 121 query.SetWhereByQueryOption("company_id = ?", "companyId")
122 query.SetWhereByQueryOption("material_group_number = ?", "materialGroupNumber") 122 query.SetWhereByQueryOption("material_group_number = ?", "materialGroupNumber")
  123 + if _, ok := queryOptions["allWithDeleted"]; ok {
  124 + query.AllWithDeleted()
  125 + }
123 if err := query.First(); err != nil { 126 if err := query.First(); err != nil {
124 if err.Error() == "pg: no rows in result set" { 127 if err.Error() == "pg: no rows in result set" {
125 return nil, domain.ErrorNotFound 128 return nil, domain.ErrorNotFound