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<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
|
.notExists("SELECT 1 FROM man_check_diff_item cdi WHERE id = cdi.task_item_id"));
|
if (taskItems.isEmpty()) {
|
return;
|
}
|
Long loginUserId = SystemAuthUtils.getLoginUserId();
|
Map<Long, List<TaskItem>> 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<CheckDiff>().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<TaskItem> items = taskMps.get(orderId);
|
List<CheckDiffItem> 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("盘点差异单保存失败!!");
|
}
|
});
|
}
|
}
|