skyouc
2025-04-02 d510425cc8990f29ae2ec729e3f24c545fcad5ef
新增获取人工上架信息接口
2个文件已添加
6个文件已修改
133 ■■■■ 已修改文件
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OpStockParams.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/OperateStockDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -1,14 +1,13 @@
package com.vincent.rsf.server.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.params.CheckObjParams;
import com.vincent.rsf.server.api.controller.params.OpStockParams;
import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
import com.vincent.rsf.server.api.controller.params.ReceiptParams;
import com.vincent.rsf.server.api.service.MobileService;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
import com.vincent.rsf.server.manager.entity.AsnOrderItem;
import com.vincent.rsf.server.manager.entity.QlyIsptItem;
import com.vincent.rsf.server.system.controller.BaseController;
import com.vincent.rsf.server.system.controller.param.LoginParam;
@@ -201,8 +200,18 @@
    @PostMapping("/inspect/check/update")
    public R checkUpdate(@RequestBody QlyIsptItem params) {
        if (Objects.isNull(params)) {
            throw new CoolException("参数不能为空!!");
            return R.error("参数不能为空!!");
        }
        return mobileService.checkUpdate(params);
    }
    @ApiOperation("获取上架信息")
    @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
    @PostMapping("/stock/operate")
    public R operateToStock(@RequestBody OpStockParams params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        return mobileService.operateToStock(params);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OpStockParams.java
New file
@@ -0,0 +1,19 @@
package com.vincent.rsf.server.api.controller.params;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@ApiModel(value = "OpStockParams", description = "人工上架参数")
public class OpStockParams {
    @ApiModelProperty("拖盘码")
    private String barcode;
    @ApiModelProperty("单号")
    private String asnCode;
    @ApiModelProperty("物料编码")
    private String matnrCode;
}
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/OperateStockDto.java
New file
@@ -0,0 +1,8 @@
package com.vincent.rsf.server.api.entity.dto;
import com.vincent.rsf.server.manager.entity.AsnOrderItem;
public class OperateStockDto extends AsnOrderItem {
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -2,6 +2,7 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.api.controller.params.CheckObjParams;
import com.vincent.rsf.server.api.controller.params.OpStockParams;
import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
import com.vincent.rsf.server.api.controller.params.ReceiptParams;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
@@ -50,4 +51,6 @@
    R checkObjs(CheckObjParams params);
    R checkUpdate(QlyIsptItem params);
    R operateToStock(OpStockParams params);
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -5,6 +5,7 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.params.CheckObjParams;
import com.vincent.rsf.server.api.controller.params.OpStockParams;
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.CheckObjDto;
@@ -35,7 +36,7 @@
import com.vincent.rsf.server.system.service.FieldsService;
import com.vincent.rsf.server.system.service.UserLoginService;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.tika.utils.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -107,6 +108,9 @@
    @Autowired
    private FieldsItemService fieldsItemService;
    @Autowired
    private LocService locService;
    /**
     * @author Ryan
@@ -152,7 +156,7 @@
     */
    @Override
    public R getOrderByCode(String barcode) {
        if (StringUtils.isEmpty(barcode)) {
        if (StringUtils.isBlank(barcode)) {
            return R.error("标签码不能为空!!");
        }
        List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, barcode));
@@ -559,6 +563,50 @@
    }
    /**
    * @author Ryan
    * @description 人工上架
    * @param
    * @return
    * @time 2025/4/2 16:33
    */
    @Override
    public R operateToStock(OpStockParams params) {
        if (org.apache.commons.lang3.StringUtils.isBlank(params.getBarcode())) {
            throw new CoolException("拖盘码不能为空!!");
        }
        if (StringUtils.isBlank(params.getAsnCode())) {
            throw new CoolException("单据不能为空!!");
        }
        if (StringUtils.isBlank(params.getMatnrCode())) {
            throw new CoolException("物料编码不能为空!!");
        }
        AsnOrder asnOrders = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, params.getAsnCode()));
        if (Objects.isNull(asnOrders)) {
            throw new CoolException("单据不存在!!");
        }
        List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, params.getBarcode()));
        if (!locs.isEmpty()) {
            throw new CoolException("拖盘已使用");
        }
        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
        if (!waitPakins.isEmpty()) {
            throw new CoolException("拖盘已使用!!");
        }
        List<AsnOrderItem> orderItems = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>()
                .eq(AsnOrderItem::getAsnId, asnOrders.getId())
                .eq(AsnOrderItem::getMatnrCode, params.getMatnrCode()));
        if (orderItems.isEmpty()) {
            throw new CoolException("单据明细不存在!!");
        }
        List<AsnOrderItem> stocks = new ArrayList<>();
        orderItems.forEach(item -> {
            item.setBarcode(params.getBarcode());
            stocks.add(item);
        });
        return R.ok(stocks);
    }
    /**
     * 获取ReceiptDetlsDtos
     */
    private R getAsnOrderItem(List<AsnOrderItem> items) {
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -23,7 +23,6 @@
public class AsnOrderItem implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -54,6 +54,7 @@
    * @time 2025/4/2 12:37
    */
    @Scheduled(cron = "0 0/05 * * * ?  ")
//  @Scheduled(cron = "0/5 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void completeInStock() {
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
@@ -65,27 +66,14 @@
        if (taskItems.isEmpty()) {
            throw new CoolException("任务明细为空!!");
        }
        Map<Long, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getTaskId));
        /**对任务明细按订单进行分组*/
        Map<Long, List<TaskItem>> orderMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getOrderId));
        List<StockItem> stockItems = new ArrayList<>();
        for (Task task : tasks) {
            List<TaskItem> taskItem = listMap.get(task.getId());
            if (taskItem.isEmpty()) {
                throw new CoolException("数据错误 ")
            }
            Stock stock = new Stock();
            listMap.get(task.getId()).forEach(item -> {
            });
        }
        taskItems.forEach(item -> {
            Stock stock = new Stock();
        orderMap.keySet().forEach(key -> {
            AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>()
                    .eq(AsnOrder::getId, item.getOrderId())
                    .eq(AsnOrder::getId, key)
                    .select(AsnOrder::getId, AsnOrder::getPoCode, AsnOrder::getCode));
            Stock stock = new Stock();
            if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) {
                Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode()));
                stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId());
