作者 yangfu

feat: 计划管理

@@ -14,7 +14,7 @@ type SetOnlineCommand struct { @@ -14,7 +14,7 @@ type SetOnlineCommand struct {
14 // 车间ID 14 // 车间ID
15 WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` 15 WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"`
16 // 生产线ID 16 // 生产线ID
17 - LineId int `cname:"生产线ID" json:"lineId" valid:"Required"` 17 + //LineId int `cname:"生产线ID" json:"lineId" valid:"Required"`
18 // 工段ID 18 // 工段ID
19 SectionId int `cname:"工段ID" json:"sectionId" valid:"Required"` 19 SectionId int `cname:"工段ID" json:"sectionId" valid:"Required"`
20 } 20 }
@@ -39,7 +39,7 @@ type UpdateProductPlanCommand struct { @@ -39,7 +39,7 @@ type UpdateProductPlanCommand struct {
39 // 备注 39 // 备注
40 Remark string `cname:"备注" json:"remark" valid:"Required"` 40 Remark string `cname:"备注" json:"remark" valid:"Required"`
41 // 生产日期 41 // 生产日期
42 - ProductDateTime time.Time `cname:"生产日期" json:"-" ` 42 + ProductDateTime time.Time `cname:"生产日期" json:"productDateTime" `
43 } 43 }
44 44
45 func (updateProductPlanCommand *UpdateProductPlanCommand) Valid(validation *validation.Validation) { 45 func (updateProductPlanCommand *UpdateProductPlanCommand) Valid(validation *validation.Validation) {
@@ -256,15 +256,28 @@ func (productPlanService *ProductPlanService) SetOffline(setOfflineCommand *comm @@ -256,15 +256,28 @@ func (productPlanService *ProductPlanService) SetOffline(setOfflineCommand *comm
256 defer func() { 256 defer func() {
257 transactionContext.RollbackTransaction() 257 transactionContext.RollbackTransaction()
258 }() 258 }()
  259 +
  260 + var productPlanRepository domain.ProductPlanRepository
  261 + var productPlan *domain.ProductPlan
  262 + productPlanRepository, productPlan, _ = factory.FastPgProductPlan(transactionContext, setOfflineCommand.ProductPlanId)
  263 +
  264 + if err = productPlan.ChangeStatus(domain.PlanOffline); err != nil {
  265 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  266 + }
  267 +
  268 + if productPlan, err = productPlanRepository.Save(productPlan); err != nil {
  269 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  270 + }
  271 +
259 if err := transactionContext.CommitTransaction(); err != nil { 272 if err := transactionContext.CommitTransaction(); err != nil {
260 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 273 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
261 } 274 }
262 - return nil, nil 275 + return productPlan, nil
263 } 276 }
264 277
265 // 计划上线 278 // 计划上线
266 -func (productPlanService *ProductPlanService) SetOnline(setOnlineCommand *command.SetOnlineCommand) (interface{}, error) {  
267 - if err := setOnlineCommand.ValidateCommand(); err != nil { 279 +func (productPlanService *ProductPlanService) SetOnline(cmd *command.SetOnlineCommand) (interface{}, error) {
  280 + if err := cmd.ValidateCommand(); err != nil {
268 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 281 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
269 } 282 }
270 transactionContext, err := factory.CreateTransactionContext(nil) 283 transactionContext, err := factory.CreateTransactionContext(nil)
@@ -277,10 +290,45 @@ func (productPlanService *ProductPlanService) SetOnline(setOnlineCommand *comman @@ -277,10 +290,45 @@ func (productPlanService *ProductPlanService) SetOnline(setOnlineCommand *comman
277 defer func() { 290 defer func() {
278 transactionContext.RollbackTransaction() 291 transactionContext.RollbackTransaction()
279 }() 292 }()
  293 + var productPlanRepository domain.ProductPlanRepository
  294 + var productPlan *domain.ProductPlan
  295 +
  296 + productPlanRepository, productPlan, err = factory.FastPgProductPlan(transactionContext, cmd.ProductPlanId)
  297 + if err != nil {
  298 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  299 + }
  300 +
  301 + if err = productPlan.ChangeStatus(domain.PlanOnline); err != nil {
  302 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  303 + }
  304 +
  305 + var workshop *domain.Workshop
  306 + _, workshop, err = factory.FastPgWorkshop(transactionContext, cmd.WorkshopId)
  307 + if err != nil {
  308 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  309 + }
  310 +
  311 + line, section, err := workshop.FindSectionById(cmd.SectionId)
  312 + if err != nil {
  313 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  314 + }
  315 +
  316 + var workStation *domain.WorkStation
  317 + workStation, err = workshop.FindWorkStation(workshop.WorkshopId, line.LineId, section.SectionId)
  318 + if err != nil {
  319 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  320 + }
  321 +
  322 + productPlan.WorkStation = workStation
  323 +
  324 + if productPlan, err = productPlanRepository.Save(productPlan); err != nil {
  325 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  326 + }
  327 +
280 if err := transactionContext.CommitTransaction(); err != nil { 328 if err := transactionContext.CommitTransaction(); err != nil {
281 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 329 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
282 } 330 }
283 - return nil, nil 331 + return productPlan, nil
284 } 332 }
285 333
286 // 提交成品记录 (成品 二级品) 334 // 提交成品记录 (成品 二级品)
@@ -326,8 +374,8 @@ func (productPlanService *ProductPlanService) Exchange(switchCommand *command.Sw @@ -326,8 +374,8 @@ func (productPlanService *ProductPlanService) Exchange(switchCommand *command.Sw
326 } 374 }
327 375
328 // 更新生产计划服务 376 // 更新生产计划服务
329 -func (productPlanService *ProductPlanService) UpdateProductPlan(updateProductPlanCommand *command.UpdateProductPlanCommand) (interface{}, error) {  
330 - if err := updateProductPlanCommand.ValidateCommand(); err != nil { 377 +func (productPlanService *ProductPlanService) UpdateProductPlan(cmd *command.UpdateProductPlanCommand) (interface{}, error) {
  378 + if err := cmd.ValidateCommand(); err != nil {
331 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 379 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
332 } 380 }
333 transactionContext, err := factory.CreateTransactionContext(nil) 381 transactionContext, err := factory.CreateTransactionContext(nil)
@@ -341,31 +389,38 @@ func (productPlanService *ProductPlanService) UpdateProductPlan(updateProductPla @@ -341,31 +389,38 @@ func (productPlanService *ProductPlanService) UpdateProductPlan(updateProductPla
341 transactionContext.RollbackTransaction() 389 transactionContext.RollbackTransaction()
342 }() 390 }()
343 var productPlanRepository domain.ProductPlanRepository 391 var productPlanRepository domain.ProductPlanRepository
344 - if value, err := factory.CreateProductPlanRepository(map[string]interface{}{  
345 - "transactionContext": transactionContext,  
346 - }); err != nil { 392 + var productPlan *domain.ProductPlan
  393 + productPlanRepository, productPlan, err = factory.FastPgProductPlan(transactionContext, cmd.ProductPlanId)
  394 + if err != nil {
347 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 395 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
348 - } else {  
349 - productPlanRepository = value  
350 } 396 }
351 - productPlan, err := productPlanRepository.FindOne(map[string]interface{}{"productPlanId": updateProductPlanCommand.ProductPlanId}) 397 +
  398 + //if productPlan.Workshop.WorkshopId != cmd.WorkshopId{
  399 + // // 检查批次号是否有重复的
  400 + // if item, err := productPlanRepository.FindOne(map[string]interface{}{"companyId": cmd.CompanyId, "orgId": cmd.OrgId, "batchNumber": cmd.BatchNumber}); err == nil && item != nil {
  401 + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "批次号重复")
  402 + // }
  403 + //}
  404 +
  405 + _, workshop, err := factory.FastPgWorkshop(transactionContext, cmd.WorkshopId)
352 if err != nil { 406 if err != nil {
353 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 407 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
354 } 408 }
355 - if productPlan == nil {  
356 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateProductPlanCommand.ProductPlanId)))  
357 - }  
358 - if err := productPlan.Update(tool_funs.SimpleStructToMap(updateProductPlanCommand)); err != nil { 409 + productPlan.Workshop = workshop.CloneSample()
  410 +
  411 + if err := productPlan.Update(tool_funs.SimpleStructToMap(cmd)); err != nil {
359 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) 412 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
360 } 413 }
361 - if productPlan, err := productPlanRepository.Save(productPlan); err != nil { 414 + if productPlan, err = productPlanRepository.Save(productPlan); err != nil {
362 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 415 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
363 - } else { 416 + }
  417 +
364 if err := transactionContext.CommitTransaction(); err != nil { 418 if err := transactionContext.CommitTransaction(); err != nil {
365 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 419 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
366 } 420 }
367 - return productPlan, nil  
368 - } 421 +
  422 + result := &dto.ProductPlanDto{}
  423 + return result.LoadDto(productPlan, cmd.OrgId), nil
369 } 424 }
370 425
371 // 搜索生产计划服务列表 426 // 搜索生产计划服务列表
@@ -326,6 +326,38 @@ func (workshopService *WorkshopService) SelectorWorkshop(operateInfo *domain.Ope @@ -326,6 +326,38 @@ func (workshopService *WorkshopService) SelectorWorkshop(operateInfo *domain.Ope
326 326
327 } 327 }
328 328
  329 +// 车间工段列表
  330 +func (workshopService *WorkshopService) SelectorWorkshopSection(operateInfo *domain.OperateInfo, getWorkshopQuery *query.GetWorkshopQuery) (interface{}, error) {
  331 + if err := getWorkshopQuery.ValidateQuery(); err != nil {
  332 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  333 + }
  334 + transactionContext, err := factory.CreateTransactionContext(nil)
  335 + if err != nil {
  336 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  337 + }
  338 + if err := transactionContext.StartTransaction(); err != nil {
  339 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  340 + }
  341 + defer func() {
  342 + transactionContext.RollbackTransaction()
  343 + }()
  344 +
  345 + var workshop *domain.Workshop
  346 + _, workshop, err = factory.FastPgWorkshop(transactionContext, getWorkshopQuery.WorkshopId)
  347 + if err != nil {
  348 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  349 + }
  350 +
  351 + if err := transactionContext.CommitTransaction(); err != nil {
  352 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  353 + }
  354 + sections := workshop.AllProductSections(domain.All)
  355 + return map[string]interface{}{
  356 + "count": len(sections),
  357 + "sections": sections,
  358 + }, nil
  359 +}
  360 +
