3
2

limsreportbeampumpingunitsService.go 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  1. package limsreportbeampumpingunits
  2. import (
  3. "dashoo.cn/backend/api/business/limscreatereport"
  4. "fmt"
  5. "os"
  6. "regexp"
  7. "strconv"
  8. "strings"
  9. "dashoo.cn/backend/api/business/limsentrust"
  10. //"strconv"
  11. //"strings"
  12. "time"
  13. . "dashoo.cn/backend/api/mydb"
  14. "dashoo.cn/utils"
  15. //. "dashoo.cn/utils/db"
  16. . "strings"
  17. "dashoo.cn/backend/api/business/limsdataentry"
  18. "github.com/360EntSecGroup-Skylar/excelize"
  19. "github.com/go-xorm/xorm"
  20. . "github.com/linxGnu/goseaweedfs"
  21. )
  22. type LimsReportBeamPumpingUnitsService struct {
  23. MyServiceBase
  24. }
  25. func GetLimsReportBeamPumpingUnitsService(xormEngine *xorm.Engine) *LimsReportBeamPumpingUnitsService {
  26. s := new(LimsReportBeamPumpingUnitsService)
  27. s.DBE = xormEngine
  28. return s
  29. }
  30. // 游梁式抽油机检测数据记录表存基本数据到数据库
  31. func (s *LimsReportBeamPumpingUnitsService) AddDataBeamPumpingUnits(xlsx *excelize.File, balancelist limsdataentry.ApplyListModel, tablname string, username string, userid string, parentid int, photo string) {
  32. var rowlist LimsReportBeamPumpingUnits
  33. sheetmap := xlsx.GetSheetMap()
  34. for i := 2; i <= len(sheetmap); i++ {
  35. rowlist.EId = balancelist.EId
  36. rowlist.TaskBalanceId = balancelist.Id
  37. rowlist.CreateBy = username
  38. rowlist.CreateUserId, _ = utils.StrTo(userid).Int()
  39. rowlist.DataEntryId = parentid
  40. fmt.Println("------list---", rowlist)
  41. rowlist.CreateOn = time.Now()
  42. rowlist.CustNo = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C7") //出厂编号
  43. rowlist.PositionCheck = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C6") //出厂编号
  44. //rowlist.ProductDate = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "M7") //出厂日期
  45. rowlist.Spec = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C8") //规格型号
  46. rowlist.Manufacturer = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "M8") //制造厂家
  47. //rowlist.CheckDate = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C9") //检测时间
  48. rowlist.Temperature = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "M9") //环境温度C
  49. rowlist.DetectBasis = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C10") //检测依据
  50. rowlist.MainProducts = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C11") //主要检测仪器名称
  51. rowlist.FaceCheck1 = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "R13") //外观检查1
  52. rowlist.FaceCheck2 = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "R14") //外观检查2
  53. rowlist.Retarder = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "R15") //减速器密封性
  54. rowlist.LongSwing = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C17")) //支架纵向振幅mm
  55. rowlist.TransSwing = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "C18")) //支架横向振幅mm
  56. rowlist.RetarderTemp = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "N17")) //减速器轴承温度C
  57. rowlist.MachineNoise1 = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "N18")) //整机噪声1(A计权声级)dB
  58. rowlist.MachineNoise2 = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "Q18")) //整机噪声2(A计权声级)dB
  59. rowlist.MachineNoise3 = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "T18")) //整机噪声3(A计权声级)dB
  60. rowlist.DownX = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "E20")) //x轴下止点mm
  61. rowlist.MidDownX = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "F20")) //x轴中下止点mm
  62. rowlist.MiddleX = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "G20")) //x轴中止点mm
  63. rowlist.MidUpX = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "H20")) //x轴中上止点mm
  64. rowlist.UpX = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "K20")) //x轴上止点mm
  65. rowlist.DownY = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "O20")) //y轴下止点mm
  66. rowlist.MidDownY = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "P20")) //y轴中下止点mm
  67. rowlist.MiddleY = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "R20")) //y轴中止点mm
  68. rowlist.MidUpY = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "S20")) //y轴中上止点mm
  69. rowlist.UpY = decimalDeal(xlsx.GetCellValue("sheet"+strconv.Itoa(i), "U20")) //y轴上止点mm
  70. rowlist.Remark = xlsx.GetCellValue("sheet"+strconv.Itoa(i), "B23")
  71. _, err := s.InsertEntityBytbl(tablname, &rowlist)
  72. if err == nil {
  73. fmt.Println("======电气接地装置检测原始记录表存基本数据到数据库成功!")
  74. } else {
  75. fmt.Println("======电气接地装置检测原始记录表存基本数据到数据库失败!")
  76. }
  77. //插入审核人签名
  78. pictureerr := xlsx.AddPicture("sheet"+strconv.Itoa(i), "N26", "./"+photo, "")
  79. if pictureerr != nil {
  80. fmt.Println(pictureerr)
  81. }
  82. }
  83. }
  84. // 针对数据库 decimal 类型,空串处理,若空则返回 "0.00",否则返回原字符
  85. func decimalDeal(str string) string {
  86. _, err := strconv.Atoi(TrimSpace(str))
  87. if err == nil {
  88. return TrimSpace(str)
  89. } else {
  90. return "0.00"
  91. }
  92. }
  93. /**
  94. * 生成[游梁式抽油机]检测报告
  95. */
  96. func (s *LimsReportBeamPumpingUnitsService) DataToExcelReport(
  97. entrustMainEntity limsentrust.LimsEntrustMain,
  98. reportBeamPumpingUnitsName string,
  99. dataentryName string,
  100. creatreportName string,
  101. BaseUserName string,
  102. seqStr string,
  103. retUrl string,
  104. entrustId string,
  105. photo string,
  106. dataentryIds string) (reportUrl string, err error) {
  107. //游梁式抽油机检测数据记录表
  108. var reportList []LimsReportBeamPumpingUnits
  109. s.GetEntitysByOrderbyWhere(reportBeamPumpingUnitsName, "DataEntryId in ("+dataentryIds+")","DataEntryId", &reportList)
  110. //模板下载到服务器
  111. _dir := utils.Cfg.MustValue("file", "tmplateDir") + entrustId
  112. fileurl := strings.Split(retUrl, "|")
  113. utils.DownloadFile("http://"+fileurl[0], fileurl[1], _dir)
  114. xlsx, err := excelize.OpenFile(utils.Cfg.MustValue("file", "tmplateDir") + entrustId + "/" + fileurl[1])
  115. if err != nil {
  116. utils.LogError(err)
  117. return "", err
  118. }
  119. tmpDocName := entrustId + "_" + strconv.Itoa(time.Now().Nanosecond()) + ".xlsx"
  120. //提前生成文件在服务器的存储路径
  121. _pdir := utils.Cfg.MustValue("file", "docDir") + entrustId + "/"
  122. exist, _ := utils.PathExists(_pdir)
  123. var dirErr error
  124. if !exist {
  125. dirErr = os.Mkdir(_pdir, os.ModePerm)
  126. }
  127. if dirErr != nil {
  128. utils.LogError(err)
  129. return "", dirErr
  130. }
  131. //1. 插入Excel自动生成的报告单号
  132. xlsx.SetCellValue("Sheet1", "F1", seqStr)
  133. //2. 插入Excel工作委托的相关字段 entrustMainEntity
  134. xlsx.SetCellValue("Sheet1", "C22", entrustMainEntity.ProjectType)
  135. xlsx.SetCellValue("Sheet1", "C24", entrustMainEntity.CustomerName)
  136. xlsx.SetCellValue("Sheet1", "C26", entrustMainEntity.DetectSample)
  137. xlsx.SetCellValue("Sheet1", "C28", time.Now().Format("2006 年 01 月 02 日"))
  138. //3. 复制报告Sheet
  139. sheetIdx := 3
  140. if len(reportList) > 1 {
  141. for i := 1; i < (len(reportList)); i++ {
  142. index := i + sheetIdx
  143. xlsx.NewSheet(index, "Sheet"+strconv.Itoa(index))
  144. // index := xlsx.NewSheet("Sheet" + strconv.Itoa(i+sheetIdx))
  145. xlsx.CopySheet(3, index)
  146. }
  147. }
  148. var seqpage string
  149. for i := 0; i < (len(reportList)); i++ {
  150. var reportmainlist limsdataentry.LimsDateEntry
  151. var createreportlist limscreatereport.LimsCreateReport
  152. s.GetEntityByWhere(dataentryName," Id= "+utils.ToStr(reportList[i].DataEntryId),&reportmainlist)
  153. s.GetEntityByWhere(creatreportName," EId = "+ entrustId,&createreportlist)
  154. //获取校核人签名
  155. var jhuserlist limsdataentry.UserModel
  156. s.GetEntityByWhere(BaseUserName,"Id = '"+utils.ToStr(reportmainlist.JHUserId)+"'",&jhuserlist)
  157. //获取批准人签名
  158. var pzuserlist limsdataentry.UserModel
  159. s.GetEntityByWhere(BaseUserName,"Id = '"+utils.ToStr(createreportlist.ConUserId)+"'",&pzuserlist)
  160. qulify := 1
  161. var DetectBasis string
  162. if strings.Contains(reportmainlist.DetectBasis,",") == true {
  163. DetectBasis = strings.Replace(reportmainlist.DetectBasis, ",", " ", -1)
  164. } else{
  165. DetectBasis = reportmainlist.DetectBasis
  166. }
  167. specification := reportList[i].Spec
  168. Specif := s.IsEnglishCap(specification)
  169. //规格型号拆分
  170. Specifsplit := strings.Split(Specif, "-")
  171. load, _ := strconv.Atoi(Specifsplit[0])
  172. conflict, _ := strconv.ParseFloat(Specifsplit[1], 64)
  173. //整机噪声
  174. noise1, _ := strconv.ParseFloat(reportList[i].MachineNoise1, 64)
  175. noise2, _ := strconv.ParseFloat(reportList[i].MachineNoise2, 64)
  176. noise3, _ := strconv.ParseFloat(reportList[i].MachineNoise3, 64)
  177. noise := noise1 + noise2 + noise3
  178. if load <= 10 {
  179. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D17", "<=85")
  180. if noise > 85 {
  181. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I17", "不合格")
  182. } else {
  183. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I17", "合格")
  184. }
  185. } else if load > 10 {
  186. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D17", "<=87")
  187. if noise > 87 {
  188. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I17", "不合格")
  189. } else {
  190. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I17", "合格")
  191. }
  192. }
  193. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K11",reportList[i].FaceCheck1 )//外观一结果
  194. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K12",reportList[i].FaceCheck2 )//外观二结果
  195. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K13",reportList[i].RDCResult)//密封性结果
  196. //LongSwingSplict := strings.Split(reportList[i].LongSwing, "/")
  197. //TransSwingSplict := strings.Split(reportList[i].TransSwing, "/")
  198. LongSwing1, _ := strconv.ParseFloat(reportList[i].LongSwing, 64)
  199. LongSwing2, _ := strconv.ParseFloat(strconv.Itoa(reportList[i].LSBaseNum), 64)
  200. TransSwing1, _ := strconv.ParseFloat(reportList[i].TransSwing, 64)
  201. TransSwing2, _ := strconv.ParseFloat(strconv.Itoa(reportList[i].TSBaseNum), 64)
  202. LongSwing := LongSwing2 - LongSwing1
  203. TransSwing := TransSwing2 - TransSwing1
  204. down, _ := strconv.ParseFloat(reportList[i].DownX, 64)
  205. up, _ := strconv.ParseFloat(reportList[i].UpX, 64)
  206. radius := up - down
  207. switch {
  208. case conflict <= 2.00:
  209. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D14", "<=3")
  210. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D15", "<=2")
  211. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D18", "<=10")
  212. if LongSwing > 3 {
  213. qulify = 0
  214. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "不合格")
  215. } else {
  216. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "合格")
  217. }
  218. if TransSwing > 2 {
  219. qulify = 0
  220. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "不合格")
  221. } else {
  222. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "合格")
  223. }
  224. if radius > 10 {
  225. qulify = 0
  226. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "不合格")
  227. } else {
  228. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "合格")
  229. }
  230. case conflict <= 3.00 && conflict > 2.00:
  231. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D14", "<=5")
  232. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D15", "<=4")
  233. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D18", "<=14")
  234. if LongSwing > 5 {
  235. qulify = 0
  236. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "不合格")
  237. } else {
  238. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "合格")
  239. }
  240. if TransSwing > 4 {
  241. qulify = 0
  242. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "不合格")
  243. } else {
  244. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "合格")
  245. }
  246. if radius > 14 {
  247. qulify = 0
  248. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "不合格")
  249. } else {
  250. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "合格")
  251. }
  252. case conflict <= 4.00 && conflict > 3.00:
  253. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D14", "<=6")
  254. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D15", "<=5")
  255. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D18", "<=18")
  256. if LongSwing > 6{
  257. qulify = 0
  258. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "不合格")
  259. } else {
  260. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "合格")
  261. }
  262. if TransSwing > 5 {
  263. qulify = 0
  264. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "不合格")
  265. } else {
  266. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "合格")
  267. }
  268. if radius > 18 {
  269. qulify = 0
  270. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "不合格")
  271. } else {
  272. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "合格")
  273. }
  274. case conflict <= 5.00 && conflict > 4.00:
  275. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D14", "<=7")
  276. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D15", "<=6")
  277. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D18", "<=22")
  278. if LongSwing > 7 {
  279. qulify = 0
  280. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "不合格")
  281. } else {
  282. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "合格")
  283. }
  284. if TransSwing > 6 {
  285. qulify = 0
  286. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "不合格")
  287. } else {
  288. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "合格")
  289. }
  290. if radius > 22 {
  291. qulify = 0
  292. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "不合格")
  293. } else {
  294. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "合格")
  295. }
  296. case conflict <= 7.00 && conflict > 5.00:
  297. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D14", "<=8")
  298. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D15", "<=7")
  299. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D18", "<=26")
  300. if LongSwing > 8 {
  301. qulify = 0
  302. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "不合格")
  303. } else {
  304. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "合格")
  305. }
  306. if TransSwing > 7 {
  307. qulify = 0
  308. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "不合格")
  309. } else {
  310. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "合格")
  311. }
  312. if radius > 26 {
  313. qulify = 0
  314. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "不合格")
  315. } else {
  316. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "合格")
  317. }
  318. case conflict > 7.00:
  319. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D14", "<=9")
  320. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D15", "<=8")
  321. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D18", "<=28")
  322. if LongSwing > 9 {
  323. qulify = 0
  324. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "不合格")
  325. } else {
  326. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I14", "合格")
  327. }
  328. if TransSwing > 8 {
  329. qulify = 0
  330. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "不合格")
  331. } else {
  332. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I15", "合格")
  333. }
  334. if radius > 28 {
  335. qulify = 0
  336. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "不合格")
  337. } else {
  338. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I18", "合格")
  339. }
  340. }
  341. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "D16", "<=70°")
  342. Temperature, _ := strconv.ParseFloat(reportList[i].Temperature, 64)
  343. if Temperature >70.00{
  344. qulify = 0
  345. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I16", "不合格")
  346. }else{
  347. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "I16", "合格")
  348. }
  349. if qulify == 1 {
  350. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C19", " 依据《"+DetectBasis+"》标准,检测数据符合标准要求,检测结论:合格。")
  351. } else if qulify == 0 {
  352. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C19", " 依据《"+DetectBasis+"》标准,检测数据不符合标准要求,检测结论:不合格。")
  353. }
  354. //插入excel文件
  355. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "A1", entrustMainEntity.ProjectType+"报告") //检测项目
  356. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F31", time.Now().Format("2006年01月02日"))
  357. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G2", "第"+strconv.Itoa(i+3)+"页 共"+strconv.Itoa(len(reportList)+2)+"页")
  358. if i<10{
  359. seqpage ="0"+strconv.Itoa(i+1)
  360. }else{
  361. seqpage =strconv.Itoa(i+1)
  362. }
  363. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "A2", seqStr+"-"+seqpage)
  364. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C3", entrustMainEntity.CustomerName)
  365. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C4", entrustMainEntity.AddressName)
  366. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C5", reportList[i].CustNo)
  367. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G5", reportList[i].ProductDate.Format("2006年01月02日"))
  368. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C6", reportList[i].Spec)
  369. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G6", reportList[i].Manufacturer)
  370. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C7", reportList[i].CheckDate.Format("2006年01月02日"))
  371. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G7", reportmainlist.Temperature)
  372. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C8", DetectBasis)
  373. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C9", reportmainlist.Instrument1)
  374. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G11", reportList[i].FaceCheck1)
  375. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G12", reportList[i].FaceCheck2)
  376. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G13", reportList[i].Retarder)
  377. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G14", LongSwing)
  378. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G15", TransSwing)
  379. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G16", reportList[i].RetarderTemp)
  380. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G17", noise)
  381. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G18", radius)
  382. //xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "B33", reportmainlist.CreateBy) //主检人签名
  383. //xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "E33", reportmainlist.JHBy) //校核人签名
  384. // if createreportlist.ConUserBy != ""{
  385. // xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H33", createreportlist.ConUserBy) //批准人签名
  386. // }
  387. //插入主检人签名
  388. pictureerr := xlsx.AddPicture("Sheet"+strconv.Itoa(i+sheetIdx), "B33", "./"+photo, `{"x_offset": 15, "y_offset": 6,"lock_aspect_ratio": false,"locked": false, "positioning": "absolute "}`)
  389. if pictureerr != nil {
  390. fmt.Println(pictureerr)
  391. }
  392. //插入校核人签名
  393. if jhuserlist.Description != ""{
  394. pictureerr = xlsx.AddPicture("Sheet"+strconv.Itoa(i+sheetIdx), "E33", "./"+jhuserlist.Description, `{"x_offset": 15, "y_offset": 6,"lock_aspect_ratio": false,"locked": false, "positioning": "absolute "}`)
  395. if pictureerr != nil {
  396. fmt.Println(pictureerr)
  397. }
  398. }
  399. //插入批准人签名
  400. if pzuserlist.Description != ""{
  401. pictureerr = xlsx.AddPicture("Sheet"+strconv.Itoa(i+sheetIdx), "H33", "./"+pzuserlist.Description, `{"x_offset": 15, "y_offset": 6,"lock_aspect_ratio": false,"locked": false, "positioning": "absolute "}`)
  402. if pictureerr != nil {
  403. fmt.Println(pictureerr)
  404. }
  405. }
  406. }
  407. //5. 将文件保存到服务器相关目录上
  408. xlsx.SaveAs(utils.Cfg.MustValue("file", "docDir") + entrustId + "/" + tmpDocName)
  409. //6. 上传文件到文件服务器
  410. DocFilePath := utils.Cfg.MustValue("file", "docDir") + entrustId + "/" + tmpDocName
  411. var sw *Seaweed
  412. var filer []string
  413. if _filer := os.Getenv("GOSWFS_FILER_URL"); _filer != "" {
  414. filer = []string{_filer}
  415. }
  416. sw = NewSeaweed("http", utils.Cfg.MustValue("file", "upFileHost"), filer, 2*1024*1024, 5*time.Minute)
  417. _, _, fID, err := sw.UploadFile(DocFilePath, "", "")
  418. retDocUrl := utils.Cfg.MustValue("file", "downFileHost") + "/" + fID
  419. //6.1 删除本地文件,释放空间
  420. os.Remove(DocFilePath)
  421. //7. 保存住报告URL(由controller层调用生成或修改生成报告记录)
  422. return retDocUrl, err
  423. }
  424. /**
  425. * 数据录入导出 [游梁式抽油机]
  426. */
  427. func (s *LimsReportBeamPumpingUnitsService) DocDataToExcel(entrustMainEntity limsdataentry.DataEntryEntrustModel,dataentrymainlist limsdataentry.LimsDateEntry, reportEquipotent string, seqStr string, retUrl string, photo string,JHSign string) (reportUrl string, err error) {
  428. //获取报告明细列表
  429. var dataentrylist []LimsReportBeamPumpingUnits
  430. s.GetEntitysByWhere(reportEquipotent, "DataEntryId='"+utils.ToStr(dataentrymainlist.Id)+"'", &dataentrylist)
  431. //模板下载到服务器
  432. _dir := utils.Cfg.MustValue("file", "tmplateDir") + utils.ToStr(dataentrymainlist.Id)
  433. fileurl := strings.Split(retUrl, "|")
  434. utils.DownloadFile("http://"+fileurl[0], fileurl[1], _dir)
  435. xlsx, err := excelize.OpenFile(utils.Cfg.MustValue("file", "tmplateDir") + utils.ToStr(dataentrymainlist.Id) + "/" + fileurl[1])
  436. if err != nil {
  437. utils.LogError(err)
  438. return "", err
  439. }
  440. tmpDocName := utils.ToStr(dataentrymainlist.Id) + "_" + strconv.Itoa(time.Now().Nanosecond()) + ".xlsx"
  441. //提前生成文件在服务器的存储路径
  442. _pdir := utils.Cfg.MustValue("file", "docDir") + utils.ToStr(dataentrymainlist.Id) + "/"
  443. exist, _ := utils.PathExists(_pdir)
  444. var dirErr error
  445. if !exist {
  446. dirErr = os.Mkdir(_pdir, os.ModePerm)
  447. }
  448. if dirErr != nil {
  449. utils.LogError(err)
  450. return "", dirErr
  451. }
  452. //3. 复制报告Sheet
  453. sheetIdx := 2
  454. if len(dataentrylist) > 1 {
  455. for i := 1; i < (len(dataentrylist)); i++ {
  456. index := i + sheetIdx
  457. xlsx.NewSheet(index, "Sheet"+strconv.Itoa(index))
  458. // index := xlsx.NewSheet("Sheet" + strconv.Itoa(i+sheetIdx))
  459. xlsx.CopySheet(sheetIdx, index)
  460. }
  461. }
  462. for i := 0; i < (len(dataentrylist)); i++ {
  463. // xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "B26", dataentrymainlist.CreateBy) //主检人签名
  464. // xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N26", dataentrymainlist.JHBy) //校核人签名
  465. //插入检测人签名
  466. pictureerr := xlsx.AddPicture("Sheet"+strconv.Itoa(i+sheetIdx), "B26", "./"+photo, `{"x_offset": 2, "y_offset": 2,"lock_aspect_ratio": false,"locked": true, "positioning": "absolute "}`)
  467. if pictureerr != nil {
  468. fmt.Println(pictureerr)
  469. }
  470. if JHSign != "" {
  471. //插入校核人签名
  472. pictureerr = xlsx.AddPicture("Sheet"+strconv.Itoa(i+sheetIdx), "N26", "./"+JHSign, `{"x_offset": 2, "y_offset": 2,"lock_aspect_ratio": false,"locked": true, "positioning": "absolute "}`)
  473. if pictureerr != nil {
  474. fmt.Println(pictureerr)
  475. }
  476. }
  477. /*xlsx.ProtectSheet("Sheet"+strconv.Itoa(i+sheetIdx), &excelize.FormatSheetProtection{
  478. Password: utils.Cfg.MustValue("file", "excelPassword"),
  479. EditScenarios: false,
  480. })*/
  481. noise1, _ := strconv.ParseFloat(dataentrylist[i].MachineNoise1, 64)
  482. noise2, _ := strconv.ParseFloat(dataentrylist[i].MachineNoise2, 64)
  483. noise3, _ := strconv.ParseFloat(dataentrylist[i].MachineNoise3, 64)
  484. noisesum := noise1 + noise2 + noise3
  485. noise := noisesum/3
  486. //插入excel文件
  487. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "A2", entrustMainEntity.ProjectType+"数据记录表") //检测项目
  488. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C4", seqStr)
  489. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C5", entrustMainEntity.CustomerName)
  490. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C6", dataentrymainlist.PositionCheck)
  491. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C7", dataentrylist[i].CustNo)
  492. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "M7", dataentrylist[i].ProductDate.Format("2006年01月02日"))
  493. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C8", dataentrylist[i].Spec)
  494. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "M8", dataentrylist[i].Manufacturer)
  495. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C9", dataentrylist[i].CheckDate.Format("2006年01月02日"))
  496. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "M9", dataentrylist[i].Temperature+"℃")
  497. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C10", dataentrymainlist.DetectBasis)
  498. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C11", dataentrymainlist.Instrument1)
  499. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "R13", dataentrylist[i].FaceCheck1)
  500. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "R14", dataentrylist[i].FaceCheck2)
  501. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "R15", dataentrylist[i].Retarder)
  502. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C17", dataentrylist[i].LongSwing+"mm")
  503. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C18", dataentrylist[i].TransSwing+"mm")
  504. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N17", dataentrylist[i].RetarderTemp+"℃")
  505. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N18", dataentrylist[i].MachineNoise1+"dB")
  506. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "Q18", dataentrylist[i].MachineNoise2+"dB")
  507. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "T18", dataentrylist[i].MachineNoise3+"dB")
  508. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "E20", dataentrylist[i].DownX)
  509. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F20", dataentrylist[i].MidDownX)
  510. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G20", dataentrylist[i].MiddleX)
  511. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H20", dataentrylist[i].MidUpX)
  512. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K20", dataentrylist[i].UpX)
  513. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "O20", dataentrylist[i].DownY)
  514. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "P20", dataentrylist[i].MidDownY)
  515. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "R20", dataentrylist[i].MiddleY)
  516. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "S20", dataentrylist[i].MidUpY)
  517. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "U20", dataentrylist[i].UpY)
  518. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "B23", dataentrylist[i].Remark)
  519. //备注页
  520. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C30", dataentrylist[i].LongSwing)
  521. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C31", dataentrylist[i].TransSwing)
  522. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "C32", noise)
  523. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F38", dataentrylist[i].DownX)
  524. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G38", dataentrylist[i].MidDownX)
  525. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H38", dataentrylist[i].MiddleX)
  526. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K38", dataentrylist[i].MidUpX)
  527. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N38", dataentrylist[i].UpX)
  528. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F39", dataentrylist[i].DownY)
  529. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G39", dataentrylist[i].MidDownY)
  530. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H39", dataentrylist[i].MiddleY)
  531. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K39", dataentrylist[i].MidUpY)
  532. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N39", dataentrylist[i].UpY)
  533. DownX, _ := strconv.ParseFloat(dataentrylist[i].DownX, 64)
  534. MidDownX, _ := strconv.ParseFloat(dataentrylist[i].MidDownX, 64)
  535. MiddleX, _ := strconv.ParseFloat(dataentrylist[i].MiddleX, 64)
  536. MidUpX, _ := strconv.ParseFloat(dataentrylist[i].MidUpX, 64)
  537. UpX, _ := strconv.ParseFloat(dataentrylist[i].UpX, 64)
  538. DownY, _ := strconv.ParseFloat(dataentrylist[i].DownY, 64)
  539. MidDownY, _ := strconv.ParseFloat(dataentrylist[i].MidDownY, 64)
  540. MiddleY, _ := strconv.ParseFloat(dataentrylist[i].MiddleY, 64)
  541. MidUpY, _ := strconv.ParseFloat(dataentrylist[i].MidUpY, 64)
  542. UpY, _ := strconv.ParseFloat(dataentrylist[i].UpY, 64)
  543. if DownX == 0{
  544. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F44", dataentrylist[i].DownX)
  545. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G44", dataentrylist[i].MidDownX)
  546. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H44", dataentrylist[i].MiddleX)
  547. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K44", dataentrylist[i].MidUpX)
  548. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N44", dataentrylist[i].UpX)
  549. }else{
  550. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F44", DownX-DownX)
  551. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G44", MidDownX-DownX)
  552. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H44", MiddleX-DownX)
  553. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K44", MidUpX-DownX)
  554. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N44", UpX-DownX)
  555. }
  556. if DownY == 0{
  557. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F45", dataentrylist[i].DownY)
  558. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G45", dataentrylist[i].MidDownY)
  559. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H45", dataentrylist[i].MiddleY)
  560. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K45", dataentrylist[i].MidUpY)
  561. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N45", dataentrylist[i].UpY)
  562. }else{
  563. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "F45", DownY-DownY)
  564. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "G45", MidDownY-DownY)
  565. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "H45", MiddleY-DownY)
  566. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "K45", MidUpY-DownY)
  567. xlsx.SetCellValue("Sheet"+strconv.Itoa(i+sheetIdx), "N45", UpY-DownY)
  568. }
  569. }
  570. //4. 将文件保存到服务器相关目录上
  571. xlsx.SaveAs(utils.Cfg.MustValue("file", "docDir") + utils.ToStr(dataentrymainlist.Id) + "/" + tmpDocName)
  572. //5. 上传文件到文件服务器
  573. DocFilePath := utils.Cfg.MustValue("file", "docDir") + utils.ToStr(dataentrymainlist.Id) + "/" + tmpDocName
  574. var sw *Seaweed
  575. var filer []string
  576. if _filer := os.Getenv("GOSWFS_FILER_URL"); _filer != "" {
  577. filer = []string{_filer}
  578. }
  579. sw = NewSeaweed("http", utils.Cfg.MustValue("file", "upFileHost"), filer, 2*1024*1024, 5*time.Minute)
  580. _, _, fID, err := sw.UploadFile(DocFilePath, "", "")
  581. retDocUrl := utils.Cfg.MustValue("file", "downFileHost") + "/" + fID
  582. //6. 删除本地文件,释放空间
  583. os.Remove(DocFilePath)
  584. //7. 保存住报告URL(由controller层调用生成或修改生成报告记录)
  585. return retDocUrl, err
  586. }
  587. //型号字母去除
  588. func (s *LimsReportBeamPumpingUnitsService) IsEnglishCap(str string) string {
  589. pat := `[[:upper:]]+`
  590. specification := str
  591. //r, _ := regexp.Compile(`[[:upper:]]+`)
  592. //fmt.Println(r.MatchString(specification))
  593. if ok, _ := regexp.MatchString(pat, specification); ok {
  594. fmt.Println("match found")
  595. }
  596. re, _ := regexp.Compile(pat)
  597. //将匹配到的部分替换为""
  598. Specif :=re.ReplaceAllString(specification, "")
  599. return Specif
  600. }