skyouc
6 天以前 5f13213af588444a59d0b3725f3d028cbdaffca4
完成任务优化
删除组托优化
10个文件已修改
176 ■■■■■ 已修改文件
rsf-admin/src/page/waitPakin/WaitPakinList.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/waitPakin/WaitPakinList.jsx
@@ -164,7 +164,7 @@
                    bulkActionButtons={
                        <>
                            <CreateTaskButton />
                            <BulkDeleteButton mutationMode={OPERATE_MODE} />
                            {/* <BulkDeleteButton mutationMode={OPERATE_MODE} /> */}
                        </>}
                    rowClick='edit'
                    omit={['id', 'createTime', 'createBy', 'memo']}
@@ -182,7 +182,7 @@
                    <WrapperField cellClassName="opt" label="common.field.opt">
                        <EditButton label="toolbar.detail" sx={{ padding: '1px', fontSize: '.75rem' }} />
                        <CreateTaskRowButton />
                        {/* <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> */}
                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                    </WrapperField>
                </StyledDatagrid>
            </List>
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -452,8 +452,7 @@
                .eq(!Cools.isEmpty(code), WarehouseAreasItem::getTrackCode, code)
                .eq(!Cools.isEmpty(batch), WarehouseAreasItem::getSplrBatch, batch)
                .eq(!Cools.isEmpty(matnrCode), WarehouseAreasItem::getMatnrCode, matnrCode)
                .eq(!Cools.isEmpty(asnCode), WarehouseAreasItem::getAsnCode, asnCode)
                ;
                .eq(!Cools.isEmpty(asnCode), WarehouseAreasItem::getAsnCode, asnCode);
        List<WarehouseAreasItem> list = warehouseAreasItemService.list(queryWrapper);
        list.removeIf(e -> e.getAnfme() <= e.getWorkQty());
        return R.ok(list);
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java
@@ -109,22 +109,10 @@
    @PostMapping("/waitPakin/remove/{ids}")
    @Transactional(rollbackFor = Exception.class)
    public R remove(@PathVariable Long[] ids) {
        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
                .in(WaitPakinItem::getPakinId, ids));
        if (!pakinItems.isEmpty()) {
            List<Long> list = pakinItems.stream().map(WaitPakinItem::getId).collect(Collectors.toList());
            List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSource, list));
            if (!taskItems.isEmpty()) {
                return R.error("组拖档有明细任务");
        if (Arrays.asList(ids).isEmpty()) {
            return R.error("参数不能为空!!");
            }
        }
        if (!waitPakinService.removeByIds(Arrays.asList(ids))) {
            return R.error("Delete Fail");
        }
        if (!waitPakinItemService.removeByIds(pakinItems)) {
            throw new CoolException("明细删除失败!!");
        }
        return R.ok("Delete Success").add(ids);
        return waitPakinService.removePakin(Arrays.asList(ids));
    }
    @PreAuthorize("hasAuthority('manager:waitPakin:list')")
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -4,7 +4,11 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.vincent.rsf.server.system.constant.DictTypeCode;
import com.vincent.rsf.server.system.entity.DictData;
import com.vincent.rsf.server.system.service.DictDataService;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
@@ -23,6 +27,7 @@
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
@Data
@Accessors(chain = true)
@@ -155,19 +160,17 @@
//    );
    public String getIoStatus$(){
        if (null == this.ioStatus){ return null; }
        switch (this.ioStatus){
            case 0:
                return "待入库";
            case  1:
                return " 入库中";
            case 2:
                return "任务执行中";
            case 3:
                return "任务完成";
            default:
                return String.valueOf(this.ioStatus);
        if (Cools.isEmpty(this.ioStatus)){
            return "";
        }
        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
        DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
                .eq(DictData::getDictTypeCode, DictTypeCode.SYS_ORDER_IN_STATUS)
                .eq(DictData::getValue, this.ioStatus));
        if (Objects.isNull(dictData)) {
            return null;
        }
        return dictData.getLabel();
    }
    public String getStatus$(){
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java
@@ -50,6 +50,9 @@
    @ApiModelProperty("业务类型")
    private Short wkType;
    @ApiModelProperty("组拖明细ID")
    private Long source;
    /**
     * 订单ID
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java
@@ -11,7 +11,7 @@
    //质检状态
    PAKIN_IO_STATUS_HOLD("0", "待入库"),
    PAKIN_IO_STATUS_DONE("1", "组拖完成"),
    PAKIN_IO_STATUS_DONE("1", "入库中"),
    PAKIN_IO_STATUS_TASK_EXCE("2", "任务执行中"),
    PAKIN_IO_STATUS_TASK_DONE("3", "任务完成")
            ;
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinService.java
@@ -1,8 +1,11 @@
package com.vincent.rsf.server.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
import com.vincent.rsf.server.manager.entity.WaitPakin;
import java.util.List;
public interface WaitPakinService extends IService<WaitPakin> {
@@ -10,5 +13,5 @@
    WaitPakin unBind(WaitPakinParam param);
    R removePakin(List<Long> list);
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -237,7 +237,7 @@
                //移出收货区库存, 修改组托状态
                removeReceiptStock(pakinItem);
            } catch (Exception e) {
                throw new CoolException("库存管理保存更新失败!!");
                throw new CoolException(e.getMessage());
            }
        });
        /**修改库位状态为F.在库*/
@@ -259,10 +259,9 @@
    @Transactional(rollbackFor = Exception.class)
    public void removeReceiptStock(WaitPakinItem pakinItem) {
        WarehouseAreasItem itemServiceOne = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>()
                .eq(WarehouseAreasItem::getTrackCode, pakinItem.getTrackCode())
                .eq(WarehouseAreasItem::getSplrBatch, pakinItem.getBatch()));
                .eq(WarehouseAreasItem::getId, pakinItem.getSource()));
        if (Objects.isNull(itemServiceOne)) {
            throw new CoolException("数据错误,请查看请货区库存是否存在!!");
            throw new CoolException("数据错误:请查看请货区库存是否存在!!");
        }
        Double workQty = itemServiceOne.getWorkQty() - pakinItem.getAnfme();
        Double qty = itemServiceOne.getQty() + pakinItem.getAnfme();
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.manager.controller.params.PakinItem;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
@@ -39,6 +40,10 @@
    private WarehouseAreasItemService warehouseAreasItemService;
    @Autowired
    private LocService locService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private TaskItemService taskItemService;
    /**
@@ -59,11 +64,11 @@
            throw new CoolException("参数错误:托盘码为空!!");
        }
        List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
        WaitPakin list = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
        WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                .notIn(WaitPakin::getIoStatus, asList)
                .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
        if (!Objects.isNull(list)) {
            throw new CoolException("托盘码:" + waitPakin.getBarcode() + "已被组托单:" + list.getCode() + "使用!!");
        if (!Objects.isNull(pakin)) {
            throw new CoolException("托盘码:" + waitPakin.getBarcode() + "已被组托单:" + pakin.getCode() + "使用!!");
        }
        List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode()));
        if (!locs.isEmpty()) {
@@ -74,10 +79,6 @@
        double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum();
        WaitPakin waitPakin1 = new WaitPakin();
        WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                .in(WaitPakin::getIoStatus, asList)
                .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
        if (Objects.isNull(pakin)) {
            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
            if (StringUtils.isBlank(ruleCode)) {
                throw new CoolException("编码规则错误: 编码规则「SYS_WAIT_PAKIN_CODE」规则是不存在");
@@ -92,25 +93,17 @@
            if (!this.save(waitPakin1)) {
                throw new CoolException("主单保存失败!!");
            }
        } else {
            BeanUtils.copyProperties(pakin, waitPakin1);
            waitPakin1.setAnfme(sum);
            if (!this.saveOrUpdate(waitPakin1)) {
                throw new CoolException("主单修改失败!!");
            }
        }
        /**物料跟踪码*/
        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
                .eq(WaitPakinItem::getPakinId, waitPakin1.getId()))
                ;
        if (!pakinItems.isEmpty()) {
            if (!waitPakinItemService.remove(new LambdaQueryWrapper<WaitPakinItem>()
                    .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
                    )) {
                throw new CoolException("原单据清除失败!!");
            }
        }
