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"; }