|
|
@@ -0,0 +1,277 @@
|
|
|
+package com.uas.console.donate.service.impl;
|
|
|
+
|
|
|
+import com.uas.console.donate.dao.ActivityDao;
|
|
|
+import com.uas.console.donate.dao.AwardDao;
|
|
|
+import com.uas.console.donate.dao.ProjectDao;
|
|
|
+import com.uas.console.donate.dao.ProjectQualificationDao;
|
|
|
+import com.uas.console.donate.model.*;
|
|
|
+import com.uas.console.donate.service.ActivityService;
|
|
|
+import com.uas.console.donate.util.CollectionUtils;
|
|
|
+import com.uas.console.donate.util.ObjectUtils;
|
|
|
+import com.uas.platform.core.model.PageInfo;
|
|
|
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.data.domain.Pageable;
|
|
|
+import org.springframework.data.jpa.domain.Specification;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.ui.ModelMap;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
|
+import javax.persistence.criteria.CriteriaQuery;
|
|
|
+import javax.persistence.criteria.Predicate;
|
|
|
+import javax.persistence.criteria.Root;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+
|
|
|
+@Service
|
|
|
+public class ActivityServiceImpl implements ActivityService{
|
|
|
+
|
|
|
+ private static final SimpleDateFormat codesdf=new SimpleDateFormat("yyyymmddhhmmsssss");
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ActivityDao activityDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AwardDao awardDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProjectDao projectDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProjectQualificationDao projectQualificationDao;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 如果活动有草稿状态就取出草稿
|
|
|
+ */
|
|
|
+ public Activity show(){
|
|
|
+ Long userUU = 10000L;
|
|
|
+ if(activityDao.findDraft(userUU)!=null){
|
|
|
+ return activityDao.findDraft(userUU);
|
|
|
+ }else{
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 保存活动
|
|
|
+ * @param activity
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Activity save(Activity activity) {
|
|
|
+ Date date = new Date();
|
|
|
+ //如果是保存过的活动,则不需要重新生成编号
|
|
|
+ if(activity.getId()!=null){
|
|
|
+ // activity.setId(activity.getId());
|
|
|
+ //删除和该活动关联过的所有项目
|
|
|
+ projectQualificationDao.deletByActivityId(activity.getId());
|
|
|
+ }
|
|
|
+ activity.setSubmitTime(date);
|
|
|
+ // activity.setCode();
|
|
|
+ //设置成草稿状态
|
|
|
+ if(activity.getPublish()!=2){
|
|
|
+ activity.setPublish(1);
|
|
|
+ }
|
|
|
+ //设置活动展示优先级
|
|
|
+ activity.setPriority(1);
|
|
|
+
|
|
|
+ //存放不同奖品的list集合
|
|
|
+ List<Award> list=new ArrayList<Award>();
|
|
|
+
|
|
|
+ //设置奖品信息
|
|
|
+ List<Award> awardList = activity.getAwards();
|
|
|
+
|
|
|
+ for (Award award : awardList) {
|
|
|
+ //如果对象里的属性值不是全部为空
|
|
|
+ if(ObjectUtils.isNull(award)){
|
|
|
+ System.out.print(award+" ");
|
|
|
+ award.setActivityId(activity.getId());
|
|
|
+ list.add(award);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ awardDao.save(list);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重新设置该活动关联的项目
|
|
|
+ */
|
|
|
+ //存放多个有资格参与活动的项目的集合
|
|
|
+ List<ProjectQualification> list1=new ArrayList<ProjectQualification>();
|
|
|
+
|
|
|
+ //有资格参与该活动的项目,前台传入的是项目id号
|
|
|
+ List<ProjectQualification> projectQualificationList=activity.getProjectQualificationList();
|
|
|
+ for(ProjectQualification projectQualification:projectQualificationList){
|
|
|
+ //关联项目数
|
|
|
+ int count=0;
|
|
|
+ //由于前台可能传来一个空对象,所以要对对象属性做判空判断
|
|
|
+ if(ObjectUtils.isNull(projectQualification)){
|
|
|
+ //给项目资格表设置活动id
|
|
|
+ projectQualification.setActivityId(activity.getId());
|
|
|
+
|
|
|
+ if(projectQualification.getProId()!=null){
|
|
|
+ //通过项目id,获取项目名称
|
|
|
+ Project project=projectDao.findOne(projectQualification.getProId());
|
|
|
+ //给项目资格表里面设置项目的名称
|
|
|
+ projectQualification.setName(project.getName());
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ list1.add(projectQualification);
|
|
|
+ }
|
|
|
+ //给活动设置相关项目数
|
|
|
+ activity.setSumconnect(count);
|
|
|
+ }
|
|
|
+ projectQualificationDao.save(list1);
|
|
|
+
|
|
|
+ return activityDao.saveAndFlush(activity);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Activity submit(Activity activity){
|
|
|
+
|
|
|
+ Date date=new Date();
|
|
|
+ //设置活动发布时间
|
|
|
+ activity.setSubmitTime(date);
|
|
|
+ //设置活动编号
|
|
|
+ activity.setCode(codesdf.format(date));
|
|
|
+
|
|
|
+ //设置成发布状态
|
|
|
+ activity.setPublish(2);
|
|
|
+
|
|
|
+ return activityDao.save(activity);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Activity up(Long id){
|
|
|
+ Integer max=activityDao.findMAxPrioruty();
|
|
|
+ max++;
|
|
|
+ Activity activity=activityDao.findOne(id);
|
|
|
+ activity.setPriority(max);
|
|
|
+ return activityDao.save(activity);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Activity findOne(Long id){
|
|
|
+ return activityDao.findOne(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ //搜索出所有已结束的活动
|
|
|
+ public Page<Activity> findEndActivities(Pageable pageable){
|
|
|
+ return activityDao.findEndActivities(pageable);
|
|
|
+ }
|
|
|
+
|
|
|
+ //搜索出所有还未开始的活动
|
|
|
+ public Page<Activity> findNotStart(Pageable pageable){
|
|
|
+ return activityDao.findNotStart(pageable);
|
|
|
+ }
|
|
|
+
|
|
|
+ //搜索出所有正在进行的活动
|
|
|
+ public Page<Activity> findInprocess(Pageable pageable){
|
|
|
+ return activityDao.findInprocess(pageable);
|
|
|
+ }
|
|
|
+
|
|
|
+ //查找某一活动具体信息
|
|
|
+ public Activity fingById(Long id){
|
|
|
+ return activityDao.findOne(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<Activity> getAllActivities(final PageInfo pageInfo, final SearchFilter filter) {
|
|
|
+ return activityDao.findAll(new Specification<Activity>() {
|
|
|
+ @Override
|
|
|
+ public Predicate toPredicate(Root<Activity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
|
|
|
+ if (null != filter) {
|
|
|
+ String keyword = filter.getKeyword();
|
|
|
+ if (StringUtils.hasText(keyword)) {
|
|
|
+ pageInfo.expression(PredicateUtils.or(PredicateUtils.like("name", keyword, false),
|
|
|
+ PredicateUtils.like("code", keyword, false),
|
|
|
+ PredicateUtils.like("summary", keyword, false)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ query.where(pageInfo.getPredicates(root, query, cb));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }, pageInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<Activity> getDoneActivities(PageInfo pageInfo, SearchFilter filter) {
|
|
|
+ Date now = new Date();
|
|
|
+ pageInfo.expression(PredicateUtils.and(PredicateUtils.lte("startTime", now, false),
|
|
|
+ PredicateUtils.gte("endTime", now, false)));
|
|
|
+ pageInfo.expression(PredicateUtils.eq("publish", 2, false));
|
|
|
+ return getAllActivities(pageInfo, filter);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<Activity> getTodoActivities(PageInfo pageInfo, SearchFilter filter) {
|
|
|
+ Date now = new Date();
|
|
|
+ pageInfo.expression(PredicateUtils.gt("startTime", now, false));
|
|
|
+ pageInfo.expression(PredicateUtils.eq("publish", 2, false));
|
|
|
+ return getAllActivities(pageInfo, filter);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<Activity> getEndActivities(PageInfo pageInfo, SearchFilter filter) {
|
|
|
+ Date now = new Date();
|
|
|
+ pageInfo.expression(PredicateUtils.lt("endTime", now, false));
|
|
|
+ pageInfo.expression(PredicateUtils.eq("publish", 2, false));
|
|
|
+ return getAllActivities(pageInfo, filter);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<Activity> getWaitingActivities(PageInfo pageInfo, SearchFilter filter) {
|
|
|
+ pageInfo.expression(PredicateUtils.eq("publish", 1, false));
|
|
|
+ return getAllActivities(pageInfo, filter);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ModelMap getActivitiesNum() {
|
|
|
+ ModelMap map = new ModelMap();
|
|
|
+ Date now = new Date();
|
|
|
+ map.put("doneNum", null != activityDao.findDoneActivitiesNum(now) ? activityDao.findDoneActivitiesNum(now) : 0);
|
|
|
+ map.put("todoNum", null != activityDao.findTodoActivitiesNum(now) ? activityDao.findTodoActivitiesNum(now) : 0);
|
|
|
+ map.put("endNum", null != activityDao.findEndActivitiesNum(now)? activityDao.findEndActivitiesNum(now) : 0);
|
|
|
+ map.put("waitingNum", null != activityDao.findWaitingActivitiesNum() ? activityDao.findWaitingActivitiesNum() : 0);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ProjectQualification> getRelatedProject(Long activityId) {
|
|
|
+ return projectQualificationDao.hasConnected(activityId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Activity openAward(Long activityId) {
|
|
|
+ Activity activity = activityDao.findOne(activityId);
|
|
|
+ activity.setLuckyTime(new Date());
|
|
|
+ return activityDao.save(activity);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Project> getActivityRelatedProjects(final String keyword, final List<Long> proIds) {
|
|
|
+ // 默认返回100条
|
|
|
+ final PageInfo pageInfo = new PageInfo(1, 100);
|
|
|
+ return projectDao.findAll(new Specification<Project>() {
|
|
|
+ @Override
|
|
|
+ public Predicate toPredicate(Root<Project> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
|
|
|
+ if (StringUtils.hasText(keyword)) {
|
|
|
+ pageInfo.expression(PredicateUtils.or(PredicateUtils.like("name", keyword, false),
|
|
|
+ PredicateUtils.like("code", keyword, false),
|
|
|
+ PredicateUtils.like("proSummary", keyword, false),
|
|
|
+ PredicateUtils.like("orgName", keyword, false)));
|
|
|
+ }
|
|
|
+ // 默认全部分类设置值为0
|
|
|
+ if (!CollectionUtils.isEmpty(proIds)) {
|
|
|
+ for (Long proId : proIds) {
|
|
|
+ pageInfo.expression(PredicateUtils.ne("id", proId, false));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ query.where(pageInfo.getPredicates(root, query, cb));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }, pageInfo).getContent();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|