ActivityRegistrationService.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. package platform.modules.sys.service;
  2. import com.aliyuncs.exceptions.ClientException;
  3. import com.github.pagehelper.PageHelper;
  4. import com.github.pagehelper.PageInfo;
  5. import org.apache.commons.lang3.StringUtils;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import platform.common.Constant;
  10. import platform.common.base.service.BaseService;
  11. import platform.common.util.AlibabaSMSUtil;
  12. import platform.common.util.ShiroUtils;
  13. import platform.modules.build.entity.Tenancy;
  14. import platform.modules.carrier.dto.ActivityStatistic;
  15. import platform.modules.government.entity.Attachment;
  16. import platform.modules.government.entity.FileDown;
  17. import platform.modules.government.entity.User;
  18. import platform.modules.government.service.AttachmentService;
  19. import platform.modules.government.service.UserService;
  20. import platform.modules.home.service.HomeRefactorService;
  21. import platform.modules.sys.dao.ActivityRegistrationDao;
  22. import platform.modules.sys.entity.ActivityDetail;
  23. import platform.modules.sys.entity.ActivityFeedback;
  24. import platform.modules.sys.entity.ActivityRegistration;
  25. import platform.modules.sys.entity.ActivityReview;
  26. import platform.modules.sys.report.ActivityRegistrationExports;
  27. import tk.mybatis.mapper.entity.Example;
  28. import java.util.ArrayList;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.Objects;
  32. @Service
  33. @Transactional
  34. public class ActivityRegistrationService extends BaseService<ActivityRegistration> {
  35. @Autowired
  36. private ActivityRegistrationDao activityRegistrationDao;
  37. @Autowired
  38. private ActivityService activityService;
  39. @Autowired
  40. private UserService userService;
  41. @Autowired
  42. private AttachmentService attachmentService;
  43. @Autowired
  44. private HomeRefactorService homeRefactorService;
  45. @Autowired
  46. private ActivityReviewService activityReviewService;
  47. /**
  48. * 获取指定活动的已审核报名人数
  49. *
  50. * @param activityId
  51. * @return
  52. */
  53. public Integer getActivityRegistrationNumber(Integer activityId) {
  54. return activityRegistrationDao.getRegistrationNumber(activityId);
  55. }
  56. /**
  57. * 保存报名信息
  58. *
  59. * @param activityRegistration
  60. * @return
  61. */
  62. public Integer saveActivityRegistration(ActivityRegistration activityRegistration) {
  63. ActivityDetail activityDetail = activityService.findById(activityRegistration.getActivity_id());
  64. String quota = activityDetail.getActivity_quota();
  65. String isReview = activityDetail.getIs_review();
  66. //已报名人数
  67. int registrationNumber = getActivityRegistrationNumber(activityRegistration.getActivity_id());
  68. User currUser = new User();
  69. if (activityRegistration.getUser_id() != null && !activityRegistration.getUser_id().equals("")) {
  70. currUser = userService.findById(activityRegistration.getUser_id());
  71. } else {
  72. currUser = ShiroUtils.getUserEntity();
  73. }
  74. activityRegistration.setUser_id(currUser.getId());
  75. activityRegistration.setUser_type(currUser.getUser_type().toString());
  76. if (Objects.equals(Constant.UserType.GOVERNMENT, currUser.getUser_type())) {
  77. activityRegistration.setRelation_id("0");
  78. } else if (Objects.equals(Constant.UserType.BUILD, currUser.getUser_type())) {
  79. activityRegistration.setRelation_id(currUser.getBuild_id() + "");
  80. } else if (Objects.equals(Constant.UserType.STREET, currUser.getUser_type())) {
  81. activityRegistration.setRelation_id(currUser.getStreet_id() + "");
  82. } else if (Objects.equals(Constant.UserType.COMPANY, currUser.getUser_type())) {
  83. activityRegistration.setRelation_id(currUser.getCompany_id() + "");
  84. } else if (Objects.equals(Constant.UserType.PERSONAL, currUser.getUser_type())) {
  85. activityRegistration.setRelation_id(currUser.getId() + "");
  86. } else if (Objects.equals(Constant.UserType.WECHAT, currUser.getUser_type())) {
  87. activityRegistration.setRelation_id(currUser.getId() + "");
  88. activityRegistration.setUser_type(currUser.getUser_type() + "");
  89. }
  90. activityRegistration.setRegistration_time(new Date());
  91. //签到状态 0已签到 1未签到
  92. activityRegistration.setSign_state(null);
  93. if (Objects.equals(quota, null) || Objects.equals(quota, "")) {
  94. //如果不限人数
  95. if (Objects.equals(isReview, "0")) {
  96. //需要审核
  97. //由政府用户进行报名确认,如在活动结束时间还未被审核的报名者,则活动状态为取消
  98. //审核状态(0待审核,1通过,2退回)
  99. activityRegistration.setReview_state("0");
  100. } else {
  101. //不需要审核
  102. //所有报名的用户会在点击报名的同一时刻被确认参与活动
  103. //审核状态(0待审核,1通过,2退回)
  104. activityRegistration.setReview_state("1");
  105. }
  106. } else {
  107. //限制人数
  108. /*if (registrationNumber < Integer.parseInt(quota)) {*/
  109. if (Objects.equals(isReview, "0")) {
  110. //需要审核
  111. //由政府用户进行报名确认,如在活动结束时间还未被审核的报名者,则活动状态为取消
  112. //审核状态(0待审核,1通过,2退回)
  113. activityRegistration.setReview_state("0");
  114. } else {
  115. //不需要审核
  116. //则所有报名的,且在名额数目内的用户会在点击报名的同一时刻被确认参与活动。名额满后则报名通道关闭,除非已被确认的用户取消参加,报名通道重新打开
  117. //审核状态(0待审核,1通过,2退回)
  118. activityRegistration.setReview_state("1");
  119. }
  120. /* } else {
  121. //报名人数已满
  122. return -1;
  123. }*/
  124. }
  125. return this.saveSelective(activityRegistration);
  126. }
  127. /**
  128. * 政府活动管理-报名信息
  129. *
  130. * @param pageNum
  131. * @param pageSize
  132. * @param id
  133. * @return
  134. * @throws Exception
  135. */
  136. @Transactional(readOnly = true)
  137. public PageInfo<ActivityRegistration> findRegistrationPage(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  138. PageHelper.startPage(pageNum, pageSize);
  139. List<ActivityRegistration> list = activityRegistrationDao.findRegistrationPage(id, null);
  140. return new PageInfo<ActivityRegistration>(list);
  141. }
  142. @Transactional(readOnly = true)
  143. public List<ActivityRegistration> findRegistrationList(Integer id) throws Exception {
  144. List<ActivityRegistration> list = activityRegistrationDao.findRegistrationPage(id, null);
  145. return list;
  146. }
  147. @Transactional(readOnly = true)
  148. public List<ActivityRegistrationExports> findRegistrationListExports(Integer id) throws Exception {
  149. List<ActivityRegistrationExports> list = activityRegistrationDao.findRegistrationExport(id, null);
  150. return list;
  151. }
  152. @Transactional(readOnly = true)
  153. public Integer getRegistrationNumber(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  154. List<ActivityRegistration> list = activityRegistrationDao.findRegistrationPage(id, null);
  155. return list.size();
  156. }
  157. /**
  158. * 政府活动管理-签到信息
  159. *
  160. * @param pageNum
  161. * @param pageSize
  162. * @param id
  163. * @return
  164. * @throws Exception
  165. */
  166. @Transactional(readOnly = true)
  167. public PageInfo<ActivityRegistration> findSginPage(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  168. PageHelper.startPage(pageNum, pageSize);
  169. List<ActivityRegistration> list = activityRegistrationDao.findSginPage(id, null);
  170. return new PageInfo<ActivityRegistration>(list);
  171. }
  172. @Transactional(readOnly = true)
  173. public List<ActivityRegistration> findSginList(Integer id) throws Exception {
  174. List<ActivityRegistration> list = activityRegistrationDao.findSginPage(id, null);
  175. return list;
  176. }
  177. @Transactional(readOnly = true)
  178. public Integer getSginNumber(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  179. List<ActivityRegistration> list = activityRegistrationDao.findSginPage(id, null);
  180. return list.size();
  181. }
  182. /**
  183. * 园区街道企业-我的活动
  184. *
  185. * @param pageNum
  186. * @param pageSize
  187. * @param activityRegistration
  188. * @return
  189. * @throws Exception
  190. */
  191. @Transactional(readOnly = true)
  192. public PageInfo<ActivityRegistration> findMyActivityPage(Integer pageNum, Integer pageSize, ActivityRegistration activityRegistration) throws Exception {
  193. PageHelper.startPage(pageNum, pageSize);
  194. List<ActivityRegistration> list = activityRegistrationDao.findMyActivityPage(activityRegistration);
  195. return new PageInfo<ActivityRegistration>(list);
  196. }
  197. /**
  198. * 修改状态
  199. *
  200. * @param activityRegistration
  201. * @return
  202. */
  203. public Boolean updateState(ActivityRegistration activityRegistration) {
  204. if (Objects.equals(activityRegistrationDao.updateState(activityRegistration), 1))
  205. return true;
  206. return false;
  207. }
  208. /**
  209. * 批量修改状态
  210. *
  211. * @param idList
  212. */
  213. public void updateStateBatch(List<String> idList, ActivityRegistration activityRegistration) {
  214. activityRegistrationDao.updateStateBatch(idList, activityRegistration);
  215. }
  216. /**
  217. * 获取当前账户所在单位已报名的
  218. *
  219. * @return
  220. */
  221. public List<ActivityRegistration> getCurrRegUsers(String activity_id) {
  222. Integer userType = ShiroUtils.getUserType();
  223. String relationId = "";
  224. if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) {
  225. relationId = "0";
  226. } else if (Objects.equals(Constant.UserType.BUILD, userType)) {
  227. relationId = ShiroUtils.getBuildId().toString();
  228. } else if (Objects.equals(Constant.UserType.STREET, userType)) {
  229. relationId = ShiroUtils.getStreetId().toString();
  230. } else if (Objects.equals(Constant.UserType.COMPANY, userType)) {
  231. relationId = ShiroUtils.getCompanyId().toString();
  232. } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) {
  233. relationId = ShiroUtils.getUserId().toString();
  234. }
  235. return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id);
  236. }
  237. /**
  238. * 获取当前账户所在单位已报名的
  239. *
  240. * @return
  241. */
  242. public List<ActivityRegistration> getCurrRegUsers(String activity_id, String phone) {
  243. User user = userService.findByMobile(phone);
  244. Integer userType = user.getUser_type();
  245. String relationId = "";
  246. if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) {
  247. relationId = "0";
  248. } else if (Objects.equals(Constant.UserType.BUILD, userType)) {
  249. relationId = user.getBuild_id().toString();
  250. } else if (Objects.equals(Constant.UserType.STREET, userType)) {
  251. relationId = user.getStreet_id().toString();
  252. } else if (Objects.equals(Constant.UserType.COMPANY, userType)) {
  253. relationId = user.getCompany_id().toString();
  254. } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) {
  255. relationId = user.getId().toString();
  256. }else if (Objects.equals(Constant.UserType.WECHAT, userType)) {
  257. relationId = user.getId().toString();
  258. }
  259. return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id);
  260. }
  261. /**
  262. * 获取当前账户所在单位已报名的
  263. *
  264. * @return
  265. */
  266. public List<ActivityRegistration> getWechatCurrRegUsers(String activity_id, Integer user_id) {
  267. User user = userService.findById(user_id);
  268. Integer userType = user.getUser_type();
  269. String relationId = "";
  270. if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) {
  271. relationId = "0";
  272. } else if (Objects.equals(Constant.UserType.BUILD, userType)) {
  273. relationId = user.getBuild_id().toString();
  274. } else if (Objects.equals(Constant.UserType.STREET, userType)) {
  275. relationId = user.getStreet_id().toString();
  276. } else if (Objects.equals(Constant.UserType.COMPANY, userType)) {
  277. relationId = user.getCompany_id().toString();
  278. } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) {
  279. relationId = user.getId().toString();
  280. } else if (Objects.equals(Constant.UserType.WECHAT, userType)) {
  281. relationId = user.getId().toString();
  282. }
  283. return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id);
  284. }
  285. public Boolean sendActivityAbortSMS(ActivityDetail activity, List<ActivityRegistration> registrations) {
  286. //您报名的活动:${activity_title} 已取消。具体信息请登录PC端查看。感谢您的支持。
  287. try {
  288. if (null != registrations && registrations.size() > 0) {
  289. for (ActivityRegistration registration : registrations) {
  290. String phone = registration.getPhone();
  291. if (StringUtils.isNotBlank(phone)) {
  292. String activity_title = activity.getActivity_title();
  293. String templateParam = "{\"activity_title\":\"" + activity_title + "\"}";
  294. AlibabaSMSUtil.sendSMS(phone, Constant.SMS_TemplateCode.ACTIVITY_ABORT, "企业提升发展服务平台", templateParam);
  295. }
  296. }
  297. }
  298. return true;
  299. } catch (Exception e) {
  300. e.printStackTrace();
  301. return false;
  302. }
  303. }
  304. public Boolean sendActivityUpdateSMS(ActivityDetail activity, List<ActivityRegistration> registrations) {
  305. //您报名的活动:${activity_title} 活动内容有变更。具体信息请登录PC端查看。感谢您的支持。
  306. try {
  307. if (null != registrations && registrations.size() > 0) {
  308. for (ActivityRegistration registration : registrations) {
  309. String phone = registration.getPhone();
  310. String activity_title = activity.getActivity_title();
  311. String templateParam = "{\"activity_title\":\"" + activity_title + "\"}";
  312. AlibabaSMSUtil.sendSMS(phone, Constant.SMS_TemplateCode.ACTIVITY_UPDATE, "企业提升发展服务平台", templateParam);
  313. }
  314. }
  315. return true;
  316. } catch (Exception e) {
  317. e.printStackTrace();
  318. return false;
  319. }
  320. }
  321. /**
  322. * 取消报名
  323. *
  324. * @param ids
  325. */
  326. public void adortRegister(List<String> ids) {
  327. activityRegistrationDao.adortRegister(ids);
  328. }
  329. /**
  330. * 获取用户报名活动的报名信息
  331. *
  332. * @param activityId
  333. * @param userId
  334. * @return
  335. */
  336. public List<ActivityRegistration> getActivityRegistration(Integer activityId, int userId) {
  337. return activityRegistrationDao.getActivityRegistration(activityId, userId);
  338. }
  339. /**
  340. * 活动统计
  341. *
  342. * @param userId
  343. * @return
  344. */
  345. public ActivityStatistic findActivityStatistic(Integer userId) {
  346. ActivityStatistic statistic = new ActivityStatistic();
  347. statistic.setPending(activityRegistrationDao.findPendingActivity(userId).size());
  348. statistic.setComment(activityRegistrationDao.findCommentActivity(userId).size());
  349. statistic.setExpired(activityRegistrationDao.findExpiredActivity(userId).size());
  350. statistic.setCompleted(activityRegistrationDao.findCompletedActivity(userId).size());
  351. statistic.setPush(activityRegistrationDao.findPushActivity(userId).size());
  352. statistic.setCollection(activityRegistrationDao.findCollectionActivity(userId).size());
  353. return statistic;
  354. }
  355. /**
  356. * 获取各类活动
  357. *
  358. * @param type
  359. * @return
  360. */
  361. public List<ActivityDetail> findTypesActivitys(String type, Integer userId) {
  362. List<ActivityDetail> statistics = new ArrayList<>();
  363. switch (type) {
  364. case "pending"://待参加
  365. statistics = activityRegistrationDao.findPendingActivity(userId);
  366. break;
  367. case "comment":
  368. statistics = activityRegistrationDao.findCommentActivity(userId);
  369. break;
  370. case "expired":
  371. statistics = activityRegistrationDao.findExpiredActivity(userId);
  372. break;
  373. case "completed":
  374. statistics = activityRegistrationDao.findCompletedActivity(userId);
  375. break;
  376. case "push":
  377. statistics = activityRegistrationDao.findPushActivity(userId);
  378. break;
  379. case "collection":
  380. statistics = activityRegistrationDao.findCollectionActivity(userId);
  381. break;
  382. }
  383. for (ActivityDetail activity : statistics) {
  384. //活动图片
  385. List<Attachment> attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, activity.getId(), null);
  386. if (null != attachments && attachments.size() > 0) {
  387. FileDown fileDown = new FileDown(attachments.get(0).getId(), attachments.get(0).getFile_name(), attachments.get(0).getFile_url(), attachments.get(0).getDownload_uri());
  388. activity.setFileDown(fileDown);
  389. }
  390. //是否收藏
  391. if (homeRefactorService.isFavourited(activity.getId(), userId)) {
  392. activity.setIs_favourited("1");
  393. } else {
  394. activity.setIs_favourited("0");
  395. }
  396. //活动回顾
  397. ActivityReview activityReview = activityReviewService.findByActivityId(activity.getId());
  398. if (activityReview != null) {
  399. activity.setActivityReviewId(activityReview.getId());
  400. }
  401. }
  402. return statistics;
  403. }
  404. }