From b2d360d9113b6955287108ca9e90d76a1f3c1419 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期日, 29 九月 2024 15:05:11 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/zbomyoujia

---
 server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java |  348 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 313 insertions(+), 35 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
index 5bc8b55..142c846 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
@@ -1,20 +1,40 @@
 package com.doumee.service.business.impl;
 
+import com.dingtalk.api.request.OapiMaterialNewsListRequest;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.ActionsMapper;
+import com.doumee.dao.business.MultifileMapper;
 import com.doumee.dao.business.NewsMapper;
+import com.doumee.dao.business.model.Actions;
+import com.doumee.dao.business.model.BjParam;
+import com.doumee.dao.business.model.Multifile;
 import com.doumee.dao.business.model.News;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.web.response.DailyUpdatesResponse;
 import com.doumee.service.business.NewsService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.List;
+import javax.swing.*;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 璧勮鍜屽畾鍒舵湇鍔′俊鎭〃Service瀹炵幇
@@ -26,16 +46,64 @@
 
     @Autowired
     private NewsMapper newsMapper;
+    @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private ActionsMapper actionsMapper;
 
     @Override
-    public Long create(News news) {
-        newsMapper.insert(news);
-        return news.getId();
+    @Transactional
+    public Long create(News param) {
+        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        param.setIsdeleted(Constants.ZERO);
+        param.setEditor(userInfo.getId());
+        param.setCreator(userInfo.getId());
+        param.setStatus(Constants.formatIntegerNum(param.getStatus()));
+        param.setCreateDate(new Date());
+        param.setEditDate(param.getCreateDate());
+        param.setPublishUserid(param.getCreator());
+        param.setLookNum(Constants.ZERO);
+        param.setDonwloadNum(Constants.ZERO);
+        param.setFileType(Constants.formatIntegerNum(param.getFileType()));
+        newsMapper.insert(param);
+        if(param.getFileList()!=null && param.getFileList().size()>0){
+            List<Multifile> multifiles = new ArrayList<>();
+            int index =1;
+            for(Multifile f : param.getFileList()){
+                if(StringUtils.isNotBlank(f.getFileurl())){
+                    f.setId(null);
+                    f.setIsdeleted(Constants.ZERO);
+                    f.setObjId(param.getId());
+                    f.setType(StringUtils.endsWith(f.getFileurl(),".mp4")?Constants.ONE:Constants.ZERO);
+                    f.setObjType(Constants.MultiFile.NEWS_FILE.getKey());
+                    f.setCreator(param.getCreator());
+                    f.setCreateDate(param.getCreateDate());
+                    f.setSortnum(index++);
+                    multifiles.add(f);
+                }
+            }
+            if(multifiles.size()>0){
+                multifileMapper.insert(multifiles);
+            }
+        }
+        return param.getId();
     }
 
     @Override
     public void deleteById(Long id) {
-        newsMapper.deleteById(id);
+        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        newsMapper.update(null,new UpdateWrapper<News>().lambda()
+                .set(News::getIsdeleted,Constants.ONE )
+                .set(News::getEditor,userInfo.getId() )
+                .set(News::getEditDate,new Date() )
+                .eq(News::getId,id));
+        multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                .set(Multifile::getIsdeleted,Constants.ONE )
+                .eq(Multifile::getIsdeleted,Constants.ZERO )
+                .eq(Multifile::getObjType,Constants.MultiFile.NEWS_FILE.getKey())
+                .eq(Multifile::getObjId,id));
     }
 
     @Override
@@ -49,12 +117,44 @@
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        newsMapper.deleteBatchIds(ids);
+        for(Long id : ids){
+            deleteById(id);
+        }
     }
 
     @Override
