package com.vincent.rsf.server.manager.schedules; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.CheckDiffExceStatus; import com.vincent.rsf.server.manager.enums.CheckExceStatus; import com.vincent.rsf.server.manager.enums.TaskStsType; import com.vincent.rsf.server.manager.enums.TaskType; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.system.utils.SystemAuthUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * @author Ryan * @version 1.0 * @date 2025/7/18 * @description: 盘点单任务档 */ @Component public class CheckOrderSchedules { @Autowired private TaskService taskService; @Autowired private TaskItemService taskItemService; @Autowired private CheckDiffService checkDiffService; @Autowired private CheckDiffItemService checkDiffItemService; @Autowired private CheckOrderService checkOrderService; @Autowired private CheckOrderItemService checkOrderItemService; /** * @author Ryan * @date 2025/7/18 * @description: 自动获取已生成盘点任务的盘点列表 * @version 1.0 */ @Scheduled(cron = "0/25 * * * * ?") @Transactional(rollbackFor = Exception.class) public void genReCheck() { List taskItems = taskItemService.list(new LambdaQueryWrapper() .notExists("SELECT 1 FROM man_check_diff_item cdi WHERE id = cdi.task_item_id")); if (taskItems.isEmpty()) { return; } Long loginUserId = SystemAuthUtils.getLoginUserId(); Map> taskMps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getOrderId)); taskMps.keySet().forEach(orderId -> { WkOrder order = checkOrderService.getById(orderId); if (Objects.isNull(order)) { throw new CoolException("盘点单据不存在!!"); } CheckDiff checkDiff = checkDiffService.getOne(new LambdaQueryWrapper().eq(CheckDiff::getOrderId, orderId)); if (Objects.isNull(checkDiff)) { checkDiff = new CheckDiff(); checkDiff.setAnfme(order.getAnfme()) .setCheckType(order.getCheckType()) .setOrderCode(order.getCode()) .setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_ING.val) .setCreateBy(loginUserId) .setCreateTime(new Date()) .setUpdateBy(loginUserId) .setUpdateTime(new Date()) .setOrderId(order.getId()); if (!checkDiffService.save(checkDiff)) { throw new CoolException("盘点差异单保存失败!!"); } } List items = taskMps.get(orderId); List diffItems = new ArrayList<>(); CheckDiff finalCheckDiff = checkDiff; items.forEach(item -> { CheckDiffItem checkDiffItem = new CheckDiffItem(); BeanUtils.copyProperties(item, checkDiffItem); checkDiffItem.setCheckId(finalCheckDiff.getId()) .setTaskItemId(item.getId()) .setTaskId(item.getTaskId()) .setCreateBy(loginUserId) .setCreateTime(new Date()) .setUpdateBy(loginUserId) .setUpdateTime(new Date()) .setOrderCode(finalCheckDiff.getOrderCode()); diffItems.add(checkDiffItem); }); if (!checkDiffItemService.saveBatch(diffItems)) { throw new CoolException("盘点差异单保存失败!!"); } }); } }