zhou zhou
14 小时以前 f85b03552c97f935e2c5102dee08648d6ab8e782
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -16,15 +16,17 @@
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.BasContainerServiceImpl;
import com.vincent.rsf.server.manager.service.impl.BasStationAreaServiceImpl;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import lombok.Synchronized;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -56,6 +58,8 @@
    private WaitPakinService waitPakinService;
    @Autowired
    private WaitPakinItemService waitPakinItemService;
    @Autowired
    private BasStationAreaServiceImpl basStationAreaService;
    @Override
    public R getOutStockTaskItem(String barcode) {
@@ -273,7 +277,7 @@
        }
        boolean allTaskItemsFinished = allTaskItems.stream().allMatch(item -> {
            BigDecimal workQty = BigDecimal.valueOf(Objects.isNull(item.getWorkQty()) ? 0D : item.getWorkQty());
            BigDecimal qty = BigDecimal.valueOf(Objects.isNull(item.getQty()) ? 0D : item.getQty());
            BigDecimal qty = BigDecimal.valueOf(Objects.isNull(item.getAnfme()) ? 0D : item.getAnfme());
            return workQty.compareTo(qty) == 0;
        });
        if (allTaskItemsFinished) {
@@ -282,6 +286,17 @@
                    .setUpdateTime(new Date());
            if (!taskService.updateById(task)) {
                throw new CoolException("任务状态更新失败");
            }
            if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)) {
                BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
                        .eq(BasStation::getBarcode, param.getContainerNo()));
                if (!Cools.isEmpty(basStation)) {
                    basStation.setUseStatus(LocStsType.LOC_STS_TYPE_D.type);
                    basStation.setUpdateTime(new Date());
                    if (!basStationService.updateById(basStation)){
                        throw new CoolException("站点状态更新失败");
                    }
                }
            }
        }
@@ -293,7 +308,10 @@
        if (Cools.isEmpty(param.getContainerNo())) {
            throw new CoolException("无容器号");
        }
        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.getContainerNo()));
        Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
                .eq(Task::getBarcode, param.getContainerNo())
                .eq(Task::getTaskStatus, TaskStsType.AWAIT.id)
        );
        if (null == task) {
            throw new CoolException("未找到任务");
        }
