Task.go 43 KB

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