package com.vincent.rsf.server.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.server.api.entity.enums.OrderType; import com.vincent.rsf.server.api.entity.enums.TaskStsType; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.entity.enums.TaskType; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.mapper.TaskMapper; import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.manager.utils.LocManageUtil; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Service("taskService") public class TaskServiceImpl extends ServiceImpl implements TaskService { @Autowired private WaitPakinService waitPakinService; @Autowired private TaskItemService taskItemService; @Autowired private WaitPakinItemService waitPakinItemService; /** * @param * @param loginUserId * @return * @author Ryan * @description 生成任务列表 * @time 2025/3/29 15:59 */ @Override public R generateTasks(List waitPakin, Long loginUserId) { if (Objects.isNull(waitPakin) || waitPakin.isEmpty()) { throw new CoolException("参数不能为空!!"); } /**获取组拖*/ List ids = waitPakin.stream().map(WaitPakin::getId).collect(Collectors.toList()); List waitPakins = waitPakinService.list(new LambdaQueryWrapper().in(WaitPakin::getId, ids)); if (waitPakins.isEmpty()) { throw new CoolException("组拖信息不存在!!"); } waitPakins.forEach(pakin -> { List taskItems = new ArrayList<>(); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); if (StringUtils.isBlank(ruleCode)) { throw new CoolException("编码错误:请确认编码「SYS_TASK_CODE」是否已生成!!"); } Task task = new Task(); task.setTaskCode(ruleCode) .setTaskStatus(TaskStsType.GENERATE_IN.id.shortValue()) .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue()) .setTargLoc(LocManageUtil.getTargetLoc()) .setBarcode(pakin.getBarcode()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId) .setTargSite(LocManageUtil.getTargetSite()); if (!this.save(task)) { throw new CoolException("任务保存失败!!"); } /**获取组拖明细**/ List waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper().eq(WaitPakinItem::getPakinId, pakin.getId())); if (waitPakinItems.isEmpty()) { throw new CoolException("数据错误:组拖明细不存在"); } waitPakinItems.forEach(item -> { TaskItem taskItem = new TaskItem(); BeanUtils.copyProperties(item, taskItem); taskItem.setTaskId(task.getId()) .setOrderType(OrderType.ORDER_RECEIPT.type) .setSource(item.getId()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId) .setOrderId(item.getAsnId()) .setOrderItemId(item.getAsnItemId()); taskItems.add(taskItem); }); if (!taskItemService.saveBatch(taskItems)) { throw new CoolException("任务明细保存失败!!"); } }); //TODO 任务生成完成需修改任务ASN订单状态为执行中,组拖删除需判断是否有子任务在执行 return R.ok("任务生成完毕!"); } }