Merge branch 'dev' of yunhao.wang/i3plus-core into dev

yun-zuoyi
汪云昊 5 years ago committed by nancy.li
commit ade26c6230

@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.configuration;
import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.impp.framework.boot.util.ImppSwitchUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -20,16 +21,20 @@ public class AppStartSystemInit implements CommandLineRunner {
public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG);
@Autowired
@Autowired(required = false)
private ISystemInitService systemInitService;
@Override
public void run(String... args) throws Exception {
try {
if(ImppSwitchUtil.isUnitTestEnv()) {
LOGGER.info("【单元测试环境 跳过初始化...】");
return;
}
LOGGER.info("【IMPP-Core开始加载基础信息...】");
systemInitService.putAndLoadAll();
systemInitService.putAndLoadAll();
}catch (Exception e){
e.printStackTrace();
}

@ -1,34 +1,34 @@
package cn.estsh.i3plus.core.apiservice.configuration;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.jpa.factory.BaseMongoRepositoryFactoryBean;
import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
/**
* @Description :
*
* @Reference :
* @Author : alwaysfrin
* @CreateDate : 2018-12-12 20:49
* @Modify:
**/
@Configuration
@ConditionalOnExpression("'${" + CommonConstWords.PROP_SWITCH_MONGO + ":false}' == 'true'")
//扫描需要单独处理的持久化包
@EnableMongoRepositories(basePackages = {
"cn.estsh.i3plus.**.platrepositorymongo"
},repositoryFactoryBeanClass = BaseMongoRepositoryFactoryBean.class)
public class ScanMongoPackageConfiguration {
public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG);
public ScanMongoPackageConfiguration(){
LOGGER.info("【扫描关联包...】");
}
}
//package cn.estsh.i3plus.core.apiservice.configuration;
//
//import cn.estsh.i3plus.platform.common.util.CommonConstWords;
//import cn.estsh.i3plus.pojo.base.jpa.factory.BaseMongoRepositoryFactoryBean;
//import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
//import org.springframework.boot.autoconfigure.domain.EntityScan;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
//import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
//
///**
// * @Description : 需要扫描其他包的配置文件
// * 此类专门添加需要单独加载的其他模块的包
// * @Reference :
// * @Author : alwaysfrin
// * @CreateDate : 2018-12-12 20:49
// * @Modify:
// **/
//@Configuration
//@ConditionalOnExpression("'${" + CommonConstWords.PROP_SWITCH_MONGO + ":false}' == 'true'")
////扫描需要单独处理的持久化包
//@EnableMongoRepositories(basePackages = {
// "cn.estsh.i3plus.**.platrepositorymongo"
//},repositoryFactoryBeanClass = BaseMongoRepositoryFactoryBean.class)
//public class ScanMongoPackageConfiguration {
// public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG);
//
// public ScanMongoPackageConfiguration(){
// LOGGER.info("【扫描关联包...】");
// }
//}

@ -1,35 +1,35 @@
package cn.estsh.i3plus.core.apiservice.configuration;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
* @Description :
*
* @Reference :
* @Author : alwaysfrin
* @CreateDate : 2018-12-12 20:49
* @Modify:
**/
@Configuration
//扫描需要单独处理的包
@EntityScan(basePackages = {
"cn.estsh.i3plus.**.platbean"
})
//需要单独处理的其他模块包
@EnableJpaRepositories(basePackages = {
"cn.estsh.i3plus.**.platrepository"
}, repositoryFactoryBeanClass = BaseRepositoryFactoryBean.class)
public class ScanPackageConfiguration {
public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG);
public ScanPackageConfiguration(){
LOGGER.info("【扫描关联包...】");
}
}
//package cn.estsh.i3plus.core.apiservice.configuration;
//
//import cn.estsh.i3plus.platform.common.util.CommonConstWords;
//import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.boot.autoconfigure.domain.EntityScan;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
//
///**
// * @Description : 需要扫描其他包的配置文件
// * 此类专门添加需要单独加载的其他模块的包
// * @Reference :
// * @Author : alwaysfrin
// * @CreateDate : 2018-12-12 20:49
// * @Modify:
// **/
//@Configuration
////扫描需要单独处理的包
//@EntityScan(basePackages = {
// "cn.estsh.i3plus.**.platbean"
//})
//
////需要单独处理的其他模块包
//@EnableJpaRepositories(basePackages = {
// "cn.estsh.i3plus.**.platrepository"
//}, repositoryFactoryBeanClass = BaseRepositoryFactoryBean.class)
//public class ScanPackageConfiguration {
// public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG);
//
// public ScanPackageConfiguration(){
// LOGGER.info("【扫描关联包...】");
// }
//}

