package com.glxp.api.task; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.dao.basic.UdiRelevanceDao; import com.glxp.api.dao.basic.YbNotCodeMapper; import com.glxp.api.dao.inout.IoCodeLostMapper; import com.glxp.api.dao.inout.IoSplitFifoCodeMapper; import com.glxp.api.dao.schedule.ScheduledDao; import com.glxp.api.dao.system.ThrYbSetupMapper; import com.glxp.api.entity.basic.UdiRelevanceEntity; import com.glxp.api.entity.basic.YbNotCode; import com.glxp.api.entity.collect.IoCollectCodeBackup; import com.glxp.api.entity.collect.IoCollectOrderBiz; import com.glxp.api.entity.inout.IoCodeEntity; import com.glxp.api.entity.inout.IoCodeLostEntity; import com.glxp.api.entity.inout.IoSplitFifoCodeEntity; import com.glxp.api.entity.system.ScheduledEntity; import com.glxp.api.entity.system.ThrYbSetup; import com.glxp.api.http.sync.SpGetHttpClient; import com.glxp.api.req.alihealth.AlihealthYljgCodedetailReqeust; import com.glxp.api.req.system.ScheduledRequest; import com.glxp.api.service.collect.IoCollectCodeBackService; import com.glxp.api.service.inout.impl.IoCodeLostServiceImpl; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @Component @EnableScheduling @Slf4j public class IoSplitFifoCodeTask implements SchedulingConfigurer { @Resource private ScheduledDao scheduledDao; @Resource private IoSplitFifoCodeMapper ioSplitFifoCodeMapper; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.addTriggerTask(() -> process(), triggerContext -> { ScheduledRequest scheduledRequest = new ScheduledRequest(); scheduledRequest.setCronName("IoSplitFifoCodeTask"); ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); String cron = scheduledEntity != null ? scheduledEntity.getCron() : "0 0 5 * * ?"; if (cron.isEmpty()) { log.error("cron is null"); } return new CronTrigger(cron).nextExecutionTime(triggerContext); }); } @Resource private SpGetHttpClient spGetHttp; @Resource private IoCodeLostMapper ioCodeLostMapper; private void process() { List list = ioSplitFifoCodeMapper.selectList( new QueryWrapper() .isNull("batchNo") .select("code") .last("limit 1000") ); if (CollUtil.isNotEmpty(list)) { int chunkSize = 30; List> ioSplitFifoCodeChunks = Lists.partition(list, chunkSize); for (List ioSplitFifoCodeChunk : ioSplitFifoCodeChunks) { List codeList = new ArrayList<>(); for (IoSplitFifoCodeEntity ioSplitFifoCodeEntity : ioSplitFifoCodeChunk) { codeList.add(ioSplitFifoCodeEntity.getCode()); } AlihealthYljgCodedetailReqeust alihealthYljgCodedetailReqeust = new AlihealthYljgCodedetailReqeust(); alihealthYljgCodedetailReqeust.setCodes(String.join(",", codeList)); BaseResponse> baseResponse = spGetHttp.codedetail(alihealthYljgCodedetailReqeust); List ioCodeLostEntityList = baseResponse.getData(); if (CollUtil.isNotEmpty(ioCodeLostEntityList)) { for (IoCodeLostEntity ioCodeLostEntity : ioCodeLostEntityList) { IoSplitFifoCodeEntity ioSplitFifoCodeEntity = new IoSplitFifoCodeEntity(); ioSplitFifoCodeEntity.setBatchNo(ioCodeLostEntity.getBatchNo()); ioSplitFifoCodeEntity.setProduceDate(ioCodeLostEntity.getProduceDate()); ioSplitFifoCodeEntity.setExpireDate(ioCodeLostEntity.getExpireDate()); ioSplitFifoCodeMapper.update(ioSplitFifoCodeEntity, new QueryWrapper().eq("code",ioCodeLostEntity.getCode()) ); IoCodeLostEntity ioCodeLostEntityNew = ioCodeLostMapper.selectOne( new QueryWrapper() .eq("code", ioCodeLostEntity.getCode()) ); if (ioCodeLostEntityNew != null) { ioCodeLostMapper.update(ioCodeLostEntity, new QueryWrapper() .eq("code", ioCodeLostEntity.getCode()) ); } else { ioCodeLostMapper.insert(ioCodeLostEntity); } } } } } } }