Task.go 55 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487
  1. package Task
  2. import (
  3. "ColdVerify_server/conf"
  4. "ColdVerify_server/lib"
  5. "ColdVerify_server/logs"
  6. "ColdVerify_server/models/InfoCollection"
  7. "encoding/json"
  8. "errors"
  9. "fmt"
  10. "strconv"
  11. "strings"
  12. "time"
  13. "github.com/astaxie/beego/cache"
  14. "github.com/beego/beego/v2/adapter/orm"
  15. orm2 "github.com/beego/beego/v2/client/orm"
  16. _ "github.com/go-sql-driver/mysql"
  17. )
  18. var (
  19. TaskSchemeStateWaitSubmit = 0 // 待提交
  20. TaskSchemeStateSubmitted = 5 // 已提交
  21. TaskSchemeStateClientPass = 1 // 已通过(客户)
  22. TaskSchemeStateClientReturn = 2 // 已退回(客户)
  23. TaskSchemeStatePass = 3 // 已通过(负责人)
  24. TaskSchemeStateReturn = 4 // 已退回(负责人)
  25. TaskSchemeStateMap = map[int]string{
  26. TaskSchemeStateWaitSubmit: "待提交",
  27. TaskSchemeStateSubmitted: "已提交",
  28. TaskSchemeStateClientPass: "已通过(客户)",
  29. TaskSchemeStateClientReturn: "已驳回(客户)",
  30. TaskSchemeStatePass: "已通过",
  31. TaskSchemeStateReturn: "已退回",
  32. }
  33. // 0 未完成 1 数据来源已完成 2 处理中 3 已采集-无数据 4-数据编辑已完成(已提交) 5已通过(报告负责人) 6已退回(报告负责人)
  34. TaskCollectionStateWaitSubmit = 0 // 待提交
  35. TaskCollectionStateFinish = 1 // 已完成
  36. TaskCollectionStateInProgress = 2 // 处理中
  37. TaskCollectionStateNoData = 3 // 已采集-无数据
  38. TaskCollectionStateSubmitted = 4 // 已提交
  39. TaskCollectionStatePass = 5 // 已通过(负责人)
  40. TaskCollectionStateReturn = 6 // 已退回(负责人)
  41. TaskCollectionStateMap = map[int]string{
  42. TaskCollectionStateWaitSubmit: "待提交",
  43. TaskCollectionStateFinish: "已完成",
  44. TaskCollectionStateInProgress: "处理中",
  45. TaskCollectionStateNoData: "已采集-无数据",
  46. TaskCollectionStateSubmitted: "APP已提交",
  47. TaskCollectionStatePass: "已通过",
  48. TaskCollectionStateReturn: "已退回",
  49. }
  50. TaskReportingStateWaitSubmit = 0 // 待提交
  51. TaskReportingStateSubmitted = 5 // 已提交
  52. TaskReportingStateClientPass = 1 // 已通过(客户)
  53. TaskReportingStateClientReturn = 2 // 已退回(客户)
  54. TaskReportingStatePass = 3 // 已通过
  55. TaskReportingStateReturn = 4 // 已退回
  56. TaskReportingStateMap = map[int]string{
  57. TaskReportingStateWaitSubmit: "待提交",
  58. TaskReportingStateSubmitted: "已提交",
  59. TaskReportingStateClientPass: "已通过(客户)",
  60. TaskReportingStateClientReturn: "已驳回(客户)",
  61. TaskReportingStatePass: "已通过",
  62. TaskReportingStateReturn: "已退回",
  63. }
  64. TaskExaminingReportStateWaitSubmit = 0 // 待提交
  65. TaskExaminingReportStateSubmitted = 5 // 已提交
  66. TaskExaminingReportStateClientPass = 1 // 已通过(客户)
  67. TaskExaminingReportStateClientReturn = 2 // 已退回(客户)
  68. TaskExaminingReportStatePass = 3 // 已通过
  69. TaskExaminingReportStateReturn = 4 // 已退回
  70. TaskExaminingReportStateClickGenerate = 6 // 已退回
  71. TaskExaminingReportStateMap = map[int]string{
  72. TaskExaminingReportStateWaitSubmit: "待提交",
  73. TaskExaminingReportStateSubmitted: "已提交",
  74. TaskExaminingReportStateClientPass: "已通过(客户)",
  75. TaskExaminingReportStateClientReturn: "已驳回(客户)",
  76. TaskExaminingReportStatePass: "已通过",
  77. TaskExaminingReportStateReturn: "已退回",
  78. TaskExaminingReportStateClickGenerate: "已点击报告生成",
  79. }
  80. TaskOriginalRecordStateWaitSubmit = 0 // 待提交
  81. TaskOriginalRecordStateSubmitted = 5 // 已提交
  82. TaskOriginalRecordStatePass = 3 // 已通过
  83. TaskOriginalRecordStateReturn = 4 // 已退回
  84. TaskOriginalRecordStateMap = map[int]string{
  85. TaskOriginalRecordStateWaitSubmit: "待提交",
  86. TaskOriginalRecordStateSubmitted: "已提交",
  87. TaskOriginalRecordStatePass: "已通过",
  88. TaskOriginalRecordStateReturn: "已退回",
  89. }
  90. TaskDeliveryStateUnfinished = 0 // 未完成
  91. TaskDeliveryStateFinished = 1 // 已完成
  92. TaskDeliveryStateGoing = 2 // 进行中
  93. TaskDeliveryStateMap = map[int]string{
  94. TaskDeliveryStateUnfinished: "未完成",
  95. TaskDeliveryStateFinished: "已完成",
  96. TaskDeliveryStateGoing: "处理中",
  97. }
  98. TaskMarkingStateUnfinished = 0 // 未完成
  99. TaskMarkingStateFinished = 1 // 已完成
  100. TaskMarkingStateMap = map[int]string{
  101. TaskMarkingStateUnfinished: "未完成",
  102. TaskMarkingStateFinished: "已完成",
  103. }
  104. )
  105. var (
  106. TaskSchemeTimeLimit = map[string]float64{
  107. "BWX": 30, // 保温箱
  108. "LDX": 30, // 冷冻箱
  109. "LCG": 30, // 冷藏柜
  110. "LDG": 30, // 冷冻柜
  111. "YLG": 30, // 阴凉柜
  112. "LDC": 60, // 冷藏车
  113. "LK": 60, // 冷库
  114. "BG": 60, // 冰柜
  115. "DWBWX": 60, // 低温保存箱
  116. "XT": 30, // 系统验证
  117. "WZ": 80, // 位置
  118. "XJ": 0, // 巡检
  119. "PX": 0, // 培训
  120. "QT": 0, // 其他
  121. }
  122. TaskReportingTimeLimit = map[string]float64{
  123. "BWX": 180, // 保温箱
  124. "LDX": 180, // 冷冻箱
  125. "LCG": 210, // 冷藏柜
  126. "LDG": 210, // 冷冻柜
  127. "YLG": 210, // 阴凉柜
  128. "LDC": 300, // 冷藏车
  129. "LK": 390, // 冷库
  130. "BG": 210, // 冰柜
  131. "DWBWX": 180, // 低温保存箱
  132. "XT": 300, // 系统验证
  133. "WZ": 240, // 位置
  134. "XJ": 0, // 巡检
  135. "PX": 0, // 培训
  136. "QT": 0, // 其他
  137. }
  138. TaskCollectionTimeLimit float64 = 7 * 24 * 60
  139. )
  140. type AuditRecord struct {
  141. T_uuid string `orm:"size(256);null"` // 提交人(客户)UUID
  142. T_uuid_name string `orm:"size(256);null"` // 提交人名称
  143. T_admin string `orm:"size(256);null"` // 提交人(报告负责人)UUID
  144. T_admin_name string `orm:"size(256);null"` // 提交人名称
  145. T_state int `orm:"size(2);default(0)"` // 状态 1 已完成(客户通过) 2已退回(客户) 3已通过(报告负责人) 4已退回(报告负责人) 5已提交
  146. T_reason string `orm:"type(text)"` // 原因
  147. T_time string `orm:"type(256)"` // 时间
  148. T_type string `orm:"type(256)"` // 退回类型 scheme方案 reporting报告
  149. }
  150. // 模版
  151. type Task struct {
  152. Id int `orm:"column(ID);size(11);auto;pk"`
  153. T_Distributor_id string `orm:"size(256);null"` // 分销商id
  154. T_class int `orm:"size(200);default(0)"` // 分类id
  155. T_InfoCollection_id string `orm:"size(256);null"` // 信息采集ID
  156. T_InfoTemplate_id string `orm:"size(256);null"` // 信息采集模版ID
  157. T_task_id string `orm:"size(256);null"` // 任务ID
  158. T_uuid string `orm:"size(256);null"` // 用户 UUID
  159. T_name string `orm:"size(256);null"` // 标题
  160. T_VerifyTemplate_class string `orm:"size(256);null"` // 模版id
  161. T_VerifyTemplate_id string `orm:"size(256);null"` // 模版id
  162. T_deadline string `orm:"size(256);null"` // 截止时间
  163. T_scheme string `orm:"size(256);null"` // 实施方案 负责人UUID
  164. T_collection string `orm:"size(256);null"` // 数据采集 负责人UUID
  165. T_reporting string `orm:"size(256);null"` // 报告编写 负责人UUID
  166. T_delivery string `orm:"size(256);null"` // 交付审核 负责人UUID
  167. T_scheme_state int `orm:"size(2);default(0)"` // 实施方案 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
  168. T_collection_state int `orm:"size(2);default(0)"` // 数据采集 状态 0 未完成 1 数据来源已完成 2 处理中 3 已采集-无数据 4 APP已提交 5已通过(负责人) 6已退回(负责人)
  169. T_reporting_state int `orm:"size(2);default(0)"` // 报告编写 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交 6已点报告生成
  170. T_delivery_state int `orm:"size(2);default(0)"` // 交付审核 状态 0 未完成 1 已完成 2 处理中
  171. T_marking_state int `orm:"size(2);default(0)"` // 验证标识 状态 0 未完成 1 已完成
  172. T_examining_report_state int `orm:"size(2);default(0)"` // 检测报告 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
  173. T_original_record_state int `orm:"size(2);default(0)"` // 原始记录 状态 0 未完成 3 已通过(负责人) 4已退回(负责人) 5已提交
  174. T_record string `orm:"type(text)"` // 领导备注
  175. T_collection_submit_time string `orm:"size(256);null"` // 数据采集 提交时间
  176. T_reporting_submit_time string `orm:"size(256);null"` // 报告编写 提交时间
  177. T_VerifyDeviceDataStartTime string `orm:"size(256);null"` // 验证设备数据开始时间
  178. T_VerifyDeviceDataEndTime string `orm:"size(256);null"` // 验证设备数据结束时间
  179. T_BindDeviceDataStartTime string `orm:"size(256);null"` // 绑定设备数据开始时间
  180. T_BindDeviceDataEndTime string `orm:"size(256);null"` // 绑定设备数据结束时间
  181. T_doc1 string `orm:"type(text);null"` // 封面
  182. T_pdf1 string `orm:"type(text);null"` // 验证方案
  183. T_pdf1_watermark string `orm:"type(text);null"` // 验证方案 带水印
  184. T_pdf1_signature string `orm:"type(text);null"` // 验证方案 带公章
  185. T_pdf1_elec_signature string `orm:"type(text);null"` // 验证方案 带电子签名及公章
  186. T_doc2 string `orm:"type(text);null"` // 报告
  187. T_pdf2 string `orm:"type(text);null"` // 验证报告
  188. T_pdf2_watermark string `orm:"type(text);null"` // 验证报告 带水印
  189. T_pdf2_signature string `orm:"type(text);null"` // 验证报告 带公章
  190. T_pdf2_elec_signature string `orm:"type(text);null"` // 验证报告 带电子签名及公章
  191. T_doc3 string `orm:"type(text);null"` // 证书
  192. T_pdf3 string `orm:"type(text);null"` // 证书
  193. T_pdf4 string `orm:"type(text);null"` // 验证标识
  194. T_pdf5 string `orm:"type(text);null"` // 检测报告
  195. T_pdf5_watermark string `orm:"type(text);null"` // 检测报告 带水印
  196. T_pdf6 string `orm:"type(text);null"` // 原始记录
  197. T_Show int `orm:"size(2);default(1)"` // 0 隐藏 1 公开
  198. T_Visit int `orm:"size(200);default(0)"` // 浏览量
  199. T_State int `orm:"size(2);default(1)"` // 0 删除 1 正常
  200. T_step int `orm:"size(2);default(-1)"` // 验证步骤
  201. T_sn string `orm:"size(256);null"` // sn
  202. T_CalibrationExpirationTime string `orm:"size(256);null"` // 校准到期时间
  203. T_project string `orm:"size(256);null"` // 项目 负责人UUID
  204. T_province string `orm:"size(256);null"` // 省
  205. T_city string `orm:"size(256);null"` // 市
  206. T_district string `orm:"size(256);null"` // 区
  207. T_province_code string `orm:"size(256);null"` // 省 code
  208. T_city_code string `orm:"size(256);null"` // 市 code
  209. T_district_code string `orm:"size(256);null"` // 区 code
  210. T_category string `orm:"size(256);null"` // 类别
  211. T_device_type string `orm:"size(256);null"` // 设备类型
  212. T_volume string `orm:"size(256);null"` // 规格/容积
  213. T_verify_type string `orm:"size(256);null"` // 验证类型
  214. T_subject_matter string `orm:"size(256);null"` // 标的物名称
  215. T_temp_range string `orm:"size(256);null"` // 验证温度范围
  216. T_report_number string `orm:"size(256);null"` // 报告编号
  217. T_report_type string `orm:"size(256);null"` // 报告类型
  218. T_start_time string `orm:"size(256);null"` // 项目开始时间
  219. T_end_time string `orm:"size(256);null"` // 结束时间 报告审核通过时间
  220. T_time_interval float64 `orm:"size(256);null"` // 时间间隔 单位分钟
  221. T_reject_times int `orm:"size(256);null"` // 驳回次数 客户退回方案和报告时
  222. T_reject_record string `orm:"type(text)"` // 驳回记录
  223. // 方案
  224. T_scheme_start_time string `orm:"size(256);null"` // 验证方案开始时间 接收信息采集表的时间
  225. T_scheme_end_time string `orm:"size(256);null"` // 验证方案结束时间 负责人审核通过后最后一次上传时间
  226. T_scheme_time_interval float64 `orm:"size(256);null"` // 时间间隔 单位分钟
  227. T_scheme_overtime float64 `orm:"size(256);null"` // 验证方案超时时间 单位分钟
  228. T_scheme_signature string `orm:"type(text)"` // 验证方案客户签字确认图片
  229. T_scheme_return_times int `orm:"size(256);null"` // 验证方案退回次数
  230. T_scheme_audit_record string `orm:"type(text)"` // 验证方案审核记录
  231. // 实施
  232. T_enter_area_time string `orm:"size(256);null"` // 进场时间
  233. T_collection_start_time string `orm:"size(256);null"` // 实施开始时间(app开始验证时间)
  234. T_collection_end_time string `orm:"size(256);null"` // 实施结束时间 (审核通过后签字确认提交时间)
  235. T_collection_time_interval float64 `orm:"size(256);null"` // 时间间隔 单位分钟
  236. T_collection_overtime float64 `orm:"size(256);null"` // 实施超时时间 单位分钟
  237. T_collection_signature string `orm:"type(text)"` // 实施人员签字确认图片
  238. T_collection_return_times int `orm:"size(256);null"` // 实施方案退回次数
  239. T_collection_audit_record string `orm:"type(text);null"` // 实施方案审核记录
  240. // 报告
  241. T_reporting_start_time string `orm:"size(256);null"` // 验证报告开始时间 接收信息采集表的时间
  242. T_reporting_end_time string `orm:"size(256);null"` // 验证报告结束时间 负责人审核通过前最后一次上传时间
  243. T_reporting_time_interval float64 `orm:"size(256);null"` // 时间间隔 单位分钟
  244. T_reporting_overtime float64 `orm:"size(256);null"` // 验证报告超时时间 单位分钟
  245. T_reporting_signature string `orm:"type(text)"` // 验证报告客户签字确认图片
  246. T_reporting_return_times int `orm:"size(256);null"` // 验证报告退回次数
  247. T_reporting_audit_record string `orm:"type(text);null"` // 验证报告审核记录
  248. T_reporting_pass_time string `orm:"size(256);null"` // 验证报告负责人通过时间
  249. // 检测报告
  250. T_examining_report_start_time string `orm:"size(256);null"` // 检测报告开始时间 接收信息采集表的时间
  251. T_examining_report_end_time string `orm:"size(256);null"` // 检测报告结束时间 负责人审核通过前最后一次上传时间
  252. T_examining_report_time_interval float64 `orm:"size(256);null"` // 时间间隔 单位分钟
  253. T_examining_report_signature string `orm:"type(text)"` // 检测报告客户签字确认图片
  254. T_examining_report_return_times int `orm:"size(256);null"` // 检测报告退回次数
  255. T_examining_report_audit_record string `orm:"type(text);null"` // 检测报告审核记录
  256. // 原始记录
  257. T_original_record_start_time string `orm:"size(256);null"` // 原始记录开始时间 接收信息采集表的时间
  258. T_original_record_end_time string `orm:"size(256);null"` // 原始记录结束时间 负责人审核通过前最后一次上传时间
  259. T_original_record_time_interval float64 `orm:"size(256);null"` // 时间间隔 单位分钟
  260. T_original_record_signature string `orm:"type(text)"` // 原始记录客户签字确认图片
  261. T_original_record_return_times int `orm:"size(256);null"` // 原始记录退回次数
  262. T_original_record_audit_record string `orm:"type(text);null"` // 原始记录审核记录
  263. T_device_quantity int `orm:"size(20);default(0)"` // 终端数量 T_device_type=WZ 必填
  264. T_cnas int `orm:"size(256);default(0)"` // 0-否 1-是
  265. T_cover int `orm:"size(20);default(0)"` // 是否覆盖询问
  266. T_backup string `orm:"size(256);null"` // 历史数据记录
  267. CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
  268. UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now 每次 model 保存时都会对时间自动更新
  269. }
  270. type Task_ struct {
  271. Id int
  272. T_Distributor_id string // 信息采集ID
  273. T_class int // 分类ID
  274. T_InfoCollection_id string // 信息采集ID
  275. T_task_id string // 任务ID
  276. T_uuid string // 用户 UUID
  277. T_user_name string // 用户 UUID
  278. T_name string // 标题
  279. T_VerifyTemplate_class string // 任务模版id
  280. T_VerifyTemplate_id string // 任务模版id
  281. T_deadline string // 截止时间
  282. T_scheme string // 实施方案 负责人UUID
  283. T_collection string // 数据采集 负责人UUID
  284. T_reporting string // 报告编写 负责人UUID
  285. T_delivery string // 交付审核 负责人UUID
  286. T_scheme_state int // 实施方案 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
  287. T_collection_state int // 数据采集 状态 0 未完成 1 数据来源已完成 2 处理中 3 已采集-无数据 4-数据编辑已完成(已提交) 5已通过(负责人) 6已退回(负责人)
  288. T_reporting_state int // 报告编写 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
  289. T_delivery_state int // 交付审核 状态 0 未完成 1 已完成 2 处理中
  290. T_marking_state int // 验证标识 状态 0 未完成 1 已完成
  291. T_examining_report_state int // 检测报告 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
  292. T_original_record_state int // 原始记录 状态 0 未完成 3 已通过(负责人) 4已退回(负责人) 5已提交
  293. T_scheme_state_str string // 实施方案 状态 字符串
  294. T_collection_state_str string // 数据采集 状态 字符串
  295. T_reporting_state_str string // 报告编写 状态 字符串
  296. T_delivery_state_str string // 交付审核 状态 字符串
  297. T_marking_state_str string // 验证标识 状态 字符串
  298. T_examining_report_state_str string // 检测报告 状态 字符串
  299. T_original_record_state_str string // 原始记录 状态 字符串
  300. T_scheme_name string // 实施方案 负责人姓名
  301. T_collection_name string // 数据采集 负责人姓名
  302. T_reporting_name string // 报告编写 负责人姓名
  303. T_delivery_name string // 交付审核 负责人姓名
  304. T_VerifyDeviceDataStartTime string
  305. T_VerifyDeviceDataEndTime string
  306. T_VerifyDeviceDataTime [2]string // 验证设备数据开始-结束时间
  307. T_BindDeviceDataTime [2]string // 绑定设备数据开始-结束时间
  308. T_doc1 string // 封面
  309. T_pdf1 string // 验证方案
  310. T_pdf1_signature string // 验证方案 带公章
  311. T_doc2 string // 报告
  312. T_pdf2 string // 报告
  313. T_pdf2_signature string // 报告 带公章
  314. T_doc3 string // 证书
  315. T_pdf3 string // 证书
  316. T_pdf4 string // 验证标识
  317. T_pdf5 string // 检测报告
  318. T_Show int // 0 公开 1 隐藏
  319. T_Visit int // 浏览量
  320. T_State int // 0 删除 1 正常
  321. T_sn string // sn
  322. T_CalibrationExpirationTime string // 校准到期时间
  323. T_project string // 项目 负责人UUID
  324. T_project_name string // 项目 负责人姓名
  325. T_province string // 省
  326. T_city string // 市
  327. T_district string // 区
  328. T_area []string // 省市区
  329. T_province_code string // 省 code
  330. T_city_code string // 市 code
  331. T_district_code string // 区 code
  332. T_area_code []string // 省市区
  333. InfoCollection InfoCollection.InfoCollection //信息采集
  334. T_record string //
  335. T_device_type string
  336. T_verify_type string
  337. T_reporting_pass_time string
  338. T_device_quantity int
  339. T_cnas int // cnas实验室
  340. T_cover int // 是否覆盖询问
  341. T_backup string // 历史数据记录
  342. }
  343. type Task_Stat struct {
  344. Id int
  345. T_Distributor_id string // 信息采集ID
  346. T_class int // 分类ID
  347. T_InfoCollection_id string // 信息采集ID
  348. T_InfoTemplate_id string // 信息采集模版ID
  349. T_task_id string // 任务ID
  350. T_uuid string // 用户 UUID
  351. T_user_name string // 用户 UUID
  352. T_name string // 标题
  353. T_VerifyTemplate_class string // 任务模版id
  354. T_VerifyTemplate_id string // 任务模版id
  355. T_deadline string // 截止时间
  356. T_scheme string // 实施方案 负责人UUID
  357. T_collection string // 数据采集 负责人UUID
  358. T_reporting string // 报告编写 负责人UUID
  359. T_delivery string // 交付审核 负责人UUID
  360. T_scheme_state int // 实施方案 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
  361. T_collection_state int // 数据采集 状态 0 未完成 1 数据来源已完成 2 处理中 3 已采集-无数据 4-数据编辑已完成(已提交) 5已通过(负责人) 6已退回(负责人)
  362. T_reporting_state int // 报告编写 状态 0 未完成 1 已完成(客户通过) 2已退回(客户) 3已通过(负责人) 4已退回(负责人) 5已提交
  363. T_delivery_state int // 交付审核 状态 0 未完成 1 已完成 2 处理中
  364. T_marking_state int // 验证标识 状态 0 未完成 1 已完成
  365. T_scheme_state_str string // 实施方案 状态 字符串
  366. T_collection_state_str string // 数据采集 状态 字符串
  367. T_reporting_state_str string // 报告编写 状态 字符串
  368. T_delivery_state_str string // 交付审核 状态 字符串
  369. T_marking_state_str string // 验证标识 状态 字符串
  370. T_examining_report_state_str string // 检测报告 状态 字符串
  371. T_original_record_state_str string // 原始记录 状态 字符串
  372. T_scheme_name string // 实施方案 负责人姓名
  373. T_collection_name string // 数据采集 负责人姓名
  374. T_reporting_name string // 报告编写 负责人姓名
  375. T_delivery_name string // 交付审核 负责人姓名
  376. T_VerifyDeviceDataTime [2]string // 验证设备数据开始-结束时间
  377. T_BindDeviceDataTime [2]string // 绑定设备数据开始-结束时间
  378. T_doc1 string // 封面
  379. T_pdf1 string // 验证方案
  380. T_doc2 string // 报告
  381. T_pdf2 string // 报告
  382. T_doc3 string // 证书
  383. T_pdf3 string // 证书
  384. T_pdf4 string // 验证标识
  385. T_Show int // 0 公开 1 隐藏
  386. T_Visit int // 浏览量
  387. T_State int // 0 删除 1 正常
  388. T_sn string // sn
  389. T_CalibrationExpirationTime string // 校准到期时间
  390. T_project string // 项目 负责人UUID
  391. T_project_name string // 项目 负责人姓名
  392. T_province string // 省
  393. T_city string // 市
  394. T_district string // 区
  395. T_area []string // 省市区
  396. T_province_code string // 省 code
  397. T_city_code string // 市 code
  398. T_district_code string // 区 code
  399. T_area_code []string // 省市区
  400. T_category string // 类别
  401. T_device_type string // 设备类型
  402. T_volume string // 规格/容积
  403. T_verify_type string // 验证类型
  404. T_subject_matter string // 标的物名称
  405. T_temp_range string // 验证温度范围
  406. T_report_number string // 报告编号
  407. T_report_type string // 报告类型
  408. T_start_time string // 项目开始时间
  409. T_end_time string // 结束时间 报告审核通过时间
  410. T_time_interval string // 时间间隔 单位分钟
  411. T_reject_times int // 驳回次数 客户退回方案和报告时
  412. T_reject_record string // 驳回记录
  413. // 方案
  414. T_scheme_start_time string // 验证方案开始时间 接收信息采集表的时间
  415. T_scheme_end_time string // 验证方案结束时间
  416. T_scheme_time_interval string // 时间间隔 单位分钟
  417. T_scheme_overtime string // 验证方案超时时间 单位分钟
  418. T_scheme_signature string // 验证方案客户签字确认图片
  419. T_scheme_return_times int // 验证方案退回次数
  420. T_scheme_audit_record string // 验证方案审核记录
  421. // 实施
  422. T_enter_area_time string // 进场时间
  423. T_collection_start_time string // 实施开始时间(app开始验证时间)
  424. T_collection_end_time string // 实施结束时间 (签字确认提交时间)
  425. T_collection_time_interval string // 时间间隔 单位分钟
  426. T_collection_overtime string // 实施超时时间 单位分钟
  427. T_collection_signature string // 实施人员签字确认图片
  428. T_collection_return_times int // 实施方案退回次数
  429. T_collection_audit_record string // 实施方案审核记录
  430. // 报告
  431. T_reporting_start_time string // 验证报告开始时间 接收信息采集表的时间
  432. T_reporting_end_time string // 验证报告结束时间
  433. T_reporting_time_interval string // 时间间隔 单位分钟
  434. T_reporting_overtime string // 验证报告超时时间 单位分钟
  435. T_reporting_signature string // 验证报告客户签字确认图片
  436. T_reporting_return_times int // 验证报告退回次数
  437. T_reporting_audit_record string // 验证报告审核记录
  438. InfoCollection InfoCollection.InfoCollection_R //信息菜鸡
  439. T_record string //
  440. T_device_quantity int
  441. T_cnas int // cnas实验室
  442. T_cover int // 是否覆盖询问
  443. T_backup string // 历史数据记录
  444. }
  445. func (t *Task) TableName() string {
  446. return "task" // 数据库名称 // ************** 替换 FormulaList **************
  447. }
  448. var redisCache_Task cache.Cache
  449. func init() {
  450. //注册模型
  451. orm.RegisterModel(new(Task))
  452. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  453. "redis_"+"Task", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  454. logs.Println(config)
  455. var err error
  456. redisCache_Task, err = cache.NewCache("redis", config)
  457. if err != nil || redisCache_Task == nil {
  458. errMsg := "failed to init redis"
  459. logs.Println(errMsg, err)
  460. }
  461. }
  462. // -------------------------------------------------------------
  463. // selectPdf 根据条件选择PDF文件
  464. // 返回选中的PDF和signature PDF
  465. func selectPdf(watermark, original, signature, elecSignature string, isReturnedMoney bool, hasInfoCollection bool) (selectedPdf, selectedSignature string) {
  466. // 默认使用watermark版本
  467. selectedPdf = watermark
  468. // 如果满足以下任一条件,使用原始版本:退款状态、无InfoCollection、watermark为空
  469. if isReturnedMoney || !hasInfoCollection || len(watermark) == 0 {
  470. selectedPdf = original
  471. // 如果是退款状态,优先选择签名版本(电子签名优先于普通签名)
  472. if isReturnedMoney {
  473. if len(elecSignature) > 0 {
  474. selectedPdf = elecSignature
  475. } else if len(signature) > 0 {
  476. selectedPdf = signature
  477. }
  478. }
  479. }
  480. // 设置signature,如果为空则使用原始版本
  481. selectedSignature = signature
  482. if len(selectedSignature) == 0 {
  483. selectedSignature = original
  484. }
  485. return selectedPdf, selectedSignature
  486. }
  487. func TaskToTask_(T Task, userMap, adminMap map[string]string) (T_ Task_) {
  488. T_.Id = T.Id
  489. T_.T_Distributor_id = T.T_Distributor_id
  490. T_.T_class = T.T_class
  491. T_.T_InfoCollection_id = T.T_InfoCollection_id
  492. if len(T.T_InfoCollection_id) > 0 {
  493. T_.InfoCollection, _ = InfoCollection.Read_InfoCollection(T.T_InfoCollection_id)
  494. }
  495. T_.T_task_id = T.T_task_id
  496. T_.T_uuid = T.T_uuid
  497. T_.T_user_name = userMap[T.T_uuid]
  498. T_.T_name = T.T_name
  499. T_.T_VerifyTemplate_class = T.T_VerifyTemplate_class
  500. T_.T_VerifyTemplate_id = T.T_VerifyTemplate_id
  501. T_.T_deadline = T.T_deadline
  502. T_.T_scheme = T.T_scheme
  503. T_.T_collection = T.T_collection
  504. T_.T_reporting = T.T_reporting
  505. T_.T_delivery = T.T_delivery
  506. T_.T_project = T.T_project
  507. T_.T_scheme_state = T.T_scheme_state
  508. T_.T_collection_state = T.T_collection_state
  509. T_.T_reporting_state = T.T_reporting_state
  510. T_.T_delivery_state = T.T_delivery_state
  511. T_.T_marking_state = T.T_marking_state
  512. T_.T_scheme_state_str = TaskSchemeStateMap[T.T_scheme_state]
  513. T_.T_collection_state_str = TaskCollectionStateMap[T.T_collection_state]
  514. T_.T_reporting_state_str = TaskReportingStateMap[T.T_reporting_state]
  515. T_.T_delivery_state_str = TaskDeliveryStateMap[T.T_delivery_state]
  516. T_.T_marking_state_str = TaskMarkingStateMap[T.T_marking_state]
  517. T_.T_examining_report_state_str = TaskExaminingReportStateMap[T.T_examining_report_state]
  518. T_.T_original_record_state_str = TaskOriginalRecordStateMap[T.T_original_record_state]
  519. T_.T_scheme_name = adminMap[T.T_scheme]
  520. T_.T_collection_name = adminMap[T.T_collection]
  521. T_.T_reporting_name = adminMap[T.T_reporting]
  522. T_.T_delivery_name = adminMap[T.T_delivery]
  523. T_.T_project_name = adminMap[T.T_project]
  524. T_.T_VerifyDeviceDataStartTime = T.T_VerifyDeviceDataStartTime
  525. T_.T_VerifyDeviceDataEndTime = T.T_VerifyDeviceDataEndTime
  526. T_.T_VerifyDeviceDataTime = [2]string{T.T_VerifyDeviceDataStartTime, T.T_VerifyDeviceDataEndTime}
  527. T_.T_BindDeviceDataTime = [2]string{T.T_BindDeviceDataStartTime, T.T_BindDeviceDataEndTime}
  528. T_.T_doc1 = T.T_doc1
  529. T_.T_doc2 = T.T_doc2
  530. T_.T_doc3 = T.T_doc3
  531. // 处理PDF1和PDF2的选择逻辑
  532. isReturnedMoney := T_.InfoCollection.T_status == InfoCollection.InfoCollectionStatusReturnedMoney
  533. hasInfoCollection := len(T.T_InfoCollection_id) > 0
  534. T_.T_pdf1, T_.T_pdf1_signature = selectPdf(
  535. T.T_pdf1_watermark,
  536. T.T_pdf1,
  537. T.T_pdf1_signature,
  538. T.T_pdf1_elec_signature,
  539. isReturnedMoney,
  540. hasInfoCollection,
  541. )
  542. T_.T_pdf2, T_.T_pdf2_signature = selectPdf(
  543. T.T_pdf2_watermark,
  544. T.T_pdf2,
  545. T.T_pdf2_signature,
  546. T.T_pdf2_elec_signature,
  547. isReturnedMoney,
  548. hasInfoCollection,
  549. )
  550. T_.T_pdf3 = T.T_pdf3
  551. T_.T_pdf4 = T.T_pdf4
  552. T_.T_pdf5 = T.T_pdf5_watermark
  553. if T_.InfoCollection.T_status == InfoCollection.InfoCollectionStatusReturnedMoney || len(T.T_InfoCollection_id) == 0 || len(T.T_pdf2_watermark) == 0 {
  554. }
  555. T_.T_Show = T.T_Show
  556. T_.T_Visit = T.T_Visit
  557. T_.T_State = T.T_State
  558. T_.T_sn = T.T_sn
  559. T_.T_CalibrationExpirationTime = T.T_CalibrationExpirationTime
  560. T_.T_record = T.T_record
  561. T_.T_device_type = T.T_device_type
  562. T_.T_verify_type = T.T_verify_type
  563. T_.T_reporting_pass_time = T.T_reporting_pass_time
  564. T_.T_device_quantity = T.T_device_quantity
  565. T_.T_cnas = T.T_cnas
  566. T_.T_cover = T.T_cover
  567. T_.T_backup = T.T_backup
  568. return T_
  569. }
  570. func TaskToTask_Stat(T Task, userMap, adminMap map[string]string) (T_ Task_Stat) {
  571. T_.Id = T.Id
  572. T_.T_Distributor_id = T.T_Distributor_id
  573. T_.T_class = T.T_class
  574. T_.T_InfoCollection_id = T.T_InfoCollection_id
  575. if len(T.T_InfoCollection_id) > 0 {
  576. infoCollection, _ := InfoCollection.Read_InfoCollection(T.T_InfoCollection_id)
  577. T_.InfoCollection = InfoCollection.InfoCollectionToInfoCollection_R(infoCollection, userMap, adminMap, map[string]string{}, map[string]string{})
  578. }
  579. T_.T_task_id = T.T_task_id
  580. T_.T_uuid = T.T_uuid
  581. T_.T_user_name = userMap[T.T_uuid]
  582. T_.T_name = T.T_name
  583. T_.T_VerifyTemplate_class = T.T_VerifyTemplate_class
  584. T_.T_VerifyTemplate_id = T.T_VerifyTemplate_id
  585. T_.T_deadline = T.T_deadline
  586. T_.T_scheme = T.T_scheme
  587. T_.T_collection = T.T_collection
  588. T_.T_reporting = T.T_reporting
  589. T_.T_delivery = T.T_delivery
  590. T_.T_scheme_state = T.T_scheme_state
  591. T_.T_collection_state = T.T_collection_state
  592. T_.T_reporting_state = T.T_reporting_state
  593. T_.T_delivery_state = T.T_delivery_state
  594. T_.T_marking_state = T.T_marking_state
  595. T_.T_scheme_state_str = TaskSchemeStateMap[T.T_scheme_state]
  596. T_.T_collection_state_str = TaskCollectionStateMap[T.T_collection_state]
  597. T_.T_reporting_state_str = TaskReportingStateMap[T.T_reporting_state]
  598. T_.T_delivery_state_str = TaskDeliveryStateMap[T.T_delivery_state]
  599. T_.T_marking_state_str = TaskMarkingStateMap[T.T_marking_state]
  600. T_.T_examining_report_state_str = TaskExaminingReportStateMap[T.T_examining_report_state]
  601. T_.T_original_record_state_str = TaskOriginalRecordStateMap[T.T_original_record_state]
  602. T_.T_project_name = adminMap[T.T_project]
  603. T_.T_scheme_name = adminMap[T.T_scheme]
  604. T_.T_collection_name = adminMap[T.T_collection]
  605. T_.T_reporting_name = adminMap[T.T_reporting]
  606. T_.T_delivery_name = adminMap[T.T_delivery]
  607. T_.T_VerifyDeviceDataTime = [2]string{T.T_VerifyDeviceDataStartTime, T.T_VerifyDeviceDataEndTime}
  608. T_.T_BindDeviceDataTime = [2]string{T.T_BindDeviceDataStartTime, T.T_BindDeviceDataEndTime}
  609. T_.T_doc1 = T.T_doc1
  610. T_.T_doc2 = T.T_doc2
  611. T_.T_doc3 = T.T_doc3
  612. T_.T_pdf1 = T.T_pdf1_watermark
  613. if T_.InfoCollection.T_status == InfoCollection.InfoCollectionStatusReturnedMoney || len(T.T_InfoCollection_id) == 0 || len(T.T_pdf1_watermark) == 0 {
  614. T_.T_pdf1 = T.T_pdf1
  615. }
  616. T_.T_pdf2 = T.T_pdf2_watermark
  617. if T_.InfoCollection.T_status == InfoCollection.InfoCollectionStatusReturnedMoney || len(T.T_InfoCollection_id) == 0 || len(T.T_pdf2_watermark) == 0 {
  618. T_.T_pdf2 = T.T_pdf2
  619. }
  620. T_.T_pdf3 = T.T_pdf3
  621. T_.T_pdf4 = T.T_pdf4
  622. T_.T_Show = T.T_Show
  623. T_.T_Visit = T.T_Visit
  624. T_.T_State = T.T_State
  625. T_.T_sn = T.T_sn
  626. T_.T_CalibrationExpirationTime = T.T_CalibrationExpirationTime
  627. T_.T_project = T.T_project
  628. T_.T_province = T.T_province
  629. T_.T_city = T.T_city
  630. T_.T_district = T.T_district
  631. T_.T_area = []string{T.T_province, T.T_city, T.T_district}
  632. T_.T_province_code = T.T_province_code
  633. T_.T_city_code = T.T_city_code
  634. T_.T_district_code = T.T_district_code
  635. T_.T_area_code = []string{T.T_province_code, T.T_city_code, T.T_district_code}
  636. T_.T_category = T.T_category
  637. T_.T_device_type = T.T_device_type
  638. T_.T_volume = T.T_volume
  639. T_.T_verify_type = T.T_verify_type
  640. T_.T_subject_matter = T.T_subject_matter
  641. T_.T_temp_range = T.T_temp_range
  642. T_.T_report_number = T.T_report_number
  643. T_.T_report_type = T.T_report_type
  644. T_.T_start_time = T.T_start_time
  645. T_.T_end_time = T.T_end_time
  646. T_.T_time_interval = lib.ConvertMinutesToDHM(int(T.T_time_interval))
  647. T_.T_reject_times = T.T_reject_times
  648. T_.T_reject_record = T.T_reject_record
  649. // 方案
  650. T_.T_scheme_start_time = T.T_scheme_start_time
  651. T_.T_scheme_end_time = T.T_scheme_end_time
  652. if T.T_scheme_state == TaskSchemeStateSubmitted ||
  653. T.T_scheme_state == TaskSchemeStateClientPass ||
  654. T.T_scheme_state == TaskSchemeStatePass {
  655. T_.T_scheme_time_interval = lib.ConvertMinutesToDHM(int(T.T_scheme_time_interval))
  656. T_.T_scheme_overtime = lib.ConvertMinutesToDHM(int(T.T_scheme_overtime))
  657. }
  658. T_.T_scheme_signature = T.T_scheme_signature
  659. T_.T_scheme_return_times = T.T_scheme_return_times
  660. T_.T_scheme_audit_record = T.T_scheme_audit_record
  661. // 实施
  662. T_.T_enter_area_time = T.T_enter_area_time
  663. T_.T_collection_start_time = T.T_collection_start_time
  664. T_.T_collection_end_time = T.T_collection_end_time
  665. if T.T_collection_state == TaskCollectionStatePass ||
  666. T.T_collection_state == TaskCollectionStateSubmitted {
  667. T_.T_collection_time_interval = lib.ConvertMinutesToDHM(int(T.T_collection_time_interval))
  668. T_.T_collection_overtime = lib.ConvertMinutesToDHM(int(T.T_collection_overtime))
  669. }
  670. T_.T_collection_signature = T.T_collection_signature
  671. T_.T_collection_return_times = T.T_collection_return_times
  672. T_.T_collection_audit_record = T.T_collection_audit_record
  673. // 报告
  674. T_.T_reporting_start_time = T.T_reporting_start_time
  675. T_.T_reporting_end_time = T.T_reporting_end_time
  676. if T.T_reporting_state == TaskReportingStateClientPass ||
  677. T.T_reporting_state == TaskReportingStateSubmitted ||
  678. T.T_reporting_state == TaskReportingStateClientReturn ||
  679. T.T_reporting_state == TaskReportingStatePass {
  680. T_.T_reporting_time_interval = lib.ConvertMinutesToDHM(int(T.T_reporting_time_interval))
  681. T_.T_reporting_overtime = lib.ConvertMinutesToDHM(int(T.T_reporting_overtime))
  682. }
  683. T_.T_reporting_signature = T.T_reporting_signature
  684. T_.T_reporting_return_times = T.T_reporting_return_times
  685. T_.T_reporting_audit_record = T.T_reporting_audit_record
  686. T_.T_record = T.T_record
  687. T_.T_device_quantity = T.T_device_quantity
  688. T_.T_cnas = T.T_cnas
  689. T_.T_cover = T.T_cover
  690. T_.T_backup = T.T_backup
  691. return T_
  692. }
  693. // ---------------- Redis -------------------
  694. func Redis_Task_Set(key string, r Task) (err error) {
  695. //json序列化
  696. str, err := json.Marshal(r)
  697. if err != nil {
  698. logs.Error(lib.FuncName(), err)
  699. return
  700. }
  701. err = redisCache_Task.Put(key, str, 24*time.Hour)
  702. if err != nil {
  703. logs.Println("set key:", key, ",value:", str, err)
  704. }
  705. return
  706. }
  707. func Redis_Task_Get(key string) (r Task, is bool) {
  708. if redisCache_Task.IsExist(key) {
  709. logs.Println("找到key:", key)
  710. v := redisCache_Task.Get(key)
  711. json.Unmarshal(v.([]byte), &r)
  712. return r, true
  713. }
  714. logs.Println("没有 找到key:", key)
  715. return Task{}, false
  716. }
  717. func Redis_Task_DelK(key string) (err error) {
  718. err = redisCache_Task.Delete(key)
  719. return
  720. }
  721. func Redis_Task_T_report_number_Set(key string) (err error) {
  722. err = redisCache_Task.Put(key, "", 24*time.Hour)
  723. if err != nil {
  724. logs.Println("set key:", key)
  725. }
  726. return
  727. }
  728. func Redis_Task_T_report_number_Get(key string) (is bool) {
  729. if redisCache_Task.IsExist(key) {
  730. return true
  731. }
  732. logs.Println("没有 找到key:", key)
  733. return false
  734. }
  735. func Redis_Task_T_report_number_DelK(key string) (err error) {
  736. err = redisCache_Task.Delete(key)
  737. return
  738. }
  739. // ---------------- 特殊方法 -------------------
  740. // 获取 ById
  741. func Read_Task_ById(id int) (r Task, is bool) {
  742. o := orm.NewOrm()
  743. r = Task{Id: id}
  744. err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  745. if err != nil {
  746. logs.Error(lib.FuncName(), err)
  747. return r, false
  748. }
  749. return r, true
  750. }
  751. // 获取 By
  752. func Read_Task(T_task_id string) (r Task, is bool) {
  753. if r, is = Redis_Task_Get(T_task_id); is == true {
  754. return r, true
  755. }
  756. o := orm.NewOrm()
  757. qs := o.QueryTable(new(Task))
  758. //err := qs.Filter("T_task_id", T_task_id).Filter("T_State", 1).One(&r)
  759. err := qs.Filter("T_task_id", T_task_id).Filter("T_State", 1).One(&r)
  760. if err != nil {
  761. return r, false
  762. }
  763. Redis_Task_Set(T_task_id, r)
  764. return r, true
  765. }
  766. // 添加
  767. func Add_Task(r Task) (string, bool) {
  768. o := orm.NewOrm()
  769. // 生成编号
  770. rand_x := 0
  771. for true {
  772. r.T_task_id = lib.GetRandstring(12, "abcdefghijklmnopqrstuvwxyz0123456789", int64(rand_x)) // 1,336,336
  773. err := o.Read(&r, "T_task_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  774. if err != nil {
  775. break
  776. }
  777. rand_x += 1
  778. }
  779. _, err := o.Insert(&r)
  780. if err != nil {
  781. logs.Error(lib.FuncName(), err)
  782. return "", false
  783. }
  784. if !CREATE_TaskData(r.T_task_id) {
  785. return "", false
  786. }
  787. Redis_Task_Set(r.T_task_id, r)
  788. return r.T_task_id, true
  789. }
  790. func Add_Task_Tool(r Task) (string, bool) {
  791. o := orm.NewOrm()
  792. _, err := o.Insert(&r)
  793. if err != nil {
  794. logs.Error(lib.FuncName(), err)
  795. return "", false
  796. }
  797. return r.T_task_id, true
  798. }
  799. // 删除
  800. func Delete_Task(v Task) bool {
  801. o := orm.NewOrm()
  802. if num, err := o.Delete(&v); err == nil {
  803. logs.Println("Number of records deleted in database:", num)
  804. } else {
  805. logs.Error(lib.FuncName(), err)
  806. return false
  807. }
  808. Redis_Task_DelK(v.T_task_id)
  809. return true
  810. }
  811. // 删除
  812. func Delete_Task_(v Task) bool {
  813. o := orm.NewOrm()
  814. v.T_State = 0
  815. if num, err := o.Update(&v, "T_State"); err == nil {
  816. logs.Println("Number of records updated in database:", num)
  817. } else {
  818. logs.Error(lib.FuncName(), err)
  819. return false
  820. }
  821. Redis_Task_DelK(v.T_task_id)
  822. return true
  823. }
  824. // 修改
  825. func Update_Task(m Task, cols ...string) bool {
  826. o := orm.NewOrm()
  827. if num, err := o.Update(&m, cols...); err == nil {
  828. logs.Println("Number of records updated in database:", num)
  829. Redis_Task_Set(m.T_task_id, m)
  830. return true
  831. } else {
  832. logs.Error(lib.FuncName(), err)
  833. }
  834. return false
  835. }
  836. // 添加浏览量
  837. func Add_Task_Visit(m Task) bool {
  838. o := orm.NewOrm()
  839. m.T_Visit += 1
  840. if num, err := o.Update(&m, "T_Visit"); err == nil {
  841. logs.Println("Number of records updated in database:", num)
  842. Redis_Task_Set(m.T_task_id, m)
  843. return true
  844. } else {
  845. logs.Error(lib.FuncName(), err)
  846. }
  847. return false
  848. }
  849. // 获取用户任务列表
  850. func Read_Task_List_All() ([]Task, int) {
  851. o := orm.NewOrm()
  852. qs := o.QueryTable(new(Task))
  853. var r []Task
  854. cond := orm.NewCondition()
  855. //cond1 := cond.And("T_name__icontains", T_name).And("T_State", 1)
  856. cond1 := cond.And("T_State", 1)
  857. qs.Limit(10, 0).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  858. cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
  859. return r, int(cnt)
  860. }
  861. // 获取用户任务列表
  862. func Read_UserTask_List(T_uuid string, T_name string, userMap, adminMap map[string]string, page int, page_z int) ([]Task_, int) {
  863. o := orm.NewOrm()
  864. qs := o.QueryTable(new(Task))
  865. var r []Task
  866. var offset int64
  867. if page <= 1 {
  868. offset = 0
  869. } else {
  870. offset = int64((page - 1) * page_z)
  871. }
  872. cond := orm.NewCondition()
  873. cond1 := cond.And("T_name__icontains", T_name).And("T_Show", 1).And("T_State", 1)
  874. if len(T_uuid) > 0 {
  875. cond1 = cond1.And("T_uuid", T_uuid)
  876. }
  877. qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  878. cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
  879. // 转换
  880. var TaskList []Task_
  881. for _, v := range r {
  882. TaskList = append(TaskList, TaskToTask_(v, userMap, adminMap))
  883. }
  884. return TaskList, int(cnt)
  885. }
  886. // 获取任务列表
  887. func Read_Task_List(T_Distributor_id, T_uuid, T_admin, T_name, T_InfoCollection_id string, T_scheme, T_collection, T_reporting, T_delivery,
  888. T_scheme_state, T_collection_state, T_reporting_state, T_delivery_state, T_marking_state string,
  889. T_company_list []string, userMap, adminMap map[string]string, CreateTime string, page int, page_z int) ([]Task_, int) {
  890. o := orm.NewOrm()
  891. qs := o.QueryTable(new(Task))
  892. var r []Task
  893. var offset int64
  894. if page <= 1 {
  895. offset = 0
  896. } else {
  897. offset = int64((page - 1) * page_z)
  898. }
  899. cond := orm.NewCondition()
  900. cond1 := cond.AndCond(cond.Or("T_name__icontains", T_name).Or("T_task_id__icontains", T_name)).And("T_State", 1)
  901. if len(T_uuid) > 0 {
  902. cond1 = cond1.And("T_uuid", T_uuid)
  903. }
  904. if len(T_Distributor_id) > 0 {
  905. cond1 = cond1.And("T_Distributor_id", T_Distributor_id)
  906. }
  907. if len(T_InfoCollection_id) > 0 {
  908. cond1 = cond1.And("T_InfoCollection_id", T_InfoCollection_id)
  909. }
  910. if len(T_admin) > 0 {
  911. cond1 = cond1.AndCond(cond.Or("T_scheme", T_admin).Or("T_collection", T_admin).
  912. Or("T_reporting", T_admin).Or("T_delivery", T_admin))
  913. }
  914. if len(T_company_list) > 0 {
  915. cond1 = cond1.And("T_uuid__in", T_company_list)
  916. }
  917. if len(T_scheme) > 0 {
  918. cond1 = cond1.And("T_scheme", T_scheme)
  919. }
  920. if len(T_collection) > 0 {
  921. cond1 = cond1.And("T_collection", T_collection)
  922. }
  923. if len(T_reporting) > 0 {
  924. cond1 = cond1.And("T_reporting", T_reporting)
  925. }
  926. if len(T_delivery) > 0 {
  927. cond1 = cond1.And("T_delivery", T_delivery)
  928. }
  929. if len(T_scheme_state) > 0 {
  930. cond1 = cond1.And("T_scheme_state", T_scheme_state)
  931. }
  932. if len(T_collection_state) > 0 {
  933. cond1 = cond1.And("T_collection_state", T_collection_state)
  934. }
  935. if len(T_reporting_state) > 0 {
  936. cond1 = cond1.And("T_reporting_state", T_reporting_state)
  937. }
  938. if len(T_delivery_state) > 0 {
  939. cond1 = cond1.And("T_delivery_state", T_delivery_state)
  940. }
  941. if len(T_marking_state) > 0 {
  942. cond1 = cond1.And("T_marking_state", T_marking_state)
  943. }
  944. if len(CreateTime) > 0 {
  945. CreateTime_s := strings.Split(CreateTime, "-")
  946. if len(CreateTime_s) == 2 {
  947. // 定义开始和结束时间
  948. start := time.Date(lib.To_int(CreateTime_s[0]), time.Month(lib.To_int(CreateTime_s[1])), 1, 0, 0, 0, 0, time.UTC)
  949. end := start.AddDate(0, 1, 0) // 下个月的第一天
  950. logs.Println("CreateTime_s:", start.Format("2006-01-02 15:04:05"), end.Format("2006-01-02 15:04:05"))
  951. cond1 = cond1.And("CreateTime__gte", start).And("CreateTime__lt", end)
  952. }
  953. }
  954. qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  955. cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
  956. // 转换
  957. var TaskList []Task_
  958. for _, v := range r {
  959. TaskList = append(TaskList, TaskToTask_(v, userMap, adminMap))
  960. }
  961. return TaskList, int(cnt)
  962. }
  963. func Read_Task_BySN(sn string) (r Task, err error) {
  964. if task, is := Redis_Task_Get(sn); is == true {
  965. return task, nil
  966. }
  967. o := orm.NewOrm()
  968. qs := o.QueryTable(new(Task))
  969. err = qs.Filter("T_sn", sn).Filter("T_State", 1).One(&r)
  970. if err != nil {
  971. return r, err
  972. }
  973. Redis_Task_Set(sn, r)
  974. return r, nil
  975. }
  976. // 修改
  977. func Update_Task_T_InfoTemplate_id(T_InfoCollection_id, T_InfoTemplate_id string) error {
  978. o := orm.NewOrm()
  979. qs := o.QueryTable(new(Task))
  980. var r []Task
  981. o.Begin()
  982. qs.Filter("T_InfoCollection_id", T_InfoCollection_id).All(&r)
  983. for _, task := range r {
  984. task.T_InfoTemplate_id = T_InfoTemplate_id
  985. if _, err := o.Update(&task, "T_InfoTemplate_id"); err == nil {
  986. Redis_Task_Set(task.T_task_id, task)
  987. } else {
  988. o.Rollback()
  989. logs.Error(lib.FuncName(), err)
  990. return err
  991. }
  992. }
  993. o.Commit()
  994. return nil
  995. }
  996. func Add_AuditRecord(T_audit_record string, T_uuid, T_admin string, T_scheme_state int, T_reason string, T_type string) (string, error) {
  997. auditRecord := AuditRecord{
  998. T_uuid: T_uuid,
  999. T_admin: T_admin,
  1000. T_state: T_scheme_state,
  1001. T_reason: T_reason,
  1002. T_type: T_type,
  1003. T_time: time.Now().Format("2006-01-02 15:04:05"),
  1004. }
  1005. var returnRecordList []AuditRecord
  1006. if len(T_audit_record) > 0 {
  1007. err := json.Unmarshal([]byte(T_audit_record), &returnRecordList)
  1008. if err != nil {
  1009. logs.Error("JSON 反序列化失败:", err)
  1010. return "", errors.New("JSON 反序列化失败")
  1011. }
  1012. }
  1013. returnRecordList = append(returnRecordList, auditRecord)
  1014. returnRecordJson, err := json.Marshal(returnRecordList)
  1015. if err != nil {
  1016. logs.Error("JSON 反序列化失败:", err)
  1017. return "", errors.New("JSON 反序列化失败")
  1018. }
  1019. return string(returnRecordJson), nil
  1020. }
  1021. // 获取项目负责人列表
  1022. func Get_Task_UserList(T_type string) []string {
  1023. o := orm.NewOrm()
  1024. var err error
  1025. var pl_lists []string
  1026. switch T_type {
  1027. case "T_project":
  1028. _, err = o.Raw("SELECT DISTINCT t_project FROM task LIMIT 0,1000").QueryRows(&pl_lists)
  1029. case "T_scheme":
  1030. _, err = o.Raw("SELECT DISTINCT t_scheme FROM task LIMIT 0,1000").QueryRows(&pl_lists)
  1031. case "T_collection":
  1032. _, err = o.Raw("SELECT DISTINCT t_collection FROM task LIMIT 0,1000").QueryRows(&pl_lists)
  1033. case "T_reporting":
  1034. _, err = o.Raw("SELECT DISTINCT t_reporting FROM task LIMIT 0,1000").QueryRows(&pl_lists)
  1035. }
  1036. if err != nil {
  1037. logs.Error("获取项目负责人列表失败:", err)
  1038. }
  1039. return pl_lists
  1040. }
  1041. func Read_Task_Stat(T_Distributor_id, T_uuid, T_admin, T_name, T_InfoCollection_id string, T_project, T_scheme, T_collection, T_reporting, T_delivery,
  1042. T_scheme_state, T_collection_state, T_reporting_state, T_delivery_state, T_marking_state string,
  1043. T_company_list []string, userMap, adminMap map[string]string, CreateTime string, page int, page_z int) ([]Task_Stat, int) {
  1044. o := orm.NewOrm()
  1045. qs := o.QueryTable(new(Task))
  1046. var r []Task
  1047. var offset int64
  1048. if page <= 1 {
  1049. offset = 0
  1050. } else {
  1051. offset = int64((page - 1) * page_z)
  1052. }
  1053. cond := orm.NewCondition()
  1054. cond1 := cond.AndCond(cond.Or("T_name__icontains", T_name).Or("T_task_id__icontains", T_name)).And("T_State", 1)
  1055. if len(T_uuid) > 0 {
  1056. cond1 = cond1.And("T_uuid", T_uuid)
  1057. }
  1058. if len(T_Distributor_id) > 0 {
  1059. cond1 = cond1.And("T_Distributor_id", T_Distributor_id)
  1060. }
  1061. if len(T_InfoCollection_id) > 0 {
  1062. cond1 = cond1.And("T_InfoCollection_id", T_InfoCollection_id)
  1063. }
  1064. if len(T_admin) > 0 {
  1065. cond1 = cond1.AndCond(cond.Or("T_scheme", T_admin).Or("T_collection", T_admin).
  1066. Or("T_reporting", T_admin).Or("T_delivery", T_admin))
  1067. }
  1068. if len(T_company_list) > 0 {
  1069. cond1 = cond1.And("T_uuid__in", T_company_list)
  1070. }
  1071. if len(T_project) > 0 {
  1072. cond1 = cond1.And("T_project", T_project)
  1073. }
  1074. if len(T_scheme) > 0 {
  1075. cond1 = cond1.And("T_scheme", T_scheme)
  1076. }
  1077. if len(T_collection) > 0 {
  1078. cond1 = cond1.And("T_collection", T_collection)
  1079. }
  1080. if len(T_reporting) > 0 {
  1081. cond1 = cond1.And("T_reporting", T_reporting)
  1082. }
  1083. if len(T_delivery) > 0 {
  1084. cond1 = cond1.And("T_delivery", T_delivery)
  1085. }
  1086. if len(T_scheme_state) > 0 {
  1087. cond1 = cond1.And("T_scheme_state", T_scheme_state)
  1088. }
  1089. if len(T_collection_state) > 0 {
  1090. cond1 = cond1.And("T_collection_state", T_collection_state)
  1091. }
  1092. if len(T_reporting_state) > 0 {
  1093. cond1 = cond1.And("T_reporting_state", T_reporting_state)
  1094. }
  1095. if len(T_delivery_state) > 0 {
  1096. cond1 = cond1.And("T_delivery_state", T_delivery_state)
  1097. }
  1098. if len(T_marking_state) > 0 {
  1099. cond1 = cond1.And("T_marking_state", T_marking_state)
  1100. }
  1101. if len(CreateTime) > 0 {
  1102. CreateTime_s := strings.Split(CreateTime, "-")
  1103. if len(CreateTime_s) == 2 {
  1104. // 定义开始和结束时间
  1105. start := time.Date(lib.To_int(CreateTime_s[0]), time.Month(lib.To_int(CreateTime_s[1])), 1, 0, 0, 0, 0, time.UTC)
  1106. end := start.AddDate(0, 1, 0) // 下个月的第一天
  1107. logs.Println("CreateTime_s:", start.Format("2006-01-02 15:04:05"), end.Format("2006-01-02 15:04:05"))
  1108. cond1 = cond1.And("CreateTime__gte", start).And("CreateTime__lt", end)
  1109. }
  1110. }
  1111. if page_z == 9999 {
  1112. qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  1113. } else {
  1114. qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  1115. }
  1116. cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
  1117. // 转换
  1118. var TaskList []Task_Stat
  1119. for _, v := range r {
  1120. TaskList = append(TaskList, TaskToTask_Stat(v, userMap, adminMap))
  1121. }
  1122. return TaskList, int(cnt)
  1123. }
  1124. // 获取用户任务列表
  1125. func Read_UserTask_StatisticalRanking(T_uuid, T_scheme string) []Task {
  1126. o := orm.NewOrm()
  1127. qs := o.QueryTable(new(Task))
  1128. var r []Task
  1129. cond := orm.NewCondition()
  1130. //cond_T_uuid := orm.NewCondition().Or("T_scheme", T_uuid).Or("T_collection", T_uuid).Or("T_reporting", T_uuid)
  1131. //cond1 := cond.And("T_name__icontains", T_name).And("T_State", 1)
  1132. cond1 := cond.And("T_State", 1).And(T_scheme, T_uuid)
  1133. qs.Limit(500, 0).SetCond((*orm2.Condition)(cond1)).OrderBy("-UpdateTime").All(&r)
  1134. qs.SetCond((*orm2.Condition)(cond1)).Count()
  1135. return r
  1136. }
  1137. // 获取任务列表
  1138. func Read_Task_List_For_ERP(start_time, end_time string) ([]Task_, int) {
  1139. o := orm.NewOrm()
  1140. qs := o.QueryTable(new(Task))
  1141. var r []Task
  1142. cond := orm.NewCondition()
  1143. cond1 := cond.And("T_State", 1).And("T_reporting_state", TaskReportingStatePass)
  1144. if len(start_time) > 0 {
  1145. cond1 = cond1.And("T_reporting_pass_time__gte", start_time)
  1146. }
  1147. if len(end_time) > 0 {
  1148. cond1 = cond1.And("T_reporting_pass_time__lte", end_time)
  1149. }
  1150. qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  1151. cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
  1152. // 转换
  1153. var TaskList []Task_
  1154. for _, v := range r {
  1155. TaskList = append(TaskList, TaskToTask_(v, map[string]string{}, map[string]string{}))
  1156. }
  1157. return TaskList, int(cnt)
  1158. }
  1159. // 获取任务列表
  1160. func Read_Task_List_For_ERP_By_Type(T_type string, start_time, end_time string) ([]Task_, int) {
  1161. o := orm.NewOrm()
  1162. qs := o.QueryTable(new(Task))
  1163. var r []Task
  1164. cond := orm.NewCondition()
  1165. cond1 := cond.And("T_State", 1)
  1166. if T_type == "collection" {
  1167. cond1 = cond1.And("T_collection_submit_time__gte", start_time).And("T_collection_submit_time__lte", end_time)
  1168. }
  1169. if T_type == "reporting" {
  1170. cond1 = cond1.And("T_reporting_submit_time__gte", start_time).And("T_reporting_submit_time__lte", end_time)
  1171. }
  1172. qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  1173. cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
  1174. // 转换
  1175. var TaskList []Task_
  1176. for _, v := range r {
  1177. TaskList = append(TaskList, TaskToTask_(v, map[string]string{}, map[string]string{}))
  1178. }
  1179. return TaskList, int(cnt)
  1180. }
  1181. // GenerateNextT_report_number 生成下一个编号
  1182. func GenerateNextT_report_number(T_device_type string) (string, error) {
  1183. o := orm.NewOrm()
  1184. // 获取当前年份和季度
  1185. currentYear := time.Now().Year()
  1186. currentQuarter := int(time.Now().Month()-1)/3 + 1 // 1,2,3,4 对应 A,B,C,D
  1187. quarterChar := string(rune('A' + currentQuarter - 1))
  1188. yearQuarter := fmt.Sprintf("%s%d%s", T_device_type, currentYear, quarterChar)
  1189. var lastRecord Task
  1190. err := o.QueryTable(new(Task)).
  1191. Filter("T_report_number__startswith", yearQuarter).
  1192. OrderBy("-T_report_number").
  1193. Limit(1).
  1194. One(&lastRecord)
  1195. if err != nil && err.Error() != orm.ErrNoRows.Error() {
  1196. return "", fmt.Errorf("报告编号-查询当前年季度最后编号失败: %v", err)
  1197. }
  1198. // 初始化新编号
  1199. var newSeq = 1
  1200. if lastRecord.T_report_number != "" {
  1201. // 提取序号部分,例如 "2025A00001" -> "00001"
  1202. lastSeqStr := lastRecord.T_report_number[len(lastRecord.T_report_number)-5:]
  1203. lastSeq, _ := strconv.Atoi(lastSeqStr)
  1204. newSeq = lastSeq + 1
  1205. }
  1206. var newCode string
  1207. for {
  1208. // 格式化新编号
  1209. newCode = fmt.Sprintf("%s%05d", yearQuarter, newSeq)
  1210. if Redis_Task_T_report_number_Get(newCode) {
  1211. newSeq += 1
  1212. } else {
  1213. err = Redis_Task_T_report_number_Set(newCode)
  1214. if err != nil {
  1215. return "", fmt.Errorf("报告编号-存入redis失败: %v", err)
  1216. }
  1217. break
  1218. }
  1219. }
  1220. return newCode, nil
  1221. }
  1222. // 获取 By
  1223. func Read_TaskbyT_report_number(T_report_number string) (r Task, is bool) {
  1224. o := orm.NewOrm()
  1225. qs := o.QueryTable(new(Task))
  1226. //err := qs.Filter("T_task_id", T_task_id).Filter("T_State", 1).One(&r)
  1227. err := qs.Filter("T_report_number", T_report_number).Filter("T_State", 1).One(&r)
  1228. if err != nil {
  1229. return r, false
  1230. }
  1231. return r, true
  1232. }
  1233. func Read_Task_List_For_Watermark(pdfType string) ([]Task, int) {
  1234. o := orm.NewOrm()
  1235. qs := o.QueryTable(new(Task))
  1236. var r []Task
  1237. cond := orm.NewCondition()
  1238. if pdfType == "pdf1" {
  1239. cond = cond.And("T_State", 1).And("T_pdf1__icontains", ".pdf").And("t_pdf1_signature__isnull", true)
  1240. }
  1241. if pdfType == "pdf2" {
  1242. cond = cond.And("T_State", 1).And("T_pdf2__icontains", ".pdf").And("t_pdf2_signature__isnull", true)
  1243. }
  1244. qs.SetCond((*orm2.Condition)(cond)).OrderBy("-Id").All(&r)
  1245. cnt, _ := qs.SetCond((*orm2.Condition)(cond)).Count()
  1246. return r, int(cnt)
  1247. }
  1248. func Read_Task_List_By_T_InfoCollection_id(T_InfoCollection_id string) ([]Task, int) {
  1249. o := orm.NewOrm()
  1250. qs := o.QueryTable(new(Task))
  1251. var r []Task
  1252. cond := orm.NewCondition()
  1253. cond1 := cond.And("T_InfoCollection_id", T_InfoCollection_id).And("T_State", 1)
  1254. qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
  1255. cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
  1256. return r, int(cnt)
  1257. }
  1258. // 删除的重复数据
  1259. func DeleteDeduplicate(T_task_id string) (int64, error) {
  1260. localOrm := orm.NewOrm()
  1261. tb_name := "z_task_data_" + T_task_id
  1262. var cnt int64
  1263. // 创建临时表
  1264. sqlCreate := "CREATE TABLE `tmp_table_" + T_task_id + "` AS (SELECT MIN(`ID`) AS `min_id` FROM " + tb_name + " GROUP BY `t_sn`,`t_id`,`t_time`);"
  1265. _, err := localOrm.Raw(sqlCreate).Exec()
  1266. if err != nil {
  1267. logs.Error(lib.FuncName(), err)
  1268. return cnt, err
  1269. }
  1270. sqlDelete := "DELETE FROM " + tb_name + " WHERE `ID` NOT IN (SELECT `min_id` FROM `tmp_table_" + T_task_id + "`);"
  1271. res, err := localOrm.Raw(sqlDelete).Exec()
  1272. if err != nil {
  1273. logs.Error(lib.FuncName(), err)
  1274. return cnt, err
  1275. }
  1276. cnt, _ = res.RowsAffected()
  1277. sqlDrop := "DROP TABLE `tmp_table_" + T_task_id + "`;"
  1278. _, err = localOrm.Raw(sqlDrop).Exec()
  1279. if err != nil {
  1280. logs.Error(lib.FuncName(), err)
  1281. return cnt, err
  1282. }
  1283. return cnt, nil
  1284. }
  1285. // 修正秒数
  1286. func CorrectionSecond(T_task_id string) error {
  1287. o := orm.NewOrm()
  1288. tb_name := "z_task_data_" + T_task_id
  1289. // 创建临时表
  1290. sqlCreate := "UPDATE " + tb_name + " SET t_time = t_time - INTERVAL SECOND(t_time) SECOND WHERE SECOND(t_time) != 0"
  1291. _, err := o.Raw(sqlCreate).Exec()
  1292. if err != nil {
  1293. logs.Error(lib.FuncName(), err)
  1294. return err
  1295. }
  1296. return nil
  1297. }