package cn.com.qmth.scancentral.controller.admin; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.task.AsyncTaskExecutor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import com.qmth.boot.api.annotation.Aac; import com.qmth.boot.api.constant.ApiConstant; import com.qmth.boot.api.utils.RequestUtil; import com.qmth.boot.core.concurrent.service.ConcurrentService; import com.qmth.boot.core.exception.ReentrantException; import cn.com.qmth.scancentral.controller.BaseController; import cn.com.qmth.scancentral.entity.AnswerCardEntity; import cn.com.qmth.scancentral.enums.LockType; import cn.com.qmth.scancentral.service.AdapteFileService; import cn.com.qmth.scancentral.service.AnswerCardService; import cn.com.qmth.scancentral.service.ExamService; import cn.com.qmth.scancentral.vo.UriVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import net.sf.json.JSONObject; @RestController @Api(tags = "卡格式接口") @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/admin/card") @Aac(strict = false, auth = true) public class CardController extends BaseController { protected static final Logger log = LoggerFactory.getLogger(CardController.class); @Autowired private AnswerCardService answerCardService; @Resource private ConcurrentService concurrentService; @Autowired private AdapteFileService adapteFileService; @Autowired private ExamService examService; // @Qualifier("task-executor") @Autowired private AsyncTaskExecutor taskExecutor; @ApiOperation(value = "卡格式详情") @RequestMapping(value = "/info", method = RequestMethod.POST) public Map info(@RequestParam Long examId) { Map status = new HashMap(); status.put("synching", concurrentService.isLocked(LockType.CARD_SYNC + "-" + examId)); status.put("updateTime", examService.getById(examId).getCardSyncTime()); Map result = new HashMap(); result.put("status", status); result.put("answer", answerCardService.listByExamId(examId)); result.put("package", new ArrayList<>()); return result; } @ApiOperation(value = "创建/修改题卡卡格式") @RequestMapping(value = "/answer/save", method = RequestMethod.POST) public JSONObject answerSave(@RequestParam Long examId, @RequestParam(required = false) Integer number, @RequestParam(required = false) String subjectCode, @RequestParam(required = false) String parameter, @RequestParam(required = false) String remark, @RequestParam Integer paperCount, @RequestParam Boolean singlePage, @RequestParam String md5, @RequestParam(required = false) Integer dpi, @RequestParam MultipartFile file) { if (concurrentService.getLock(LockType.CARD_SYNC + "-" + examId).tryLock()) { try { JSONObject result = new JSONObject(); AnswerCardEntity card = answerCardService.save(getAccessUser(), examId, number, subjectCode, parameter, remark, paperCount, singlePage, md5, dpi, file); result.accumulate("number", card.getNumber()); result.accumulate("updateTime", System.currentTimeMillis()); return result; } finally { concurrentService.getLock(LockType.CARD_SYNC + "-" + examId).unlock(); } } else { throw new ReentrantException("正在同步卡格式,请稍后再试"); } } @ApiOperation(value = "删除答题卡卡格式") @RequestMapping(value = "/answer/delete", method = RequestMethod.POST) public JSONObject answerDelete(@RequestParam Long examId, @RequestParam Integer number) { if (concurrentService.getLock(LockType.CARD_SYNC + "-" + examId).tryLock()) { try { answerCardService.delete(getAccessUser(), examId, number); JSONObject result = new JSONObject(); result.accumulate("number", number); result.accumulate("updateTime", System.currentTimeMillis()); return result; } finally { concurrentService.getLock(LockType.CARD_SYNC + "-" + examId).unlock(); } } else { throw new ReentrantException("正在同步卡格式,请稍后再试"); } } @ApiOperation(value = "答题卡适配卡格式上传") @RequestMapping(value = "/answer/adapte/upload", method = RequestMethod.POST) public UriVo adapteUpload(HttpServletRequest request, @RequestParam Long examId, @RequestParam Integer cardNumber, @RequestParam MultipartFile file, @RequestParam String md5, @RequestParam Integer dpi) { return adapteFileService.save(RequestUtil.getIpAddress(request), getAccessUser().getRole(), examId, cardNumber, md5, dpi, file); } @ApiOperation(value = "创建/修改签到表卡格式") @RequestMapping(value = "/package/save", method = RequestMethod.POST) public JSONObject packageSave() { JSONObject result = new JSONObject(); return result; } }