Merge branch 'dev' of http://gitlab.fjmaimaimai.com/allied-creation/allied-creat…
…ion-manufacture into dev # Conflicts: # pkg/infrastructure/dao/material_k3cloud_dao.go # pkg/port/beego/routers/test_router.go
正在显示
83 个修改的文件
包含
3676 行增加
和
207 行删除
1 | -#project | ||
1 | +# 生产制造项目说明 | ||
2 | + | ||
3 | +## 1.数据导入导出模块 | ||
4 | + | ||
5 | +### 1.1.Excel导入流程 | ||
6 | + | ||
7 | +- 原型说明 | ||
8 | + | ||
9 | +选择模板下载、文件上传 | ||
10 | +![](https://doc-press.fjmaimaimai.com/team/frontend/plugins/data-transfer-upload.png) | ||
11 | + | ||
12 | +导入数据检验有错,显示具体错误 | ||
13 | +![](https://timeless-world.oss-cn-shenzhen.aliyuncs.com/opportunity/dev_online/20220225/object/1645791913_Rz2JJkkx6xEXtAFdXDH5eH6NTjfhtjxf.jpg) | ||
14 | + | ||
15 | +- [导入接口文档地址](https://doc-press.fjmaimaimai.com/team/frontend/plugins/business/import.html) | ||
16 | + | ||
17 | + | ||
18 | +``` | ||
19 | +POST/v1/web/file-import | ||
20 | + | ||
21 | +Content-Type multipart/form-data | ||
22 | + | ||
23 | +params: | ||
24 | + | ||
25 | +file 文件 | ||
26 | +code 对应导入模块的编码 | ||
27 | +``` | ||
28 | + | ||
29 | +- ``对接步骤``以导入公司用户模块为例 | ||
30 | + | ||
31 | +1.定义接口导入的``code``为``ADMIN_SYSTEM-MANAGE_BASE_USER`` | ||
32 | +2.根据接口解析导入文件的数据 | ||
33 | +3.调用基础库解析数据并传到后台 | ||
34 | +```go | ||
35 | + | ||
36 | +// 1.解析列 | ||
37 | +excelImport := excel.NewExcelImport() | ||
38 | +excelImport.RowBegin = 3 //第二行开始读取 | ||
39 | +excelImport.DataFields = []excel.DataField{ | ||
40 | + {EnName: "userCode", CnName: "*用户编码"}, | ||
41 | + {EnName: "userName", CnName: "*用户姓名"}, | ||
42 | + {EnName: "org", CnName: "*组织机构"}, | ||
43 | + {EnName: "department", CnName: "*所属部门"}, | ||
44 | + {EnName: "enableStatus", CnName: "*用户状态"}, | ||
45 | + {EnName: "phone", CnName: "*手机号"}, | ||
46 | + {EnName: "employeeType", CnName: "*员工类型"}, | ||
47 | + {EnName: "icCardNumber", CnName: "IC卡号"}, | ||
48 | + {EnName: "email", CnName: "邮箱"}, | ||
49 | +} | ||
50 | +excelData, err := excelImport.OpenExcelFromIoReader(importDataCommand.Reader) | ||
51 | +if err != nil { | ||
52 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
53 | +} | ||
54 | +users := make([]allied_creation_user.BatchAddUserItem, 0) | ||
55 | +for _, v := range excelData { | ||
56 | + if srv.fieldValueAllEmpty(v) { | ||
57 | + continue | ||
58 | + } | ||
59 | + item := allied_creation_user.BatchAddUserItem{ | ||
60 | + CompanyId: importDataCommand.Operator.CompanyId, | ||
61 | + UserType: domain.UserTypeEmployee, | ||
62 | + UserCode: strings.TrimSpace(v["userCode"]), | ||
63 | + Org: strings.TrimSpace(v["org"]), | ||
64 | + Department: strings.TrimSpace(v["department"]), | ||
65 | + UserName: strings.TrimSpace(v["userName"]), | ||
66 | + Phone: strings.TrimSpace(v["phone"]), | ||
67 | + Email: strings.TrimSpace(v["email"]), | ||
68 | + EnableStatus: strings.TrimSpace(v["enableStatus"]), | ||
69 | + EmployeeType: strings.TrimSpace(v["employeeType"]), | ||
70 | + IcCardNumber: strings.TrimSpace(v["icCardNumber"]), | ||
71 | + } | ||
72 | + users = append(users, item) | ||
73 | +} | ||
74 | +// 2.向后台服务发起批量添加请求 | ||
75 | +userGateway := allied_creation_user.NewHttplibAlliedCreationUser(importDataCommand.Operator) | ||
76 | +result, err := userGateway.UserBatchAdd(allied_creation_user.ReqBatchAddUser{ | ||
77 | + Users: users, | ||
78 | + Password: initPassword, | ||
79 | +}) | ||
80 | +``` | ||
81 | + | ||
82 | +```go | ||
83 | +``` | ||
84 | + | ||
85 | +### 2.2 Excel导出流程 | ||
86 | + | ||
87 | +- 功能原型说明 | ||
88 | + | ||
89 | +实现可以自定义选择列进行导出,以及选择导出格式,导出格式有 ``xlsx``\\``csv``,功能如下图所示: | ||
90 | + | ||
91 | +![](https://timeless-world.oss-cn-shenzhen.aliyuncs.com/opportunity/dev_online/20220225/object/1645789890_JbTa22EtANsD3fm2nJ4aH6FJkHzXaHJB.png) | ||
92 | + | ||
93 | +- 前后端交互说明 | ||
94 | + | ||
95 | +``接口定义`` | ||
96 | + | ||
97 | +导出接口 | ||
98 | +```shell | ||
99 | +POST /v1/web/file-export | ||
100 | + | ||
101 | +// request 请求参数 | ||
102 | +{ | ||
103 | + // 业务编码 | ||
104 | + "code":"string" | ||
105 | + // 选择的导出的列 | ||
106 | + "fields":[] | ||
107 | + // 导出文件格式 | ||
108 | + "format":"xlsx" | ||
109 | + // 业务查询条件 | ||
110 | + "where":{} | ||
111 | +} | ||
112 | +``` | ||
113 | + | ||
114 | +导出列查询接口 | ||
115 | + | ||
116 | +```shell | ||
117 | +GET/v1/web/file-export/fields/:code | ||
118 | + | ||
119 | +// response 应答数据 | ||
120 | +{ | ||
121 | + "fields":[ | ||
122 | + { | ||
123 | + "enName":"字段键名", | ||
124 | + "cnName":"字段展示名称", | ||
125 | + "selected":true // 默认勾选 | ||
126 | + } | ||
127 | + ] | ||
128 | +} | ||
129 | +``` | ||
130 | + | ||
131 | +- 交互流程 | ||
132 | + | ||
133 | +1.前台根据 ``导出列查询接口`` 获取可以导出的列; | ||
134 | +2.勾选需要导出的列、文件格式,调用 ``导出接口`` 向后台发起导出数据请求; | ||
135 | + | ||
136 | + | ||
137 | +#### 2.2.1 后端导出实现 | ||
138 | + | ||
139 | +1. 导出数据实现接口 | ||
140 | + | ||
141 | +``` | ||
142 | +type ExcelMaker interface { | ||
143 | + DataFieldList() []DataField //字段元数据列表 | ||
144 | + CellValue(index int, enName string) (value interface{}) //获取单元格字段值 | ||
145 | + DataListLen() int //数据列表大小 | ||
146 | + TableTitle() []string //列表顶部自定义内容 | ||
147 | +} | ||
148 | +``` | ||
149 | + | ||
150 | +如下所示 | ||
151 | +```go | ||
152 | +//ExportCooperationUserData 导出共创用户数据 | ||
153 | +type ExportCooperationUserData struct { | ||
154 | + SourceData []allied_creation_user.UserDetail //具体数据 | ||
155 | + SelectedField []string | ||
156 | +} | ||
157 | + | ||
158 | +var _ excel.ExcelMaker = (*ExportCooperationUserData)(nil) | ||
159 | + | ||
160 | +func (data ExportCooperationUserData) AllFields() []DataFieldOptions { | ||
161 | + return []DataFieldOptions{ | ||
162 | + {EnName: "UserCode", CnName: "用户编码"}, | ||
163 | + {EnName: "UserName", CnName: "用户姓名"}, | ||
164 | + {EnName: "Phone", CnName: "手机号"}, | ||
165 | + {EnName: "CooperationCompany", CnName: "共创公司"}, | ||
166 | + {EnName: "CooperationDeadline", CnName: "共创到期"}, | ||
167 | + {EnName: "EnableStatus", CnName: "状态"}, | ||
168 | + } | ||
169 | +} | ||
170 | + | ||
171 | +func (data ExportCooperationUserData) DataFieldList() []excel.DataField { | ||
172 | + fields := []excel.DataField{} | ||
173 | + allFields := data.AllFields() | ||
174 | + for _, value2 := range allFields { | ||
175 | + if len(data.SelectedField) == 0 || value2.IsDefault { | ||
176 | + fields = append(fields, excel.DataField{EnName: value2.EnName, CnName: value2.CnName}) | ||
177 | + continue | ||
178 | + } | ||
179 | + for _, value3 := range data.SelectedField { | ||
180 | + if value2.EnName == value3 { | ||
181 | + fields = append(fields, excel.DataField{EnName: value2.EnName, CnName: value2.CnName}) | ||
182 | + } | ||
183 | + } | ||
184 | + } | ||
185 | + return fields | ||
186 | +} | ||
187 | + | ||
188 | +func (data ExportCooperationUserData) CellValue(index int, enName string) (value interface{}) { | ||
189 | + if index > data.DataListLen() { | ||
190 | + return "" | ||
191 | + } | ||
192 | + switch enName { | ||
193 | + case "UserCode": | ||
194 | + return data.SourceData[index].UserCode | ||
195 | + case "UserName": | ||
196 | + return data.SourceData[index].UserInfo.UserName | ||
197 | + case "CooperationCompany": | ||
198 | + return data.SourceData[index].CooperationInfo.CooperationCompany | ||
199 | + case "CooperationDeadline": | ||
200 | + if data.SourceData[index].CooperationInfo.CooperationDeadline.IsZero() || data.SourceData[index].CooperationInfo.CooperationDeadline.Unix() == 0 { | ||
201 | + return "" | ||
202 | + } | ||
203 | + return data.SourceData[index].CooperationInfo.CooperationDeadline.Format("2006-01-02") | ||
204 | + case "Phone": | ||
205 | + return data.SourceData[index].UserInfo.Phone | ||
206 | + case "Email": | ||
207 | + return data.SourceData[index].UserInfo.Email | ||
208 | + case "EnableStatus": | ||
209 | + status := data.SourceData[index].EnableStatus | ||
210 | + statusName := "" | ||
211 | + // 状态(1:启用 2:禁用 3:注销) | ||
212 | + switch status { | ||
213 | + case 1: | ||
214 | + statusName = "启用" | ||
215 | + case 2: | ||
216 | + statusName = "禁用" | ||
217 | + case 3: | ||
218 | + statusName = "注销" | ||
219 | + } | ||
220 | + return statusName | ||
221 | + } | ||
222 | + return nil | ||
223 | +} | ||
224 | + | ||
225 | +func (data ExportCooperationUserData) DataListLen() int { | ||
226 | + return len(data.SourceData) | ||
227 | +} | ||
228 | + | ||
229 | +func (data ExportCooperationUserData) TableTitle() []string { | ||
230 | + return nil | ||
231 | +} | ||
232 | +``` | ||
233 | + | ||
234 | +2. 返回文件 | ||
235 | + | ||
236 | +```go | ||
237 | +//返回文件 | ||
238 | +excelTool := excel.NewExcelExport() | ||
239 | +err = excelTool.ExportData(data, "") | ||
240 | +controller.responseExcelByFile(controller.Ctx, excelTool, filename) | ||
241 | + | ||
242 | + | ||
243 | +func (controller *ExcelDataController) responseExcelByFile(ctx *context.Context, excelExport *excel.ExcelExport, fileName string) error { | ||
244 | + ctx.Output.Header("Content-Disposition", "attachment; filename="+fileName) | ||
245 | + ctx.Output.Header("Content-Description", "File Transfer") | ||
246 | + ctx.Output.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") | ||
247 | + ctx.Output.Header("Content-Transfer-Encoding", "binary") | ||
248 | + ctx.Output.Header("Expires", "0") | ||
249 | + ctx.Output.Header("Cache-Control", "must-revalidate") | ||
250 | + ctx.Output.Header("Pragma", "public") | ||
251 | + //跳过保存文件,直接写入ctx.ResponseWriter | ||
252 | + excelExport.ExcelFile.Write(ctx.ResponseWriter) | ||
253 | + return nil | ||
254 | +} | ||
255 | +``` |
1 | -----BEGIN RSA PRIVATE KEY----- | 1 | -----BEGIN RSA PRIVATE KEY----- |
2 | -MIIEpQIBAAKCAQEAy0OxRf+NheQG9epxbrudwnrzqVgqK5zCuRAkLUgaSMATVXEA | ||
3 | -iDzJN39om+Q49MmtEk4pXGzKUyzkFJG96PA8tJq0E+bSDtSK3n+2mjZb6pChmgHw | ||
4 | -KEX7T8ZVLqJBSrfrI4Z2BJDNEC+3wvVW3zpog1RlfKgft6NYUzNLUqE5Mxzq7lpD | ||
5 | -eRsq+FhzM1sOeEb2dAmUlDDs+7HcR3Kj0ttKeg+hKqIottQ/H6Tq4c8deEQGnO0+ | ||
6 | -RN3CygyETbYmLuWttI/sUltulWJALIuU81Yr6uCOq5MSt2WsU8CTuhRwGXSvcQCO | ||
7 | -FLYppYktoMDOGIBQffmJc/DdT1d35fvdpKbm+QIDAQABAoIBAQC8X7+qX2uI6gqJ | ||
8 | -XPxC4x0RX2DxUAPE50KOv6bHUEsLoPZJ+K/Fko/oHuuTja47Lax3inhKb4gSDUhS | ||
9 | -x754YivgNH8u8ns5wz/vc+yGflowyFj7oVAwAqslA2luDnD0Df6crcAx+wAQQCjN | ||
10 | -RRF9T2QMUeq73BOI3Ji+gosLyN55vms2KadrwpPQwYN7qhdrerE7vPqCZeswzs1/ | ||
11 | -A5M9PVGBG+simNea5kv+tVJUdLi6ckGAB5KabyhpG779ckwzV/aZy3wIj4SvUvCd | ||
12 | -bewH0xPHx5TqnMOXtzHgktClmL7hIYxy9sL14Dn0KVHbyolQ7IqmJtjXYqG84Fmx | ||
13 | -AfyDfeABAoGBAPP820tKElrfTuZ+Z19kJBTp6I5iax2Ph10glUHLlLqJ82clI/Gl | ||
14 | -CbMtnGmD72HfnJei82xqoVLsUkN9Sp+TSNJALh4N8rHkAtwq5kWToiAWZydwxVsp | ||
15 | -x5OWEN3+QFIdjVW6fhg6jZSK5HHIqMdZOVvbfKP+Cv9fWWzlS7/WVTlJAoGBANVF | ||
16 | -kol+KojM4DEASrw0s1mfPr0XvUFvKJ2TgVGR3HxAk4r0e0WwJdSfwGiB/ePcc6g5 | ||
17 | -D5dxBe8W5g3+V0DaC0f1DDNXg2MjYWoByWrurbm14FRnpMnx/UfZLo7rq8T9YrUT | ||
18 | -Bd/y0/JasndN27bIfd60n233IYMqhV2+wBwqD3AxAoGAE2/wdHYJMk4Z9gjZ6WKL | ||
19 | -8VKVIUq759X4XbXrzhsO1TGKP4xY6bZRKIIYtNs65dwvmHD13Yw9H+MNxqyjlkTg | ||
20 | -h0dvpRtNW1ij1bBhOefCAbZnL2AviMyyRpKs81J/A0uxZ8P8qad4gf3ypxHqSD9W | ||
21 | -b3fz3QivDZsl/6Pgvf6wOWkCgYEA1Cv9x5lj2WrxEu62axyG3P9nHBm055cdsf5g | ||
22 | -JfVVg6t+3TuyM7c1O52efpnsKrdTvKTf1QrVG3INdxh0V4lUtcac16sVhBhbvml+ | ||
23 | -p0pCPMIrJe1ibKG5F7SB9B+TaEuo2nnNW2mp367JY5VqoyI8zsWk4nJ8vZAc1BGD | ||
24 | -78EMUNECgYEAtV0pta3GuHKOLX1HMRsUsYuWjLqAbahnciF6MnjNWSonEK3VjMhI | ||
25 | -g+krP/9sWoC3cFOG+4s96ubjDTWImvQvCrPaENdvlNwgp035bn51eFRv00QchM2H | ||
26 | -VCS9Nhoqj5BIHl1G7Q13+tYTzjUWtteG902nWDVhgSlNLJf1rbTn34g= | ||
27 | ------END RSA PRIVATE KEY----- | 2 | +MIIEpAIBAAKCAQEA45R02HLq/QHraf7VBf6QO4ca1StnmvztF5BLVU7txhKe9FD4 |
3 | +CLUhwharlUlPPjYFdqm9pFxynUqt15djEPhGVUEFeBpf931pVuPugNmZ/AVj0p8y | ||
4 | +06eTNLphkrzCdBzISUN5E3PKglz3efIzq6ZK8vbns/XSQA9NRzAPTboe0KC0Flj4 | ||
5 | +YPP1X69aJiBOGClsAjG1EXQ6gxepBiL1Fq3GtpKHrQPFHffUXEkPZJz09x6RxpuU | ||
6 | +CrtxUKdO6eKg89COo3xLXVpOZu94+csBAgvXqmADp/XCQELZRMTTEA4OIyz7yXoK | ||
7 | +nmqceoHaeSv4nzDDMwzITFvWmZHDPHLuZwNSZwIDAQABAoIBAQDGPKf3b0rQLt7g | ||
8 | +irEGsrLyl4JBE7kA4bao4vEsEz+9XLUHfoxAEX+hcFvwA1a6ixYBQmRGCp1v9AAw | ||
9 | +HteVjZ6+XpAkCV102NJsdMlphaLDS/KjIjeE9KCeuoeJ6VC9EeFJKDQMRL2vBsov | ||
10 | +eFGYAJeiwn4cXVHSqUGYc/2wqCJ1eRHJkvprDqIeZU8ND3uQ5Gz/5azezf8hBu2P | ||
11 | +MUDseX1PzdvvElidxpHR1KsZTvGVFMMFWRcSDfQYSIB8EevMKQS2YwU9kmiCI3s3 | ||
12 | +qDEAc/Usj64oRLh3Wwh9V0H26zpn/XyQ5pzYmWtCGUpifGuAAQeFKc1jPN6fJy6a | ||
13 | +WwLprqV5AoGBAP0k7btOXE5+hmMGcuiu3vWg0X3EOQf7MtMlsrMbqrzS4HbaaMqP | ||
14 | +BW4hrQOLl8zB9vOYt0TuK0/+ONLlCgYiodqA8FkC7TUHcTyHUEIE3+QTrI23CY6z | ||
15 | +AbJgnHew4jKhRvbLFHkrrIMWgRIDlIwk7HFwHLpU9tw2SsHMz6hWQjY1AoGBAOYl | ||
16 | +suq/hyYHlI6ggbzkFjchlRxBFEOm8GOa6LLjuP0sxbaFXXfFUtw4YhO0WL8X9JSm | ||
17 | +Qtsb4HVQPZMGlrY5rale4FOXBnSovt0LuPR3gX9OaK9T9x4X+gabQrlGIlcS2QRM | ||
18 | +AvwPGlWptLLmQOgWdcZ5xOGEWdXDhIFrAK6khEmrAoGBAJDRM39YEM6G63JzGgGr | ||
19 | +KLn0SmRcgRPjzOumQVjdlwt2yBq2UASxVTXv5f6FOU5WGGS7FP1GE1kr4m4jwVxJ | ||
20 | +K7bI1LbXScRwgYNTFcLu7vaXmrtn3vvXxDy7sEd41a6JPQOqoge/yG0lzqjzi2Ox | ||
21 | +K+KpdIXUXXUVSicceB+hWTeRAoGAIVuXejT2hsmUe7PB+jnpCmagsS6xnDinIRjD | ||
22 | +36HoHzINGi5sZL7CCs9VT9vU/SWguqb6i72XpAlUU2oiEBl+FU1+ID+EnQYUW/+l | ||
23 | ++DEWIPihbcAy0jbRc4GvgyEqOwqtT9UgnZ4myAHIAiIjiEAxI+pkYfeH+dbT7tou | ||
24 | +iCGqVu8CgYBOF/1Ek3ex23CryLuMHg8wp0VHSSuksnurMWkg/H8qBT7NjWhVNRCi | ||
25 | +mrjy2oCSI6TKPwVZQo15LeOuhXkfYFig667sBvo59Nz+QBQhh6NGwrSiZuYlf3F/ | ||
26 | +8mgDIjspJm4R9kFRAZZcsuHH6hHAge5Lik/yRyztxI9Vlpok6e1bEw== | ||
27 | +-----END RSA PRIVATE KEY----- |
1 | -----BEGIN CERTIFICATE----- | 1 | -----BEGIN CERTIFICATE----- |
2 | -MIIGazCCBVOgAwIBAgIQZBwijHoFToh2kjGwQ1E6bjANBgkqhkiG9w0BAQsFADBc | ||
3 | -MQswCQYDVQQGEwJDTjEaMBgGA1UEChMRV29UcnVzIENBIExpbWl0ZWQxMTAvBgNV | ||
4 | -BAMMKFdvVHJ1cyBPViBTZXJ2ZXIgQ0EgIFtSdW4gYnkgdGhlIElzc3Vlcl0wHhcN | ||
5 | -MjEwMjA0MDAwMDAwWhcNMjIwMzA2MjM1OTU5WjCB0TELMAkGA1UEBhMCQ04xDzAN | ||
6 | -BgNVBBETBjM1MDAxNTESMBAGA1UEBwwJ56aP5bee5biCMU8wTQYDVQQJDEbpqazl | ||
7 | -sL7ljLrmuZbph4zot68yN+WPtzEj5qW85LqU5qW8NTEw44CBNTEx5a6k77yI6Ieq | ||
8 | -6LS46K+V6aqM5Yy65YaF77yJMTAwLgYDVQQKDCfnpo/lu7rkubDkubDkubDkv6Hm | ||
9 | -ga/np5HmioDmnInpmZDlhazlj7gxGjAYBgNVBAMMESouZmptYWltYWltYWkuY29t | ||
10 | -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0OxRf+NheQG9epxbrud | ||
11 | -wnrzqVgqK5zCuRAkLUgaSMATVXEAiDzJN39om+Q49MmtEk4pXGzKUyzkFJG96PA8 | ||
12 | -tJq0E+bSDtSK3n+2mjZb6pChmgHwKEX7T8ZVLqJBSrfrI4Z2BJDNEC+3wvVW3zpo | ||
13 | -g1RlfKgft6NYUzNLUqE5Mxzq7lpDeRsq+FhzM1sOeEb2dAmUlDDs+7HcR3Kj0ttK | ||
14 | -eg+hKqIottQ/H6Tq4c8deEQGnO0+RN3CygyETbYmLuWttI/sUltulWJALIuU81Yr | ||
15 | -6uCOq5MSt2WsU8CTuhRwGXSvcQCOFLYppYktoMDOGIBQffmJc/DdT1d35fvdpKbm | ||
16 | -+QIDAQABo4ICsTCCAq0wHwYDVR0jBBgwFoAUDUmPFTN7wE+2+zo4Cfw0Fdpg3RQw | ||
17 | -HQYDVR0OBBYEFMGZEgzwtp+UhpTAS9nmSxlo9tIlMA4GA1UdDwEB/wQEAwIFoDAM | ||
18 | -BgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBJBgNV | ||
19 | -HSAEQjBAMDQGCysGAQQBsjEBAgIWMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2Vj | ||
20 | -dGlnby5jb20vQ1BTMAgGBmeBDAECAjA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8v | ||
21 | -Y3JsLmNybG9jc3AuY24vV29UcnVzT1ZTZXJ2ZXJDQV8yLmNybDBsBggrBgEFBQcB | ||
22 | -AQRgMF4wOAYIKwYBBQUHMAKGLGh0dHA6Ly9haWEuY3Jsb2NzcC5jbi9Xb1RydXNP | ||
23 | -VlNlcnZlckNBXzIuY3J0MCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5jcmxvY3Nw | ||
24 | -LmNuMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcARqVV63X6kSAwtaKJafTzfREs | ||
25 | -QXS+/Um4havy/HD+bUcAAAF3brV9qAAABAMASDBGAiEAjrXS+1JJW9jag/XfW+kY | ||
26 | -oL4sGGDNvcZgV35E0EcGQVACIQCjQh8k5oSFtqo7Qrbx2k3OISjfPSYRXNNsG4Ba | ||
27 | -MyDmRwB2AN+lXqtogk8fbK3uuF9OPlrqzaISpGpejjsSwCBEXCpzAAABd261fdAA | ||
28 | -AAQDAEcwRQIgcPQQJ3rkCFaQPKwT3rtfQkr0taPzw0KW7yqu+MtmBH0CIQChKeMk | ||
29 | -v7Xs0z7J47lM6HTPOU+xXL2riC69LC1KCOS6GTAtBgNVHREEJjAkghEqLmZqbWFp | ||
30 | -bWFpbWFpLmNvbYIPZmptYWltYWltYWkuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBn | ||
31 | -+jDy7sZS0gZzwMR4hnZHWqFYcJR3wnk77xr+5Yu2ifhlxaLHE3rEY3xTR9LsPwfW | ||
32 | -pdg2McinPCI6vs009NYIpeTiHzVDPzKu2BaUfKj+EHLwZQGfXkNhp3cpqZMiTkr/ | ||
33 | -YNqf25GXsBa+spwzyHh9MBXXCfWRfdHX7JlH5zyoLNztTp8unxaRYldjghHDA3Q7 | ||
34 | -8Fyz6OncY3I4U4KKBSq2/TTxveDW6NxTTuJTPOg3/qSIkwdOBLuIzuhxmF4D9wpl | ||
35 | -LMHmne2CilVeg73/GAzQt/w7FzmdvaHPAOVYWzdaTNALiXJxbi7EyO8q/uNK0GqY | ||
36 | -hljMsnA1hApG+/2sOP/P | 2 | +MIIGeTCCBWGgAwIBAgIRAI8zZs95ViIzW/6yB+17fngwDQYJKoZIhvcNAQELBQAw |
3 | +XDELMAkGA1UEBhMCQ04xGjAYBgNVBAoTEVdvVHJ1cyBDQSBMaW1pdGVkMTEwLwYD | ||
4 | +VQQDDChXb1RydXMgT1YgU2VydmVyIENBICBbUnVuIGJ5IHRoZSBJc3N1ZXJdMB4X | ||
5 | +DTIyMDIxMDAwMDAwMFoXDTIzMDMxMjIzNTk1OVowZjELMAkGA1UEBhMCQ04xEjAQ | ||
6 | +BgNVBAgMCeemj+W7uuecgTEnMCUGA1UECgwe5aSp6IGU5L+h5oGv56eR5oqA5pyJ | ||
7 | +6ZmQ5YWs5Y+4MRowGAYDVQQDDBEqLmZqbWFpbWFpbWFpLmNvbTCCASIwDQYJKoZI | ||
8 | +hvcNAQEBBQADggEPADCCAQoCggEBAOOUdNhy6v0B62n+1QX+kDuHGtUrZ5r87ReQ | ||
9 | +S1VO7cYSnvRQ+Ai1IcIWq5VJTz42BXapvaRccp1KrdeXYxD4RlVBBXgaX/d9aVbj | ||
10 | +7oDZmfwFY9KfMtOnkzS6YZK8wnQcyElDeRNzyoJc93nyM6umSvL257P10kAPTUcw | ||
11 | +D026HtCgtBZY+GDz9V+vWiYgThgpbAIxtRF0OoMXqQYi9RatxraSh60DxR331FxJ | ||
12 | +D2Sc9PcekcablAq7cVCnTunioPPQjqN8S11aTmbvePnLAQIL16pgA6f1wkBC2UTE | ||
13 | +0xAODiMs+8l6Cp5qnHqB2nkr+J8wwzMMyExb1pmRwzxy7mcDUmcCAwEAAaOCAyow | ||
14 | +ggMmMB8GA1UdIwQYMBaAFA1JjxUze8BPtvs6OAn8NBXaYN0UMB0GA1UdDgQWBBSd | ||
15 | +7Jpt75ZS1gDF9uvt6jq/wsM6pTAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIw | ||
16 | +ADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwSQYDVR0gBEIwQDA0Bgsr | ||
17 | +BgEEAbIxAQICFjAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQ | ||
18 | +UzAIBgZngQwBAgIwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2NybC5jcmxvY3Nw | ||
19 | +LmNuL1dvVHJ1c09WU2VydmVyQ0FfMi5jcmwwbAYIKwYBBQUHAQEEYDBeMDgGCCsG | ||
20 | +AQUFBzAChixodHRwOi8vYWlhLmNybG9jc3AuY24vV29UcnVzT1ZTZXJ2ZXJDQV8y | ||
21 | +LmNydDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3AuY3Jsb2NzcC5jbjCCAX4GCisG | ||
22 | +AQQB1nkCBAIEggFuBIIBagFoAHYArfe++nz/EMiLnT2cHj4YarRnKV3PsQwkyoWG | ||
23 | +NOvcgooAAAF+4S03XgAABAMARzBFAiEAqR1sq52hM4f5aS3cvFX0eMSDkBy0Ezbf | ||
24 | +8O6DPg7404sCIC+acfUKRvt4A89tcgvdK8TiAvFb1zaaN5608wtyLUcRAHcAejKM | ||
25 | +VNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61IAAAF+4S03HAAABAMASDBGAiEA | ||
26 | +7OiNg/IGkzMm3/NDw+oZuqDAYgigaq9Bsh67gyRDw9oCIQCexK1Oo74f6IMRebPU | ||
27 | +Z2/U6DyiOh6bUu/qJJyyhjBHrgB1AOg+0No+9QY1MudXKLyJa8kD08vREWvs62nh | ||
28 | +d31tBr1uAAABfuEtNwMAAAQDAEYwRAIgWcr/D/Ygi5WOeoRdpg93smwz6snU9vxL | ||
29 | +I0CLiufIfKECIAFvFv9PMrHTyC05TIGfWfkVHqGZoPjPKRUtZyoWlMGaMC0GA1Ud | ||
30 | +EQQmMCSCESouZmptYWltYWltYWkuY29tgg9mam1haW1haW1haS5jb20wDQYJKoZI | ||
31 | +hvcNAQELBQADggEBAHhfZLmBvIDl9kQvKZf2IrFUNbd9/yLWnrCoKOaQejVVOGkZ | ||
32 | +BmFpn2ZXGCfuCZUqhZQLc9xL49fkmBACQJa358pLUcrMRweZPPRPW53uGWH6N3IA | ||
33 | +cAShUscFU9LBZ7ynbK9OG58E1O9/taJVQGd7YmjhEyA7A3oTtxjedk1ZPz1Hue/w | ||
34 | +au5wfAg9Tl4ds8/rPTCACSYTd1HXhR9OuqDcinTdtwJrzKp3NKWpQjPvgpNcaJPA | ||
35 | +j8JHnggP3GDe4xGNyt6CmNuZpWVm23CT7pFYwqQYTLqKB5yFRK4PUZ3PPKz49gQv | ||
36 | +hkln6/8l93Jt5oRolk4kq6A/D64jwlNwa7EPlz8= | ||
37 | -----END CERTIFICATE----- | 37 | -----END CERTIFICATE----- |
38 | -----BEGIN CERTIFICATE----- | 38 | -----BEGIN CERTIFICATE----- |
39 | MIIF4TCCA8mgAwIBAgIQHQgpVDhMv3SvabmRFpvwLTANBgkqhkiG9w0BAQwFADCB | 39 | MIIF4TCCA8mgAwIBAgIQHQgpVDhMv3SvabmRFpvwLTANBgkqhkiG9w0BAQwFADCB |
deploy/k8s/test/.gitkeep
0 → 100644
1 | +apiVersion: v1 | ||
2 | +kind: Service | ||
3 | +metadata: | ||
4 | + name: allied-creation-manufacture | ||
5 | + namespace: mmm-suplus-test | ||
6 | + labels: | ||
7 | + k8s-app: allied-creation-manufacture | ||
8 | +spec: | ||
9 | + ports: | ||
10 | + - name: "http" | ||
11 | + port: 80 | ||
12 | + targetPort: 8082 | ||
13 | + selector: | ||
14 | + k8s-app: allied-creation-manufacture | ||
15 | +--- | ||
16 | +apiVersion: extensions/v1beta1 | ||
17 | +kind: Deployment | ||
18 | +metadata: | ||
19 | + name: allied-creation-manufacture | ||
20 | + namespace: mmm-suplus-test | ||
21 | + labels: | ||
22 | + k8s-app: allied-creation-manufacture | ||
23 | +spec: | ||
24 | + replicas: 1 | ||
25 | + template: | ||
26 | + metadata: | ||
27 | + labels: | ||
28 | + k8s-app: allied-creation-manufacture | ||
29 | + spec: | ||
30 | + affinity: | ||
31 | + nodeAffinity: | ||
32 | + preferredDuringSchedulingIgnoredDuringExecution: | ||
33 | + - preference: {} | ||
34 | + weight: 100 | ||
35 | + requiredDuringSchedulingIgnoredDuringExecution: | ||
36 | + nodeSelectorTerms: | ||
37 | + - matchExpressions: | ||
38 | + - key: kubernetes.io/hostname | ||
39 | + operator: In | ||
40 | + values: | ||
41 | + - cn-hangzhou.i-bp1djh1xn7taumbue1ze | ||
42 | + - cn-hangzhou.i-bp1djh1xn7taumbue1zd | ||
43 | + - cn-hangzhou.i-bp1euf5u1ph9kbhtndhb | ||
44 | + - cn-hangzhou.i-bp1hyp5oips9cdwxxgxy | ||
45 | + containers: | ||
46 | + - name: allied-creation-manufacture | ||
47 | + image: 192.168.0.243:5000/mmm/allied-creation-manufacture:dev | ||
48 | + imagePullPolicy: Always | ||
49 | + ports: | ||
50 | + - containerPort: 8082 | ||
51 | + env: | ||
52 | + - name: POSTGRESQL_DB_NAME | ||
53 | + valueFrom: | ||
54 | + configMapKeyRef: | ||
55 | + name: suplus-config | ||
56 | + key: postgresqlalliedcreation.dbname | ||
57 | + - name: POSTGRESQL_USER | ||
58 | + valueFrom: | ||
59 | + configMapKeyRef: | ||
60 | + name: suplus-config | ||
61 | + key: postgresql.user | ||
62 | + - name: POSTGRESQL_PASSWORD | ||
63 | + valueFrom: | ||
64 | + configMapKeyRef: | ||
65 | + name: suplus-config | ||
66 | + key: postgresql.password | ||
67 | + - name: POSTGRESQL_HOST | ||
68 | + valueFrom: | ||
69 | + configMapKeyRef: | ||
70 | + name: suplus-config | ||
71 | + key: postgresql.host | ||
72 | + - name: POSTGRESQL_PORT | ||
73 | + valueFrom: | ||
74 | + configMapKeyRef: | ||
75 | + name: suplus-config | ||
76 | + key: postgresql.port | ||
77 | + - name: REDIS_HOST | ||
78 | + valueFrom: | ||
79 | + configMapKeyRef: | ||
80 | + name: suplus-config | ||
81 | + key: redis.ip | ||
82 | + - name: REDIS_PORT | ||
83 | + valueFrom: | ||
84 | + configMapKeyRef: | ||
85 | + name: suplus-config | ||
86 | + key: redis.port | ||
87 | + - name: REDIS_AUTH | ||
88 | + value: "" | ||
89 | + - name: LOG_LEVEL | ||
90 | + value: "debug" | ||
91 | + - name: ERROR_BASE_CODE | ||
92 | + value: "1" | ||
93 | + - name: ERROR_BASE_CODE_MULTIPLE | ||
94 | + value: "2000" | ||
95 | + - name: ENABLE_KAFKA_LOG | ||
96 | + value: "true" | ||
97 | + - name: HTTP_PORT | ||
98 | + value: "8082" | ||
99 | + - name: SERVICE_ENV | ||
100 | + value: "dev" | ||
101 | + - name: SUPLUS_ADMIN_BASE_HOST | ||
102 | + value: "http://suplus-admin-base-dev.fjmaimaimai.com" | ||
103 | + - name: ALLIED_CREATION_GATEWAY_HOST | ||
104 | + value: "https://allied-creation-gateway-test.fjmaimaimai.com" | ||
105 | + - name: ALLIED_CREATION_USER_HOST | ||
106 | + value: "https://allied-creation-user-test.fjmaimaimai.com" | ||
107 | + - name: ALLIED_CREATION_COOPERATION_HOST | ||
108 | + value: "https://allied-creation-cooperation-test.fjmaimaimai.com" | ||
109 | + - name: ALLIED_CREATION_BASIC_HOST | ||
110 | + value: "https://allied-creation-basic-test.fjmaimaimai.com" | ||
111 | + - name: ALLIED_CREATION_MANUFACTURE_HOST | ||
112 | + value: "http://allied-creation-manufacture-test.fjmaimaimai.com" | ||
113 | + - name: SMS_SERVE_HOST | ||
114 | + value: "https://sms.fjmaimaimai.com:9897" | ||
115 | + - name: SUPLUS_SALE_APP | ||
116 | + value: "http://suplus-sale-app-gateway-test.fjmaimaimai.com" | ||
117 | + - name: MANUFACTURE_DEFAULT_COMPANYID | ||
118 | + value: "23" | ||
119 | + - name: MANUFACTURE_DEFAULT_ORGID | ||
120 | + value: "487" |
deploy/k8s/test/install.sh
0 → 100644
1 | +#!/bin/bash | ||
2 | +export PATH=/root/local/bin:$PATH | ||
3 | +kubectl -n mmm-suplus-test get pods | grep -q allied-creation-manufacture | ||
4 | +if [ "$?" == "1" ];then | ||
5 | + kubectl create -f /tmp/test/allied-creation-manufacture/allied-creation-manufacture.yaml --record | ||
6 | + kubectl -n mmm-suplus-test get svc | grep -q allied-creation-manufacture | ||
7 | + if [ "$?" == "0" ];then | ||
8 | + echo "allied-creation-manufacture service install success!" | ||
9 | + else | ||
10 | + echo "allied-creation-manufacture service install fail!" | ||
11 | + fi | ||
12 | + kubectl -n mmm-suplus-test get pods | grep -q allied-creation-manufacture | ||
13 | + if [ "$?" == "0" ];then | ||
14 | + echo "allied-creation-manufacture deployment install success!" | ||
15 | + else | ||
16 | + echo "allied-creation-manufacture deployment install fail!" | ||
17 | + fi | ||
18 | +else | ||
19 | + kubectl delete -f /tmp/test/allied-creation-manufacture/allied-creation-manufacture.yaml | ||
20 | + kubectl -n mmm-suplus-test get svc | grep -q allied-creation-manufacture | ||
21 | + while [ "$?" == "0" ] | ||
22 | + do | ||
23 | + kubectl -n mmm-suplus-test get svc | grep -q allied-creation-manufacture | ||
24 | + done | ||
25 | + kubectl -n mmm-suplus-test get pods | grep -q allied-creation-manufacture | ||
26 | + while [ "$?" == "0" ] | ||
27 | + do | ||
28 | + kubectl -n mmm-suplus-test get pods | grep -q allied-creation-manufacture | ||
29 | + done | ||
30 | + kubectl create -f /tmp/test/allied-creation-manufacture/allied-creation-manufacture.yaml --record | ||
31 | + kubectl -n mmm-suplus-test get svc | grep -q allied-creation-manufacture | ||
32 | + if [ "$?" == "0" ];then | ||
33 | + echo "allied-creation-manufacture service update success!" | ||
34 | + else | ||
35 | + echo "allied-creation-manufacture service update fail!" | ||
36 | + fi | ||
37 | + kubectl -n mmm-suplus-test get pods | grep -q allied-creation-manufacture | ||
38 | + if [ "$?" == "0" ];then | ||
39 | + echo "allied-creation-manufacture deployment update success!" | ||
40 | + else | ||
41 | + echo "allied-creation-manufacture deployment update fail!" | ||
42 | + fi | ||
43 | +fi |
@@ -13,6 +13,7 @@ require ( | @@ -13,6 +13,7 @@ require ( | ||
13 | github.com/go-redis/redis v6.15.7+incompatible | 13 | github.com/go-redis/redis v6.15.7+incompatible |
14 | github.com/google/go-querystring v1.1.0 // indirect | 14 | github.com/google/go-querystring v1.1.0 // indirect |
15 | github.com/google/uuid v1.3.0 | 15 | github.com/google/uuid v1.3.0 |
16 | + github.com/hibiken/asynq v0.21.0 | ||
16 | github.com/imkira/go-interpol v1.1.0 // indirect | 17 | github.com/imkira/go-interpol v1.1.0 // indirect |
17 | github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 | 18 | github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 |
18 | github.com/moul/http2curl v1.0.0 // indirect | 19 | github.com/moul/http2curl v1.0.0 // indirect |
@@ -20,6 +21,7 @@ require ( | @@ -20,6 +21,7 @@ require ( | ||
20 | github.com/onsi/ginkgo v1.15.2 | 21 | github.com/onsi/ginkgo v1.15.2 |
21 | github.com/onsi/gomega v1.11.0 | 22 | github.com/onsi/gomega v1.11.0 |
22 | github.com/sergi/go-diff v1.2.0 // indirect | 23 | github.com/sergi/go-diff v1.2.0 // indirect |
24 | + github.com/shopspring/decimal v1.2.0 | ||
23 | github.com/smartystreets/goconvey v1.7.2 // indirect | 25 | github.com/smartystreets/goconvey v1.7.2 // indirect |
24 | github.com/stretchr/testify v1.7.0 | 26 | github.com/stretchr/testify v1.7.0 |
25 | github.com/tidwall/gjson v1.13.0 | 27 | github.com/tidwall/gjson v1.13.0 |
@@ -61,6 +61,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c | @@ -61,6 +61,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c | ||
61 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | 61 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
62 | github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= | 62 | github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= |
63 | github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | 63 | github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= |
64 | +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= | ||
65 | +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= | ||
64 | github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= | 66 | github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= |
65 | github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= | 67 | github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= |
66 | github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= | 68 | github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= |
@@ -112,6 +114,8 @@ github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8w | @@ -112,6 +114,8 @@ github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8w | ||
112 | github.com/go-redis/redis v6.15.7+incompatible h1:3skhDh95XQMpnqeqNftPkQD9jL9e5e36z/1SUm6dy1U= | 114 | github.com/go-redis/redis v6.15.7+incompatible h1:3skhDh95XQMpnqeqNftPkQD9jL9e5e36z/1SUm6dy1U= |
113 | github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= | 115 | github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= |
114 | github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= | 116 | github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= |
117 | +github.com/go-redis/redis/v8 v8.11.2 h1:WqlSpAwz8mxDSMCvbyz1Mkiqe0LE5OY4j3lgkvu1Ts0= | ||
118 | +github.com/go-redis/redis/v8 v8.11.2/go.mod h1:DLomh7y2e3ggQXQLd1YgmvIfecPJoFl7WU5SOQ/r06M= | ||
115 | github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= | 119 | github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= |
116 | github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= | 120 | github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= |
117 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | 121 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= |
@@ -154,8 +158,9 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | @@ -154,8 +158,9 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | ||
154 | github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 158 | github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
155 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 159 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
156 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 160 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
157 | -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= | ||
158 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 161 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
162 | +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= | ||
163 | +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||
159 | github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= | 164 | github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= |
160 | github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= | 165 | github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= |
161 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | 166 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |
@@ -163,6 +168,7 @@ github.com/google/gops v0.3.7/go.mod h1:bj0cwMmX1X4XIJFTjR99R5sCxNssNJ8HebFNvoQl | @@ -163,6 +168,7 @@ github.com/google/gops v0.3.7/go.mod h1:bj0cwMmX1X4XIJFTjR99R5sCxNssNJ8HebFNvoQl | ||
163 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | 168 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= |
164 | github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | 169 | github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= |
165 | github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | 170 | github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= |
171 | +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||
166 | github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= | 172 | github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= |
167 | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | 173 | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= |
168 | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= | 174 | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= |
@@ -180,6 +186,8 @@ github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1 | @@ -180,6 +186,8 @@ github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1 | ||
180 | github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= | 186 | github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= |
181 | github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= | 187 | github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= |
182 | github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= | 188 | github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= |
189 | +github.com/hibiken/asynq v0.21.0 h1:uH9XogJhjq/S39E0/DEPWLZQ6hHJ73UiblZTe4RzHwA= | ||
190 | +github.com/hibiken/asynq v0.21.0/go.mod h1:tyc63ojaW8SJ5SBm8mvI4DDONsguP5HE85EEl4Qr5Ig= | ||
183 | github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | 191 | github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= |
184 | github.com/iancoleman/strcase v0.1.2/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= | 192 | github.com/iancoleman/strcase v0.1.2/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= |
185 | github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= | 193 | github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= |
@@ -266,6 +274,7 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ | @@ -266,6 +274,7 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ | ||
266 | github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= | 274 | github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= |
267 | github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= | 275 | github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= |
268 | github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= | 276 | github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= |
277 | +github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= | ||
269 | github.com/onsi/ginkgo v1.15.2 h1:l77YT15o814C2qVL47NOyjV/6RbaP7kKdrvZnxQ3Org= | 278 | github.com/onsi/ginkgo v1.15.2 h1:l77YT15o814C2qVL47NOyjV/6RbaP7kKdrvZnxQ3Org= |
270 | github.com/onsi/ginkgo v1.15.2/go.mod h1:Dd6YFfwBW84ETqqtL0CPyPXillHgY6XhQH3uuCCTr/o= | 279 | github.com/onsi/ginkgo v1.15.2/go.mod h1:Dd6YFfwBW84ETqqtL0CPyPXillHgY6XhQH3uuCCTr/o= |
271 | github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | 280 | github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= |
@@ -273,6 +282,7 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa | @@ -273,6 +282,7 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa | ||
273 | github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= | 282 | github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= |
274 | github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= | 283 | github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= |
275 | github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= | 284 | github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= |
285 | +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= | ||
276 | github.com/onsi/gomega v1.11.0 h1:+CqWgvj0OZycCaqclBD1pxKHAU+tOkHmQIWvDHq2aug= | 286 | github.com/onsi/gomega v1.11.0 h1:+CqWgvj0OZycCaqclBD1pxKHAU+tOkHmQIWvDHq2aug= |
277 | github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg= | 287 | github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg= |
278 | github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= | 288 | github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= |
@@ -314,6 +324,8 @@ github.com/richardlehane/mscfb v1.0.3 h1:rD8TBkYWkObWO0oLDFCbwMeZ4KoalxQy+QgniCj | @@ -314,6 +324,8 @@ github.com/richardlehane/mscfb v1.0.3 h1:rD8TBkYWkObWO0oLDFCbwMeZ4KoalxQy+QgniCj | ||
314 | github.com/richardlehane/mscfb v1.0.3/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= | 324 | github.com/richardlehane/mscfb v1.0.3/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= |
315 | github.com/richardlehane/msoleps v1.0.1 h1:RfrALnSNXzmXLbGct/P2b4xkFz4e8Gmj/0Vj9M9xC1o= | 325 | github.com/richardlehane/msoleps v1.0.1 h1:RfrALnSNXzmXLbGct/P2b4xkFz4e8Gmj/0Vj9M9xC1o= |
316 | github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= | 326 | github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= |
327 | +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= | ||
328 | +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= | ||
317 | github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= | 329 | github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= |
318 | github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= | 330 | github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= |
319 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | 331 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= |
@@ -325,6 +337,8 @@ github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI | @@ -325,6 +337,8 @@ github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI | ||
325 | github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= | 337 | github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= |
326 | github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= | 338 | github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= |
327 | github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= | 339 | github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= |
340 | +github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= | ||
341 | +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= | ||
328 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= | 342 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= |
329 | github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= | 343 | github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= |
330 | github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= | 344 | github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= |
@@ -340,6 +354,8 @@ github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3 | @@ -340,6 +354,8 @@ github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3 | ||
340 | github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | 354 | github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= |
341 | github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= | 355 | github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= |
342 | github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | 356 | github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= |
357 | +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= | ||
358 | +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | ||
343 | github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | 359 | github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= |
344 | github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | 360 | github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= |
345 | github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= | 361 | github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= |
@@ -432,6 +448,8 @@ go.opentelemetry.io/otel/trace v0.19.0/go.mod h1:4IXiNextNOpPnRlI4ryK69mn5iC84bj | @@ -432,6 +448,8 @@ go.opentelemetry.io/otel/trace v0.19.0/go.mod h1:4IXiNextNOpPnRlI4ryK69mn5iC84bj | ||
432 | go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= | 448 | go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= |
433 | go.uber.org/automaxprocs v1.3.0 h1:II28aZoGdaglS5vVNnspf28lnZpXScxtIozx1lAjdb0= | 449 | go.uber.org/automaxprocs v1.3.0 h1:II28aZoGdaglS5vVNnspf28lnZpXScxtIozx1lAjdb0= |
434 | go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA= | 450 | go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA= |
451 | +go.uber.org/goleak v0.10.0 h1:G3eWbSNIskeRqtsN/1uI5B+eP73y3JUuBsv9AZjehb4= | ||
452 | +go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI= | ||
435 | go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= | 453 | go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= |
436 | go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= | 454 | go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= |
437 | go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= | 455 | go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= |
@@ -540,6 +558,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | @@ -540,6 +558,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||
540 | golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= | 558 | golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= |
541 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | 559 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= |
542 | golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | 560 | golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= |
561 | +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||
562 | +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= | ||
543 | golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | 563 | golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= |
544 | golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | 564 | golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= |
545 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | 565 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= |
@@ -2,13 +2,14 @@ package main | @@ -2,13 +2,14 @@ package main | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "fmt" | 4 | "fmt" |
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/mqtt" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/task" | ||
5 | 7 | ||
6 | "github.com/beego/beego/v2/server/web" | 8 | "github.com/beego/beego/v2/server/web" |
7 | "github.com/linmadan/egglib-go/log/logrus" | 9 | "github.com/linmadan/egglib-go/log/logrus" |
8 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | 10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" |
9 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" | 11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" |
10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | 12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" |
11 | - "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/mqtt" | ||
12 | 13 | ||
13 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/crontab" | 14 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/crontab" |
14 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | 15 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" |
@@ -19,9 +20,6 @@ import ( | @@ -19,9 +20,6 @@ import ( | ||
19 | ) | 20 | ) |
20 | 21 | ||
21 | func main() { | 22 | func main() { |
22 | - log.Logger.Info("server start ....") | ||
23 | - log.Logger.Info(fmt.Sprintf("ENABLE_KAFKA_LOG:%v", constant.ENABLE_KAFKA_LOG)) | ||
24 | - | ||
25 | if constant.ENABLE_KAFKA_LOG { | 23 | if constant.ENABLE_KAFKA_LOG { |
26 | w, _ := logrus.NewKafkaWriter(constant.KAFKA_HOST, constant.TOPIC_LOG_STASH, false) | 24 | w, _ := logrus.NewKafkaWriter(constant.KAFKA_HOST, constant.TOPIC_LOG_STASH, false) |
27 | log.Logger.AddHook(w) | 25 | log.Logger.AddHook(w) |
@@ -33,10 +31,15 @@ func main() { | @@ -33,10 +31,15 @@ func main() { | ||
33 | }) | 31 | }) |
34 | log.Logger.AddHook(bw) | 32 | log.Logger.AddHook(bw) |
35 | redis.InitRedis() | 33 | redis.InitRedis() |
34 | + log.Logger.Debug("server start ....") | ||
35 | + log.Logger.Debug(fmt.Sprintf("ENABLE_KAFKA_LOG:%v", constant.ENABLE_KAFKA_LOG)) | ||
36 | + | ||
36 | go mqtt.Start() | 37 | go mqtt.Start() |
38 | + go task.Run() | ||
37 | cron := crontab.NewCrontabService(nil) | 39 | cron := crontab.NewCrontabService(nil) |
38 | cron.StartCrontabTask() | 40 | cron.StartCrontabTask() |
39 | defer cron.StopCrontabTask() | 41 | defer cron.StopCrontabTask() |
40 | log.Logger.Info("server start!") | 42 | log.Logger.Info("server start!") |
41 | web.Run() | 43 | web.Run() |
44 | + log.Logger.Info("server stop!") | ||
42 | } | 45 | } |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/beego/beego/v2/core/validation" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
7 | + "reflect" | ||
8 | + "strings" | ||
9 | +) | ||
10 | + | ||
11 | +type WorkerAttendanceReportCommand struct { | ||
12 | + *domain.DeviceZkTeco | ||
13 | +} | ||
14 | + | ||
15 | +func (removeProductRecordCommand *WorkerAttendanceReportCommand) Valid(validation *validation.Validation) { | ||
16 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
17 | +} | ||
18 | + | ||
19 | +func (removeProductRecordCommand *WorkerAttendanceReportCommand) ValidateCommand() error { | ||
20 | + valid := validation.Validation{} | ||
21 | + b, err := valid.Valid(removeProductRecordCommand) | ||
22 | + if err != nil { | ||
23 | + return err | ||
24 | + } | ||
25 | + if !b { | ||
26 | + elem := reflect.TypeOf(removeProductRecordCommand).Elem() | ||
27 | + for _, validErr := range valid.Errors { | ||
28 | + field, isExist := elem.FieldByName(validErr.Field) | ||
29 | + if isExist { | ||
30 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
31 | + } else { | ||
32 | + return fmt.Errorf(validErr.Message) | ||
33 | + } | ||
34 | + } | ||
35 | + } | ||
36 | + return nil | ||
37 | +} |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/beego/beego/v2/core/validation" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
7 | + "reflect" | ||
8 | + "strings" | ||
9 | +) | ||
10 | + | ||
11 | +type WorkshopWorkTimeRecordStaticsCommand struct { | ||
12 | + *domain.ProductAttendanceRecord | ||
13 | +} | ||
14 | + | ||
15 | +// Type is a string value that indicates the type of the task. | ||
16 | +//func (t *ProductRecordStaticsCommand) Type() string | ||
17 | + | ||
18 | +// Payload is the data needed for task execution. | ||
19 | +//func (t *ProductRecordStaticsCommand) Payload() []byte | ||
20 | + | ||
21 | +func (removeProductRecordCommand *WorkshopWorkTimeRecordStaticsCommand) Valid(validation *validation.Validation) { | ||
22 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
23 | +} | ||
24 | + | ||
25 | +func (removeProductRecordCommand *WorkshopWorkTimeRecordStaticsCommand) ValidateCommand() error { | ||
26 | + valid := validation.Validation{} | ||
27 | + b, err := valid.Valid(removeProductRecordCommand) | ||
28 | + if err != nil { | ||
29 | + return err | ||
30 | + } | ||
31 | + if !b { | ||
32 | + elem := reflect.TypeOf(removeProductRecordCommand).Elem() | ||
33 | + for _, validErr := range valid.Errors { | ||
34 | + field, isExist := elem.FieldByName(validErr.Field) | ||
35 | + if isExist { | ||
36 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
37 | + } else { | ||
38 | + return fmt.Errorf(validErr.Message) | ||
39 | + } | ||
40 | + } | ||
41 | + } | ||
42 | + return nil | ||
43 | +} |
@@ -2,6 +2,7 @@ package dto | @@ -2,6 +2,7 @@ package dto | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
5 | + "time" | ||
5 | ) | 6 | ) |
6 | 7 | ||
7 | type AttendanceRecordDto struct { | 8 | type AttendanceRecordDto struct { |
@@ -15,7 +16,10 @@ type AttendanceRecordDto struct { | @@ -15,7 +16,10 @@ type AttendanceRecordDto struct { | ||
15 | AttendanceType int `json:"attendanceType,omitempty"` | 16 | AttendanceType int `json:"attendanceType,omitempty"` |
16 | // 生产工人 | 17 | // 生产工人 |
17 | ProductWorker *domain.User `json:"productWorker,omitempty"` | 18 | ProductWorker *domain.User `json:"productWorker,omitempty"` |
18 | - *domain.ProductAttendanceRecordExt | 19 | + // 审核人 |
20 | + ApproveUser *domain.User `json:"approveUser"` | ||
21 | + //*domain.ProductAttendanceRecordExt | ||
22 | + ApproveAt string `json:"approveAt"` | ||
19 | // 工作位置 | 23 | // 工作位置 |
20 | *domain.WorkStation | 24 | *domain.WorkStation |
21 | // 签到 | 25 | // 签到 |
@@ -54,7 +58,20 @@ func (d *AttendanceRecordDto) LoadDto(m *domain.ProductAttendanceRecord, orgId i | @@ -54,7 +58,20 @@ func (d *AttendanceRecordDto) LoadDto(m *domain.ProductAttendanceRecord, orgId i | ||
54 | d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | 58 | d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) |
55 | if m.Ext != nil { | 59 | if m.Ext != nil { |
56 | d.OrgName = m.Ext.OrgName | 60 | d.OrgName = m.Ext.OrgName |
57 | - d.ProductAttendanceRecordExt = m.Ext.AttendanceExt | 61 | + //d.ProductAttendanceRecordExt = m.Ext.AttendanceExt |
62 | + //if | ||
63 | + if m.Ext.AttendanceExt != nil { | ||
64 | + if m.Ext.AttendanceExt.ApproveUserId > 0 { | ||
65 | + d.ApproveUser = &domain.User{ | ||
66 | + UserId: m.Ext.AttendanceExt.ApproveUserId, | ||
67 | + UserName: m.Ext.AttendanceExt.ApproveUserName, | ||
68 | + } | ||
69 | + } | ||
70 | + if m.Ext.AttendanceExt.ApproveAt > 0 { | ||
71 | + t := time.Unix(m.Ext.AttendanceExt.ApproveAt, 0) | ||
72 | + d.ApproveAt = t.Format("2006-01-02 15:04:05") | ||
73 | + } | ||
74 | + } | ||
58 | } | 75 | } |
59 | return d | 76 | return d |
60 | } | 77 | } |
1 | +package dto | ||
2 | + | ||
3 | +import ( | ||
4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
5 | +) | ||
6 | + | ||
7 | +type EmployeeAttendanceRecordDto struct { | ||
8 | + // 考勤记录ID | ||
9 | + ProductAttendanceId int `json:"productAttendanceId"` | ||
10 | + // 签到日期 | ||
11 | + SignDate string `json:"signDate"` | ||
12 | + // 工作位置 | ||
13 | + *domain.WorkStation | ||
14 | + // 生产工人 | ||
15 | + ProductWorker *domain.User `json:"productWorker,omitempty"` | ||
16 | + // 考勤类型 1.正常 2.支援 | ||
17 | + AttendanceType int `json:"attendanceType,omitempty"` | ||
18 | + //*domain.ProductAttendanceRecordExt | ||
19 | + // 考勤状态 1.未审核 2:已审核 4.自动审核 | ||
20 | + AttendanceStatus int `json:"attendanceStatus"` | ||
21 | + // 考勤类型 1.正常 2.支援 | ||
22 | + AttendanceTypeDescription string `json:"attendanceTypeDescription,omitempty"` | ||
23 | + // 员工类型描述 1:固定 2:派遣 3.临时 | ||
24 | + EmployeeTypeDescription string `json:"employeeTypeDescription,omitempty"` | ||
25 | + // 考勤状态 1.未审核 2:已审核 4.自动审核 | ||
26 | + AttendanceStatusDescription string `json:"attendanceStatusDescription"` | ||
27 | + // 工时 | ||
28 | + WorkTime float64 `json:"workTime"` | ||
29 | + // 组织名称 | ||
30 | + OrgName string `json:"orgName"` | ||
31 | + // 权限标识 (当前登录组织匹配为true,否则false) | ||
32 | + AuthFlag bool `json:"authFlag"` | ||
33 | +} | ||
34 | + | ||
35 | +func (d *EmployeeAttendanceRecordDto) LoadDto(m *domain.ProductAttendanceRecord, orgId int) *EmployeeAttendanceRecordDto { | ||
36 | + d.ProductAttendanceId = m.ProductAttendanceId | ||
37 | + d.AttendanceType = m.AttendanceType | ||
38 | + d.ProductWorker = m.ProductWorker | ||
39 | + d.WorkStation = m.WorkStation | ||
40 | + if !m.SignIn.IsZero() { | ||
41 | + //d.SignIn = m.SignIn.Format("15:04:05") | ||
42 | + d.SignDate = m.SignIn.Format("2006-01-02") | ||
43 | + } | ||
44 | + d.WorkTime = m.WorkTimeAfter | ||
45 | + //d.WorkTimeAfter = m.WorkTimeAfter | ||
46 | + d.AttendanceStatus = m.AttendanceStatus | ||
47 | + d.AttendanceTypeDescription = domain.ParticipateTypeDescription(m.AttendanceType) | ||
48 | + d.EmployeeTypeDescription = domain.EmployeeTypeDescription(m.ProductWorker.EmployeeType) | ||
49 | + d.AttendanceStatusDescription = domain.AttendanceStatusDescription(m.AttendanceStatus) | ||
50 | + d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | ||
51 | + if m.Ext != nil { | ||
52 | + d.OrgName = m.Ext.OrgName | ||
53 | + //d.ProductAttendanceRecordExt = m.Ext.AttendanceExt | ||
54 | + } | ||
55 | + return d | ||
56 | +} |
1 | +package dto | ||
2 | + | ||
3 | +import ( | ||
4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
5 | +) | ||
6 | + | ||
7 | +type WorkshopWorkTimeRecordDto struct { | ||
8 | + // 车间工时记录ID | ||
9 | + WorkshopWorkTimeRecordId int `json:"workshopWorkTimeRecordId"` | ||
10 | + // 工作位置 | ||
11 | + *domain.WorkStation | ||
12 | + // 签到日期 | ||
13 | + //SignDate string `json:"signDate"` | ||
14 | + // 记录信息 | ||
15 | + *domain.WorkshopWorkTimeRecordInfo | ||
16 | + // 记录日期 | ||
17 | + RecordDate string `json:"recordDate"` | ||
18 | + // 组织名称 | ||
19 | + OrgName string `json:"orgName"` | ||
20 | + // 权限标识 (当前登录组织匹配为true,否则false) | ||
21 | + AuthFlag bool `json:"authFlag"` | ||
22 | +} | ||
23 | + | ||
24 | +func (d *WorkshopWorkTimeRecordDto) LoadDto(m *domain.WorkshopWorkTimeRecord, orgId int) *WorkshopWorkTimeRecordDto { | ||
25 | + d.WorkshopWorkTimeRecordId = m.WorkshopWorkTimeRecordId | ||
26 | + d.WorkStation = m.WorkStation | ||
27 | + d.WorkshopWorkTimeRecordInfo = m.WorkshopWorkTimeRecordInfo | ||
28 | + d.WorkStation = m.WorkStation | ||
29 | + d.RecordDate = m.RecordDate.Format("2006-01-02") | ||
30 | + d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | ||
31 | + if m.Ext != nil { | ||
32 | + d.OrgName = m.Ext.OrgName | ||
33 | + //d.ProductAttendanceRecordExt = m.Ext.AttendanceExt | ||
34 | + } | ||
35 | + return d | ||
36 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
7 | + "reflect" | ||
8 | + "strings" | ||
9 | + "time" | ||
10 | + | ||
11 | + "github.com/beego/beego/v2/core/validation" | ||
12 | +) | ||
13 | + | ||
14 | +type SearchEmployeeAttendanceQuery struct { | ||
15 | + // 查询偏离量 | ||
16 | + Offset int `cname:"查询偏离量" json:"offset"` | ||
17 | + // 查询限制 | ||
18 | + Limit int `cname:"查询限制" json:"limit"` | ||
19 | + // 当前公司 | ||
20 | + CompanyId int `cname:"当前公司" json:"companyId,omitempty" valid:"Required"` | ||
21 | + // 当前登录的组织 | ||
22 | + OrgId int `cname:"当前登录的组织" json:"orgId,omitempty" ` | ||
23 | + // 匹配多个组织 | ||
24 | + InOrgIds []int `cname:"匹配多个组织" json:"inOrgIds,omitempty" ` | ||
25 | + // 页码 | ||
26 | + PageNumber int `cname:"页码" json:"pageNumber,omitempty"` | ||
27 | + // 页数 | ||
28 | + PageSize int `cname:"页数" json:"pageSize,omitempty"` | ||
29 | + // 车间名称 | ||
30 | + WorkshopName string `cname:"车间名称" json:"workshopName,omitempty"` | ||
31 | + // 生产线名称 | ||
32 | + LineName string `cname:"生产线名称" json:"lineName,omitempty"` | ||
33 | + // 工段名称 | ||
34 | + SectionName string `cname:"工段名称" json:"sectionName,omitempty"` | ||
35 | + // 姓名 | ||
36 | + UserName string `cname:"姓名" json:"userName,omitempty"` | ||
37 | + // 考勤状态 1.未审核 2:已审核 3.自动审核 | ||
38 | + AttendanceStatus int `cname:"考勤状态 1.未审核 2:已审核 3.自动审核" json:"attendanceStatus,omitempty"` | ||
39 | + // 员工类型 1:固定 2:派遣 3.临时 | ||
40 | + EmployeeType int `cname:"1:固定 2:派遣 3.临时" json:"employeeType,omitempty"` | ||
41 | + // 开始时间 | ||
42 | + BeginTime string `cname:"开始时间" json:"beginTime"` | ||
43 | + // 结束时间 | ||
44 | + EndTime string `cname:"结束时间" json:"endTime"` | ||
45 | + | ||
46 | + // 开始时间 | ||
47 | + SignBeginTime time.Time `cname:"开始时间" json:"signBeginTime"` | ||
48 | + // 结束时间 | ||
49 | + SignEndTime time.Time `cname:"结束时间" json:"signEndTime"` | ||
50 | +} | ||
51 | + | ||
52 | +func (cmd *SearchEmployeeAttendanceQuery) Valid(validation *validation.Validation) { | ||
53 | + cmd.Offset, cmd.Limit = domain.Pagination(cmd.PageNumber, cmd.PageSize) | ||
54 | + var err error | ||
55 | + if len(cmd.BeginTime) > 0 { | ||
56 | + if cmd.SignBeginTime, err = time.Parse("2006-01-02 15:04:05", cmd.BeginTime); err != nil { | ||
57 | + log.Logger.Error(err.Error()) | ||
58 | + validation.Error("开始时间有误") | ||
59 | + return | ||
60 | + } | ||
61 | + } | ||
62 | + if len(cmd.EndTime) > 0 { | ||
63 | + if cmd.SignEndTime, err = time.Parse("2006-01-02 15:04:05", cmd.EndTime); err != nil { | ||
64 | + log.Logger.Error(err.Error()) | ||
65 | + validation.Error("结束时间有误") | ||
66 | + return | ||
67 | + } | ||
68 | + } | ||
69 | + cmd.AttendanceStatus = 6 // 审核 + 自动审核 | ||
70 | +} | ||
71 | + | ||
72 | +func (cmd *SearchEmployeeAttendanceQuery) ValidateQuery() error { | ||
73 | + valid := validation.Validation{} | ||
74 | + b, err := valid.Valid(cmd) | ||
75 | + if err != nil { | ||
76 | + return err | ||
77 | + } | ||
78 | + if !b { | ||
79 | + elem := reflect.TypeOf(cmd).Elem() | ||
80 | + for _, validErr := range valid.Errors { | ||
81 | + field, isExist := elem.FieldByName(validErr.Field) | ||
82 | + if isExist { | ||
83 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
84 | + } else { | ||
85 | + return fmt.Errorf(validErr.Message) | ||
86 | + } | ||
87 | + } | ||
88 | + } | ||
89 | + return nil | ||
90 | +} |
@@ -44,14 +44,16 @@ func (attendanceService *AttendanceService) ApproveAttendance(cmd *command.Appro | @@ -44,14 +44,16 @@ func (attendanceService *AttendanceService) ApproveAttendance(cmd *command.Appro | ||
44 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 44 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
45 | } | 45 | } |
46 | 46 | ||
47 | - if err = attendance.Approve(user, cmd.WorkTimeAfter); err != nil { | 47 | + if err = attendance.Approve(user, cmd.WorkTimeAfter, domain.AttendanceApproved); err != nil { |
48 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 48 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
49 | } | 49 | } |
50 | 50 | ||
51 | if _, err := productAttendanceRecordRepository.Save(attendance); err != nil { | 51 | if _, err := productAttendanceRecordRepository.Save(attendance); err != nil { |
52 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 52 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
53 | } | 53 | } |
54 | - | 54 | + if err := domainService.SendWorkshopWorkTimeStaticJob(attendance); err != nil { |
55 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
56 | + } | ||
55 | if err := transactionContext.CommitTransaction(); err != nil { | 57 | if err := transactionContext.CommitTransaction(); err != nil { |
56 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 58 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
57 | } | 59 | } |
@@ -117,6 +119,7 @@ func (attendanceService *AttendanceService) CreateAttendance(operateInfo *domain | @@ -117,6 +119,7 @@ func (attendanceService *AttendanceService) CreateAttendance(operateInfo *domain | ||
117 | ProductGroupId: productGroup.ProductGroupId, | 119 | ProductGroupId: productGroup.ProductGroupId, |
118 | }), | 120 | }), |
119 | } | 121 | } |
122 | + newAttendance.WorkTimeBefore = newAttendance.ComputeWorkTimeBefore() | ||
120 | var attendanceRepository domain.ProductAttendanceRecordRepository | 123 | var attendanceRepository domain.ProductAttendanceRecordRepository |
121 | 124 | ||
122 | attendanceRepository, _, _ = factory.FastPgAttendance(transactionContext, 0) | 125 | attendanceRepository, _, _ = factory.FastPgAttendance(transactionContext, 0) |
@@ -310,6 +313,74 @@ func (attendanceService *AttendanceService) SearchAttendance(operateInfo *domain | @@ -310,6 +313,74 @@ func (attendanceService *AttendanceService) SearchAttendance(operateInfo *domain | ||
310 | return count, result, nil | 313 | return count, result, nil |
311 | } | 314 | } |
312 | 315 | ||
316 | +// 员工工时统计 | ||
317 | +func (attendanceService *AttendanceService) SearchEmployeeAttendanceStatics(operateInfo *domain.OperateInfo, cmd *query.SearchEmployeeAttendanceQuery) (int64, interface{}, error) { | ||
318 | + if err := cmd.ValidateQuery(); err != nil { | ||
319 | + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
320 | + } | ||
321 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
322 | + if err != nil { | ||
323 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
324 | + } | ||
325 | + if err := transactionContext.StartTransaction(); err != nil { | ||
326 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
327 | + } | ||
328 | + defer func() { | ||
329 | + transactionContext.RollbackTransaction() | ||
330 | + }() | ||
331 | + var attendanceRepository domain.ProductAttendanceRecordRepository | ||
332 | + attendanceRepository, _, _ = factory.FastPgAttendance(transactionContext, 0) | ||
333 | + | ||
334 | + queryOptions := utils.ObjectToMap(cmd) | ||
335 | + count, attendances, err := attendanceRepository.Find(queryOptions) | ||
336 | + if err != nil { | ||
337 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
338 | + } | ||
339 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
340 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
341 | + } | ||
342 | + var result = make([]*dto.EmployeeAttendanceRecordDto, 0) | ||
343 | + for i := range attendances { | ||
344 | + newItem := &dto.EmployeeAttendanceRecordDto{} | ||
345 | + result = append(result, newItem.LoadDto(attendances[i], operateInfo.OrgId)) | ||
346 | + } | ||
347 | + return count, result, nil | ||
348 | +} | ||
349 | + | ||
350 | +// 车间工时统计 | ||
351 | +func (attendanceService *AttendanceService) SearchWorkshopWorkTimeStatics(operateInfo *domain.OperateInfo, cmd *query.SearchEmployeeAttendanceQuery) (int64, interface{}, error) { | ||
352 | + if err := cmd.ValidateQuery(); err != nil { | ||
353 | + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
354 | + } | ||
355 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
356 | + if err != nil { | ||
357 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
358 | + } | ||
359 | + if err := transactionContext.StartTransaction(); err != nil { | ||
360 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
361 | + } | ||
362 | + defer func() { | ||
363 | + transactionContext.RollbackTransaction() | ||
364 | + }() | ||
365 | + var attendanceRepository domain.WorkshopWorkTimeRecordRepository | ||
366 | + attendanceRepository, _, _ = factory.FastPgWorkshopWorkTimeRecord(transactionContext, 0) | ||
367 | + | ||
368 | + queryOptions := utils.ObjectToMap(cmd) | ||
369 | + count, attendances, err := attendanceRepository.Find(queryOptions) | ||
370 | + if err != nil { | ||
371 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
372 | + } | ||
373 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
374 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
375 | + } | ||
376 | + var result = make([]*dto.WorkshopWorkTimeRecordDto, 0) | ||
377 | + for i := range attendances { | ||
378 | + newItem := &dto.WorkshopWorkTimeRecordDto{} | ||
379 | + result = append(result, newItem.LoadDto(attendances[i], operateInfo.OrgId)) | ||
380 | + } | ||
381 | + return count, result, nil | ||
382 | +} | ||
383 | + | ||
313 | func NewAttendanceService(options map[string]interface{}) *AttendanceService { | 384 | func NewAttendanceService(options map[string]interface{}) *AttendanceService { |
314 | newAttendanceService := &AttendanceService{} | 385 | newAttendanceService := &AttendanceService{} |
315 | return newAttendanceService | 386 | return newAttendanceService |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/linmadan/egglib-go/core/application" | ||
5 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/attendance/command" | ||
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/infrastructure/domainService" | ||
10 | +) | ||
11 | + | ||
12 | +func (attendanceService *AttendanceService) WorkerAttendanceReport(cmd *command.WorkerAttendanceReportCommand) (interface{}, error) { | ||
13 | + if err := cmd.ValidateCommand(); err != nil { | ||
14 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
15 | + } | ||
16 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
17 | + if err != nil { | ||
18 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
19 | + } | ||
20 | + if err := transactionContext.StartTransaction(); err != nil { | ||
21 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
22 | + } | ||
23 | + defer func() { | ||
24 | + transactionContext.RollbackTransaction() | ||
25 | + }() | ||
26 | + | ||
27 | + //svr, _ := domainService.NewPGWorkshopWorkTimeStaticService(transactionContext.(*pgTransaction.TransactionContext)) | ||
28 | + //if _, err := svr.WorkshopWorkTimeStatic(cmd.ProductAttendanceRecord); err != nil { | ||
29 | + // log.Logger.Error(err.Error()) | ||
30 | + // return nil, err | ||
31 | + //} | ||
32 | + attendanceReportService, _ := domainService.NewPGWorkerAttendanceReportService(transactionContext.(*pgTransaction.TransactionContext)) | ||
33 | + if _, err := attendanceReportService.Report(constant.MANUFACTURE_DEFAULT_COMPANYID, constant.MANUFACTURE_DEFAULT_COMPANYID, cmd.DeviceZkTeco); err != nil { | ||
34 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
35 | + } | ||
36 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
37 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
38 | + } | ||
39 | + return struct{}{}, nil | ||
40 | +} |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/linmadan/egglib-go/core/application" | ||
5 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/attendance/command" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
10 | +) | ||
11 | + | ||
12 | +// 审核工时 | ||
13 | +func (attendanceService *AttendanceService) WorkshopWorkTimeRecordStatics(cmd *command.WorkshopWorkTimeRecordStaticsCommand) (interface{}, error) { | ||
14 | + if err := cmd.ValidateCommand(); err != nil { | ||
15 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
16 | + } | ||
17 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
18 | + if err != nil { | ||
19 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
20 | + } | ||
21 | + if err := transactionContext.StartTransaction(); err != nil { | ||
22 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
23 | + } | ||
24 | + defer func() { | ||
25 | + transactionContext.RollbackTransaction() | ||
26 | + }() | ||
27 | + | ||
28 | + svr, _ := domainService.NewPGWorkshopWorkTimeStaticService(transactionContext.(*pgTransaction.TransactionContext)) | ||
29 | + if _, err := svr.WorkshopWorkTimeStatic(cmd.ProductAttendanceRecord); err != nil { | ||
30 | + log.Logger.Error(err.Error()) | ||
31 | + return nil, err | ||
32 | + } | ||
33 | + | ||
34 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
35 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
36 | + } | ||
37 | + return struct{}{}, nil | ||
38 | +} |
@@ -36,6 +36,15 @@ func (crontabService *CrontabService) initTask() { | @@ -36,6 +36,15 @@ func (crontabService *CrontabService) initTask() { | ||
36 | return srv.PullPrdMoNewest() | 36 | return srv.PullPrdMoNewest() |
37 | }) | 37 | }) |
38 | task.AddTask("PullPrdMoK3cloud", PullPrdMoK3cloud) | 38 | task.AddTask("PullPrdMoK3cloud", PullPrdMoK3cloud) |
39 | + | ||
40 | + autoApproveAttendanceRecord := task.NewTask("autoApproveAttendanceRecord", "0 */2 * * * *", AutoApproveProductAttendanceRecord) | ||
41 | + task.AddTask("autoApproveAttendanceRecord", autoApproveAttendanceRecord) | ||
42 | + | ||
43 | + autoApproveRecord := task.NewTask("autoApproveRecord", "0 */2 * * * *", AutoApproveProductRecord) | ||
44 | + task.AddTask("autoApproveRecord", autoApproveRecord) | ||
45 | + | ||
46 | + autoFlushDeviceDailyRunningRecord := task.NewTask("autoFlushDeviceDailyRunningRecord", "0 */1 * * * *", AutoFlushDeviceDailyRunningRecord) | ||
47 | + task.AddTask("autoFlushDeviceDailyRunningRecord", autoFlushDeviceDailyRunningRecord) | ||
39 | } | 48 | } |
40 | 49 | ||
41 | func (crontabService *CrontabService) StartCrontabTask() { | 50 | func (crontabService *CrontabService) StartCrontabTask() { |
1 | +package crontab | ||
2 | + | ||
3 | +import ( | ||
4 | + "context" | ||
5 | + "fmt" | ||
6 | + pgTransaction "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/domain" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/dao" | ||
10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
11 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
12 | +) | ||
13 | + | ||
14 | +// 定时审核生产考勤记录 | ||
15 | +func AutoApproveProductAttendanceRecord(ctx context.Context) error { | ||
16 | + defer func() { | ||
17 | + if r := recover(); r != nil { | ||
18 | + log.Logger.Error(fmt.Sprintf("%v", r)) | ||
19 | + } | ||
20 | + }() | ||
21 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
22 | + if err != nil { | ||
23 | + return err | ||
24 | + } | ||
25 | + if err := transactionContext.StartTransaction(); err != nil { | ||
26 | + return err | ||
27 | + } | ||
28 | + defer func() { | ||
29 | + if err != nil { | ||
30 | + log.Logger.Error("【定时审核生产考勤记录】 失败:" + err.Error()) | ||
31 | + } | ||
32 | + transactionContext.RollbackTransaction() | ||
33 | + }() | ||
34 | + | ||
35 | + attendanceRecordDao, _ := dao.NewAttendanceRecordDao(transactionContext.(*pgTransaction.TransactionContext)) | ||
36 | + var records []*domain.ProductAttendanceRecord | ||
37 | + _, records, err = attendanceRecordDao.RecentUnApprovedAttendanceRecord(24, 2) | ||
38 | + if err != nil { | ||
39 | + return err | ||
40 | + } | ||
41 | + | ||
42 | + approveAttendanceRecordsService, _ := domainService.NewPGApproveAttendanceRecordsService(transactionContext.(*pgTransaction.TransactionContext)) | ||
43 | + | ||
44 | + if _, err = approveAttendanceRecordsService.BatchApproveAttendanceRecords(nil, records, 0, 0, domain.AttendanceAutoApproved); err != nil { | ||
45 | + return err | ||
46 | + } | ||
47 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
48 | + return err | ||
49 | + } | ||
50 | + return nil | ||
51 | +} |
1 | +package crontab | ||
2 | + | ||
3 | +import ( | ||
4 | + "context" | ||
5 | + "fmt" | ||
6 | + pgTransaction "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/domain" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/dao" | ||
10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
11 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
12 | +) | ||
13 | + | ||
14 | +// 定时审核生产记录 | ||
15 | +func AutoApproveProductRecord(ctx context.Context) error { | ||
16 | + defer func() { | ||
17 | + if r := recover(); r != nil { | ||
18 | + log.Logger.Error(fmt.Sprintf("%v", r)) | ||
19 | + } | ||
20 | + }() | ||
21 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
22 | + if err != nil { | ||
23 | + return err | ||
24 | + } | ||
25 | + if err := transactionContext.StartTransaction(); err != nil { | ||
26 | + return err | ||
27 | + } | ||
28 | + defer func() { | ||
29 | + if err != nil { | ||
30 | + log.Logger.Error("【定时审核生产考勤记录】 失败:" + err.Error()) | ||
31 | + } | ||
32 | + transactionContext.RollbackTransaction() | ||
33 | + }() | ||
34 | + | ||
35 | + attendanceRecordDao, _ := dao.NewProductRecordDao(transactionContext.(*pgTransaction.TransactionContext)) | ||
36 | + var records []*domain.ProductRecord | ||
37 | + _, records, err = attendanceRecordDao.RecentUnApprovedProductRecord(24, 2, domain.RecordTypeSecondLevelWeigh) | ||
38 | + if err != nil { | ||
39 | + return err | ||
40 | + } | ||
41 | + | ||
42 | + approveAttendanceRecordsService, _ := domainService.NewPGProductRecordService(transactionContext.(*pgTransaction.TransactionContext)) | ||
43 | + | ||
44 | + if _, err = approveAttendanceRecordsService.BatchApprove(records, 0, 0, domain.AttendanceAutoApproved); err != nil { | ||
45 | + return err | ||
46 | + } | ||
47 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
48 | + return err | ||
49 | + } | ||
50 | + return nil | ||
51 | +} |
1 | +package crontab | ||
2 | + | ||
3 | +import ( | ||
4 | + "context" | ||
5 | + "fmt" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
9 | + "time" | ||
10 | +) | ||
11 | + | ||
12 | +// 定时刷新设备每日运行记录 | ||
13 | +func AutoFlushDeviceDailyRunningRecord(ctx context.Context) error { | ||
14 | + defer func() { | ||
15 | + if r := recover(); r != nil { | ||
16 | + log.Logger.Error(fmt.Sprintf("%v", r)) | ||
17 | + } | ||
18 | + }() | ||
19 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
20 | + if err != nil { | ||
21 | + return err | ||
22 | + } | ||
23 | + if err := transactionContext.StartTransaction(); err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + defer func() { | ||
27 | + if err != nil { | ||
28 | + log.Logger.Error("【定时刷新设备每日运行记录】 失败:" + err.Error()) | ||
29 | + } | ||
30 | + transactionContext.RollbackTransaction() | ||
31 | + }() | ||
32 | + | ||
33 | + log.Logger.Debug("【定时刷新设备每日运行记录】 启动") | ||
34 | + deviceDailyRunningRecordRepository, _, _ := factory.FastPgDeviceDailyRunningRecord(transactionContext, 0) | ||
35 | + // 获取redis里当天的记录 | ||
36 | + span := time.Duration(20) | ||
37 | + t := time.Now().Add(-time.Minute * span) | ||
38 | + records, err := redis.GetDeviceDailyAllRecord(t) | ||
39 | + if err != nil { | ||
40 | + log.Logger.Error(err.Error()) | ||
41 | + return err | ||
42 | + } | ||
43 | + | ||
44 | + for _, v := range records { | ||
45 | + if v.UpdatedAt.Add(time.Minute * 5).Before(time.Now()) { | ||
46 | + log.Logger.Debug(fmt.Sprintf("【定时刷新设备每日运行记录】 跳过记录 %v 最后更新时间:%v", v, v.UpdatedAt)) | ||
47 | + continue | ||
48 | + } | ||
49 | + | ||
50 | + // 更新设备效率 OEE = tu * pu * qu | ||
51 | + | ||
52 | + if _, err := deviceDailyRunningRecordRepository.Save(v); err != nil { | ||
53 | + log.Logger.Error(err.Error()) | ||
54 | + continue | ||
55 | + } else { | ||
56 | + log.Logger.Debug(fmt.Sprintf("【定时刷新设备每日运行记录】 刷新记录 %v", v)) | ||
57 | + } | ||
58 | + } | ||
59 | + | ||
60 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
61 | + return err | ||
62 | + } | ||
63 | + return nil | ||
64 | +} |
@@ -22,11 +22,11 @@ type CreateDeviceCommand struct { | @@ -22,11 +22,11 @@ type CreateDeviceCommand struct { | ||
22 | // 设备类型 | 22 | // 设备类型 |
23 | DeviceType string `cname:"设备类型" json:"deviceType" valid:"Required"` | 23 | DeviceType string `cname:"设备类型" json:"deviceType" valid:"Required"` |
24 | // 车间ID | 24 | // 车间ID |
25 | - WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` | 25 | + WorkshopId int `cname:"车间ID" json:"workshopId"` |
26 | // 生产线ID | 26 | // 生产线ID |
27 | - LineId int `cname:"生产线ID" json:"lineId" valid:"Required"` | 27 | + LineId int `cname:"生产线ID" json:"lineId"` |
28 | // 工段ID | 28 | // 工段ID |
29 | - SectionId int `cname:"工段ID" json:"sectionId" valid:"Required"` | 29 | + SectionId int `cname:"工段ID" json:"sectionId"` |
30 | // 品牌 | 30 | // 品牌 |
31 | Brand string `cname:"品牌" json:"brand"` | 31 | Brand string `cname:"品牌" json:"brand"` |
32 | // 设备状态 1:正常 2:封存 3:报废 | 32 | // 设备状态 1:正常 2:封存 3:报废 |
@@ -20,13 +20,13 @@ type UpdateDeviceCommand struct { | @@ -20,13 +20,13 @@ type UpdateDeviceCommand struct { | ||
20 | // 设备类型 | 20 | // 设备类型 |
21 | DeviceType string `cname:"设备类型" json:"deviceType" valid:"Required"` | 21 | DeviceType string `cname:"设备类型" json:"deviceType" valid:"Required"` |
22 | // 车间ID | 22 | // 车间ID |
23 | - WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` | 23 | + WorkshopId int `cname:"车间ID" json:"workshopId"` |
24 | // 生产线ID | 24 | // 生产线ID |
25 | - LineId int `cname:"生产线ID" json:"lineId" valid:"Required"` | 25 | + LineId int `cname:"生产线ID" json:"lineId" ` |
26 | // 工段ID | 26 | // 工段ID |
27 | - SectionId int `cname:"工段ID" json:"sectionId" valid:"Required"` | 27 | + SectionId int `cname:"工段ID" json:"sectionId"` |
28 | // 品牌 | 28 | // 品牌 |
29 | - Brand string `cname:"品牌" json:"brand" valid:"Required"` | 29 | + Brand string `cname:"品牌" json:"brand"` |
30 | // 设备状态 1:正常 2:封存 3:报废 | 30 | // 设备状态 1:正常 2:封存 3:报废 |
31 | DeviceStatus int `cname:"设备状态 1:正常 2:封存 3:报废" json:"deviceStatus" valid:"Required"` | 31 | DeviceStatus int `cname:"设备状态 1:正常 2:封存 3:报废" json:"deviceStatus" valid:"Required"` |
32 | // 风险等级 1:高 2:中 3:低 | 32 | // 风险等级 1:高 2:中 3:低 |
1 | package dto | 1 | package dto |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "fmt" | ||
4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 5 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
5 | ) | 6 | ) |
6 | 7 | ||
@@ -24,7 +25,7 @@ type DeviceDto struct { | @@ -24,7 +25,7 @@ type DeviceDto struct { | ||
24 | // 所属位置 | 25 | // 所属位置 |
25 | *domain.WorkStation | 26 | *domain.WorkStation |
26 | // 生产单个产品的时间(单位:秒) | 27 | // 生产单个产品的时间(单位:秒) |
27 | - UnitProductionSecTime int `json:"unitProductionSecTime"` | 28 | + UnitProductionSecTime string `json:"unitProductionSecTime"` |
28 | 29 | ||
29 | // 组织名称 | 30 | // 组织名称 |
30 | OrgName string `json:"orgName"` | 31 | OrgName string `json:"orgName"` |
@@ -36,6 +37,7 @@ func (d *DeviceDto) LoadDto(m *domain.Device, orgId int) *DeviceDto { | @@ -36,6 +37,7 @@ func (d *DeviceDto) LoadDto(m *domain.Device, orgId int) *DeviceDto { | ||
36 | d.DeviceId = m.DeviceId | 37 | d.DeviceId = m.DeviceId |
37 | d.DeviceCode = m.DeviceCode | 38 | d.DeviceCode = m.DeviceCode |
38 | d.DeviceName = m.DeviceName | 39 | d.DeviceName = m.DeviceName |
40 | + d.DeviceModel = m.DeviceModel | ||
39 | d.DeviceType = m.DeviceType | 41 | d.DeviceType = m.DeviceType |
40 | d.Brand = m.Brand | 42 | d.Brand = m.Brand |
41 | d.DeviceStatus = m.DeviceStatus | 43 | d.DeviceStatus = m.DeviceStatus |
@@ -46,7 +48,9 @@ func (d *DeviceDto) LoadDto(m *domain.Device, orgId int) *DeviceDto { | @@ -46,7 +48,9 @@ func (d *DeviceDto) LoadDto(m *domain.Device, orgId int) *DeviceDto { | ||
46 | d.OrgName = m.Ext.OrgName | 48 | d.OrgName = m.Ext.OrgName |
47 | } | 49 | } |
48 | if m.Ext != nil && m.Ext.DeviceExt != nil { | 50 | if m.Ext != nil && m.Ext.DeviceExt != nil { |
49 | - d.UnitProductionSecTime = m.Ext.DeviceExt.UnitProductionSecTime | 51 | + if m.Ext.DeviceExt.UnitProductionSecTime > 0 { |
52 | + d.UnitProductionSecTime = fmt.Sprintf("%v", m.Ext.DeviceExt.UnitProductionSecTime) | ||
53 | + } | ||
50 | } | 54 | } |
51 | return d | 55 | return d |
52 | } | 56 | } |
@@ -38,9 +38,12 @@ func (deviceService *DeviceService) CreateDevice(operateInfo *domain.OperateInfo | @@ -38,9 +38,12 @@ func (deviceService *DeviceService) CreateDevice(operateInfo *domain.OperateInfo | ||
38 | }() | 38 | }() |
39 | 39 | ||
40 | var workStation *domain.WorkStation | 40 | var workStation *domain.WorkStation |
41 | - _, workStation, err = factory.FastPgWorkstation(transactionContext, cmd.WorkshopId, cmd.LineId, cmd.SectionId) | ||
42 | - if err != nil { | ||
43 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 41 | + if cmd.WorkshopId != 0 { |
42 | + _, workshop, err := factory.FastPgWorkshop(transactionContext, cmd.WorkshopId) //, cmd.LineId, cmd.SectionId | ||
43 | + if err != nil { | ||
44 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
45 | + } | ||
46 | + workStation, _ = workshop.FindWorkStationOrNil(cmd.WorkshopId, cmd.LineId, cmd.SectionId) | ||
44 | } | 47 | } |
45 | 48 | ||
46 | var userService = domainService.NewUserService() | 49 | var userService = domainService.NewUserService() |
@@ -272,9 +275,16 @@ func (deviceService *DeviceService) UpdateDevice(cmd *command.UpdateDeviceComman | @@ -272,9 +275,16 @@ func (deviceService *DeviceService) UpdateDevice(cmd *command.UpdateDeviceComman | ||
272 | } | 275 | } |
273 | 276 | ||
274 | var workStation *domain.WorkStation | 277 | var workStation *domain.WorkStation |
275 | - _, workStation, err = factory.FastPgWorkstation(transactionContext, cmd.WorkshopId, cmd.LineId, cmd.SectionId, factory.WithSetPrincipal()) | ||
276 | - if err != nil { | ||
277 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 278 | + //_, workStation, err = factory.FastPgWorkstation(transactionContext, cmd.WorkshopId, cmd.LineId, cmd.SectionId, factory.WithSetPrincipal()) |
279 | + //if err != nil { | ||
280 | + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
281 | + //} | ||
282 | + if cmd.WorkshopId != 0 { | ||
283 | + _, workshop, err := factory.FastPgWorkshop(transactionContext, cmd.WorkshopId) //, cmd.LineId, cmd.SectionId | ||
284 | + if err != nil { | ||
285 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
286 | + } | ||
287 | + workStation, _ = workshop.FindWorkStationOrNil(cmd.WorkshopId, cmd.LineId, cmd.SectionId) | ||
278 | } | 288 | } |
279 | device.WorkStation = workStation | 289 | device.WorkStation = workStation |
280 | 290 | ||
@@ -340,7 +350,9 @@ func (deviceService *DeviceService) SearchDevice(operateInfo *domain.OperateInfo | @@ -340,7 +350,9 @@ func (deviceService *DeviceService) SearchDevice(operateInfo *domain.OperateInfo | ||
340 | for i := range devices { | 350 | for i := range devices { |
341 | item := devices[i] | 351 | item := devices[i] |
342 | newJobDto := &dto.DeviceDto{} | 352 | newJobDto := &dto.DeviceDto{} |
343 | - item.WorkStation = workshops.FindWorkStation(item.WorkStation.WorkshopId, item.WorkStation.LineId, item.WorkStation.SectionId) | 353 | + if item.WorkStation != nil && item.WorkStation.WorkshopId > 0 { |
354 | + newJobDto.WorkStation = workshops.FindWorkStationOrNil(item.WorkStation.WorkshopId, item.WorkStation.LineId, item.WorkStation.SectionId) | ||
355 | + } | ||
344 | newJobDto.LoadDto(item, operateInfo.OrgId) | 356 | newJobDto.LoadDto(item, operateInfo.OrgId) |
345 | result = append(result, newJobDto) | 357 | result = append(result, newJobDto) |
346 | } | 358 | } |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type CreateDeviceCollectionCommand struct { | ||
12 | + // 数据采集ID | ||
13 | + DeviceCollectionId int64 `cname:"数据采集ID" json:"deviceCollectionId,string" valid:"Required"` | ||
14 | + // 车间名 | ||
15 | + WorkShopName string `cname:"车间名" json:"workShopName" valid:"Required"` | ||
16 | + // 启动状态 1-启动 0-停止 | ||
17 | + StartupStatus int64 `cname:"启动状态 1-启动 0-停止" json:"startupStatus,string" valid:"Required"` | ||
18 | + // 设备名 | ||
19 | + DeviceSn string `cname:"设备名" json:"deviceSn" valid:"Required"` | ||
20 | + // 通讯状态 1-通讯正常 0-设备未上电或与采集端通讯故障 | ||
21 | + ComStatus int64 `cname:"通讯状态 1-通讯正常 0-设备未上电或与采集端通讯故障" json:"comStatus,string" valid:"Required"` | ||
22 | + // 设备数据值 | ||
23 | + Values string `cname:"设备数据值" json:"values" valid:"Required"` | ||
24 | +} | ||
25 | + | ||
26 | +func (createDeviceCollectionCommand *CreateDeviceCollectionCommand) Valid(validation *validation.Validation) { | ||
27 | + validation.SetError("CustomValid", "未实现的自定义认证") | ||
28 | +} | ||
29 | + | ||
30 | +func (createDeviceCollectionCommand *CreateDeviceCollectionCommand) ValidateCommand() error { | ||
31 | + valid := validation.Validation{} | ||
32 | + b, err := valid.Valid(createDeviceCollectionCommand) | ||
33 | + if err != nil { | ||
34 | + return err | ||
35 | + } | ||
36 | + if !b { | ||
37 | + elem := reflect.TypeOf(createDeviceCollectionCommand).Elem() | ||
38 | + for _, validErr := range valid.Errors { | ||
39 | + field, isExist := elem.FieldByName(validErr.Field) | ||
40 | + if isExist { | ||
41 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
42 | + } else { | ||
43 | + return fmt.Errorf(validErr.Message) | ||
44 | + } | ||
45 | + } | ||
46 | + } | ||
47 | + return nil | ||
48 | +} |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type RemoveDeviceCollectionCommand struct { | ||
12 | + // 数据采集ID | ||
13 | + DeviceCollectionId int64 `cname:"数据采集ID" json:"deviceCollectionId,string" valid:"Required"` | ||
14 | +} | ||
15 | + | ||
16 | +func (removeDeviceCollectionCommand *RemoveDeviceCollectionCommand) Valid(validation *validation.Validation) { | ||
17 | + validation.SetError("CustomValid", "未实现的自定义认证") | ||
18 | +} | ||
19 | + | ||
20 | +func (removeDeviceCollectionCommand *RemoveDeviceCollectionCommand) ValidateCommand() error { | ||
21 | + valid := validation.Validation{} | ||
22 | + b, err := valid.Valid(removeDeviceCollectionCommand) | ||
23 | + if err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + if !b { | ||
27 | + elem := reflect.TypeOf(removeDeviceCollectionCommand).Elem() | ||
28 | + for _, validErr := range valid.Errors { | ||
29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
30 | + if isExist { | ||
31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
32 | + } else { | ||
33 | + return fmt.Errorf(validErr.Message) | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + return nil | ||
38 | +} |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type UpdateDeviceCollectionCommand struct { | ||
12 | + // 数据采集ID | ||
13 | + DeviceCollectionId int64 `cname:"数据采集ID" json:"deviceCollectionId,string" valid:"Required"` | ||
14 | + // 车间名 | ||
15 | + WorkShopName string `cname:"车间名" json:"workShopName" valid:"Required"` | ||
16 | + // 启动状态 1-启动 0-停止 | ||
17 | + StartupStatus int64 `cname:"启动状态 1-启动 0-停止" json:"startupStatus,string" valid:"Required"` | ||
18 | + // 设备名 | ||
19 | + DeviceSn string `cname:"设备名" json:"deviceSn" valid:"Required"` | ||
20 | + // 通讯状态 1-通讯正常 0-设备未上电或与采集端通讯故障 | ||
21 | + ComStatus int64 `cname:"通讯状态 1-通讯正常 0-设备未上电或与采集端通讯故障" json:"comStatus,string" valid:"Required"` | ||
22 | + // 设备数据值 | ||
23 | + Values string `cname:"设备数据值" json:"values" valid:"Required"` | ||
24 | +} | ||
25 | + | ||
26 | +func (updateDeviceCollectionCommand *UpdateDeviceCollectionCommand) Valid(validation *validation.Validation) { | ||
27 | + validation.SetError("CustomValid", "未实现的自定义认证") | ||
28 | +} | ||
29 | + | ||
30 | +func (updateDeviceCollectionCommand *UpdateDeviceCollectionCommand) ValidateCommand() error { | ||
31 | + valid := validation.Validation{} | ||
32 | + b, err := valid.Valid(updateDeviceCollectionCommand) | ||
33 | + if err != nil { | ||
34 | + return err | ||
35 | + } | ||
36 | + if !b { | ||
37 | + elem := reflect.TypeOf(updateDeviceCollectionCommand).Elem() | ||
38 | + for _, validErr := range valid.Errors { | ||
39 | + field, isExist := elem.FieldByName(validErr.Field) | ||
40 | + if isExist { | ||
41 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
42 | + } else { | ||
43 | + return fmt.Errorf(validErr.Message) | ||
44 | + } | ||
45 | + } | ||
46 | + } | ||
47 | + return nil | ||
48 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type GetDeviceCollectionQuery struct { | ||
12 | + // 数据采集ID | ||
13 | + DeviceCollectionId int64 `cname:"数据采集ID" json:"deviceCollectionId,string" valid:"Required"` | ||
14 | +} | ||
15 | + | ||
16 | +func (getDeviceCollectionQuery *GetDeviceCollectionQuery) Valid(validation *validation.Validation) { | ||
17 | + validation.SetError("CustomValid", "未实现的自定义认证") | ||
18 | +} | ||
19 | + | ||
20 | +func (getDeviceCollectionQuery *GetDeviceCollectionQuery) ValidateQuery() error { | ||
21 | + valid := validation.Validation{} | ||
22 | + b, err := valid.Valid(getDeviceCollectionQuery) | ||
23 | + if err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + if !b { | ||
27 | + elem := reflect.TypeOf(getDeviceCollectionQuery).Elem() | ||
28 | + for _, validErr := range valid.Errors { | ||
29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
30 | + if isExist { | ||
31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
32 | + } else { | ||
33 | + return fmt.Errorf(validErr.Message) | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + return nil | ||
38 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type ListDeviceCollectionQuery struct { | ||
12 | + // 查询偏离量 | ||
13 | + Offset int `cname:"查询偏离量" json:"offset" valid:"Required"` | ||
14 | + // 查询限制 | ||
15 | + Limit int `cname:"查询限制" json:"limit" valid:"Required"` | ||
16 | +} | ||
17 | + | ||
18 | +func (listDeviceCollectionQuery *ListDeviceCollectionQuery) Valid(validation *validation.Validation) { | ||
19 | + validation.SetError("CustomValid", "未实现的自定义认证") | ||
20 | +} | ||
21 | + | ||
22 | +func (listDeviceCollectionQuery *ListDeviceCollectionQuery) ValidateQuery() error { | ||
23 | + valid := validation.Validation{} | ||
24 | + b, err := valid.Valid(listDeviceCollectionQuery) | ||
25 | + if err != nil { | ||
26 | + return err | ||
27 | + } | ||
28 | + if !b { | ||
29 | + elem := reflect.TypeOf(listDeviceCollectionQuery).Elem() | ||
30 | + for _, validErr := range valid.Errors { | ||
31 | + field, isExist := elem.FieldByName(validErr.Field) | ||
32 | + if isExist { | ||
33 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
34 | + } else { | ||
35 | + return fmt.Errorf(validErr.Message) | ||
36 | + } | ||
37 | + } | ||
38 | + } | ||
39 | + return nil | ||
40 | +} |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/linmadan/egglib-go/core/application" | ||
6 | + "github.com/linmadan/egglib-go/utils/tool_funs" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/deviceCollection/command" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/deviceCollection/query" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
11 | +) | ||
12 | + | ||
13 | +type DeviceCollectionService struct { | ||
14 | +} | ||
15 | + | ||
16 | +// 创建 | ||
17 | +func (deviceCollectionService *DeviceCollectionService) CreateDeviceCollection(createDeviceCollectionCommand *command.CreateDeviceCollectionCommand) (interface{}, error) { | ||
18 | + if err := createDeviceCollectionCommand.ValidateCommand(); err != nil { | ||
19 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
20 | + } | ||
21 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
22 | + if err != nil { | ||
23 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
24 | + } | ||
25 | + if err := transactionContext.StartTransaction(); err != nil { | ||
26 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
27 | + } | ||
28 | + defer func() { | ||
29 | + transactionContext.RollbackTransaction() | ||
30 | + }() | ||
31 | + newDeviceCollection := &domain.DeviceCollection{ | ||
32 | + DeviceCollectionId: createDeviceCollectionCommand.DeviceCollectionId, | ||
33 | + WorkShopName: createDeviceCollectionCommand.WorkShopName, | ||
34 | + StartupStatus: createDeviceCollectionCommand.StartupStatus, | ||
35 | + DeviceSn: createDeviceCollectionCommand.DeviceSn, | ||
36 | + ComStatus: createDeviceCollectionCommand.ComStatus, | ||
37 | + Values: createDeviceCollectionCommand.Values, | ||
38 | + } | ||
39 | + var deviceCollectionRepository domain.DeviceCollectionRepository | ||
40 | + if value, err := factory.CreateDeviceCollectionRepository(map[string]interface{}{ | ||
41 | + "transactionContext": transactionContext, | ||
42 | + }); err != nil { | ||
43 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
44 | + } else { | ||
45 | + deviceCollectionRepository = value | ||
46 | + } | ||
47 | + if deviceCollection, err := deviceCollectionRepository.Save(newDeviceCollection); err != nil { | ||
48 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
49 | + } else { | ||
50 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
51 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
52 | + } | ||
53 | + return deviceCollection, nil | ||
54 | + } | ||
55 | +} | ||
56 | + | ||
57 | +// 返回 | ||
58 | +func (deviceCollectionService *DeviceCollectionService) GetDeviceCollection(getDeviceCollectionQuery *query.GetDeviceCollectionQuery) (interface{}, error) { | ||
59 | + if err := getDeviceCollectionQuery.ValidateQuery(); err != nil { | ||
60 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
61 | + } | ||
62 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
63 | + if err != nil { | ||
64 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
65 | + } | ||
66 | + if err := transactionContext.StartTransaction(); err != nil { | ||
67 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
68 | + } | ||
69 | + defer func() { | ||
70 | + transactionContext.RollbackTransaction() | ||
71 | + }() | ||
72 | + var deviceCollectionRepository domain.DeviceCollectionRepository | ||
73 | + if value, err := factory.CreateDeviceCollectionRepository(map[string]interface{}{ | ||
74 | + "transactionContext": transactionContext, | ||
75 | + }); err != nil { | ||
76 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
77 | + } else { | ||
78 | + deviceCollectionRepository = value | ||
79 | + } | ||
80 | + deviceCollection, err := deviceCollectionRepository.FindOne(map[string]interface{}{"deviceCollectionId": getDeviceCollectionQuery.DeviceCollectionId}) | ||
81 | + if err != nil { | ||
82 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
83 | + } | ||
84 | + if deviceCollection == nil { | ||
85 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getDeviceCollectionQuery.DeviceCollectionId))) | ||
86 | + } else { | ||
87 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
88 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
89 | + } | ||
90 | + return deviceCollection, nil | ||
91 | + } | ||
92 | +} | ||
93 | + | ||
94 | +// 返回列表 | ||
95 | +func (deviceCollectionService *DeviceCollectionService) ListDeviceCollection(listDeviceCollectionQuery *query.ListDeviceCollectionQuery) (interface{}, error) { | ||
96 | + if err := listDeviceCollectionQuery.ValidateQuery(); err != nil { | ||
97 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
98 | + } | ||
99 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
100 | + if err != nil { | ||
101 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
102 | + } | ||
103 | + if err := transactionContext.StartTransaction(); err != nil { | ||
104 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
105 | + } | ||
106 | + defer func() { | ||
107 | + transactionContext.RollbackTransaction() | ||
108 | + }() | ||
109 | + var deviceCollectionRepository domain.DeviceCollectionRepository | ||
110 | + if value, err := factory.CreateDeviceCollectionRepository(map[string]interface{}{ | ||
111 | + "transactionContext": transactionContext, | ||
112 | + }); err != nil { | ||
113 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
114 | + } else { | ||
115 | + deviceCollectionRepository = value | ||
116 | + } | ||
117 | + if count, deviceCollections, err := deviceCollectionRepository.Find(tool_funs.SimpleStructToMap(listDeviceCollectionQuery)); err != nil { | ||
118 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
119 | + } else { | ||
120 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
121 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
122 | + } | ||
123 | + return map[string]interface{}{ | ||
124 | + "count": count, | ||
125 | + "deviceCollections": deviceCollections, | ||
126 | + }, nil | ||
127 | + } | ||
128 | +} | ||
129 | + | ||
130 | +// 移除 | ||
131 | +func (deviceCollectionService *DeviceCollectionService) RemoveDeviceCollection(removeDeviceCollectionCommand *command.RemoveDeviceCollectionCommand) (interface{}, error) { | ||
132 | + if err := removeDeviceCollectionCommand.ValidateCommand(); err != nil { | ||
133 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
134 | + } | ||
135 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
136 | + if err != nil { | ||
137 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
138 | + } | ||
139 | + if err := transactionContext.StartTransaction(); err != nil { | ||
140 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
141 | + } | ||
142 | + defer func() { | ||
143 | + transactionContext.RollbackTransaction() | ||
144 | + }() | ||
145 | + var deviceCollectionRepository domain.DeviceCollectionRepository | ||
146 | + if value, err := factory.CreateDeviceCollectionRepository(map[string]interface{}{ | ||
147 | + "transactionContext": transactionContext, | ||
148 | + }); err != nil { | ||
149 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
150 | + } else { | ||
151 | + deviceCollectionRepository = value | ||
152 | + } | ||
153 | + deviceCollection, err := deviceCollectionRepository.FindOne(map[string]interface{}{"deviceCollectionId": removeDeviceCollectionCommand.DeviceCollectionId}) | ||
154 | + if err != nil { | ||
155 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
156 | + } | ||
157 | + if deviceCollection == nil { | ||
158 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeDeviceCollectionCommand.DeviceCollectionId))) | ||
159 | + } | ||
160 | + if deviceCollection, err := deviceCollectionRepository.Remove(deviceCollection); err != nil { | ||
161 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
162 | + } else { | ||
163 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
164 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
165 | + } | ||
166 | + return deviceCollection, nil | ||
167 | + } | ||
168 | +} | ||
169 | + | ||
170 | +// 更新 | ||
171 | +func (deviceCollectionService *DeviceCollectionService) UpdateDeviceCollection(updateDeviceCollectionCommand *command.UpdateDeviceCollectionCommand) (interface{}, error) { | ||
172 | + if err := updateDeviceCollectionCommand.ValidateCommand(); err != nil { | ||
173 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
174 | + } | ||
175 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
176 | + if err != nil { | ||
177 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
178 | + } | ||
179 | + if err := transactionContext.StartTransaction(); err != nil { | ||
180 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
181 | + } | ||
182 | + defer func() { | ||
183 | + transactionContext.RollbackTransaction() | ||
184 | + }() | ||
185 | + var deviceCollectionRepository domain.DeviceCollectionRepository | ||
186 | + if value, err := factory.CreateDeviceCollectionRepository(map[string]interface{}{ | ||
187 | + "transactionContext": transactionContext, | ||
188 | + }); err != nil { | ||
189 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
190 | + } else { | ||
191 | + deviceCollectionRepository = value | ||
192 | + } | ||
193 | + deviceCollection, err := deviceCollectionRepository.FindOne(map[string]interface{}{"deviceCollectionId": updateDeviceCollectionCommand.DeviceCollectionId}) | ||
194 | + if err != nil { | ||
195 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
196 | + } | ||
197 | + if deviceCollection == nil { | ||
198 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateDeviceCollectionCommand.DeviceCollectionId))) | ||
199 | + } | ||
200 | + if err := deviceCollection.Update(tool_funs.SimpleStructToMap(updateDeviceCollectionCommand)); err != nil { | ||
201 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
202 | + } | ||
203 | + if deviceCollection, err := deviceCollectionRepository.Save(deviceCollection); err != nil { | ||
204 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
205 | + } else { | ||
206 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
207 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
208 | + } | ||
209 | + return deviceCollection, nil | ||
210 | + } | ||
211 | +} | ||
212 | + | ||
213 | +func NewDeviceCollectionService(options map[string]interface{}) *DeviceCollectionService { | ||
214 | + newDeviceCollectionService := &DeviceCollectionService{} | ||
215 | + return newDeviceCollectionService | ||
216 | +} |
@@ -140,7 +140,7 @@ func FastPgProductGroup(transactionContext application.TransactionContext, id in | @@ -140,7 +140,7 @@ func FastPgProductGroup(transactionContext application.TransactionContext, id in | ||
140 | rep = value | 140 | rep = value |
141 | } | 141 | } |
142 | if id > 0 { | 142 | if id > 0 { |
143 | - if mod, err = rep.FindOne(map[string]interface{}{"productJobId": id}); err != nil { | 143 | + if mod, err = rep.FindOne(map[string]interface{}{"productGroupId": id}); err != nil { |
144 | if err == domain.ErrorNotFound { | 144 | if err == domain.ErrorNotFound { |
145 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该生产班组不存在") | 145 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该生产班组不存在") |
146 | } | 146 | } |
@@ -169,7 +169,7 @@ func FastPgProduct(transactionContext application.TransactionContext, id int, op | @@ -169,7 +169,7 @@ func FastPgProduct(transactionContext application.TransactionContext, id int, op | ||
169 | rep = value | 169 | rep = value |
170 | } | 170 | } |
171 | if id > 0 { | 171 | if id > 0 { |
172 | - if mod, err = rep.FindOne(map[string]interface{}{"productJobId": id}); err != nil { | 172 | + if mod, err = rep.FindOne(map[string]interface{}{"productId": id}); err != nil { |
173 | if err == domain.ErrorNotFound { | 173 | if err == domain.ErrorNotFound { |
174 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该产品不存在") | 174 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该产品不存在") |
175 | } | 175 | } |
@@ -195,7 +195,7 @@ func FastPgDevice(transactionContext application.TransactionContext, id int, opt | @@ -195,7 +195,7 @@ func FastPgDevice(transactionContext application.TransactionContext, id int, opt | ||
195 | rep = value | 195 | rep = value |
196 | } | 196 | } |
197 | if id > 0 { | 197 | if id > 0 { |
198 | - if mod, err = rep.FindOne(map[string]interface{}{"productJobId": id}); err != nil { | 198 | + if mod, err = rep.FindOne(map[string]interface{}{"deviceId": id}); err != nil { |
199 | if err == domain.ErrorNotFound { | 199 | if err == domain.ErrorNotFound { |
200 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该设备档案不存在") | 200 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该设备档案不存在") |
201 | } | 201 | } |
@@ -221,7 +221,7 @@ func FastPgProductCalendar(transactionContext application.TransactionContext, id | @@ -221,7 +221,7 @@ func FastPgProductCalendar(transactionContext application.TransactionContext, id | ||
221 | rep = value | 221 | rep = value |
222 | } | 222 | } |
223 | if id > 0 { | 223 | if id > 0 { |
224 | - if mod, err = rep.FindOne(map[string]interface{}{"productJobId": id}); err != nil { | 224 | + if mod, err = rep.FindOne(map[string]interface{}{"productCalendar": id}); err != nil { |
225 | if err == domain.ErrorNotFound { | 225 | if err == domain.ErrorNotFound { |
226 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该车间日历不存在") | 226 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该车间日历不存在") |
227 | } | 227 | } |
@@ -247,7 +247,7 @@ func FastPgUnitConversion(transactionContext application.TransactionContext, id | @@ -247,7 +247,7 @@ func FastPgUnitConversion(transactionContext application.TransactionContext, id | ||
247 | rep = value | 247 | rep = value |
248 | } | 248 | } |
249 | if id > 0 { | 249 | if id > 0 { |
250 | - if mod, err = rep.FindOne(map[string]interface{}{"productJobId": id}); err != nil { | 250 | + if mod, err = rep.FindOne(map[string]interface{}{"unitConversionId": id}); err != nil { |
251 | if err == domain.ErrorNotFound { | 251 | if err == domain.ErrorNotFound { |
252 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该单位换算不存在") | 252 | return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该单位换算不存在") |
253 | } | 253 | } |
@@ -283,6 +283,32 @@ func FastPgProductPlan(transactionContext application.TransactionContext, id int | @@ -283,6 +283,32 @@ func FastPgProductPlan(transactionContext application.TransactionContext, id int | ||
283 | return rep, mod, err | 283 | return rep, mod, err |
284 | } | 284 | } |
285 | 285 | ||
286 | +// FastPgProductPlan 快速返回生产计划对象 | ||
287 | +// | ||
288 | +// transactionContext 事务 | ||
289 | +// id 对象唯一标识 | ||
290 | +func FastPgProductPlanDispatchRecord(transactionContext application.TransactionContext, id int, options ...option) (domain.ProductPlanDispatchRecordRepository, *domain.ProductPlanDispatchRecord, error) { | ||
291 | + var rep domain.ProductPlanDispatchRecordRepository | ||
292 | + var mod *domain.ProductPlanDispatchRecord | ||
293 | + var err error | ||
294 | + if value, err := CreateProductPlanDispatchRecordRepository(map[string]interface{}{ | ||
295 | + "transactionContext": transactionContext, | ||
296 | + }); err != nil { | ||
297 | + return nil, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
298 | + } else { | ||
299 | + rep = value | ||
300 | + } | ||
301 | + if id > 0 { | ||
302 | + if mod, err = rep.FindOne(map[string]interface{}{"productPlanDispatchRecordId": id}); err != nil { | ||
303 | + if err == domain.ErrorNotFound { | ||
304 | + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该生产计划调度记录不存在") | ||
305 | + } | ||
306 | + return nil, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
307 | + } | ||
308 | + } | ||
309 | + return rep, mod, err | ||
310 | +} | ||
311 | + | ||
286 | // FastPgAttendance 快速返回考勤记录 | 312 | // FastPgAttendance 快速返回考勤记录 |
287 | // | 313 | // |
288 | // transactionContext 事务 | 314 | // transactionContext 事务 |
@@ -309,6 +335,84 @@ func FastPgAttendance(transactionContext application.TransactionContext, id int, | @@ -309,6 +335,84 @@ func FastPgAttendance(transactionContext application.TransactionContext, id int, | ||
309 | return rep, mod, err | 335 | return rep, mod, err |
310 | } | 336 | } |
311 | 337 | ||
338 | +// FastPgProductRecord 快速返回生产记录 | ||
339 | +// | ||
340 | +// transactionContext 事务 | ||
341 | +// id 对象唯一标识 | ||
342 | +func FastPgProductRecord(transactionContext application.TransactionContext, id int, options ...option) (domain.ProductRecordRepository, *domain.ProductRecord, error) { | ||
343 | + var rep domain.ProductRecordRepository | ||
344 | + var mod *domain.ProductRecord | ||
345 | + var err error | ||
346 | + if value, err := CreateProductRecordRepository(map[string]interface{}{ | ||
347 | + "transactionContext": transactionContext, | ||
348 | + }); err != nil { | ||
349 | + return nil, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
350 | + } else { | ||
351 | + rep = value | ||
352 | + } | ||
353 | + if id > 0 { | ||
354 | + if mod, err = rep.FindOne(map[string]interface{}{"productRecordId": id}); err != nil { | ||
355 | + if err == domain.ErrorNotFound { | ||
356 | + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该记录不存在") | ||
357 | + } | ||
358 | + return nil, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
359 | + } | ||
360 | + } | ||
361 | + return rep, mod, err | ||
362 | +} | ||
363 | + | ||
364 | +// FastPgWorkshopWorkTimeRecord 快速返回生产记录 | ||
365 | +// | ||
366 | +// transactionContext 事务 | ||
367 | +// id 对象唯一标识 | ||
368 | +func FastPgWorkshopWorkTimeRecord(transactionContext application.TransactionContext, id int, options ...option) (domain.WorkshopWorkTimeRecordRepository, *domain.WorkshopWorkTimeRecord, error) { | ||
369 | + var rep domain.WorkshopWorkTimeRecordRepository | ||
370 | + var mod *domain.WorkshopWorkTimeRecord | ||
371 | + var err error | ||
372 | + if value, err := CreateWorkshopWorkTimeRecordRepository(map[string]interface{}{ | ||
373 | + "transactionContext": transactionContext, | ||
374 | + }); err != nil { | ||
375 | + return nil, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
376 | + } else { | ||
377 | + rep = value | ||
378 | + } | ||
379 | + if id > 0 { | ||
380 | + if mod, err = rep.FindOne(map[string]interface{}{"workshopWorkTimeRecordId": id}); err != nil { | ||
381 | + if err == domain.ErrorNotFound { | ||
382 | + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该记录不存在") | ||
383 | + } | ||
384 | + return nil, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
385 | + } | ||
386 | + } | ||
387 | + return rep, mod, err | ||
388 | +} | ||
389 | + | ||
390 | +// FastPgDeviceDailyRunningRecord 快速返回设备每日运行记录 | ||
391 | +// | ||
392 | +// transactionContext 事务 | ||
393 | +// id 对象唯一标识 | ||
394 | +func FastPgDeviceDailyRunningRecord(transactionContext application.TransactionContext, id int, options ...option) (domain.DeviceDailyRunningRecordRepository, *domain.DeviceDailyRunningRecord, error) { | ||
395 | + var rep domain.DeviceDailyRunningRecordRepository | ||
396 | + var mod *domain.DeviceDailyRunningRecord | ||
397 | + var err error | ||
398 | + if value, err := CreateDeviceDailyRunningRecordRepository(map[string]interface{}{ | ||
399 | + "transactionContext": transactionContext, | ||
400 | + }); err != nil { | ||
401 | + return nil, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
402 | + } else { | ||
403 | + rep = value | ||
404 | + } | ||
405 | + if id > 0 { | ||
406 | + if mod, err = rep.FindOne(map[string]interface{}{"deviceDailyRunningRecordId": id}); err != nil { | ||
407 | + if err == domain.ErrorNotFound { | ||
408 | + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该记录不存在") | ||
409 | + } | ||
410 | + return nil, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
411 | + } | ||
412 | + } | ||
413 | + return rep, mod, err | ||
414 | +} | ||
415 | + | ||
312 | /***** 2.配置 *****/ | 416 | /***** 2.配置 *****/ |
313 | 417 | ||
314 | type FastOptions struct { | 418 | type FastOptions struct { |
@@ -85,3 +85,59 @@ func CreateWorkshopRepository(options map[string]interface{}) (domain.WorkshopRe | @@ -85,3 +85,59 @@ func CreateWorkshopRepository(options map[string]interface{}) (domain.WorkshopRe | ||
85 | } | 85 | } |
86 | return repository.NewWorkshopRepository(transactionContext) | 86 | return repository.NewWorkshopRepository(transactionContext) |
87 | } | 87 | } |
88 | + | ||
89 | +func CreateEmployeeProductRecordRepository(options map[string]interface{}) (domain.EmployeeProductRecordRepository, error) { | ||
90 | + var transactionContext *pg.TransactionContext | ||
91 | + if value, ok := options["transactionContext"]; ok { | ||
92 | + transactionContext = value.(*pg.TransactionContext) | ||
93 | + } | ||
94 | + return repository.NewEmployeeProductRecordRepository(transactionContext) | ||
95 | +} | ||
96 | + | ||
97 | +func CreateWorkshopProductRecordRepository(options map[string]interface{}) (domain.WorkshopProductRecordRepository, error) { | ||
98 | + var transactionContext *pg.TransactionContext | ||
99 | + if value, ok := options["transactionContext"]; ok { | ||
100 | + transactionContext = value.(*pg.TransactionContext) | ||
101 | + } | ||
102 | + return repository.NewWorkshopProductRecordRepository(transactionContext) | ||
103 | +} | ||
104 | + | ||
105 | +func CreateWorkshopWorkTimeRecordRepository(options map[string]interface{}) (domain.WorkshopWorkTimeRecordRepository, error) { | ||
106 | + var transactionContext *pg.TransactionContext | ||
107 | + if value, ok := options["transactionContext"]; ok { | ||
108 | + transactionContext = value.(*pg.TransactionContext) | ||
109 | + } | ||
110 | + return repository.NewWorkshopWorkTimeRecordRepository(transactionContext) | ||
111 | +} | ||
112 | + | ||
113 | +func CreateProductPlanDispatchRecordRepository(options map[string]interface{}) (domain.ProductPlanDispatchRecordRepository, error) { | ||
114 | + var transactionContext *pg.TransactionContext | ||
115 | + if value, ok := options["transactionContext"]; ok { | ||
116 | + transactionContext = value.(*pg.TransactionContext) | ||
117 | + } | ||
118 | + return repository.NewProductPlanDispatchRecordRepository(transactionContext) | ||
119 | +} | ||
120 | + | ||
121 | +func CreateDeviceCollectionRepository(options map[string]interface{}) (domain.DeviceCollectionRepository, error) { | ||
122 | + var transactionContext *pg.TransactionContext | ||
123 | + if value, ok := options["transactionContext"]; ok { | ||
124 | + transactionContext = value.(*pg.TransactionContext) | ||
125 | + } | ||
126 | + return repository.NewDeviceCollectionRepository(transactionContext) | ||
127 | +} | ||
128 | + | ||
129 | +func CreateDeviceRunningRecordRepository(options map[string]interface{}) (domain.DeviceRunningRecordRepository, error) { | ||
130 | + var transactionContext *pg.TransactionContext | ||
131 | + if value, ok := options["transactionContext"]; ok { | ||
132 | + transactionContext = value.(*pg.TransactionContext) | ||
133 | + } | ||
134 | + return repository.NewDeviceRunningRecordRepository(transactionContext) | ||
135 | +} | ||
136 | + | ||
137 | +func CreateDeviceDailyRunningRecordRepository(options map[string]interface{}) (domain.DeviceDailyRunningRecordRepository, error) { | ||
138 | + var transactionContext *pg.TransactionContext | ||
139 | + if value, ok := options["transactionContext"]; ok { | ||
140 | + transactionContext = value.(*pg.TransactionContext) | ||
141 | + } | ||
142 | + return repository.NewDeviceDailyRunningRecordRepository(transactionContext) | ||
143 | +} |
@@ -23,7 +23,7 @@ type CreateProductCalendarCommand struct { | @@ -23,7 +23,7 @@ type CreateProductCalendarCommand struct { | ||
23 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 23 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
24 | WorkOn int `cname:"上班班次 1:全天 2:白班 4:中班 8:夜班" json:"workOn" valid:"Required"` | 24 | WorkOn int `cname:"上班班次 1:全天 2:白班 4:中班 8:夜班" json:"workOn" valid:"Required"` |
25 | // 日历选择 | 25 | // 日历选择 |
26 | - CalendarSelected []string `cname:"日历选择" json:"calendarSelected" valid:"Required"` | 26 | + CalendarSelected []int `cname:"日历选择" json:"calendarSelected" valid:"Required"` |
27 | // 上岗时间 | 27 | // 上岗时间 |
28 | InWorkAt string `cname:"上岗时间" json:"inWorkAt" valid:"Required"` | 28 | InWorkAt string `cname:"上岗时间" json:"inWorkAt" valid:"Required"` |
29 | // 下岗时间 | 29 | // 下岗时间 |
@@ -2,7 +2,7 @@ package dto | @@ -2,7 +2,7 @@ package dto | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
5 | - "strings" | 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" |
6 | ) | 6 | ) |
7 | 7 | ||
8 | type ProductCalendarDto struct { | 8 | type ProductCalendarDto struct { |
@@ -17,7 +17,7 @@ type ProductCalendarDto struct { | @@ -17,7 +17,7 @@ type ProductCalendarDto struct { | ||
17 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 17 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
18 | WorkOn int `json:"workOn,omitempty"` | 18 | WorkOn int `json:"workOn,omitempty"` |
19 | // 日历选择 | 19 | // 日历选择 |
20 | - CalendarSelected []string `json:"calendarSelected,omitempty"` | 20 | + CalendarSelected []int `json:"calendarSelected,omitempty"` |
21 | // 上岗时间 | 21 | // 上岗时间 |
22 | InWorkAt string `json:"inWorkAt,omitempty"` | 22 | InWorkAt string `json:"inWorkAt,omitempty"` |
23 | // 下岗时间 | 23 | // 下岗时间 |
@@ -27,7 +27,7 @@ type ProductCalendarDto struct { | @@ -27,7 +27,7 @@ type ProductCalendarDto struct { | ||
27 | // 工时 (单位 h) | 27 | // 工时 (单位 h) |
28 | WorkTime float64 `json:"workTime,omitempty"` | 28 | WorkTime float64 `json:"workTime,omitempty"` |
29 | // 已选择日历 | 29 | // 已选择日历 |
30 | - CalendarSelectedString string `json:"calendarSelectedString,omitempty"` | 30 | + //CalendarSelectedString string `json:"calendarSelectedString,omitempty"` |
31 | // 组织名称 | 31 | // 组织名称 |
32 | OrgName string `json:"orgName"` | 32 | OrgName string `json:"orgName"` |
33 | // 权限标识 (当前登录组织匹配为true,否则false) | 33 | // 权限标识 (当前登录组织匹配为true,否则false) |
@@ -38,12 +38,12 @@ func (d *ProductCalendarDto) LoadDto(m *domain.ProductCalendar, orgId int) *Prod | @@ -38,12 +38,12 @@ func (d *ProductCalendarDto) LoadDto(m *domain.ProductCalendar, orgId int) *Prod | ||
38 | d.ProductCalendarId = m.ProductCalendarId | 38 | d.ProductCalendarId = m.ProductCalendarId |
39 | d.WorkStation = m.WorkStation | 39 | d.WorkStation = m.WorkStation |
40 | d.WorkOn = m.WorkOn | 40 | d.WorkOn = m.WorkOn |
41 | - d.CalendarSelected = m.CalendarSelected | 41 | + d.CalendarSelected = utils.ToArrayInt(m.CalendarSelected) |
42 | d.InWorkAt = m.InWorkAt | 42 | d.InWorkAt = m.InWorkAt |
43 | d.OutWorkAt = m.OutWorkAt | 43 | d.OutWorkAt = m.OutWorkAt |
44 | d.BreakTime = m.BreakTime | 44 | d.BreakTime = m.BreakTime |
45 | d.WorkTime = m.WorkTime | 45 | d.WorkTime = m.WorkTime |
46 | - d.CalendarSelectedString = strings.Join(m.CalendarSelected, "/") | 46 | + //d.CalendarSelectedString = strings.Join(m.CalendarSelected, "/") |
47 | d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | 47 | d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) |
48 | if m.Ext != nil { | 48 | if m.Ext != nil { |
49 | d.OrgName = m.Ext.OrgName | 49 | d.OrgName = m.Ext.OrgName |
@@ -66,7 +66,7 @@ func (productCalendarService *ProductCalendarService) CreateProductCalendar(oper | @@ -66,7 +66,7 @@ func (productCalendarService *ProductCalendarService) CreateProductCalendar(oper | ||
66 | OrgId: cmd.OrgId, | 66 | OrgId: cmd.OrgId, |
67 | WorkStation: workStation, | 67 | WorkStation: workStation, |
68 | WorkOn: cmd.WorkOn, | 68 | WorkOn: cmd.WorkOn, |
69 | - CalendarSelected: cmd.CalendarSelected, | 69 | + CalendarSelected: utils.ToArrayString(cmd.CalendarSelected), |
70 | InWorkAt: cmd.InWorkAt, | 70 | InWorkAt: cmd.InWorkAt, |
71 | OutWorkAt: cmd.OutWorkAt, | 71 | OutWorkAt: cmd.OutWorkAt, |
72 | BreakTime: cmd.BreakTime, | 72 | BreakTime: cmd.BreakTime, |
@@ -85,7 +85,10 @@ func (productCalendarService *ProductCalendarService) CreateProductCalendar(oper | @@ -85,7 +85,10 @@ func (productCalendarService *ProductCalendarService) CreateProductCalendar(oper | ||
85 | if err := transactionContext.CommitTransaction(); err != nil { | 85 | if err := transactionContext.CommitTransaction(); err != nil { |
86 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 86 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
87 | } | 87 | } |
88 | - return productCalendar, nil | 88 | + |
89 | + result := &dto.ProductCalendarDto{} | ||
90 | + result.LoadDto(productCalendar, 0) | ||
91 | + return result, nil | ||
89 | } | 92 | } |
90 | } | 93 | } |
91 | 94 | ||
@@ -317,13 +320,16 @@ func (productCalendarService *ProductCalendarService) UpdateProductCalendar(cmd | @@ -317,13 +320,16 @@ func (productCalendarService *ProductCalendarService) UpdateProductCalendar(cmd | ||
317 | if err := transactionContext.CommitTransaction(); err != nil { | 320 | if err := transactionContext.CommitTransaction(); err != nil { |
318 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 321 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
319 | } | 322 | } |
320 | - return productCalendar, nil | 323 | + |
324 | + result := &dto.ProductCalendarDto{} | ||
325 | + result.LoadDto(productCalendar, 0) | ||
326 | + return result, nil | ||
321 | } | 327 | } |
322 | } | 328 | } |
323 | 329 | ||
324 | // 返回工厂日历服务列表 | 330 | // 返回工厂日历服务列表 |
325 | -func (productCalendarService *ProductCalendarService) SearchProductCalendar(operateInfo *domain.OperateInfo, listProductCalendarQuery *query.SearchProductCalendarQuery) (int64, interface{}, error) { | ||
326 | - if err := listProductCalendarQuery.ValidateQuery(); err != nil { | 331 | +func (productCalendarService *ProductCalendarService) SearchProductCalendar(operateInfo *domain.OperateInfo, cmd *query.SearchProductCalendarQuery) (int64, interface{}, error) { |
332 | + if err := cmd.ValidateQuery(); err != nil { | ||
327 | return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | 333 | return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) |
328 | } | 334 | } |
329 | transactionContext, err := factory.CreateTransactionContext(nil) | 335 | transactionContext, err := factory.CreateTransactionContext(nil) |
@@ -339,7 +345,12 @@ func (productCalendarService *ProductCalendarService) SearchProductCalendar(oper | @@ -339,7 +345,12 @@ func (productCalendarService *ProductCalendarService) SearchProductCalendar(oper | ||
339 | var productCalendarRepository domain.ProductCalendarRepository | 345 | var productCalendarRepository domain.ProductCalendarRepository |
340 | productCalendarRepository, _, _ = factory.FastPgProductCalendar(transactionContext, 0) | 346 | productCalendarRepository, _, _ = factory.FastPgProductCalendar(transactionContext, 0) |
341 | 347 | ||
342 | - count, productCalendars, err := productCalendarRepository.Find(utils.ObjectToMap(listProductCalendarQuery)) | 348 | + workshops, _ := factory.FastPgWorkshops(transactionContext, operateInfo.CompanyId) |
349 | + queryOptions := utils.ObjectToMap(cmd) | ||
350 | + delete(queryOptions, "workshopName") | ||
351 | + queryOptions = workshops.FindByNameWithQuery(queryOptions, cmd.WorkshopName, "", "") | ||
352 | + | ||
353 | + count, productCalendars, err := productCalendarRepository.Find(queryOptions) | ||
343 | if err != nil { | 354 | if err != nil { |
344 | return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 355 | return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
345 | } | 356 | } |
@@ -352,6 +363,7 @@ func (productCalendarService *ProductCalendarService) SearchProductCalendar(oper | @@ -352,6 +363,7 @@ func (productCalendarService *ProductCalendarService) SearchProductCalendar(oper | ||
352 | item := productCalendars[i] | 363 | item := productCalendars[i] |
353 | newJobDto := &dto.ProductCalendarDto{} | 364 | newJobDto := &dto.ProductCalendarDto{} |
354 | newJobDto.LoadDto(item, operateInfo.OrgId) | 365 | newJobDto.LoadDto(item, operateInfo.OrgId) |
366 | + newJobDto.WorkStation = workshops.FindWorkStation(item.WorkStation.WorkshopId, item.WorkStation.LineId, item.WorkStation.SectionId) | ||
355 | result = append(result, newJobDto) | 367 | result = append(result, newJobDto) |
356 | } | 368 | } |
357 | 369 |
@@ -25,7 +25,7 @@ type CreateProductGroupCommand struct { | @@ -25,7 +25,7 @@ type CreateProductGroupCommand struct { | ||
25 | // 班组长Id | 25 | // 班组长Id |
26 | GroupLeaderId int `cname:"班组长" json:"groupLeaderId,omitempty"` | 26 | GroupLeaderId int `cname:"班组长" json:"groupLeaderId,omitempty"` |
27 | // 帮组成员列表 | 27 | // 帮组成员列表 |
28 | - GroupMembers []int `cname:"帮组成员列表" json:"groupMembers" valid:"Required"` | 28 | + GroupMembers []int `cname:"帮组成员列表" json:"groupMembers"` |
29 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 29 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
30 | WorkOn int `cname:"上班班次 1:全天 2:白班 4:中班 8:夜班" json:"workOn" valid:"Required"` | 30 | WorkOn int `cname:"上班班次 1:全天 2:白班 4:中班 8:夜班" json:"workOn" valid:"Required"` |
31 | } | 31 | } |
@@ -22,7 +22,7 @@ type UpdateProductGroupCommand struct { | @@ -22,7 +22,7 @@ type UpdateProductGroupCommand struct { | ||
22 | // 班组长Id | 22 | // 班组长Id |
23 | GroupLeaderId int `cname:"班组长" json:"groupLeaderId,omitempty"` | 23 | GroupLeaderId int `cname:"班组长" json:"groupLeaderId,omitempty"` |
24 | // 帮组成员列表 | 24 | // 帮组成员列表 |
25 | - GroupMembers []int `cname:"帮组成员列表" json:"groupMembers" valid:"Required"` | 25 | + GroupMembers []int `cname:"帮组成员列表" json:"groupMembers"` |
26 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 26 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
27 | WorkOn int `cname:"上班班次 1:全天 2:白班 4:中班 8:夜班" json:"workOn" valid:"Required"` | 27 | WorkOn int `cname:"上班班次 1:全天 2:白班 4:中班 8:夜班" json:"workOn" valid:"Required"` |
28 | } | 28 | } |
@@ -16,9 +16,9 @@ type ProductGroupDto struct { | @@ -16,9 +16,9 @@ type ProductGroupDto struct { | ||
16 | // 班组名称 | 16 | // 班组名称 |
17 | GroupName string `json:"groupName,omitempty"` | 17 | GroupName string `json:"groupName,omitempty"` |
18 | // 班组长 | 18 | // 班组长 |
19 | - GroupLeader string `json:"groupLeader,omitempty"` | 19 | + GroupLeader string `json:"groupLeader"` |
20 | // 帮组成员列表 | 20 | // 帮组成员列表 |
21 | - GroupMembers string `json:"groupMembers,omitempty"` | 21 | + GroupMembers string `json:"groupMembers"` |
22 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 22 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
23 | WorkOn int `json:"workOn,omitempty"` | 23 | WorkOn int `json:"workOn,omitempty"` |
24 | // 工作位置 | 24 | // 工作位置 |
@@ -32,7 +32,9 @@ type ProductGroupDto struct { | @@ -32,7 +32,9 @@ type ProductGroupDto struct { | ||
32 | func (d *ProductGroupDto) LoadDto(m *domain.ProductGroup, orgId int) *ProductGroupDto { | 32 | func (d *ProductGroupDto) LoadDto(m *domain.ProductGroup, orgId int) *ProductGroupDto { |
33 | d.ProductGroupId = m.ProductGroupId | 33 | d.ProductGroupId = m.ProductGroupId |
34 | d.GroupName = m.GroupName | 34 | d.GroupName = m.GroupName |
35 | - d.GroupLeader = m.GroupLeader.UserName | 35 | + if m.GroupLeader != nil { |
36 | + d.GroupLeader = m.GroupLeader.UserName | ||
37 | + } | ||
36 | var members []string | 38 | var members []string |
37 | for i := range m.GroupMembers { | 39 | for i := range m.GroupMembers { |
38 | members = append(members, m.GroupMembers[i].UserName) | 40 | members = append(members, m.GroupMembers[i].UserName) |
@@ -2,6 +2,7 @@ package dto | @@ -2,6 +2,7 @@ package dto | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils/converter" | ||
5 | "strings" | 6 | "strings" |
6 | ) | 7 | ) |
7 | 8 | ||
@@ -11,12 +12,15 @@ type ProductGroupEmployeesDto struct { | @@ -11,12 +12,15 @@ type ProductGroupEmployeesDto struct { | ||
11 | UserId int `json:"userId,omitempty"` | 12 | UserId int `json:"userId,omitempty"` |
12 | // 用户姓名 | 13 | // 用户姓名 |
13 | UserName string `json:"userName,omitempty"` | 14 | UserName string `json:"userName,omitempty"` |
15 | + // 生产小组ID | ||
16 | + ProductGroupId int `json:"productGroupId,omitempty"` | ||
14 | // 班组名称 | 17 | // 班组名称 |
15 | GroupName string `json:"groupName,omitempty"` | 18 | GroupName string `json:"groupName,omitempty"` |
16 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 19 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
17 | WorkOnDescription string `json:"workOn,omitempty"` | 20 | WorkOnDescription string `json:"workOn,omitempty"` |
18 | // 工作位置键值 (车间ID+'.'+生产线ID+'.'+工段ID) | 21 | // 工作位置键值 (车间ID+'.'+生产线ID+'.'+工段ID) |
19 | //WorkStationId string `json:"workStationId,omitempty"` | 22 | //WorkStationId string `json:"workStationId,omitempty"` |
23 | + UserNamePinyin string `json:"pinyin"` | ||
20 | } | 24 | } |
21 | 25 | ||
22 | func NewProductGroupEmployeesDto(group *domain.ProductGroup) []*ProductGroupEmployeesDto { | 26 | func NewProductGroupEmployeesDto(group *domain.ProductGroup) []*ProductGroupEmployeesDto { |
@@ -34,10 +38,14 @@ func NewGroupEmployee(group *domain.ProductGroup, u *domain.User) *ProductGroupE | @@ -34,10 +38,14 @@ func NewGroupEmployee(group *domain.ProductGroup, u *domain.User) *ProductGroupE | ||
34 | item := &ProductGroupEmployeesDto{} | 38 | item := &ProductGroupEmployeesDto{} |
35 | item.UserId = u.UserId | 39 | item.UserId = u.UserId |
36 | item.UserName = u.UserName | 40 | item.UserName = u.UserName |
41 | + item.ProductGroupId = group.ProductGroupId | ||
37 | item.GroupName = group.GroupName | 42 | item.GroupName = group.GroupName |
38 | workOns := domain.WorkOnDescription(group.WorkOn) | 43 | workOns := domain.WorkOnDescription(group.WorkOn) |
39 | item.WorkOnDescription = strings.Join(workOns, ",") | 44 | item.WorkOnDescription = strings.Join(workOns, ",") |
40 | //item.WorkStationId = group.WorkStation.WorkStationId | 45 | //item.WorkStationId = group.WorkStation.WorkStationId |
46 | + if len(item.UserName) > 0 { | ||
47 | + item.UserNamePinyin = converter.ToPinYin(item.UserName, "") | ||
48 | + } | ||
41 | return item | 49 | return item |
42 | } | 50 | } |
43 | 51 | ||
@@ -63,9 +71,37 @@ func (d *ProductGroupEmployeesDtos) LoadDto(groups ...*domain.ProductGroup) { | @@ -63,9 +71,37 @@ func (d *ProductGroupEmployeesDtos) LoadDto(groups ...*domain.ProductGroup) { | ||
63 | } | 71 | } |
64 | } | 72 | } |
65 | 73 | ||
74 | +func (d *ProductGroupEmployeesDtos) LoadDtoV2(list ...*domain.ProductAttendanceRecord) { | ||
75 | + var mapUser = make(map[int]int) | ||
76 | + for _, v := range list { | ||
77 | + item := &ProductGroupEmployeesDto{} | ||
78 | + item.UserId = v.ProductWorker.UserId | ||
79 | + item.UserName = v.ProductWorker.UserName | ||
80 | + item.ProductGroupId = 0 | ||
81 | + item.GroupName = "" | ||
82 | + if len(item.UserName) > 0 { | ||
83 | + item.UserNamePinyin = converter.ToPinYin(item.UserName, "") | ||
84 | + } | ||
85 | + if _, ok := mapUser[item.UserId]; ok { | ||
86 | + continue | ||
87 | + } else { | ||
88 | + mapUser[item.UserId] = item.UserId | ||
89 | + } | ||
90 | + d.Append(item) | ||
91 | + } | ||
92 | +} | ||
93 | + | ||
66 | func NewProductGroupEmployeesDtos() *ProductGroupEmployeesDtos { | 94 | func NewProductGroupEmployeesDtos() *ProductGroupEmployeesDtos { |
67 | return &ProductGroupEmployeesDtos{ | 95 | return &ProductGroupEmployeesDtos{ |
68 | Result: make([]*ProductGroupEmployeesDto, 0), | 96 | Result: make([]*ProductGroupEmployeesDto, 0), |
69 | MapResult: make(map[int]*ProductGroupEmployeesDto), | 97 | MapResult: make(map[int]*ProductGroupEmployeesDto), |
70 | } | 98 | } |
71 | } | 99 | } |
100 | + | ||
101 | +func (ms *ProductGroupEmployeesDtos) Len() int { return len(ms.Result) } | ||
102 | +func (ms *ProductGroupEmployeesDtos) Less(i, j int) bool { | ||
103 | + return ms.Result[i].UserNamePinyin < ms.Result[j].UserNamePinyin | ||
104 | +} | ||
105 | +func (ms *ProductGroupEmployeesDtos) Swap(i, j int) { | ||
106 | + ms.Result[i], ms.Result[j] = ms.Result[j], ms.Result[i] | ||
107 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/beego/beego/v2/core/validation" | ||
6 | + "reflect" | ||
7 | + "strings" | ||
8 | +) | ||
9 | + | ||
10 | +type GetSignInEmployeeQuery struct { | ||
11 | + // 查询偏离量 | ||
12 | + //Offset int `cname:"查询偏离量" json:"offset"` | ||
13 | + // 查询限制 | ||
14 | + //Limit int `cname:"查询限制" json:"limit"` | ||
15 | + // 页码 | ||
16 | + //PageNumber int `cname:"页码" json:"pageNumber,omitempty"` | ||
17 | + // 页数 | ||
18 | + //PageSize int `cname:"页数" json:"pageSize,omitempty"` | ||
19 | + // 当前公司 | ||
20 | + CompanyId int `cname:"当前公司" json:"companyId,omitempty" valid:"Required"` | ||
21 | + // 当前登录的组织 | ||
22 | + OrgId int `cname:"当前登录的组织" json:"orgId,omitempty"` | ||
23 | + // IC卡号 | ||
24 | + IcCardNumber string `cname:"IC卡号" json:"icCardNumber,omitempty"` | ||
25 | +} | ||
26 | + | ||
27 | +func (listProductGroupQuery *GetSignInEmployeeQuery) Valid(validation *validation.Validation) { | ||
28 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
29 | +} | ||
30 | + | ||
31 | +func (listProductGroupQuery *GetSignInEmployeeQuery) ValidateQuery() error { | ||
32 | + valid := validation.Validation{} | ||
33 | + b, err := valid.Valid(listProductGroupQuery) | ||
34 | + if err != nil { | ||
35 | + return err | ||
36 | + } | ||
37 | + if !b { | ||
38 | + elem := reflect.TypeOf(listProductGroupQuery).Elem() | ||
39 | + for _, validErr := range valid.Errors { | ||
40 | + field, isExist := elem.FieldByName(validErr.Field) | ||
41 | + if isExist { | ||
42 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
43 | + } else { | ||
44 | + return fmt.Errorf(validErr.Message) | ||
45 | + } | ||
46 | + } | ||
47 | + } | ||
48 | + return nil | ||
49 | +} |
@@ -11,6 +11,7 @@ import ( | @@ -11,6 +11,7 @@ import ( | ||
11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | 12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" |
13 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" | 13 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" |
14 | + "sort" | ||
14 | "time" | 15 | "time" |
15 | ) | 16 | ) |
16 | 17 | ||
@@ -44,15 +45,19 @@ func (productGroupService *ProductGroupService) CreateProductGroup(operateInfo * | @@ -44,15 +45,19 @@ func (productGroupService *ProductGroupService) CreateProductGroup(operateInfo * | ||
44 | } | 45 | } |
45 | 46 | ||
46 | var leader *domain.User | 47 | var leader *domain.User |
47 | - var members []*domain.User | 48 | + var members = make([]*domain.User, 0) |
48 | userService := domainService.NewUserService() | 49 | userService := domainService.NewUserService() |
49 | - leader, err = userService.User(cmd.GroupLeaderId) | ||
50 | - if err != nil { | ||
51 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 50 | + if cmd.GroupLeaderId > 0 { |
51 | + leader, err = userService.User(cmd.GroupLeaderId) | ||
52 | + if err != nil { | ||
53 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
54 | + } | ||
52 | } | 55 | } |
53 | - members, err = userService.Users(cmd.GroupMembers) | ||
54 | - if err != nil { | ||
55 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 56 | + if len(cmd.GroupMembers) > 0 { |
57 | + members, err = userService.Users(cmd.GroupMembers) | ||
58 | + if err != nil { | ||
59 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
60 | + } | ||
56 | } | 61 | } |
57 | 62 | ||
58 | var org *domain.Org | 63 | var org *domain.Org |
@@ -129,6 +134,9 @@ func (productGroupService *ProductGroupService) GetProductGroup(getProductGroupQ | @@ -129,6 +134,9 @@ func (productGroupService *ProductGroupService) GetProductGroup(getProductGroupQ | ||
129 | if err := transactionContext.CommitTransaction(); err != nil { | 134 | if err := transactionContext.CommitTransaction(); err != nil { |
130 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 135 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
131 | } | 136 | } |
137 | + //if productGroup.GroupLeader==nil{ | ||
138 | + // productGroup.GroupLeader = &domain.User{} | ||
139 | + //} | ||
132 | return productGroup, nil | 140 | return productGroup, nil |
133 | } | 141 | } |
134 | 142 | ||
@@ -291,15 +299,19 @@ func (productGroupService *ProductGroupService) UpdateProductGroup(cmd *command. | @@ -291,15 +299,19 @@ func (productGroupService *ProductGroupService) UpdateProductGroup(cmd *command. | ||
291 | } | 299 | } |
292 | 300 | ||
293 | var leader *domain.User | 301 | var leader *domain.User |
294 | - var members []*domain.User | 302 | + var members = make([]*domain.User, 0) |
295 | userService := domainService.NewUserService() | 303 | userService := domainService.NewUserService() |
296 | - leader, err = userService.User(cmd.GroupLeaderId) | ||
297 | - if err != nil { | ||
298 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 304 | + if cmd.GroupLeaderId > 0 { |
305 | + leader, err = userService.User(cmd.GroupLeaderId) | ||
306 | + if err != nil { | ||
307 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
308 | + } | ||
299 | } | 309 | } |
300 | - members, err = userService.Users(cmd.GroupMembers) | ||
301 | - if err != nil { | ||
302 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 310 | + if len(cmd.GroupMembers) > 0 { |
311 | + members, err = userService.Users(cmd.GroupMembers) | ||
312 | + if err != nil { | ||
313 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
314 | + } | ||
303 | } | 315 | } |
304 | productGroup.GroupLeader = leader | 316 | productGroup.GroupLeader = leader |
305 | productGroup.GroupMembers = members | 317 | productGroup.GroupMembers = members |
@@ -358,7 +370,7 @@ func (productGroupService *ProductGroupService) SearchProductGroup(operateInfo * | @@ -358,7 +370,7 @@ func (productGroupService *ProductGroupService) SearchProductGroup(operateInfo * | ||
358 | item := productGroups[i] | 370 | item := productGroups[i] |
359 | newItem := &dto.ProductGroupDto{} | 371 | newItem := &dto.ProductGroupDto{} |
360 | newItem.LoadDto(productGroups[i], operateInfo.OrgId) | 372 | newItem.LoadDto(productGroups[i], operateInfo.OrgId) |
361 | - item.WorkStation = workshops.FindWorkStation(item.WorkStation.WorkshopId, item.WorkStation.LineId, item.WorkStation.SectionId) | 373 | + newItem.WorkStation = workshops.FindWorkStation(item.WorkStation.WorkshopId, item.WorkStation.LineId, item.WorkStation.SectionId) |
362 | results = append(results, newItem) | 374 | results = append(results, newItem) |
363 | } | 375 | } |
364 | if err := transactionContext.CommitTransaction(); err != nil { | 376 | if err := transactionContext.CommitTransaction(); err != nil { |
@@ -383,9 +395,7 @@ func (productGroupService *ProductGroupService) SearchProductGroupEmployees(oper | @@ -383,9 +395,7 @@ func (productGroupService *ProductGroupService) SearchProductGroupEmployees(oper | ||
383 | transactionContext.RollbackTransaction() | 395 | transactionContext.RollbackTransaction() |
384 | }() | 396 | }() |
385 | 397 | ||
386 | - //workshops, _ := factory.FastPgWorkshops(transactionContext, operateInfo.CompanyId) | ||
387 | queryOptions := utils.ObjectToMap(cmd) | 398 | queryOptions := utils.ObjectToMap(cmd) |
388 | - //queryOptions = workshops.FindByNameWithQuery(queryOptions, cmd.WorkshopName, cmd.LineName, "") | ||
389 | 399 | ||
390 | var productGroupRepository domain.ProductGroupRepository | 400 | var productGroupRepository domain.ProductGroupRepository |
391 | productGroupRepository, _, _ = factory.FastPgProductGroup(transactionContext, 0) | 401 | productGroupRepository, _, _ = factory.FastPgProductGroup(transactionContext, 0) |
@@ -401,6 +411,7 @@ func (productGroupService *ProductGroupService) SearchProductGroupEmployees(oper | @@ -401,6 +411,7 @@ func (productGroupService *ProductGroupService) SearchProductGroupEmployees(oper | ||
401 | items := dto.NewProductGroupEmployeesDto(item) | 411 | items := dto.NewProductGroupEmployeesDto(item) |
402 | results.Append(items...) | 412 | results.Append(items...) |
403 | } | 413 | } |
414 | + sort.Stable(results) | ||
404 | if err := transactionContext.CommitTransaction(); err != nil { | 415 | if err := transactionContext.CommitTransaction(); err != nil { |
405 | return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 416 | return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
406 | } | 417 | } |
@@ -409,6 +420,72 @@ func (productGroupService *ProductGroupService) SearchProductGroupEmployees(oper | @@ -409,6 +420,72 @@ func (productGroupService *ProductGroupService) SearchProductGroupEmployees(oper | ||
409 | }, nil | 420 | }, nil |
410 | } | 421 | } |
411 | 422 | ||
423 | +// 返回在当前工段上打卡的所有用户 | ||
424 | +func (productGroupService *ProductGroupService) SearchProductGroupEmployeesV2(operateInfo *domain.OperateInfo, cmd *query.SearchProductGroupEmployeesQuery) (int64, interface{}, error) { | ||
425 | + if err := cmd.ValidateQuery(); err != nil { | ||
426 | + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
427 | + } | ||
428 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
429 | + if err != nil { | ||
430 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
431 | + } | ||
432 | + if err := transactionContext.StartTransaction(); err != nil { | ||
433 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
434 | + } | ||
435 | + defer func() { | ||
436 | + transactionContext.RollbackTransaction() | ||
437 | + }() | ||
438 | + | ||
439 | + queryOptions := utils.ObjectToMap(cmd) | ||
440 | + queryOptions["signBeginTime"] = utils.GetZeroTime(time.Now()) | ||
441 | + var attendanceRecordRepository domain.ProductAttendanceRecordRepository | ||
442 | + attendanceRecordRepository, _, _ = factory.FastPgAttendance(transactionContext, 0) | ||
443 | + _, productGroups, err := attendanceRecordRepository.Find(queryOptions) | ||
444 | + if err != nil { | ||
445 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
446 | + } | ||
447 | + var results = dto.NewProductGroupEmployeesDtos() | ||
448 | + results.LoadDtoV2(productGroups...) | ||
449 | + sort.Stable(results) | ||
450 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
451 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
452 | + } | ||
453 | + return int64(len(results.Result)), map[string]interface{}{ | ||
454 | + "employees": results.Result, | ||
455 | + }, nil | ||
456 | +} | ||
457 | + | ||
458 | +// 返回生产班组服务列表 | ||
459 | +func (productGroupService *ProductGroupService) GetSignEmployee(cmd *query.GetSignInEmployeeQuery) (interface{}, error) { | ||
460 | + if err := cmd.ValidateQuery(); err != nil { | ||
461 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
462 | + } | ||
463 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
464 | + if err != nil { | ||
465 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
466 | + } | ||
467 | + if err := transactionContext.StartTransaction(); err != nil { | ||
468 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
469 | + } | ||
470 | + defer func() { | ||
471 | + transactionContext.RollbackTransaction() | ||
472 | + }() | ||
473 | + | ||
474 | + var userService = domainService.NewUserService() | ||
475 | + | ||
476 | + worker, err := userService.UserByICCode(cmd.CompanyId, cmd.OrgId, cmd.IcCardNumber) | ||
477 | + if err != nil || worker == nil || worker.UserId == 0 { | ||
478 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "用户不存在") | ||
479 | + } | ||
480 | + | ||
481 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
482 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
483 | + } | ||
484 | + return map[string]interface{}{ | ||
485 | + "employee": worker, | ||
486 | + }, nil | ||
487 | +} | ||
488 | + | ||
412 | func NewProductGroupService(options map[string]interface{}) *ProductGroupService { | 489 | func NewProductGroupService(options map[string]interface{}) *ProductGroupService { |
413 | newProductGroupService := &ProductGroupService{} | 490 | newProductGroupService := &ProductGroupService{} |
414 | return newProductGroupService | 491 | return newProductGroupService |
@@ -97,7 +97,7 @@ func (productJobService *ProductJobService) GetProductJob(getProductJobQuery *qu | @@ -97,7 +97,7 @@ func (productJobService *ProductJobService) GetProductJob(getProductJobQuery *qu | ||
97 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 97 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
98 | } | 98 | } |
99 | productJob.WorkStation, _ = workshop.FindWorkStation(productJob.WorkStation.WorkshopId, productJob.WorkStation.LineId, productJob.WorkStation.SectionId) | 99 | productJob.WorkStation, _ = workshop.FindWorkStation(productJob.WorkStation.WorkshopId, productJob.WorkStation.LineId, productJob.WorkStation.SectionId) |
100 | - | 100 | + productJob.WorkStation.Principal = workshop.Principal |
101 | newJobDto := &dto.ProductJobDto{} | 101 | newJobDto := &dto.ProductJobDto{} |
102 | newJobDto.LoadDto(productJob, 0) | 102 | newJobDto.LoadDto(productJob, 0) |
103 | 103 | ||
@@ -335,9 +335,11 @@ func (productJobService *ProductJobService) SearchProductJob(operateInfo *domain | @@ -335,9 +335,11 @@ func (productJobService *ProductJobService) SearchProductJob(operateInfo *domain | ||
335 | var result = make([]*dto.ProductJobDto, 0) | 335 | var result = make([]*dto.ProductJobDto, 0) |
336 | for i := range productJobs { | 336 | for i := range productJobs { |
337 | item := productJobs[i] | 337 | item := productJobs[i] |
338 | - item.WorkStation = workshops.FindWorkStation(item.WorkStation.WorkshopId, item.WorkStation.LineId, item.WorkStation.SectionId) | 338 | + |
339 | newJobDto := &dto.ProductJobDto{} | 339 | newJobDto := &dto.ProductJobDto{} |
340 | newJobDto.LoadDto(item, operateInfo.OrgId) | 340 | newJobDto.LoadDto(item, operateInfo.OrgId) |
341 | + newJobDto.WorkStation = workshops.FindWorkStation(item.WorkStation.WorkshopId, item.WorkStation.LineId, item.WorkStation.SectionId, 1) | ||
342 | + //newJobDto.WorkStation.Principal = item.WorkStation.Principal | ||
341 | result = append(result, newJobDto) | 343 | result = append(result, newJobDto) |
342 | } | 344 | } |
343 | return count, result, nil | 345 | return count, result, nil |
@@ -17,7 +17,7 @@ type CreateProductPlanCommand struct { | @@ -17,7 +17,7 @@ type CreateProductPlanCommand struct { | ||
17 | // 车间ID | 17 | // 车间ID |
18 | WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` | 18 | WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` |
19 | // 批号 | 19 | // 批号 |
20 | - BatchNumber string `cname:"批号" json:"batchNumber" valid:"Required"` | 20 | + BatchNumber string `cname:"批号" json:"batchNumber"` |
21 | // 生产日期 | 21 | // 生产日期 |
22 | ProductDate string `cname:"生产日期" json:"productDate" valid:"Required"` | 22 | ProductDate string `cname:"生产日期" json:"productDate" valid:"Required"` |
23 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 23 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
@@ -28,17 +28,14 @@ type CreateProductPlanCommand struct { | @@ -28,17 +28,14 @@ type CreateProductPlanCommand struct { | ||
28 | //PlanProductName string `cname:"计划的产品名称" json:"planProductName"` | 28 | //PlanProductName string `cname:"计划的产品名称" json:"planProductName"` |
29 | // 产品ID | 29 | // 产品ID |
30 | ProductId int `cname:"产品ID" json:"productId" valid:"Required"` | 30 | ProductId int `cname:"产品ID" json:"productId" valid:"Required"` |
31 | + // 投入量规格 默认份 | ||
32 | + DevotedUnit string `cname:"投入量规格" json:"devotedUnit" ` | ||
31 | // 数量(保留两位小数) | 33 | // 数量(保留两位小数) |
32 | Quantity float64 `cname:"数量(保留两位小数)" json:"quantity" valid:"Required"` | 34 | Quantity float64 `cname:"数量(保留两位小数)" json:"quantity" valid:"Required"` |
33 | - // 单位 | ||
34 | - //Unit string `cname:"单位" json:"unit" ` | ||
35 | - // 单份重量(原材料) | ||
36 | - //nitWeight float64 `cname:"单份重量(原材料)" json:"unitWeight" valid:"Required"` | ||
37 | // 重量 | 35 | // 重量 |
38 | Weight float64 `cname:"重量" json:"weight" valid:"Required"` | 36 | Weight float64 `cname:"重量" json:"weight" valid:"Required"` |
39 | // 备注 | 37 | // 备注 |
40 | Remark string `cname:"备注" json:"remark"` | 38 | Remark string `cname:"备注" json:"remark"` |
41 | - | ||
42 | // 生产日期 | 39 | // 生产日期 |
43 | ProductDateTime time.Time `cname:"生产日期" json:"-" ` | 40 | ProductDateTime time.Time `cname:"生产日期" json:"-" ` |
44 | } | 41 | } |
@@ -49,8 +46,8 @@ func (createProductPlanCommand *CreateProductPlanCommand) Valid(validation *vali | @@ -49,8 +46,8 @@ func (createProductPlanCommand *CreateProductPlanCommand) Valid(validation *vali | ||
49 | validation.Error(err.Error()) | 46 | validation.Error(err.Error()) |
50 | return | 47 | return |
51 | } | 48 | } |
52 | - if t, err := time.Parse("2006/01/02", createProductPlanCommand.ProductDate); err != nil { | ||
53 | - validation.Error("时间格式有误 2006/01/02") | 49 | + if t, err := time.Parse("2006-01-02", createProductPlanCommand.ProductDate); err != nil { |
50 | + validation.Error("时间格式有误" + createProductPlanCommand.ProductDate) | ||
54 | return | 51 | return |
55 | } else { | 52 | } else { |
56 | createProductPlanCommand.ProductDateTime = t | 53 | createProductPlanCommand.ProductDateTime = t |
@@ -9,8 +9,26 @@ import ( | @@ -9,8 +9,26 @@ import ( | ||
9 | ) | 9 | ) |
10 | 10 | ||
11 | type ReceiveMaterialCommand struct { | 11 | type ReceiveMaterialCommand struct { |
12 | + // 企业id | ||
13 | + CompanyId int `cname:"企业id" json:"companyId" valid:"Required"` | ||
14 | + // 组织ID | ||
15 | + OrgId int `cname:"组织ID" json:"orgId" valid:"Required"` | ||
12 | // 生产计划ID | 16 | // 生产计划ID |
13 | - ProductPlanId int `cname:"生产计划ID" json:"productPlanId" valid:"Required"` | 17 | + ProductPlanId int `cname:"生产计划" json:"productPlanId" valid:"Required"` |
18 | + // 车间ID | ||
19 | + WorkshopId int `cname:"车间" json:"workshopId" valid:"Required"` | ||
20 | + // 生产线ID | ||
21 | + LineId int `cname:"生产线" json:"lineId" valid:"Required"` | ||
22 | + // 工段ID | ||
23 | + SectionId int `cname:"工段" json:"sectionId" valid:"Required"` | ||
24 | + // 生产小组ID | ||
25 | + ProductGroupId int `cname:"生产小组" json:"productGroupId"` | ||
26 | + // 员工Id 用户唯一标识 | ||
27 | + EmployeeId int `cname:"员工" json:"employeeId" valid:"Required"` | ||
28 | + // 物料ID | ||
29 | + UnitConversionId int `cname:"物料ID" json:"unitConversionId" valid:"Required"` | ||
30 | + // 重量 | ||
31 | + Weigh float64 `cname:"重量" json:"weigh" valid:"Required"` | ||
14 | } | 32 | } |
15 | 33 | ||
16 | func (receiveMaterialCommand *ReceiveMaterialCommand) Valid(validation *validation.Validation) { | 34 | func (receiveMaterialCommand *ReceiveMaterialCommand) Valid(validation *validation.Validation) { |
@@ -9,8 +9,26 @@ import ( | @@ -9,8 +9,26 @@ import ( | ||
9 | ) | 9 | ) |
10 | 10 | ||
11 | type ReturnMaterialCommand struct { | 11 | type ReturnMaterialCommand struct { |
12 | + // 企业id | ||
13 | + CompanyId int `cname:"企业id" json:"companyId" valid:"Required"` | ||
14 | + // 组织ID | ||
15 | + OrgId int `cname:"组织ID" json:"orgId" valid:"Required"` | ||
12 | // 生产计划ID | 16 | // 生产计划ID |
13 | - ProductPlanId int `cname:"生产计划ID" json:"productPlanId" valid:"Required"` | 17 | + ProductPlanId int `cname:"生产计划" json:"productPlanId" valid:"Required"` |
18 | + // 车间ID | ||
19 | + WorkshopId int `cname:"车间" json:"workshopId" valid:"Required"` | ||
20 | + // 生产线ID | ||
21 | + LineId int `cname:"生产线" json:"lineId" valid:"Required"` | ||
22 | + // 工段ID | ||
23 | + SectionId int `cname:"工段" json:"sectionId" valid:"Required"` | ||
24 | + // 生产小组ID | ||
25 | + ProductGroupId int `cname:"生产小组" json:"productGroupId"` | ||
26 | + // 员工Id 用户唯一标识 | ||
27 | + EmployeeId int `cname:"员工" json:"employeeId" valid:"Required"` | ||
28 | + // 物料ID | ||
29 | + UnitConversionId int `cname:"物料ID" json:"unitConversionId" valid:"Required"` | ||
30 | + // 重量 | ||
31 | + Weigh float64 `cname:"重量" json:"weigh" valid:"Required"` | ||
14 | } | 32 | } |
15 | 33 | ||
16 | func (returnMaterialCommand *ReturnMaterialCommand) Valid(validation *validation.Validation) { | 34 | func (returnMaterialCommand *ReturnMaterialCommand) Valid(validation *validation.Validation) { |
@@ -10,7 +10,7 @@ import ( | @@ -10,7 +10,7 @@ import ( | ||
10 | 10 | ||
11 | type SetOfflineCommand struct { | 11 | type SetOfflineCommand struct { |
12 | // 生产计划ID | 12 | // 生产计划ID |
13 | - ProductPlanId int `cname:"生产计划ID" json:"productPlanId" valid:"Required"` | 13 | + ProductPlanId int `cname:"生产计划ID" json:"productPlanDispatchRecordId" valid:"Required"` |
14 | } | 14 | } |
15 | 15 | ||
16 | func (setOfflineCommand *SetOfflineCommand) Valid(validation *validation.Validation) { | 16 | func (setOfflineCommand *SetOfflineCommand) Valid(validation *validation.Validation) { |
@@ -12,9 +12,9 @@ type SetOnlineCommand struct { | @@ -12,9 +12,9 @@ type SetOnlineCommand struct { | ||
12 | // 生产计划ID | 12 | // 生产计划ID |
13 | ProductPlanId int `cname:"生产计划ID" json:"productPlanId" valid:"Required"` | 13 | ProductPlanId int `cname:"生产计划ID" json:"productPlanId" valid:"Required"` |
14 | // 车间ID | 14 | // 车间ID |
15 | - WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` | 15 | + WorkshopId int `cname:"车间ID" json:"workshopId" ` |
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 | } |
@@ -9,8 +9,26 @@ import ( | @@ -9,8 +9,26 @@ import ( | ||
9 | ) | 9 | ) |
10 | 10 | ||
11 | type SubmitProductRecordCommand struct { | 11 | type SubmitProductRecordCommand struct { |
12 | + // 企业id | ||
13 | + CompanyId int `cname:"企业id" json:"companyId" valid:"Required"` | ||
14 | + // 组织ID | ||
15 | + OrgId int `cname:"组织ID" json:"orgId" valid:"Required"` | ||
12 | // 生产计划ID | 16 | // 生产计划ID |
13 | - ProductPlanId int `cname:"生产计划ID" json:"productPlanId" valid:"Required"` | 17 | + ProductPlanId int `cname:"生产计划" json:"productPlanId" valid:"Required"` |
18 | + // 车间ID | ||
19 | + WorkshopId int `cname:"车间" json:"workshopId" valid:"Required"` | ||
20 | + // 生产线ID | ||
21 | + LineId int `cname:"生产线" json:"lineId" valid:"Required"` | ||
22 | + // 工段ID | ||
23 | + SectionId int `cname:"工段" json:"sectionId" valid:"Required"` | ||
24 | + // 生产小组ID | ||
25 | + ProductGroupId int `cname:"生产小组" json:"productGroupId"` | ||
26 | + // 员工Id 用户唯一标识 | ||
27 | + EmployeeId int `cname:"员工" json:"employeeId" valid:"Required"` | ||
28 | + // 物料ID | ||
29 | + UnitConversionId int `cname:"物料ID" json:"unitConversionId"` | ||
30 | + // 重量 | ||
31 | + Weigh float64 `cname:"重量" json:"weigh" valid:"Required"` | ||
14 | } | 32 | } |
15 | 33 | ||
16 | func (submitProductRecordCommand *SubmitProductRecordCommand) Valid(validation *validation.Validation) { | 34 | func (submitProductRecordCommand *SubmitProductRecordCommand) Valid(validation *validation.Validation) { |
@@ -9,10 +9,10 @@ import ( | @@ -9,10 +9,10 @@ import ( | ||
9 | ) | 9 | ) |
10 | 10 | ||
11 | type SwitchCommand struct { | 11 | type SwitchCommand struct { |
12 | - // 下线计划ID | ||
13 | - FromProductPlanId int `cname:"下线计划ID" json:"fromProductPlanId,omitempty"` | ||
14 | - // 上线计划ID | ||
15 | - ToProductPlanId int `cname:"上线计划ID" json:"toProductPlanId,omitempty"` | 12 | + // 已上线计划ID |
13 | + FromProductPlanDispatchRecordId int `cname:"已上线计划ID" json:"productPlanDispatchRecordId,omitempty" valid:"Required"` | ||
14 | + // 计划ID | ||
15 | + ToProductPlanId int `cname:"计划ID" json:"productPlanId,omitempty" valid:"Required"` | ||
16 | } | 16 | } |
17 | 17 | ||
18 | func (switchCommand *SwitchCommand) Valid(validation *validation.Validation) { | 18 | func (switchCommand *SwitchCommand) Valid(validation *validation.Validation) { |
@@ -19,7 +19,7 @@ type UpdateProductPlanCommand struct { | @@ -19,7 +19,7 @@ type UpdateProductPlanCommand struct { | ||
19 | // 车间ID | 19 | // 车间ID |
20 | WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` | 20 | WorkshopId int `cname:"车间ID" json:"workshopId" valid:"Required"` |
21 | // 批号 | 21 | // 批号 |
22 | - BatchNumber string `cname:"批号" json:"batchNumber" valid:"Required"` | 22 | + BatchNumber string `cname:"批号" json:"batchNumber"` |
23 | // 生产日期 | 23 | // 生产日期 |
24 | ProductDate string `cname:"生产日期" json:"productDate" valid:"Required"` | 24 | ProductDate string `cname:"生产日期" json:"productDate" valid:"Required"` |
25 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 | 25 | // 上班班次 1:全天 2:白班 4:中班 8:夜班 |
@@ -30,6 +30,8 @@ type UpdateProductPlanCommand struct { | @@ -30,6 +30,8 @@ type UpdateProductPlanCommand struct { | ||
30 | PlanProductName string `cname:"计划的产品名称" json:"planProductName"` | 30 | PlanProductName string `cname:"计划的产品名称" json:"planProductName"` |
31 | // 产品ID | 31 | // 产品ID |
32 | ProductId int `cname:"产品ID" json:"productId" valid:"Required"` | 32 | ProductId int `cname:"产品ID" json:"productId" valid:"Required"` |
33 | + // 投入量规格 默认份 | ||
34 | + DevotedUnit string `cname:"投入量规格" json:"devotedUnit" ` | ||
33 | // 数量(保留两位小数) | 35 | // 数量(保留两位小数) |
34 | Quantity float64 `cname:"数量(保留两位小数)" json:"quantity" valid:"Required"` | 36 | Quantity float64 `cname:"数量(保留两位小数)" json:"quantity" valid:"Required"` |
35 | // 单位 | 37 | // 单位 |
@@ -39,7 +41,7 @@ type UpdateProductPlanCommand struct { | @@ -39,7 +41,7 @@ type UpdateProductPlanCommand struct { | ||
39 | // 重量 | 41 | // 重量 |
40 | Weight float64 `cname:"重量" json:"weight"` | 42 | Weight float64 `cname:"重量" json:"weight"` |
41 | // 备注 | 43 | // 备注 |
42 | - Remark string `cname:"备注" json:"remark" valid:"Required"` | 44 | + Remark string `cname:"备注" json:"remark"` |
43 | // 生产日期 | 45 | // 生产日期 |
44 | ProductDateTime time.Time `cname:"生产日期" json:"productDateTime" ` | 46 | ProductDateTime time.Time `cname:"生产日期" json:"productDateTime" ` |
45 | } | 47 | } |
@@ -49,8 +51,8 @@ func (updateProductPlanCommand *UpdateProductPlanCommand) Valid(validation *vali | @@ -49,8 +51,8 @@ func (updateProductPlanCommand *UpdateProductPlanCommand) Valid(validation *vali | ||
49 | validation.Error(err.Error()) | 51 | validation.Error(err.Error()) |
50 | return | 52 | return |
51 | } | 53 | } |
52 | - if t, err := time.Parse("2006/01/02", updateProductPlanCommand.ProductDate); err != nil { | ||
53 | - validation.Error("时间格式有误 2006/01/02") | 54 | + if t, err := time.Parse("2006-01-02", updateProductPlanCommand.ProductDate); err != nil { |
55 | + validation.Error("时间格式有误") | ||
54 | return | 56 | return |
55 | } else { | 57 | } else { |
56 | updateProductPlanCommand.ProductDateTime = t | 58 | updateProductPlanCommand.ProductDateTime = t |
1 | +package dto | ||
2 | + | ||
3 | +import ( | ||
4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
5 | + "strings" | ||
6 | +) | ||
7 | + | ||
8 | +type ProductPlanDispatchRecordDto struct { | ||
9 | + // 生产计划ID | ||
10 | + ProductPlanId int `json:"productPlanDispatchRecordId,omitempty"` | ||
11 | + // 批号 | ||
12 | + BatchNumber string `json:"batchNumber,omitempty"` | ||
13 | + // 生产日期 | ||
14 | + ProductDate string `json:"productDate,omitempty"` | ||
15 | + // 车间 | ||
16 | + //*domain.Workshop | ||
17 | + *domain.WorkStation | ||
18 | + // 上班班次 1:全天 2:白班 4:中班 8:夜班 | ||
19 | + WorkOn int `json:"workOn,omitempty"` | ||
20 | + // 上班班次描述 | ||
21 | + WorkOnDescription string `json:"workOnDescription"` | ||
22 | + // 机台 (A、B、C、D 区分机器大小) | ||
23 | + Machine string `json:"machine,omitempty"` | ||
24 | + // 计划的产品名称 | ||
25 | + PlanProductName string `json:"planProductName,omitempty"` | ||
26 | + // 计划投入 | ||
27 | + *domain.UnitQuantity | ||
28 | + // 计划状态 (1:上线 2:下线 默认下线) | ||
29 | + PlanDispatchStatus int `json:"planDispatchStatus,omitempty"` | ||
30 | + // 工作位置 | ||
31 | + //WorkStation *WorkStation `json:"workStation,omitempty"` | ||
32 | + // 总产能 | ||
33 | + //TotalProduct float64 `json:"totalProduct"` | ||
34 | + // 备注 | ||
35 | + Remark string `json:"remark,omitempty"` | ||
36 | + // 组织名称 | ||
37 | + OrgName string `json:"orgName"` | ||
38 | + // 权限标识 (当前登录组织匹配为true,否则false) | ||
39 | + AuthFlag bool `json:"authFlag"` | ||
40 | +} | ||
41 | + | ||
42 | +func (d *ProductPlanDispatchRecordDto) LoadDto(m *domain.ProductPlanDispatchRecord, orgId int) *ProductPlanDispatchRecordDto { | ||
43 | + d.ProductPlanId = m.ProductPlanDispatchRecordId | ||
44 | + d.BatchNumber = m.BatchNumber | ||
45 | + d.ProductDate = m.ProductDate.Format("2006/01/02") | ||
46 | + d.WorkStation = m.WorkStation | ||
47 | + d.WorkOn = m.PlanDispatchRecordExt.WorkOn | ||
48 | + d.PlanProductName = m.PlanDispatchRecordExt.PlanProductName | ||
49 | + //d.UnitQuantity = m.PlanDevoted | ||
50 | + d.PlanDispatchStatus = m.PlanDispatchStatus | ||
51 | + //d.TotalProduct = 0 | ||
52 | + d.Machine = m.PlanDispatchRecordExt.Machine | ||
53 | + d.Remark = m.PlanDispatchRecordExt.Remark | ||
54 | + d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | ||
55 | + if m.Ext != nil { | ||
56 | + d.OrgName = m.Ext.OrgName | ||
57 | + } | ||
58 | + workOnDesc := domain.WorkOnDescription(m.PlanDispatchRecordExt.WorkOn) | ||
59 | + d.WorkOnDescription = strings.Join(workOnDesc, ",") | ||
60 | + return d | ||
61 | +} |
@@ -23,9 +23,13 @@ type ProductPlanDto struct { | @@ -23,9 +23,13 @@ type ProductPlanDto struct { | ||
23 | // 上班班次描述 | 23 | // 上班班次描述 |
24 | WorkOnDescription string `json:"workOnDescription"` | 24 | WorkOnDescription string `json:"workOnDescription"` |
25 | // 机台 (A、B、C、D 区分机器大小) | 25 | // 机台 (A、B、C、D 区分机器大小) |
26 | - Machine string `json:"machine,omitempty"` | 26 | + Machine string `json:"machine"` |
27 | + // 产品ID | ||
28 | + ProductId int `json:"productId,omitempty"` | ||
27 | // 计划的产品名称 | 29 | // 计划的产品名称 |
28 | PlanProductName string `json:"planProductName,omitempty"` | 30 | PlanProductName string `json:"planProductName,omitempty"` |
31 | + // 投入量规格 默认份 | ||
32 | + DevotedUnit string `json:"devotedUnit" ` | ||
29 | // 计划投入 | 33 | // 计划投入 |
30 | *domain.UnitQuantity | 34 | *domain.UnitQuantity |
31 | // 计划状态 (1:上线 2:下线 默认下线) | 35 | // 计划状态 (1:上线 2:下线 默认下线) |
@@ -45,12 +49,19 @@ type ProductPlanDto struct { | @@ -45,12 +49,19 @@ type ProductPlanDto struct { | ||
45 | func (d *ProductPlanDto) LoadDto(m *domain.ProductPlan, orgId int) *ProductPlanDto { | 49 | func (d *ProductPlanDto) LoadDto(m *domain.ProductPlan, orgId int) *ProductPlanDto { |
46 | d.ProductPlanId = m.ProductPlanId | 50 | d.ProductPlanId = m.ProductPlanId |
47 | d.BatchNumber = m.BatchNumber | 51 | d.BatchNumber = m.BatchNumber |
48 | - d.ProductDate = m.ProductDate.Format("2006/01/02") | 52 | + d.ProductDate = m.ProductDate.Format("2006-01-02") |
49 | d.WorkshopId = m.Workshop.WorkshopId | 53 | d.WorkshopId = m.Workshop.WorkshopId |
50 | d.WorkshopName = m.Workshop.WorkshopName | 54 | d.WorkshopName = m.Workshop.WorkshopName |
51 | d.WorkOn = m.WorkOn | 55 | d.WorkOn = m.WorkOn |
56 | + | ||
57 | + d.Machine = m.Machine | ||
52 | d.PlanProductName = m.PlanProductName | 58 | d.PlanProductName = m.PlanProductName |
53 | d.UnitQuantity = m.PlanDevoted | 59 | d.UnitQuantity = m.PlanDevoted |
60 | + d.DevotedUnit = "份" | ||
61 | + if m.Ext.ProductPlanExt != nil { | ||
62 | + d.DevotedUnit = m.Ext.ProductPlanExt.DevotedUnit | ||
63 | + d.ProductId = m.Ext.ProductPlanExt.ProductId | ||
64 | + } | ||
54 | d.PlanStatus = m.PlanStatus | 65 | d.PlanStatus = m.PlanStatus |
55 | d.TotalProduct = 0 | 66 | d.TotalProduct = 0 |
56 | d.Remark = m.Remark | 67 | d.Remark = m.Remark |
@@ -28,6 +28,8 @@ type SearchProductPlanQuery struct { | @@ -28,6 +28,8 @@ type SearchProductPlanQuery struct { | ||
28 | BatchNumber string `cname:"批号" json:"batchNumber"` | 28 | BatchNumber string `cname:"批号" json:"batchNumber"` |
29 | // 车间名称 | 29 | // 车间名称 |
30 | WorkshopName string `cname:"车间名称" json:"workshopName"` | 30 | WorkshopName string `cname:"车间名称" json:"workshopName"` |
31 | + // 车间ID | ||
32 | + WorkshopId string `cname:"车间ID" json:"workshopId"` | ||
31 | } | 33 | } |
32 | 34 | ||
33 | func (cmd *SearchProductPlanQuery) Valid(validation *validation.Validation) { | 35 | func (cmd *SearchProductPlanQuery) Valid(validation *validation.Validation) { |
@@ -3,6 +3,7 @@ package service | @@ -3,6 +3,7 @@ package service | ||
3 | import ( | 3 | import ( |
4 | "fmt" | 4 | "fmt" |
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/utils/tool_funs" | 7 | "github.com/linmadan/egglib-go/utils/tool_funs" |
7 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | 8 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" |
8 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/command" | 9 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/command" |
@@ -10,7 +11,9 @@ import ( | @@ -10,7 +11,9 @@ import ( | ||
10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/query" | 11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productPlan/query" |
11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | 13 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" |
14 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" | ||
13 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" | 15 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" |
16 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
14 | "time" | 17 | "time" |
15 | ) | 18 | ) |
16 | 19 | ||
@@ -59,6 +62,16 @@ func (productPlanService *ProductPlanService) CreateProductPlan(cmd *command.Cre | @@ -59,6 +62,16 @@ func (productPlanService *ProductPlanService) CreateProductPlan(cmd *command.Cre | ||
59 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 62 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
60 | } | 63 | } |
61 | 64 | ||
65 | + if len(cmd.BatchNumber) == 0 { | ||
66 | + generator := redis.NewPlanBatchCodeCache(cmd.CompanyId) | ||
67 | + code, err := redis.GenCode(generator) | ||
68 | + if err != nil { | ||
69 | + log.Logger.Error(err.Error()) | ||
70 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "服务器异常") | ||
71 | + } | ||
72 | + cmd.BatchNumber = code | ||
73 | + } | ||
74 | + | ||
62 | newProductPlan := &domain.ProductPlan{ | 75 | newProductPlan := &domain.ProductPlan{ |
63 | CompanyId: cmd.CompanyId, | 76 | CompanyId: cmd.CompanyId, |
64 | OrgId: cmd.OrgId, | 77 | OrgId: cmd.OrgId, |
@@ -84,8 +97,10 @@ func (productPlanService *ProductPlanService) CreateProductPlan(cmd *command.Cre | @@ -84,8 +97,10 @@ func (productPlanService *ProductPlanService) CreateProductPlan(cmd *command.Cre | ||
84 | ProductCode: product.ProductCode, | 97 | ProductCode: product.ProductCode, |
85 | ProductName: product.ProductName, | 98 | ProductName: product.ProductName, |
86 | //ProductSpec: product.ProductSpec, | 99 | //ProductSpec: product.ProductSpec, |
100 | + DevotedUnit: cmd.DevotedUnit, | ||
87 | }), | 101 | }), |
88 | } | 102 | } |
103 | + | ||
89 | if cmd.Weight > 0 { | 104 | if cmd.Weight > 0 { |
90 | newProductPlan.PlanDevoted.Weight = cmd.Weight | 105 | newProductPlan.PlanDevoted.Weight = cmd.Weight |
91 | } | 106 | } |
@@ -259,7 +274,7 @@ func (productPlanService *ProductPlanService) UpdateProductPlan(cmd *command.Upd | @@ -259,7 +274,7 @@ func (productPlanService *ProductPlanService) UpdateProductPlan(cmd *command.Upd | ||
259 | ProductId: product.ProductId, | 274 | ProductId: product.ProductId, |
260 | ProductCode: product.ProductCode, | 275 | ProductCode: product.ProductCode, |
261 | ProductName: product.ProductName, | 276 | ProductName: product.ProductName, |
262 | - //ProductSpec: product.ProductSpec, | 277 | + DevotedUnit: cmd.DevotedUnit, |
263 | }) | 278 | }) |
264 | productPlan.PlanDevoted.UnitWeight = product.ProductSpec.UnitWeight | 279 | productPlan.PlanDevoted.UnitWeight = product.ProductSpec.UnitWeight |
265 | cmd.PlanProductName = product.ProductName | 280 | cmd.PlanProductName = product.ProductName |
@@ -339,9 +354,9 @@ func (productPlanService *ProductPlanService) SetOffline(setOfflineCommand *comm | @@ -339,9 +354,9 @@ func (productPlanService *ProductPlanService) SetOffline(setOfflineCommand *comm | ||
339 | transactionContext.RollbackTransaction() | 354 | transactionContext.RollbackTransaction() |
340 | }() | 355 | }() |
341 | 356 | ||
342 | - var productPlanRepository domain.ProductPlanRepository | ||
343 | - var productPlan *domain.ProductPlan | ||
344 | - productPlanRepository, productPlan, _ = factory.FastPgProductPlan(transactionContext, setOfflineCommand.ProductPlanId) | 357 | + var productPlanRepository domain.ProductPlanDispatchRecordRepository |
358 | + var productPlan *domain.ProductPlanDispatchRecord | ||
359 | + productPlanRepository, productPlan, _ = factory.FastPgProductPlanDispatchRecord(transactionContext, setOfflineCommand.ProductPlanId) | ||
345 | 360 | ||
346 | if err = productPlan.ChangeStatus(domain.PlanOffline); err != nil { | 361 | if err = productPlan.ChangeStatus(domain.PlanOffline); err != nil { |
347 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 362 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
@@ -372,45 +387,33 @@ func (productPlanService *ProductPlanService) SetOnline(cmd *command.SetOnlineCo | @@ -372,45 +387,33 @@ func (productPlanService *ProductPlanService) SetOnline(cmd *command.SetOnlineCo | ||
372 | defer func() { | 387 | defer func() { |
373 | transactionContext.RollbackTransaction() | 388 | transactionContext.RollbackTransaction() |
374 | }() | 389 | }() |
375 | - var productPlanRepository domain.ProductPlanRepository | ||
376 | - var productPlan *domain.ProductPlan | ||
377 | 390 | ||
378 | - productPlanRepository, productPlan, err = factory.FastPgProductPlan(transactionContext, cmd.ProductPlanId) | ||
379 | - if err != nil { | ||
380 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
381 | - } | ||
382 | - | ||
383 | - if err = productPlan.ChangeStatus(domain.PlanOnline); err != nil { | ||
384 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
385 | - } | ||
386 | - | ||
387 | - var workshop *domain.Workshop | ||
388 | - _, workshop, err = factory.FastPgWorkshop(transactionContext, cmd.WorkshopId) | ||
389 | - if err != nil { | ||
390 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
391 | - } | 391 | + var productPlan *domain.ProductPlan |
392 | 392 | ||
393 | - line, section, err := workshop.FindSectionById(cmd.SectionId) | 393 | + _, productPlan, err = factory.FastPgProductPlan(transactionContext, cmd.ProductPlanId) |
394 | if err != nil { | 394 | if err != nil { |
395 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 395 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
396 | } | 396 | } |
397 | 397 | ||
398 | + cmd.WorkshopId = productPlan.Workshop.WorkshopId | ||
398 | var workStation *domain.WorkStation | 399 | var workStation *domain.WorkStation |
399 | - workStation, err = workshop.FindWorkStation(workshop.WorkshopId, line.LineId, section.SectionId) | 400 | + _, workStation, err = factory.FastPgWorkstation(transactionContext, cmd.WorkshopId, cmd.LineId, cmd.SectionId) |
400 | if err != nil { | 401 | if err != nil { |
401 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 402 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
402 | } | 403 | } |
403 | 404 | ||
404 | - productPlan.WorkStation = workStation | 405 | + var productPlanDispatch *domain.ProductPlanDispatchRecord |
406 | + productPlanDispatch = domain.NewProductPlanDispatchRecord(productPlan, workStation) | ||
405 | 407 | ||
406 | - if productPlan, err = productPlanRepository.Save(productPlan); err != nil { | 408 | + var productPlanDispatchRepository, _, _ = factory.FastPgProductPlanDispatchRecord(transactionContext, 0) |
409 | + if productPlanDispatch, err = productPlanDispatchRepository.Save(productPlanDispatch); err != nil { | ||
407 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 410 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
408 | } | 411 | } |
409 | 412 | ||
410 | if err := transactionContext.CommitTransaction(); err != nil { | 413 | if err := transactionContext.CommitTransaction(); err != nil { |
411 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 414 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
412 | } | 415 | } |
413 | - return productPlan, nil | 416 | + return productPlanDispatch, nil |
414 | } | 417 | } |
415 | 418 | ||
416 | // 换单 | 419 | // 换单 |
@@ -428,9 +431,10 @@ func (productPlanService *ProductPlanService) Exchange(switchCommand *command.Sw | @@ -428,9 +431,10 @@ func (productPlanService *ProductPlanService) Exchange(switchCommand *command.Sw | ||
428 | defer func() { | 431 | defer func() { |
429 | transactionContext.RollbackTransaction() | 432 | transactionContext.RollbackTransaction() |
430 | }() | 433 | }() |
431 | - var fromPlan, toPlan *domain.ProductPlan | ||
432 | - var productPlanRepository domain.ProductPlanRepository | ||
433 | - productPlanRepository, fromPlan, err = factory.FastPgProductPlan(transactionContext, switchCommand.FromProductPlanId) | 434 | + var fromPlan *domain.ProductPlanDispatchRecord |
435 | + var toPlan *domain.ProductPlan | ||
436 | + var productPlanDispatchRecordRepository domain.ProductPlanDispatchRecordRepository | ||
437 | + productPlanDispatchRecordRepository, fromPlan, err = factory.FastPgProductPlanDispatchRecord(transactionContext, switchCommand.FromProductPlanDispatchRecordId) | ||
434 | if err != nil { | 438 | if err != nil { |
435 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 439 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
436 | } | 440 | } |
@@ -443,22 +447,18 @@ func (productPlanService *ProductPlanService) Exchange(switchCommand *command.Sw | @@ -443,22 +447,18 @@ func (productPlanService *ProductPlanService) Exchange(switchCommand *command.Sw | ||
443 | if err = fromPlan.ChangeStatus(domain.PlanOffline); err != nil { | 447 | if err = fromPlan.ChangeStatus(domain.PlanOffline); err != nil { |
444 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 448 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
445 | } | 449 | } |
446 | - if _, err = productPlanRepository.Save(fromPlan); err != nil { | ||
447 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
448 | - } | ||
449 | 450 | ||
450 | - var workStation *domain.WorkStation | ||
451 | - fromWorkStation := fromPlan.WorkStation | ||
452 | - _, workStation, err = factory.FastPgWorkstation(transactionContext, fromWorkStation.WorkshopId, fromWorkStation.LineId, fromWorkStation.SectionId) | ||
453 | - if err != nil { | ||
454 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 451 | + // 新的上线、如果存在一条同一个批次、工段的调度记录 则不做更新 |
452 | + if fromPlan.PlanDispatchRecordExt.ProductPlanId == toPlan.ProductPlanId && fromPlan.ProductDate == toPlan.ProductDate { | ||
453 | + log.Logger.Info("换单的批次与当前批次一致,跳过") | ||
454 | + return struct{}{}, nil | ||
455 | } | 455 | } |
456 | - // 计划上线 | ||
457 | - toPlan.WorkStation = workStation | ||
458 | - if err = toPlan.ChangeStatus(domain.PlanOnline); err != nil { | 456 | + |
457 | + if _, err = productPlanDispatchRecordRepository.Save(fromPlan); err != nil { | ||
459 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 458 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
460 | } | 459 | } |
461 | - if _, err = productPlanRepository.Save(toPlan); err != nil { | 460 | + toProductPlanDispatchRecord := domain.NewProductPlanDispatchRecord(toPlan, fromPlan.WorkStation) |
461 | + if _, err = productPlanDispatchRecordRepository.Save(toProductPlanDispatchRecord); err != nil { | ||
462 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 462 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
463 | } | 463 | } |
464 | 464 | ||
@@ -483,10 +483,17 @@ func (productPlanService *ProductPlanService) ReceiveMaterial(receiveMaterialCom | @@ -483,10 +483,17 @@ func (productPlanService *ProductPlanService) ReceiveMaterial(receiveMaterialCom | ||
483 | defer func() { | 483 | defer func() { |
484 | transactionContext.RollbackTransaction() | 484 | transactionContext.RollbackTransaction() |
485 | }() | 485 | }() |
486 | + | ||
487 | + productRecordService, _ := domainService.NewPGProductRecordService(transactionContext.(*pg.TransactionContext)) | ||
488 | + | ||
489 | + _, err = productRecordService.SubmitProductRecord(domain.RecordTypeReceiveMaterial, tool_funs.SimpleStructToMap(receiveMaterialCommand)) | ||
490 | + if err != nil { | ||
491 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
492 | + } | ||
486 | if err := transactionContext.CommitTransaction(); err != nil { | 493 | if err := transactionContext.CommitTransaction(); err != nil { |
487 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 494 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
488 | } | 495 | } |
489 | - return nil, nil | 496 | + return struct{}{}, nil |
490 | } | 497 | } |
491 | 498 | ||
492 | // 退料 | 499 | // 退料 |
@@ -504,10 +511,18 @@ func (productPlanService *ProductPlanService) ReturnMaterial(returnMaterialComma | @@ -504,10 +511,18 @@ func (productPlanService *ProductPlanService) ReturnMaterial(returnMaterialComma | ||
504 | defer func() { | 511 | defer func() { |
505 | transactionContext.RollbackTransaction() | 512 | transactionContext.RollbackTransaction() |
506 | }() | 513 | }() |
514 | + | ||
515 | + productRecordService, _ := domainService.NewPGProductRecordService(transactionContext.(*pg.TransactionContext)) | ||
516 | + | ||
517 | + _, err = productRecordService.SubmitProductRecord(domain.RecordTypeReturnMaterial, tool_funs.SimpleStructToMap(returnMaterialCommand)) | ||
518 | + if err != nil { | ||
519 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
520 | + } | ||
521 | + | ||
507 | if err := transactionContext.CommitTransaction(); err != nil { | 522 | if err := transactionContext.CommitTransaction(); err != nil { |
508 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 523 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
509 | } | 524 | } |
510 | - return nil, nil | 525 | + return struct{}{}, nil |
511 | } | 526 | } |
512 | 527 | ||
513 | // 提交成品记录 (成品 二级品) | 528 | // 提交成品记录 (成品 二级品) |
@@ -525,10 +540,59 @@ func (productPlanService *ProductPlanService) SubmitProductRecord(submitProductR | @@ -525,10 +540,59 @@ func (productPlanService *ProductPlanService) SubmitProductRecord(submitProductR | ||
525 | defer func() { | 540 | defer func() { |
526 | transactionContext.RollbackTransaction() | 541 | transactionContext.RollbackTransaction() |
527 | }() | 542 | }() |
543 | + | ||
544 | + productRecordService, _ := domainService.NewPGProductRecordService(transactionContext.(*pg.TransactionContext)) | ||
545 | + | ||
546 | + _, err = productRecordService.SubmitProductRecord(domain.RecordTypeSecondLevelWeigh, tool_funs.SimpleStructToMap(submitProductRecordCommand)) | ||
547 | + if err != nil { | ||
548 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
549 | + } | ||
528 | if err := transactionContext.CommitTransaction(); err != nil { | 550 | if err := transactionContext.CommitTransaction(); err != nil { |
529 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 551 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
530 | } | 552 | } |
531 | - return nil, nil | 553 | + return struct{}{}, nil |
554 | +} | ||
555 | + | ||
556 | +// 搜索生产上线计划记录 | ||
557 | +func (productPlanService *ProductPlanService) SearchProductPlanOnlineDispatchRecord(operateInfo *domain.OperateInfo, cmd *query.SearchProductPlanQuery) (int64, interface{}, error) { | ||
558 | + if err := cmd.ValidateQuery(); err != nil { | ||
559 | + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
560 | + } | ||
561 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
562 | + if err != nil { | ||
563 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
564 | + } | ||
565 | + if err := transactionContext.StartTransaction(); err != nil { | ||
566 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
567 | + } | ||
568 | + defer func() { | ||
569 | + transactionContext.RollbackTransaction() | ||
570 | + }() | ||
571 | + var productPlanRepository domain.ProductPlanDispatchRecordRepository | ||
572 | + if value, err := factory.CreateProductPlanDispatchRecordRepository(map[string]interface{}{ | ||
573 | + "transactionContext": transactionContext, | ||
574 | + }); err != nil { | ||
575 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
576 | + } else { | ||
577 | + productPlanRepository = value | ||
578 | + } | ||
579 | + queryOptions := utils.ObjectToMap(cmd) | ||
580 | + queryOptions["planDispatchStatus"] = 1 | ||
581 | + count, productPlans, err := productPlanRepository.Find(queryOptions) | ||
582 | + if err != nil { | ||
583 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
584 | + } | ||
585 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
586 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
587 | + } | ||
588 | + var result = make([]*dto.ProductPlanDispatchRecordDto, 0) | ||
589 | + for i := range productPlans { | ||
590 | + item := productPlans[i] | ||
591 | + newItem := &dto.ProductPlanDispatchRecordDto{} | ||
592 | + newItem.LoadDto(item, operateInfo.OrgId) | ||
593 | + result = append(result, newItem) | ||
594 | + } | ||
595 | + return count, result, nil | ||
532 | } | 596 | } |
533 | 597 | ||
534 | func NewProductPlanService(options map[string]interface{}) *ProductPlanService { | 598 | func NewProductPlanService(options map[string]interface{}) *ProductPlanService { |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type ApproveProductRecordCommand struct { | ||
12 | + // 生产记录ID | ||
13 | + ProductRecordId int `cname:"生产记录ID" json:"productRecordId" valid:"Required"` | ||
14 | + // 审核人 | ||
15 | + ApproveUserId int `cname:"审核人" json:"approveUserId" valid:"Required"` | ||
16 | + // 审核后重量 | ||
17 | + WeighAfter float64 `cname:"审核后重量" json:"weighAfter" valid:"Required"` | ||
18 | + // 审核时间 | ||
19 | + //ApproveAt string `cname:"审核时间" json:"approveAt" valid:"Required"` | ||
20 | +} | ||
21 | + | ||
22 | +func (approveProductRecordCommand *ApproveProductRecordCommand) Valid(validation *validation.Validation) { | ||
23 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
24 | +} | ||
25 | + | ||
26 | +func (approveProductRecordCommand *ApproveProductRecordCommand) ValidateCommand() error { | ||
27 | + valid := validation.Validation{} | ||
28 | + b, err := valid.Valid(approveProductRecordCommand) | ||
29 | + if err != nil { | ||
30 | + return err | ||
31 | + } | ||
32 | + if !b { | ||
33 | + elem := reflect.TypeOf(approveProductRecordCommand).Elem() | ||
34 | + for _, validErr := range valid.Errors { | ||
35 | + field, isExist := elem.FieldByName(validErr.Field) | ||
36 | + if isExist { | ||
37 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
38 | + } else { | ||
39 | + return fmt.Errorf(validErr.Message) | ||
40 | + } | ||
41 | + } | ||
42 | + } | ||
43 | + return nil | ||
44 | +} |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type CreateProductRecordCommand struct { | ||
12 | + // 生产记录ID | ||
13 | + ProductRecordId int `cname:"生产记录ID" json:"productRecordId" valid:"Required"` | ||
14 | +} | ||
15 | + | ||
16 | +func (createProductRecordCommand *CreateProductRecordCommand) Valid(validation *validation.Validation) { | ||
17 | + validation.SetError("CustomValid", "未实现的自定义认证") | ||
18 | +} | ||
19 | + | ||
20 | +func (createProductRecordCommand *CreateProductRecordCommand) ValidateCommand() error { | ||
21 | + valid := validation.Validation{} | ||
22 | + b, err := valid.Valid(createProductRecordCommand) | ||
23 | + if err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + if !b { | ||
27 | + elem := reflect.TypeOf(createProductRecordCommand).Elem() | ||
28 | + for _, validErr := range valid.Errors { | ||
29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
30 | + if isExist { | ||
31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
32 | + } else { | ||
33 | + return fmt.Errorf(validErr.Message) | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + return nil | ||
38 | +} |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/beego/beego/v2/core/validation" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
7 | + "reflect" | ||
8 | + "strings" | ||
9 | +) | ||
10 | + | ||
11 | +type ProductRecordStaticsCommand struct { | ||
12 | + *domain.ProductRecord | ||
13 | +} | ||
14 | + | ||
15 | +// Type is a string value that indicates the type of the task. | ||
16 | +//func (t *ProductRecordStaticsCommand) Type() string | ||
17 | + | ||
18 | +// Payload is the data needed for task execution. | ||
19 | +//func (t *ProductRecordStaticsCommand) Payload() []byte | ||
20 | + | ||
21 | +func (removeProductRecordCommand *ProductRecordStaticsCommand) Valid(validation *validation.Validation) { | ||
22 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
23 | +} | ||
24 | + | ||
25 | +func (removeProductRecordCommand *ProductRecordStaticsCommand) ValidateCommand() error { | ||
26 | + valid := validation.Validation{} | ||
27 | + b, err := valid.Valid(removeProductRecordCommand) | ||
28 | + if err != nil { | ||
29 | + return err | ||
30 | + } | ||
31 | + if !b { | ||
32 | + elem := reflect.TypeOf(removeProductRecordCommand).Elem() | ||
33 | + for _, validErr := range valid.Errors { | ||
34 | + field, isExist := elem.FieldByName(validErr.Field) | ||
35 | + if isExist { | ||
36 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
37 | + } else { | ||
38 | + return fmt.Errorf(validErr.Message) | ||
39 | + } | ||
40 | + } | ||
41 | + } | ||
42 | + return nil | ||
43 | +} |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type RemoveProductRecordCommand struct { | ||
12 | + // 生产记录ID | ||
13 | + ProductRecordId int `cname:"生产记录ID" json:"productRecordId" valid:"Required"` | ||
14 | +} | ||
15 | + | ||
16 | +func (removeProductRecordCommand *RemoveProductRecordCommand) Valid(validation *validation.Validation) { | ||
17 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
18 | +} | ||
19 | + | ||
20 | +func (removeProductRecordCommand *RemoveProductRecordCommand) ValidateCommand() error { | ||
21 | + valid := validation.Validation{} | ||
22 | + b, err := valid.Valid(removeProductRecordCommand) | ||
23 | + if err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + if !b { | ||
27 | + elem := reflect.TypeOf(removeProductRecordCommand).Elem() | ||
28 | + for _, validErr := range valid.Errors { | ||
29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
30 | + if isExist { | ||
31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
32 | + } else { | ||
33 | + return fmt.Errorf(validErr.Message) | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + return nil | ||
38 | +} |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type UpdateProductRecordCommand struct { | ||
12 | + // 生产记录ID | ||
13 | + ProductRecordId int `cname:"生产记录ID" json:"productRecordId" valid:"Required"` | ||
14 | +} | ||
15 | + | ||
16 | +func (updateProductRecordCommand *UpdateProductRecordCommand) Valid(validation *validation.Validation) { | ||
17 | + validation.SetError("CustomValid", "未实现的自定义认证") | ||
18 | +} | ||
19 | + | ||
20 | +func (updateProductRecordCommand *UpdateProductRecordCommand) ValidateCommand() error { | ||
21 | + valid := validation.Validation{} | ||
22 | + b, err := valid.Valid(updateProductRecordCommand) | ||
23 | + if err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + if !b { | ||
27 | + elem := reflect.TypeOf(updateProductRecordCommand).Elem() | ||
28 | + for _, validErr := range valid.Errors { | ||
29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
30 | + if isExist { | ||
31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
32 | + } else { | ||
33 | + return fmt.Errorf(validErr.Message) | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + return nil | ||
38 | +} |
1 | +package dto | ||
2 | + | ||
3 | +import "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
4 | + | ||
5 | +type EmployeeProductRecordDto struct { | ||
6 | + // 员工产能记录ID | ||
7 | + EmployeeProductRecordId int `json:"productRecordId"` | ||
8 | + // 生产工人 | ||
9 | + ProductWorker *domain.User `json:"productWorker,omitempty"` | ||
10 | + *domain.WorkStation | ||
11 | + // 上班班次 1:全天 2:白班 4:中班 8:夜班 | ||
12 | + WorkOn int `json:"workOn"` | ||
13 | + // 生产日期 | ||
14 | + //ProductDate string `json:"productDate"` | ||
15 | + // 计划的产品名称 | ||
16 | + PlanProductName string `json:"planProductName,omitempty"` | ||
17 | + // 批号 | ||
18 | + BatchNumber string `json:"batchNumber,omitempty"` | ||
19 | + // 参与类型 1:正常 2:支援 | ||
20 | + ParticipateType int `json:"participateType"` | ||
21 | + // 产能 | ||
22 | + ProductWeigh float64 `json:"productWeigh"` | ||
23 | + // 二级品产能 | ||
24 | + SecondLevelWeigh float64 `json:"secondLevelWeigh"` | ||
25 | + // 创建时间 | ||
26 | + CreatedAt string `json:"createdAt,omitempty"` | ||
27 | + // 组织名称 | ||
28 | + OrgName string `json:"orgName"` | ||
29 | + // 权限标识 (当前登录组织匹配为true,否则false) | ||
30 | + AuthFlag bool `json:"authFlag"` | ||
31 | + // 合格率 百分比 | ||
32 | + QualificationRate int `json:"qualificationRate"` | ||
33 | + // 考勤类型 1.正常 2.支援 | ||
34 | + ParticipateTypeDescription string `json:"participateTypeDescription"` | ||
35 | + // 员工类型描述 1:固定 2:派遣 3.临时 | ||
36 | + EmployeeTypeDescription string `json:"employeeTypeDescription"` | ||
37 | + // 上班班次 1:全天 2:白班 4:中班 8:夜班 | ||
38 | + WorkOnDescription string `json:"workOnDescription,omitempty"` | ||
39 | +} | ||
40 | + | ||
41 | +func (d *EmployeeProductRecordDto) LoadDto(m *domain.EmployeeProductRecord, orgId int) *EmployeeProductRecordDto { | ||
42 | + d.EmployeeProductRecordId = m.EmployeeProductRecordId | ||
43 | + d.ProductWorker = m.ProductWorker | ||
44 | + d.WorkStation = m.WorkStation | ||
45 | + d.WorkOn = m.WorkOn | ||
46 | + | ||
47 | + d.PlanProductName = m.ProductRecordInfo.PlanProductName | ||
48 | + d.BatchNumber = m.ProductRecordInfo.BatchNumber | ||
49 | + d.ParticipateType = m.ParticipateType | ||
50 | + d.ProductWeigh = m.RealProductWeigh() | ||
51 | + d.SecondLevelWeigh = m.SecondLevelWeigh | ||
52 | + d.QualificationRate = m.QualificationRate() | ||
53 | + d.CreatedAt = m.CreatedAt.Format("2006-01-02") | ||
54 | + d.ParticipateTypeDescription = domain.ParticipateTypeDescription(m.ParticipateType) | ||
55 | + d.EmployeeTypeDescription = domain.EmployeeTypeDescription(m.ProductWorker.EmployeeType) | ||
56 | + d.WorkOnDescription = domain.WorkOnDescriptions(m.WorkOn) | ||
57 | + d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | ||
58 | + if m.Ext != nil { | ||
59 | + d.OrgName = m.Ext.OrgName | ||
60 | + } | ||
61 | + return d | ||
62 | +} |
1 | +package dto | ||
2 | + | ||
3 | +import ( | ||
4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
5 | + "time" | ||
6 | +) | ||
7 | + | ||
8 | +// 二级品记录 | ||
9 | +type ProductLevelTwoRecord struct { | ||
10 | + // 生产记录ID | ||
11 | + ProductRecordId int `json:"productRecordId,omitempty"` | ||
12 | + // 生产工人 | ||
13 | + ProductWorker *domain.User `json:"productWorker,omitempty"` | ||
14 | + *domain.WorkStation | ||
15 | + // 上班班次 1:全天 2:白班 4:中班 8:夜班 | ||
16 | + WorkOn int `json:"workOn"` | ||
17 | + // 产能 - 审核前 | ||
18 | + WeighBefore float64 `json:"weighBefore"` | ||
19 | + // 产能-审核后 | ||
20 | + WeighAfter float64 `json:"weighAfter"` | ||
21 | + // 审核状态 1:未审核 2:已审核 | ||
22 | + ApproveStatus int `json:"approveStatus"` | ||
23 | + // 审核人 | ||
24 | + ApproveUser *domain.User `json:"approveUser"` | ||
25 | + // 审核时间 | ||
26 | + ApproveAt string `json:"approveAt"` | ||
27 | + // 计划的产品名称 | ||
28 | + PlanProductName string `json:"planProductName,omitempty"` | ||
29 | + // 批号 | ||
30 | + BatchNumber string `json:"batchNumber,omitempty"` | ||
31 | + | ||
32 | + // 创建日期 | ||
33 | + CreatedDate string `json:"createdDate,omitempty"` | ||
34 | + // 创建时间 | ||
35 | + CreatedAt string `json:"createdAt,omitempty"` | ||
36 | + // 组织名称 | ||
37 | + OrgName string `json:"orgName"` | ||
38 | + // 权限标识 (当前登录组织匹配为true,否则false) | ||
39 | + AuthFlag bool `json:"authFlag"` | ||
40 | +} | ||
41 | + | ||
42 | +func (d *ProductLevelTwoRecord) LoadDto(m *domain.ProductRecord, orgId int) *ProductLevelTwoRecord { | ||
43 | + d.ProductRecordId = m.ProductRecordId | ||
44 | + d.ProductWorker = m.ProductWorker | ||
45 | + d.WorkStation = m.WorkStation | ||
46 | + d.WeighBefore = m.ProductRecordInfo.WeighBefore | ||
47 | + d.WeighAfter = m.ProductRecordInfo.WeighAfter | ||
48 | + d.ApproveStatus = m.ProductRecordInfo.ApproveStatus | ||
49 | + if m.ProductRecordInfo.ApproveAt > 0 { | ||
50 | + d.ApproveAt = time.Unix(m.ProductRecordInfo.ApproveAt, 0).Format("2006-01-02 15:04:05") | ||
51 | + d.ApproveUser = m.ProductRecordInfo.ApproveUser | ||
52 | + } | ||
53 | + d.PlanProductName = m.ProductRecordInfo.PlanProductName | ||
54 | + d.BatchNumber = m.ProductRecordInfo.BatchNumber | ||
55 | + d.CreatedDate = m.CreatedAt.Format("2006-01-02") | ||
56 | + d.CreatedAt = m.CreatedAt.Format("2006-01-02 15:04:05") | ||
57 | + d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | ||
58 | + if m.Ext != nil { | ||
59 | + d.OrgName = m.Ext.OrgName | ||
60 | + } | ||
61 | + return d | ||
62 | +} |
1 | +package dto | ||
2 | + | ||
3 | +import "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
4 | + | ||
5 | +type WorkshopProductRecordDto struct { | ||
6 | + // 员工产能记录ID | ||
7 | + WorkshopProductRecordId int `json:"productRecordId"` | ||
8 | + // 生产工人 | ||
9 | + //ProductWorker *domain.User `json:"productWorker,omitempty"` | ||
10 | + *domain.WorkStation | ||
11 | + // 生产日期 | ||
12 | + //ProductDate string `json:"productDate"` | ||
13 | + // 计划的产品名称 | ||
14 | + PlanProductName string `json:"planProductName,omitempty"` | ||
15 | + // 批号 | ||
16 | + BatchNumber string `json:"batchNumber,omitempty"` | ||
17 | + // 参与类型 1:正常 2:支援 | ||
18 | + //ParticipateType int `json:"participateType"` | ||
19 | + // 投入量 | ||
20 | + DevotedProductWeigh float64 `json:"devotedProductWeigh"` | ||
21 | + // 产能 | ||
22 | + ProductWeigh float64 `json:"productWeigh"` | ||
23 | + // 二级品产能 | ||
24 | + SecondLevelWeigh float64 `json:"secondLevelWeigh"` | ||
25 | + // 创建时间 | ||
26 | + CreatedAt string `json:"createdAt,omitempty"` | ||
27 | + // 组织名称 | ||
28 | + OrgName string `json:"orgName"` | ||
29 | + // 权限标识 (当前登录组织匹配为true,否则false) | ||
30 | + AuthFlag bool `json:"authFlag"` | ||
31 | + // 合格率 百分比 | ||
32 | + QualificationRate int `json:"qualificationRate"` | ||
33 | +} | ||
34 | + | ||
35 | +func (d *WorkshopProductRecordDto) LoadDto(m *domain.WorkshopProductRecord, orgId int) *WorkshopProductRecordDto { | ||
36 | + d.WorkshopProductRecordId = m.WorkshopProductRecordId | ||
37 | + //d.ProductWorker = m.ProductWorker | ||
38 | + d.WorkStation = m.WorkStation | ||
39 | + d.PlanProductName = m.ProductRecordInfo.PlanProductName | ||
40 | + d.BatchNumber = m.ProductRecordInfo.BatchNumber | ||
41 | + //d.ParticipateType = m.ParticipateType | ||
42 | + d.DevotedProductWeigh = m.DevotedProductWeigh() | ||
43 | + d.ProductWeigh = m.RealProductWeigh() | ||
44 | + d.SecondLevelWeigh = m.SecondLevelWeigh | ||
45 | + d.QualificationRate = m.QualificationRate() | ||
46 | + d.CreatedAt = m.ProductDate | ||
47 | + d.AuthFlag = domain.CheckOrgAuth(orgId, m.OrgId) | ||
48 | + if m.Ext != nil { | ||
49 | + d.OrgName = m.Ext.OrgName | ||
50 | + } | ||
51 | + return d | ||
52 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type GetProductRecordQuery struct { | ||
12 | + // 生产记录ID | ||
13 | + ProductRecordId int `cname:"生产记录ID" json:"productRecordId" valid:"Required"` | ||
14 | +} | ||
15 | + | ||
16 | +func (getProductRecordQuery *GetProductRecordQuery) Valid(validation *validation.Validation) { | ||
17 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
18 | +} | ||
19 | + | ||
20 | +func (getProductRecordQuery *GetProductRecordQuery) ValidateQuery() error { | ||
21 | + valid := validation.Validation{} | ||
22 | + b, err := valid.Valid(getProductRecordQuery) | ||
23 | + if err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + if !b { | ||
27 | + elem := reflect.TypeOf(getProductRecordQuery).Elem() | ||
28 | + for _, validErr := range valid.Errors { | ||
29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
30 | + if isExist { | ||
31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
32 | + } else { | ||
33 | + return fmt.Errorf(validErr.Message) | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + return nil | ||
38 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type ListProductRecordQuery struct { | ||
12 | + // 查询偏离量 | ||
13 | + Offset int `cname:"查询偏离量" json:"offset" valid:"Required"` | ||
14 | + // 查询限制 | ||
15 | + Limit int `cname:"查询限制" json:"limit" valid:"Required"` | ||
16 | +} | ||
17 | + | ||
18 | +func (listProductRecordQuery *ListProductRecordQuery) Valid(validation *validation.Validation) { | ||
19 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
20 | +} | ||
21 | + | ||
22 | +func (listProductRecordQuery *ListProductRecordQuery) ValidateQuery() error { | ||
23 | + valid := validation.Validation{} | ||
24 | + b, err := valid.Valid(listProductRecordQuery) | ||
25 | + if err != nil { | ||
26 | + return err | ||
27 | + } | ||
28 | + if !b { | ||
29 | + elem := reflect.TypeOf(listProductRecordQuery).Elem() | ||
30 | + for _, validErr := range valid.Errors { | ||
31 | + field, isExist := elem.FieldByName(validErr.Field) | ||
32 | + if isExist { | ||
33 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
34 | + } else { | ||
35 | + return fmt.Errorf(validErr.Message) | ||
36 | + } | ||
37 | + } | ||
38 | + } | ||
39 | + return nil | ||
40 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
7 | + "reflect" | ||
8 | + "strings" | ||
9 | + "time" | ||
10 | + | ||
11 | + "github.com/beego/beego/v2/core/validation" | ||
12 | +) | ||
13 | + | ||
14 | +type SearchEmployeeProductRecordQuery struct { | ||
15 | + // 查询偏离量 | ||
16 | + Offset int `cname:"查询偏离量" json:"offset"` | ||
17 | + // 查询限制 | ||
18 | + Limit int `cname:"查询限制" json:"limit"` | ||
19 | + // 当前公司 | ||
20 | + CompanyId int `cname:"当前公司" json:"companyId,omitempty" valid:"Required"` | ||
21 | + // 当前登录的组织 | ||
22 | + OrgId int `cname:"当前登录的组织" json:"orgId,omitempty"` | ||
23 | + // 匹配多个组织 | ||
24 | + InOrgIds []int `cname:"匹配多个组织" json:"inOrgIds,omitempty"` | ||
25 | + // 页码 | ||
26 | + PageNumber int `cname:"页码" json:"pageNumber,omitempty"` | ||
27 | + // 页数 | ||
28 | + PageSize int `cname:"页数" json:"pageSize,omitempty"` | ||
29 | + // 车间名称 | ||
30 | + WorkshopName string `cname:"车间名称" json:"workshopName,omitempty"` | ||
31 | + // 生产线名称 | ||
32 | + LineName string `cname:"生产线名称" json:"lineName,omitempty"` | ||
33 | + // 工段名称 | ||
34 | + SectionName string `cname:"工段名称" json:"sectionName,omitempty"` | ||
35 | + // 姓名 | ||
36 | + UserName string `cname:"姓名" json:"userName"` | ||
37 | + // 员工类型 1:固定 2:派遣 3.临时 | ||
38 | + EmployeeType int `cname:"员工类型 1:固定 2:派遣 3.临时" json:"employeeType"` | ||
39 | + // 开始时间 | ||
40 | + BeginTime string `cname:"开始时间" json:"beginTime"` | ||
41 | + // 结束时间 | ||
42 | + EndTime string `cname:"结束时间" json:"endTime"` | ||
43 | + | ||
44 | + // 开始时间 | ||
45 | + ProductBeginTime time.Time `cname:"开始时间" json:"productBeginTime"` | ||
46 | + // 结束时间 | ||
47 | + ProductEndTime time.Time `cname:"结束时间" json:"productEndTime"` | ||
48 | +} | ||
49 | + | ||
50 | +func (cmd *SearchEmployeeProductRecordQuery) Valid(validation *validation.Validation) { | ||
51 | + cmd.Offset, cmd.Limit = domain.Pagination(cmd.PageNumber, cmd.PageSize) | ||
52 | + var err error | ||
53 | + if len(cmd.BeginTime) > 0 { | ||
54 | + if cmd.ProductBeginTime, err = time.Parse("2006-01-02 15:04:05", cmd.BeginTime); err != nil { | ||
55 | + log.Logger.Error(err.Error()) | ||
56 | + validation.Error("开始时间有误") | ||
57 | + return | ||
58 | + } | ||
59 | + } | ||
60 | + if len(cmd.EndTime) > 0 { | ||
61 | + if cmd.ProductEndTime, err = time.Parse("2006-01-02 15:04:05", cmd.EndTime); err != nil { | ||
62 | + log.Logger.Error(err.Error()) | ||
63 | + validation.Error("结束时间有误") | ||
64 | + return | ||
65 | + } | ||
66 | + } | ||
67 | +} | ||
68 | + | ||
69 | +func (cmd *SearchEmployeeProductRecordQuery) ValidateQuery() error { | ||
70 | + valid := validation.Validation{} | ||
71 | + b, err := valid.Valid(cmd) | ||
72 | + if err != nil { | ||
73 | + return err | ||
74 | + } | ||
75 | + if !b { | ||
76 | + elem := reflect.TypeOf(cmd).Elem() | ||
77 | + for _, validErr := range valid.Errors { | ||
78 | + field, isExist := elem.FieldByName(validErr.Field) | ||
79 | + if isExist { | ||
80 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
81 | + } else { | ||
82 | + return fmt.Errorf(validErr.Message) | ||
83 | + } | ||
84 | + } | ||
85 | + } | ||
86 | + return nil | ||
87 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
7 | + "reflect" | ||
8 | + "strings" | ||
9 | + "time" | ||
10 | + | ||
11 | + "github.com/beego/beego/v2/core/validation" | ||
12 | +) | ||
13 | + | ||
14 | +type SearchProductRecordQuery struct { | ||
15 | + // 查询偏离量 | ||
16 | + Offset int `cname:"查询偏离量" json:"offset"` | ||
17 | + // 查询限制 | ||
18 | + Limit int `cname:"查询限制" json:"limit"` | ||
19 | + // 当前公司 | ||
20 | + CompanyId int `cname:"当前公司" json:"companyId,omitempty" valid:"Required"` | ||
21 | + // 当前登录的组织 | ||
22 | + OrgId int `cname:"当前登录的组织" json:"orgId,omitempty"` | ||
23 | + // 匹配多个组织 | ||
24 | + InOrgIds []int `cname:"匹配多个组织" json:"inOrgIds,omitempty"` | ||
25 | + // 页码 | ||
26 | + PageNumber int `cname:"页码" json:"pageNumber,omitempty"` | ||
27 | + // 页数 | ||
28 | + PageSize int `cname:"页数" json:"pageSize,omitempty"` | ||
29 | + // 车间名称 | ||
30 | + WorkshopName string `cname:"车间名称" json:"workshopName"` | ||
31 | + // 批号 | ||
32 | + BatchNumber string `cname:"批号" json:"batchNumber"` | ||
33 | + // 姓名 | ||
34 | + UserName string `cname:"姓名" json:"userName"` | ||
35 | + // 生产记录类型:1:领料 2:退料 4:称重 8:二级品称重 | ||
36 | + ProductRecordType int `cname:"生产记录类型:1:领料 2:退料 4:称重 8:二级品称重"` | ||
37 | + // 生产线名称 | ||
38 | + LineName string `cname:"生产线名称" json:"lineName,omitempty"` | ||
39 | + // 工段名称 | ||
40 | + SectionName string `cname:"工段名称" json:"sectionName,omitempty"` | ||
41 | + // 员工类型 1:固定 2:派遣 3.临时 | ||
42 | + EmployeeType int `cname:"员工类型 1:固定 2:派遣 3.临时" json:"employeeType"` | ||
43 | + // 开始时间 | ||
44 | + BeginTime string `cname:"开始时间" json:"beginTime"` | ||
45 | + // 结束时间 | ||
46 | + EndTime string `cname:"结束时间" json:"endTime"` | ||
47 | + | ||
48 | + // 开始时间 | ||
49 | + ProductBeginTime time.Time `cname:"开始时间" json:"productBeginTime"` | ||
50 | + // 结束时间 | ||
51 | + ProductEndTime time.Time `cname:"结束时间" json:"productEndTime"` | ||
52 | +} | ||
53 | + | ||
54 | +func (cmd *SearchProductRecordQuery) Valid(validation *validation.Validation) { | ||
55 | + cmd.Offset, cmd.Limit = domain.Pagination(cmd.PageNumber, cmd.PageSize) | ||
56 | + | ||
57 | + var err error | ||
58 | + if len(cmd.BeginTime) > 0 { | ||
59 | + if cmd.ProductBeginTime, err = time.Parse("2006-01-02 15:04:05", cmd.BeginTime); err != nil { | ||
60 | + log.Logger.Error(err.Error()) | ||
61 | + validation.Error("开始时间有误") | ||
62 | + return | ||
63 | + } | ||
64 | + } | ||
65 | + if len(cmd.EndTime) > 0 { | ||
66 | + if cmd.ProductEndTime, err = time.Parse("2006-01-02 15:04:05", cmd.EndTime); err != nil { | ||
67 | + log.Logger.Error(err.Error()) | ||
68 | + validation.Error("结束时间有误") | ||
69 | + return | ||
70 | + } | ||
71 | + } | ||
72 | +} | ||
73 | + | ||
74 | +func (cmd *SearchProductRecordQuery) ValidateQuery() error { | ||
75 | + valid := validation.Validation{} | ||
76 | + b, err := valid.Valid(cmd) | ||
77 | + if err != nil { | ||
78 | + return err | ||
79 | + } | ||
80 | + if !b { | ||
81 | + elem := reflect.TypeOf(cmd).Elem() | ||
82 | + for _, validErr := range valid.Errors { | ||
83 | + field, isExist := elem.FieldByName(validErr.Field) | ||
84 | + if isExist { | ||
85 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
86 | + } else { | ||
87 | + return fmt.Errorf(validErr.Message) | ||
88 | + } | ||
89 | + } | ||
90 | + } | ||
91 | + return nil | ||
92 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
7 | + "reflect" | ||
8 | + "strings" | ||
9 | + "time" | ||
10 | + | ||
11 | + "github.com/beego/beego/v2/core/validation" | ||
12 | +) | ||
13 | + | ||
14 | +type SearchWorkshopProductRecordQuery struct { | ||
15 | + // 查询偏离量 | ||
16 | + Offset int `cname:"查询偏离量" json:"offset"` | ||
17 | + // 查询限制 | ||
18 | + Limit int `cname:"查询限制" json:"limit"` | ||
19 | + // 当前公司 | ||
20 | + CompanyId int `cname:"当前公司" json:"companyId,omitempty" valid:"Required"` | ||
21 | + // 当前登录的组织 | ||
22 | + OrgId int `cname:"当前登录的组织" json:"orgId,omitempty"` | ||
23 | + // 匹配多个组织 | ||
24 | + InOrgIds []int `cname:"匹配多个组织" json:"inOrgIds,omitempty"` | ||
25 | + // 页码 | ||
26 | + PageNumber int `cname:"页码" json:"pageNumber,omitempty"` | ||
27 | + // 页数 | ||
28 | + PageSize int `cname:"页数" json:"pageSize,omitempty"` | ||
29 | + // 品名 | ||
30 | + PlanProductName string `cname:"品名" json:"planProductName,omitempty"` | ||
31 | + // 工段名称 | ||
32 | + SectionName string `cname:"工段名称" json:"sectionName,omitempty"` | ||
33 | + // 开始时间 | ||
34 | + BeginTime string `cname:"开始时间" json:"beginTime"` | ||
35 | + // 结束时间 | ||
36 | + EndTime string `cname:"结束时间" json:"endTime"` | ||
37 | + | ||
38 | + // 开始时间 | ||
39 | + ProductBeginTime time.Time `cname:"开始时间" json:"productBeginTime"` | ||
40 | + // 结束时间 | ||
41 | + ProductEndTime time.Time `cname:"结束时间" json:"productEndTime"` | ||
42 | +} | ||
43 | + | ||
44 | +func (cmd *SearchWorkshopProductRecordQuery) Valid(validation *validation.Validation) { | ||
45 | + cmd.Offset, cmd.Limit = domain.Pagination(cmd.PageNumber, cmd.PageSize) | ||
46 | + var err error | ||
47 | + if len(cmd.BeginTime) > 0 { | ||
48 | + if cmd.ProductBeginTime, err = time.Parse("2006-01-02 15:04:05", cmd.BeginTime); err != nil { | ||
49 | + log.Logger.Error(err.Error()) | ||
50 | + validation.Error("开始时间有误") | ||
51 | + return | ||
52 | + } | ||
53 | + } | ||
54 | + if len(cmd.EndTime) > 0 { | ||
55 | + if cmd.ProductEndTime, err = time.Parse("2006-01-02 15:04:05", cmd.EndTime); err != nil { | ||
56 | + log.Logger.Error(err.Error()) | ||
57 | + validation.Error("结束时间有误") | ||
58 | + return | ||
59 | + } | ||
60 | + } | ||
61 | +} | ||
62 | + | ||
63 | +func (cmd *SearchWorkshopProductRecordQuery) ValidateQuery() error { | ||
64 | + valid := validation.Validation{} | ||
65 | + b, err := valid.Valid(cmd) | ||
66 | + if err != nil { | ||
67 | + return err | ||
68 | + } | ||
69 | + if !b { | ||
70 | + elem := reflect.TypeOf(cmd).Elem() | ||
71 | + for _, validErr := range valid.Errors { | ||
72 | + field, isExist := elem.FieldByName(validErr.Field) | ||
73 | + if isExist { | ||
74 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
75 | + } else { | ||
76 | + return fmt.Errorf(validErr.Message) | ||
77 | + } | ||
78 | + } | ||
79 | + } | ||
80 | + return nil | ||
81 | +} |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/linmadan/egglib-go/core/application" | ||
6 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
7 | + "github.com/linmadan/egglib-go/utils/tool_funs" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/command" | ||
10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/dto" | ||
11 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/query" | ||
12 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
13 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
14 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" | ||
15 | + "time" | ||
16 | +) | ||
17 | + | ||
18 | +// 生产记录服务 | ||
19 | +type ProductRecordService struct { | ||
20 | +} | ||
21 | + | ||
22 | +// 生产记录审核 | ||
23 | +func (productRecordService *ProductRecordService) ApproveProductRecord(cmd *command.ApproveProductRecordCommand) (interface{}, error) { | ||
24 | + if err := cmd.ValidateCommand(); err != nil { | ||
25 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
26 | + } | ||
27 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
28 | + if err != nil { | ||
29 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
30 | + } | ||
31 | + if err := transactionContext.StartTransaction(); err != nil { | ||
32 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
33 | + } | ||
34 | + defer func() { | ||
35 | + transactionContext.RollbackTransaction() | ||
36 | + }() | ||
37 | + | ||
38 | + svr, err := domainService.NewPGProductRecordService(transactionContext.(*pgTransaction.TransactionContext)) | ||
39 | + if _, err = svr.Approve(cmd.ProductRecordId, cmd.ApproveUserId, cmd.WeighAfter, time.Now()); err != nil { | ||
40 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
41 | + } | ||
42 | + | ||
43 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
44 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
45 | + } | ||
46 | + return struct{}{}, nil | ||
47 | +} | ||
48 | + | ||
49 | +// 创建生产记录服务 | ||
50 | +func (productRecordService *ProductRecordService) CreateProductRecord(createProductRecordCommand *command.CreateProductRecordCommand) (interface{}, error) { | ||
51 | + if err := createProductRecordCommand.ValidateCommand(); err != nil { | ||
52 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
53 | + } | ||
54 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
55 | + if err != nil { | ||
56 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
57 | + } | ||
58 | + if err := transactionContext.StartTransaction(); err != nil { | ||
59 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
60 | + } | ||
61 | + defer func() { | ||
62 | + transactionContext.RollbackTransaction() | ||
63 | + }() | ||
64 | + newProductRecord := &domain.ProductRecord{ | ||
65 | + ProductRecordId: createProductRecordCommand.ProductRecordId, | ||
66 | + } | ||
67 | + var productRecordRepository domain.ProductRecordRepository | ||
68 | + if value, err := factory.CreateProductRecordRepository(map[string]interface{}{ | ||
69 | + "transactionContext": transactionContext, | ||
70 | + }); err != nil { | ||
71 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
72 | + } else { | ||
73 | + productRecordRepository = value | ||
74 | + } | ||
75 | + if productRecord, err := productRecordRepository.Save(newProductRecord); err != nil { | ||
76 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
77 | + } else { | ||
78 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
79 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
80 | + } | ||
81 | + return productRecord, nil | ||
82 | + } | ||
83 | +} | ||
84 | + | ||
85 | +// 返回生产记录服务 | ||
86 | +func (productRecordService *ProductRecordService) GetProductRecord(getProductRecordQuery *query.GetProductRecordQuery) (interface{}, error) { | ||
87 | + if err := getProductRecordQuery.ValidateQuery(); err != nil { | ||
88 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
89 | + } | ||
90 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
91 | + if err != nil { | ||
92 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
93 | + } | ||
94 | + if err := transactionContext.StartTransaction(); err != nil { | ||
95 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
96 | + } | ||
97 | + defer func() { | ||
98 | + transactionContext.RollbackTransaction() | ||
99 | + }() | ||
100 | + var productRecordRepository domain.ProductRecordRepository | ||
101 | + if value, err := factory.CreateProductRecordRepository(map[string]interface{}{ | ||
102 | + "transactionContext": transactionContext, | ||
103 | + }); err != nil { | ||
104 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
105 | + } else { | ||
106 | + productRecordRepository = value | ||
107 | + } | ||
108 | + productRecord, err := productRecordRepository.FindOne(map[string]interface{}{"productRecordId": getProductRecordQuery.ProductRecordId}) | ||
109 | + if err != nil { | ||
110 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
111 | + } | ||
112 | + if productRecord == nil { | ||
113 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getProductRecordQuery.ProductRecordId))) | ||
114 | + } else { | ||
115 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
116 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
117 | + } | ||
118 | + var result = &dto.ProductLevelTwoRecord{} | ||
119 | + return result.LoadDto(productRecord, productRecord.OrgId), nil | ||
120 | + } | ||
121 | +} | ||
122 | + | ||
123 | +// 返回生产记录服务列表 | ||
124 | +func (productRecordService *ProductRecordService) ListProductRecord(listProductRecordQuery *query.ListProductRecordQuery) (interface{}, error) { | ||
125 | + if err := listProductRecordQuery.ValidateQuery(); err != nil { | ||
126 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
127 | + } | ||
128 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
129 | + if err != nil { | ||
130 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
131 | + } | ||
132 | + if err := transactionContext.StartTransaction(); err != nil { | ||
133 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
134 | + } | ||
135 | + defer func() { | ||
136 | + transactionContext.RollbackTransaction() | ||
137 | + }() | ||
138 | + var productRecordRepository domain.ProductRecordRepository | ||
139 | + if value, err := factory.CreateProductRecordRepository(map[string]interface{}{ | ||
140 | + "transactionContext": transactionContext, | ||
141 | + }); err != nil { | ||
142 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
143 | + } else { | ||
144 | + productRecordRepository = value | ||
145 | + } | ||
146 | + if count, productRecords, err := productRecordRepository.Find(tool_funs.SimpleStructToMap(listProductRecordQuery)); err != nil { | ||
147 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
148 | + } else { | ||
149 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
150 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
151 | + } | ||
152 | + return map[string]interface{}{ | ||
153 | + "count": count, | ||
154 | + "productRecords": productRecords, | ||
155 | + }, nil | ||
156 | + } | ||
157 | +} | ||
158 | + | ||
159 | +// 移除生产记录服务 | ||
160 | +func (productRecordService *ProductRecordService) RemoveProductRecord(removeProductRecordCommand *command.RemoveProductRecordCommand) (interface{}, error) { | ||
161 | + if err := removeProductRecordCommand.ValidateCommand(); err != nil { | ||
162 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
163 | + } | ||
164 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
165 | + if err != nil { | ||
166 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
167 | + } | ||
168 | + if err := transactionContext.StartTransaction(); err != nil { | ||
169 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
170 | + } | ||
171 | + defer func() { | ||
172 | + transactionContext.RollbackTransaction() | ||
173 | + }() | ||
174 | + var productRecordRepository domain.ProductRecordRepository | ||
175 | + if value, err := factory.CreateProductRecordRepository(map[string]interface{}{ | ||
176 | + "transactionContext": transactionContext, | ||
177 | + }); err != nil { | ||
178 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
179 | + } else { | ||
180 | + productRecordRepository = value | ||
181 | + } | ||
182 | + productRecord, err := productRecordRepository.FindOne(map[string]interface{}{"productRecordId": removeProductRecordCommand.ProductRecordId}) | ||
183 | + if err != nil { | ||
184 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
185 | + } | ||
186 | + if productRecord == nil { | ||
187 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeProductRecordCommand.ProductRecordId))) | ||
188 | + } | ||
189 | + if productRecord, err := productRecordRepository.Remove(productRecord); err != nil { | ||
190 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
191 | + } else { | ||
192 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
193 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
194 | + } | ||
195 | + return productRecord, nil | ||
196 | + } | ||
197 | +} | ||
198 | + | ||
199 | +// 更新生产记录服务 | ||
200 | +func (productRecordService *ProductRecordService) UpdateProductRecord(updateProductRecordCommand *command.UpdateProductRecordCommand) (interface{}, error) { | ||
201 | + if err := updateProductRecordCommand.ValidateCommand(); err != nil { | ||
202 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
203 | + } | ||
204 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
205 | + if err != nil { | ||
206 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
207 | + } | ||
208 | + if err := transactionContext.StartTransaction(); err != nil { | ||
209 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
210 | + } | ||
211 | + defer func() { | ||
212 | + transactionContext.RollbackTransaction() | ||
213 | + }() | ||
214 | + var productRecordRepository domain.ProductRecordRepository | ||
215 | + if value, err := factory.CreateProductRecordRepository(map[string]interface{}{ | ||
216 | + "transactionContext": transactionContext, | ||
217 | + }); err != nil { | ||
218 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
219 | + } else { | ||
220 | + productRecordRepository = value | ||
221 | + } | ||
222 | + productRecord, err := productRecordRepository.FindOne(map[string]interface{}{"productRecordId": updateProductRecordCommand.ProductRecordId}) | ||
223 | + if err != nil { | ||
224 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
225 | + } | ||
226 | + if productRecord == nil { | ||
227 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateProductRecordCommand.ProductRecordId))) | ||
228 | + } | ||
229 | + if err := productRecord.Update(tool_funs.SimpleStructToMap(updateProductRecordCommand)); err != nil { | ||
230 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
231 | + } | ||
232 | + if productRecord, err := productRecordRepository.Save(productRecord); err != nil { | ||
233 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
234 | + } else { | ||
235 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
236 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
237 | + } | ||
238 | + return productRecord, nil | ||
239 | + } | ||
240 | +} | ||
241 | + | ||
242 | +// 返回生产记录服务列表 | ||
243 | +func (productRecordService *ProductRecordService) SearchProductRecord(operateInfo *domain.OperateInfo, listProductRecordQuery *query.SearchProductRecordQuery) (int64, interface{}, error) { | ||
244 | + if err := listProductRecordQuery.ValidateQuery(); err != nil { | ||
245 | + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
246 | + } | ||
247 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
248 | + if err != nil { | ||
249 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
250 | + } | ||
251 | + if err := transactionContext.StartTransaction(); err != nil { | ||
252 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
253 | + } | ||
254 | + defer func() { | ||
255 | + transactionContext.RollbackTransaction() | ||
256 | + }() | ||
257 | + var productRecordRepository domain.ProductRecordRepository | ||
258 | + productRecordRepository, _, _ = factory.FastPgProductRecord(transactionContext, 0) | ||
259 | + | ||
260 | + count, productRecords, err := productRecordRepository.Find(utils.ObjectToMap(listProductRecordQuery)) | ||
261 | + if err != nil { | ||
262 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
263 | + } | ||
264 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
265 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
266 | + } | ||
267 | + var result = make([]*dto.ProductLevelTwoRecord, 0) | ||
268 | + for i := range productRecords { | ||
269 | + item := productRecords[i] | ||
270 | + newItem := &dto.ProductLevelTwoRecord{} | ||
271 | + newItem.LoadDto(item, operateInfo.OrgId) | ||
272 | + result = append(result, newItem) | ||
273 | + } | ||
274 | + return count, result, nil | ||
275 | +} | ||
276 | + | ||
277 | +// 生产记录统计 | ||
278 | +func (productRecordService *ProductRecordService) ProductRecordStatics(cmd *command.ProductRecordStaticsCommand) (interface{}, error) { | ||
279 | + if err := cmd.ValidateCommand(); err != nil { | ||
280 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
281 | + } | ||
282 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
283 | + if err != nil { | ||
284 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
285 | + } | ||
286 | + if err := transactionContext.StartTransaction(); err != nil { | ||
287 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
288 | + } | ||
289 | + defer func() { | ||
290 | + transactionContext.RollbackTransaction() | ||
291 | + }() | ||
292 | + var _ domain.ProductRecordRepository | ||
293 | + var productRecord *domain.ProductRecord = cmd.ProductRecord | ||
294 | + //_,productRecord,err = factory.FastPgProductRecord(transactionContext,cmd.ProductRecordId) | ||
295 | + //if err!=nil{ | ||
296 | + // log.Logger.Error(err.Error()) | ||
297 | + // return nil, nil | ||
298 | + //} | ||
299 | + // | ||
300 | + if productRecord == nil { | ||
301 | + return nil, nil | ||
302 | + } | ||
303 | + svr, _ := domainService.NewPGProductRecordService(transactionContext.(*pgTransaction.TransactionContext)) | ||
304 | + if _, err = svr.EmployeeProductStatics(productRecord); err != nil { | ||
305 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
306 | + } | ||
307 | + if _, err = svr.WorkshopProductStatics(productRecord); err != nil { | ||
308 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
309 | + } | ||
310 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
311 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
312 | + } | ||
313 | + | ||
314 | + return nil, nil | ||
315 | +} | ||
316 | + | ||
317 | +func NewProductRecordService(options map[string]interface{}) *ProductRecordService { | ||
318 | + newProductRecordService := &ProductRecordService{} | ||
319 | + return newProductRecordService | ||
320 | +} |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/linmadan/egglib-go/core/application" | ||
5 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/dto" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/query" | ||
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/utils" | ||
12 | +) | ||
13 | + | ||
14 | +// 返回员工生产记录服务列表 | ||
15 | +func (productRecordService *ProductRecordService) SearchEmployeeProductRecord(operateInfo *domain.OperateInfo, listProductRecordQuery *query.SearchEmployeeProductRecordQuery) (int64, interface{}, error) { | ||
16 | + if err := listProductRecordQuery.ValidateQuery(); err != nil { | ||
17 | + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
18 | + } | ||
19 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
20 | + if err != nil { | ||
21 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
22 | + } | ||
23 | + if err := transactionContext.StartTransaction(); err != nil { | ||
24 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
25 | + } | ||
26 | + defer func() { | ||
27 | + transactionContext.RollbackTransaction() | ||
28 | + }() | ||
29 | + //var productRecordRepository domain.ProductRecordRepository | ||
30 | + //productRecordRepository,_,_ = factory.FastPgProductRecord(transactionContext,0) | ||
31 | + | ||
32 | + productRecordRepository, _ := dao.NewEmployeeProductRecordDao(transactionContext.(*pgTransaction.TransactionContext)) | ||
33 | + options := utils.ObjectToMap(listProductRecordQuery) | ||
34 | + count, productRecords, err := productRecordRepository.SearchEmployeeProductRecord(options) | ||
35 | + if err != nil { | ||
36 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
37 | + } | ||
38 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
39 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
40 | + } | ||
41 | + var result = make([]*dto.EmployeeProductRecordDto, 0) | ||
42 | + for i := range productRecords { | ||
43 | + item := productRecords[i] | ||
44 | + newItem := &dto.EmployeeProductRecordDto{} | ||
45 | + newItem.LoadDto(item, operateInfo.OrgId) | ||
46 | + result = append(result, newItem) | ||
47 | + } | ||
48 | + return count, result, nil | ||
49 | +} |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/linmadan/egglib-go/core/application" | ||
5 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/dto" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/query" | ||
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/utils" | ||
12 | +) | ||
13 | + | ||
14 | +// 返回员工生产记录服务列表 | ||
15 | +func (productRecordService *ProductRecordService) SearchWorkshopProductRecord(operateInfo *domain.OperateInfo, listProductRecordQuery *query.SearchWorkshopProductRecordQuery) (int64, interface{}, error) { | ||
16 | + if err := listProductRecordQuery.ValidateQuery(); err != nil { | ||
17 | + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
18 | + } | ||
19 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
20 | + if err != nil { | ||
21 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
22 | + } | ||
23 | + if err := transactionContext.StartTransaction(); err != nil { | ||
24 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
25 | + } | ||
26 | + defer func() { | ||
27 | + transactionContext.RollbackTransaction() | ||
28 | + }() | ||
29 | + //var productRecordRepository domain.ProductRecordRepository | ||
30 | + //productRecordRepository,_,_ = factory.FastPgProductRecord(transactionContext,0) | ||
31 | + | ||
32 | + productRecordRepository, _ := dao.NewWorkshopProductRecordDao(transactionContext.(*pgTransaction.TransactionContext)) | ||
33 | + options := utils.ObjectToMap(listProductRecordQuery) | ||
34 | + count, productRecords, err := productRecordRepository.SearchWorkshopProductRecord(options) | ||
35 | + if err != nil { | ||
36 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
37 | + } | ||
38 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
39 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
40 | + } | ||
41 | + var result = make([]*dto.WorkshopProductRecordDto, 0) | ||
42 | + for i := range productRecords { | ||
43 | + item := productRecords[i] | ||
44 | + newItem := &dto.WorkshopProductRecordDto{} | ||
45 | + newItem.LoadDto(item, operateInfo.OrgId) | ||
46 | + result = append(result, newItem) | ||
47 | + } | ||
48 | + return count, result, nil | ||
49 | +} |
1 | +package query | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "reflect" | ||
6 | + "strings" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/core/validation" | ||
9 | +) | ||
10 | + | ||
11 | +type CommonStatisticsQuery struct { | ||
12 | + Action string `cname:"查询类别" json:"actionType" valid:"Required"` | ||
13 | + QueryOptions map[string]interface{} `json:"queryOptions"` | ||
14 | +} | ||
15 | + | ||
16 | +func (checkUndertakerQuery *CommonStatisticsQuery) Valid(validation *validation.Validation) { | ||
17 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
18 | +} | ||
19 | + | ||
20 | +func (checkUndertakerQuery *CommonStatisticsQuery) ValidateQuery() error { | ||
21 | + valid := validation.Validation{} | ||
22 | + b, err := valid.Valid(checkUndertakerQuery) | ||
23 | + if err != nil { | ||
24 | + return err | ||
25 | + } | ||
26 | + if !b { | ||
27 | + elem := reflect.TypeOf(checkUndertakerQuery).Elem() | ||
28 | + for _, validErr := range valid.Errors { | ||
29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
30 | + if isExist { | ||
31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
32 | + } else { | ||
33 | + return fmt.Errorf(validErr.Message) | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + return nil | ||
38 | +} |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/linmadan/egglib-go/core/application" | ||
5 | + "github.com/linmadan/egglib-go/transaction/pg" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/statistics/query" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
9 | +) | ||
10 | + | ||
11 | +// CommonStatisticsService 通用的统计服务 | ||
12 | +type CommonStatisticsService struct { | ||
13 | +} | ||
14 | + | ||
15 | +// CommonStatisticsService 通用的统计服务 | ||
16 | +func (svr *CommonStatisticsService) CommonStatisticsService(cmd *query.CommonStatisticsQuery) (interface{}, error) { | ||
17 | + if err := cmd.ValidateQuery(); err != nil { | ||
18 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
19 | + } | ||
20 | + var err error | ||
21 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
22 | + if err != nil { | ||
23 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
24 | + } | ||
25 | + if err := transactionContext.StartTransaction(); err != nil { | ||
26 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
27 | + } | ||
28 | + defer func() { | ||
29 | + _ = transactionContext.RollbackTransaction() | ||
30 | + }() | ||
31 | + | ||
32 | + statisticsService, _ := domainService.NewPGCommonStatisticsService(transactionContext.(*pg.TransactionContext)) | ||
33 | + response, err := statisticsService.CommonStatistics(cmd.Action, cmd.QueryOptions) | ||
34 | + if err != nil { | ||
35 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
36 | + } | ||
37 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
38 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
39 | + } | ||
40 | + return response, nil | ||
41 | +} | ||
42 | + | ||
43 | +func NewCommonStatisticsService(options map[string]interface{}) *CommonStatisticsService { | ||
44 | + newProductSectionService := &CommonStatisticsService{} | ||
45 | + return newProductSectionService | ||
46 | +} |
1 | package syncdata | 1 | package syncdata |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
4 | "strconv" | 6 | "strconv" |
5 | "strings" | 7 | "strings" |
6 | "time" | 8 | "time" |
@@ -181,8 +183,15 @@ func (srv *PullDataK3CloudService) PullMaterial(timeFilter time.Time) error { | @@ -181,8 +183,15 @@ func (srv *PullDataK3CloudService) PullMaterial(timeFilter time.Time) error { | ||
181 | if err != nil { | 183 | if err != nil { |
182 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 184 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
183 | } | 185 | } |
186 | + | ||
187 | + var userService = domainService.NewUserService() | ||
188 | + org, err := userService.Organization(constant.MANUFACTURE_DEFAULT_ORGID) | ||
189 | + if err != nil { | ||
190 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
191 | + } | ||
192 | + | ||
184 | //MaterialK3cloud表数据到Proudct表 | 193 | //MaterialK3cloud表数据到Proudct表 |
185 | - err = materialDao.SyncDataProudct(nowTime.Unix()) | 194 | + err = materialDao.SyncDataProudct(nowTime.Unix(), org.OrgName) |
186 | if err != nil { | 195 | if err != nil { |
187 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 196 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
188 | } | 197 | } |
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | ||
6 | + "reflect" | ||
7 | + "strings" | ||
8 | + | ||
9 | + "github.com/beego/beego/v2/core/validation" | ||
10 | +) | ||
11 | + | ||
12 | +type WorkshopDataConsumeCommand struct { | ||
13 | + *domain.DeviceCollection | ||
14 | + // 企业id | ||
15 | + CompanyId int `cname:"企业id" json:"companyId" valid:"Required"` | ||
16 | + // 组织ID | ||
17 | + OrgId int `cname:"组织ID" json:"orgId" valid:"Required"` | ||
18 | +} | ||
19 | + | ||
20 | +func (updateWorkshopCommand *WorkshopDataConsumeCommand) Valid(validation *validation.Validation) { | ||
21 | + | ||
22 | +} | ||
23 | + | ||
24 | +func (updateWorkshopCommand *WorkshopDataConsumeCommand) ValidateCommand() error { | ||
25 | + valid := validation.Validation{} | ||
26 | + b, err := valid.Valid(updateWorkshopCommand) | ||
27 | + if err != nil { | ||
28 | + return err | ||
29 | + } | ||
30 | + if !b { | ||
31 | + elem := reflect.TypeOf(updateWorkshopCommand).Elem() | ||
32 | + for _, validErr := range valid.Errors { | ||
33 | + field, isExist := elem.FieldByName(validErr.Field) | ||
34 | + if isExist { | ||
35 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
36 | + } else { | ||
37 | + return fmt.Errorf(validErr.Message) | ||
38 | + } | ||
39 | + } | ||
40 | + } | ||
41 | + return nil | ||
42 | +} |
@@ -98,6 +98,13 @@ func (workshopService *WorkshopService) GetWorkshop(getWorkshopQuery *query.GetW | @@ -98,6 +98,13 @@ func (workshopService *WorkshopService) GetWorkshop(getWorkshopQuery *query.GetW | ||
98 | if err != nil { | 98 | if err != nil { |
99 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 99 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
100 | } | 100 | } |
101 | + userService := domainService.NewUserService() | ||
102 | + if workshop.Principal.UserId > 0 { | ||
103 | + u, _ := userService.User(workshop.Principal.UserId) | ||
104 | + if u != nil { | ||
105 | + workshop.Principal = u | ||
106 | + } | ||
107 | + } | ||
101 | if workshop == nil { | 108 | if workshop == nil { |
102 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getWorkshopQuery.WorkshopId))) | 109 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getWorkshopQuery.WorkshopId))) |
103 | } else { | 110 | } else { |
@@ -175,7 +182,7 @@ func (workshopService *WorkshopService) RemoveWorkshop(removeWorkshopCommand *co | @@ -175,7 +182,7 @@ func (workshopService *WorkshopService) RemoveWorkshop(removeWorkshopCommand *co | ||
175 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeWorkshopCommand.WorkshopId))) | 182 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeWorkshopCommand.WorkshopId))) |
176 | } | 183 | } |
177 | if !workshop.CanRemove() { | 184 | if !workshop.CanRemove() { |
178 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "当车间下存在线别") | 185 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "当前车间下存在线别,不可删除") |
179 | } | 186 | } |
180 | if workshop, err := workshopRepository.Remove(workshop); err != nil { | 187 | if workshop, err := workshopRepository.Remove(workshop); err != nil { |
181 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 188 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/linmadan/egglib-go/core/application" | ||
5 | + "github.com/linmadan/egglib-go/transaction/pg" | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/workshop/command" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
10 | +) | ||
11 | + | ||
12 | +func (workshopService *WorkshopService) WorkshopConsume(cmd *command.WorkshopDataConsumeCommand) (interface{}, error) { | ||
13 | + if err := cmd.ValidateCommand(); err != nil { | ||
14 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
15 | + } | ||
16 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
17 | + if err != nil { | ||
18 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
19 | + } | ||
20 | + if err := transactionContext.StartTransaction(); err != nil { | ||
21 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
22 | + } | ||
23 | + defer func() { | ||
24 | + transactionContext.RollbackTransaction() | ||
25 | + }() | ||
26 | + | ||
27 | + consumeService, _ := domainService.NewPGWorkshopDataConsumeService(transactionContext.(*pg.TransactionContext)) | ||
28 | + if _, err := consumeService.Consume(cmd.CompanyId, cmd.OrgId, cmd.DeviceCollection); err != nil { | ||
29 | + log.Logger.Error(err.Error()) | ||
30 | + return nil, err | ||
31 | + } | ||
32 | + | ||
33 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
34 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
35 | + } | ||
36 | + return struct{}{}, nil | ||
37 | +} |
pkg/constant/manufacture.go
0 → 100644
1 | +package constant | ||
2 | + | ||
3 | +import ( | ||
4 | + "os" | ||
5 | + "strconv" | ||
6 | +) | ||
7 | + | ||
8 | +var ( | ||
9 | + // 生产制造 - 称重系统 - 默认公司 | ||
10 | + MANUFACTURE_DEFAULT_COMPANYID = 1 | ||
11 | + // 生产制造 - 称重系统 - 默认组织 | ||
12 | + MANUFACTURE_DEFAULT_ORGID = 1 | ||
13 | +) | ||
14 | + | ||
15 | +func init() { | ||
16 | + if os.Getenv("MANUFACTURE_DEFAULT_COMPANYID") != "" { | ||
17 | + MANUFACTURE_DEFAULT_COMPANYID, _ = strconv.Atoi(os.Getenv("MANUFACTURE_DEFAULT_COMPANYID")) | ||
18 | + } | ||
19 | + if os.Getenv("MANUFACTURE_DEFAULT_ORGID") != "" { | ||
20 | + MANUFACTURE_DEFAULT_ORGID, _ = strconv.Atoi(os.Getenv("MANUFACTURE_DEFAULT_ORGID")) | ||
21 | + } | ||
22 | +} |
@@ -2,17 +2,21 @@ package constant | @@ -2,17 +2,21 @@ package constant | ||
2 | 2 | ||
3 | import "os" | 3 | import "os" |
4 | 4 | ||
5 | +var MQTT_TOPIC = "/MQTT" | ||
6 | + | ||
5 | //设备商提供的测试地址 | 7 | //设备商提供的测试地址 |
6 | var MQTT_HOST = "175.24.122.87" | 8 | var MQTT_HOST = "175.24.122.87" |
7 | -//内网测试地址 | ||
8 | -//var MQTT_HOST = "192.168.100.222" | ||
9 | var MQTT_PORT = "1883" | 9 | var MQTT_PORT = "1883" |
10 | +var MQTT_USER = "user111" | ||
11 | +var MQTT_PASSWORD = "user111" | ||
10 | 12 | ||
11 | -var MQTT_USER = "" | ||
12 | - | ||
13 | -var MQTT_PASSWORD = "" | 13 | +//内网测试地址 |
14 | +//var MQTT_HOST = "192.168.100.222" | ||
15 | +//var MQTT_PORT = "1883" | ||
16 | +//var MQTT_USER = "admin" | ||
17 | +//var MQTT_PASSWORD = "123456" | ||
14 | 18 | ||
15 | -func init(){ | 19 | +func init() { |
16 | if os.Getenv("MQTT_HOST") != "" { | 20 | if os.Getenv("MQTT_HOST") != "" { |
17 | MQTT_HOST = os.Getenv("MQTT_HOST") | 21 | MQTT_HOST = os.Getenv("MQTT_HOST") |
18 | } | 22 | } |
@@ -25,4 +29,4 @@ func init(){ | @@ -25,4 +29,4 @@ func init(){ | ||
25 | if os.Getenv("MQTT_PASSWORD") != "" { | 29 | if os.Getenv("MQTT_PASSWORD") != "" { |
26 | MQTT_PASSWORD = os.Getenv("MQTT_PASSWORD") | 30 | MQTT_PASSWORD = os.Getenv("MQTT_PASSWORD") |
27 | } | 31 | } |
28 | -} | ||
32 | +} |
@@ -10,6 +10,12 @@ var ( | @@ -10,6 +10,12 @@ var ( | ||
10 | DISABLE_REPOSITORY_CACHE = false | 10 | DISABLE_REPOSITORY_CACHE = false |
11 | // 缓存过期时间 单位秒 | 11 | // 缓存过期时间 单位秒 |
12 | REPOSITORY_CACHE_EXPIRE = 30 * 60 | 12 | REPOSITORY_CACHE_EXPIRE = 30 * 60 |
13 | + | ||
14 | + REDIS_ADDRESS = "" | ||
15 | + // redis 考勤机打卡消息队列 | ||
16 | + REDIS_ZKTECO_KEY = "allied-creation-zkteco" | ||
17 | + // redis 车间数据消息队列 | ||
18 | + REDIS_WORKSHOP_KEY = "allied-creation-workshop" | ||
13 | ) | 19 | ) |
14 | 20 | ||
15 | func init() { | 21 | func init() { |
@@ -29,4 +35,5 @@ func init() { | @@ -29,4 +35,5 @@ func init() { | ||
29 | if os.Getenv("DISABLE_REPOSITORY_CACHE") != "" { | 35 | if os.Getenv("DISABLE_REPOSITORY_CACHE") != "" { |
30 | DISABLE_REPOSITORY_CACHE = true | 36 | DISABLE_REPOSITORY_CACHE = true |
31 | } | 37 | } |
38 | + REDIS_ADDRESS = REDIS_HOST + ":" + REDIS_PORT | ||
32 | } | 39 | } |
@@ -103,9 +103,9 @@ func (device *Device) Update(data map[string]interface{}) error { | @@ -103,9 +103,9 @@ func (device *Device) Update(data map[string]interface{}) error { | ||
103 | } | 103 | } |
104 | if device.Ext == nil { | 104 | if device.Ext == nil { |
105 | device.Ext = &Ext{} | 105 | device.Ext = &Ext{} |
106 | - if device.Ext.DeviceExt == nil { | ||
107 | - device.Ext.DeviceExt = &DeviceExt{} | ||
108 | - } | 106 | + } |
107 | + if device.Ext != nil && device.Ext.DeviceExt == nil { | ||
108 | + device.Ext.DeviceExt = &DeviceExt{} | ||
109 | } | 109 | } |
110 | if orgName, ok := data["orgName"]; ok { | 110 | if orgName, ok := data["orgName"]; ok { |
111 | device.Ext.OrgName = orgName.(string) | 111 | device.Ext.OrgName = orgName.(string) |
@@ -127,6 +127,16 @@ func (device *Device) Valid() error { | @@ -127,6 +127,16 @@ func (device *Device) Valid() error { | ||
127 | return nil | 127 | return nil |
128 | } | 128 | } |
129 | 129 | ||
130 | +// 标记为生产设备 | ||
131 | +func (device *Device) MarkAsProductDevice() bool { | ||
132 | + if device.Ext.DeviceExt.IsProductDevice == 1 { | ||
133 | + return false | ||
134 | + } | ||
135 | + device.Ext.DeviceExt.IsProductDevice = 1 | ||
136 | + device.UpdatedAt = time.Now() | ||
137 | + return true | ||
138 | +} | ||
139 | + | ||
130 | // 导入设备数据体 | 140 | // 导入设备数据体 |
131 | type ImportDeviceItem struct { | 141 | type ImportDeviceItem struct { |
132 | // 设备编号 | 142 | // 设备编号 |
@@ -183,3 +193,13 @@ func (item *ImportDeviceItem) Valid() error { | @@ -183,3 +193,13 @@ func (item *ImportDeviceItem) Valid() error { | ||
183 | } | 193 | } |
184 | return nil | 194 | return nil |
185 | } | 195 | } |
196 | + | ||
197 | +type Devices []*Device | ||
198 | + | ||
199 | +func (devices Devices) ToMap() map[string]*Device { | ||
200 | + var resp = make(map[string]*Device) | ||
201 | + for _, v := range devices { | ||
202 | + resp[v.DeviceCode] = v | ||
203 | + } | ||
204 | + return resp | ||
205 | +} |
pkg/domain/device_collection.go
0 → 100644
1 | +package domain | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | ||
6 | + "time" | ||
7 | +) | ||
8 | + | ||
9 | +// 设备采集数据 | ||
10 | +type DeviceCollection struct { | ||
11 | + // 数据采集ID | ||
12 | + DeviceCollectionId int64 `json:"deviceCollectionId,string"` | ||
13 | + // 车间名 | ||
14 | + WorkShopName string `json:"workShopName"` | ||
15 | + // 采集时间 | ||
16 | + CollectionTime time.Time `json:"collectionTime"` | ||
17 | + // 设备名 | ||
18 | + DeviceSn string `json:"deviceSn"` | ||
19 | + // 设备类型 | ||
20 | + DeviceType string `json:"deviceType"` | ||
21 | + // 启动状态 1-启动 0-停止 | ||
22 | + StartupStatus int64 `json:"startupStatus"` | ||
23 | + // 通讯状态 1-通讯正常 0-设备未上电或与采集端通讯故障 | ||
24 | + ComStatus int64 `json:"comStatus"` | ||
25 | + // 设备数据值 | ||
26 | + Values interface{} `json:"values"` | ||
27 | +} | ||
28 | + | ||
29 | +var ( | ||
30 | + // 包馅机 | ||
31 | + DeviceTypeBaoXianJi = "BXJ" | ||
32 | + // 打浆机 | ||
33 | + DeviceTypeDaJiangJi = "DJJ" | ||
34 | + // 面包屑机 | ||
35 | + DeviceTypeMianBaoXieJi = "MBXJ" | ||
36 | + // 油炸机 | ||
37 | + DeviceTypeYouZhaJi = "YZJ" | ||
38 | + // 串串机 | ||
39 | + DeviceTypeChuanChuanJi = "CCJ" | ||
40 | + // 速冻线 | ||
41 | + DeviceTypeSuDongXian = "SDX" | ||
42 | + // 封口机 | ||
43 | + DeviceTypeFengKouJi = "FKJ" | ||
44 | + // 封箱机 | ||
45 | + DeviceTypeFengXiangJi = "FXJ" | ||
46 | +) | ||
47 | + | ||
48 | +type DeviceCollectionRepository interface { | ||
49 | + Save(deviceCollection *DeviceCollection) (*DeviceCollection, error) | ||
50 | + Remove(deviceCollection *DeviceCollection) (*DeviceCollection, error) | ||
51 | + FindOne(queryOptions map[string]interface{}) (*DeviceCollection, error) | ||
52 | + Find(queryOptions map[string]interface{}) (int64, []*DeviceCollection, error) | ||
53 | +} | ||
54 | + | ||
55 | +func (deviceCollection *DeviceCollection) Identify() interface{} { | ||
56 | + if deviceCollection.DeviceCollectionId == 0 { | ||
57 | + return nil | ||
58 | + } | ||
59 | + return deviceCollection.DeviceCollectionId | ||
60 | +} | ||
61 | + | ||
62 | +func (deviceCollection *DeviceCollection) Update(data map[string]interface{}) error { | ||
63 | + if workShopName, ok := data["workShopName"]; ok { | ||
64 | + deviceCollection.WorkShopName = workShopName.(string) | ||
65 | + } | ||
66 | + if deviceSn, ok := data["deviceSn"]; ok { | ||
67 | + deviceCollection.DeviceSn = deviceSn.(string) | ||
68 | + } | ||
69 | + if deviceType, ok := data["deviceType"]; ok { | ||
70 | + deviceCollection.DeviceSn = deviceType.(string) | ||
71 | + } | ||
72 | + if startupStatus, ok := data["startupStatus"]; ok { | ||
73 | + deviceCollection.StartupStatus = startupStatus.(int64) | ||
74 | + } | ||
75 | + if comStatus, ok := data["comStatus"]; ok { | ||
76 | + deviceCollection.ComStatus = comStatus.(int64) | ||
77 | + } | ||
78 | + if values, ok := data["values"]; ok { | ||
79 | + deviceCollection.Values = values | ||
80 | + } | ||
81 | + return nil | ||
82 | +} | ||
83 | + | ||
84 | +func TaskDeviceCollection() string { | ||
85 | + return fmt.Sprintf("%v:task:device-collection:report", constant.CACHE_PREFIX) | ||
86 | +} |
-
请 注册 或 登录 后发表评论