@@ -95,10 +83,12 @@
                throw new CoolException("当前业务:" + SerialRuleCode.SYS_STOCK_CODE + ",编码规则不存在!!");
            }
            stock.setAsnId(order.getId()).setAsnCode(order.getCode());
            if (!stockService.save(stock)) {
                throw new CoolException("库存保存失败!!");
            }
            List<TaskItem> items = orderMap.get(key);
            for (TaskItem item : items) {
                /**通过任务明细中的taskId查询,获取TASK的目标库位信息*/
            Task taskServiceOne = taskService.getOne(new LambdaQueryWrapper<Task>()
                    .select(Task::getId, Task::getTargLoc, Task::getOrgLoc, Task::getBarcode)
                    .eq(Task::getId, item.getTaskId()));
@@ -118,11 +108,12 @@
                    .setId(null)
                    .setStockId(stock.getId());
            stockItems.add(stockItem);
        });
            }
        if (!stockItemService.saveBatch(stockItems)) {
            throw new CoolException("库存修改架失败!!");
        }
        });
        /**修改库位状态为F.在库*/
        List<String> locCodes = tasks.stream().map(Task::getTargLoc).collect(Collectors.toList());
        if (!locService.update(new LambdaUpdateWrapper<Loc>().set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(Loc::getCode, locCodes))) {
            throw new CoolException("库位状态修改失败!!");
rsf-server/src/main/resources/application.yml
@@ -23,7 +23,7 @@
  #  global-config:
  #    field-strategy: 0
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: true
    call-setters-on-nulls: true