skyouc
2025-03-11 b3b117424d3405190cf482f9236a40295ef2a447
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -4,15 +4,19 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
import com.vincent.rsf.server.api.controller.params.ReceiptParams;
import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
import com.vincent.rsf.server.api.entity.enums.OrderWorkType;
import com.vincent.rsf.server.api.service.MobileService;
import com.vincent.rsf.server.common.config.ConfigProperties;
import com.vincent.rsf.server.common.enums.WarehouseAreaType;
import com.vincent.rsf.server.common.security.JwtSubject;
import com.vincent.rsf.server.common.utils.JwtUtil;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.mapper.*;
import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
import com.vincent.rsf.server.manager.service.WarehouseAreasService;
import com.vincent.rsf.server.system.constant.CodeRes;
import com.vincent.rsf.server.system.controller.param.LoginParam;
import com.vincent.rsf.server.system.controller.result.LoginResult;
@@ -22,6 +26,7 @@
import com.vincent.rsf.server.system.mapper.TenantMapper;
import com.vincent.rsf.server.system.mapper.UserMapper;
import com.vincent.rsf.server.system.service.UserLoginService;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.tika.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -52,11 +57,14 @@
    private UserMapper userService;
    @Autowired
    private UserLoginService userLoginService;
    @Autowired
    private WarehouseAreasItemService warehouseAreasItemService;
    @Autowired
    private WarehouseAreasService warehouseAreasService;
    @Resource
    private AsnOrderItemMapper asnOrderItemMapper;
    @Resource
    private AsnOrderMapper asnOrderMapper;
    @Resource
    private MatnrMapper matnrMapper;
    @Resource
@@ -114,11 +122,125 @@
        if (StringUtils.isEmpty(barcode)) {
            return R.error("标签码不能为空!!");
        }
        ReceiptDetlsDto detlsDto = new ReceiptDetlsDto();
        AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode));
        if (Objects.isNull(asnOrderItem)) {
            throw new CoolException("单据明细不存在!!");
        }
        return getAsnOrderItem(asnOrderItem);
    }
    /**
     * @author Ryan
     * @description 收货至收货区
     * @param  params
     * @return
     * @time 2025/3/10 15:41
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R receiptToWarehouse(ReceiptParams params) {
        if (params.getReceipts().isEmpty()) {
            throw new CoolException("收货明细不能为空!!");
        }
        if (Objects.isNull(params.getWhAreaId())) {
            throw new CoolException("库区标识不能为空!!");
        }
        WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getId, params.getWhAreaId()));
        if (Objects.isNull(areasItem)) {
            throw new CoolException("数据错误:当前库区不存在!!");
        }
        List<ReceiptDetlsDto> receipts = params.getReceipts();
        List<WarehouseAreasItem> allOrders =   new ArrayList<>();
        receipts.forEach(dto -> {
            Matnr matnr = matnrMapper.selectById(dto.getMatnrId());
            if (Objects.isNull(matnr)) {
                throw new CoolException("数据错误:当前物料不存在!!");
            }
            WarehouseAreasItem item = new WarehouseAreasItem();
            item.setBarcode(dto.getBarcode())
                    .setAreaName(areasItem.getName())
                    .setAreaId(areasItem.getId())
                    .setStockUnit(dto.getStockUnit())
                    .setBatch(SerialRuleUtils.generateRuleCode("sys_receipt_batch", dto))
                    .setAnfme(dto.getReceiptQty())
                    .setSplrBtch(dto.getSplrBatch())
                    .setMatnrCode(matnr.getCode())
                    .setMatnrId(matnr.getId())
                    .setMatnrName(matnr.getName())
                    //库存单位为最小单位
                    .setUnit(dto.getStockUnit())
                    .setStockUnit(dto.getStockUnit())
                    .setWeight(matnr.getWeight())
                    .setShipperId(matnr.getShipperId());
                    //TODO 供应商标识未设置,标识由PO单供应商编码转换
            allOrders.add(item);
        });
        if (!warehouseAreasItemService.saveBatch(allOrders)) {
            throw new CoolException("收货失败!!");
        }
        return R.ok("操作成功");
    }
    /**
     * @author Ryan
     * @description 其它收货
     * @param params
     * @return
     */
    @Override
    public R otherReceipt(OtherReceiptParams params) {
        if (Objects.isNull(params.getAsnCode())) {
            throw new CoolException("通知单不能为空!!");
        }
        if (Objects.isNull(params.getBarcode())) {
            throw new CoolException("物料编码不能为空!!");
        }
        AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>()
                .eq(AsnOrderItem::getAsnCode, params.getAsnCode())
                .eq(AsnOrderItem::getBarcode, params.getBarcode()));
        if (Objects.isNull(asnOrderItem)) {
            throw new CoolException("单据明细不存在!!");
        }
       return getAsnOrderItem(asnOrderItem);
    }
    /**
     * @author Ryan
     * @description 获取所有通知单
     * @return
     */
    @Override
    public List<AsnOrder> getAllAsnOrders() {
        List<AsnOrder> asnOrders = asnOrderMapper.selectList(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_PURCHASE_IN.type));
        return asnOrders;
    }
    /**
     * @author Ryan
     * @description 获取收货区
     * @param
     * @return
     * @time 2025/3/11 10:12
     */
    @Override
    public R getReceiptAreas() {
        return R.ok(warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type)));
    }
    /**
     * 获取ReceiptDetlsDto
     */
    private R getAsnOrderItem(AsnOrderItem asnOrderItem) {
        ReceiptDetlsDto detlsDto = new ReceiptDetlsDto();
        detlsDto.setAsnCode(asnOrderItem.getAsnCode())
                .setMatnk(asnOrderItem.getMatnk())
                .setBarcode(asnOrderItem.getBarcode())
@@ -136,8 +258,10 @@
                .setStockUnit(matnr.getStockUnit());
        QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>()
                .eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId()));
        //set 质检结果
        detlsDto.setInspect(inspect.getStatus$());
        if (!Objects.isNull(inspect)) {
            //set 质检结果
            detlsDto.setInspect(inspect.getStatus$());
        }
        //获取当前库存信息
        StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>()
                .eq(StockItem::getAsnItemId, asnOrderItem.getId())