329 func NewWorkshopService(options map[string]interface{}) *WorkshopService { 361 func NewWorkshopService(options map[string]interface{}) *WorkshopService {
330 newWorkshopService := &WorkshopService{} 362 newWorkshopService := &WorkshopService{}
331 return newWorkshopService 363 return newWorkshopService
1 package domain 1 package domain
2 2
  3 +import "fmt"
  4 +
3 // 生产线 5 // 生产线
4 type ProductLine struct { 6 type ProductLine struct {
5 // 生产线ID 7 // 生产线ID
@@ -12,6 +14,17 @@ type ProductLine struct { @@ -12,6 +14,17 @@ type ProductLine struct {
12 Removed int `json:"removed,omitempty"` 14 Removed int `json:"removed,omitempty"`
13 } 15 }
14 16
  17 +// 查询生产线
  18 +func (productLine *ProductLine) FindSection(sectionId int) (*ProductSection, error) {
  19 + for i := range productLine.ProductSections {
  20 + item := productLine.ProductSections[i]
  21 + if item.SectionId == sectionId {
  22 + return item, nil
  23 + }
  24 + }
  25 + return nil, fmt.Errorf("工段不存在")
  26 +}
  27 +
15 func (productLine *ProductLine) GetProductSections(removed int) []*ProductSection { 28 func (productLine *ProductLine) GetProductSections(removed int) []*ProductSection {
16 var result = make([]*ProductSection, 0) 29 var result = make([]*ProductSection, 0)
17 for i := range productLine.ProductSections { 30 for i := range productLine.ProductSections {
1 package domain 1 package domain
2 2
3 -import "time" 3 +import (
  4 + "errors"
  5 + "time"
  6 +)
4 7
5 const ( 8 const (
6 PlanOnline = 1 // 计划上线 9 PlanOnline = 1 // 计划上线
@@ -60,119 +63,47 @@ func (productPlan *ProductPlan) Identify() interface{} { @@ -60,119 +63,47 @@ func (productPlan *ProductPlan) Identify() interface{} {
60 } 63 }
61 64
62 func (productPlan *ProductPlan) Update(data map[string]interface{}) error { 65 func (productPlan *ProductPlan) Update(data map[string]interface{}) error {
63 - //if productPlanId, ok := data["productPlanId"]; ok {  
64 - // productPlan.ProductPlanId = productPlanId.(int)  
65 - //}  
66 - //if companyId, ok := data["companyId"]; ok {  
67 - // productPlan.CompanyId = companyId.(int)  
68 - //}  
69 - //if orgId, ok := data["orgId"]; ok {  
70 - // productPlan.OrgId = orgId.(int)  
71 - //}  
72 //if batchNumber, ok := data["batchNumber"]; ok { 66 //if batchNumber, ok := data["batchNumber"]; ok {
73 // productPlan.BatchNumber = batchNumber.(string) 67 // productPlan.BatchNumber = batchNumber.(string)
74 //} 68 //}
75 - //if productDate, ok := data["productDate"]; ok {  
76 - // productPlan.ProductDate = productDate.(time.Time)  
77 - //}  
78 - //if companyId, ok := data["companyId"]; ok {  
79 - // productPlan.Workshop.CompanyId = companyId.(int)  
80 - //}  
81 - //if orgId, ok := data["orgId"]; ok {  
82 - // productPlan.Workshop.OrgId = orgId.(int)  
83 - //}  
84 - //if workshopId, ok := data["workshopId"]; ok {  
85 - // productPlan.Workshop.WorkshopId = workshopId.(int)  
86 - //}  
87 - //if workshopName, ok := data["workshopName"]; ok {  
88 - // productPlan.Workshop.WorkshopName = workshopName.(string)  
89 - //}  
90 - //if userId, ok := data["userId"]; ok {  
91 - // productPlan.Workshop.Principal.UserId = userId.(int)  
92 - //}  
93 - //if userName, ok := data["userName"]; ok {  
94 - // productPlan.Workshop.Principal.UserName = userName.(string)  
95 - //}  
96 - //if employeeType, ok := data["employeeType"]; ok {  
97 - // productPlan.Workshop.Principal.EmployeeType = employeeType.(int)  
98 - //}  
99 - //if icCardNumber, ok := data["icCardNumber"]; ok {  
100 - // productPlan.Workshop.Principal.IcCardNumber = icCardNumber.(string)  
101 - //}  
102 - //if avatar, ok := data["avatar"]; ok {  
103 - // productPlan.Workshop.Principal.Avatar = avatar.(string)  
104 - //}  
105 - //if phone, ok := data["phone"]; ok {  
106 - // productPlan.Workshop.Principal.Phone = phone.(string)  
107 - //}  
108 - //if productLines, ok := data["productLines"]; ok {  
109 - // productPlan.Workshop.ProductLines = productLines.(array)  
110 - //}  
111 - //if createdAt, ok := data["createdAt"]; ok {  
112 - // productPlan.Workshop.CreatedAt = createdAt.(time.Time)  
113 - //}  
114 - //if updatedAt, ok := data["updatedAt"]; ok {  
115 - // productPlan.Workshop.UpdatedAt = updatedAt.(time.Time)  
116 - //}  
117 - //if deletedAt, ok := data["deletedAt"]; ok {  
118 - // productPlan.Workshop.DeletedAt = deletedAt.(time.Time)  
119 - //}  
120 - //if workOn, ok := data["workOn"]; ok {  
121 - // productPlan.WorkOn = workOn.(int)  
122 - //}  
123 - //if machine, ok := data["machine"]; ok {  
124 - // productPlan.Machine = machine.(string)  
125 - //}  
126 - //if planProductName, ok := data["planProductName"]; ok {  
127 - // productPlan.PlanProductName = planProductName.(string)  
128 - //}  
129 - //if quantity, ok := data["quantity"]; ok {  
130 - // productPlan.PlanDevoted.Quantity = quantity.(float64)  
131 - //}  
132 - //if unit, ok := data["unit"]; ok {  
133 - // productPlan.PlanDevoted.Unit = unit.(string)  
134 - //}  
135 - //if unitWeight, ok := data["unitWeight"]; ok {  
136 - // productPlan.PlanDevoted.UnitWeight = unitWeight.(float64)  
137 - //}  
138 - //if weight, ok := data["weight"]; ok {  
139 - // productPlan.PlanDevoted.Weight = weight.(float64)  
140 - //}  
141 - //if planStatus, ok := data["planStatus"]; ok {  
142 - // productPlan.PlanStatus = planStatus.(int)  
143 - //}  
144 - //if workStationId, ok := data["workStationId"]; ok {  
145 - // productPlan.WorkStation.WorkStationId = workStationId.(string)  
146 - //}  
147 - //if workshopId, ok := data["workshopId"]; ok {  
148 - // productPlan.WorkStation.WorkshopId = workshopId.(int)  
149 - //}  
150 - //if workshopName, ok := data["workshopName"]; ok {  
151 - // productPlan.WorkStation.WorkshopName = workshopName.(string)  
152 - //}  
153 - //if lineId, ok := data["lineId"]; ok {  
154 - // productPlan.WorkStation.LineId = lineId.(int)  
155 - //}  
156 - //if lineName, ok := data["lineName"]; ok {  
157 - // productPlan.WorkStation.LineName = lineName.(string)  
158 - //}  
159 - //if sectionId, ok := data["sectionId"]; ok {  
160 - // productPlan.WorkStation.SectionId = sectionId.(int)  
161 - //}  
162 - //if sectionName, ok := data["sectionName"]; ok {  
163 - // productPlan.WorkStation.SectionName = sectionName.(string)  
164 - //}  
165 - //if remark, ok := data["remark"]; ok {  
166 - // productPlan.Remark = remark.(string)  
167 - //}  
168 - //if createdAt, ok := data["createdAt"]; ok {  
169 - // productPlan.CreatedAt = createdAt.(time.Time)  
170 - //}  
171 - //if updatedAt, ok := data["updatedAt"]; ok {  
172 - // productPlan.UpdatedAt = updatedAt.(time.Time)  
173 - //}  
174 - //if deletedAt, ok := data["deletedAt"]; ok {  
175 - // productPlan.DeletedAt = deletedAt.(time.Time)  
176 - //} 69 + if productDate, ok := data["productDateTime"]; ok {
  70 + productPlan.ProductDate = productDate.(time.Time)
  71 + }
  72 + if workOn, ok := data["workOn"]; ok {
  73 + productPlan.WorkOn = workOn.(int)
  74 + }
  75 + if machine, ok := data["machine"]; ok {
  76 + productPlan.Machine = machine.(string)
  77 + }
  78 + if planProductName, ok := data["planProductName"]; ok {
  79 + productPlan.PlanProductName = planProductName.(string)
  80 + }
  81 + if quantity, ok := data["quantity"]; ok {
  82 + productPlan.PlanDevoted.Quantity = quantity.(float64)
  83 + }
  84 + if unit, ok := data["unit"]; ok {
  85 + productPlan.PlanDevoted.Unit = unit.(string)
  86 + }
  87 + if weight, ok := data["weight"]; ok {
  88 + productPlan.PlanDevoted.Weight = weight.(float64)
  89 + }
  90 + if remark, ok := data["remark"]; ok {
  91 + productPlan.Remark = remark.(string)
  92 + }
  93 + productPlan.UpdatedAt = time.Now()
  94 + return nil
  95 +}
  96 +
  97 +func (productPlan *ProductPlan) ChangeStatus(status int) error {
  98 + if productPlan.PlanStatus == status && productPlan.PlanStatus == PlanOnline {
  99 + return errors.New("计划已经上线")
  100 + }
  101 + if productPlan.PlanStatus == status && productPlan.PlanStatus == PlanOffline {
  102 + return errors.New("计划已经下线")
  103 + }
  104 + if !(productPlan.PlanStatus == PlanOnline || productPlan.PlanStatus == PlanOffline) {
  105 + return errors.New("计划状态有误")
  106 + }
  107 + productPlan.PlanStatus = status
177 return nil 108 return nil
178 } 109 }
@@ -9,3 +9,16 @@ type ProductSection struct { @@ -9,3 +9,16 @@ type ProductSection struct {
9 // 已删除标识 1:正常 2:已删除 9 // 已删除标识 1:正常 2:已删除
10 Removed int `json:"removed,omitempty"` 10 Removed int `json:"removed,omitempty"`
11 } 11 }
  12 +
  13 +func (m *ProductSection) CloneSample() *ProductSection {
  14 + return &ProductSection{
  15 + SectionId: m.SectionId,
  16 + SectionName: m.SectionName,
  17 + }
  18 +}
  19 +
  20 +type ProductSections []*ProductSection
  21 +
  22 +func (ms ProductSections) Len() int { return len(ms) }
  23 +func (ms ProductSections) Less(i, j int) bool { return ms[i].SectionId < ms[j].SectionId }
  24 +func (ms ProductSections) Swap(i, j int) { ms[i], ms[j] = ms[j], ms[i] }
@@ -31,6 +31,6 @@ func NewWorkStation(w *Workshop, l *ProductLine, s *ProductSection) *WorkStation @@ -31,6 +31,6 @@ func NewWorkStation(w *Workshop, l *ProductLine, s *ProductSection) *WorkStation
31 LineName: l.LineName, 31 LineName: l.LineName,
32 SectionId: s.SectionId, 32 SectionId: s.SectionId,
33 SectionName: s.SectionName, 33 SectionName: s.SectionName,
34 - Principal: w.Principal, 34 + //Principal: w.Principal,
35 } 35 }
36 } 36 }
@@ -2,10 +2,13 @@ package domain @@ -2,10 +2,13 @@ package domain
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "sort"
5 "time" 6 "time"
6 ) 7 )
7 8
8 const ( 9 const (
  10 + // 所有
  11 + All = 0
9 // 未删除 12 // 未删除
10 NotDeleted = 1 13 NotDeleted = 1
11 // 已删除 14 // 已删除
@@ -220,6 +223,36 @@ func (workshop *Workshop) GetProductLines(removed int) []*ProductLine { @@ -220,6 +223,36 @@ func (workshop *Workshop) GetProductLines(removed int) []*ProductLine {
220 return result 223 return result
221 } 224 }
222 225
  226 +func (workshop *Workshop) AllProductSections(removed int) []*ProductSection {
  227 + var result ProductSections = make([]*ProductSection, 0)
  228 + lines := workshop.GetProductLines(removed)
  229 + for i := range lines {
  230 + for j := range lines[i].ProductSections {
  231 + section := lines[i].ProductSections[j]
  232 + if removed > 0 && section.Removed != removed {
  233 + continue
  234 + }
  235 + result = append(result, section.CloneSample())
  236 + }
  237 + }
  238 +
  239 + sort.Stable(result)
  240 + return result
  241 +}
  242 +
  243 +// 查询生产线
  244 +func (workshop *Workshop) FindSectionById(sectionId int) (*ProductLine, *ProductSection, error) {
  245 + lines := workshop.GetProductLines(0)
  246 + for k := range lines {
  247 + line := lines[k]
  248 + section, _ := line.FindSection(sectionId)
  249 + if section != nil {
  250 + return line, section, nil
  251 + }
  252 + }
  253 + return nil, nil, fmt.Errorf("工段不存在")
  254 +}
  255 +
223 func (workshop *Workshop) CloneSample() *Workshop { 256 func (workshop *Workshop) CloneSample() *Workshop {
224 return &Workshop{ 257 return &Workshop{
225 WorkshopId: workshop.WorkshopId, 258 WorkshopId: workshop.WorkshopId,
@@ -172,6 +172,17 @@ func (repository *ProductPlanRepository) Find(queryOptions map[string]interface{ @@ -172,6 +172,17 @@ func (repository *ProductPlanRepository) Find(queryOptions map[string]interface{
172 var productPlanModels []*models.ProductPlan 172 var productPlanModels []*models.ProductPlan
173 productPlans := make([]*domain.ProductPlan, 0) 173 productPlans := make([]*domain.ProductPlan, 0)
174 query := sqlbuilder.BuildQuery(tx.Model(&productPlanModels), queryOptions) 174 query := sqlbuilder.BuildQuery(tx.Model(&productPlanModels), queryOptions)
  175 + query.SetWhereByQueryOption("company_id = ?", "companyId")
  176 + query.SetWhereByQueryOption("org_id = ?", "orgId")
  177 + query.SetWhereByQueryOption("batch_number=?", "batchNumber")
  178 +
  179 + if v, ok := queryOptions["batchNumber"]; ok && len(v.(string)) > 0 {
  180 + query.Where(fmt.Sprintf(`batch_number like '%%%v%%'`, v))
  181 + }
  182 + if v, ok := queryOptions["workshopName"]; ok && len(v.(string)) > 0 {
  183 + query.Where(fmt.Sprintf(`workshop->>'workshopName' like '%%%v%%'`, v))
  184 + }
  185 + query.SetWhereByQueryOption("plan_status=?", "planStatus")
175 query.SetOffsetAndLimit(20) 186 query.SetOffsetAndLimit(20)
176 query.SetOrderDirect("product_plan_id", "DESC") 187 query.SetOrderDirect("product_plan_id", "DESC")
177 if count, err := query.SelectAndCount(); err != nil { 188 if count, err := query.SelectAndCount(); err != nil {
@@ -86,6 +86,14 @@ func (controller *ProductPlanController) SetOnline() { @@ -86,6 +86,14 @@ func (controller *ProductPlanController) SetOnline() {
86 controller.Response(data, err) 86 controller.Response(data, err)
87 } 87 }
88 88
  89 +func (controller *ProductPlanController) SetOffline() {
  90 + productPlanService := service.NewProductPlanService(nil)
  91 + setOnlineCommand := &command.SetOfflineCommand{}
  92 + Must(controller.Unmarshal(setOnlineCommand))
  93 + data, err := productPlanService.SetOffline(setOnlineCommand)
  94 + controller.Response(data, err)
  95 +}
  96 +
89 func (controller *ProductPlanController) Switch() { 97 func (controller *ProductPlanController) Switch() {
90 productPlanService := service.NewProductPlanService(nil) 98 productPlanService := service.NewProductPlanService(nil)
91 switchCommand := &command.SwitchCommand{} 99 switchCommand := &command.SwitchCommand{}
@@ -74,3 +74,11 @@ func (controller *WorkshopController) SelectorWorkshop() { @@ -74,3 +74,11 @@ func (controller *WorkshopController) SelectorWorkshop() {
74 data, err := workshopService.SearchWorkshop(ParseOperateInfo(controller.BaseController), listWorkshopQuery) 74 data, err := workshopService.SearchWorkshop(ParseOperateInfo(controller.BaseController), listWorkshopQuery)
75 controller.Response(data, err) 75 controller.Response(data, err)
76 } 76 }
  77 +
  78 +func (controller *WorkshopController) SelectorWorkshopSection() {
  79 + workshopService := service.NewWorkshopService(nil)
  80 + getWorkshopQuery := &query.GetWorkshopQuery{}
  81 + Must(controller.Unmarshal(getWorkshopQuery))
  82 + data, err := workshopService.SelectorWorkshopSection(ParseOperateInfo(controller.BaseController), getWorkshopQuery)
  83 + controller.Response(data, err)
  84 +}
@@ -14,6 +14,7 @@ func init() { @@ -14,6 +14,7 @@ func init() {
14 web.Router("/product-plans/receive-material", &controllers.ProductPlanController{}, "Post:ReceiveMaterial") 14 web.Router("/product-plans/receive-material", &controllers.ProductPlanController{}, "Post:ReceiveMaterial")
15 web.Router("/product-plans/return-material", &controllers.ProductPlanController{}, "Post:ReturnMaterial") 15 web.Router("/product-plans/return-material", &controllers.ProductPlanController{}, "Post:ReturnMaterial")
16 web.Router("/product-plans/set-online", &controllers.ProductPlanController{}, "Post:SetOnline") 16 web.Router("/product-plans/set-online", &controllers.ProductPlanController{}, "Post:SetOnline")
  17 + web.Router("/product-plans/set-offline", &controllers.ProductPlanController{}, "Post:SetOffline")
17 web.Router("/product-plans/switch", &controllers.ProductPlanController{}, "Post:Switch") 18 web.Router("/product-plans/switch", &controllers.ProductPlanController{}, "Post:Switch")
18 web.Router("/product-plans/submit-product-record", &controllers.ProductPlanController{}, "Post:SubmitProductRecord") 19 web.Router("/product-plans/submit-product-record", &controllers.ProductPlanController{}, "Post:SubmitProductRecord")
19 web.Router("/product-plans/search", &controllers.ProductPlanController{}, "Post:SearchProductPlan") 20 web.Router("/product-plans/search", &controllers.ProductPlanController{}, "Post:SearchProductPlan")
@@ -13,4 +13,5 @@ func init() { @@ -13,4 +13,5 @@ func init() {
13 web.Router("/workshops/", &controllers.WorkshopController{}, "Get:ListWorkshop") 13 web.Router("/workshops/", &controllers.WorkshopController{}, "Get:ListWorkshop")
14 web.Router("/workshops/search", &controllers.WorkshopController{}, "Post:SearchWorkshop") 14 web.Router("/workshops/search", &controllers.WorkshopController{}, "Post:SearchWorkshop")
15 web.Router("/workshops/selector", &controllers.WorkshopController{}, "Post:SelectorWorkshop") 15 web.Router("/workshops/selector", &controllers.WorkshopController{}, "Post:SelectorWorkshop")
  16 + web.Router("/workshops/sections-selector", &controllers.WorkshopController{}, "Post:SelectorWorkshopSection")
16 } 17 }