+    @Transactional
     public void updateById(News news) {
+        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        news.setEditor(userInfo.getId());
+        news.setEditDate(new Date());
+        news.setPublishUserid(news.getEditor());
         newsMapper.updateById(news);
+        if(news.getFileList()!=null && news.getFileList().size()>0){
+            List<Multifile> multifiles = new ArrayList<>();
+            int index =1;
+            for(Multifile f : news.getFileList()){
+                if(StringUtils.isNotBlank(f.getFileurl())){
+                    f.setId(null);
+                    f.setIsdeleted(Constants.ZERO);
+                    f.setType(StringUtils.endsWith(f.getFileurl(),".mp4")?Constants.ONE:Constants.ZERO);
+                    f.setObjId(news.getId());
+                    f.setObjType(Constants.MultiFile.NEWS_FILE.getKey());
+                    f.setCreator(news.getCreator());
+                    f.setCreateDate(news.getCreateDate());
+                    f.setSortnum(index++);
+                    multifiles.add(f);
+                }
+            }
+            if(multifiles.size()>0){
+                multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                        .set(Multifile::getIsdeleted,Constants.ONE )
+                        .eq(Multifile::getIsdeleted,Constants.ZERO )
+                        .eq(Multifile::getObjType,Constants.MultiFile.NEWS_FILE.getKey())
+                        .eq(Multifile::getObjId,news.getId() ));
+                multifileMapper.insert(multifiles);
+            }
+        }
     }
 
     @Override
