diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/PickDetailController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/PickDetailController.java index a1c2328..b180226 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/PickDetailController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/PickDetailController.java @@ -119,11 +119,11 @@ public class PickDetailController { InventoryQueryCriteria inventoryQueryCriteria = new InventoryQueryCriteria(); double quantityNum = 0; if (resources.getPoint() != null) { - double qty=inventoryService.getInvQty(resources.getItem().getId(),resources.getPickTicket().getArea().getId(), + double qty = inventoryService.getInvQty(resources.getItem().getId(), resources.getPickTicket().getArea().getId(), resources.getPoint().getId()); - if(qty("操作成功", HttpStatus.CREATED); } @@ -156,11 +156,11 @@ public class PickDetailController { @PreAuthorize("@el.check('super:man')") public ResponseEntity deletePickDetail(@RequestBody Long[] ids) { //删除时需判断是否有分配 - for(Long id:ids){ - PickDetail pickDetail=pickDetailRepository.getById(id); - if(pickDetail.getAllocatedQty()+pickDetail.getBcQty()>0){ - return new ResponseEntity<>(pickDetail.getItem().getCode()+"已出单,不允许删除",BAD_REQUEST); - }else{ + for (Long id : ids) { + PickDetail pickDetail = pickDetailRepository.getById(id); + if (pickDetail.getAllocatedQty() + pickDetail.getBcQty() > 0) { + return new ResponseEntity<>(pickDetail.getItem().getCode() + "已出单,不允许删除", BAD_REQUEST); + } else { // pickDetailRepository.deleteById(id); } } @@ -175,61 +175,54 @@ public class PickDetailController { public synchronized ResponseEntity allocatePick(@RequestBody Long[] ids) throws Exception { List picktickIds = Arrays.asList(ids); Collections.sort(picktickIds);//升序排序 - if (picktickIds.size() > 0) { - try { - for (Long picktickId : picktickIds) { - List pickDetailList = pickDetailService.queryPickDetailList(picktickId); - for (PickDetail pd : pickDetailList) { - pickDetailService.allocate(pd.getId(), pd.getOrderQty() - pd.getAllocatedQty()); - } - } - } catch (Exception e) { - return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), e.getMessage(), ""), HttpStatus.BAD_REQUEST); + List msgList = new ArrayList<>();//存放提示信息 + for (Long picktickId : picktickIds) { + List pickDetailList = pickDetailService.queryPickDetailList(picktickId); + for (PickDetail pd : pickDetailList) { + msgList.add(pickDetailService.allocateAll(pd.getId(), pd.getOrderQty() - pd.getAllocatedQty())); } - } else { - return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), "参数错误或者为null", ""), HttpStatus.BAD_REQUEST); } - return new ResponseEntity<>(ApiResult.success(),HttpStatus.OK); + return new ResponseEntity<>(ApiResult.success(msgList.toString(),null), HttpStatus.OK); } @PostMapping("/sbPickdetail") @Log("设变") @ApiOperation("设变") @AnonymousAccess - public ResponseEntity sbPickdetail(@RequestBody HashMap map) { - Long pdId=Long.parseLong(map.get("pdId").toString()); - Double sbQty=Double.parseDouble(map.get("sbQty").toString()); - if(map.get("sbItemCode")==null){ + public ResponseEntity sbPickdetail(@RequestBody HashMap map) { + Long pdId = Long.parseLong(map.get("pdId").toString()); + Double sbQty = Double.parseDouble(map.get("sbQty").toString()); + if (map.get("sbItemCode") == null) { throw new BadRequestException("无关联设变"); } - String sbItemCode=map.get("sbItemCode").toString(); - Item sbIt=itemRepository.findByCode(sbItemCode); - PickDetail oldD=pickDetailRepository.getById(pdId); - double unSb=oldD.getOrderQty()-oldD.getAllocatedQty()-oldD.getBcQty(); - if(sbIt==null){ - throw new BadRequestException(sbItemCode+"物料不存在"); + String sbItemCode = map.get("sbItemCode").toString(); + Item sbIt = itemRepository.findByCode(sbItemCode); + PickDetail oldD = pickDetailRepository.getById(pdId); + double unSb = oldD.getOrderQty() - oldD.getAllocatedQty() - oldD.getBcQty(); + if (sbIt == null) { + throw new BadRequestException(sbItemCode + "物料不存在"); } - if(unSb0){ - throw new BadRequestException(pt.getCode()+"已备货,不能设变"); + PickTicket pt = oldD.getPickTicket(); + if (pt.getPickedQuantity() > 0) { + throw new BadRequestException(pt.getCode() + "已备货,不能设变"); } - Area shArea=pt.getShArea(); - List bomList=bomAccountRepository.getItemBomList(sbIt.getId()); - if(bomList.size()<=0){ - throw new BadRequestException(sbIt.getCode()+"找不到对应的Bom工位清单"+sbQty); + Area shArea = pt.getShArea(); + List bomList = bomAccountRepository.getItemBomList(sbIt.getId()); + if (bomList.size() <= 0) { + throw new BadRequestException(sbIt.getCode() + "找不到对应的Bom工位清单" + sbQty); } - BomAccount bomAccount=bomList.get(0); - PickDetail newD= pickDetailService.createPickDetail(pt,sbIt,oldD.getPo(),sbQty,oldD.getSupplier()); + BomAccount bomAccount = bomList.get(0); + PickDetail newD = pickDetailService.createPickDetail(pt, sbIt, oldD.getPo(), sbQty, oldD.getSupplier()); newD.setRemark("设变"); newD.setSourceId(oldD.getId()); newD.setBomId(bomAccount.getId()); @@ -237,7 +230,7 @@ public class PickDetailController { newD.setSupplier(bomAccount.getSupplier()); newD.setPoint(bomAccount.getZPoint()); pickDetailService.allocate(newD.getId(), newD.getOrderQty() - newD.getAllocatedQty()); - oldD.setOrderQty(oldD.getOrderQty()-sbQty); + oldD.setOrderQty(oldD.getOrderQty() - sbQty); oldD.setSourceId(newD.getId()); pickDetailService.update(oldD); return new ResponseEntity<>(HttpStatus.OK); @@ -247,7 +240,7 @@ public class PickDetailController { @Log("取消分配") @ApiOperation("取消分配") @AnonymousAccess - public synchronized ResponseEntity cancelAllocate(@RequestBody Long[] ids) { + public synchronized ResponseEntity cancelAllocate(@RequestBody Long[] ids) { List pickDetailIds = Arrays.asList(ids); if (pickDetailIds.size() > 0) { for (Long id : pickDetailIds) { @@ -332,22 +325,22 @@ public class PickDetailController { @PreAuthorize("@el.check('super:man')") @AnonymousAccess public ResponseEntity autoBcbl() { - BillType bt=billTypeRepository.findByName(BaseStatus.BT_BCBL); - if(bt==null){ + BillType bt = billTypeRepository.findByName(BaseStatus.BT_BCBL); + if (bt == null) { return new ResponseEntity<>("维护波次补料类型", BAD_REQUEST); } - List plans=automaticPlanningRepository.getAll(); - if(plans.size()>0){ - AutomaticPlanning plan=plans.get(0); - Date blDate=plan.getJhDate(); - blDate=new Date(); + List plans = automaticPlanningRepository.getAll(); + if (plans.size() > 0) { + AutomaticPlanning plan = plans.get(0); + Date blDate = plan.getJhDate(); + blDate = new Date(); // for(AutomaticPlanning plan:plans){ //得到出库单的出库库区 - List outAreaGcs=pickTicketRepository.queryBhCkAreas(DateUtil.dateYmd(plan.getJhDate())); - for(Object[] outAreaGc:outAreaGcs) { - Long outAreaId=Long.parseLong(outAreaGc[0].toString()); - String gc=outAreaGc[1].toString(); - List objs = pickDetailService.getQueryBcbl(blDate,outAreaId,gc); + List outAreaGcs = pickTicketRepository.queryBhCkAreas(DateUtil.dateYmd(plan.getJhDate())); + for (Object[] outAreaGc : outAreaGcs) { + Long outAreaId = Long.parseLong(outAreaGc[0].toString()); + String gc = outAreaGc[1].toString(); + List objs = pickDetailService.getQueryBcbl(blDate, outAreaId, gc); if (objs.size() > 0) { Area outArea = areaRepository.getById(outAreaId); PickTicket pickTicket = pickTicketService.storePick(bt, null, outArea, "大", "波次补料"); @@ -381,7 +374,7 @@ public class PickDetailController { } } } - return new ResponseEntity<>("补料成功",HttpStatus.OK); + return new ResponseEntity<>("补料成功", HttpStatus.OK); } } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/PickDetailService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/PickDetailService.java index f86f82f..30c5be0 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/PickDetailService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/PickDetailService.java @@ -1,18 +1,18 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.youchain.businessdata.service; import com.youchain.basicdata.domain.AutomaticPlanning; @@ -34,73 +34,87 @@ import java.io.IOException; import javax.servlet.http.HttpServletResponse; /** -* @website https://eladmin.vip -* @description 服务接口 -* @author huojin -* @date 2023-08-16 -**/ + * @author huojin + * @website https://eladmin.vip + * @description 服务接口 + * @date 2023-08-16 + **/ public interface PickDetailService { /** - * 查询数据分页 - * @param criteria 条件 - * @param pageable 分页参数 - * @return Map - */ - Map queryAll(PickDetailQueryCriteria criteria, Pageable pageable); + * 查询数据分页 + * + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(PickDetailQueryCriteria criteria, Pageable pageable); /** - * 查询所有数据不分页 - * @param criteria 条件参数 - * @return List - */ + * 查询所有数据不分页 + * + * @param criteria 条件参数 + * @return List + */ List queryAll(PickDetailQueryCriteria criteria); List queryZscAll(PickDetailQueryCriteria criteria); /** * 根据ID查询 + * * @param id ID * @return PickDetailDto */ PickDetailDto findById(Long id); /** - * 创建 - * @param resources / - * @return PickDetailDto - */ + * 创建 + * + * @param resources / + * @return PickDetailDto + */ PickDetailDto create(PickDetail resources); /** - * 编辑 - * @param resources / - */ + * 编辑 + * + * @param resources / + */ void update(PickDetail resources); /** - * 多选删除 - * @param ids / - */ + * 多选删除 + * + * @param ids / + */ void deleteAll(Long[] ids); /** * 删除出库明细更新数据 + * * @param id */ void deletePickDetail(Long id); + /** - * 导出数据 - * @param all 待导出的数据 - * @param response / - * @throws Exception / - */ + * 导出数据 + * + * @param all 待导出的数据 + * @param response / + * @throws Exception / + */ void download(List all, HttpServletResponse response) throws Exception, Exception; /** * 分配 */ - void allocate(long id,double quantity); + void allocate(long id, double quantity); + + /** + * 分配 + */ + String allocateAll(long id, double quantity); /** * 取消分配 @@ -109,12 +123,14 @@ public interface PickDetailService { /** * 统计数量 + * * @return */ long count(); /** * Dto转实体 + * * @param pickDetailDto * @return */ @@ -122,6 +138,7 @@ public interface PickDetailService { /** * 自动生成明细 + * * @param pt * @param item * @param po @@ -129,36 +146,40 @@ public interface PickDetailService { * @param supplier * @return */ - PickDetail createPickDetail(PickTicket pt, Item item, String po, double qty,String supplier); + PickDetail createPickDetail(PickTicket pt, Item item, String po, double qty, String supplier); /** * 未分配的出库明细集合 + * * @param picktickId * @return */ List queryPickDetailList(long picktickId); - Map queryPickDetailAll(PickDetailQueryCriteria criteria, Pageable pageable); + Map queryPickDetailAll(PickDetailQueryCriteria criteria, Pageable pageable); /** * 获取补货需求明细 + * * @return */ List getQueryBcbl(Date blDate, Long ckAreaId, String gc); /** * 得到组合最大的备货需求数 + * * @param picktickId * @param largeClass * @return */ - Double getMaxBomQty(long picktickId,String largeClass); + Double getMaxBomQty(long picktickId, String largeClass); /** * 得到组合所有叫料明细 + * * @param picktickId * @param largeClass * @return */ - List getBomList(long picktickId,String largeClass); + List getBomList(long picktickId, String largeClass); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java index 0f660b1..3d10db4 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickDetailServiceImpl.java @@ -179,6 +179,7 @@ public class PickDetailServiceImpl implements PickDetailService { if (pd.getOrderQty() - pd.getAllocatedQty() == 0) { throw new BadRequestException(HttpStatus.NOT_FOUND, "已分配,请勿重复操作!"); } + Long zzkwId = null; if (pd.getPoint() != null && pickTicket.getArea().getBexb()) { zzkwId = pd.getPoint().getId(); @@ -188,40 +189,93 @@ public class PickDetailServiceImpl implements PickDetailService { throw new BadRequestException(HttpStatus.NOT_FOUND, "请维护发货暂存区"); } List invs = inventoryService.queryInventoryAllocate(item.getId(), pickTicket.getArea().getId(), zzkwId); - if (invs.size() > 0) { - double allocateQty = 0; - double unQty = quantity;//未分配数量 - for (Inventory inv : invs) { - Point startPoint = inv.getPoint();//原库位 - if (unQty <= 0) { - break; - } - allocateQty = inv.getQuantity() - inv.getQueuedQty();//库存可用数量 - if (allocateQty <= 0) { - continue; - } - if (unQty < allocateQty) { - allocateQty = unQty; - } - inv.setQueuedQty(inv.getQueuedQty() + allocateQty); - inventoryRepository.save(inv); - unQty -= allocateQty; - pd.setAllocatedQty(pd.getAllocatedQty() + allocateQty); - pickDetailRepository.save(pd); - pickTicket.setAllocatedQuantity(pickTicket.getAllocatedQuantity() + allocateQty); - if (pickTicket.getAllocatedQuantity() > 0) { - pickTicket.setStatus(BizStatus.ALLOCATE); - } - //备货表上出单日期(审核写) - pickTicket.setOutOrderDate(new Timestamp(new Date().getTime())); - pickTicketRepository.save(pickTicket); - taskService.storeTask(null, pd, pickTicket.getArea(), inv.getItemKey(), startPoint, endPoint, allocateQty); + double allocateQty = 0; + double unQty = quantity;//未分配数量 + for (Inventory inv : invs) { + Point startPoint = inv.getPoint();//原库位 + if (unQty <= 0) { + break; } + allocateQty = inv.getQuantity() - inv.getQueuedQty();//库存可用数量 + if (allocateQty <= 0) { + continue; + } + if (unQty < allocateQty) { + allocateQty = unQty; + } + inv.setQueuedQty(inv.getQueuedQty() + allocateQty); + inventoryRepository.save(inv); + unQty -= allocateQty; + pd.setAllocatedQty(pd.getAllocatedQty() + allocateQty); + pickDetailRepository.save(pd); + pickTicket.setAllocatedQuantity(pickTicket.getAllocatedQuantity() + allocateQty); + if (pickTicket.getAllocatedQuantity() > 0) { + pickTicket.setStatus(BizStatus.ALLOCATE); + } + //备货表上出单日期(审核写) + pickTicket.setOutOrderDate(new Timestamp(new Date().getTime())); + pickTicketRepository.save(pickTicket); + taskService.storeTask(null, pd, pickTicket.getArea(), inv.getItemKey(), startPoint, endPoint, allocateQty); } } + @Override + @Transactional(rollbackFor = Exception.class) + public String allocateAll(long id, double quantity) { + PickDetailDto pickDetailDto = findById(id); + PickDetail pd = toEntity(pickDetailDto);//Dto转实体 + PickTicket pickTicket = pd.getPickTicket(); + ItemDto itemDto = pickDetailDto.getItem(); + Item item = itemService.toEntity(itemDto); + if (pd.getOrderQty() - pd.getAllocatedQty() == 0) { + return pickTicket.getCode() + "出库单;" + item.getCode() + "数量已分配!"; + } + Long zzkwId = null; + if (pd.getPoint() != null && pickTicket.getArea().getBexb()) { + zzkwId = pd.getPoint().getId(); + } + List invs = inventoryService.queryInventoryAllocate(item.getId(), pickTicket.getArea().getId(), zzkwId); + if (invs.isEmpty()) { + return item.getCode() + "物料库存不足,请先补充库存!"; + } + + Point endPoint = pointService.getPoint("FHQ", null, null, null);//目标库位 + if (endPoint == null) { + return "请维护发货暂存区!"; + } + double allocateQty = 0; + double unQty = quantity;//未分配数量 + for (Inventory inv : invs) { + Point startPoint = inv.getPoint();//原库位 + if (unQty <= 0) { + break; + } + allocateQty = inv.getQuantity() - inv.getQueuedQty();//库存可用数量 + if (allocateQty <= 0) { + continue; + } + if (unQty < allocateQty) { + allocateQty = unQty; + } + inv.setQueuedQty(inv.getQueuedQty() + allocateQty); + inventoryRepository.save(inv); + unQty -= allocateQty; + pd.setAllocatedQty(pd.getAllocatedQty() + allocateQty); + pickDetailRepository.save(pd); + pickTicket.setAllocatedQuantity(pickTicket.getAllocatedQuantity() + allocateQty); + if (pickTicket.getAllocatedQuantity() > 0) { + pickTicket.setStatus(BizStatus.ALLOCATE); + } + //备货表上出单日期(审核写) + pickTicket.setOutOrderDate(new Timestamp(new Date().getTime())); + pickTicketRepository.save(pickTicket); + taskService.storeTask(null, pd, pickTicket.getArea(), inv.getItemKey(), startPoint, endPoint, allocateQty); + } + return item.getCode() + "物料分配成功!"; + } + @Override @Transactional(rollbackFor = Exception.class)