11 changed files with 287 additions and 2 deletions
			
			
		| @ -0,0 +1,36 @@ | |||
| package com.epmet.task.ic; | |||
| 
 | |||
| import com.epmet.commons.tools.utils.Result; | |||
| import com.epmet.feign.EpmetUserOpenFeignClient; | |||
| import com.epmet.task.ITask; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.stereotype.Component; | |||
| 
 | |||
| import javax.annotation.Resource; | |||
| 
 | |||
| /** | |||
|  * desc:定时弥补数据 保证数据的一致性 | |||
|  */ | |||
| @Slf4j | |||
| @Component("icDataSyncTask") | |||
| public class IcDataSyncTask implements ITask { | |||
| 
 | |||
|     @Resource | |||
|     private EpmetUserOpenFeignClient epmetUserOpenFeignClient; | |||
| 
 | |||
|     /** | |||
|      * 执行定时任务接口 | |||
|      * | |||
|      * @param params 参数,多参数使用JSON数据 | |||
|      */ | |||
|     @Override | |||
|     public void run(String customerId) { | |||
|         log.info("icDataSyncTask定时任务正在执行,参数为customerId:{}", customerId); | |||
|         Result result = epmetUserOpenFeignClient.icDataSyncTask(customerId); | |||
|         if (result.success()) { | |||
|             log.info("icDataSyncTask定时任务正在执行定时任务执行成功"); | |||
|         } else { | |||
|             log.warn("icDataSyncTask定时任务正在执行定时任务执行失败:" + result.getMsg()); | |||
|         } | |||
|     } | |||
| } | |||
| @ -0,0 +1,101 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * This program is free software: you can redistribute it and/or modify | |||
|  * it under the terms of the GNU General Public License as published by | |||
|  * the Free Software Foundation, either version 3 of the License, or | |||
|  * (at your option) any later version. | |||
|  * <p> | |||
|  * This program is distributed in the hope that it will be useful, | |||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
|  * GNU General Public License for more details. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| package com.epmet.controller; | |||
| 
 | |||
| import com.epmet.commons.tools.distributedlock.DistributedLock; | |||
| import com.epmet.commons.tools.feign.ResultDataResolver; | |||
| import com.epmet.commons.tools.redis.RedisKeys; | |||
| import com.epmet.commons.tools.redis.RedisUtils; | |||
| import com.epmet.commons.tools.utils.Result; | |||
| import com.epmet.service.IcResiUserDataSyncService; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.redisson.api.RLock; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| 
 | |||
| import java.util.Map; | |||
| import java.util.concurrent.TimeUnit; | |||
| 
 | |||
| 
 | |||
| /** | |||
|  * 用户基础信息同步计算入口 | |||
|  * | |||
|  * @author generator generator@elink-cn.com | |||
|  * @since v1.0.0 2021-10-26 | |||
|  */ | |||
| @Slf4j | |||
| @RestController | |||
| @RequestMapping("icResiUserDataSync") | |||
| public class IcResiUserDataSyncController implements ResultDataResolver { | |||
| 
 | |||
|     @Autowired | |||
|     private IcResiUserDataSyncService icResiUserDataSyncService; | |||
|     @Autowired | |||
|     private RedisUtils redisUtils; | |||
|     @Autowired | |||
|     private DistributedLock distributedLock; | |||
| 
 | |||
| 
 | |||
|     /** | |||
|      * 获取录入居民的数量 | |||
|      * | |||
|      * @Param formDTO | |||
|      * @Return {@link Result<Map<String, Integer>>} | |||
|      * @Author zhaoqifeng | |||
|      * @Date 2022/6/30 9:35 | |||
|      */ | |||
|     @PostMapping("icDataSyncTask") | |||
|     public Result<Boolean> icDataSyncTask(@RequestParam("customerId") String customerId) { | |||
|         RLock lock = null; | |||
|         String key = RedisKeys.getDataSyncKey("resi"); | |||
|         try { | |||
|             lock = distributedLock.getLock(RedisKeys.getLockByMethodName("icDataSyncTask"), | |||
|                     30L, 30L, TimeUnit.SECONDS); | |||
|             if (StringUtils.isBlank(customerId)) { | |||
|                 Object customerIdObj = redisUtils.sPop(key); | |||
|                 while (customerIdObj != null) { | |||
|                     try { | |||
|                         icResiUserDataSyncService.icDataSyncTask(customerIdObj.toString()); | |||
|                         log.debug("icDataSyncTask customerId:{} execute success", customerIdObj); | |||
| 
 | |||
|                         customerIdObj = redisUtils.sPop(key); | |||
|                     } catch (Exception e) { | |||
|                         log.error("icDataSyncTask exception msg:{},customerId:{}", e.getMessage(), customerIdObj); | |||
|                         redisUtils.sAdd(key, customerIdObj); | |||
|                     } | |||
|                     log.debug("icDataSyncTask finish customerId:{} execute success", customerIdObj); | |||
|                 } | |||
|             } else { | |||
|                 icResiUserDataSyncService.icDataSyncTask(customerId); | |||
|                 log.debug("icDataSyncTask customerId:{} execute success", customerId); | |||
|             } | |||
|         } catch (Exception e) { | |||
|             if (StringUtils.isNotBlank(customerId)) { | |||
|                 redisUtils.sAdd(key, customerId); | |||
|             } | |||
|             log.error("icDataSyncTask exception msg:{},customerId:{}", e.getMessage(), customerId); | |||
|         } finally { | |||
|             distributedLock.unLock(lock); | |||
|         } | |||
|         return new Result<Boolean>().ok(true); | |||
|     } | |||
| } | |||
| @ -0,0 +1,36 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * This program is free software: you can redistribute it and/or modify | |||
|  * it under the terms of the GNU General Public License as published by | |||
|  * the Free Software Foundation, either version 3 of the License, or | |||
|  * (at your option) any later version. | |||
|  * <p> | |||
|  * This program is distributed in the hope that it will be useful, | |||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
|  * GNU General Public License for more details. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| package com.epmet.service; | |||
| 
 | |||
