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