@ -4,6 +4,7 @@ import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.core.api.iservice.busi.*;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.*;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
@ -352,6 +353,8 @@ public class WhiteController extends CoreBaseController {
sysFile.setFileTypeId(dictionary.getId());
sysFile.setFileTypeName(dictionary.getName());
ConvertBean.serviceModelInitialize(sysFile,"白名单");
sysFile = sysFileService.insertSysFile(sysFile);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysFile);
}catch(ImppBusiException busExcep){

@ -6,6 +6,7 @@ import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.platform.platbean.*;
import cn.estsh.impp.framework.base.controller.CoreBaseController;
@ -21,6 +22,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@ -42,6 +44,7 @@ public class ImppLogController extends CoreBaseController {
/**
*
*
* @param logSystem
* @param pager
* @return
@ -61,6 +64,7 @@ public class ImppLogController extends CoreBaseController {
/**
*
*
* @param sysLogTaskTime
* @param pager
* @return
@ -80,6 +84,7 @@ public class ImppLogController extends CoreBaseController {
/**
*
*
* @param logOperate
* @param pager
* @return
@ -99,6 +104,7 @@ public class ImppLogController extends CoreBaseController {
/**
*
*
* @param sysLogException
* @param pager
* @return
@ -118,6 +124,7 @@ public class ImppLogController extends CoreBaseController {
/**
*
*
* @param bean
* @param pager
* @return
@ -137,6 +144,7 @@ public class ImppLogController extends CoreBaseController {
/**
*
*
* @param bean
* @return
*/
@ -162,8 +170,31 @@ public class ImppLogController extends CoreBaseController {
if (StringUtils.isBlank(bean.getCreateDateTimeEnd())) {
bean.setCreateDateTimeEnd(TimeTool.getNowTime(true));
}
List logExceptionList = logService.findLogConsoleList(bean);
return ResultBean.success("查询成功").setResultList(logExceptionList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// 一次100条
bean.setOrderByParam("createDatetime");
bean.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.ASC.getValue());
List logScheduleList = new ArrayList();
Pager pager = new Pager();
pager.setPageSize(100);
pager.setCurrentPage(1);
ListPager listPager;
do {
if (pager.getTotalRows() != 0) {
pager.next();
}
listPager = logService.queryLogConsolePager(bean, pager);
if(listPager!= null && listPager.getObjectList()!= null) {
logScheduleList.addAll(listPager.getObjectList());
pager = listPager.getObjectPager();
}else if(pager.hasNext()) {
pager.setCurrentPage(pager.getTotalPages());
}
} while (pager.hasNext());
return ResultBean.success("查询成功").setResultList(logScheduleList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {

@ -2,11 +2,20 @@ package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysPojoVersionService;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.model.common.CloudPagerModel;
import cn.estsh.i3plus.pojo.platform.bean.SysPojoVersion;
import cn.estsh.impp.framework.base.controller.CrudBaseController;
import cn.estsh.impp.framework.base.service.ICrudService;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -28,4 +37,20 @@ public class SysPojoVersionController extends CrudBaseController<SysPojoVersion>
public ICrudService getCrudService() {
return pojoVersionService;
}
@PostMapping("/cloud-query")
@ApiOperation(value = "查询数据", notes = "复杂查询,分页,排序")
BaseResultBean<SysPojoVersion> queryPojoVersionByPagerCloud(@RequestBody CloudPagerModel<SysPojoVersion> model){
try {
SysPojoVersion bean = packQueryPager(model.getObj());
return ResultBean.success("操作成功")
.setListPager(getCrudService().findPager(bean, model.getPager()))
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -1,169 +0,0 @@
package cn.estsh.i3plus.core.apiservice.mq;
import cn.estsh.i3plus.core.apiservice.serviceimpl.base.BaseBusiSyncMdmDataService;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MdmEnumUtil;
import cn.estsh.i3plus.pojo.mdm.bean.base.MdmSyncData;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.rabbitmq.client.Channel;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.HashMap;
import static cn.estsh.i3plus.platform.common.util.MdmConstWords.REDIS_MDM_SYNC_FAIL;
/**
* @Description :
* @Reference :
* @Author : yunhao
* @CreateDate : 2020-05-28 16:54
* @Modify:
**/
public abstract class BaseMdmDataSyncQueueReceiver {
private static final Logger LOGGER = LoggerFactory.getLogger(BaseMdmDataSyncQueueReceiver.class);
@Autowired
private RabbitTemplate rabbitTemplate;
@Resource(name = CommonConstWords.IMPP_REDIS_MDM)
private ImppRedis mdmRedis;
private static final HashMap<String, Class<BaseBusiSyncMdmDataService>> masterDateRefMap = new HashMap<>();
private static final HashMap<String, Class<BaseBusiSyncMdmDataService>> busiDateRefMap = new HashMap<>();
private static final HashMap<Class<BaseBusiSyncMdmDataService>, BaseBusiSyncMdmDataService> syncServiceMap = new HashMap<>();
public void putMdmDataRef(Class syncService, Class mdmMasterClass, Class mdmBusiClass) {
masterDateRefMap.put(mdmMasterClass.getName(), syncService);
busiDateRefMap.put(mdmBusiClass.getName(), syncService);
}
/**
*
*
* @param syncData
* @return
*/
private BaseBusiSyncMdmDataService getSyncService(MdmSyncData syncData) {
Class<BaseBusiSyncMdmDataService> syncServiceClass = null;
// 根据MdmClass查找对应关系
if (CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(syncData.getIsMasterDataVal())) {
syncServiceClass = masterDateRefMap.get(syncData.getSyncDataClass());
} else {
syncServiceClass = busiDateRefMap.get(syncData.getSyncDataClass());
}
if (syncServiceClass == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode())
.setErrorDetail("【MDM同步关系未维护】MdmClass %s", syncData.getSyncDataClass())
.setErrorSolution("维护Mdm同步关系")
.build();
}
// 根据同步服务Class获取服务对象
BaseBusiSyncMdmDataService busiSyncMdmDataService = syncServiceMap.get(syncServiceClass);
if (busiSyncMdmDataService == null) {
busiSyncMdmDataService = SpringContextsUtil.getBean(syncServiceClass);
syncServiceMap.put(syncServiceClass, busiSyncMdmDataService);
}
if (busiSyncMdmDataService == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode())
.setErrorDetail("【MDM同步服务为找到】SyncServiceClass %s", syncServiceClass)
.build();
}
return busiSyncMdmDataService;
}
/**
* Mdm
*
* @param syncDataStr
* @param channel
* @param message
*/
public void processSyncMasterData(String syncDataStr, Channel channel, Message message) {
MdmSyncData syncData = null;
try {
LOGGER.info("【MQ-QUEUE_MDM_SYNC_MASTER_DATA_CORE】数据接收成功{}", syncDataStr);
syncData = JsonUtilTool.decode(syncDataStr, MdmSyncData.class);
if (syncData == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("同步数据不存在")
.build();
}
// 同步数据类型
BaseBusiSyncMdmDataService busiSyncMdmDataService = getSyncService(syncData);
boolean isMaster = CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(syncData.getIsMasterDataVal());
// 判断操作类型与同步数据类型调用对应的方法
if (syncData.getSyncTypeVal() == MdmEnumUtil.MDM_SYNC_TYPE.INSERT.getValue()) {
if (isMaster) {
busiSyncMdmDataService.masterInsertSync(syncData);
} else {
busiSyncMdmDataService.busiInsertSync(syncData);
}
} else if (syncData.getSyncTypeVal() == MdmEnumUtil.MDM_SYNC_TYPE.UPDATE.getValue()) {
if (isMaster) {
busiSyncMdmDataService.masterUpdateSync(syncData);
} else {
busiSyncMdmDataService.busiUpdateSync(syncData);
}
} else if (syncData.getSyncTypeVal() == MdmEnumUtil.MDM_SYNC_TYPE.DELETE.getValue()) {
if (isMaster) {
busiSyncMdmDataService.masterDeleteSync(syncData);
} else {
busiSyncMdmDataService.busiDeleteSync(syncData);
}
}
//信息已处理
LOGGER.info("【MQ-QUEUE_MDM_SYNC_MASTER_DATA_CORE】数据处理成功{}", syncDataStr);
} catch (Exception e) {
LOGGER.error("【MQ-QUEUE_MDM_SYNC_MASTER_DATA_CORE】处理出错{}", syncData, e);
if (syncData != null) {
// 保存异常信息和堆栈数据
syncData.setSyncFailDateTime(TimeTool.getNowTime(true));
syncData.setSyncFailMessage(ExceptionUtils.getStackTrace(e));
//放入MDM 缓存中
mdmRedis.putObject(getFailRedisKey(syncData), syncData, -1);
}
} finally {
try {
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
private String getFailRedisKey(MdmSyncData syncData) {
return REDIS_MDM_SYNC_FAIL + "-" + syncData.getSyncSoftType() + ":" + syncData.getSyncDataClassSimpleName() + ":" + syncData.getSyncFailDateTime() + "-" + System.currentTimeMillis();
}
public abstract void syncMasterData(String syncDataStr, Channel channel, Message message);
}

@ -2,10 +2,12 @@ package cn.estsh.i3plus.core.apiservice.mq;
import cn.estsh.i3plus.core.apiservice.serviceimpl.mdm.SysToolSyncDataService;
import cn.estsh.i3plus.pojo.mdm.bean.busi.core.MdmGearCoreBusiExtd;
import cn.estsh.impp.framework.boot.mdm.mq.BaseMdmDataSyncQueueReceiver;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Configuration;
import static cn.estsh.i3plus.platform.common.util.MdmConstWords.QUEUE_MDM_SYNC_DATA_CORE;
@ -16,7 +18,8 @@ import static cn.estsh.i3plus.platform.common.util.MdmConstWords.QUEUE_MDM_SYNC_
* @CreateDate : 2020-05-28 16:54
* @Modify:
**/
@Component
@ConditionalOnExpression("'${impp.mq.queue.mdm.sync:true}' == 'true'")
@Configuration
public class MdmDataSyncQueueReceiver extends BaseMdmDataSyncQueueReceiver {
/**

@ -25,7 +25,8 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@ -37,8 +38,8 @@ import java.util.List;
* @CreateDate : 2018-11-15 22:35
* @Modify:
**/
@ConditionalOnExpression("'${impp.mq.queue.letter}' == 'true'")
@Component
@ConditionalOnExpression("'${impp.mq.queue.letter:true}' == 'true'")
@Configuration
public class MessageLetterQueueReceiver {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageLetterQueueReceiver.class);

@ -21,7 +21,8 @@ import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
/**
@ -31,8 +32,8 @@ import java.io.IOException;
* @CreateDate : 2018-11-15 22:15
* @Modify:
**/
@ConditionalOnExpression("'${impp.mq.queue.mail}' == 'true'")
@Component
@ConditionalOnExpression("'${impp.mq.queue.mail:true}' == 'true'")
@Configuration
public class MessageMailQueueReceiver {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageMailQueueReceiver.class);

@ -24,7 +24,7 @@ import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.ArrayList;
@ -37,8 +37,8 @@ import java.util.List;
* @CreateDate : 2018-11-15 22:15
* @Modify:
**/
@ConditionalOnExpression("'${impp.mq.queue.sweb.notice}' == 'true'")
@Component
@ConditionalOnExpression("'${impp.mq.queue.sweb.notice:true}' == 'true'")
@Configuration
public class MessageSWebNoticeQueueReceiver {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageSWebNoticeQueueReceiver.class);

@ -1,43 +0,0 @@
//package cn.estsh.i3plus.core.apiservice.mq;
//
//import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
//import com.rabbitmq.client.Channel;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.stereotype.Component;
//
//import java.util.Random;
//
///**
// * @Description : 邮件队列处理
// * @Reference :
// * @Author : yunhao
// * @CreateDate : 2018-11-15 22:15
// * @Modify:
// **/
//@Component
//public class MessageTestQueueReceiver {
// private static final Logger LOGGER = LoggerFactory.getLogger(MessageTestQueueReceiver.class);
// Random random = new Random();//默认构造方法
//
// /**
// * 系统邮件处理队列
// *
// * @param data 系统消息信息
// * @param channel 通道
// * @param message 消息
// */
// @RabbitListener(queues = PlatformConstWords.QUEUE_IMPP_MESSAGE_LETTER_BAK,exclusive = true,concurrency = "1")
// public void processImppMail(String data, Channel channel, Message message) {
// try {
//
// LOGGER.info("====>> {}" ,data);
// Thread.sleep(random.nextInt(100));
// channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
// }catch (Exception e){
// e.printStackTrace();
// }
// }
//}

@ -42,8 +42,8 @@ import static cn.estsh.i3plus.platform.common.util.PlatformConstWords.QUEUE_IMPP
* @CreateDate : 20-4-26 2:32
* @Modify:
**/
@Component
@ConditionalOnExpression("'${impp.mq.queue.letter}' == 'true'")
@ConditionalOnExpression("'${impp.mq.queue.pojo.version:true}' == 'true'")
@Configuration
public class PojoVersionQueueReceiver {
private static final Logger LOGGER = LoggerFactory.getLogger(PojoVersionQueueReceiver.class);

@ -23,7 +23,7 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.stream.Collectors;
@ -35,8 +35,8 @@ import java.util.stream.Collectors;
* @CreateDate : 2018-12-20 21:56
* @Modify:
**/
@ConditionalOnExpression("'${impp.mq.queue.schedule}' == 'true'")
@Component
@ConditionalOnExpression("'${impp.mq.queue.schedule:true}' == 'true'")
@Configuration
public class ScheduleQueueReceiver {
private static final Logger LOGGER = LoggerFactory.getLogger(ScheduleQueueReceiver.class);

@ -12,7 +12,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.Map;
@ -27,7 +28,8 @@ import static cn.estsh.i3plus.platform.common.util.PlatformConstWords.QUEUE_IMPP
* @CreateDate : 19-8-23 3:12
* @Modify:
**/
@Component
@ConditionalOnExpression("'${impp.mq.queue.resource:true}' == 'true'")
@Configuration
public class SysLocalResourceQueue {
private static final Logger LOGGER = LoggerFactory.getLogger(SysLocalResourceQueue.class);

@ -1,139 +0,0 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.base;
import cn.estsh.i3plus.icloud.mdm.sdk.base.IBaseMdmBusiExtdCloud;
import cn.estsh.i3plus.icloud.mdm.sdk.base.IBaseMdmBusiModelCloud;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mdm.bean.base.BaseMdmBusiModelBean;
import cn.estsh.i3plus.pojo.mdm.bean.base.MdmSyncData;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import java.util.List;
/**
* @Description : setvice
* @Reference :
* @Author : yunhao
* @CreateDate : 2020-05-15 17:58
* @Modify:
**/
public abstract class BaseBusiSyncMdmDataService<T, M extends BaseMdmBusiModelBean> {
private IBaseMdmBusiExtdCloud baseMdmBusiExtdCloud;
private IBaseMdmBusiModelCloud<M> baseMdmBusiModelCloud;
public BaseBusiSyncMdmDataService(IBaseMdmBusiExtdCloud baseMdmBusiExtdCloud, IBaseMdmBusiModelCloud<M> baseMdmBusiModelCloud) {
this.baseMdmBusiExtdCloud = baseMdmBusiExtdCloud;
this.baseMdmBusiModelCloud = baseMdmBusiModelCloud;
}
/**
*
* @param syncData
*/
public void masterInsertSync(MdmSyncData syncData) {
baseMdmBusiExtdCloud.whiteDoProcessMissBusiExtdByMaster(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()]), syncData.getSyncDateUserName());
}
/**
*
* @param syncData
*/
public void masterUpdateSync(MdmSyncData syncData) {
BaseResultBean<M> baseResultBean =
baseMdmBusiModelCloud.whiteFindByMasterIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()]));
if (!baseResultBean.isSuccess()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode())
.setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode())
.setErrorDetail(baseResultBean.getErrorMsg())
.build();
}
List<M> modelBeanList = baseResultBean.getResultList();
updateBusiList(transform(modelBeanList));
}
/**
*
* @param syncData
*/
public void masterDeleteSync(MdmSyncData syncData) {
baseMdmBusiExtdCloud.whiteDeleteWeaklyByMasterIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()]),syncData.getSyncDateUserName());
}
/**
*
* @param syncData
*/
public void busiInsertSync(MdmSyncData syncData){
BaseResultBean<M> baseResultBean =
baseMdmBusiModelCloud.whiteFindByIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()]));
if (!baseResultBean.isSuccess()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode())
.setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode())
.setErrorDetail(baseResultBean.getErrorMsg())
.build();
}
List<M> modelBeanList = baseResultBean.getResultList();
insertBusiList(transform(modelBeanList));
}
/**
*
* @param syncData
*/
public void busiUpdateSync(MdmSyncData syncData){
BaseResultBean<M> baseResultBean =
baseMdmBusiModelCloud.findByIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()]));
if (!baseResultBean.isSuccess()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode())
.setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode())
.setErrorDetail(baseResultBean.getErrorMsg())
.build();
}
List<M> modelBeanList = baseResultBean.getResultList();
updateBusiList(transform(modelBeanList));
}
/**
*
* @param syncData
*/
public void busiDeleteSync(MdmSyncData syncData){
deleteBusiList(syncData.getSyncDataId());
}
/**
*
* @param syncDataList
* @return
*/
public abstract List<T> transform(List<M> syncDataList);
/**
*
* @param beanList
*/
public abstract void insertBusiList(List<T> beanList);
/**
*
* @param beanList
*/
public abstract void updateBusiList(List<T> beanList);
/**
*
* @param idList
*/
public abstract void deleteBusiList(List<Long> idList);
}