@@ -304,6 +322,172 @@
                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
        return R.ok(taskItems);
    }
    @Override
    public R getOrderItem(PdaGeneralParam param) {
        WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
                .eq(WkOrder::getCode, param.getOrderNo())
                .eq(WkOrder::getType,OrderType.ORDER_OUT.type)
        );
        if (null == order) {
            throw new CoolException("未找到对应订单");
        }
        if (!order.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val) && !order.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val) ) {
            throw new CoolException("当前订单不在可执行状态");
        }
        List<WkOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                .eq(WkOrderItem::getOrderId, order.getId())
                .apply("anfme <> work_qty")
        );
        return R.ok(list);
    }
    @Override
    public R getStationArea(PdaGeneralParam param) {
        return R.ok(basStationAreaService.list());
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R productionDirectDelivery(PdaGeneralParam param,Long loginUserId) {
        WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
                .eq(WkOrder::getCode, param.getOrderNo())
                .eq(WkOrder::getType,OrderType.ORDER_OUT.type)
        );
        if (null == order) {
            throw new CoolException("未找到对应订单");
        }
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add(param.getStationAreaId().toString());
        Task task = new Task();
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
        task.setTaskCode(ruleCode)
             .setOrgSite(param.getSta1())
            .setSort(Constants.TASK_SORT_DEFAULT_VALUE)
            .setUpdateBy(loginUserId)
            .setCreateBy(loginUserId)
            .setCreateTime(new Date())
            .setUpdateTime(new Date())
            .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
            .setBarcode(param.getContainerNo())
            .setTargSiteArea(arrayList)
            .setTaskType(TaskType.TASK_TYPE_PDD.type);
        if (!taskService.save(task)) {
            throw new CoolException("任务创建失败!!");
        }
        List<TaskItem> taskItems = new ArrayList<>();
        param.getWkOrderItems().forEach(item -> {
            TaskItem taskItem = new TaskItem();
            BeanUtils.copyProperties(item, taskItem);
            taskItem.setTaskId(task.getId())
                    .setAnfme(item.getDemandQty())
                    .setWorkQty(0D)
                    .setBatch(item.getBatch())
                    .setUpdateBy(loginUserId)
                    .setCreateBy(loginUserId)
                    .setCreateTime(new Date())
                    .setUpdateTime(new Date())
                    .setSplrBatch(item.getBatch())
                    .setPlatWorkCode(item.getPlatWorkCode())
                    .setPlatItemId(item.getPlatItemId())
                    .setOrderType(OrderType.ORDER_OUT.type)
                    .setWkType(Short.parseShort(order.getWkType()))
                    .setSourceCode(order.getCode())
                    .setSourceId(order.getId());
            taskItems.add(taskItem);
            item.setWorkQty(item.getWorkQty()+item.getDemandQty());
        });
        if (!taskItemService.saveBatch(taskItems)) {
            throw new CoolException("任务明细生成失败!!");
        }
        if (!order.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val)) {
            order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val);
            order.setUpdateBy(loginUserId);
            order.setUpdateTime(new Date());
            if (!asnOrderService.updateById(order)){
                throw new CoolException("单据状态更新失败!!");
            }
        }
        if (!asnOrderItemService.updateBatchById(param.getWkOrderItems())) {
            throw new CoolException("单据明细更新失败!!");
        }
        return R.ok();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R finishedProductDirectOutput(PdaGeneralParam param, Long loginUserId) {
        WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
                .eq(WkOrder::getCode, param.getOrderNo())
                .eq(WkOrder::getType,OrderType.ORDER_OUT.type)
        );
        if (null == order) {
            throw new CoolException("未找到对应订单");
        }
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add(param.getStationAreaId().toString());
        Task task = new Task();
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
        task.setTaskCode(ruleCode)
                .setOrgSite(param.getSta1())
                .setSort(Constants.TASK_SORT_DEFAULT_VALUE)
                .setUpdateBy(loginUserId)
                .setCreateBy(loginUserId)
                .setCreateTime(new Date())
                .setUpdateTime(new Date())
                .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
                .setBarcode(param.getContainerNo())
                .setTargSiteArea(arrayList)
                .setTaskType(TaskType.TASK_TYPE_FPDO.type);
        if (!taskService.save(task)) {
            throw new CoolException("任务创建失败!!");
        }
        List<TaskItem> taskItems = new ArrayList<>();
        param.getWkOrderItems().forEach(item -> {
            TaskItem taskItem = new TaskItem();
            BeanUtils.copyProperties(item, taskItem);
            taskItem.setTaskId(task.getId())
                    .setAnfme(item.getDemandQty())
                    .setWorkQty(0D)
                    .setBatch(item.getBatch())
                    .setUpdateBy(loginUserId)
                    .setCreateBy(loginUserId)
                    .setCreateTime(new Date())
                    .setUpdateTime(new Date())
                    .setSplrBatch(item.getBatch())
                    .setPlatWorkCode(item.getPlatWorkCode())
                    .setPlatItemId(item.getPlatItemId())
                    .setOrderType(OrderType.ORDER_OUT.type)
                    .setWkType(Short.parseShort(order.getWkType()))
                    .setSourceCode(order.getCode())
                    .setSourceId(order.getId());
            taskItems.add(taskItem);
            item.setWorkQty(item.getWorkQty()+item.getDemandQty());
        });
        if (!taskItemService.saveBatch(taskItems)) {
            throw new CoolException("任务明细生成失败!!");
        }
        if (!order.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val)) {
            order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val);
            order.setUpdateBy(loginUserId);
            order.setUpdateTime(new Date());
            if (!asnOrderService.updateById(order)){
                throw new CoolException("单据状态更新失败!!");
            }
        }
        if (!asnOrderItemService.updateBatchById(param.getWkOrderItems())) {
            throw new CoolException("单据明细更新失败!!");
        }
        return R.ok();
    }
    @Override
@@ -522,3 +706,4 @@
                item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
    }
}