diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java index 2c15bec..79037ee 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java @@ -383,9 +383,9 @@ public class PointServiceImpl implements PointService { if (point==null){ point=new Point(); point.setDept(UserUtils.getDept()); - c=c+1; - }else { b=b+1; + }else { + c=c+1; } if (code!=null) point.setCode(code); if (name!=null) point.setName(name); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java index 2cc489c..e6fe220 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/InventoryLog.java @@ -23,6 +23,9 @@ import lombok.Data; import cn.hutool.core.bean.BeanUtil; import io.swagger.annotations.ApiModelProperty; import cn.hutool.core.bean.copier.CopyOptions; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; + import javax.persistence.*; import javax.validation.constraints.*; import java.sql.Timestamp; @@ -62,6 +65,7 @@ public class InventoryLog extends BaseEntity implements Serializable { @OneToOne @JoinColumn(name = "`item_key_id`") @ApiModelProperty(value = "点位") + @NotFound(action= NotFoundAction.IGNORE) private ItemKey itemKey; @Column(name = "`storage_date`") @@ -108,6 +112,7 @@ public class InventoryLog extends BaseEntity implements Serializable { @OneToOne @JoinColumn(name = "`src_point_id`") @ApiModelProperty(value = "源点位") + @NotFound(action= NotFoundAction.IGNORE) private Point srcPoint; @Column(name = "`src_point_code`") @@ -117,6 +122,7 @@ public class InventoryLog extends BaseEntity implements Serializable { @OneToOne @JoinColumn(name = "`src_stock_id`") @ApiModelProperty(value = "源容器") + @NotFound(action= NotFoundAction.IGNORE) private Stock srcStock; @Column(name = "`src_stock_code`") @@ -126,6 +132,7 @@ public class InventoryLog extends BaseEntity implements Serializable { @OneToOne @JoinColumn(name = "`dst_point_id`") @ApiModelProperty(value = "点位") + @NotFound(action= NotFoundAction.IGNORE) private Point dstPoint; @Column(name = "`dst_point_code`") @@ -135,6 +142,7 @@ public class InventoryLog extends BaseEntity implements Serializable { @OneToOne @JoinColumn(name = "`dst_stock_id`") @ApiModelProperty(value = "目标容器") + @NotFound(action= NotFoundAction.IGNORE) private Stock dstStock; @Column(name = "`dst_stock_code`") @@ -149,6 +157,37 @@ public class InventoryLog extends BaseEntity implements Serializable { @ApiModelProperty(value = "目标数量") private Double dstQty=0d; + @Column(name = "`item_code`") + @ApiModelProperty(value = "物料代码") + private String itemCode; + + @Column(name = "`item_name`") + @ApiModelProperty(value = "物理名称") + private String itemName; + @Column(name = "`prop_c1`") + @ApiModelProperty(value = "批次号") + private String propC1; + + @Column(name = "`prop_c2`") + @ApiModelProperty(value = "字符") + private String propC2; + + @Column(name = "`prop_c3`") + @ApiModelProperty(value = "系统单号") + private String propC3; + + @Column(name = "`prop_c4`") + @ApiModelProperty(value = "厂家供货码") + private String propC4; + + @Column(name = "`prop_c5`") + @ApiModelProperty(value = "供货数量") + private String propC5; + + @Column(name = "`prop_c6`") + @ApiModelProperty(value = "流水号") + private String propC6; + public void copy(InventoryLog source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java b/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java index 003df70..bc6925e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/domain/ItemKey.java @@ -93,6 +93,10 @@ public class ItemKey extends BaseEntity implements Serializable { @ApiModelProperty(value = "工单号") private String orderNumber; + @Column(name = "`enabled`") + @ApiModelProperty(value = "是否启用") + private Boolean enabled=true; + public int getIntPropC5() { int decimalNumber = Integer.parseInt(propC5, 16); return decimalNumber; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/PickDetailRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/PickDetailRepository.java index d9771a9..da34cae 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/PickDetailRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/PickDetailRepository.java @@ -58,4 +58,10 @@ public interface PickDetailRepository extends JpaRepository, J List findByPick(Long id); @Query(value = "select pd from PickDetail pd where pd.pick.id=?1 and pd.allocatedQty>0", nativeQuery = false) List findByPickAllocated(Long id); + /** 查询 出库单未完成的明细*/ + @Query(value = "select pd from PickDetail pd where pd.pick.id=?1 and pd.allocatedQty>pd.pickedQty") + List findByQtyAllGtPick(Long id); + /** 查询拣货和分配中的 全部出库明细*/ + @Query(value = "select pd from PickDetail pd where pd.status in ('PICKUP','ALLOCATE')") + List getPickDetail(); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java index 749ff53..9849294 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java @@ -31,4 +31,6 @@ import java.util.List; public interface PickRepository extends JpaRepository, JpaSpecificationExecutor { @Query(value = "select p from Pick p where p.relatedBill2=?1") Pick findByCode(String relatedBill2); + @Query(value = "select p from Pick p") + List getPickList(); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java index 67c7a90..bb29d7b 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/TaskRepository.java @@ -101,4 +101,6 @@ public interface TaskRepository extends JpaRepository, JpaSpecificat List> findBySumPlanQty(String taskStatus,int beSkip,String goodType); @Query(value = "select t from Task t where t.taskStatus =?1 and t.beSkip=?2 and t.taskType=?3") List findByItemType(String taskStatus, int beSkip, String goodType); + + Task findByPickDetailAndItem(Long id, String sku); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnController.java index fe9f05e..b500f8b 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnController.java @@ -89,8 +89,7 @@ public class AsnController { return new ResponseEntity<>(HttpStatus.OK); } @PostMapping("/getAsnList") - @Log("加载出库单下拉框") - @ApiOperation("加载出库单下拉框") + @Log("加载入库单下拉框") @PreAuthorize("@el.check('asn:del')") public ResponseEntity getAsnList() { return new ResponseEntity<>(asnService.getAsnList(),HttpStatus.OK); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/PickController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/PickController.java index 0600146..36ea361 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/PickController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/PickController.java @@ -18,6 +18,7 @@ package com.youchain.businessdata.rest; import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.Log; import com.youchain.businessdata.domain.Pick; +import com.youchain.businessdata.repository.PickRepository; import com.youchain.businessdata.service.PickService; import com.youchain.businessdata.service.dto.PickQueryCriteria; import com.youchain.exception.handler.ApiResult; @@ -44,6 +45,7 @@ import javax.servlet.http.HttpServletResponse; public class PickController { private final PickService pickService; + private final PickRepository pickRepository; @Log("导出数据") @ApiOperation("导出数据") @@ -100,4 +102,10 @@ public class PickController { ApiResult apiResult = pickService.allocate(ids); return new ResponseEntity<>(apiResult, HttpStatus.valueOf(apiResult.getStatus())); } + @PostMapping("/getPickList") + @Log("加载出库单下拉框") + @PreAuthorize("@el.check('asn:del')") + public ResponseEntity getPickList() { + return new ResponseEntity<>(pickRepository.getPickList(),HttpStatus.OK); + } } \ No newline at end of file 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 ecc0dee..7b969c0 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 @@ -29,6 +29,7 @@ import com.youchain.businessdata.domain.PickDetail; import com.youchain.businessdata.domain.Task; import com.youchain.businessdata.inputJson.IPPickDetail; import com.youchain.businessdata.inputJson.IScanPut; +import com.youchain.businessdata.repository.PickDetailRepository; import com.youchain.businessdata.service.InventoryLogService; import com.youchain.businessdata.service.PickDetailService; import com.youchain.businessdata.service.TaskService; @@ -74,6 +75,7 @@ import static org.springframework.http.HttpStatus.BAD_REQUEST; public class PickDetailController { private final PickDetailService pickDetailService; + private final PickDetailRepository pickDetailRepository; private final TaskService taskService; @@ -132,7 +134,7 @@ public class PickDetailController { } @PostMapping("/cancelAllocate") - @Log("取消分配") + @Log("出库明细-取消分配") @AnonymousAccess public synchronized ResponseEntity cancelAllocate(@RequestBody Long[] ids) throws Exception { ApiResult apiResult = pickDetailService.cancelAllocate(ids); @@ -148,6 +150,12 @@ public class PickDetailController { List t=taskService.queryTaskApp(null); return new ResponseEntity<>(t,HttpStatus.OK); } + @PostMapping("/getPickDetail") + @Log("人工出库-加载出库明细") + @AnonymousAccess + public ResponseEntity getPickDetail(){ + return new ResponseEntity<>(pickDetailRepository.getPickDetail(),HttpStatus.OK); + } @PostMapping("/pickingApp") @Log("APP拣货确认") @@ -159,7 +167,7 @@ public class PickDetailController { } @PostMapping("/picking") - @Log("拣货") + @Log("出库-单品拣货") @AnonymousAccess public ResponseEntity picking(@RequestBody Long[] ids){ // pick_in(pickDetailId); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/TaskController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/TaskController.java index 4866c7a..39de81f 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/TaskController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/TaskController.java @@ -18,13 +18,23 @@ package com.youchain.businessdata.rest; import com.alibaba.fastjson.JSONObject; import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.Log; -import com.youchain.basicdata.service.dto.PointDto; +import com.youchain.basicdata.domain.Point; +import com.youchain.basicdata.repository.PointRepository; import com.youchain.basicdata.service.dto.PointQueryCriteria; +import com.youchain.businessdata.domain.Inventory; +import com.youchain.businessdata.domain.PickDetail; import com.youchain.businessdata.domain.Task; +import com.youchain.businessdata.repository.InventoryRepository; +import com.youchain.businessdata.repository.PickDetailRepository; +import com.youchain.businessdata.repository.TaskRepository; +import com.youchain.businessdata.service.InventoryService; +import com.youchain.businessdata.service.PickDetailService; import com.youchain.businessdata.service.TaskService; import com.youchain.businessdata.service.dto.TaskQueryCriteria; import com.youchain.exception.handler.ApiResult; import com.youchain.utils.BaseStatus; +import com.youchain.utils.BizStatus; +import com.youchain.utils.UserUtils; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.util.StandardSessionIdGenerator; import org.springframework.data.domain.Pageable; @@ -32,10 +42,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; +import java.util.Arrays; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -52,6 +64,12 @@ import javax.servlet.http.HttpServletResponse; public class TaskController { private final TaskService taskService; + private final TaskRepository taskRepository; + private final InventoryService inventoryService; + private final PickDetailRepository pickDetailRepository; + private final PickDetailService pickDetailService; + private final InventoryRepository inventoryRepository; + private final PointRepository pointRepository; @Log("导出数据") @ApiOperation("导出数据") @@ -77,7 +95,7 @@ public class TaskController { return new ResponseEntity<>(ApiResult.success(apiResult.getMessage(),apiResult.getData()), HttpStatus.valueOf(apiResult.getStatus())); } @PostMapping("/devanRfid") - @ApiOperation("人工出库-解析RFID关联的库存信息") + @ApiOperation("人工出库,人工入库-解析RFID关联的库存信息") @AnonymousAccess public ResponseEntity devanRfid(@RequestBody String data){ JSONObject jsonObject=JSONObject.parseObject(data); @@ -91,7 +109,48 @@ public class TaskController { } return new ResponseEntity<>(apiResult, HttpStatus.valueOf(apiResult.getStatus())); } + @PostMapping("/picking") + @Log("人工出库-拣货确认") + @AnonymousAccess + public ResponseEntity picking(@RequestBody String data){ + JSONObject jsonObject=JSONObject.parseObject(data); +// String rfid=jsonObject.getString("RFID"); + + Long taskId=jsonObject.getLong("taskId"); + ApiResult apiResult; + /** 通过RFID获取Task后出库*/ + apiResult = taskService.picking(new Long[]{taskId}); + return new ResponseEntity<>(apiResult, HttpStatus.valueOf(apiResult.getStatus())); + } + /** 人工出库-解析RFID关联的(未分配)库存信息*/ + @PostMapping("/replaceInv") + @Log("出库-替换分配库存") + @AnonymousAccess + @Transactional + public ApiResult replaceInv(@RequestBody String data) { + System.out.println("接收:"+data); + JSONObject jsonObject=JSONObject.parseObject(data); + Long invId=jsonObject.getLong("invId"); + Long taskId=jsonObject.getLong("taskId"); + Task task=taskRepository.getById(taskId); + PickDetail pickDetail=task.getPickDetail(); + Inventory inventory=inventoryRepository.getById(invId);//实际出库 库存 + ApiResult apiResult; + /** 取消分配库存 */ + apiResult = pickDetailService.cancelAllocate(pickDetail.getId(),inventory.getQuantity()); + if (apiResult.getStatus()!=200){ + return apiResult; + } + /** 重新分配 */ + Point point=pointRepository.findByCode(pickDetail.getPropC5()); + List inventoryList= Arrays.asList(inventory); + apiResult = pickDetailService.allocate(pickDetail, UserUtils.getDept(), inventory.getQuantity(),0,point,inventoryList); + if (apiResult!=null){ + return apiResult; + } + return ApiResult.fail(200,"操作成功",null); + } @GetMapping(value = "/queryAsnTask") @Log("查询task") 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 e72f91e..ba818e5 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 @@ -18,10 +18,12 @@ package com.youchain.businessdata.service; import com.alibaba.fastjson.JSONObject; import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.domain.Point; +import com.youchain.businessdata.domain.Inventory; import com.youchain.businessdata.domain.PickDetail; import com.youchain.businessdata.service.dto.PickDetailDto; import com.youchain.businessdata.service.dto.PickDetailQueryCriteria; import com.youchain.exception.handler.ApiResult; +import com.youchain.modules.system.domain.Dept; import org.springframework.data.domain.Pageable; import java.util.Map; import java.util.List; @@ -86,9 +88,10 @@ public interface PickDetailService { void download(List all, HttpServletResponse response) throws IOException; /** - * 分配 + * 出库-明细分配 */ ApiResult allocate(Long[] ids); + ApiResult allocate(PickDetail pickDetail, Dept dept, Double quantity, Integer agvFlag, Point endPoint, List inventoryList); /** * 整出分配 @@ -102,8 +105,9 @@ public interface PickDetailService { /** * 取消分配 + * quantity 取消数量 */ - ApiResult cancelAllocate(long id,double quantity) ; + ApiResult cancelAllocate(long pdId,double cancelQuantity) ; ApiResult cancelAllocate(Long[] ids); /** diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java index 6af243c..594fda8 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/TaskService.java @@ -151,5 +151,6 @@ public interface TaskService { ApiResult devanRfidAsn(String rfid); + /** 人工出库-解析RFID关联的库存信息*/ ApiResult devanRfidPT(String rfid); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/dto/InventoryQueryCriteria.java b/youchain-system/src/main/java/com/youchain/businessdata/service/dto/InventoryQueryCriteria.java index 2f43b9f..d86cc46 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/dto/InventoryQueryCriteria.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/dto/InventoryQueryCriteria.java @@ -15,20 +15,11 @@ */ package com.youchain.businessdata.service.dto; -import com.youchain.base.BaseEntity; -import com.youchain.basicdata.domain.Item; -import com.youchain.businessdata.domain.ItemKey; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.io.Serializable; import java.util.List; import com.youchain.annotation.Query; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; -import javax.validation.constraints.NotBlank; - /** * @website https://eladmin.vip * @author huojin @@ -39,7 +30,10 @@ public class InventoryQueryCriteria{ /*@Query(joinName = "itemKey>item>", propName="code" ,type = Query.Type.INNER_LIKE) private String itemCode;*/ - + @Query(joinName = "itemKey>item", propName="id",type = Query.Type.EQUAL) + private String itemId; + @Query(type = Query.Type.EQUAL) + private Double queuedQty; @Query(joinName = "itemKey>item>", propName="name",type = Query.Type.INNER_LIKE) private String itemName; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryLogServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryLogServiceImpl.java index 33384c9..020a371 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryLogServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryLogServiceImpl.java @@ -171,6 +171,16 @@ public class InventoryLogServiceImpl implements InventoryLogService { }else if(incDec== BizStatus.REDUCE){ log.setDstQty(srcQty-occurQty); } + if (itemKey!=null){ + log.setItemCode(itemKey.getItem().getCode()); + log.setItemName(itemKey.getItem().getName()); + log.setPropC1(itemKey.getPropC1()); + log.setPropC2(itemKey.getPropC2()); + log.setPropC3(itemKey.getPropC3()); + log.setPropC4(itemKey.getPropC4()); + log.setPropC5(itemKey.getPropC5()); + log.setPropC6(itemKey.getPropC6()); + } log.setOccurTime(new Timestamp(System.currentTimeMillis())); log.setRefObj(refObj); log.setRefObjId(refObjId); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java index 4f0b26e..66835fa 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/InventoryServiceImpl.java @@ -19,15 +19,12 @@ import com.youchain.basicdata.domain.Point; import com.youchain.basicdata.domain.Stock; import com.youchain.basicdata.repository.PointRepository; import com.youchain.businessdata.domain.*; -import com.youchain.businessdata.repository.ItemKeyRepository; -import com.youchain.businessdata.repository.PickDetailRepository; -import com.youchain.businessdata.repository.TaskRepository; +import com.youchain.businessdata.repository.*; import com.youchain.businessdata.service.InventoryLogService; import com.youchain.businessdata.service.dto.*; import com.youchain.modules.system.domain.Dept; import com.youchain.utils.*; import lombok.RequiredArgsConstructor; -import com.youchain.businessdata.repository.InventoryRepository; import com.youchain.businessdata.service.InventoryService; import com.youchain.businessdata.service.mapstruct.InventoryMapper; import org.springframework.stereotype.Service; @@ -60,6 +57,7 @@ public class InventoryServiceImpl implements InventoryService { private final PickDetailRepository pickDetailRepository; private final EntityManager entityManager; private final ItemKeyRepository itemKeyRepository; + private final PickRepository pickRepository; private final TaskRepository taskRepository; private final PointRepository pointRepository; @@ -266,10 +264,21 @@ public class InventoryServiceImpl implements InventoryService { pickDetail.setStatus(BizStatus.PICK_ALL); } pickDetailRepository.save(pickDetail); + /** 更新出库单状态 -*/ + List pickDetailList=pickDetailRepository.findByQtyAllGtPick(pickDetail.getPick().getId()); + if (pickDetailList.size()==0){ + Pick pick=pickDetail.getPick(); + pick.setStatus(BizStatus.PICK_ALL); + pickRepository.save(pick); + } /** 添加库存日志,删除库存*/ Inventory inventory=task.getInventory(); inventoryLogService.storeInventoryLog(BizStatus.PICK_DOWN,BizStatus.REDUCE,inventory.getItemKey().getPropC3(),inventory.getItemKey(),task.getSrcPoint(),task.getDstPoint(),null,null,inventory.getQuantity(),task.getMoveQty(), task.getItemKey().getPropC6(),null,inventory.getId(),""); inventoryRepository.delete(inventory); + // 失效ItemKey + ItemKey itemKey=inventory.getItemKey(); + itemKey.setEnabled(false); + itemKeyRepository.save(itemKey); } } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/ItemKeyServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/ItemKeyServiceImpl.java index 27e3892..42617e0 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/ItemKeyServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/ItemKeyServiceImpl.java @@ -156,6 +156,7 @@ public class ItemKeyServiceImpl implements ItemKeyService { } @Override + @Transactional(rollbackFor = Exception.class) public ItemKey getItemKey(Item item, String propC1, String propC2, String propC3, String propC4, String propC5, String propC6,String propC7) { ItemKey itemKey; itemKey = itemKeyRepository.getByItemKey(item.getId(),propC1,propC2,propC3,propC4,propC5,propC6); 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 1c44a70..f57493b 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 @@ -178,56 +178,10 @@ public class PickDetailServiceImpl implements PickDetailService { if (pickDetail.getOrderQty() > pickDetail.getAllocatedQty()) { List inventoryList = inventoryRepository.queryInventory(item.getId()); if (inventoryList.size() > 0) { - double allocateQty = 0;//分配数量 - double unQty = quantity;//订单数量 - for (Inventory inv : inventoryList) { - Point startPoint = inv.getPoint();//原库位 - if (unQty == 0) { - break; - } - //整托分配 - allocateQty = inv.getQuantity(); - if (unQty < allocateQty) { - return ApiResult.fail(201, "单号:"+pickDetail.getPick().getRelatedBill1() - +"行:"+pickDetail.getLineNo()+",剩余订单数量不足一托"+"订单数量"+quantity+",剩余未分配数量" - +unQty+",库存单托数量"+inv.getQuantity(),null); - } - //更新库存 - inv.setQueuedQty(allocateQty); - inventoryRepository.save(inv); - unQty = unQty-allocateQty; - //占用点位 - startPoint.setStatus(BaseStatus.USED); - pointRepository.save(startPoint); - //更新出库单 - pickDetail.setAllocatedQty(pickDetail.getAllocatedQty() + allocateQty); - pickDetail.setStatus(BizStatus.ALLOCATE); - pickDetailRepository.save(pickDetail); - //生成Task任务 - Task task = new Task(); - task.setItem(inv.getItemKey().getItem()); - task.setItemKey(inv.getItemKey()); - task.setPickDetail(pickDetail); - task.setBillCode(pickDetail.getPick().getRelatedBill1()); - task.setSrcPoint(startPoint); - task.setDstPoint(endPoint); - task.setTaskType(BizStatus.PICK); - task.setTaskStatus(BizStatus.ALLOCATE); - task.setBeSkip(agvFlag);//是否AGV出库 - task.setPlanQty(allocateQty); - task.setDept(dept); - task.setInventory(inv); - taskRepository.save(task); - if (agvFlag==1) { - /** 是否AGV任务*/ - //生成AGV任务 - AgvTask agvTask = agvTaskService.addAgvTask(BizStatus.AGV, startPoint.getStorageType(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, BizStatus.PICK); - //更新Task任务 写入关联AGV - task.setAgvTask(agvTask); - taskRepository.save(task); - } - } - }else { + ApiResult apiResult = allocate(pickDetail, dept, quantity, agvFlag, endPoint, inventoryList); + if (apiResult != null) return apiResult; + } + else { return ApiResult.fail(500, item.getCode() + "料号,无库存", ""); } }else { @@ -236,6 +190,59 @@ public class PickDetailServiceImpl implements PickDetailService { return null; } + public ApiResult allocate(PickDetail pickDetail, Dept dept, Double quantity, Integer agvFlag, Point endPoint, List inventoryList) { + double allocateQty;//待分配数量 + double unQty = quantity;//订单总量 + for (Inventory inv : inventoryList) { + Point startPoint = inv.getPoint();//原库位 + if (unQty <= 0) { + break; + } + //整托分配 + allocateQty = inv.getQuantity(); + if (unQty < allocateQty) { + return ApiResult.fail(201, "单号:" + pickDetail.getPick().getRelatedBill1() + + "行:" + pickDetail.getLineNo() + ",剩余订单数量不足一托" + "订单数量" + quantity + ",剩余未分配数量" + + unQty + ",库存单托数量" + inv.getQuantity(), null); + } + //更新库存 + inv.setQueuedQty(allocateQty); + inventoryRepository.save(inv); + unQty = unQty-allocateQty; + //占用点位 + startPoint.setStatus(BaseStatus.USED); + pointRepository.save(startPoint); + //更新出库单 + pickDetail.setAllocatedQty(pickDetail.getAllocatedQty() + allocateQty); + pickDetail.setStatus(BizStatus.ALLOCATE); + pickDetailRepository.save(pickDetail); + //生成Task任务 + Task task = new Task(); + task.setItem(inv.getItemKey().getItem()); + task.setItemKey(inv.getItemKey()); + task.setPickDetail(pickDetail); + task.setBillCode(pickDetail.getPick().getRelatedBill1()); + task.setSrcPoint(startPoint); + task.setDstPoint(endPoint); + task.setTaskType(BizStatus.PICK); + task.setTaskStatus(BizStatus.ALLOCATE); + task.setBeSkip(agvFlag);//是否AGV出库 + task.setPlanQty(allocateQty); + task.setDept(dept); + task.setInventory(inv); + taskRepository.save(task); + if (agvFlag ==1) { + /** 是否AGV任务*/ + //生成AGV任务 + AgvTask agvTask = agvTaskService.addAgvTask(BizStatus.AGV, startPoint.getStorageType(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, BizStatus.PICK); + //更新Task任务 写入关联AGV + task.setAgvTask(agvTask); + taskRepository.save(task); + } + } + return null; + } + @Override @Transactional(rollbackFor = Exception.class) public synchronized void allocateAll(long id, Point endPoint) throws Exception { @@ -371,12 +378,16 @@ public class PickDetailServiceImpl implements PickDetailService { @Override @Transactional(rollbackFor = Exception.class) - public ApiResult cancelAllocate(long id, double quantity){ + public ApiResult cancelAllocate(long id, double cancelQuantity){ PickDetailDto pickDetailDto = findById(id); PickDetail pd = toEntity(pickDetailDto); List Tasks = taskRepository.getPickNotAllTask(id); for (Task task : Tasks) { + if (cancelQuantity<=0){ + break; + } + cancelQuantity=cancelQuantity-task.getPlanQty(); //根据Task找到对应的库存 Inventory inv = inventoryRepository.findById(task.getInventory().getId()).get(); inv.setQueuedQty(inv.getQueuedQty() - task.getPlanQty()); @@ -411,7 +422,7 @@ public class PickDetailServiceImpl implements PickDetailService { ApiResult apiResult=new ApiResult(); for (int i = 0; i < ids.length; i++) { PickDetail pickDetail=pickDetailRepository.getById(ids[i]); - apiResult = cancelAllocate(pickDetail.getId(), pickDetail.getOrderQty()); + apiResult = cancelAllocate(pickDetail.getId(), pickDetail.getAllocatedQty()); } return apiResult; } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java index c0ed825..4f0b6ca 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java @@ -535,7 +535,7 @@ public class TaskServiceImpl implements TaskService { List asnDetailList = asnDetailRepository.findByAsnAndItem(asn.getRelatedBill1(),sku); double orderQty=0; for (int i = 0; i < asnDetailList.size(); i++) { - orderQty=orderQty+asnDetailList.get(i).getOrderQty(); + orderQty=orderQty+(asnDetailList.get(i).getOrderQty()-asnDetailList.get(i).getReceivedQty()); } data.put("lineNos",asnDetailList.size()); data.put("RFID",rfid); @@ -580,26 +580,31 @@ public class TaskServiceImpl implements TaskService { if (inventory==null){ return ApiResult.fail(500,"库存异常",null); } - List taskList=taskRepository.findByItemKey(itemKey.getId(), BizStatus.ALLOCATE); - if (taskList.size()!=1){ - return ApiResult.fail(500,"Task异常",null); - } - Task task=taskList.get(0); - PickDetail pickDetail=task.getPickDetail(); - Pick pick=pickDetail.getPick(); + if (inventory.getQueuedQty()<=0){ - // 未占用库存 询问是否更改出库库存 + // 未分配 + data.put("sku",sku); + data.put("RFID",rfid); + data.put("invId",inventory.getId()); + return ApiResult.fail(201,"库存未进行分配,请选择需要出库出库单",data); }else { + // 已分配 + data.put("sku",sku); + data.put("RFID",rfid); + data.put("invId",inventory.getId()); + data.put("receivedQty",inventory.getQueuedQty()); + /** 查询关联Task任务*/ + List taskList=taskRepository.findByItemKey(itemKey.getId(), BizStatus.ALLOCATE); + Task task=taskList.get(0); + PickDetail pickDetail=task.getPickDetail(); + Pick pick=pickDetail.getPick(); // 已占用库存 推荐库存 data.put("relatedBill1",pick.getRelatedBill1()); data.put("relatedBill2",pick.getRelatedBill2()); data.put("billType",pick.getBillType()); - data.put("sku",sku); - data.put("lineNo",pickDetail.getLineNo()); - data.put("RFID",rfid); + data.put("pdId",pickDetail.getId()); data.put("taskId",task.getId()); - data.put("orderQty",pickDetail.getOrderQty()); - data.put("receivedQty",inventory.getQueuedQty()); + data.put("orderQty",pickDetail.getAllocatedQty()-pickDetail.getPickedQty()); } }else if (item.getGoodType().equals(BizStatus.BCP)){ @@ -611,4 +616,5 @@ public class TaskServiceImpl implements TaskService { } return ApiResult.fail(200, "操作成功", data); } + }