@ -9,7 +9,6 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.platform.plugin.elasticsearch.ElasticSearchTool;
import cn.estsh.impp.framework.boot.license.ImppLicenseTool;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -78,6 +77,8 @@ public class SystemInitService implements ISystemInitService {
@Override
@ApiOperation(value = "初始化加载所有数据",notes = "初始化加载所有数据")
public void putAndLoadAll() {
try {
type = ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue();
LOGGER.info("加载 SysConfig 信息");
@ -99,8 +100,9 @@ public class SystemInitService implements ISystemInitService {
LOGGER.info("加载 对象版本控制信息");
reloadPojoVersionPlan();
LOGGER.info("加载 对象版本控制信息 信息完成");
}catch (Exception e){
e.printStackTrace();
}
}
@Override

@ -1,7 +1,7 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysToolService;
import cn.estsh.i3plus.core.apiservice.dao.ITestDao;
import cn.estsh.i3plus.platform.common.tool.BeanCopyTool;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
@ -12,7 +12,6 @@ import cn.estsh.i3plus.pojo.platform.repository.SysToolRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysToolTypeRepository;
import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -82,24 +81,12 @@ public class SysToolService implements ISysToolService {
@Override
@ApiOperation(value = "更新硬件信息")
public void updateSysTool(SysTool tool) {
// 查询硬件类型名称
LOGGER.info("硬件类型 TOOL_TYPE :{}", tool);
SysToolType toolType = toolTypeRDao.getById(tool.getToolTypeId());
ValidatorBean.checkNotNull(toolType);
SysTool newSysTool = toolRDao.getById(tool.getId());
newSysTool.setName(tool.getName());
newSysTool.setToolConnType(tool.getToolConnType());
newSysTool.setToolDataType(tool.getToolDataType());
newSysTool.setToolIp(tool.getToolIp());
newSysTool.setToolPort(tool.getToolPort());
newSysTool.setToolDescription(tool.getToolDescription());
newSysTool.setToolTypeId(tool.getToolTypeId());
newSysTool.setToolTypeNameRdd(toolType.getName());
newSysTool.setToolOperating(tool.getToolOperating());
LOGGER.info("硬件 TOOL :{}",newSysTool);
toolRDao.update(newSysTool);
SysTool orginTool = toolRDao.getById(tool.getId());
if(orginTool == null){
orginTool = tool;
}
BeanCopyTool.beanCopy(tool,orginTool);
toolRDao.update(orginTool);
}
@Override

@ -1,11 +1,12 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.mdm;
import cn.estsh.i3plus.core.api.iservice.busi.ISysToolService;
import cn.estsh.i3plus.core.apiservice.serviceimpl.base.BaseBusiSyncMdmDataService;
import cn.estsh.i3plus.icloud.mdm.sdk.base.IBaseMdmBusiExtdCloud;
import cn.estsh.i3plus.icloud.mdm.sdk.base.IBaseMdmBusiModelCloud;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mdm.model.core.MdmGearCoreBusiModel;
import cn.estsh.i3plus.pojo.platform.bean.SysTool;
import cn.estsh.impp.framework.boot.mdm.cloud.IBaseMdmBusiExtdCloud;
import cn.estsh.impp.framework.boot.mdm.cloud.IBaseMdmBusiModelCloud;
import cn.estsh.impp.framework.boot.mdm.service.BaseBusiSyncMdmDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -31,13 +32,15 @@ public class SysToolSyncDataService extends BaseBusiSyncMdmDataService<SysTool,
}
@Override
public List<SysTool> transform(List<MdmGearCoreBusiModel> syncDataList) {
public List<SysTool> transform(List<MdmGearCoreBusiModel> syncDataList,String userName) {
return syncDataList.stream().map(gearCoreBusiModel -> {
SysTool sysTool = new SysTool();
if (gearCoreBusiModel != null && gearCoreBusiModel.getBusi() != null && gearCoreBusiModel.getMaster() != null) {
sysTool.setId(gearCoreBusiModel.getBusi().getId());
sysTool.setName(gearCoreBusiModel.getMaster().getName());
sysTool.setToolIp(gearCoreBusiModel.getMaster().getGearModel());
sysTool.setToolDescription(gearCoreBusiModel.getBusi().getCoreNum());
ConvertBean.serviceModelInitialize(sysTool,userName);
}
return sysTool;
}).collect(Collectors.toList());
@ -58,7 +61,7 @@ public class SysToolSyncDataService extends BaseBusiSyncMdmDataService<SysTool,
}
@Override
public void deleteBusiList(List<Long> id) {
public void deleteBusiList(List<Long> id,String userName) {
sysToolService.deleteSysToolByIds(id.toArray(new Long[id.size()]));
}
}

@ -177,6 +177,7 @@ public class NoSqlPack {
public static ElasticSearchPack packEsSysLogConsole(SysLogConsole bean) {
ElasticSearchPack result = packElasticSearchPack(bean);
result.andNumberBigger("id",bean.getId());
result.andNumberEquals("softType",bean.getSoftType());
result.andNumberEquals("requestId",bean.getRequestId());
result.andStringLeftLike("logHost",bean.getLogHost());

@ -19,7 +19,8 @@ impp.config.swagger=true
#\u662F\u5426\u5F00\u542Fwebsocket
impp.config.websocket=true
# \u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1
impp.config.fastdfs=true
# \u9ED8\u8BA4false ,\u53EF\u9009\u9879\uFF1Afastdfs\uFF0Cgofastdfs
impp.config.fileserver=fastdfs
#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.controller=true
#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790

@ -1,49 +1,50 @@
#本机ip
#\u672C\u673Aip
impp.server.ip=imppcore
#项目端口
#\u9879\u76EE\u7AEF\u53E3
server.port=8100
#链路追踪zipkin控制台ip地址
#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740
impp.console.ip=http://console:8010
#服务注册中心(多注册中心逗号分隔)
#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3(\u591A\u6CE8\u518C\u4E2D\u5FC3\u9017\u53F7\u5206\u9694)
impp.cluster.regist.center=http://register:8000/eureka/
#日志默认使用log4j2
#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2
logging.config=classpath:log4j2-spring.xml
########平台相关参数##########
#是否开启redis缓存
########\u5E73\u53F0\u76F8\u5173\u53C2\u6570##########
#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58
impp.config.redis=true
#是否开启rabbitMQ
#\u662F\u5426\u5F00\u542FrabbitMQ
impp.config.rabbitmq=true
#是否开启swagger
#\u662F\u5426\u5F00\u542Fswagger
impp.config.swagger=true
#是否开启websocket
#\u662F\u5426\u5F00\u542Fwebsocket
impp.config.websocket=true
#是否开启文件服务
impp.config.fastdfs=true
#是否对发布服务进行详细日志分析
#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1
# \u9ED8\u8BA4false ,\u53EF\u9009\u9879\uFF1Afastdfs\uFF0Cgofastdfs
impp.config.fileserver=fastdfs
#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.controller=true
#是否对调用服务进行详细日志分析
#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.service=true
#是否开启微服
#\u662F\u5426\u5F00\u542F\u5FAE\u670D
eureka.client.enabled=true
#打开feign的熔断
#\u6253\u5F00feign\u7684\u7194\u65AD
feign.hystrix.enabled=true
################ 队列处理 ################
#站内信
################ \u961F\u5217\u5904\u7406 ################
#\u7AD9\u5185\u4FE1
impp.mq.queue.letter=true
#邮件
#\u90AE\u4EF6
impp.mq.queue.mail=true
#定时任务
#\u5B9A\u65F6\u4EFB\u52A1
impp.mq.queue.schedule=true
#SWEB通知处理队列
#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217
impp.mq.queue.sweb.notice=true
################################ 数据库相关设置 ################################
################################ \u6570\u636E\u5E93\u76F8\u5173\u8BBE\u7F6E ################################
# mysql
spring.datasource.validationQuery=SELECT 1
################ 数据池设置 ################
################ \u6570\u636E\u6C60\u8BBE\u7F6E ################
spring.datasource.maximum-pool-size=10
spring.datasource.max-active=5
spring.datasource.max-idle=5
@ -55,7 +56,7 @@ spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=300000
##主数据源,读写
##\u4E3B\u6570\u636E\u6E90\uFF0C\u8BFB\u5199
#impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource
impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.write.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8
@ -63,13 +64,13 @@ impp.write.datasource.username=wmslogin
impp.write.datasource.password=Wmslogin$%^&7654
#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource
#主从复制时自动修改表结构会有问题,暂时改成同一个数据源
#\u4E3B\u4ECE\u590D\u5236\u65F6\u81EA\u52A8\u4FEE\u6539\u8868\u7ED3\u6784\u4F1A\u6709\u95EE\u9898\uFF0C\u6682\u65F6\u6539\u6210\u540C\u4E00\u4E2A\u6570\u636E\u6E90
impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.read.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8
impp.read.datasource.username=wmslogin
impp.read.datasource.password=Wmslogin$%^&7654
##############定时任务持久化##############
##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316##############
impp.schedule.open=true
impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.schedule.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8
@ -77,121 +78,121 @@ impp.schedule.datasource.username=wmslogin
impp.schedule.datasource.password=Wmslogin$%^&7654
impp.schedule.datasource.max-connections=50
################ 日志数据源 ################
################ \u65E5\u5FD7\u6570\u636E\u6E90 ################
spring.data.mongodb.database=mongoDBSource
spring.data.mongodb.uri=mongodb:27017
spring.data.mongodb.username=sa
spring.data.mongodb.password=i3plus
spring.data.mongodb.port=27017
################ JPA设置设置 ################
################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################
# mysql
spring.jpa.database=MYSQL
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#是否显示sql
#\u662F\u5426\u663E\u793Asql
spring.jpa.show-sql=true
#表关系create,create-drop,update,validate
#\u8868\u5173\u7CFBcreate,create-drop,update,validate
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#定时任务在服务启动后多少秒执行
#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C
impp.schedule.start.after-second=20
#是否集群部署
#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72
impp.schedule.datasource.is-clustered=true
#执行检测(毫秒),若宕机由其他定时器执行
#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C
impp.schedule.datasource.cluster-checkin-interval=30000
#线程数
#\u7EBF\u7A0B\u6570
impp.schedule.thread-count=50
#线程优先级1-10默认为5
#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5
impp.schedule.thread-priority=5
################################ 其他功能设置 ################################
################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################
#redisIP
redis.hostName=redis
#端口号
#\u7AEF\u53E3\u53F7
redis.port=6379
#如果有密码
#\u5982\u679C\u6709\u5BC6\u7801
redis.password=
##其他redis配置需要调整的加在此处
################## rabbitMQ配置 ####################
##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904
################## rabbitMQ\u914D\u7F6E ####################
spring.rabbitmq.vhost=/
spring.rabbitmq.host=rabbitmq
spring.rabbitmq.port=5672
spring.rabbitmq.username=estsh
spring.rabbitmq.password=estsh123
##其他rabbitMq配置需要调整的加在此处
##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904
################ 微服配置 ################
#是否进行健康检查
################ \u5FAE\u670D\u914D\u7F6E ################
#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5
eureka.client.healthcheck.enabled=true
#若无法连接注册中心,是否需要一直检测加入
#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165
impp.cluster.fetch=true
#集群名
#\u96C6\u7FA4\u540D
eureka.instance.metadata-map.cluster=impp_cluster
#(参数配置)注册中心地址 -》 i3plus-ics多个用逗号分隔
#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694
eureka.client.service-url.defaultZone=${impp.cluster.regist.center}
#本服务主机ip若多个网卡则需要设置本服务ip
#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09
eureka.instance.ip-address=${impp.server.ip}
#本服务实例ID
#\u672C\u670D\u52A1\u5B9E\u4F8BID
eureka.instance.instance-id=${impp.server.ip}:${server.port}
#本服务主机名
#\u672C\u670D\u52A1\u4E3B\u673A\u540D
eureka.instance.hostname=${impp.server.ip}
#本服务状态页面
#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762
eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html
#将自己的IP注册到Eureka Server。若不配置或设置为false表示注册微服务所在操作系统的hostname到Eureka Server
#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518C\u5FAE\u670D\u52A1\u6240\u5728\u64CD\u4F5C\u7CFB\u7EDF\u7684hostname\u5230Eureka Server
eureka.instance.prefer-ip-address=true
################ 检测机制 ################
#心跳间隔周期宕机限制30秒没反应视为宕机
################ \u68C0\u6D4B\u673A\u5236 ################
#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A
eureka.instance.lease-expiration-duration-in-seconds=30
#心跳周期
#\u5FC3\u8DF3\u5468\u671F
eureka.instance.lease-renewal-interval-in-seconds=20
#client连接Eureka服务端后的空闲等待时间默认为30 秒
#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2
eureka.client.eureka-connection-idle-timeout-seconds=1
#最初复制实例信息到eureka服务器所需的时间s默认为40秒
#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6240\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A40\u79D2
eureka.client.initial-instance-info-replication-interval-seconds=1
#间隔多长时间再次复制实例信息到eureka服务器默认为30秒
#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2
eureka.client.instance-info-replication-interval-seconds=1
#从eureka服务器注册表中获取注册信息的时间间隔s默认为30秒
#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2
eureka.client.registry-fetch-interval-seconds=1
################ 熔断配置 ################
#重试
################ \u7194\u65AD\u914D\u7F6E ################
#\u91CD\u8BD5
ribbon.maxAutoRetries=2
#读取数据时长
#\u8BFB\u53D6\u6570\u636E\u65F6\u957F
ribbon.ReadTimeout=30000
#连接时长
#\u8FDE\u63A5\u65F6\u957F
ribbon.ConnectTimeout=50000
#响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长)
#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\u53CA\u8FDE\u63A5\u65F6\u957F\uFF09
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000
################ 链路追踪 ################
#使用web方式传输信息
################ \u94FE\u8DEF\u8FFD\u8E2A ################
#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F
spring.zipkin.sender.type=web
#链路追踪服务的地址
#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740
spring.zipkin.base-url=${impp.console.ip}
#追踪深度百分比1是全部
#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8
spring.sleuth.sampler.probability=1.0
################ FastDfs 配置 ################
#tracker服务器ip
################ FastDfs \u914D\u7F6E ################
#tracker\u670D\u52A1\u5668ip
fastdfs.tracker_servers=tracker:22122
# tracker的http端口
# tracker\u7684http\u7AEF\u53E3
fastdfs.http_tracker_http_port=22122
# 使用自定义工具获取文件展示地址
# \u4F7F\u7528\u81EA\u5B9A\u4E49\u5DE5\u5177\u83B7\u53D6\u6587\u4EF6\u5C55\u793A\u5730\u5740
fastdfs.http.ui.host=http://tracker:22122
#密码
#\u5BC6\u7801
#fastdfs.http.secret_key=
#连接超时
#\u8FDE\u63A5\u8D85\u65F6
fastdfs.connect_timeout_in_seconds=10000
#传输超时
#\u4F20\u8F93\u8D85\u65F6
fastdfs.network_timeout_in_seconds=10000
fastdfs.charset=UTF-8
# token 防盗链功能
# token \u9632\u76D7\u94FE\u529F\u80FD
fastdfs.http_anti_steal_token=no
################ 授权配置 ################
################ \u6388\u6743\u914D\u7F6E ################
slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2
slm.app.id=10000

@ -19,7 +19,8 @@ impp.config.swagger=true
#\u662F\u5426\u5F00\u542Fwebsocket
impp.config.websocket=true
# \u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1
impp.config.fastdfs=true
# \u9ED8\u8BA4false ,\u53EF\u9009\u9879\uFF1Afastdfs\uFF0Cgofastdfs
impp.config.fileserver=fastdfs
#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.controller=true
#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790

@ -1,49 +1,50 @@
#本机ip
#\u672C\u673Aip
impp.server.ip=192.168.1.241
#项目端口
#\u9879\u76EE\u7AEF\u53E3
server.port=18100
#链路追踪zipkin控制台ip地址
#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740
impp.console.ip=http://192.168.1.241:18010
#服务注册中心(多注册中心逗号分隔)
#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3(\u591A\u6CE8\u518C\u4E2D\u5FC3\u9017\u53F7\u5206\u9694)
impp.cluster.regist.center=http://192.168.1.241:18000/eureka/
#日志默认使用log4j2
#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2
logging.config=classpath:log4j2-spring-prod.xml
########平台相关参数##########
#是否开启redis缓存
########\u5E73\u53F0\u76F8\u5173\u53C2\u6570##########
#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58
impp.config.redis=true
#是否开启rabbitMQ
#\u662F\u5426\u5F00\u542FrabbitMQ
impp.config.rabbitmq=true
#是否开启swagger
#\u662F\u5426\u5F00\u542Fswagger
impp.config.swagger=true
#是否开启websocket
#\u662F\u5426\u5F00\u542Fwebsocket
impp.config.websocket=true
#是否开启文件服务
impp.config.fastdfs=true
#是否对发布服务进行详细日志分析
#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1
# \u9ED8\u8BA4false ,\u53EF\u9009\u9879\uFF1Afastdfs\uFF0Cgofastdfs
impp.config.fileserver=fastdfs
#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.controller=true
#是否对调用服务进行详细日志分析
#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.service=true
#是否开启微服
#\u662F\u5426\u5F00\u542F\u5FAE\u670D
eureka.client.enabled=true
#打开feign的熔断
#\u6253\u5F00feign\u7684\u7194\u65AD
feign.hystrix.enabled=true
################ 队列处理 ################
#站内信
################ \u961F\u5217\u5904\u7406 ################
#\u7AD9\u5185\u4FE1
impp.mq.queue.letter=true
#邮件
#\u90AE\u4EF6
impp.mq.queue.mail=true
#定时任务
#\u5B9A\u65F6\u4EFB\u52A1
impp.mq.queue.schedule=true
#SWEB通知处理队列
#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217
impp.mq.queue.sweb.notice=true
################################ 数据库相关设置 ################################
################################ \u6570\u636E\u5E93\u76F8\u5173\u8BBE\u7F6E ################################
# mysql
spring.datasource.validationQuery=SELECT 1
################ 数据池设置 ################
################ \u6570\u636E\u6C60\u8BBE\u7F6E ################
spring.datasource.maximum-pool-size=200
spring.datasource.max-active=100
spring.datasource.max-idle=100
@ -55,147 +56,147 @@ spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=300000
##主数据源,读写
##\u4E3B\u6570\u636E\u6E90\uFF0C\u8BFB\u5199
#impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource
impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.240:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8
impp.write.datasource.username=impp_i3_core_user
impp.write.datasource.password=impp_i3_core_pwd
##辅数据源,只读
##\u8F85\u6570\u636E\u6E90\uFF0C\u53EA\u8BFB
#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource
impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.240:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8
impp.read.datasource.username=impp_i3_core_user
impp.read.datasource.password=impp_i3_core_pwd
################ 日志数据源 ################
################ \u65E5\u5FD7\u6570\u636E\u6E90 ################
spring.data.mongodb.database=mongoDBSource
spring.data.mongodb.uri=192.168.1.240:27017
spring.data.mongodb.username=sa
spring.data.mongodb.password=i3plus
spring.data.mongodb.port=27017
################ JPA设置设置 ################
################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################
# mysql
spring.jpa.database=MYSQL
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#是否显示sql
#\u662F\u5426\u663E\u793Asql
spring.jpa.show-sql=true
#表关系create,create-drop,update,validate
#\u8868\u5173\u7CFBcreate,create-drop,update,validate
spring.jpa.properties.hibernate.hbm2ddl.auto=update
##############定时任务持久化##############
##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316##############
impp.schedule.open=true
impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.schedule.datasource.jdbc-url=jdbc:mysql://192.168.1.240:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8
impp.schedule.datasource.username=impp_i3_schedule_user
impp.schedule.datasource.password=impp_i3_schedule_pwd
impp.schedule.datasource.max-connections=20
#定时任务在服务启动后多少秒执行
#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C
impp.schedule.start.after-second=20
#是否集群部署
#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72
impp.schedule.datasource.is-clustered=true
#执行检测(毫秒),若宕机由其他定时器执行
#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C
impp.schedule.datasource.cluster-checkin-interval=30000
#线程数
#\u7EBF\u7A0B\u6570
impp.schedule.thread-count=10
#线程优先级1-10默认为5
#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5
impp.schedule.thread-priority=5
################################ 其他功能设置 ################################
################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################
#redisIP
redis.hostName=192.168.1.240
#端口号
#\u7AEF\u53E3\u53F7
redis.port=6379
#如果有密码
#\u5982\u679C\u6709\u5BC6\u7801
redis.password=
##其他redis配置需要调整的加在此处
################## rabbitMQ配置 ####################
##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904
################## rabbitMQ\u914D\u7F6E ####################
spring.rabbitmq.vhost=/
spring.rabbitmq.host=192.168.1.240
spring.rabbitmq.port=5672
spring.rabbitmq.username=estsh
spring.rabbitmq.password=estsh123
##其他rabbitMq配置需要调整的加在此处
##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904
################ 微服配置 ################
#是否进行健康检查
################ \u5FAE\u670D\u914D\u7F6E ################
#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5
eureka.client.healthcheck.enabled=true
#若无法连接注册中心,是否需要一直检测加入
#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165
impp.cluster.fetch=true
#集群名
#\u96C6\u7FA4\u540D
eureka.instance.metadata-map.cluster=impp_cluster
#(参数配置)注册中心地址 -》 i3plus-ics多个用逗号分隔
#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694
eureka.client.service-url.defaultZone=${impp.cluster.regist.center}
#本服务主机ip若多个网卡则需要设置本服务ip
#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09
eureka.instance.ip-address=${impp.server.ip}
#本服务实例ID
#\u672C\u670D\u52A1\u5B9E\u4F8BID
eureka.instance.instance-id=${impp.server.ip}:${server.port}
#本服务主机名
#\u672C\u670D\u52A1\u4E3B\u673A\u540D
eureka.instance.hostname=${impp.server.ip}
#本服务状态页面
#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762
eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html
#将自己的IP注册到Eureka Server。若不配置或设置为false表示注册微服务所在操作系统的hostname到Eureka Server
#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518C\u5FAE\u670D\u52A1\u6240\u5728\u64CD\u4F5C\u7CFB\u7EDF\u7684hostname\u5230Eureka Server
eureka.instance.prefer-ip-address=true
################ 检测机制 ################
#心跳间隔周期宕机限制30秒没反应视为宕机
################ \u68C0\u6D4B\u673A\u5236 ################
#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A
eureka.instance.lease-expiration-duration-in-seconds=30
#心跳周期
#\u5FC3\u8DF3\u5468\u671F
eureka.instance.lease-renewal-interval-in-seconds=20
#client连接Eureka服务端后的空闲等待时间默认为30 秒
#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2
eureka.client.eureka-connection-idle-timeout-seconds=1
#最初复制实例信息到eureka服务器所需的时间s默认为40秒
#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6240\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A40\u79D2
eureka.client.initial-instance-info-replication-interval-seconds=1
#间隔多长时间再次复制实例信息到eureka服务器默认为30秒
#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2
eureka.client.instance-info-replication-interval-seconds=1
#从eureka服务器注册表中获取注册信息的时间间隔s默认为30秒
#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2
eureka.client.registry-fetch-interval-seconds=1
################ 熔断配置 ################
#重试
################ \u7194\u65AD\u914D\u7F6E ################
#\u91CD\u8BD5
ribbon.maxAutoRetries=2
#读取数据时长
#\u8BFB\u53D6\u6570\u636E\u65F6\u957F
ribbon.ReadTimeout=30000
#连接时长
#\u8FDE\u63A5\u65F6\u957F
ribbon.ConnectTimeout=50000
#响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长)
#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\u53CA\u8FDE\u63A5\u65F6\u957F\uFF09
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000
################ 链路追踪 ################
#使用web方式传输信息
################ \u94FE\u8DEF\u8FFD\u8E2A ################
#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F
spring.zipkin.sender.type=web
#链路追踪服务的地址
#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740
spring.zipkin.base-url=${impp.console.ip}
#追踪深度百分比1是全部
#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8
spring.sleuth.sampler.probability=1.0
################ FastDfs 配置 ################
#tracker服务器ip
################ FastDfs \u914D\u7F6E ################
#tracker\u670D\u52A1\u5668ip
fastdfs.tracker_servers=tracker:22122
# tracker的http端口
# tracker\u7684http\u7AEF\u53E3
fastdfs.http_tracker_http_port=22122
# 使用自定义工具获取文件展示地址
# \u4F7F\u7528\u81EA\u5B9A\u4E49\u5DE5\u5177\u83B7\u53D6\u6587\u4EF6\u5C55\u793A\u5730\u5740
fastdfs.http.ui.host=http://tracker:22122
#密码
#\u5BC6\u7801
#fastdfs.http.secret_key=
#连接超时
#\u8FDE\u63A5\u8D85\u65F6
fastdfs.connect_timeout_in_seconds=5
#传输超时
#\u4F20\u8F93\u8D85\u65F6
fastdfs.network_timeout_in_seconds=60
fastdfs.charset=UTF-8
# token 防盗链功能
# token \u9632\u76D7\u94FE\u529F\u80FD
fastdfs.http_anti_steal_token=no
################ 授权配置 ################
################ \u6388\u6743\u914D\u7F6E ################
slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2
slm.app.id=10000

Loading…
Cancel
Save