ActivityRegistrationService.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  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 {
  87. activityRegistration.setUser_type("6");// 没有账号
  88. }
  89. activityRegistration.setRegistration_time(new Date());
  90. //签到状态 0已签到 1未签到
  91. activityRegistration.setSign_state(null);
  92. if (Objects.equals(quota, null) || Objects.equals(quota, "")) {
  93. //如果不限人数
  94. if (Objects.equals(isReview, "0")) {
  95. //需要审核
  96. //由政府用户进行报名确认,如在活动结束时间还未被审核的报名者,则活动状态为取消
  97. //审核状态(0待审核,1通过,2退回)
  98. activityRegistration.setReview_state("0");
  99. } else {
  100. //不需要审核
  101. //所有报名的用户会在点击报名的同一时刻被确认参与活动
  102. //审核状态(0待审核,1通过,2退回)
  103. activityRegistration.setReview_state("1");
  104. }
  105. } else {
  106. //限制人数
  107. /*if (registrationNumber < Integer.parseInt(quota)) {*/
  108. if (Objects.equals(isReview, "0")) {
  109. //需要审核
  110. //由政府用户进行报名确认,如在活动结束时间还未被审核的报名者,则活动状态为取消
  111. //审核状态(0待审核,1通过,2退回)
  112. activityRegistration.setReview_state("0");
  113. } else {
  114. //不需要审核
  115. //则所有报名的,且在名额数目内的用户会在点击报名的同一时刻被确认参与活动。名额满后则报名通道关闭,除非已被确认的用户取消参加,报名通道重新打开
  116. //审核状态(0待审核,1通过,2退回)
  117. activityRegistration.setReview_state("1");
  118. }
  119. /* } else {
  120. //报名人数已满
  121. return -1;
  122. }*/
  123. }
  124. return this.saveSelective(activityRegistration);
  125. }
  126. /**
  127. * 政府活动管理-报名信息
  128. *
  129. * @param pageNum
  130. * @param pageSize
  131. * @param id
  132. * @return
  133. * @throws Exception
  134. */
  135. @Transactional(readOnly = true)
  136. public PageInfo<ActivityRegistration> findRegistrationPage(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  137. PageHelper.startPage(pageNum, pageSize);
  138. List<ActivityRegistration> list = activityRegistrationDao.findRegistrationPage(id, null);
  139. return new PageInfo<ActivityRegistration>(list);
  140. }
  141. @Transactional(readOnly = true)
  142. public List<ActivityRegistration> findRegistrationList(Integer id) throws Exception {
  143. List<ActivityRegistration> list = activityRegistrationDao.findRegistrationPage(id, null);
  144. return list;
  145. }
  146. @Transactional(readOnly = true)
  147. public List<ActivityRegistrationExports> findRegistrationListExports(Integer id) throws Exception {
  148. List<ActivityRegistrationExports> list = activityRegistrationDao.findRegistrationExport(id, null);
  149. return list;
  150. }
  151. @Transactional(readOnly = true)
  152. public Integer getRegistrationNumber(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  153. List<ActivityRegistration> list = activityRegistrationDao.findRegistrationPage(id, null);
  154. return list.size();
  155. }
  156. /**
  157. * 政府活动管理-签到信息
  158. *
  159. * @param pageNum
  160. * @param pageSize
  161. * @param id
  162. * @return
  163. * @throws Exception
  164. */
  165. @Transactional(readOnly = true)
  166. public PageInfo<ActivityRegistration> findSginPage(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  167. PageHelper.startPage(pageNum, pageSize);
  168. List<ActivityRegistration> list = activityRegistrationDao.findSginPage(id, null);
  169. return new PageInfo<ActivityRegistration>(list);
  170. }
  171. @Transactional(readOnly = true)
  172. public List<ActivityRegistration> findSginList(Integer id) throws Exception {
  173. List<ActivityRegistration> list = activityRegistrationDao.findSginPage(id, null);
  174. return list;
  175. }
  176. @Transactional(readOnly = true)
  177. public Integer getSginNumber(Integer pageNum, Integer pageSize, Integer id) throws Exception {
  178. List<ActivityRegistration> list = activityRegistrationDao.findSginPage(id, null);
  179. return list.size();
  180. }
  181. /**
  182. * 园区街道企业-我的活动
  183. *
  184. * @param pageNum
  185. * @param pageSize
  186. * @param activityRegistration
  187. * @return
  188. * @throws Exception
  189. */
  190. @Transactional(readOnly = true)
  191. public PageInfo<ActivityRegistration> findMyActivityPage(Integer pageNum, Integer pageSize, ActivityRegistration activityRegistration) throws Exception {
  192. PageHelper.startPage(pageNum, pageSize);
  193. List<ActivityRegistration> list = activityRegistrationDao.findMyActivityPage(activityRegistration);
  194. return new PageInfo<ActivityRegistration>(list);
  195. }
  196. /**
  197. * 修改状态
  198. *
  199. * @param activityRegistration
  200. * @return
  201. */
  202. public Boolean updateState(ActivityRegistration activityRegistration) {
  203. if (Objects.equals(activityRegistrationDao.updateState(activityRegistration), 1))
  204. return true;
  205. return false;
  206. }
  207. /**
  208. * 批量修改状态
  209. *
  210. * @param idList
  211. */
  212. public void updateStateBatch(List<String> idList, ActivityRegistration activityRegistration) {
  213. activityRegistrationDao.updateStateBatch(idList, activityRegistration);
  214. }
  215. /**
  216. * 获取当前账户所在单位已报名的
  217. *
  218. * @return
  219. */
  220. public List<ActivityRegistration> getCurrRegUsers(String activity_id) {
  221. Integer userType = ShiroUtils.getUserType();
  222. String relationId = "";
  223. if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) {
  224. relationId = "0";
  225. } else if (Objects.equals(Constant.UserType.BUILD, userType)) {
  226. relationId = ShiroUtils.getBuildId().toString();
  227. } else if (Objects.equals(Constant.UserType.STREET, userType)) {
  228. relationId = ShiroUtils.getStreetId().toString();
  229. } else if (Objects.equals(Constant.UserType.COMPANY, userType)) {
  230. relationId = ShiroUtils.getCompanyId().toString();
  231. } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) {
  232. relationId = ShiroUtils.getUserId().toString();
  233. }
  234. return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id);
  235. }
  236. /**
  237. * 获取当前账户所在单位已报名的
  238. *
  239. * @return
  240. */
  241. public List<ActivityRegistration> getCurrRegUsers(String activity_id, String phone) {
  242. User user = userService.findByMobile(phone);
  243. Integer userType = user.getUser_type();
  244. String relationId = "";
  245. if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) {
  246. relationId = "0";
  247. } else if (Objects.equals(Constant.UserType.BUILD, userType)) {
  248. relationId = user.getBuild_id().toString();
  249. } else if (Objects.equals(Constant.UserType.STREET, userType)) {
  250. relationId = user.getStreet_id().toString();
  251. } else if (Objects.equals(Constant.UserType.COMPANY, userType)) {
  252. relationId = user.getCompany_id().toString();
  253. } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) {
  254. relationId = user.getId().toString();
  255. }
  256. return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id);
  257. }
  258. /**
  259. * 获取当前账户所在单位已报名的
  260. *
  261. * @return
  262. */
  263. public List<ActivityRegistration> getWechatCurrRegUsers(String activity_id, Integer user_id) {
  264. User user = userService.findById(user_id);
  265. Integer userType = user.getUser_type();
  266. String relationId = "";
  267. if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) {
  268. relationId = "0";
  269. } else if (Objects.equals(Constant.UserType.BUILD, userType)) {
  270. relationId = user.getBuild_id().toString();
  271. } else if (Objects.equals(Constant.UserType.STREET, userType)) {
  272. relationId = user.getStreet_id().toString();
  273. } else if (Objects.equals(Constant.UserType.COMPANY, userType)) {
  274. relationId = user.getCompany_id().toString();
  275. } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) {
  276. relationId = user.getId().toString();
  277. }
  278. return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id);
  279. }
  280. public Boolean sendActivityAbortSMS(ActivityDetail activity, List<ActivityRegistration> registrations) {
  281. //您报名的活动:${activity_title} 已取消。具体信息请登录PC端查看。感谢您的支持。
  282. try {
  283. if (null != registrations && registrations.size() > 0) {
  284. for (ActivityRegistration registration : registrations) {
  285. String phone = registration.getPhone();
  286. if (StringUtils.isNotBlank(phone)) {
  287. String activity_title = activity.getActivity_title();
  288. String templateParam = "{\"activity_title\":\"" + activity_title + "\"}";
  289. AlibabaSMSUtil.sendSMS(phone, Constant.SMS_TemplateCode.ACTIVITY_ABORT, "企业提升发展服务平台", templateParam);
  290. }
  291. }
  292. }
  293. return true;
  294. } catch (Exception e) {
  295. e.printStackTrace();
  296. return false;
  297. }
  298. }
  299. public Boolean sendActivityUpdateSMS(ActivityDetail activity, List<ActivityRegistration> registrations) {
  300. //您报名的活动:${activity_title} 活动内容有变更。具体信息请登录PC端查看。感谢您的支持。
  301. try {
  302. if (null != registrations && registrations.size() > 0) {
  303. for (ActivityRegistration registration : registrations) {
  304. String phone = registration.getPhone();
  305. String activity_title = activity.getActivity_title();
  306. String templateParam = "{\"activity_title\":\"" + activity_title + "\"}";
  307. AlibabaSMSUtil.sendSMS(phone, Constant.SMS_TemplateCode.ACTIVITY_UPDATE, "企业提升发展服务平台", templateParam);
  308. }
  309. }
  310. return true;
  311. } catch (Exception e) {
  312. e.printStackTrace();
  313. return false;
  314. }
  315. }
  316. /**
  317. * 取消报名
  318. *
  319. * @param ids
  320. */
  321. public void adortRegister(List<String> ids) {
  322. activityRegistrationDao.adortRegister(ids);
  323. }
  324. /**
  325. * 获取用户报名活动的报名信息
  326. *
  327. * @param activityId
  328. * @param userId
  329. * @return
  330. */
  331. public List<ActivityRegistration> getActivityRegistration(Integer activityId, int userId) {
  332. return activityRegistrationDao.getActivityRegistration(activityId, userId);
  333. }
  334. /**
  335. * 活动统计
  336. *
  337. * @param userId
  338. * @return
  339. */
  340. public ActivityStatistic findActivityStatistic(Integer userId) {
  341. ActivityStatistic statistic = new ActivityStatistic();
  342. statistic.setPending(activityRegistrationDao.findPendingActivity(userId).size());
  343. statistic.setComment(activityRegistrationDao.findCommentActivity(userId).size());
  344. statistic.setExpired(activityRegistrationDao.findExpiredActivity(userId).size());
  345. statistic.setCompleted(activityRegistrationDao.findCompletedActivity(userId).size());
  346. statistic.setPush(activityRegistrationDao.findPushActivity(userId).size());
  347. statistic.setCollection(activityRegistrationDao.findCollectionActivity(userId).size());
  348. return statistic;
  349. }
  350. /**
  351. * 获取各类活动
  352. *
  353. * @param type
  354. * @return
  355. */
  356. public List<ActivityDetail> findTypesActivitys(String type, Integer userId) {
  357. List<ActivityDetail> statistics = new ArrayList<>();
  358. switch (type) {
  359. case "pending"://待参加
  360. statistics = activityRegistrationDao.findPendingActivity(userId);
  361. break;
  362. case "comment":
  363. statistics = activityRegistrationDao.findCommentActivity(userId);
  364. break;
  365. case "expired":
  366. statistics = activityRegistrationDao.findExpiredActivity(userId);
  367. break;
  368. case "completed":
  369. statistics = activityRegistrationDao.findCompletedActivity(userId);
  370. break;
  371. case "push":
  372. statistics = activityRegistrationDao.findPushActivity(userId);
  373. break;
  374. case "collection":
  375. statistics = activityRegistrationDao.findCollectionActivity(userId);
  376. break;
  377. }
  378. for (ActivityDetail activity : statistics) {
  379. //活动图片
  380. List<Attachment> attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, activity.getId(), null);
  381. if (null != attachments && attachments.size() > 0) {
  382. FileDown fileDown = new FileDown(attachments.get(0).getId(), attachments.get(0).getFile_name(), attachments.get(0).getFile_url(), attachments.get(0).getDownload_uri());
  383. activity.setFileDown(fileDown);
  384. }
  385. //是否收藏
  386. if (homeRefactorService.isFavourited(activity.getId(), userId)) {
  387. activity.setIs_favourited("1");
  388. } else {
  389. activity.setIs_favourited("0");
  390. }
  391. //活动回顾
  392. ActivityReview activityReview = activityReviewService.findByActivityId(activity.getId());
  393. if (activityReview != null) {
  394. activity.setActivityReviewId(activityReview.getId());
  395. }
  396. }
  397. return statistics;
  398. }
  399. }