UserAchievementApiController.java 12 KB

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