9 changed files with 280 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(value = "customerId",required = false) 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