| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeBindReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceItemRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceReqVO; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String generateBagCodes(MesProBagCodeGenerateReqVO generateReqVO) { |
| | | public MesProBagCodeGenerateRespVO generateBagCodes(MesProBagCodeGenerateReqVO generateReqVO) { |
| | | // 1. 校验批次存在且处于生产中状态 |
| | | MesProBatchDO batch = batchMapper.selectByIdForUpdate(generateReqVO.getBatchId()); |
| | | if (batch == null) { |
| | |
| | | batchMapper.updateById(new MesProBatchDO().setId(batch.getId()) |
| | | .setBagQuantity((batch.getBagQuantity() == null ? 0 : batch.getBagQuantity()) |
| | | + generateReqVO.getCount())); |
| | | return uuid; |
| | | return new MesProBagCodeGenerateRespVO() |
| | | .setUuid(uuid) |
| | | .setAutoPallets(palletService.autoCreatePallets(batch.getId())); |
| | | } |
| | | |
| | | @Override |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void bindPallet(MesProBagCodeBindReqVO bindReqVO) { |
| | | // 1. 校验托盘存在 |
| | | MesProPalletDO pallet = palletService.validatePalletExists(bindReqVO.getPalletId()); |
| | | // 2. 校验袋码 |
| | | List<MesProBagCodeDO> bagCodes = validateBagCodesForBind(bindReqVO.getIds(), pallet); |
| | | // 1. 锁定托盘,避免与自动归集并发修改袋数 |
| | | MesProPalletDO pallet = palletMapper.selectByIdForUpdate(bindReqVO.getPalletId()); |
| | | if (pallet == null) { |
| | | throw exception(PRO_PALLET_NOT_EXISTS); |
| | | } |
| | | // 2. 锁定并校验袋码 |
| | | List<MesProBagCodeDO> bagCodes = validateBagCodesForBind(bindReqVO.getIds(), pallet, true); |
| | | // 3. 校验不超过托盘可装袋数 |
| | | int currentCount = pallet.getBagCount() == null ? 0 : pallet.getBagCount(); |
| | | if (pallet.getCapacity() != null && pallet.getCapacity() > 0 |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void unbindPallet(MesProBagCodeBindReqVO bindReqVO) { |
| | | // 1. 校验托盘存在 |
| | | MesProPalletDO pallet = palletService.validatePalletExists(bindReqVO.getPalletId()); |
| | | // 2. 校验袋码均绑定在当前托盘上 |
| | | List<MesProBagCodeDO> bagCodes = bagCodeMapper.selectListByIds(bindReqVO.getIds()); |
| | | // 1. 锁定托盘,避免与自动归集并发修改袋数 |
| | | MesProPalletDO pallet = palletMapper.selectByIdForUpdate(bindReqVO.getPalletId()); |
| | | if (pallet == null) { |
| | | throw exception(PRO_PALLET_NOT_EXISTS); |
| | | } |
| | | // 2. 锁定并校验袋码均绑定在当前托盘上 |
| | | List<MesProBagCodeDO> bagCodes = bagCodeMapper.selectListByIdsForUpdate(bindReqVO.getIds()); |
| | | if (bagCodes.size() != bindReqVO.getIds().size()) { |
| | | throw exception(PRO_BAG_CODE_NOT_EXISTS); |
| | | } |
| | |
| | | /** |
| | | * 校验待绑定的袋码:存在、与托盘同批次、未绑定过托盘、状态有效(已生成/已导出印刷) |
| | | */ |
| | | private List<MesProBagCodeDO> validateBagCodesForBind(List<Long> ids, MesProPalletDO pallet) { |
| | | List<MesProBagCodeDO> bagCodes = bagCodeMapper.selectListByIds(ids); |
| | | private List<MesProBagCodeDO> validateBagCodesForBind(List<Long> ids, MesProPalletDO pallet, boolean lock) { |
| | | List<MesProBagCodeDO> bagCodes = lock ? bagCodeMapper.selectListByIdsForUpdate(ids) : bagCodeMapper.selectListByIds(ids); |
| | | if (bagCodes.size() != ids.size()) { |
| | | throw exception(PRO_BAG_CODE_NOT_EXISTS); |
| | | } |