package platform.modules.sys.service; import com.aliyuncs.exceptions.ClientException; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import platform.common.Constant; import platform.common.base.service.BaseService; import platform.common.util.AlibabaSMSUtil; import platform.common.util.ShiroUtils; import platform.modules.build.entity.Tenancy; import platform.modules.carrier.dto.ActivityStatistic; import platform.modules.government.entity.Attachment; import platform.modules.government.entity.FileDown; import platform.modules.government.entity.User; import platform.modules.government.service.AttachmentService; import platform.modules.government.service.UserService; import platform.modules.home.service.HomeRefactorService; import platform.modules.sys.dao.ActivityRegistrationDao; import platform.modules.sys.entity.ActivityDetail; import platform.modules.sys.entity.ActivityFeedback; import platform.modules.sys.entity.ActivityRegistration; import platform.modules.sys.entity.ActivityReview; import platform.modules.sys.report.ActivityRegistrationExports; import tk.mybatis.mapper.entity.Example; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; @Service @Transactional public class ActivityRegistrationService extends BaseService { @Autowired private ActivityRegistrationDao activityRegistrationDao; @Autowired private ActivityService activityService; @Autowired private UserService userService; @Autowired private AttachmentService attachmentService; @Autowired private HomeRefactorService homeRefactorService; @Autowired private ActivityReviewService activityReviewService; /** * 获取指定活动的已审核报名人数 * * @param activityId * @return */ public Integer getActivityRegistrationNumber(Integer activityId) { return activityRegistrationDao.getRegistrationNumber(activityId); } /** * 保存报名信息 * * @param activityRegistration * @return */ public Integer saveActivityRegistration(ActivityRegistration activityRegistration) { ActivityDetail activityDetail = activityService.findById(activityRegistration.getActivity_id()); String quota = activityDetail.getActivity_quota(); String isReview = activityDetail.getIs_review(); //已报名人数 int registrationNumber = getActivityRegistrationNumber(activityRegistration.getActivity_id()); User currUser = new User(); if (activityRegistration.getUser_id() != null && !activityRegistration.getUser_id().equals("")) { currUser = userService.findById(activityRegistration.getUser_id()); } else { currUser = ShiroUtils.getUserEntity(); } activityRegistration.setUser_id(currUser.getId()); activityRegistration.setUser_type(currUser.getUser_type().toString()); if (Objects.equals(Constant.UserType.GOVERNMENT, currUser.getUser_type())) { activityRegistration.setRelation_id("0"); } else if (Objects.equals(Constant.UserType.BUILD, currUser.getUser_type())) { activityRegistration.setRelation_id(currUser.getBuild_id() + ""); } else if (Objects.equals(Constant.UserType.STREET, currUser.getUser_type())) { activityRegistration.setRelation_id(currUser.getStreet_id() + ""); } else if (Objects.equals(Constant.UserType.COMPANY, currUser.getUser_type())) { activityRegistration.setRelation_id(currUser.getCompany_id() + ""); } else if (Objects.equals(Constant.UserType.PERSONAL, currUser.getUser_type())) { activityRegistration.setRelation_id(currUser.getId() + ""); } else if (Objects.equals(Constant.UserType.WECHAT, currUser.getUser_type())) { activityRegistration.setRelation_id(currUser.getId() + ""); activityRegistration.setUser_type(currUser.getUser_type() + ""); } activityRegistration.setRegistration_time(new Date()); //签到状态 0已签到 1未签到 activityRegistration.setSign_state(null); if (Objects.equals(quota, null) || Objects.equals(quota, "")) { //如果不限人数 if (Objects.equals(isReview, "0")) { //需要审核 //由政府用户进行报名确认,如在活动结束时间还未被审核的报名者,则活动状态为取消 //审核状态(0待审核,1通过,2退回) activityRegistration.setReview_state("0"); } else { //不需要审核 //所有报名的用户会在点击报名的同一时刻被确认参与活动 //审核状态(0待审核,1通过,2退回) activityRegistration.setReview_state("1"); } } else { //限制人数 /*if (registrationNumber < Integer.parseInt(quota)) {*/ if (Objects.equals(isReview, "0")) { //需要审核 //由政府用户进行报名确认,如在活动结束时间还未被审核的报名者,则活动状态为取消 //审核状态(0待审核,1通过,2退回) activityRegistration.setReview_state("0"); } else { //不需要审核 //则所有报名的,且在名额数目内的用户会在点击报名的同一时刻被确认参与活动。名额满后则报名通道关闭,除非已被确认的用户取消参加,报名通道重新打开 //审核状态(0待审核,1通过,2退回) activityRegistration.setReview_state("1"); } /* } else { //报名人数已满 return -1; }*/ } return this.saveSelective(activityRegistration); } /** * 政府活动管理-报名信息 * * @param pageNum * @param pageSize * @param id * @return * @throws Exception */ @Transactional(readOnly = true) public PageInfo findRegistrationPage(Integer pageNum, Integer pageSize, Integer id) throws Exception { PageHelper.startPage(pageNum, pageSize); List list = activityRegistrationDao.findRegistrationPage(id, null); return new PageInfo(list); } @Transactional(readOnly = true) public List findRegistrationList(Integer id) throws Exception { List list = activityRegistrationDao.findRegistrationPage(id, null); return list; } @Transactional(readOnly = true) public List findRegistrationListExports(Integer id) throws Exception { List list = activityRegistrationDao.findRegistrationExport(id, null); return list; } @Transactional(readOnly = true) public Integer getRegistrationNumber(Integer pageNum, Integer pageSize, Integer id) throws Exception { List list = activityRegistrationDao.findRegistrationPage(id, null); return list.size(); } /** * 政府活动管理-签到信息 * * @param pageNum * @param pageSize * @param id * @return * @throws Exception */ @Transactional(readOnly = true) public PageInfo findSginPage(Integer pageNum, Integer pageSize, Integer id) throws Exception { PageHelper.startPage(pageNum, pageSize); List list = activityRegistrationDao.findSginPage(id, null); return new PageInfo(list); } @Transactional(readOnly = true) public List findSginList(Integer id) throws Exception { List list = activityRegistrationDao.findSginPage(id, null); return list; } @Transactional(readOnly = true) public Integer getSginNumber(Integer pageNum, Integer pageSize, Integer id) throws Exception { List list = activityRegistrationDao.findSginPage(id, null); return list.size(); } /** * 园区街道企业-我的活动 * * @param pageNum * @param pageSize * @param activityRegistration * @return * @throws Exception */ @Transactional(readOnly = true) public PageInfo findMyActivityPage(Integer pageNum, Integer pageSize, ActivityRegistration activityRegistration) throws Exception { PageHelper.startPage(pageNum, pageSize); List list = activityRegistrationDao.findMyActivityPage(activityRegistration); return new PageInfo(list); } /** * 修改状态 * * @param activityRegistration * @return */ public Boolean updateState(ActivityRegistration activityRegistration) { if (Objects.equals(activityRegistrationDao.updateState(activityRegistration), 1)) return true; return false; } /** * 批量修改状态 * * @param idList */ public void updateStateBatch(List idList, ActivityRegistration activityRegistration) { activityRegistrationDao.updateStateBatch(idList, activityRegistration); } /** * 获取当前账户所在单位已报名的 * * @return */ public List getCurrRegUsers(String activity_id) { Integer userType = ShiroUtils.getUserType(); String relationId = ""; if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) { relationId = "0"; } else if (Objects.equals(Constant.UserType.BUILD, userType)) { relationId = ShiroUtils.getBuildId().toString(); } else if (Objects.equals(Constant.UserType.STREET, userType)) { relationId = ShiroUtils.getStreetId().toString(); } else if (Objects.equals(Constant.UserType.COMPANY, userType)) { relationId = ShiroUtils.getCompanyId().toString(); } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) { relationId = ShiroUtils.getUserId().toString(); } return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id); } /** * 获取当前账户所在单位已报名的 * * @return */ public List getCurrRegUsers(String activity_id, String phone) { User user = userService.findByMobile(phone); Integer userType = user.getUser_type(); String relationId = ""; if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) { relationId = "0"; } else if (Objects.equals(Constant.UserType.BUILD, userType)) { relationId = user.getBuild_id().toString(); } else if (Objects.equals(Constant.UserType.STREET, userType)) { relationId = user.getStreet_id().toString(); } else if (Objects.equals(Constant.UserType.COMPANY, userType)) { relationId = user.getCompany_id().toString(); } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) { relationId = user.getId().toString(); }else if (Objects.equals(Constant.UserType.WECHAT, userType)) { relationId = user.getId().toString(); } return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id); } /** * 获取当前账户所在单位已报名的 * * @return */ public List getWechatCurrRegUsers(String activity_id, Integer user_id) { User user = userService.findById(user_id); Integer userType = user.getUser_type(); String relationId = ""; if (Objects.equals(Constant.UserType.GOVERNMENT, userType)) { relationId = "0"; } else if (Objects.equals(Constant.UserType.BUILD, userType)) { relationId = user.getBuild_id().toString(); } else if (Objects.equals(Constant.UserType.STREET, userType)) { relationId = user.getStreet_id().toString(); } else if (Objects.equals(Constant.UserType.COMPANY, userType)) { relationId = user.getCompany_id().toString(); } else if (Objects.equals(Constant.UserType.PERSONAL, userType)) { relationId = user.getId().toString(); } else if (Objects.equals(Constant.UserType.WECHAT, userType)) { relationId = user.getId().toString(); } return activityRegistrationDao.findByRelationIdAndType(userType.toString(), relationId, activity_id); } public Boolean sendActivityAbortSMS(ActivityDetail activity, List registrations) { //您报名的活动:${activity_title} 已取消。具体信息请登录PC端查看。感谢您的支持。 try { if (null != registrations && registrations.size() > 0) { for (ActivityRegistration registration : registrations) { String phone = registration.getPhone(); if (StringUtils.isNotBlank(phone)) { String activity_title = activity.getActivity_title(); String templateParam = "{\"activity_title\":\"" + activity_title + "\"}"; AlibabaSMSUtil.sendSMS(phone, Constant.SMS_TemplateCode.ACTIVITY_ABORT, "企业提升发展服务平台", templateParam); } } } return true; } catch (Exception e) { e.printStackTrace(); return false; } } public Boolean sendActivityUpdateSMS(ActivityDetail activity, List registrations) { //您报名的活动:${activity_title} 活动内容有变更。具体信息请登录PC端查看。感谢您的支持。 try { if (null != registrations && registrations.size() > 0) { for (ActivityRegistration registration : registrations) { String phone = registration.getPhone(); String activity_title = activity.getActivity_title(); String templateParam = "{\"activity_title\":\"" + activity_title + "\"}"; AlibabaSMSUtil.sendSMS(phone, Constant.SMS_TemplateCode.ACTIVITY_UPDATE, "企业提升发展服务平台", templateParam); } } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 取消报名 * * @param ids */ public void adortRegister(List ids) { activityRegistrationDao.adortRegister(ids); } /** * 获取用户报名活动的报名信息 * * @param activityId * @param userId * @return */ public List getActivityRegistration(Integer activityId, int userId) { return activityRegistrationDao.getActivityRegistration(activityId, userId); } /** * 活动统计 * * @param userId * @return */ public ActivityStatistic findActivityStatistic(Integer userId) { ActivityStatistic statistic = new ActivityStatistic(); statistic.setPending(activityRegistrationDao.findPendingActivity(userId).size()); statistic.setComment(activityRegistrationDao.findCommentActivity(userId).size()); statistic.setExpired(activityRegistrationDao.findExpiredActivity(userId).size()); statistic.setCompleted(activityRegistrationDao.findCompletedActivity(userId).size()); statistic.setPush(activityRegistrationDao.findPushActivity(userId).size()); statistic.setCollection(activityRegistrationDao.findCollectionActivity(userId).size()); return statistic; } /** * 获取各类活动 * * @param type * @return */ public List findTypesActivitys(String type, Integer userId) { List statistics = new ArrayList<>(); switch (type) { case "pending"://待参加 statistics = activityRegistrationDao.findPendingActivity(userId); break; case "comment": statistics = activityRegistrationDao.findCommentActivity(userId); break; case "expired": statistics = activityRegistrationDao.findExpiredActivity(userId); break; case "completed": statistics = activityRegistrationDao.findCompletedActivity(userId); break; case "push": statistics = activityRegistrationDao.findPushActivity(userId); break; case "collection": statistics = activityRegistrationDao.findCollectionActivity(userId); break; } for (ActivityDetail activity : statistics) { //活动图片 List attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, activity.getId(), null); if (null != attachments && attachments.size() > 0) { FileDown fileDown = new FileDown(attachments.get(0).getId(), attachments.get(0).getFile_name(), attachments.get(0).getFile_url(), attachments.get(0).getDownload_uri()); activity.setFileDown(fileDown); } //是否收藏 if (homeRefactorService.isFavourited(activity.getId(), userId)) { activity.setIs_favourited("1"); } else { activity.setIs_favourited("0"); } //活动回顾 ActivityReview activityReview = activityReviewService.findByActivityId(activity.getId()); if (activityReview != null) { activity.setActivityReviewId(activityReview.getId()); } } return statistics; } }