Task.go 46 KB

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