AchievementApiController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. package com.goafanti.achievement.controller;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import javax.annotation.Resource;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.validation.Valid;
  8. import org.springframework.beans.BeanUtils;
  9. import org.springframework.validation.BindingResult;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestMethod;
  12. import org.springframework.web.bind.annotation.RequestParam;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import com.goafanti.achievement.bo.InputAchievement;
  15. import com.goafanti.achievement.service.AchievementOrderService;
  16. import com.goafanti.achievement.service.AchievementService;
  17. import com.goafanti.admin.service.AftFileService;
  18. import com.goafanti.common.bo.Result;
  19. import com.goafanti.common.constant.AFTConstants;
  20. import com.goafanti.common.constant.ErrorConstants;
  21. import com.goafanti.common.controller.CertifyApiController;
  22. import com.goafanti.common.enums.AchievementAuditStatus;
  23. import com.goafanti.common.enums.AchievementFields;
  24. import com.goafanti.common.enums.AchievementOrderStatus;
  25. import com.goafanti.common.enums.AttachmentType;
  26. import com.goafanti.common.model.Achievement;
  27. import com.goafanti.common.model.AchievementOrder;
  28. import com.goafanti.common.model.AftFile;
  29. import com.goafanti.common.utils.StringUtils;
  30. import com.goafanti.core.shiro.token.TokenManager;
  31. @RestController
  32. @RequestMapping(value = "/api/user/achievement")
  33. public class AchievementApiController extends CertifyApiController {
  34. @Resource
  35. private AchievementService achievementService;
  36. @Resource
  37. private AftFileService aftFileService;
  38. @Resource
  39. private AchievementOrderService achievementOrderService;
  40. /**
  41. * 成果需求匹配列表
  42. */
  43. @RequestMapping(value = "/achievementDemand", method = RequestMethod.GET)
  44. public Result achievementDemand(String id) {
  45. Result res = new Result();
  46. res.setData(achievementService.selectAchievementDemandListByAchievementId(id));
  47. return res;
  48. }
  49. /**
  50. * 下载科技成果批量导入Excel模板
  51. */
  52. @RequestMapping(value = "/downloadTemplate", method = RequestMethod.GET)
  53. public Result downloadTemplateFile(HttpServletResponse response, String sign) {
  54. Result res = new Result();
  55. AttachmentType attachmentType = AttachmentType.getField(sign);
  56. if (attachmentType == AttachmentType.ACHIEVEMENT_TEMPLATE) {
  57. String fileName = "";
  58. AftFile af = aftFileService.selectAftFileBySign(sign);
  59. if (null == af) {
  60. res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT, "", "找不到文件!"));
  61. } else {
  62. String path = af.getFilePath();
  63. String suffix = path.substring(path.lastIndexOf("."));
  64. fileName = AttachmentType.ACHIEVEMENT_TEMPLATE.getDesc() + suffix;
  65. downloadFile(response, fileName, path);
  66. }
  67. } else {
  68. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
  69. }
  70. return res;
  71. }
  72. /**
  73. * 成果撤消发布(下架)
  74. */
  75. @RequestMapping(value = "/offShelf", method = RequestMethod.POST)
  76. public Result offShelf(String id) {
  77. Result res = new Result();
  78. if (StringUtils.isBlank(id)) {
  79. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到成果ID", "成果ID"));
  80. return res;
  81. }
  82. Achievement a = achievementService.selectByPrimaryKey(id);
  83. if (null == a) {
  84. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "需求ID"));
  85. return res;
  86. }
  87. res.setData(achievementService.updateReleaseStatus(a));
  88. return res;
  89. }
  90. /**
  91. * 成果列表
  92. */
  93. @RequestMapping(value = "/list", method = RequestMethod.GET)
  94. private Result list(Integer auditStatus, Integer serialNumber, String name, String keyword, Integer category,
  95. Integer ownerType, Integer status, String releaseDateStartDate, String releaseDateEndDate,
  96. Integer releaseStatus, String pageNo, String pageSize) {
  97. Result res = new Result();
  98. Integer pNo = 1;
  99. Integer pSize = 10;
  100. if (StringUtils.isNumeric(pageSize)) {
  101. pSize = Integer.parseInt(pageSize);
  102. }
  103. if (StringUtils.isNumeric(pageNo)) {
  104. pNo = Integer.parseInt(pageNo);
  105. }
  106. res.setData(achievementService.listUserAchievement(auditStatus, serialNumber, name, keyword, category,
  107. ownerType, status, releaseDateStartDate, releaseDateEndDate, releaseStatus, pNo, pSize));
  108. return res;
  109. }
  110. /**
  111. * 新增成果
  112. */
  113. @RequestMapping(value = "/apply", method = RequestMethod.POST)
  114. private Result apply(@Valid InputAchievement ia, BindingResult bindingResult,
  115. @RequestParam(name = "keywords[]", required = false) String[] keywords) {
  116. Result res = new Result();
  117. if (bindingResult.hasErrors()) {
  118. res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
  119. AchievementFields.getFieldDesc(bindingResult.getFieldError().getField())));
  120. return res;
  121. }
  122. res = disposeInputAchievement(res, ia, keywords);
  123. if (!res.getError().isEmpty()) {
  124. return res;
  125. }
  126. Achievement a = new Achievement();
  127. BeanUtils.copyProperties(ia, a);
  128. a.setOwnerId(TokenManager.getUserId());
  129. achievementService.saveAchievement(a, keywords);
  130. return res;
  131. }
  132. /**
  133. * 个人成果详情详情
  134. */
  135. @RequestMapping(value = "/userDetail", method = RequestMethod.GET)
  136. private Result userDetail(String id) {
  137. Result res = new Result();
  138. if (StringUtils.isBlank(id)) {
  139. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到成果ID", "成果ID"));
  140. return res;
  141. }
  142. res.setData(achievementService.selectUserOwnerDetail(id));
  143. return res;
  144. }
  145. /**
  146. * 组织用户成果详情详情
  147. */
  148. @RequestMapping(value = "/orgDetail", method = RequestMethod.GET)
  149. private Result orgDetail(String id) {
  150. Result res = new Result();
  151. if (StringUtils.isBlank(id)) {
  152. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到成果ID", "成果ID"));
  153. return res;
  154. }
  155. res.setData(achievementService.selectOrgOwnerDetail(id));
  156. return res;
  157. }
  158. /**
  159. * 修改成果
  160. */
  161. @RequestMapping(value = "/update", method = RequestMethod.POST)
  162. public Result update(@Valid InputAchievement ia, BindingResult bindingResult,
  163. @RequestParam(name = "keywords[]", required = false) String[] keywords) {
  164. Result res = new Result();
  165. if (bindingResult.hasErrors()) {
  166. res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
  167. AchievementFields.getFieldDesc(bindingResult.getFieldError().getField())));
  168. return res;
  169. }
  170. if (StringUtils.isBlank(ia.getId())) {
  171. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到成果ID", "成果ID"));
  172. return res;
  173. }
  174. if (!AchievementAuditStatus.CREATE.getCode().equals(ia.getAuditStatus())
  175. && !AchievementAuditStatus.SUBMIT.getCode().equals(ia.getAuditStatus())
  176. && !AchievementAuditStatus.UNAUDITED.getCode().equals(ia.getAuditStatus())) {
  177. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "当前状态无法提交审核!"));
  178. return res;
  179. }
  180. res = disposeInputAchievement(res, ia, keywords);
  181. if (!res.getError().isEmpty()) {
  182. return res;
  183. }
  184. Achievement a = new Achievement();
  185. BeanUtils.copyProperties(ia, a);
  186. achievementService.updateAchievement(a, keywords, null);
  187. return res;
  188. }
  189. /**
  190. * 下载文本文件
  191. */
  192. @RequestMapping(value = "/download", method = RequestMethod.GET)
  193. public Result download(HttpServletResponse response, String id, String sign) {
  194. Result res = new Result();
  195. if (StringUtils.isEmpty(id)) {
  196. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "科技成果ID"));
  197. return res;
  198. }
  199. Achievement a = achievementService.selectByPrimaryKey(id);
  200. if (null == a) {
  201. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "科技成果ID"));
  202. return res;
  203. }
  204. if (TokenManager.getUserId().equals(a.getOwnerId())) {
  205. AttachmentType attachmentType = AttachmentType.getField(sign);
  206. if (attachmentType == AttachmentType.ACHIEVEMENT_MATURITY_TEXT_FILE) {
  207. downloadUnPrivateFile(response, a.getMaturityTextFileDownloadFileName(), a.getMaturityTextFileUrl());
  208. } else if (attachmentType == AttachmentType.ACHIEVEMENT_TECH_PLAN) {
  209. downloadUnPrivateFile(response, a.getTechPlanDownloadFileName(), a.getTechPlanUrl());
  210. } else if (attachmentType == AttachmentType.ACHIEVEMENT_BUSINESS_PLAN) {
  211. downloadUnPrivateFile(response, a.getBusinessPlanDownloadFileName(), a.getBusinessPlanUrl());
  212. } else {
  213. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
  214. }
  215. } else {
  216. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "科技成果ID"));
  217. return res;
  218. }
  219. return res;
  220. }
  221. /**
  222. * 文本文件上传
  223. */
  224. @RequestMapping(value = "/uploadTextFile", method = RequestMethod.POST)
  225. public Result uploadTextFile(HttpServletRequest req, String sign) {
  226. Result res = new Result();
  227. AttachmentType attachmentType = AttachmentType.getField(sign);
  228. if (attachmentType == AttachmentType.ACHIEVEMENT_MATURITY_TEXT_FILE
  229. || attachmentType == AttachmentType.ACHIEVEMENT_TECH_PLAN
  230. || attachmentType == AttachmentType.ACHIEVEMENT_BUSINESS_PLAN) {
  231. res.setData(handleFiles(res, "/achievement/", false, req, sign, "achievement"));
  232. } else {
  233. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
  234. }
  235. return res;
  236. }
  237. /**
  238. * 图片上传
  239. */
  240. @RequestMapping(value = "/uploadPicture", method = RequestMethod.POST)
  241. public Result uploadPicture(HttpServletRequest req, String sign) {
  242. Result res = new Result();
  243. AttachmentType attachmentType = AttachmentType.getField(sign);
  244. if (attachmentType == AttachmentType.ACHIEVEMENT_TECHNICAL_PICTURE
  245. || attachmentType == AttachmentType.ACHIEVEMENT_MATURITY_PICTURE) {
  246. res.setData(handleFiles(res, "/achievement/", false, req, sign, "achievement"));
  247. } else {
  248. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
  249. }
  250. return res;
  251. }
  252. /**
  253. * 删除
  254. */
  255. @RequestMapping(value = "/delete", method = RequestMethod.POST)
  256. private Result delete(@RequestParam(name = "ids[]", required = false) String[] ids) {
  257. Result res = new Result();
  258. if (ids == null || ids.length != 1) {
  259. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
  260. } else {
  261. List<AchievementOrder> list = achievementOrderService.selectAchievementOrderByAchievementId(ids[0]);
  262. for (AchievementOrder order : list) {
  263. if (!AchievementOrderStatus.CREATE.getCode().equals(order.getStatus())) {
  264. res.getError().add(buildError("", "当前科技成果有订单,无法删除!"));
  265. return res;
  266. }
  267. }
  268. res.setData(achievementService.deleteByPrimaryKey(Arrays.asList(ids)));
  269. }
  270. return res;
  271. }
  272. private Result disposeInputAchievement(Result res, InputAchievement ia, String[] keywords) {
  273. if (StringUtils.isBlank(ia.getName())) {
  274. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到成果名称", "成果名称"));
  275. return res;
  276. }
  277. if (null == ia.getCategory()) {
  278. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到数据类别", "数据类别"));
  279. return res;
  280. }
  281. if (StringUtils.isBlank(ia.getKeyword())) {
  282. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到关键词", "关键词"));
  283. return res;
  284. }
  285. if (null == keywords || keywords.length < 1) {
  286. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到关键词", "关键词"));
  287. return res;
  288. }
  289. if (null == ia.getOwnerType()) {
  290. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到所有人类型", "所有人类型"));
  291. return res;
  292. }
  293. if (null == ia.getCooperationMode()) {
  294. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合作方式", "合作方式"));
  295. return res;
  296. }
  297. for (int i = 0; i < keywords.length; i++) {
  298. if (AFTConstants.KEYWORDLENTH < keywords[i].length()) {
  299. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "关键词长度"));
  300. return res;
  301. }
  302. }
  303. return res;
  304. }
  305. }