MarkController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. package cn.com.qmth.stmms.mark;
  2. import cn.com.qmth.stmms.admin.utils.SessionExamUtils;
  3. import cn.com.qmth.stmms.biz.exam.model.Exam;
  4. import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
  5. import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
  6. import cn.com.qmth.stmms.biz.exam.model.Marker;
  7. import cn.com.qmth.stmms.biz.exam.service.*;
  8. import cn.com.qmth.stmms.biz.file.service.FileService;
  9. import cn.com.qmth.stmms.biz.lock.LockService;
  10. import cn.com.qmth.stmms.biz.mark.model.*;
  11. import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
  12. import cn.com.qmth.stmms.biz.mark.service.*;
  13. import cn.com.qmth.stmms.biz.user.model.User;
  14. import cn.com.qmth.stmms.biz.user.service.UserService;
  15. import cn.com.qmth.stmms.common.annotation.Logging;
  16. import cn.com.qmth.stmms.common.controller.BaseController;
  17. import cn.com.qmth.stmms.common.domain.WebUser;
  18. import cn.com.qmth.stmms.common.enums.*;
  19. import cn.com.qmth.stmms.common.session.model.StmmsSession;
  20. import cn.com.qmth.stmms.common.session.service.SessionService;
  21. import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
  22. import cn.com.qmth.stmms.common.utils.RequestUtils;
  23. import com.fasterxml.jackson.core.JsonProcessingException;
  24. import com.fasterxml.jackson.databind.ObjectMapper;
  25. import net.sf.json.JSONObject;
  26. import org.apache.commons.lang.StringEscapeUtils;
  27. import org.apache.commons.lang.StringUtils;
  28. import org.slf4j.Logger;
  29. import org.slf4j.LoggerFactory;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.beans.factory.annotation.Value;
  32. import org.springframework.data.domain.Sort;
  33. import org.springframework.data.domain.Sort.Direction;
  34. import org.springframework.stereotype.Controller;
  35. import org.springframework.web.bind.annotation.*;
  36. import org.springframework.web.servlet.ModelAndView;
  37. import javax.servlet.http.HttpServletRequest;
  38. import javax.servlet.http.HttpServletResponse;
  39. import java.util.ArrayList;
  40. import java.util.Calendar;
  41. import java.util.Date;
  42. import java.util.List;
  43. @Controller
  44. @RequestMapping("/mark")
  45. public class MarkController extends BaseController {
  46. private static Logger log = LoggerFactory.getLogger(MarkController.class);
  47. @Autowired
  48. private ExamSubjectService subjectService;
  49. @Autowired
  50. private TrialService trialService;
  51. @Autowired
  52. private MarkerService markerService;
  53. @Autowired
  54. private MarkLibraryService libraryService;
  55. @Autowired
  56. private TaskService taskService;
  57. @Autowired
  58. private MarkService markService;
  59. @Autowired
  60. private ExamService examService;
  61. @Autowired
  62. private MarkGroupService groupService;
  63. @Autowired
  64. private LockService lockService;
  65. @Autowired
  66. private ProblemTypeService problemTypeService;
  67. @Autowired
  68. private UserService userService;
  69. @Autowired
  70. private MarkerClassService markerClassService;
  71. @Autowired
  72. private SessionService sessionService;
  73. @Autowired
  74. private FileService fileService;
  75. @Value("${marker.forceMode}")
  76. private String forceMarkMode;
  77. @RequestMapping(value = "/reset", method = RequestMethod.GET)
  78. public ModelAndView reset(HttpServletRequest request) {
  79. User user = RequestUtils.getWebUser(request).getUser();
  80. ModelAndView modelAndView = new ModelAndView("modules/mark/reset");
  81. modelAndView.addObject("user", user);
  82. return modelAndView;
  83. }
  84. @Logging(menu = "修改姓名密码", type = LogType.UPDATE)
  85. @RequestMapping(value = "/reset", method = RequestMethod.POST)
  86. public ModelAndView reset(HttpServletRequest request, User user) {
  87. User current = RequestUtils.getWebUser(request).getUser();
  88. current.setName(user.getName());
  89. current.setPassword(Md5EncryptUtils.md5(user.getPassword()));
  90. current.setLastLoginIp(request.getRemoteAddr());
  91. current.setLastLoginTime(new Date());
  92. userService.save(current);
  93. return new ModelAndView("redirect:/mark/subject-select");
  94. }
  95. @RequestMapping(value = "/subject-select", method = RequestMethod.GET)
  96. public ModelAndView select(HttpServletRequest request) {
  97. ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelect");
  98. User user = RequestUtils.getWebUser(request).getUser();
  99. Calendar rightNow = Calendar.getInstance();
  100. rightNow.setTime(new Date());
  101. rightNow.add(Calendar.YEAR, -1);
  102. List<Exam> examList = examService.findByMarkerUserId(user.getId(), rightNow.getTime());
  103. modelAndView.addObject("examList", examList);
  104. return modelAndView;
  105. }
  106. @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
  107. public ModelAndView select(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer markerId) {
  108. User user = RequestUtils.getWebUser(request).getUser();
  109. ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelectAp");
  110. Calendar rightNow = Calendar.getInstance();
  111. rightNow.setTime(new Date());
  112. rightNow.add(Calendar.YEAR, -1);
  113. List<Exam> examList = examService.findByMarkerUserId(user.getId(), rightNow.getTime());
  114. modelAndView.addObject("examList", examList);
  115. Marker marker = markerService.findById(markerId);
  116. Exam exam = examService.findById(marker.getExamId());
  117. modelAndView.addObject("exam", exam);
  118. MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  119. if (group == null) {
  120. modelAndView.addObject("message", "user.login.error.group");
  121. return modelAndView;
  122. }
  123. if (group.getStatus() == MarkStatus.FINISH) {
  124. modelAndView.addObject("message", "user.login.error.finish");
  125. return modelAndView;
  126. }
  127. StmmsSession session = RequestUtils.getSession(request);
  128. session.saveWebUser(new WebUser(user, null, markerId.toString()));
  129. sessionService.put(request, response, session);
  130. SessionExamUtils.setExamId(request, exam.getId(), exam.getName(), exam.isForbiddenInfo());
  131. return new ModelAndView("redirect:/mark/index");
  132. }
  133. @RequestMapping("/index")
  134. public ModelAndView index(HttpServletRequest request, @RequestParam(value = "mode", required = false) String mode) {
  135. Marker marker = RequestUtils.getWebUser(request).getMarker();
  136. ModelAndView modelAndView = getMarkModeView(marker, MarkMode.findByName(mode));
  137. preProcess(marker, modelAndView);
  138. return modelAndView;
  139. }
  140. private ModelAndView getMarkModeView(Marker marker, MarkMode mode) {
  141. // 多媒体阅卷
  142. Exam exam = examService.findById(marker.getExamId());
  143. boolean forceMode = false;
  144. MarkMode sysMode = MarkMode.findByName(forceMarkMode);
  145. MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  146. if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
  147. ModelAndView view = new ModelAndView("modules/mark/markJson");
  148. view.addObject("forceMode", false);
  149. view.addObject("sheetView", false);
  150. view.addObject("isFormal", group.getStatus() == MarkStatus.FORMAL);
  151. return view;
  152. }
  153. if (sysMode != null) {
  154. // 全局配置的强制评卷模式
  155. mode = sysMode;
  156. forceMode = true;
  157. } else {
  158. // 没有全局配置,优先从大题配置取强制评卷模式
  159. if (group != null && group.getMarkMode() != null) {
  160. mode = group.getMarkMode();
  161. forceMode = true;
  162. }
  163. // 否则取评卷员当前记录的评卷模式
  164. if (mode == null) {
  165. mode = marker.getMode();
  166. }
  167. if (mode == null) {
  168. mode = MarkMode.COMMON;
  169. }
  170. if (marker.getMode() != mode) {
  171. marker.setMode(mode);
  172. markerService.save(marker);
  173. }
  174. }
  175. ModelAndView view = new ModelAndView(mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
  176. view.addObject("forceMode", forceMode);
  177. view.addObject("sheetView", group.isSheetView());
  178. view.addObject("enableAllZero", group.isEnableAllZero());
  179. view.addObject("isFormal", group.getStatus() == MarkStatus.FORMAL);
  180. return view;
  181. }
  182. @RequestMapping("/logout")
  183. public ModelAndView logout(HttpServletRequest request) {
  184. WebUser wu = RequestUtils.getWebUser(request);
  185. releaseMarker(wu.getMarker());
  186. if (StringUtils.isNotBlank(wu.getLogoutUrl())) {
  187. return new ModelAndView("redirect:" + wu.getLogoutUrl());
  188. } else {
  189. return new ModelAndView("redirect:/logout");
  190. }
  191. }
  192. /**
  193. * 进入评卷界面后的通用预处理
  194. *
  195. * @param marker
  196. * @param modelAndView
  197. */
  198. private void preProcess(Marker marker, ModelAndView modelAndView) {
  199. modelAndView.addObject("fileServer", fileService.getFileServer());
  200. modelAndView.addObject("marker", marker);
  201. ExamSubject subject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
  202. subject.setPaperAnswerUrl(fileService);
  203. modelAndView.addObject("subject", subject);
  204. Exam exam = examService.findById(marker.getExamId());
  205. modelAndView.addObject("forceSpecialTag", exam.isForceSpecialTag());
  206. modelAndView.addObject("defaultSetting", StringUtils.trimToNull(marker.getMarkSetting()));
  207. String sheetConfig = "";
  208. if (StringUtils.isNotBlank(subject.getSheetConfig())) {
  209. sheetConfig = buildPictureConfig(subject.getSheetConfig());
  210. } else if (StringUtils.isNotBlank(exam.getSheetConfig())) {
  211. sheetConfig = buildPictureConfig(exam.getSheetConfig());
  212. }
  213. modelAndView.addObject("sheetConfig", sheetConfig);
  214. releaseMarker(marker);
  215. List<ProblemType> problemTypes = problemTypeService.findByExamId(marker.getExamId());
  216. ObjectMapper mapper = new ObjectMapper();
  217. try {
  218. modelAndView.addObject("problemTypes", mapper.writeValueAsString(problemTypes));
  219. } catch (JsonProcessingException e) {
  220. log.error("MarkController-问题类型获取出错", e);
  221. }
  222. }
  223. @RequestMapping("/clear")
  224. @ResponseBody
  225. public void clear(HttpServletRequest request) {
  226. releaseMarker(RequestUtils.getWebUser(request).getMarker());
  227. }
  228. @RequestMapping("/status")
  229. @ResponseBody
  230. public JSONObject status(HttpServletRequest request) {
  231. JSONObject status = new JSONObject();
  232. Marker marker = RequestUtils.getWebUser(request).getMarker();
  233. ExamSubject subject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
  234. MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  235. if (subject == null || group == null || group.getStatus() == MarkStatus.FINISH) {
  236. status.accumulate("valid", false);
  237. return status;
  238. }
  239. long totalCount = 0;
  240. long personCount = 0;
  241. long markedCount = 0;
  242. long exceptionCount = 0;
  243. long topCount = 0;
  244. if (group.getStatus() == MarkStatus.FORMAL) {
  245. topCount = marker.getTopCount() != null ? marker.getTopCount() : 0;
  246. MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
  247. query.setExamId(marker.getExamId());
  248. query.setSubjectCode(marker.getSubjectCode());
  249. query.setGroupNumber(marker.getGroupNumber());
  250. totalCount = libraryService.countByQuery(query);
  251. query.setMarkerId(marker.getId());
  252. personCount = libraryService.countByQuery(query);
  253. query.setMarkerId(0);
  254. query.addStatus(LibraryStatus.MARKED);
  255. query.addStatus(LibraryStatus.ARBITRATED);
  256. markedCount = libraryService.countByQuery(query);
  257. query.clearStatus();
  258. query.addStatus(LibraryStatus.WAIT_ARBITRATE);
  259. query.addStatus(LibraryStatus.PROBLEM);
  260. exceptionCount = libraryService.countByQuery(query);
  261. } else if (group.getStatus() == MarkStatus.TRIAL) {
  262. totalCount = trialService.countLibrary(group.getExamId(), group.getSubjectCode(), group.getNumber());
  263. personCount = trialService.countMarkerHistory(marker.getId());
  264. markedCount = personCount;
  265. }
  266. status.accumulate("personCount", personCount);
  267. status.accumulate("totalCount", totalCount);
  268. status.accumulate("markedCount", markedCount);
  269. status.accumulate("exceptionCount", exceptionCount);
  270. status.accumulate("valid", totalCount > 0);
  271. status.accumulate("topCount", topCount);
  272. return status;
  273. }
  274. @RequestMapping("/gettask")
  275. @ResponseBody
  276. public Task getTask(HttpServletRequest request) {
  277. Marker marker = RequestUtils.getWebUser(request).getMarker();
  278. Task task = null;
  279. try {
  280. lockService.watch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  281. lockService.watch(LockType.MARKER, marker.getId());
  282. MarkGroup group = groupService
  283. .findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  284. if (group == null) {
  285. task = new Task();
  286. task.setExist(false);
  287. task.setMessage("mark.control.task.not.exist");
  288. } else if (group.getStatus() == MarkStatus.FINISH) {
  289. task = new Task();
  290. task.setExist(false);
  291. task.setMessage("mark.control.task.finish");
  292. } else if (group.getStatus() == MarkStatus.TRIAL) {
  293. task = getTrialTask(marker);
  294. } else if (group.getStatus() == MarkStatus.FORMAL) {
  295. task = getFormalTask(marker);
  296. }
  297. if (task == null) {
  298. task = new Task();
  299. task.setExist(false);
  300. task.setMessage("mark.control.task.null");
  301. }
  302. } catch (Exception e) {
  303. log.error("get task error", e);
  304. } finally {
  305. lockService.unwatch(LockType.MARKER, marker.getId());
  306. lockService.unwatch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  307. }
  308. return task;
  309. }
  310. private Task getFormalTask(Marker marker) {
  311. int retry = 1;
  312. Task task = null;
  313. while (task == null) {
  314. List<MarkLibrary> list = new ArrayList<MarkLibrary>();
  315. // 需要判断评卷员是否绑定了班级
  316. long classCount = markerClassService.countByUserIdAndExamId(marker.getUserId(), marker.getExamId());
  317. list = libraryService.findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
  318. marker.getId(), marker.getUserId(), classCount > 0, retry, 20);
  319. if (list.isEmpty()) {
  320. break;
  321. }
  322. for (MarkLibrary library : list) {
  323. if (markService.applyLibrary(library, marker)) {
  324. task = taskService.build(library);
  325. break;
  326. }
  327. }
  328. if (task == null) {
  329. retry++;
  330. }
  331. }
  332. return task;
  333. }
  334. private Task getTrialTask(Marker marker) {
  335. int retry = 1;
  336. Task task = null;
  337. while (task == null) {
  338. List<TrialLibrary> list = trialService.findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(),
  339. marker.getGroupNumber(), marker.getId(), retry, 10);
  340. if (list.isEmpty()) {
  341. break;
  342. }
  343. for (TrialLibrary library : list) {
  344. if (markService.applyLibrary(library, marker)) {
  345. task = taskService.build(library, null);
  346. break;
  347. }
  348. }
  349. retry++;
  350. }
  351. return task;
  352. }
  353. @Logging(menu = "评卷", type = LogType.UPDATE)
  354. @RequestMapping(value = "/savetask", method = RequestMethod.POST)
  355. @ResponseBody
  356. public JSONObject saveTask(HttpServletRequest request, @RequestBody MarkResult markResult) {
  357. JSONObject result = new JSONObject();
  358. Marker marker = RequestUtils.getWebUser(request).getMarker();
  359. boolean success = false;
  360. try {
  361. lockService.watch(LockType.EXAM_SUBJECT, marker.getExamId(), marker.getSubjectCode());
  362. lockService.watch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  363. lockService.watch(LockType.STUDENT, markResult.getStudentId());
  364. lockService.watch(LockType.MARKER, marker.getId());
  365. lockService.waitlock(LockType.GROUP_LIBRARY, markResult.getStudentId(), marker.getExamId(),
  366. marker.getSubjectCode(), marker.getGroupNumber());
  367. success = markService.submitTask(markResult, marker);
  368. } catch (Exception e) {
  369. success = false;
  370. log.error("save task error", e);
  371. } finally {
  372. lockService.unlock(LockType.GROUP_LIBRARY, markResult.getStudentId(), marker.getExamId(),
  373. marker.getSubjectCode(), marker.getGroupNumber());
  374. lockService.unwatch(LockType.MARKER, marker.getId());
  375. lockService.unwatch(LockType.STUDENT, markResult.getStudentId());
  376. lockService.unwatch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  377. lockService.unwatch(LockType.EXAM_SUBJECT, marker.getExamId(), marker.getSubjectCode());
  378. }
  379. result.accumulate("success", success);
  380. result.accumulate("status", status(request));
  381. if (!success) {
  382. result.accumulate("message", "mark.control.tsak.error");
  383. }
  384. return result;
  385. }
  386. @Logging(menu = "查询回评任务", type = LogType.QUERY)
  387. @RequestMapping("/gethistory")
  388. @ResponseBody
  389. public Object history(HttpServletRequest request, @RequestParam int pageNumber, @RequestParam int pageSize,
  390. @RequestParam String order, @RequestParam String sort,
  391. @RequestParam(required = false, defaultValue = "false") Boolean isTag,
  392. @RequestParam(required = false) String secretNumber) throws Exception {
  393. Marker marker = RequestUtils.getWebUser(request).getMarker();
  394. List<Task> list = new ArrayList<>();
  395. Direction d = Direction.DESC;
  396. Sort querySort = null;
  397. if (sort.equals("asc")) {
  398. d = Direction.ASC;
  399. }
  400. if (order.equals("time")) {
  401. querySort = new Sort(d, "markerTime");
  402. } else if (order.equals("studentId")) {
  403. querySort = new Sort(d, "studentId");
  404. } else if (order.equals("score")) {
  405. querySort = new Sort(d, "markerScore");
  406. }
  407. MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
  408. if (group != null && group.getStatus() == MarkStatus.FORMAL) {
  409. // 正评查找已给分的评卷任务
  410. MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
  411. query.setExamId(marker.getExamId());
  412. query.setSubjectCode(marker.getSubjectCode());
  413. query.setMarkerId(marker.getId());
  414. query.addStatus(LibraryStatus.MARKED);
  415. query.setGroupNumber(marker.getGroupNumber());
  416. query.setSecretNumber(secretNumber);
  417. query.setPageNumber(pageNumber);
  418. query.setPageSize(pageSize);
  419. if (querySort != null) {
  420. query.setSort(querySort);
  421. } else {
  422. query.orderByMarkerTimeDesc();
  423. }
  424. list = taskService.findByQuery(query);
  425. for (Task task : list) {
  426. task.setPrevious(true);
  427. }
  428. } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
  429. // 试评查找给分历史记录
  430. List<TrialHistory> historyList = new ArrayList<TrialHistory>();
  431. if (secretNumber != null) {
  432. historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
  433. marker.getGroupNumber(), marker.getId(), secretNumber, pageNumber, pageSize, querySort);
  434. } else {
  435. historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
  436. marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
  437. }
  438. for (TrialHistory history : historyList) {
  439. TrialLibrary library = trialService.findLibrary(history.getLibraryId());
  440. if (library != null) {
  441. Task task = taskService.build(library, history);
  442. task.setPrevious(true);
  443. list.add(task);
  444. }
  445. }
  446. }
  447. return list;
  448. }
  449. @Logging(menu = "修改密码", type = LogType.UPDATE)
  450. @RequestMapping("/change-name")
  451. @ResponseBody
  452. public JSONObject changeName(HttpServletRequest request, @RequestParam String name,
  453. @RequestParam(required = false) String password) {
  454. User user = userService.findById(RequestUtils.getWebUser(request).getId());
  455. JSONObject result = new JSONObject();
  456. user.setName(name);
  457. if (StringUtils.isNotEmpty(password)) {
  458. user.setPassword(Md5EncryptUtils.md5(password));
  459. }
  460. try {
  461. user = userService.save(user);
  462. result.accumulate("success", true);
  463. result.accumulate("name", user.getName());
  464. } catch (Exception e) {
  465. result.accumulate("success", false);
  466. log.error("MarkController-修改名字出错", e);
  467. }
  468. return result;
  469. }
  470. @RequestMapping("/update-setting")
  471. @ResponseBody
  472. public JSONObject updateSetting(HttpServletRequest request, @RequestParam String setting) {
  473. Marker marker = RequestUtils.getWebUser(request).getMarker();
  474. JSONObject result = new JSONObject();
  475. markerService
  476. .updateMarkSetting(marker.getId(), StringEscapeUtils.unescapeHtml(StringUtils.trimToNull(setting)));
  477. result.accumulate("success", true);
  478. return result;
  479. }
  480. private void releaseMarker(Marker marker) {
  481. if (marker == null) {
  482. return;
  483. }
  484. try {
  485. lockService.waitlock(LockType.MARKER, marker.getId());
  486. markService.releaseByMarker(marker);
  487. } catch (Exception e) {
  488. log.error("release marker error", e);
  489. } finally {
  490. lockService.unlock(LockType.MARKER, marker.getId());
  491. }
  492. }
  493. protected String buildPictureConfig(String sheetConfig) {
  494. String json = "";
  495. if (StringUtils.isNotBlank(sheetConfig)) {
  496. try {
  497. ObjectMapper mapper = new ObjectMapper();
  498. json = mapper.writeValueAsString(PictureConfigItem.parse(sheetConfig));
  499. } catch (JsonProcessingException e) {
  500. e.printStackTrace();
  501. }
  502. }
  503. return json;
  504. }
  505. }