@@ -87,76 +187,147 @@
     @Override
     public PageData<News> findPage(PageWrap<News> pageWrap) {
         IPage<News> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<News> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<News> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
+        if(Objects.isNull(pageWrap.getModel())){
+            News news = new News();
+            pageWrap.setModel(news);
+        }
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,News::getEditor)
+                .selectAll(News.class)
+                .selectAs(SystemUser::getRealname,News::getEditorName);
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(News::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(News::getId, pageWrap.getModel().getId());
+        }
+        if(pageWrap.getModel().getIsPublish()!=null && Constants.equalsInteger(pageWrap.getModel().getIsPublish(),Constants.ONE)){
+            queryWrapper.apply(" now() >= t.PUBLISH_DATE ");
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(News::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(News::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(News::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(News::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(News::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(News::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(News::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(News::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(News::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(News::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(News::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(News::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(News::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(News::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(News::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(News::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getTitle() != null) {
-            queryWrapper.lambda().like(News::getTitle, pageWrap.getModel().getTitle());
+            queryWrapper.like(News::getTitle, pageWrap.getModel().getTitle());
         }
         if (pageWrap.getModel().getSubTitle() != null) {
-            queryWrapper.lambda().eq(News::getSubTitle, pageWrap.getModel().getSubTitle());
+            queryWrapper.eq(News::getSubTitle, pageWrap.getModel().getSubTitle());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(News::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(News::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(News::getContent, pageWrap.getModel().getContent());
+            queryWrapper.eq(News::getContent, pageWrap.getModel().getContent());
         }
         if (pageWrap.getModel().getLinkType() != null) {
-            queryWrapper.lambda().eq(News::getLinkType, pageWrap.getModel().getLinkType());
+            queryWrapper.eq(News::getLinkType, pageWrap.getModel().getLinkType());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(News::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(News::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getLookNum() != null) {
-            queryWrapper.lambda().eq(News::getLookNum, pageWrap.getModel().getLookNum());
+            queryWrapper.eq(News::getLookNum, pageWrap.getModel().getLookNum());
         }
         if (pageWrap.getModel().getDonwloadNum() != null) {
-            queryWrapper.lambda().eq(News::getDonwloadNum, pageWrap.getModel().getDonwloadNum());
+            queryWrapper.eq(News::getDonwloadNum, pageWrap.getModel().getDonwloadNum());
         }
         if (pageWrap.getModel().getPublishDate() != null) {
-            queryWrapper.lambda().ge(News::getPublishDate, Utils.Date.getStart(pageWrap.getModel().getPublishDate()));
-            queryWrapper.lambda().le(News::getPublishDate, Utils.Date.getEnd(pageWrap.getModel().getPublishDate()));
+            queryWrapper.ge(News::getPublishDate, Utils.Date.getStart(pageWrap.getModel().getPublishDate()));
+            queryWrapper.le(News::getPublishDate, Utils.Date.getEnd(pageWrap.getModel().getPublishDate()));
         }
         if (pageWrap.getModel().getPublishUserid() != null) {
-            queryWrapper.lambda().eq(News::getPublishUserid, pageWrap.getModel().getPublishUserid());
+            queryWrapper.eq(News::getPublishUserid, pageWrap.getModel().getPublishUserid());
         }
         if (pageWrap.getModel().getPublishInfo() != null) {
-            queryWrapper.lambda().eq(News::getPublishInfo, pageWrap.getModel().getPublishInfo());
+            queryWrapper.eq(News::getPublishInfo, pageWrap.getModel().getPublishInfo());
         }
         if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(News::getType, pageWrap.getModel().getType());
+            queryWrapper.eq(News::getType, pageWrap.getModel().getType());
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
+        queryWrapper.orderByDesc(News::getCreateDate);
+
+        PageData<News> pageData =  PageData.from(newsMapper.selectJoinPage(page, News.class,queryWrapper));
+        if(pageData!=null && pageData.getRecords()!=null && pageData.getRecords().size()>0){
+            List<Long> idList = new ArrayList<>();
+            for(News model : pageData.getRecords()){
+                idList.add(model.getId());
             }
-            queryWrapper.orderByAsc(sortData.getProperty());
+            List<Multifile> files = dealMultifileList(idList);
+            for(News model : pageData.getRecords()){
+                setFilelistById(model,files);
+            }
         }
-        return PageData.from(newsMapper.selectPage(page, queryWrapper));
+        return pageData;
+    }
+
+    private void setFilelistById(News model, List<Multifile> multifiles) {
+        if(multifiles!=null && multifiles.size()>0){
+            for(Multifile f : multifiles){
+                if(Constants.equalsLong(f.getObjId(),model.getId())){
+                    if(Constants.equalsInteger(model.getType(),Constants.ZERO) &&Constants.equalsInteger(model.getFileType(),Constants.ONE) && Constants.equalsInteger(f.getType(),Constants.ONE)){
+                        //濡傛灉鏄棰�
+                        if(model.getFileList() == null){
+                            model.setFileList(new ArrayList<>());
+                        }
+                        model.getFileList().add(f);
+                        break;
+                    }
+                    if(Constants.equalsInteger(model.getType(),Constants.ZERO) && Constants.equalsInteger(model.getFileType(),Constants.ZERO) && Constants.equalsInteger(f.getType(),Constants.ZERO)){
+                        //濡傛灉鏄棰�
+                        if(model.getFileList() == null){
+                            model.setFileList(new ArrayList<>());
+                        }
+                        model.getFileList().add(f);
+                    }
+
+                    if(Constants.equalsInteger(model.getType(),Constants.ONE)){
+                        //濡傛灉鏄棰�
+                        if(model.getFileList() == null){
+                            model.setFileList(new ArrayList<>());
+                        }
+                        model.getFileList().add(f);
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    private List<Multifile> dealMultifileList(List<Long> idList) {
+        List<Integer> types = new ArrayList<>();
+        types.add(Constants.MultiFile.NEWS_FILE.getKey());
+        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getIsdeleted,Constants.ZERO )
+                .in(Multifile::getObjType,types)
+                .in(Multifile::getObjId,idList )
+                .orderByAsc(Multifile::getSortnum)
+        );
+        if(multifiles!=null && multifiles.size()>0){
+            String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH ).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.NEWS_FILE ).getCode();
+            for(Multifile f : multifiles){
+                if(StringUtils.isNotBlank(f.getFileurl())){
+                    f.setFileurlFull(path + f.getFileurl());
+                }
+            }
+        }
+        return multifiles;
     }
 
     @Override
@@ -164,4 +335,111 @@
         QueryWrapper<News> wrapper = new QueryWrapper<>(news);
         return newsMapper.selectCount(wrapper);
     }
+
+
+    /**
+     * 鏌ヨ瀹氬埗鏈嶅姟鍒楄〃
+     * @return
+     */
+    @Override
+    public List<News> getCustomizedNewsList(Integer type,Integer num,Integer fileType){
+        List<News> list = newsMapper.selectList(new QueryWrapper<News>().lambda()
+                .eq(News::getIsdeleted,Constants.ZERO)
+                .eq(News::getType,type)
+                .eq(News::getStatus,Constants.ZERO)
+                .eq(Objects.nonNull(fileType),News::getFileType,fileType)
+                .last(Objects.nonNull(num),"limit " + num)
+                .orderByAsc(News::getSortnum)
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
+            List<Long> idList =  list.stream().map(i->i.getId()).collect(Collectors.toList());
+            List<Multifile> files = dealMultifileList(idList);
+            for(News model : list){
+                setFilelistById(model,files);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public News getCustomizedNewsDetail(Long id){
+        News news =  newsMapper.selectById(id);
+        if(Objects.isNull(news)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        List<Long> idList =  new ArrayList<>();
+        idList.add(id);
+        List<Multifile> files = dealMultifileList(idList);
+        setFilelistById(news,files);
+        //澧炲姞娴忚閲�
+        newsMapper.update(new UpdateWrapper<News>().lambda()
+                .setSql( " LOOK_NUM = ( LOOK_NUM + 1 ) ").eq(News::getId,id));
+        return news;
+    }
+
+
+    /**
+     * 姣忔棩涓婃柊
+     * @return
+     */
+    @Override
+    public DailyUpdatesResponse getDailyUpdatesResponse(){
+        DailyUpdatesResponse dailyUpdatesResponse = new DailyUpdatesResponse();
+        dailyUpdatesResponse.setDailyUpdateNum(
+                newsMapper.selectCount(new QueryWrapper<News>().lambda()
+                .eq(News::getIsdeleted,Constants.ZERO)
+                .like(News::getCreateDate, DateUtil.getDateLong(new Date()))
+                .apply(" now() >= PUBLISH_DATE ")
+                .eq(News::getType,Constants.ZERO)
+        ));
+        dailyUpdatesResponse.setShareNum(
+                actionsMapper.selectCount(new QueryWrapper<Actions>())
+        );
+        List<News> list = newsMapper.selectList(new QueryWrapper<News>().lambda()
+                .eq(News::getIsdeleted,Constants.ZERO)
+                .eq(News::getType,Constants.ZERO)
+                .eq(News::getStatus,Constants.ZERO)
+                .eq(News::getFileType,Constants.ZERO)
+                .apply(" now() >= PUBLISH_DATE ")
+                .last( "limit 3"  )
+                .orderByDesc(News::getCreateDate)
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
+            List<Long> idList =  list.stream().map(i->i.getId()).collect(Collectors.toList());
+            List<Multifile> files = dealMultifileList(idList);
+            for(News model : list){
+                setFilelistById(model,files);
+            }
+        }
+        dailyUpdatesResponse.setNewsList(list);
+        return dailyUpdatesResponse;
+    }
+
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    @Override
+    public void saveShareRecord(Long id,Long userId){
+        News news = newsMapper.selectById(id);
+        if(Objects.isNull(news)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Actions actions = new Actions();
+        actions.setCreateDate(new Date());
+        actions.setIsDeleted(Constants.ZERO);
+        actions.setType(Constants.ZERO);
+        actions.setObjId(id);
+        actions.setObjType(Constants.ZERO);
+        actions.setMemberId(userId);
+        actions.setTitle(news.getTitle());
+        actions.setContent(news.getContent());
+        actions.setSubTitle(news.getSubTitle());
+        actionsMapper.insert(actions);
+        //澧炲姞鍒嗕韩閲�
+        newsMapper.update(new UpdateWrapper<News>().lambda()
+                .setSql( " DONWLOAD_NUM = ( DONWLOAD_NUM + 1 ) ").eq(News::getId,id));
+
+    }
+
+
+
+
 }

--
Gitblit v1.9.3