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 | + | ||
| 11 | + | ||
| 12 | +导入数据检验有错,显示具体错误 | ||
| 13 | + | ||
| 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 | + | ||
| 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 | +} |
-
请 注册 或 登录 后发表评论