skyouc
2 天以前 aecc30be4f72119829bf7f607aa6031e15fc3c0c
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -3,11 +3,13 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.common.domain.PageResult;
import com.vincent.rsf.server.manager.controller.params.OrgLocParams;
import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.*;
@@ -40,6 +42,14 @@
    private TransferOrderService transferOrderService;
    @Autowired
    private TransferService transferService;
    @Autowired
    private AsnOrderService asnOrderService;
    @Autowired
    private AsnOrderItemService asnOrderItemService;
    @Autowired
    private LocItemService locItemService;
    @Autowired
    private LocService locService;
    /**
     * @author Ryan
@@ -239,13 +249,66 @@
        }
        TransferOrder transferOrder = new TransferOrder();
        transferOrder.setTransferId(transfer.getId()).setOrderId(wkOrder.getId()).setExceStatus((int)CheckExceStatus.CHECK_ORDER_STATUS_INIT.val);
        transferOrder.setTransferId(transfer.getId())
                .setOrderId(wkOrder.getId())
                .setType(OrderType.ORDER_OUT.type);
        if (!transferOrderService.save(transferOrder)) {
            throw new CoolException("单据关联失败!!");
        }
        try {
            /**生成入库单据信息*/
            genInStock(wkOrder, orderItems);
        } catch (Exception e) {
            throw new CoolException(e.getMessage());
        }
        return transfer;
    }
    /**
     * @author Ryan
     * @date 2025/7/29
     * @description: TODO
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
    public void genInStock(WkOrder wkOrder, List<WkOrderItem> orderItems) throws Exception {
        WkOrder order = new WkOrder();
        BeanUtils.copyProperties(wkOrder, order);
        order.setType(OrderType.ORDER_IN.type)
                .setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)
                .setId(null);
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, order);
        if (StringUtils.isBlank(ruleCode)) {
            throw new CoolException("入库单号生成失败!!");
        }
        order.setCode(ruleCode);
        if (!asnOrderService.save(order)) {
            throw new CoolException("单据保存失败!!");
        }
        orderItems.forEach(item -> {
            item.setOrderId(order.getId())
                    .setOrderCode(order.getCode())
                    .setId(null);
            if (!asnOrderItemService.save(item)) {
                throw new CoolException("入库单明细保存失败!!");
            }
        });
        TransferOrder transferOrder = new TransferOrder();
        transferOrder.setTransferId(wkOrder.getPoId())
                .setOrderId(order.getId())
                .setType(OrderType.ORDER_IN.type);
        if (!transferOrderService.save(transferOrder)) {
            throw new CoolException("单据关联失败!!");
        }
    }
    /**
@@ -273,4 +336,29 @@
        transferItemService.remove(new LambdaQueryWrapper<TransferItem>().in(TransferItem::getTransferId, list));
        return true;
    }
    /**
     * @author Ryan
     * @date 2025/7/29
     * @description: 获取原库区物料信息
     * @version 1.0
     */
    @Override
    public IPage<LocItem> getLocsItems(OrgLocParams params, Long loginUserId) {
        List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>()
                .eq(!Objects.isNull(params.getOrgAreaId()), Loc::getAreaId, params.getOrgAreaId()));
        Page<LocItem> page = new Page<>(params.getCurrent(), params.getPageSize());
        LambdaQueryWrapper<LocItem> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StringUtils.isNotBlank(params.getMatnrCode()), LocItem::getMatnrCode, params.getMatnrCode().trim())
                .like(StringUtils.isNotBlank(params.getMaktx().trim()), LocItem::getMaktx, params.getMaktx().trim());
        if (!locs.isEmpty()) {
            Set<Long> locIds = locs.stream().map(Loc::getId).collect(Collectors.toSet());
            wrapper.in(LocItem::getLocId, locIds);
            return locItemService.page(page, wrapper);
        } else {
            return locItemService.page(page, wrapper);
        }
    }
}