Task.go 53 KB

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