SmartEvaluationLogicDLL.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. #pragma once
  2. #include "basic_struct.h"
  3. #include <vector>
  4. #include <map>
  5. #include "../Schema/schema_struct.h"
  6. using namespace std;
  7. #ifdef SMARTEVALUATIONLOGIC_EXPORTS
  8. #define SMARTEVALUATIONLOGIC_API __declspec(dllexport)
  9. #else
  10. #define SMARTEVALUATIONLOGIC_API __declspec(dllimport)
  11. #endif
  12. //设置cookie
  13. SMARTEVALUATIONLOGIC_API int SetCookie(std::string path, std::string name , std::string value);
  14. //设置本地服务器的cookie
  15. SMARTEVALUATIONLOGIC_API int SetLocalServerCookie( std::string name , std::string value);
  16. //设置远端服务器地址
  17. SMARTEVALUATIONLOGIC_API int SetServerUrl(std::string server_url);
  18. SMARTEVALUATIONLOGIC_API int SetScanConfig(std::string app_data_dir, std::string scan_data_dir);
  19. SMARTEVALUATIONLOGIC_API int InitalizeScan(bool bOnlineCard, int subjectid, int nOnlineScanType);
  20. /*======================================================================*/
  21. /*=============================试卷图片上传相关=========================*/
  22. /*======================================================================*/
  23. /************************************************************************/
  24. /* 设置试卷图像上传消息返回窗口句柄 */
  25. /************************************************************************/
  26. SMARTEVALUATIONLOGIC_API int SetHandlerWndForImg( HWND hwnd );
  27. /************************************************************************/
  28. /* 开始试卷图像上传 */
  29. /************************************************************************/
  30. SMARTEVALUATIONLOGIC_API int StartUploadePaperImg();
  31. /************************************************************************/
  32. /* 停止试卷图像上传 */
  33. /************************************************************************/
  34. SMARTEVALUATIONLOGIC_API int StopUploadePaperImg();
  35. /************************************************************************/
  36. /* 查询试卷图像上传任务 */
  37. /************************************************************************/
  38. SMARTEVALUATIONLOGIC_API int QueryUploadePaperImg(vector<IMG_UPLOAD_TASK>& tasks);
  39. /************************************************************************/
  40. /* 查询当前试卷图像上传任务 */
  41. /************************************************************************/
  42. SMARTEVALUATIONLOGIC_API int GetCurrentUploadTaskInfo(IMG_UPLOAD_TASK& task);
  43. /************************************************************************/
  44. /* 清空已上传完成的数据 */
  45. /************************************************************************/
  46. SMARTEVALUATIONLOGIC_API int ClearUploadedPaperImg();
  47. /*======================================================================*/
  48. /*=============================扫描仪控制相关===========================*/
  49. /*======================================================================*/
  50. /************************************************************************/
  51. /* 获取扫描仪列表 (返回获取到信息的条数) */
  52. /************************************************************************/
  53. SMARTEVALUATIONLOGIC_API int GetScannerList(vector<SCANNER_INFO> & scannerList);
  54. /************************************************************************/
  55. /* 获取默认扫描仪信息(成功返回1 失败返回0) */
  56. /************************************************************************/
  57. SMARTEVALUATIONLOGIC_API int GetDefaultScannerInfo(SCANNER_INFO &scannerInfo);
  58. /************************************************************************/
  59. /* 选择/改变选中的扫描仪(成功返回1 失败返回0) */
  60. /************************************************************************/
  61. SMARTEVALUATIONLOGIC_API int ConnectScanner(const int nIndex);
  62. /************************************************************************/
  63. /* 显示扫描仪设置 (成功返回1 失败返回0) */
  64. /************************************************************************/
  65. SMARTEVALUATIONLOGIC_API int ShowScannerSetting(const unsigned int nId);
  66. /************************************************************************/
  67. /* 断开连接选中的扫描仪 (成功返回1 失败返回0) */
  68. /************************************************************************/
  69. SMARTEVALUATIONLOGIC_API int DisconnectScanner();
  70. /*======================================================================*/
  71. /*=============================识别流程控制相关=========================*/
  72. /*======================================================================*/
  73. /************************************************************************/
  74. /* 注册窗口,识别模块遇到问题将向该窗口发送消息 */
  75. /************************************************************************/
  76. SMARTEVALUATIONLOGIC_API int SetHandlerWnd(HWND hwnd);
  77. SMARTEVALUATIONLOGIC_API string GetBatchCode();
  78. /************************************************************************/
  79. /* 加载模板 */
  80. /************************************************************************/
  81. SMARTEVALUATIONLOGIC_API int LoadSchema(long long examId, std::string examName, long examCourseId, std::string courseName, const std::string schemaPath, std::string rule = "");
  82. /************************************************************************/
  83. /* 准备扫描 */
  84. /************************************************************************/
  85. SMARTEVALUATIONLOGIC_API int ReadyScanEX(FEEDER_TYPE feederType,const ScanParam & param);
  86. /************************************************************************/
  87. /*设置从文件夹扫描的路径(继续扫描时使用) */
  88. /************************************************************************/
  89. SMARTEVALUATIONLOGIC_API int SetFolderScanDir(const std::string img_dir);
  90. /************************************************************************/
  91. /*获取扫描状态 */
  92. /************************************************************************/
  93. SMARTEVALUATIONLOGIC_API int GetServiceSate();
  94. /************************************************************************/
  95. /*开始扫描 */
  96. /************************************************************************/
  97. SMARTEVALUATIONLOGIC_API int Start();
  98. /************************************************************************/
  99. /* 暂停扫描 */
  100. /************************************************************************/
  101. SMARTEVALUATIONLOGIC_API int Pause();
  102. /************************************************************************/
  103. /* 继续扫描 */
  104. /************************************************************************/
  105. SMARTEVALUATIONLOGIC_API int Resume();
  106. /************************************************************************/
  107. /* 停止扫描 */
  108. /************************************************************************/
  109. SMARTEVALUATIONLOGIC_API int Stop();
  110. /************************************************************************/
  111. /* 清除临时扫描数据 */
  112. /************************************************************************/
  113. SMARTEVALUATIONLOGIC_API int ClearDbTemp();
  114. /************************************************************************/
  115. /* 放弃本次扫描结果 */
  116. /************************************************************************/
  117. SMARTEVALUATIONLOGIC_API int GiveUpCurrentBatch();
  118. /************************************************************************/
  119. /* 扫描完成离开本次扫描调用 */
  120. /************************************************************************/
  121. SMARTEVALUATIONLOGIC_API int leaveCurrentBatch();
  122. /************************************************************************/
  123. /* 开始试卷成绩上传 (参数,接收进度消息的句柄) */
  124. /************************************************************************/
  125. SMARTEVALUATIONLOGIC_API int StartUploadPaper(HWND hWnd);
  126. /*======================================================================*/
  127. /*=============================异常处理相关=============================*/
  128. /*======================================================================*/
  129. /************************************************************************/
  130. /* 重新识别试卷 */
  131. /************************************************************************/
  132. SMARTEVALUATIONLOGIC_API int ReIdentify(const int paper_id, const std::string& stu_code, std::vector<img_param> params);
  133. /************************************************************************/
  134. /* 查询模板图像路径 */
  135. /************************************************************************/
  136. SMARTEVALUATIONLOGIC_API int QueryMubanImgPath(int page_index,std::string& imgPath);
  137. /************************************************************************/
  138. /* 查询模板图像数量 */
  139. /************************************************************************/
  140. SMARTEVALUATIONLOGIC_API int QueryMubanImgCount(int& page_count);
  141. /************************************************************************/
  142. /* 查询异常试卷总数 */
  143. /************************************************************************/
  144. SMARTEVALUATIONLOGIC_API int QueryExptionPaperCount(int & exc_count, int & total_count);
  145. /************************************************************************/
  146. /* 查询异常类型信息 */
  147. /************************************************************************/
  148. SMARTEVALUATIONLOGIC_API int QueryExptionTypeInfo(vector<EXCEPTION_TYPE_INFO> & infos);
  149. /************************************************************************/
  150. /* 加载试卷异常列表 */
  151. /************************************************************************/
  152. SMARTEVALUATIONLOGIC_API int QueryExceptionPaper(const long exception_type, vector<STUDENT_INFO> &studengList);
  153. /************************************************************************/
  154. /* 加载正常试卷列表 */
  155. /************************************************************************/
  156. SMARTEVALUATIONLOGIC_API int QueryNormalPaper(vector<STUDENT_INFO> &studengList);
  157. /************************************************************************/
  158. /* 加载异常试卷详情 */
  159. /************************************************************************/
  160. SMARTEVALUATIONLOGIC_API int QueryPaperDetail(const int paper_id,PAPER_DETAIL &paper_detail,vector<PAGE_DETAIL> &pageList,vector<GROUP_QUESTION> &questionList);
  161. /************************************************************************/
  162. /* 更新试卷考生 */
  163. /************************************************************************/
  164. SMARTEVALUATIONLOGIC_API int UpdatePaperStudent( const int paper_id,const std::string examinee_id ,const std::string student_code,const std::string studentName,const long schoolId,const std::string stuCode = "",const std::string stuSchoolCode = "",const std::string className = "",const std::string gradeName = "",bool bReIdentify=false);
  165. /************************************************************************/
  166. /* 忽略试卷 */
  167. /************************************************************************/
  168. SMARTEVALUATIONLOGIC_API int IgnorePaper(const int paper_id);
  169. /************************************************************************/
  170. /* 忽略试卷 */
  171. /************************************************************************/
  172. SMARTEVALUATIONLOGIC_API int IgnoreException(const long exceptions);
  173. /************************************************************************/
  174. /* 覆盖试卷 */
  175. /************************************************************************/
  176. SMARTEVALUATIONLOGIC_API int ReplacePaper(const int paper_id,int &paper_id_ret);
  177. /************************************************************************/
  178. /* 全部覆盖试卷 */
  179. /************************************************************************/
  180. SMARTEVALUATIONLOGIC_API int ReplaceAllKaoHaoChongTu(vector<int> &paper_id_List);
  181. /************************************************************************/
  182. /* 智能识别 */
  183. /************************************************************************/
  184. SMARTEVALUATIONLOGIC_API int AiReadImgPaper(const int subject, const int id, std::vector<questionAi> aiVec, const std::vector<std::wstring> imgPath, vector<vector<AI_RET_RECT2>> &retList);
  185. /************************************************************************/
  186. /* 设置扫描督学卡 */
  187. /************************************************************************/
  188. SMARTEVALUATIONLOGIC_API int SetScanInspector(int ntype, std::string strShoolID);
  189. /************************************************************************/
  190. /* 下载图片 */
  191. /************************************************************************/
  192. SMARTEVALUATIONLOGIC_API int DownLoadImg(HWND hWnd, std::string strExamId, int type);
  193. /************************************************************************/
  194. /* 下载模板 */
  195. /************************************************************************/
  196. SMARTEVALUATIONLOGIC_API int HttpDownloadTemplate(std::string from, std::string fileName);
  197. /************************************************************************/
  198. /* 取消下次继续扫描结果状态 */
  199. /************************************************************************/
  200. SMARTEVALUATIONLOGIC_API int CloseContineScan();
  201. /************************************************************************/
  202. /* 开启下次继续扫描结果状态 */
  203. /************************************************************************/
  204. SMARTEVALUATIONLOGIC_API int StartContiuneScan();
  205. /************************************************************************/
  206. /* 从云端下载异常试卷 */
  207. /************************************************************************/
  208. enum MsgType
  209. {
  210. LOAD_ERROR_LIST_BEGIN,
  211. LOAD_ERROR_LIST, // 获取异常列表
  212. LOAD_ERROR_LIST_END,
  213. LOAD_ERROR_FAILED,
  214. LOAD_ERROR_EXAM_NAME,
  215. LOAD_PAPER_TYPE,
  216. LOAD_CLOUD_FILE_BEGIN,
  217. LOAD_CLOUD_FILE, // 获取云文件
  218. LOAD_CLOUD_FILE_END,
  219. };
  220. SMARTEVALUATIONLOGIC_API bool ExitCloud();
  221. SMARTEVALUATIONLOGIC_API bool InitCloud(const char*path);
  222. struct ISmartLogicNotify{
  223. virtual void OnNotify(MsgType type, const char*msg) = 0;
  224. };
  225. SMARTEVALUATIONLOGIC_API int PreErrorHandleRestoreSite(bool bcontinue,int scan_type, const ScanParam&scanparam);
  226. SMARTEVALUATIONLOGIC_API int ParseErrorPaperFromCloud(const std::string&strUrl, const std::string&session, const std::string&exam_id, const std::string&destDir, ISmartLogicNotify*pNotify = NULL);
  227. SMARTEVALUATIONLOGIC_API void exit_thread_error_handle_restore_site();
  228. SMARTEVALUATIONLOGIC_API void SetErrorHandle(bool bErrorHandle);
  229. /*======================================================================*/
  230. /*=============================识别小工具=============================*/
  231. /*======================================================================*/
  232. /************************************************************************/
  233. /* 检测试卷上指定区域的交叉点 */
  234. /************************************************************************/
  235. struct _IplImage;
  236. typedef struct _IplImage IplImage;
  237. SMARTEVALUATIONLOGIC_API int DetectCross(const IplImage * img, int detect_x, int detect_y, int detect_w, int detect_h,std::vector<Cross>& crosss );
  238. SMARTEVALUATIONLOGIC_API void getCurScanExam(std::string exam_code, std::vector<std::vector<coverStu>> &stuInfo);
  239. SMARTEVALUATIONLOGIC_API void getCoverStuInfoByExamCode(std::string examCode, std::vector<coverStu> &stuInfo);
  240. SMARTEVALUATIONLOGIC_API void writeToexcel(std::string path, std::vector<std::vector<coverStu>> &stuInfo, std::vector<coverStu> &stuInfo2,bool flag1,bool flag2,bool flag3);
  241. /*模板测试工具类*/
  242. class CLocateTester;
  243. class SMARTEVALUATIONLOGIC_API CLocateTestExport
  244. {
  245. public:
  246. CLocateTestExport(void);
  247. ~CLocateTestExport(void);
  248. bool isReady();
  249. bool isSameSchema(const schema::SCHEMA& schema);
  250. bool test(const schema::SCHEMA& schema,const std::vector<std::string>& img_paths);
  251. bool isResultOk();
  252. bool getTestResult(std::string &error_msg);
  253. private:
  254. CLocateTester * tester;
  255. };
  256. SMARTEVALUATIONLOGIC_API int InitIdentiferDllAlgorithm();
  257. SMARTEVALUATIONLOGIC_API void FreeIdentiferDllAlgorithm();
  258. struct IUploudNotify;
  259. SMARTEVALUATIONLOGIC_API void InitUploadManager(bool bEanble, bool bCountiue, bool bErrorHanle, bool bOnlineCard, IUploudNotify*pNotify);
  260. SMARTEVALUATIONLOGIC_API void OnScanListFilter(bool bsuccess,int nUploadState);
  261. SMARTEVALUATIONLOGIC_API int UploadOnScanCmd(int nCmd, const char*param ,void*ret=nullptr);
  262. SMARTEVALUATIONLOGIC_API void QuickHandle(bool bGetPath, char*path_nor, int nor_len, char*path_exc, int exc_len);
  263. SMARTEVALUATIONLOGIC_API int BatchServiceCmd(int cmd, void*param, void*ret);
  264. SMARTEVALUATIONLOGIC_API void SetExamName(const wchar_t * name);
  265. SMARTEVALUATIONLOGIC_API vector<int> GetAllConfictPaper(int student_paper_id,string student_id);
  266. /************************************************************************/
  267. /* 校验考号冲突是否是本次扫描(是1 否0) */
  268. /* 返回值:是1 否0 */
  269. /************************************************************************/
  270. SMARTEVALUATIONLOGIC_API int ExamineThisScan(PAPER_DETAIL &paper_detail);
  271. /************************************************************************/
  272. /* 设置试卷为缺考 */
  273. /* 参数:absent: 1 非缺考 2 确认缺考 3 标记缺考 */
  274. /************************************************************************/
  275. SMARTEVALUATIONLOGIC_API int SetAbsentExam(PAPER_DETAIL &paper_detail, int absent);
  276. /************************************************************************/
  277. /* 查询有异常的客观题 */
  278. /************************************************************************/
  279. SMARTEVALUATIONLOGIC_API int QueryKeGuanTiYiChang(const int paper_id, std::vector<KEGUANTI_DETAIL>& keguantiList);
  280. /************************************************************************/
  281. /* 更新异常客观题 */
  282. /************************************************************************/
  283. SMARTEVALUATIONLOGIC_API int UpdateKeGuanTiYiChang(const int paper_id, std::vector<KEGUANTI_DETAIL>& keguantiList);
  284. /************************************************************************/
  285. /* 设置是否全学科在线 */
  286. /************************************************************************/
  287. SMARTEVALUATIONLOGIC_API void SetAllSubject(bool all=true);