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<SystemDictData> 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<SystemDictData> 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<SystemDictData> list= systemDictDataService.findList(data);
|
|
return list;
|
}
|
|
@Override
|
public void updateByIdNew(SystemDictData systemDictData) {
|
systemDictDataService.updateById(systemDictData);
|
}
|
|
@Override
|
public List<SystemDictData> 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<SystemDictData> list= systemDictDataService.findList(data);
|
|
return list;
|
}
|
|
|
@Override
|
public void updateByDicId(List<SystemDictData> 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<SystemDictData> 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);
|
}
|
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(objIndex,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;
|
}
|
|
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(Constants.PageIndex objIndex, 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 "";
|
}
|
|
|
}
|