| /** | |||
|  * 用户基础信息 | |||
|  * | |||
|  * @author generator generator@elink-cn.com | |||
|  * @since v1.0.0 2021-10-26 | |||
|  */ | |||
| public interface IcResiUserDataSyncService { | |||
|     /** | |||
|      * desc: 同步与居民相关的数据 | |||
|      * | |||
|      * @param customerId | |||
|      * @return java.lang.String | |||
|      * @author LiuJanJun | |||
|      * @date 2022/7/16 8:06 下午 | |||
|      */ | |||
|     Boolean icDataSyncTask(String customerId); | |||
| } | |||
| @ -0,0 +1,55 @@ | |||
| package com.epmet.service.impl; | |||
| 
 | |||
| import com.epmet.service.IcResiUserDataSyncService; | |||
| import com.epmet.service.IcResiUserService; | |||
| import com.epmet.service.StatsResiWarnService; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| 
 | |||
| import java.util.concurrent.ExecutorService; | |||
| 
 | |||
| /** | |||
|  * desc: | |||
|  * | |||
|  * @author: LiuJanJun | |||
|  * @date: 2022/7/16 8:07 下午 | |||
|  * @version: 1.0 | |||
|  */ | |||
| @Slf4j | |||
| @Service | |||
| public class IcResiUserDataSyncServiceImpl implements IcResiUserDataSyncService { | |||
| 
 | |||
|     @Autowired | |||
|     private IcResiUserService icResiUserService; | |||
|     @Autowired | |||
|     private StatsResiWarnService statsResiWarnService; | |||
|     @Autowired | |||
|     private ExecutorService executorService; | |||
| 
 | |||
|     /** | |||
|      * desc: 同步与居民相关的数据 | |||
|      * | |||
|      * @param customerId | |||
|      * @return java.lang.String | |||
|      * @author LiuJanJun | |||
|      * @date 2022/7/16 8:06 下午 | |||
|      */ | |||
|     @Override | |||
|     public Boolean icDataSyncTask(String customerId) { | |||
|         Boolean flag = true; | |||
|         try { | |||
|             statsResiWarnService.resiWarn(customerId); | |||
|         } catch (Exception e) { | |||
|             flag = false; | |||
|             log.error("icDataSyncTask resiWarn exception:{}", e.getMessage(), customerId); | |||
|         } | |||
|         try { | |||
|             icResiUserService.updateIcHouseResiNumber(customerId); | |||
|         } catch (Exception e) { | |||
|             flag = false; | |||
|             log.error("icDataSyncTask updateIcHouseResiNumber exception:{}", e.getMessage(), customerId); | |||
|         } | |||
|         return flag; | |||
|     } | |||
| } | |||
					Loading…
					
					
				
		Reference in new issue