//        /**物料跟踪码*/
//        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
//                .eq(WaitPakinItem::getPakinId, waitPakin1.getId()))
//                ;
//        if (!pakinItems.isEmpty()) {
//            if (!waitPakinItemService.remove(new LambdaQueryWrapper<WaitPakinItem>()
//                    .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
//                    )) {
//                throw new CoolException("原单据清除失败!!");
//            }
//        }
        List<WaitPakinItem> items = new ArrayList<>();
        for (PakinItem pakinItem1 : waitPakin.getItems()) {
            //不良标签组托
@@ -157,6 +150,7 @@
                WaitPakinItem pakinItem = new WaitPakinItem();
                pakinItem.setAnfme(warehouseAreasItems.getAnfme())
                        .setPakinId(waitPakin1.getId())
                        .setSource(warehouseAreasItems.getId())
                        .setAsnId(warehouseAreasItems.getAsnId())
                        .setAsnCode(warehouseAreasItems.getAsnCode())
                        .setAsnItemId(warehouseAreasItems.getId())
@@ -199,7 +193,8 @@
            if (Objects.isNull(one)) {
                throw new CoolException("收货区数据错误!!");
            }
            one.setWorkQty(one.getWorkQty() + pakinItem.getAnfme() + one.getQty()) ;
            one.setAnfme(one.getAnfme() - pakinItem.getAnfme())
                    .setWorkQty(one.getWorkQty() + pakinItem.getAnfme() + one.getQty()) ;
            if (one.getWorkQty() > one.getAnfme()) {
                throw new CoolException("组托数量不能大于收货数量!!");
            }
@@ -207,8 +202,6 @@
                throw new CoolException("收货区执行数量修改失败!!");
            }
        }
        waitPakin1.setAnfme(sum1);
        if (!this.updateById(waitPakin1)) {
@@ -255,4 +248,57 @@
        }
        return new WaitPakin();
    }
    /**
     * @author Ryan
     * @date 2025/5/7
     * @description: 删除组拖信息
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R removePakin(List<Long> pakinIds) {
        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
                .in(WaitPakinItem::getPakinId, pakinIds));
        if (!pakinItems.isEmpty()) {
            List<Long> list = pakinItems.stream().map(WaitPakinItem::getId).collect(Collectors.toList());
            List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSource, list));
            if (!taskItems.isEmpty()) {
                return R.error("组拖档有明细任务");
            }
        }
        Set<Long> sourceIds = pakinItems.stream().map(WaitPakinItem::getSource).collect(Collectors.toSet());
        List<WarehouseAreasItem> areasItems = warehouseAreasItemService.listByIds(sourceIds);
        if (areasItems.isEmpty()) {
            return R.error("收货区数据不存在!!");
        }
        Map<Long, List<WaitPakinItem>> listMap = pakinItems.stream().collect(Collectors.groupingBy(WaitPakinItem::getSource));
        for (WarehouseAreasItem item : areasItems) {
            List<WaitPakinItem> pakin = listMap.get(item.getId());
            if (Objects.isNull(pakin)) {continue;}
            double sum = pakin.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
            item.setWorkQty(item.getWorkQty() - sum)
                    .setAnfme(item.getAnfme() + sum);
            if (!warehouseAreasItemService.updateById(item)) {
                throw new CoolException("收货区数据回滚失败!!");
            }
        }
        if (!waitPakinService.removeByIds(pakinIds)) {
            return R.error("Delete Fail");
        }
        Set<Long> pakinItemIds = pakinItems.stream().map(WaitPakinItem::getId).collect(Collectors.toSet());
        if (!waitPakinItemService.removeByIds(pakinItemIds)) {
            throw new CoolException("明细删除失败!!");
        }
        return R.ok("Delete Success").add(pakinIds);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
@@ -59,4 +59,7 @@
     */
    public final static String SYS_WARE_AREAS_TYPE = "sys_ware_areas_type";
    /**组托执行状态*/
    public final static String SYS_ORDER_IN_STATUS = "sys_order_in_status";
}