package platform.modules.sys.service; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.exceptions.ClientException; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import platform.common.Constant; import platform.common.base.model.DictionaryItem; import platform.common.base.service.BaseService; import platform.common.base.service.DictionaryItemService; import platform.common.util.AlibabaSMSUtil; import platform.common.util.DateUtil; import platform.common.util.ShiroUtils; import platform.common.util.WebUtil; import platform.modules.build.entity.BuildInfo; import platform.modules.government.dao.AttachmentDao; import platform.modules.government.dto.*; import platform.modules.government.entity.*; import platform.modules.government.service.AttachmentService; import platform.modules.government.service.UserService; import platform.modules.home.request.FindRequest; import platform.modules.home.response.FindResponse; import platform.modules.home.response.ListResponse; import platform.modules.home.service.HomeRefactorService; import platform.modules.sys.dao.ActivityDetailDao; import platform.modules.sys.dao.ActivityPushDao; import platform.modules.sys.entity.ActivityDetail; import platform.modules.sys.entity.ActivityFeedback; import platform.modules.sys.entity.ActivityPush; import platform.modules.sys.entity.ActivityRegistration; import tk.mybatis.mapper.entity.Example; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @Service @Transactional public class ActivityService extends BaseService { @Autowired private ActivityDetailDao activityDetailDao; @Autowired private ActivityPushService activityPushService; @Autowired private AttachmentDao attachmentDao; @Autowired private AttachmentService attachmentService; @Autowired private DictionaryItemService dictionaryItemService; @Autowired private ActivityService activityService; @Autowired private UserService userService; @Autowired private ActivityRegistrationService activityRegistrationService; @Autowired private ActivityFeedbackService activityFeedbackService; @Autowired private HomeRefactorService homeRefactorService; /** * 新增 * * @param activityDetail * @return * @throws Exception */ public Integer saveActivity(ActivityDetail activityDetail) throws Exception { this.insertAndGetId(activityDetail); Integer activityId = activityDetail.getId(); //名额不限 if (activityDetail.getIs_quota().equals("0")) { activityDetailDao.updateQuotaById(activityId + "", null); } String streetIds = activityDetail.getPush_street_ids(); String buildIds = activityDetail.getPush_build_ids(); String companyIds = activityDetail.getPush_company_ids(); String[] streetIdsArr = streetIds.split(","); String[] buildIdsArr = buildIds.split(","); String[] companyIdsArr = companyIds.split(","); List ids = new ArrayList(); if (streetIdsArr.length > 0) { for (String id : streetIdsArr) { if (!Objects.equals(id, "")) { ActivityPush activityPush = new ActivityPush(); activityPush.setUser_type("4"); activityPush.setUser_id(Integer.parseInt(id)); activityPush.setActivity_id(activityId); ids.add(activityPush); } } } if (buildIdsArr.length > 0) { for (String id : buildIdsArr) { if (!Objects.equals(id, "")) { ActivityPush activityPush = new ActivityPush(); activityPush.setUser_type("1"); activityPush.setUser_id(Integer.parseInt(id)); activityPush.setActivity_id(activityId); ids.add(activityPush); } } } if (companyIdsArr.length > 0) { for (String id : companyIdsArr) { if (!Objects.equals(id, "")) { ActivityPush activityPush = new ActivityPush(); activityPush.setUser_type("3"); activityPush.setUser_id(Integer.parseInt(id)); activityPush.setActivity_id(activityId); ids.add(activityPush); //发送短信 User companyAdmin = userService.findCompanyAdmin(Integer.parseInt(id)); Map params = new HashMap<>(); params.put("project_no", activityDetail.getActivity_title()); params.put("start_time", activityDetail.getActivity_starttime()); params.put("end_time", activityDetail.getActivity_endtime()); String tempalteCode = Constant.SMS_TemplateCode.REMIND_COMPANY_APPLY_PROJECT; try { AlibabaSMSUtil.sendSMS( companyAdmin.getPhone(), tempalteCode, Constant.SINGNAMW, JSONObject.toJSONString(params)); } catch (ClientException | InterruptedException e) { e.printStackTrace(); } } } } activityDetail.setPushList(ids); if (!CollectionUtils.isEmpty(activityDetail.getPushList())) { List list = assemblingPushlist(activityDetail.getPushList(), activityId); activityPushService.insertBatch(list); } attachmentDao.deleteByBusiness(Constant.Attachment.ACTIVITY, activityDetail.getId()); attachmentDao.updateAttachment(Constant.Attachment.ACTIVITY, activityDetail.getId(), activityDetail.getFileDown().getFile_id()); return activityId; } /** * 更新 * * @param activityDetail * @return * @throws Exception */ public boolean updateActivity(ActivityDetail activityDetail) throws Exception { Integer activityId = activityDetail.getId(); activityPushService.deleteByActivityid(activityDetail.getId()); String streetIds = activityDetail.getPush_street_ids(); String buildIds = activityDetail.getPush_build_ids(); String companyIds = activityDetail.getPush_company_ids(); String[] streetIdsArr = streetIds.split(","); String[] buildIdsArr = buildIds.split(","); String[] companyIdsArr = companyIds.split(","); List ids = new ArrayList(); if (streetIdsArr.length > 0) { for (String id : streetIdsArr) { if (!Objects.equals(id, "")) { ActivityPush activityPush = new ActivityPush(); activityPush.setUser_type("4"); activityPush.setUser_id(Integer.parseInt(id)); activityPush.setActivity_id(activityId); ids.add(activityPush); } } } if (buildIdsArr.length > 0) { for (String id : buildIdsArr) { if (!Objects.equals(id, "")) { ActivityPush activityPush = new ActivityPush(); activityPush.setUser_type("1"); activityPush.setUser_id(Integer.parseInt(id)); activityPush.setActivity_id(activityId); ids.add(activityPush); } } } if (companyIdsArr.length > 0) { for (String id : companyIdsArr) { if (!Objects.equals(id, "")) { ActivityPush activityPush = new ActivityPush(); activityPush.setUser_type("3"); activityPush.setUser_id(Integer.parseInt(id)); activityPush.setActivity_id(activityId); ids.add(activityPush); } } } activityDetail.setPushList(ids); if (!CollectionUtils.isEmpty(activityDetail.getPushList())) { List list = assemblingPushlist(activityDetail.getPushList(), activityDetail.getId()); activityPushService.insertBatch(list); } if (null != activityDetail.getFileDown().getFile_id()) { attachmentDao.deleteByBusiness(Constant.Attachment.ACTIVITY, activityDetail.getId()); attachmentDao.updateAttachment(Constant.Attachment.ACTIVITY, activityDetail.getId(), activityDetail.getFileDown().getFile_id()); } if (Objects.equals(this.updateSelective(activityDetail), 1)) { //名额不限 if (activityDetail.getIs_quota().equals("0")) { /*activityDetail.setActivity_quota("-1");*/ activityDetailDao.updateQuotaById(activityId + "", null); } return true; } return false; } /** * 装配推送实体 * * @param list * @return */ private List assemblingPushlist(List list, Integer id) { if (CollectionUtils.isEmpty(list)) return list; User currUser = ShiroUtils.getUserEntity(); Date now = new Date(); for (ActivityPush activityPush : list) { activityPush.setActivity_id(id); //activityPush.setUser_id(currUser.getId()); //activityPush.setUser_type(currUser.getUser_type().toString()); activityPush.setPush_time(now); activityPush.setCreate_by(currUser.getId()); activityPush.setCreate_name(currUser.getUser_name()); activityPush.setCreate_time(DateUtil.getTimeString(now)); activityPush.setUpdate_by(currUser.getId()); activityPush.setUpdate_name(currUser.getUser_name()); activityPush.setUpdate_time(DateUtil.getTimeString(now)); } return list; } /*@Transactional(readOnly = true) public PageInfo findPage(Integer pageNum, Integer pageSize, String param) throws Exception { Example example = new Example(ActivityDetail.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("del_flag", false); if (StringUtils.isNotBlank(param)) { *//*criteria.andLike("title", "%" + param + "%"); criteria.orLike("create_name", "%" + param + "%");*//* criteria.andCondition("CONCAT(activity_title) like", "%" + WebUtil.covertData(param) + "%"); } //倒序 example.orderBy("create_time").desc(); PageHelper.startPage(pageNum, pageSize); List activityDetail = this.selectByExample(example); return new PageInfo(activityDetail); }*/ /** * 后台列表页 * * @param pageNum * @param pageSize * @param param * @return * @throws Exception */ @Transactional(readOnly = true) public PageInfo findAvtivityList(Integer pageNum, Integer pageSize, ActivitySearchCondition param) throws Exception { PageHelper.startPage(pageNum, pageSize); List list = activityDetailDao.findAvtivityList(param); for (ActivityDetail activityDetail : list) { List activityTypeList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.ACTIVITY_TYPE); List attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, activityDetail.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()); activityDetail.setFileDown(fileDown); } if (null != activityTypeList && activityTypeList.size() > 0) { for (DictionaryItem dictionaryItem : activityTypeList) { if (Objects.equals(activityDetail.getActivity_type(), dictionaryItem.getValue())) { activityDetail.setActivity_type(dictionaryItem.getName()); } } } } return new PageInfo(list); } /** * 前台列表页 * * @param pageNum * @param pageSize * @param activityDetail * @return * @throws Exception */ @Transactional(readOnly = true) public PageInfo findAvtivityPage(Integer pageNum, Integer pageSize, ActivityDetail activityDetail) throws Exception { PageHelper.startPage(pageNum, pageSize); List list = activityDetailDao.findAvtivityPage(activityDetail); return new PageInfo(list); } public ListResponse findContents(FindRequest request) { ListResponse response = new ListResponse(); List contents = new ArrayList<>(); int lastPageNumber = 1; ActivityDetail activityDetail = new ActivityDetail(); activityDetail.setActivity_type(request.getType()); activityDetail.setSort_criteria(request.getCriteria()); activityDetail.setActivity_title(request.getKeyword()); activityDetail.setIs_expired(request.getIsinvalid()); if (Objects.equals(activityDetail.getSort_criteria(), null) || Objects.equals(activityDetail.getSort_criteria(), "")) { activityDetail.setSort_criteria("0"); } int count = activityDetailDao.findAvtivityPage(activityDetail).size(); if (count > 0) { // 处理分页参数 if (request.getPage_size() > 0) { //如果输入的页码大于实际的分页数,将页码设置为最后一页的页码 lastPageNumber = (int) ((count - 1) / request.getPage_size() + 1); if (request.getPage_number() > lastPageNumber) { request.setPage_no(lastPageNumber); } } contents = activityDetailDao.findAvtivityPage(activityDetail); for (ActivityDetail ad : contents) { List attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, ad.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()); ad.setFileDown(fileDown); } } } response.setContents(contents); response.setCounts(count); response.setPage_no(request.getPage_no()); return response; } /** * 单个查询 * * @param id * @return * @throws Exception */ @Transactional(readOnly = true) public ActivityDetail findOne(String id) { return activityDetailDao.findOne(id); } public List findStreetBuildCompanyByName(String name) throws Exception { return activityDetailDao.findStreetBuildCompanyByName(name); } /** * 更新部分 * * @param activityDetail * @return * @throws Exception */ public Integer updateActivitySelective(ActivityDetail activityDetail) throws Exception { return this.updateSelective(activityDetail); } /** * 查找我的收藏 * * @param id * @return * @throws Exception */ public List findFavouriteList(String id, String title) throws Exception { List list = activityDetailDao.findFavouriteList(id, title); for (ActivityDetail activityDetail : list) { List attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, Integer.parseInt(activityDetail.getActivity_id()), 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()); activityDetail.setFileDown(fileDown); } } return list; } /** * 查找推送我的活动 * * @param activityDetail * @return */ public List findPushList(ActivityDetail activityDetail) { List list = activityDetailDao.findPushList(activityDetail); for (ActivityDetail activity : list) { 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); } } return list; } public List getRecommend() { List typeList = activityDetailDao.getTypes(ShiroUtils.getUserId()); Set set = new HashSet<>(); if (!CollectionUtils.isEmpty(typeList)) { for (String type : typeList) { set.add(type); } } List list = activityDetailDao.getActivityByType(set); for (ActivityDetail activity : list) { 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); } } return list; } public void increment(String id) throws Exception { ActivityDetail activityDetail = activityService.findOne(id); int count = activityDetail.getReading_number(); ++count; activityDetailDao.updateReadingnumberById(id, count); } public List getAllEventsDate(String type) { List dates = activityDetailDao.getAllEventsDate(type); Set set = new HashSet<>(); if (!CollectionUtils.isEmpty(dates)) { for (String date : dates) { set.add(date.split(" ")[0]); } } List result = new ArrayList(set); return result; } public List getEventList(String time) { String start1 = time + " 00:00"; String start2 = time + " 23:59"; List dates = activityDetailDao.getEventList(start1, start2, null, ShiroUtils.getUserId()); return dates; } public Integer getAllActivityCount() { int count = activityDetailDao.getAllActivityCount(); return count; } public Integer getJoinedActivityCount() { SearchCondition condition = new SearchCondition(); if(ShiroUtils.getUserType().equals(Constant.UserType.STREET)) { condition.setUser_type(Constant.UserType.STREET); condition.setStreet_id(ShiroUtils.getStreetId()); } int count = activityDetailDao.getJoinedActivityCount(condition); return count; } public PageInfo findContentList(FindRequest request) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); ActivityDetail activityDetail = new ActivityDetail(); activityDetail.setActivity_type(request.getType()); activityDetail.setSort_criteria(request.getCriteria()); activityDetail.setActivity_title(request.getKeyword()); activityDetail.setIs_expired(request.getIsinvalid()); if (Objects.equals(activityDetail.getSort_criteria(), null) || Objects.equals(activityDetail.getSort_criteria(), "")) { activityDetail.setSort_criteria("0"); } PageHelper.startPage(request.getPage_no(), request.getPage_size()); List contents = activityDetailDao.findAvtivityPage(activityDetail); if (contents.size() > 0) { for (ActivityDetail ad : contents) { List attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, ad.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(), request.getFile_url()); ad.setFileDown(fileDown); } if (ad.getActivity_deadline() != null){ LocalDateTime deadline = LocalDateTime.parse(ad.getActivity_deadline(), formatter); if (!deadline.isBefore(LocalDateTime.now())){ ad.setCan_sign_up(true); } } else { ad.setCan_sign_up(true); } if (homeRefactorService.isFavourited(ad.getId(), request.getUser_id())){ ad.setIs_favourited("1"); } else { ad.setIs_favourited("0"); } } } return new PageInfo<>(contents); } /** * 获取已结束的活动列表 * @param condition * @return */ public PageInfo findOverList(QueryCondition condition) { condition.setPageSize(5); PageHelper.startPage(condition.getPageNum(), condition.getPageSize()); List details = activityDetailDao.findOverList(condition); for (ActivityDetail activityDetail : details) { List activityTypeList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.ACTIVITY_TYPE); if (null != activityTypeList && activityTypeList.size() > 0) { for (DictionaryItem dictionaryItem : activityTypeList) { if (Objects.equals(activityDetail.getActivity_type(), dictionaryItem.getValue())) { activityDetail.setActivity_type(dictionaryItem.getName()); } } } } return new PageInfo<>(details); } /** * 我报名的活动 * * @param pageNum * @param pagesize * @param condition * @return */ public PageInfo findMyActivityPage(Integer pageNum, Integer pagesize, ActivityRegistration condition) { PageHelper.startPage(pageNum, pagesize); List details = activityDetailDao.findMyActivityPage(condition); return new PageInfo<>(details); } /** * 获取用户报名活动详情 * * @param id * @return */ public ActivityOrderDetail findUserActivityOrderDetail(Integer id, Integer pageNum) { // ActivityDetail detail = this.findById(id); ActivityDetail detail = activityDetailDao.findByActivityId(id); PageHelper.startPage(pageNum,5); List registrations = activityRegistrationService.getActivityRegistration(id, ShiroUtils.getUserId()); ActivityOrderDetail orderDetail = new ActivityOrderDetail(); orderDetail.setActivityDetail(detail); orderDetail.setActivityRegistration(new PageInfo<>(registrations)); //反馈信息 ActivityFeedback feedback = activityFeedbackService.findUserFeedback(id, ShiroUtils.getUserId()); orderDetail.setActivityFeedback(feedback); return orderDetail; } /** * 活动详情 * * @param id * @return */ private ActivityDetail findByActivityId(Integer id) { return activityDetailDao.findByActivityId(id); } /** * 强烈推荐 * * @return * @param pageNum * @param pageSize */ public PageInfo findHighlyRecommended(Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); List highlyRecommendedList = activityDetailDao.findHighlyRecommended(); for (ActivityDetail activityDetail : highlyRecommendedList) { //活动图片 List attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, activityDetail.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()); activityDetail.setFileDown(fileDown); } } return new PageInfo<>(highlyRecommendedList); } }