ss
doum
2025-09-19 61247957fe4d94591e37d75eda6889f06c0cb9c1
server/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
@@ -1,28 +1,49 @@
package com.doumee.biz.system.impl;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.Constants;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.qiyeweixin.QywxUtil;
import com.doumee.dao.business.CarouselMapper;
import com.doumee.dao.business.InformationMapper;
import com.doumee.dao.business.SeoMapper;
import com.doumee.dao.business.model.Carousel;
import com.doumee.dao.business.model.Information;
import com.doumee.dao.business.model.Seo;
import com.doumee.dao.common.dto.UpdateSortDTO;
import com.doumee.dao.system.model.SystemDict;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.vo.FootDataVO;
import com.doumee.service.system.SystemDictDataService;
import com.doumee.service.system.SystemDictService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import io.swagger.models.Info;
import io.swagger.models.auth.In;
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.web.servlet.view.freemarker.FreeMarkerConfigurer;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.io.*;
import java.util.*;
@Service
public class SystemDictDataBizImpl implements SystemDictDataBiz {
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;
    @Autowired
    private InformationMapper informationMapper;
    @Autowired
    private CarouselMapper carouselMapper;
    @Autowired
    private SeoMapper seoMapper;
    @Autowired
    private SystemDictDataService systemDictDataService;
    @Autowired
@@ -184,6 +205,7 @@
        return list;
    }
    @Override
    public void updateByDicId(List<SystemDictData> list) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -214,4 +236,266 @@
        return resourcePath+targetPath;
    }
    @Override
    public String createPage(Integer pageIndex) {
        Constants.PageIndex objIndex  = Constants.PageIndex.getObj(pageIndex);
        if(objIndex == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
//        freeMarkerConfigurer.setPreferFileSystemAccess(true);
//        freeMarkerConfigurer.setTemplateLoaderPath(queryByCode(Constants.SYSTEM,Constants.PAGE_TEMPLATES_PATH).getCode());
        String flt = objIndex.getTemplate();//模版名称
        String html = objIndex.getHtml();//页面名称
        String domain = queryByCode(Constants.SYSTEM,Constants.WEB_DOMAIN).getCode();
        String htmlPath = queryByCode(Constants.SYSTEM,Constants.STATIC_PAGES_PATH).getCode();
//          domain = ".";
//          htmlPath = "D://static/";
        File docFile = new File( htmlPath);
        if(!docFile.exists()){
            docFile.mkdirs();
        }
        Map<String,Object> dataMap = new HashMap<>();
        dataMap.put("webDomain",domain);
        dataMap.put("navIndex",objIndex.getNavIndex());
        List<Seo> seoList = seoMapper.selectList(new LambdaQueryWrapper<Seo>().eq(Seo::getIsdeleted,Constants.ZERO));
        Seo seo =getSeoByHtml(objIndex.getTemplate(),seoList);
        dataMap.put("seo",seo);
        initDataMapByPage(dataMap);
        if(objIndex.getKey() == Constants.PageIndex.dynamicsDetail.getKey() || objIndex.getKey() == Constants.PageIndex.casesDetail.getKey() ){
            List<Information> dataList =getInfomationListByType(objIndex.getKey() == Constants.PageIndex.dynamicsDetail.getKey() ?Constants.ZERO:Constants.ONE,null);
            generateDetailsHtml(dataList,dataMap,flt,htmlPath+html);//单文件数据
        }else
        if(objIndex.getKey() == Constants.PageIndex.bannerDetails.getKey()   ){
            List<Carousel> dataList = carouselMapper.selectList(new LambdaQueryWrapper<Carousel>()
                    .eq(Carousel::getIsdeleted,Constants.ZERO)
                    .eq(Carousel::getJumpType,Constants.ONE)//外链
                    .orderByDesc(Carousel::getSortnum ,Carousel::getCreateDate));
            generateBannerDetailsHtml(dataList,dataMap,flt,htmlPath+html);//单文件数据
        }else{
            if(objIndex.getKey() == Constants.PageIndex.dynamics.getKey() || objIndex.getKey() == Constants.PageIndex.casesDetail.getKey() ){
                dataMap.put("dataList", getInfomationListByType(objIndex.getKey() == Constants.PageIndex.dynamics.getKey() ?Constants.ZERO:Constants.ONE,null));
            }
            if(objIndex.getKey() == Constants.PageIndex.index.getKey()){
                //如果是首页
                dataMap.put("bannerList",  carouselMapper.selectList(new LambdaQueryWrapper<Carousel>()
                        .eq(Carousel::getIsdeleted,Constants.ZERO)
                        .orderByDesc(Carousel::getSortnum ,Carousel::getCreateDate)));
                dataMap.put("caseList", getInfomationListByType( Constants.ONE,null));
                List<Information> zixunList =  getInfomationListByType( Constants.ZERO,null);
                //所属模块 0行业资讯、1运营经验、2功能介绍、3市场信息
                dataMap.put("yunyingJy", getModelFromListByModule( zixunList ,Constants.ONE));
                dataMap.put("gongnengJs", getModelFromListByModule( zixunList ,Constants.TWO));
                dataMap.put("hangyeZx", getModelListFromListByModule( zixunList ,Constants.ZERO));
                dataMap.put("shichangXx", getModelListFromListByModule( zixunList ,Constants.THREE));
            }
            generateSingleHtml(dataMap,flt,htmlPath+html);//单文件数据
        }
       return  null;
    }
    @Override
    public String createMobilePage(Integer pageIndex) {
        Constants.MobilePageIndex objIndex  = Constants.MobilePageIndex.getObj(pageIndex);
        if(objIndex == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
//        freeMarkerConfigurer.setPreferFileSystemAccess(true);
//        freeMarkerConfigurer.setTemplateLoaderPaths(queryByCode(Constants.SYSTEM,Constants.PAGE_TEMPLATES_PATH_MOBILE).getCode());
        String flt = objIndex.getTemplate();//模版名称
        String html = objIndex.getHtml();//页面名称
        String domain = queryByCode(Constants.SYSTEM,Constants.WEB_DOMAIN_MOBILE).getCode();
        String htmlPath = queryByCode(Constants.SYSTEM,Constants.STATIC_PAGES_PATH_MOBILE).getCode();
        File docFile = new File( htmlPath);
        if(!docFile.exists()){
            docFile.mkdirs();
        }
        Map<String,Object> dataMap = new HashMap<>();
        dataMap.put("webDomain",domain);
        dataMap.put("navIndex",objIndex.getNavIndex());
        List<Seo> seoList = seoMapper.selectList(new LambdaQueryWrapper<Seo>().eq(Seo::getIsdeleted,Constants.ZERO));
        Seo seo =getSeoByHtml(objIndex.getTemplate(),seoList);
        dataMap.put("seo",seo);
        initDataMapByPage(dataMap);
        if(objIndex.getKey() == Constants.MobilePageIndex.dynamicsDetail.getKey() || objIndex.getKey() == Constants.PageIndex.casesDetail.getKey() ){
            List<Information> dataList =getInfomationListByType(objIndex.getKey() == Constants.MobilePageIndex.dynamicsDetail.getKey() ?Constants.ZERO:Constants.ONE,null);
            generateDetailsHtml(dataList,dataMap,flt,htmlPath+html);//单文件数据
        }else
        if(objIndex.getKey() == Constants.MobilePageIndex.bannerDetails.getKey()   ){
            List<Carousel> dataList = carouselMapper.selectList(new LambdaQueryWrapper<Carousel>()
                    .eq(Carousel::getIsdeleted,Constants.ZERO)
                    .eq(Carousel::getJumpType,Constants.ONE)//外链
                    .orderByDesc(Carousel::getSortnum ,Carousel::getCreateDate));
            generateBannerDetailsHtml(dataList,dataMap,flt,htmlPath+html);//单文件数据
        }else{
            if(objIndex.getKey() == Constants.MobilePageIndex.dynamics.getKey() || objIndex.getKey() == Constants.MobilePageIndex.casesDetail.getKey() ){
                dataMap.put("dataList", getInfomationListByType(objIndex.getKey() == Constants.MobilePageIndex.dynamics.getKey() ?Constants.ZERO:Constants.ONE,null));
            }
            if(objIndex.getKey() == Constants.MobilePageIndex.index.getKey()){
                //如果是首页
                dataMap.put("bannerList",  carouselMapper.selectList(new LambdaQueryWrapper<Carousel>()
                        .eq(Carousel::getIsdeleted,Constants.ZERO)
                        .orderByDesc(Carousel::getSortnum ,Carousel::getCreateDate)));
                dataMap.put("caseList", getInfomationListByType( Constants.ONE,null));
                List<Information> zixunList =  getInfomationListByType( Constants.ZERO,null);
                //所属模块 0行业资讯、1运营经验、2功能介绍、3市场信息
                dataMap.put("yunyingJy", getModelFromListByModule( zixunList ,Constants.ONE));
                dataMap.put("gongnengJs", getModelFromListByModule( zixunList ,Constants.TWO));
                dataMap.put("hangyeZx", getModelListFromListByModule( zixunList ,Constants.ZERO));
                dataMap.put("shichangXx", getModelListFromListByModule( zixunList ,Constants.THREE));
            }
            generateSingleHtml(dataMap,flt,htmlPath+html);//单文件数据
        }
       return  null;
    }
    private Information getModelFromListByModule(List<Information> zixunList, Integer m) {
        if(zixunList !=null){
            for(Information model :zixunList){
                if(model.getModule()!=null && Constants.equalsInteger(model.getModule(),m)){
                    return model;
                }
            }
        }
        return new Information();
    }
    private List getModelListFromListByModule(List<Information> zixunList, Integer m) {
        List<Information> list = new ArrayList<>();
        if(zixunList !=null){
            for(Information model :zixunList){
                if(model.getModule()!=null && Constants.equalsInteger(model.getModule(),m)){
                    list.add(model);
                }
            }
        }
        return list;
    }
    private Seo getSeoByHtml(String html, List<Seo> seoList) {
        if(seoList==null || seoList.size()==0){
            return new Seo();
        }
        for(Seo s :seoList){
            if(StringUtils.equalsIgnoreCase(s.getPageAddr(),html)){
                return s;
            }
        }
        for(Seo s :seoList){
            if(StringUtils.equalsIgnoreCase(s.getPageAddr(),Constants.PageIndex.defaultPage.getTemplate())){
                return s;
            }
        }
        return new Seo();
    }
    private List<Information> getInfomationListByType(Integer type,Integer limit) {
        List<Information> dataList =informationMapper.selectList(new LambdaQueryWrapper<Information>()
                .eq(Information::getType,type)
                .eq(Information::getIsdeleted,Constants.ZERO)
                .last(limit!=null,"limit "+limit)
                .orderByDesc(Information::getSortnum ,Information::getCreateDate) );//查询全部资讯
        return dataList;
    }
    private void generateDetailsHtml(List<Information> dataList, Map<String, Object> dataMap, String flt, String htmlPath) {
        if(dataList== null){
            return;
        }
        for(Information data :dataList){
            dataMap.put("data",data);
            String tt =htmlPath.replace("${id}",data.getId()+"");
            generateSingleHtml(dataMap,flt,tt);//单文件数据
        }
    }
    private void generateBannerDetailsHtml(List<Carousel> dataList, Map<String, Object> dataMap, String flt, String htmlPath) {
        if(dataList== null){
            return;
        }
        for(Carousel data :dataList){
            dataMap.put("data",data);
            String tt =htmlPath.replace("${id}",data.getId()+"");
            generateSingleHtml(dataMap,flt,tt);//单文件数据
        }
    }
    private void generateSingleHtml(Map<String, Object> dataMap, String flt, String htmlPath)   {
        try {
            Configuration configuration = freeMarkerConfigurer.getConfiguration();
            configuration.setDefaultEncoding("utf-8");
            Writer out = null;
            // 加载模版文件
            Template template = configuration.getTemplate(flt);
            // 生成数据
            File docFile = new File( htmlPath);
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile), "UTF-8"));
            // 输出文件
            template.process(dataMap,out);
        } catch (Exception e) {
            e.printStackTrace();
            throw  new BusinessException(ResponseStatus.SERVER_ERROR);
        }
    }
    private void initDataMapByPage(Map<String, Object> dataMap) {
        dataMap.put("bottom", getFoodDataVO());//网站底部信息
    }
    public FootDataVO getFoodDataVO(){
        FootDataVO footDataVO = new FootDataVO();
        SystemDict d = new SystemDict();
        d.setCode(Constants.SYSTEM);
        d.setDeleted(Boolean.FALSE);
        d = systemDictService.findOne(d);
        if(d ==null){
            return footDataVO;
        }
        SystemDictData param = new SystemDictData();
        param.setDictId(d.getId());
        param.setDeleted(Boolean.FALSE);
        List<SystemDictData> dictDataList = systemDictDataService.findList(param);
        String path = findDictDataByLabel(dictDataList,Constants.FILE_DIR);
        footDataVO.setFileDir(path);
        footDataVO.setFootWords(findDictDataByLabel(dictDataList,Constants.FOOT_WORDS));
        footDataVO.setQyemail(findDictDataByLabel(dictDataList,Constants.QYEMAIL));
        footDataVO.setFootImgUrl(findDictDataByLabel(dictDataList,Constants.FOOT_IMGURL));
        footDataVO.setFootFullImgUrl(path+ footDataVO.getFootImgUrl());
        footDataVO.setFootImgUrl2(findDictDataByLabel(dictDataList,Constants.FOOT_IMGURL2));
        footDataVO.setFootFullImgUrl2(path + footDataVO.getFootImgUrl2());
        footDataVO.setAddress(findDictDataByLabel(dictDataList,Constants.ADDRESS));
        footDataVO.setLinkPhone(findDictDataByLabel(dictDataList,Constants.LINK_PHONE));
        footDataVO.setLinkMobile(findDictDataByLabel(dictDataList,Constants.LINK_MOBILE));
        String solveScheme =  findDictDataByLabel(dictDataList,Constants.SOLVE_SCHEME);
        if(Objects.nonNull(solveScheme) & org.apache.commons.lang3.StringUtils.isNotBlank(solveScheme)){
            footDataVO.setSolveScheme(JSONArray.parseArray(solveScheme));
        }
        String wisdomSystem = findDictDataByLabel(dictDataList,Constants.WISDOM_SYSTEM);
        if(Objects.nonNull(wisdomSystem) & org.apache.commons.lang3.StringUtils.isNotBlank(wisdomSystem )){
            footDataVO.setWisdomSystem(JSONArray.parseArray(wisdomSystem ));
        }
        String honors = findDictDataByLabel(dictDataList,Constants.HONORS);
        if(Objects.nonNull(wisdomSystem) & org.apache.commons.lang3.StringUtils.isNotBlank(honors)){
            footDataVO.setHonors(JSONArray.parseArray(honors));
        }
        String qylinks = findDictDataByLabel(dictDataList,Constants.YQLINKS);
        if(Objects.nonNull(qylinks) & org.apache.commons.lang3.StringUtils.isNotBlank(qylinks)){
            footDataVO.setYqlinks(JSONArray.parseArray(qylinks));
        }
        footDataVO.setServerTime(findDictDataByLabel(dictDataList,Constants.SERVER_TIME));
        return footDataVO;
    }
    private String findDictDataByLabel(List<SystemDictData> dictDataList, String footWords) {
        if(dictDataList!=null){
            for(SystemDictData data:dictDataList){
                if(StringUtils.equals(footWords,data.getLabel())){
                    return data.getCode();
                }
            }
        }
        return "";
    }
}