@@ -157,56 +281,5 @@
        return R.ok(detlsDto);
    }
    /**
     * @author Ryan
     * @description 收货至收货区
     * @param  params
     * @return
     * @time 2025/3/10 15:41
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R receiptToWarehouse(ReceiptParams params) {
        if (params.getReceipts().isEmpty()) {
            throw new CoolException("收货明细不能为空!!");
        }
        if (Objects.isNull(params.getWhAreaId())) {
            throw new CoolException("库区标识不能为空!!");
        }
        WarehouseAreasItem areasItem = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getAreaId, params.getWhAreaId()));
        List<ReceiptDetlsDto> receipts = params.getReceipts();
        List<WarehouseAreasItem> allOrders =   new ArrayList<>();
        receipts.forEach(dto -> {
            Matnr matnr = matnrMapper.selectById(dto.getMatnrId());
            if (Objects.isNull(matnr)) {
                throw new CoolException("数据错误:当前物料不存在!!");
            }
            WarehouseAreasItem item = new WarehouseAreasItem();
            item.setBarcode(dto.getBarcode())
                    .setAreaName(areasItem.getAreaName())
                    .setAreaId(areasItem.getAreaId())
                    .setStockUnit(dto.getStockUnit())
                    //TODO 编码规则生成批次 (物料号+日期)
                    .setBatch(null)
                    .setAnfme(dto.getReceiptQty())
                    .setSplrBtch(dto.getSplrBatch())
                    .setMatnrCode(matnr.getCode())
                    .setMatnrId(matnr.getId())
                    .setMatnrName(matnr.getName())
                    //TODO 入库单位换算
                    .setUnit(dto.getStockUnit())
                    .setStockUnit(dto.getStockUnit())
                    .setWeight(matnr.getWeight())
                    .setShipperId(matnr.getShipperId());
                    //TODO 供应商标识未设置
            allOrders.add(item);
        });
        if (!warehouseAreasItemService.saveBatch(allOrders)) {
            throw new CoolException("收货失败!!");
        }
        return R.ok("操作成功");
    }
}