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.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 private SystemDictService systemDictService; @Override public Integer create(SystemDictData systemDictData) { SystemDictData queryDto = new SystemDictData(); queryDto.setDictId(systemDictData.getDictId()); queryDto.setCode(systemDictData.getCode()); queryDto.setDeleted(Boolean.FALSE); SystemDictData dictData = systemDictDataService.findOne(queryDto); if (dictData != null) { throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据值已存在"); } // 排序处理 queryDto = new SystemDictData(); queryDto.setDictId(systemDictData.getDictId()); queryDto.setDeleted(Boolean.FALSE); long maxSort = systemDictDataService.count(queryDto); systemDictData.setSort(Integer.valueOf("" + maxSort)); return systemDictDataService.create(systemDictData); } @Override public void updateById(SystemDictData systemDictData) { systemDictDataService.updateById(systemDictData); } @Override public String updateQywxToken(){ String corpid = queryByCode(Constants.QYWX,Constants.QYWX_CORPID).getCode(); String secret = queryByCode(Constants.QYWX,Constants.QYWX_SECRET).getCode(); String token = QywxUtil.getAccessToken(corpid,secret); SystemDictData dictData = queryByCode(Constants.QYWX,Constants.QYWX_TOKEN); if (dictData != null ) { dictData.setCode(token); dictData.setUpdateTime(new Date()); systemDictDataService.updateById(dictData); String ticket = QywxUtil.getJsApiTicket(token); SystemDictData ticketDictData = queryByCode(Constants.QYWX,Constants.QYWX_JS_API_TICKET); if (dictData != null ) { ticketDictData.setCode(ticket); ticketDictData.setUpdateTime(new Date()); systemDictDataService.updateById(ticketDictData); } } return token; } @Override public void sort(UpdateSortDTO dto) { SystemDictData dictData = systemDictDataService.findById(dto.getId()); if (dictData == null || dictData.getDeleted()) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "排序的数据不存在或已被删除"); } SystemDictData queryDto = new SystemDictData(); queryDto.setDictId(dictData.getDictId()); queryDto.setDeleted(Boolean.FALSE); List dictDataList = systemDictDataService.findList(queryDto); int index = 0; for (int i = 0; i < dictDataList.size(); i++) { if (dictDataList.get(i).getId().equals(dto.getId())) { index = i; break; } } // 上移 if ("top".equals(dto.getDirection())) { if (index - 1 < 0) { return; } SystemDictData preDictData = dictDataList.remove(index - 1); dictDataList.add(index, preDictData); } // 下移 else { if (index + 1 > dictDataList.size() - 1) { return; } SystemDictData nextDictData = dictDataList.remove(index + 1); dictDataList.add(index, nextDictData); } for (int i = 0; i < dictDataList.size(); i++) { dictDataList.get(i).setSort(i); } // 修改 systemDictDataService.updateByIdInBatch(dictDataList); } @Override public SystemDictData queryByCode(String dicCode, String label){ SystemDict queryDto = new SystemDict(); queryDto.setCode(dicCode); queryDto.setDeleted(Boolean.FALSE); SystemDict dictData = systemDictService.findOne(queryDto); if (dictData == null) { return new SystemDictData(); // throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据值不存在"); } SystemDictData data = new SystemDictData(); data.setDictId(dictData.getId()); data.setLabel(label); data.setDeleted(Boolean.FALSE); data = systemDictDataService.findOne(data); if(data == null){ data = new SystemDictData(); } return data; } @Override public String queryCodeById(Integer id){ SystemDictData data = systemDictDataService.findById(id); if(data != null){ return data.getCode(); } return null; } @Override public List queryListByCode(String dicCode, String label){ SystemDict queryDto = new SystemDict(); queryDto.setCode(dicCode); queryDto.setDeleted(Boolean.FALSE); SystemDict dictData = systemDictService.findOne(queryDto); if (dictData == null) { throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据值不存在"); } SystemDictData data = new SystemDictData(); data.setDictId(dictData.getId()); data.setLabel(label); data.setDeleted(Boolean.FALSE); List list= systemDictDataService.findList(data); return list; } @Override public void updateByIdNew(SystemDictData systemDictData) { systemDictDataService.updateById(systemDictData); } @Override public List queryDataByCode(String dicCode, String code){ SystemDict queryDto = new SystemDict(); queryDto.setCode(dicCode); queryDto.setDeleted(Boolean.FALSE); SystemDict dictData = systemDictService.findOne(queryDto); if (dictData == null) { throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据值不存在"); } SystemDictData data = new SystemDictData(); data.setDictId(dictData.getId()); data.setCode(code); data.setDeleted(Boolean.FALSE); List list= systemDictDataService.findList(data); return list; } @Override public void updateByDicId(List list) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); list.stream().forEach(s->{ s.setUpdateTime(new Date()); s.setUpdateUser(user.getId()); systemDictDataService.updateById(s); }); } @Override public String getPreFixPath(String resourceCode, String targetCode) { if (StringUtils.isBlank(resourceCode) || StringUtils.isBlank(targetCode)){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"路径参数不完整"); } SystemDict queryDto = new SystemDict(); queryDto.setCode(Constants.FTP); queryDto.setDeleted(Boolean.FALSE); SystemDict dictData = systemDictService.findOne(queryDto); if (dictData == null) { throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据值不存在"); } List list = systemDictDataService.findList(dictData.getId(), Arrays.asList(resourceCode, targetCode)); String resourcePath = list.stream().filter(s->s.getLabel().equals(resourceCode)).findFirst().map(s->s.getCode()).orElse(""); String targetPath = list.stream().filter(s -> s.getLabel().equals(targetCode)).findFirst().map(s -> s.getCode()).orElse(""); 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 dataMap = new HashMap<>(); dataMap.put("webDomain",domain); dataMap.put("navIndex",objIndex.getNavIndex()); List seoList = seoMapper.selectList(new LambdaQueryWrapper().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 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 dataList = carouselMapper.selectList(new LambdaQueryWrapper() .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() .eq(Carousel::getIsdeleted,Constants.ZERO) .orderByDesc(Carousel::getSortnum ,Carousel::getCreateDate))); dataMap.put("caseList", getInfomationListByType( Constants.ONE,null)); List 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 dataMap = new HashMap<>(); dataMap.put("webDomain",domain); dataMap.put("navIndex",objIndex.getNavIndex()); List seoList = seoMapper.selectList(new LambdaQueryWrapper().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 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 dataList = carouselMapper.selectList(new LambdaQueryWrapper() .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() .eq(Carousel::getIsdeleted,Constants.ZERO) .orderByDesc(Carousel::getSortnum ,Carousel::getCreateDate))); dataMap.put("caseList", getInfomationListByType( Constants.ONE,null)); List 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 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 zixunList, Integer m) { List 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 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 getInfomationListByType(Integer type,Integer limit) { List dataList =informationMapper.selectList(new LambdaQueryWrapper() .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 dataList, Map 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 dataList, Map 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 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 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 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 dictDataList, String footWords) { if(dictDataList!=null){ for(SystemDictData data:dictDataList){ if(StringUtils.equals(footWords,data.getLabel())){ return data.getCode(); } } } return ""; } }