Commit 6018f990 by zhoupeng

提交导入组织架构openapi接口

parent 147943bf
......@@ -82,44 +82,6 @@
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.rome.public</groupId>
<artifactId>arch-elastic-job-starter</artifactId>
<version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.3.3</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.hive</groupId>
<artifactId>hive-shims</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
......
package com.rome.order.api.controller;
import com.rome.arch.core.clientobject.Response;
import com.rome.order.domain.service.SyncTsaProductService;
import com.rome.order.domain.service.SyncTsaProductV2Service;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/v1/produt")
@Api(value = "同步商品", tags = "同步商品")
public class SyncProductController {
@Resource
private SyncTsaProductService syncTsaProductService;
@Resource
private SyncTsaProductV2Service syncTsaProductV2Service;
// @GetMapping("/syncAllProduct")
// @ApiOperation(value = "syncAllProduct同步商品")
// private void syncAllProduct() {
// syncTsaProductService.syncAllProduct();
// }
@GetMapping("/syncSingleProduct")
@ApiOperation(value = "同步指定sku编码商品到商品库")
public Response<Boolean> syncSingleProduct(@RequestParam(value = "skuKey") String skuKey){
return Response.builderSuccess(syncTsaProductService.syncSingleProduct(skuKey));
}
@GetMapping("/syncAllProduct")
@ApiOperation(value = "syncAllProduct同步商品")
private void syncAllProductV2() {
syncTsaProductV2Service.syncAllProduct();
}
}
package com.rome.order.domain.service;
public interface SyncTsaProductService {
/**
* 全量同步商品到商品库
*/
void syncAllProduct();
/**
* 同步指定sku编码商品
*/
Boolean syncSingleProduct(String skuKey);
}
package com.rome.order.domain.service;
public interface SyncTsaProductV2Service {
/**
* 全量同步商品到商品库
*/
void syncAllProduct();
}
//package com.rome.order.domain.task;
//
//import com.rome.order.domain.service.SyncEmployeService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.shardingsphere.elasticjob.api.ShardingContext;
//import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * @Author: zhoupeng
// * @createTime: 2023年04月27日 10:42:35
// * @version: 1.0
// * @Description: 全量同步查询员工(基础信息),每天凌晨12点钟执行
// * @copyright:
// */
//@Component
//@Slf4j
//public class SynAllEmpBaseJob implements DataflowJob {
//
// @Resource
// private SyncEmployeService syncEmployeService;
//
// @Override
// public List fetchData(ShardingContext shardingContext) {
// List list=new ArrayList();
// list.add("ceshi");
// return list;
// }
//
// @Override
// public void processData(ShardingContext shardingContext, List list) {
// log.info("------synAllEmpBaseJob全量同步查询员工(基础信息) 定时器-------");
// syncEmployeService.synAllEmpBase(null);
// }
//}
package com.rome.order.domain.task;
import com.rome.order.domain.service.SyncEmployeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zhoupeng
* @createTime: 2023年04月27日 10:47:44
* @version: 1.0
* @Description: 同步根据更新时间查询员工(基础信息) 1小时一次
* @copyright:
*/
@Component
@Slf4j
public class SynByStartDateEmpBaseJob implements DataflowJob {
@Autowired
private SyncEmployeService syncEmployeService;
@Override
public List fetchData(ShardingContext shardingContext) {
List list=new ArrayList();
list.add("ceshi");
return list;
}
@Override
public void processData(ShardingContext shardingContext, List list) {
log.info("------synByStartDateEmpBaseJob同步根据更新时间查询员工(基础信息) 定时器-------");
syncEmployeService.synByStartDateEmpBase(null);
}
}
package com.rome.order.domain.task;
import com.rome.order.domain.service.SyncEmployeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zhoupeng
* @createTime: 2023年04月27日 10:52:04
* @version: 1.0
* @Description: 同步失败员工信息补偿 半个小时一次
* @copyright:
*/
@Component
@Slf4j
public class SynFailEmployeeJob implements DataflowJob {
@Autowired
private SyncEmployeService syncEmployeService;
@Override
public List fetchData(ShardingContext shardingContext) {
List list=new ArrayList();
list.add("ceshi");
return list;
}
@Override
public void processData(ShardingContext shardingContext, List list) {
log.info("------synFailEmployeeJob同步失败员工信息补偿 定时器-------");
syncEmployeService.synFailEmployee();
}
}
package com.rome.order.domain.task;
import com.rome.order.domain.service.SyncEmployeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zhoupeng
* @createTime: 2023年04月27日 10:50:17
* @version: 1.0
* @Description: 同步失败绑定第三方账号进行补偿 半个小时一次
* @copyright:
*/
@Component
@Slf4j
public class SynFailGenerateAccountJob implements DataflowJob {
@Autowired
private SyncEmployeService syncEmployeService;
@Override
public List fetchData(ShardingContext shardingContext) {
List list=new ArrayList();
list.add("ceshi");
return list;
}
@Override
public void processData(ShardingContext shardingContext, List list) {
log.info("------synFailGenerateAccountJob同步失败绑定第三方账号进行补偿 定时器-------");
syncEmployeService.synFailGenerateAccount();
}
}
package com.rome.order.domain.task;
import com.rome.order.domain.service.OrganizationService;
import com.rome.order.domain.service.OrganizationV2Service;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zhoupeng
* @createTime: 2023年04月27日 10:56:53
* @version: 1.0
* @Description:
* @copyright:
*/
@Component
@Slf4j
public class SynFailOrgJob implements DataflowJob {
@Autowired
private OrganizationService organizationService;
@Autowired
private OrganizationV2Service organizationV2Service;
@Override
public List fetchData(ShardingContext shardingContext) {
List list=new ArrayList();
list.add("ceshi");
return list;
}
@Override
public void processData(ShardingContext shardingContext, List list) {
log.info("------synFailOrgJob同步失败的组织机构任务补偿 定时器-------");
organizationV2Service.synFailOrg();
}
}
package com.rome.order.domain.task;
import com.rome.order.domain.service.OrganizationService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zhoupeng
* @createTime: 2023年04月27日 10:53:57
* @version: 1.0
* @Description: syncAllOrg同步组织架构 每天晚上11点
* @copyright:
*/
@Component
@Slf4j
public class SyncAllOrgJob implements DataflowJob {
@Autowired
private OrganizationService organizationService;
@Override
public List fetchData(ShardingContext shardingContext) {
List list=new ArrayList();
list.add("ceshi");
return list;
}
@Override
public void processData(ShardingContext shardingContext, List list) {
log.info("------syncAllOrgJob同步组织架构 定时器-------");
organizationService.synAllOrg(null);
}
}
package com.rome.order.domain.task;
import com.rome.order.domain.service.SyncTsaProductV2Service;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zhoupeng
* @createTime: 2023年04月27日 10:53:57
* @version: 1.0
* @Description: syncAllOrg同步组织架构 每天晚上11点
* @copyright:
*/
@Component
@Slf4j
public class SyncProductJob implements DataflowJob {
@Autowired
private SyncTsaProductV2Service syncTsaProductV2Service;
@Override
public List fetchData(ShardingContext shardingContext) {
List list=new ArrayList();
list.add("ceshi");
return list;
}
@Override
public void processData(ShardingContext shardingContext, List list) {
log.info("------SyncProductJob同步商品 定时器-------");
syncTsaProductV2Service.syncAllProduct();
}
}
package com.rome.order.domain.util;
import org.apache.commons.net.util.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Date;
/**
* @Author: zhoupeng
* @createTime: 2023年08月28日 17:39:12
* @version: 1.0
* @Description:
* @copyright:
*/
public class HmacSHA256Util {
/**
* HmacSHA256算法,返回的结果始终是32位
*
* @param key 加密的键,可以是任何数据
* @param content 待加密的内容
* @return 加密后的内容
* @throws Exception
*/
public static byte[] hmacSHA256(byte[] key, byte[] content) throws Exception {
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
hmacSha256.init(new SecretKeySpec(key, 0, key.length, "HmacSHA256"));
byte[] hmacSha256Bytes = hmacSha256.doFinal(content);
return hmacSha256Bytes;
}
/**
* 将加密后的字节数组转换成字符串
*
* @param b 字节数组
* @return 字符串
*/
public static String byteArrayToHexString(byte[] b) {
StringBuilder hs = new StringBuilder();
String stmp;
for (int n = 0; b != null && n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1)
hs.append('0');
hs.append(stmp);
}
return hs.toString().toLowerCase();
}
/**
* sha256_HMAC加密
*
* @param message 消息
* @param secret 秘钥
* @return 加密后字符串
*/
public static String hmacSHA256(String secret, String message) throws Exception {
String hash = "";
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
hmacSha256.init(secret_key);
byte[] bytes = hmacSha256.doFinal(message.getBytes());
hash = byteArrayToHexString(bytes);
return hash;
}
/**
* 获取请求头sign
* @return
*/
public static String getSign(String secret,String message){
try {
String str = HmacSHA256Util.hmacSHA256(secret, message);
String encodeStr = Base64.encodeBase64String(str.getBytes());
return encodeStr;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String enterpriseId = "10000001";
String timestamp = DateUtils.convert(new Date(), DateUtils.YYYYMMDDHHMMSS);
// HMAC-SHA256(enterpriseId+ timestamp+去除节点间的空格及换行符的请求体)
String message = enterpriseId + timestamp;
System.out.println("加密前 =========>" + message);
String str = "";
try {
str = HmacSHA256Util.hmacSHA256(enterpriseId, timestamp);
String encodeStr = Base64.encodeBase64String(str.getBytes());
System.out.println("加密后 =========>" + str);
} catch (Exception e) {
System.out.println("Error HmacSHA256 ===========>" + e.getMessage());
}
}
}
package com.rome.order.infrastructure.message.consumer;
import com.alibaba.fastjson.JSON;
import com.rome.arch.core.exception.RomeException;
import com.rome.order.domain.constant.MQConstants;
import com.rome.order.domain.enums.RomeExceptionEnum;
import com.rome.order.domain.service.CusOffAccWecomService;
import com.rome.order.infrastructure.message.dto.MqOffAccAndWecomDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.common.UtilAll;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author 沉煜科技
*/
@Slf4j
@Component
@RocketMQMessageListener(topic = MQConstants.CRM_TOPIC, selectorExpression = MQConstants.WX_LYF_CUS_OFFACC_FOLLOW_OR_CANCEL_TAG, consumerGroup = MQConstants.LYF_QIDIAN_API_OFFACC_FOLLOW_OR_CANCEL)
public class CusOffAccFollowOrCancleConsumer implements RocketMQListener<MessageExt>, RocketMQPushConsumerLifecycleListener {
@Autowired
private CusOffAccWecomService offAccFollowOrCancelService;
@Override
public void onMessage(MessageExt messageExt) {
MqOffAccAndWecomDTO offAccDTO = JSON.parseObject(messageExt.getBody(), MqOffAccAndWecomDTO.class);
log.info("公众号关注取关消息体offAccDTO:{}",JSON.toJSONString(offAccDTO));
try {
offAccFollowOrCancelService.offAccFollowOrCancel(offAccDTO);
} catch (Exception e) {
log.error("公众号关注取关处理异常,{}", JSON.toJSONString(offAccDTO));
throw new RomeException(RomeExceptionEnum.MQ_EXCEPTION.getCode(),RomeExceptionEnum.MQ_EXCEPTION.getMsg());
}
}
@Override
public void prepareStart(DefaultMQPushConsumer defaultMqPushConsumer) {
defaultMqPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_TIMESTAMP);
defaultMqPushConsumer.setConsumeTimestamp(UtilAll.timeMillisToHumanString3(System.currentTimeMillis()));
}
}
package com.rome.order.infrastructure.message.consumer;
import com.alibaba.fastjson.JSON;
import com.rome.arch.core.exception.RomeException;
import com.rome.order.domain.constant.MQConstants;
import com.rome.order.domain.enums.RomeExceptionEnum;
import com.rome.order.domain.service.CusOffAccWecomService;
import com.rome.order.infrastructure.message.dto.MqOffAccAndWecomDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.common.UtilAll;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author 沉煜科技
*/
@Slf4j
@Component
@RocketMQMessageListener(topic = MQConstants.CRM_TOPIC, selectorExpression = MQConstants.WX_LYF_CUS_WECOM_ADD_OR_DELETE_TAG, consumerGroup = MQConstants.LYF_QIDIAN_API_WECOM_ADD_OR_DELETE)
public class WecomAddOrDeleteConsumer implements RocketMQListener<MessageExt>, RocketMQPushConsumerLifecycleListener {
@Autowired
private CusOffAccWecomService cusOffAccWecomService;
@Override
public void onMessage(MessageExt messageExt) {
MqOffAccAndWecomDTO offAccDTO = JSON.parseObject(messageExt.getBody(), MqOffAccAndWecomDTO.class);
log.info("用户添加or删除来伊份门店导购企微消息体offAccDTO:{}",JSON.toJSONString(offAccDTO));
try {
cusOffAccWecomService.wecomAddOrDelete(offAccDTO);
} catch (Exception e) {
log.error("用户添加or删除来伊份门店导购企微处理异常,{}", JSON.toJSONString(offAccDTO));
throw new RomeException(RomeExceptionEnum.MQ_EXCEPTION.getCode(),RomeExceptionEnum.MQ_EXCEPTION.getMsg());
}
}
@Override
public void prepareStart(DefaultMQPushConsumer defaultMqPushConsumer) {
defaultMqPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_TIMESTAMP);
defaultMqPushConsumer.setConsumeTimestamp(UtilAll.timeMillisToHumanString3(System.currentTimeMillis()));
}
}
......@@ -54,44 +54,8 @@ server:
io-threads: 16
buffer-size: 1024
port: 8089
elasticjob:
jobs:
SynByStartDateEmpBaseJob:
shardingItemParameters: 0=0
elasticJobClass: com.rome.order.domain.task.SynByStartDateEmpBaseJob
cron: 0 0 0/1 * * ?
shardingTotalCount: 1
# SynFailEmployeeJob:
# shardingItemParameters: 0=0
# elasticJobClass: com.rome.order.domain.task.SynFailEmployeeJob
# cron: 0 0/30 * * * ?
# shardingTotalCount: 1
# SyncAllOrgJob:
# shardingItemParameters: 0=0
# elasticJobClass: com.rome.order.domain.task.SyncAllOrgJob
# cron: 0 0 23 * * ?
# shardingTotalCount: 1
# SynFailOrgJob:
# shardingItemParameters: 0=0
# elasticJobClass: com.rome.order.domain.task.SynFailOrgJob
# cron: 0 0/30 * * * ?
# shardingTotalCount: 1
# SyncProductJob:
# shardingItemParameters: 0=0
# elasticJobClass: com.rome.order.domain.task.SyncProductJob
# cron: 0 0 23 * * ?
# shardingTotalCount: 1
reg-center:
max-sleep-time-milliseconds: 8000
server-lists: '10.6.5.66:2181,10.6.5.67:2181,10.6.5.68:2181'
base-sleep-time-milliseconds: 8000
namespace: lyf-beidou-cdp-api
rocketmq:
nameServer: '10.6.5.12:9876'
defaultBigRetryNum: 30
producer:
group: lyf-beidou-cdp-api
defaultSmallRetryNum: 20
eureka:
client:
serviceUrl:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment