diff --git a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java index 566a51a..ce58f67 100644 --- a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java +++ b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java @@ -101,6 +101,7 @@ public class TaskAssignServiceImpl implements TaskAssignService { wcsTask.setPreTaskNo("0"); wcsTask.setTaskType(taskHeader.getTaskType().toString()); wcsTask.setFromPort("1000"); + wcsTask.setToPort(taskHeader.getStationCode()); wcsTask.setContainerCode(taskHeader.getContainerCode()); Location location; @@ -112,7 +113,6 @@ public class TaskAssignServiceImpl implements TaskAssignService { wcsTask.setStation(location.getRoadway()); wcsTask.setDestination(location.getRoadway()); - wcsTask.setToPort(location.getRoadway()); if(StringUtils.isEmpty(taskHeader.getFromLocation())){ wcsTask.setFromLocationCode("0"); }else { diff --git a/src/main/java/com/huaheng/pc/config/station/controller/stationController.java b/src/main/java/com/huaheng/pc/config/station/controller/stationController.java index 820f7cf..d9cd4f6 100644 --- a/src/main/java/com/huaheng/pc/config/station/controller/stationController.java +++ b/src/main/java/com/huaheng/pc/config/station/controller/stationController.java @@ -14,6 +14,7 @@ import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.framework.web.page.PageDomain; import com.huaheng.framework.web.page.TableDataInfo; import com.huaheng.framework.web.page.TableSupport; +import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.station.domain.Station; import com.huaheng.pc.config.station.service.StationService; import io.swagger.annotations.ApiParam; @@ -23,9 +24,7 @@ import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; /** * Created by Enzo Cotter on 2019/10/14. @@ -134,4 +133,21 @@ public class stationController extends BaseController { return toAjax(stationService.removeByIds(list)); } + @PostMapping("/getData") + @ResponseBody + public Map<String, Object> getData() { + LambdaQueryWrapper<Station> queryWrapper = Wrappers.lambdaQuery(); + List<Station> stationList = stationService.list(queryWrapper); + + List<Map<String, Object>> list = new ArrayList<>(); + for (Station station : stationList) { + Map<String, Object> resultMap = new HashMap<>(); + resultMap.put("id", station.getCode()); + resultMap.put("text", station.getName()); + list.add(resultMap); + } + Map<String, Object> map = new HashMap<>(); + map.put("results", list); + return map; + } } diff --git a/src/main/java/com/huaheng/pc/receipt/receiving/controller/ReceivingController.java b/src/main/java/com/huaheng/pc/receipt/receiving/controller/ReceivingController.java index 088fcf3..fc4ba87 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiving/controller/ReceivingController.java +++ b/src/main/java/com/huaheng/pc/receipt/receiving/controller/ReceivingController.java @@ -116,6 +116,9 @@ public class ReceivingController extends BaseController { @ApiParam(name="locationCode",value="库位编码", required = false)String locationCode, @ApiParam(name="qty",value="收货数量") BigDecimal qty, @ApiParam(name="localtionRule",value="定位规则", required = false)String locatingRule){ + if(qty.intValue() <= 0) { + return AjaxResult.error("配盘数量必须大于0"); + } AjaxResult result = receiptContainerHeaderService.saveContainer(receiptCode, containerCode, receiptDetailId, locationCode, qty, locatingRule); return result; diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java index 6474c70..3fcd4e2 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java @@ -57,6 +57,13 @@ public class ShipmentContainerHeader implements Serializable { private Integer status; /** + * 出库站台 + */ + @TableField(value = "stationCode") + @ApiModelProperty(value="出库站台") + private String stationCode; + + /** * 父 */ @TableField(value = "parent") @@ -443,6 +450,14 @@ public class ShipmentContainerHeader implements Serializable { this.status = status; } + public String getStationCode() { + return stationCode; + } + + public void setStationCode(String stationCode) { + this.stationCode = stationCode; + } + /** * 获取父 * diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java index 5904bff..88b94ab 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java @@ -211,6 +211,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont shipmentContainerHeader.setLocationCode(location.getCode()); shipmentContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); shipmentContainerHeader.setCompanyCode(shipmentDetail.getCompanyCode()); + shipmentContainerHeader.setStationCode(shipmentDetail.getStationCode()); shipmentContainerHeader.setContainerType(container.getContainerType()); shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_BUILD); shipmentContainerHeader.setTaskCreated(0); diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/domain/ShipmentDetail.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/domain/ShipmentDetail.java index 76ca1aa..0cb0b30 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/domain/ShipmentDetail.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/domain/ShipmentDetail.java @@ -188,6 +188,13 @@ public class ShipmentDetail implements Serializable { private String projectNo; /** + * 出库站台 + */ + @TableField(value = "stationCode") + @ApiModelProperty(value="出库站台") + private String stationCode; + + /** * 生产日期 */ @TableField(value = "manufactureDate") @@ -1009,6 +1016,14 @@ public class ShipmentDetail implements Serializable { return processStamp; } + public String getStationCode() { + return stationCode; + } + + public void setStationCode(String stationCode) { + this.stationCode = stationCode; + } + /** * 设置处理标记 * diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java index 693f2b9..b9467ba 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.utils.DataUtils; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; @@ -37,12 +38,15 @@ import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; +import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.Date; import java.util.List; +import java.util.Map; /** * 入库任务创建和完成 @@ -71,6 +75,8 @@ public class ReceiptTaskService { @Resource private ReceiptContainerHeaderService receiptContainerHeaderService; @Resource + private TaskHeaderMapper taskHeaderMapper; + @Resource private ContainerService containerService; @Resource private LocationService locationService; @@ -186,90 +192,137 @@ public class ReceiptTaskService { /** * 完成入库任务 - * - * @param task - * @return */ @Transactional(rollbackFor = Exception.class) public AjaxResult completeReceiptTask(TaskHeader task) { - /* 判断任务状态*/ - if (task.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { - return AjaxResult.error("任务已完成"); + List<Map<String, Object>> taskReceiptContainerDetail = taskHeaderMapper.getReceiptTask(task.getId()); + if (taskReceiptContainerDetail.size() < 1) { + return AjaxResult.success("未找到对应任务的入库单号!!!"); } - BigDecimal totalQty = BigDecimal.ZERO; - List<TaskDetail> taskDetailList = taskDetailService.findByTaskId(task.getId()); - if (taskDetailList.isEmpty()) { - throw new ServiceException("任务明细为空"); + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(InventoryHeader::getLocationCode, task.getToLocation()) + .eq(InventoryHeader::getContainerCode, task.getContainerCode()); + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); + + if(header == null) { + //添加库存单 + header = new InventoryHeader(); + header.setWarehouseCode(task.getWarehouseCode()); + header.setCompanyCode(task.getCompanyCode());//货主 + header.setContainerCode(task.getContainerCode()); + header.setContainerStatus("some"); + header.setLocationCode(task.getToLocation()); + header.setLocking(1); + header.setEnable(1); + header.setTotalQty(new BigDecimal(0)); + header.setTotalWeight(task.getWeight()); + header.setCreatedBy(ShiroUtils.getLoginName()); + header.setCreated(new Date()); + header.setLastUpdatedBy(ShiroUtils.getLoginName()); + header.setLastUpdated(new Date()); + if (!inventoryHeaderService.save(header)) { + throw new ServiceException("添加库存单失败"); + } } - /* 遍历任务明细,修改关联的入库组盘、入库单状态、添加库存*/ - for (TaskDetail taskDetail : taskDetailList) { - if (taskDetail.getStatus() < QuantityConstant.TASK_STATUS_COMPLETED) { - totalQty = totalQty.add(taskDetail.getQty()); - /*查询入库单明细*/ - ReceiptDetail receiptDetail = receiptDetailService.getById(taskDetail.getBillDetailId()); - if (StringUtils.isNotNull(receiptDetail)) { - LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); - inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) - .eq(InventoryHeader::getLocationCode, task.getToLocation()) - .eq(InventoryHeader::getContainerCode, task.getContainerCode()); - InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); - /* 如果库存 头明细不存在则新增库存头表记录*/ - if (StringUtils.isNull(inventoryHeader)) { - inventoryHeader = new InventoryHeader(); - inventoryHeader.setWarehouseCode(receiptDetail.getWarehouseCode()); - inventoryHeader.setLocationCode(task.getToLocation()); - inventoryHeader.setContainerCode(task.getContainerCode()); - inventoryHeader.setContainerStatus("some"); - inventoryHeader.setCompanyCode(receiptDetail.getCompanyCode()); - inventoryHeader.setTotalWeight(task.getWeight()); - inventoryHeader.setTotalQty(new BigDecimal(0)); - inventoryHeader.setTotalLines(0); - inventoryHeader.setLocking(1); - inventoryHeader.setEnable(1); - if (!inventoryHeaderService.save(inventoryHeader)) { - throw new ServiceException("添加库存单失败"); - } - inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); + for (Map<String, Object> map : taskReceiptContainerDetail) { + //将未完成的任务数量更新到库存表 + if (DataUtils.getInteger(map.get("status")) < QuantityConstant.TASK_STATUS_COMPLETED) { + + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(InventoryDetail::getLocationCode, task.getToLocation()) + .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode"))) + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode"))) + .eq(InventoryDetail::getBatch, DataUtils.getString(map.get("batch"))) + .eq(InventoryDetail::getLot, DataUtils.getString(map.get("lot"))) + .eq(InventoryDetail::getProjectNo, DataUtils.getString(map.get("projectNo"))) + .eq(InventoryDetail::getCompanyCode, DataUtils.getString(map.get("companyCode"))); + InventoryDetail detail = inventoryDetailService.getOne(inventory); + if (detail == null) { + //库存明细添加 + detail = new InventoryDetail(); + detail.setInventoryHeaderId(header.getId());//库存头ID + detail.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库 + detail.setCompanyCode(task.getCompanyCode());//货主 + detail.setLocationCode(task.getToLocation());//库位号 + detail.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号 + detail.setMaterialCode(DataUtils.getString(map.get("materialCode")));//物料号 + detail.setMaterialName(DataUtils.getString(map.get("materialName")));//物料名称 + detail.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 + detail.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 + detail.setReceiptCode(DataUtils.getString(map.get("receiptCode")));//入库单编码 + detail.setReceiptDetailId(DataUtils.getInteger(map.get("receiptDetailId")));//入库单明细ID + detail.setBatch(DataUtils.getString(map.get("batch")));//批次 + detail.setLot(DataUtils.getString(map.get("lot")));//批号 + detail.setProjectNo(DataUtils.getString(map.get("projectNo")));//项目号 + detail.setInventorySts(DataUtils.getString(map.get("inventorySts")));//库存状态 +// detail.setManufactureDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("manufactureDate").toString()));//生产日期 +// detail.setExpirationDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("expirationDate").toString()));//失效日期 + detail.setQty(DataUtils.getBigDecimal(map.get("qty")));//数量 + detail.setLockedQty(DataUtils.getBigDecimal(0)); + detail.setTaskQty(DataUtils.getBigDecimal(0)); + detail.setCreatedBy(ShiroUtils.getLoginName());//创建人 + detail.setLastUpdatedBy(ShiroUtils.getLoginName());//创建时间 + if (!inventoryDetailService.save(detail)) { + throw new ServiceException("添加库存明细失败"); } - totalQty = this.addInventoryDetail(taskDetail, receiptDetail, inventoryHeader); - //修改组盘表状态为完成 - ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); - receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED); - LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); - receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getId, taskDetail.getAllocationId()); - if (!receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)){ - throw new ServiceException("更新组盘状态失败"); + } else { + detail.setQty(detail.getQty().add(DataUtils.getBigDecimal(map.get("qty")))); + detail.setLastUpdatedBy(ShiroUtils.getLoginName()); + LambdaUpdateWrapper<InventoryDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(InventoryDetail::getId, detail.getId()); + if (!inventoryDetailService.update(detail, lambdaUpdateWrapper)){ + throw new ServiceException("更新库存明细失败"); } + } + //记录库存交易记录 + InventoryTransaction inventoryTransaction = new InventoryTransaction(); + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT); + inventoryTransaction.setWarehouseCode(DataUtils.getString(map.get("warehouseCode"))); + inventoryTransaction.setCompanyCode(task.getCompanyCode()); + inventoryTransaction.setLocationCode(task.getToLocation()); + inventoryTransaction.setContainerCode(DataUtils.getString(map.get("containerCode"))); + inventoryTransaction.setMaterialCode(DataUtils.getString(map.get("materialCode"))); + inventoryTransaction.setMaterialName(DataUtils.getString(map.get("materialName"))); + inventoryTransaction.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 + inventoryTransaction.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 + inventoryTransaction.setBillCode(DataUtils.getString(map.get("receiptCode"))); + inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId"))); + inventoryTransaction.setBatch(DataUtils.getString(map.get("batch"))); + inventoryTransaction.setLot(DataUtils.getString(map.get("lot"))); + inventoryTransaction.setInventorySts(DataUtils.getString((map.get("inventorySts")))); + inventoryTransaction.setTaskQty(DataUtils.getBigDecimal(map.get("qty"))); + inventoryTransaction.setCreated(new Date()); + inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName()); + if (!inventoryTransactionService.save(inventoryTransaction)) { + throw new ServiceException("新增库存记录失败"); + } - } else { - throw new ServiceException("未找到id:" + taskDetail.getBillDetailId() + "入库单明细"); + //修改任务明细的状态为完成 + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + taskDetail.setAgingDate(new Date()); //入库时间 + LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId()); + taskDetailService.update(taskDetail, lambdaUpdateWrapper); + if (!taskDetailService.update(taskDetail, lambdaUpdateWrapper)) { + throw new ServiceException("修改入库单明细失败"); } - receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_POSTING)); - receiptDetailService.updateById(receiptDetail); - receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); - materialWarningService.materialWarning(taskDetail.getMaterialCode(), taskDetail.getCompanyCode()); + } - } - LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); - inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) - .eq(InventoryHeader::getLocationCode, task.getToLocation()) - .eq(InventoryHeader::getContainerCode, task.getContainerCode()); - InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); - if (StringUtils.isNull(inventoryHeader)) { - throw new ServiceException("库存添加失败"); - } else { - inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().add(totalQty)); - inventoryHeader.setTotalLines(inventoryHeader.getTotalLines()+taskDetailList.size()); - inventoryHeaderService.updateById(inventoryHeader); + } //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成 task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + task.setLastUpdatedBy(ShiroUtils.getLoginName()); + task.setLastUpdated(new Date()); LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId()); if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper)){ throw new ServiceException("更新任务主表失败"); } - //修改库位状态和对应的容器 Location location = new Location(); location.setContainerCode(task.getContainerCode()); @@ -288,15 +341,41 @@ public class ReceiptTaskService { if (!containerService.update(container, containerLambdaUpdateWrapper)) { throw new ServiceException("更新容器失败"); } + //修改组盘表状态为20 + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); + receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_REVIEWSUCCESS); + receiptContainerDetail.setProcessStamp("0"); + receiptContainerDetail.setLastUpdated(new Date()); + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); + receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); + if (!receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)){ + throw new ServiceException("更新组盘状态失败"); + } //修改入库组盘头表状态 + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); receiptContainerHeader.setId(task.getAllocationHeadId()); - receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED); + receiptContainerHeader.setLastUpdated(new Date()); + receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED.intValue()); if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { throw new ServiceException("更新入库组盘头表状态失败"); } - return AjaxResult.success(); + + //修改入库单状态 + ReceiptHeader receiptHeader = new ReceiptHeader(); + receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POSTING); + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING); + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptHeader.setLastUpdated(new Date()); + LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); + receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); + if (!receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper)) { + throw new ServiceException("更新入库头表状态失败"); + } + return AjaxResult.success("完成入库任务"); } /** diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java index 371b493..14e9223 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java @@ -139,6 +139,7 @@ public class ShipmentTaskService { task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode()); task.setAssignedUser(ShiroUtils.getLoginName()); task.setConfirmedBy(ShiroUtils.getLoginName()); + task.setStationCode(shipmentContainerHeader.getStationCode()); task.setStatus(QuantityConstant.TASK_STATUS_BUILD); task.setContainerCode(shipmentContainerHeader.getContainerCode()); if (!taskHeaderService.save(task)){ diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java index 6a87e45..ee43962 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java @@ -56,4 +56,10 @@ public interface TaskHeaderService extends IService<TaskHeader>{ AjaxResult setLocationCode(Integer taskId, Integer high); + AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel); + + AjaxResult completeReceiptTask(TaskHeader task); + + AjaxResult createReceiptTask(List<Integer> ids); + } diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java index 538d699..ccd5946 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java @@ -73,6 +73,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Resource private ShipmentContainerHeaderService shipmentContainerHeaderService; @Resource + private ShipmentContainerDetailService shipmentContainerDetailService; + @Resource private LocationService locationService; @Resource private ContainerService containerService; @@ -84,12 +86,19 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea private InventoryHeaderService inventoryHeaderService; @Resource private InventoryDetailService inventoryDetailService; - @Resource - private TransferTaskService transferTaskService; + private InventoryTransactionService inventoryTransactionService; + @Resource + private ReceiptHeaderService receiptHeaderService; + @Resource + private ReceiptDetailService receiptDetailService; @Resource private ReceiptContainerDetailService receiptContainerDetailService; @Resource + private ShipmentHeaderService shipmentHeaderService; + @Resource + private ShipmentDetailService shipmentDetailService; + @Resource private CycleCountDetailService cycleCountDetailService; @Resource private CycleCountHeaderService cycleCountHeaderService; @@ -97,9 +106,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea private ReceiptContainerHeaderService receiptContainerHeaderService; @Resource private TaskHeaderMapper taskHeaderMapper; - @Resource + @Autowired private TaskAssignService taskAssignService; @Resource + private ContainerCapacityService containerCapacityService; + @Resource + private ConfigWarningService configWarningService; + @Resource + private ReceivingService receivingService; + @Resource private CreateTaskMessage createTaskMessage; @Resource private ReceiptTaskService receiptTaskService; @@ -107,6 +122,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea private ShipmentTaskService shipmentTaskService; @Resource private WorkTaskService workTaskService; + @Resource + private TransferTaskService transferTaskService; /** * 盘点任务首选项 @@ -153,7 +170,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } if(list.get(0).getTaskType()==100 || list.get(0).getTaskType()==200){ //入库任务 - return receiptTaskService.completeReceiptTask((list.get(0))); + return completeReceiptTask((list.get(0))); } else { throw new ServiceException("库位(" + locationCode + ")的任务不是上架,不能完成!"); } @@ -191,7 +208,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } List<Integer> ids = new ArrayList<>(); ids.add(containerHeader.getId()); - receiptTaskService.createReceiptTask(ids); + this.createReceiptTask(ids); return AjaxResult.success("成功!"); } @@ -321,6 +338,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return AjaxResult.success("取消任务成功!"); } + /** * 容器收货上架 * @@ -356,19 +374,145 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (StringUtils.isEmpty(ids)){ return AjaxResult.error("id不能为空"); } - Integer maxId = idList.stream().max(Comparator.comparing(Integer::intValue)).orElse(null); LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery(); lambda.select(ReceiptContainerHeader::getId) .lt(ReceiptContainerHeader::getStatus, 10) .le(ReceiptContainerHeader::getId, maxId); - return receiptTaskService.createReceiptTask(idList); + return createReceiptTask(idList); } return AjaxResult.error("生成入库任务失败"); } /** + * 生成出库任务 + * + * @param shipmentTaskCreateModel + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel) { + Boolean flag = true; + Integer shipmentContainerHeaderId = shipmentTaskCreateModel.getShipmentContainerHeaderIds(); + //获取表头 + ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeaderId); + if (shipmentContainerHeader == null) { + return AjaxResult.error("出库货箱" + shipmentContainerHeaderId + "未找到,操作中止"); + } + if (shipmentContainerHeader.getStatus() >= QuantityConstant.SHIPMENT_CONTAINER_TASK) { + return AjaxResult.error("出库货箱" + shipmentContainerHeader.getContainerCode() + "已经生成任务,请不要重复生成,操作中止"); + } + //获取所有子货箱 + LambdaQueryWrapper<ShipmentContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ShipmentContainerDetail::getShippingContainerId, shipmentContainerHeader.getId()); + List<ShipmentContainerDetail> shipmentContainerDetails = shipmentContainerDetailService.list(lambdaQueryWrapper); + if (shipmentContainerDetails == null || shipmentContainerDetails.size() == 0) { + return AjaxResult.error("货箱" + shipmentContainerHeader.getContainerCode() + "没有子任务,操作中止"); + } + //检测库位 + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); + locationLambdaQueryWrapper.eq(Location::getCode, shipmentContainerHeader.getLocationCode()) + .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(Location::getDeleted, false); + Location location = locationService.getOne(locationLambdaQueryWrapper); + if (location == null) { + return AjaxResult.error("库位禁用或不存在!"); + } + //创建任务头 + TaskHeader task = new TaskHeader(); + //分拣出库 + task.setTaskType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT); + task.setFromLocation(shipmentContainerHeader.getLocationCode()); + task.setToLocation(shipmentContainerHeader.getLocationCode()); + //判断是否整出任务,钱柜和AGV不能整出 + + //表示整出优先 + //判断当前子货箱所有数量是否等于该托盘对应的所有库存的数量, + //这里必须与库存的在库数量对比,后期可能存在一个配盘在执行任务,后一个配盘又在配这个的情况(这个时候不能整出) + // 如果相等,则说明这个货箱包含了所有的数量,则可以整出,否则,创建拣选任务; + //查询所有库存 + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); + inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode, shipmentContainerHeader.getLocationCode()) + .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); + List<InventoryDetail> inventories = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); + BigDecimal inventoryTotal = new BigDecimal("0"); + for (InventoryDetail item : inventories) { + inventoryTotal = inventoryTotal.add(item.getQty()); + } + BigDecimal containerTotal = new BigDecimal("0"); + for (ShipmentContainerDetail item : shipmentContainerDetails) { + containerTotal = containerTotal.add(item.getQty()); + } + if (inventoryTotal.compareTo(containerTotal) == 0) { + task.setTaskType(QuantityConstant.TASK_TYPE_WHOLESHIPMENT);//整盘出库 + task.setToLocation(""); + } + + task.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_PICKING); + task.setAllocationHeadId(shipmentContainerHeader.getId()); + task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode()); + task.setCompanyCode(shipmentContainerHeader.getCompanyCode()); + task.setAssignedUser(ShiroUtils.getLoginName()); + task.setConfirmedBy(ShiroUtils.getLoginName()); + task.setStatus(QuantityConstant.TASK_STATUS_BUILD); + task.setContainerCode(shipmentContainerHeader.getContainerCode()); + task.setCreatedBy(ShiroUtils.getLoginName()); + task.setCreated(new Date()); + task.setLastUpdatedBy(ShiroUtils.getLoginName()); + task.setLastUpdated(null); + this.save(task); + //遍历子货箱创建子任务 + for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetails) { + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setTaskId(task.getId()); + taskDetail.setInternalTaskType(task.getInternalTaskType()); + taskDetail.setWarehouseCode(task.getWarehouseCode()); + taskDetail.setCompanyCode(task.getCompanyCode()); + taskDetail.setTaskType(task.getTaskType()); + taskDetail.setToInventoryId(shipmentContainerDetail.getInventoryId()); + taskDetail.setAllocationId(shipmentContainerDetail.getId()); + taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode()); + taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId()); + taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode()); + taskDetail.setMaterialName(shipmentContainerDetail.getMaterialName()); + taskDetail.setMaterialSpec(shipmentContainerDetail.getMaterialSpec()); + taskDetail.setMaterialUnit(shipmentContainerDetail.getMaterialUnit()); + taskDetail.setFromInventoryId(shipmentContainerDetail.getInventoryId()); + taskDetail.setQty(shipmentContainerDetail.getQty()); + taskDetail.setContainerCode(task.getContainerCode()); + taskDetail.setFromLocation(task.getFromLocation()); + taskDetail.setToLocation(task.getToLocation()); + taskDetail.setLot(shipmentContainerDetail.getLot()); + taskDetail.setBatch(shipmentContainerDetail.getBatch()); + taskDetail.setProjectNo(shipmentContainerDetail.getProjectNo()); + taskDetail.setStatus(QuantityConstant.TASK_STATUS_BUILD); + taskDetail.setWaveId(shipmentContainerDetail.getWaveId()); + taskDetail.setInventorySts(shipmentContainerDetail.getInventorySts()); + taskDetail.setCreatedBy(ShiroUtils.getLoginName()); + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + flag = taskDetailService.save(taskDetail); + if (flag == false) { + throw new ServiceException("新建任务明细失败,sql报错"); + } + shipmentContainerDetail.setStatus(QuantityConstant.SHIPMENT_CONTAINER_TASK); + } + //更新货位状态 + shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_TASK); + flag = shipmentContainerHeaderService.updateById(shipmentContainerHeader); + if (flag == false) { + throw new ServiceException("修改组盘头状态失败,sql报错"); + } + + flag = shipmentContainerDetailService.updateBatchById(shipmentContainerDetails); + if (flag == false) { + throw new ServiceException("修改组盘明细状态明细失败,sql报错"); + } + return AjaxResult.success(task.getId()); + } + + /** * 下发WCS执行任务 * 执行任务 */ @@ -382,9 +526,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (task.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) { return AjaxResult.error("任务" + taskId + "已经下发,请不要重复下发,操作中止"); } - // 给wcs传递任务 - taskAssignService.wcsTaskAssign(task); + try { + createTaskMessage.createTask(task); + } catch (Exception e) { + e.printStackTrace(); + } //修改任务头表 task.setId(taskId); @@ -415,12 +562,50 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } +// //修改入库明细 +// if (task.getInternalTaskType()==100){ +// ReceiptDetail receiptDetail = receiptDetailService.queryflow(receiptDetailService.getById(record.getId())); +// if (!receiptDetailService.updateById(receiptDetail)){ +// throw new ServiceException("更新状态失败"); +// } +// receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); +// +// //修改组盘表状态为20 +// ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); +// receiptContainerDetail.setStatus(20); +// receiptContainerDetail.setLastUpdated(new Date()); +// receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); +// LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); +// receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId,receiptDetail.getReceiptId()); +// if (! receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)) +// throw new ServiceException("更新组盘状态失败"); +// } +// +// //修改出库单状态 +// if (task.getInternalTaskType()==200){ +// LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); +// taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskId,task.getId()); +// List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambdaQueryWrapper); +// +// for (TaskDetail taskDeatails: taskDetailList) { +// LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); +// shipmentDetailLambdaQueryWrapper.eq(ShipmentDetail::getId,taskDeatails.getBillDetailId()); +// +// ShipmentHeader shipmentHeader =new ShipmentHeader(); +// shipmentHeader.setId(shipmentDetailService.getOne(shipmentDetailLambdaQueryWrapper).getShipmentId()); +// shipmentHeader.setFirstStatus(100); +// shipmentHeader.setLastStatus(100); +// shipmentHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); +// shipmentHeader.setLastUpdated(new Date()); +// shipmentHeaderService.updateById(shipmentHeader); +// } +// } + } return AjaxResult.success("执行下发任务成功", task); } @Override - @Transactional(rollbackFor = Exception.class) public AjaxResult completeTaskByWMS(Integer[] taskIds, String[] weightConvert) { for (int i = 0;i<taskIds.length;i++) { TaskHeader task = taskHeaderService.getById(taskIds[i]); @@ -444,8 +629,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if(task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_EMPTYRECEIPT)){ if(StringUtils.isEmpty(task.getToLocation())){ //自动分配库位 - // AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); - // task.setToLocation((String)ajaxResult.getData()); +// AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); +// task.setToLocation((String)ajaxResult.getData()); } } //如果没有库位不能完成 @@ -468,6 +653,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_SHELF) ) { //入库任务 receiptTaskService.completeReceiptTask(task); + combineInventory(task); } if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_PICKING) && (task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT))) { @@ -476,7 +662,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } // 900 出库查看,空托出库查看 if (task.getTaskType().equals( QuantityConstant.TASK_TYPE_VIEW)) { - workTaskService.completeCheckOutTask(task); + workTaskService.completeCheckOutTask(task); } // 700 盘点 if (task.getTaskType().equals(QuantityConstant.TASK_TYPE_CYCLECOUNT)) { @@ -496,6 +682,244 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } + + /** + * 完成入库任务 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult completeReceiptTask(TaskHeader task) { + List<Map<String, Object>> taskReceiptContainerDetail = taskHeaderMapper.getReceiptTask(task.getId()); + if (taskReceiptContainerDetail.size() < 1) { + return AjaxResult.success("未找到对应任务的入库单号!!!"); + } + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(InventoryHeader::getLocationCode, task.getToLocation()) + .eq(InventoryHeader::getContainerCode, task.getContainerCode()); + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); + + if(header == null) { + //添加库存单 + header = new InventoryHeader(); + header.setWarehouseCode(task.getWarehouseCode()); + header.setCompanyCode(task.getCompanyCode());//货主 + header.setContainerCode(task.getContainerCode()); + header.setContainerStatus("some"); + header.setLocationCode(task.getToLocation()); + header.setLocking(1); + header.setEnable(1); + header.setTotalQty(new BigDecimal(0)); + header.setTotalWeight(task.getWeight()); + header.setCreatedBy(ShiroUtils.getLoginName()); + header.setCreated(new Date()); + header.setLastUpdatedBy(ShiroUtils.getLoginName()); + header.setLastUpdated(new Date()); + if (!inventoryHeaderService.save(header)) { + throw new ServiceException("添加库存单失败"); + } + } + for (Map<String, Object> map : taskReceiptContainerDetail) { + //将未完成的任务数量更新到库存表 + if (DataUtils.getInteger(map.get("status")) < QuantityConstant.TASK_STATUS_COMPLETED) { + + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(InventoryDetail::getLocationCode, task.getToLocation()) + .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode"))) + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode"))) + .eq(InventoryDetail::getBatch, DataUtils.getString(map.get("batch"))) + .eq(InventoryDetail::getLot, DataUtils.getString(map.get("lot"))) + .eq(InventoryDetail::getProjectNo, DataUtils.getString(map.get("projectNo"))) + .eq(InventoryDetail::getCompanyCode, DataUtils.getString(map.get("companyCode"))); + InventoryDetail detail = inventoryDetailService.getOne(inventory); + if (detail == null) { + //库存明细添加 + detail = new InventoryDetail(); + detail.setInventoryHeaderId(header.getId());//库存头ID + detail.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库 + detail.setCompanyCode(task.getCompanyCode());//货主 + detail.setLocationCode(task.getToLocation());//库位号 + detail.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号 + detail.setMaterialCode(DataUtils.getString(map.get("materialCode")));//物料号 + detail.setMaterialName(DataUtils.getString(map.get("materialName")));//物料名称 + detail.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 + detail.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 + detail.setReceiptCode(DataUtils.getString(map.get("receiptCode")));//入库单编码 + detail.setReceiptDetailId(DataUtils.getInteger(map.get("receiptDetailId")));//入库单明细ID + detail.setBatch(DataUtils.getString(map.get("batch")));//批次 + detail.setLot(DataUtils.getString(map.get("lot")));//批号 + detail.setProjectNo(DataUtils.getString(map.get("projectNo")));//项目号 + detail.setInventorySts(DataUtils.getString(map.get("inventorySts")));//库存状态 +// detail.setManufactureDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("manufactureDate").toString()));//生产日期 +// detail.setExpirationDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("expirationDate").toString()));//失效日期 + detail.setQty(DataUtils.getBigDecimal(map.get("qty")));//数量 + detail.setLockedQty(DataUtils.getBigDecimal(0)); + detail.setTaskQty(DataUtils.getBigDecimal(0)); + detail.setCreatedBy(ShiroUtils.getLoginName());//创建人 + detail.setLastUpdatedBy(ShiroUtils.getLoginName());//创建时间 + if (!inventoryDetailService.save(detail)) { + throw new ServiceException("添加库存明细失败"); + } + } else { + detail.setQty(detail.getQty().add(DataUtils.getBigDecimal(map.get("qty")))); + detail.setLastUpdatedBy(ShiroUtils.getLoginName()); + LambdaUpdateWrapper<InventoryDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(InventoryDetail::getId, detail.getId()); + if (!inventoryDetailService.update(detail, lambdaUpdateWrapper)){ + throw new ServiceException("更新库存明细失败"); + } + } + //记录库存交易记录 + InventoryTransaction inventoryTransaction = new InventoryTransaction(); + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT); + inventoryTransaction.setWarehouseCode(DataUtils.getString(map.get("warehouseCode"))); + inventoryTransaction.setCompanyCode(task.getCompanyCode()); + inventoryTransaction.setLocationCode(task.getToLocation()); + inventoryTransaction.setContainerCode(DataUtils.getString(map.get("containerCode"))); + inventoryTransaction.setMaterialCode(DataUtils.getString(map.get("materialCode"))); + inventoryTransaction.setMaterialName(DataUtils.getString(map.get("materialName"))); + inventoryTransaction.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 + inventoryTransaction.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 + inventoryTransaction.setBillCode(DataUtils.getString(map.get("receiptCode"))); + inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId"))); + inventoryTransaction.setBatch(DataUtils.getString(map.get("batch"))); + inventoryTransaction.setLot(DataUtils.getString(map.get("lot"))); + inventoryTransaction.setInventorySts(DataUtils.getString((map.get("inventorySts")))); + inventoryTransaction.setTaskQty(DataUtils.getBigDecimal(map.get("qty"))); + inventoryTransaction.setCreated(new Date()); + inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName()); + if (!inventoryTransactionService.save(inventoryTransaction)) { + throw new ServiceException("新增库存记录失败"); + } + + //修改任务明细的状态为完成 + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + taskDetail.setAgingDate(new Date()); //入库时间 + LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId()); + taskDetailService.update(taskDetail, lambdaUpdateWrapper); + if (!taskDetailService.update(taskDetail, lambdaUpdateWrapper)) { + throw new ServiceException("修改入库单明细失败"); + } + + } + + } + //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成 + task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + task.setLastUpdatedBy(ShiroUtils.getLoginName()); + task.setLastUpdated(new Date()); + LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); + taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId()); + if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper)){ + throw new ServiceException("更新任务主表失败"); + } + //修改库位状态和对应的容器 + Location location = new Location(); + location.setContainerCode(task.getContainerCode()); + location.setStatus("empty"); + LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate(); + locationLambdaUpdateWrapper.eq(Location::getCode, task.getToLocation()); + if (!locationService.update(location, locationLambdaUpdateWrapper)){ + throw new ServiceException("更新库位失败"); + } + //修改容器状态和对应的库位 + Container container = new Container(); + container.setLocationCode(task.getToLocation()); + container.setStatus("some"); + LambdaUpdateWrapper<Container> containerLambdaUpdateWrapper = Wrappers.lambdaUpdate(); + containerLambdaUpdateWrapper.eq(Container::getCode, task.getContainerCode()); + if (!containerService.update(container, containerLambdaUpdateWrapper)) { + throw new ServiceException("更新容器失败"); + } + //修改组盘表状态为20 + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); + receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_REVIEWSUCCESS); + receiptContainerDetail.setProcessStamp("0"); + receiptContainerDetail.setLastUpdated(new Date()); + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); + receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); + if (!receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)){ + throw new ServiceException("更新组盘状态失败"); + } + + //修改入库组盘头表状态 + + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); + receiptContainerHeader.setId(task.getAllocationHeadId()); + receiptContainerHeader.setLastUpdated(new Date()); + receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED.intValue()); + if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { + throw new ServiceException("更新入库组盘头表状态失败"); + } + + //修改入库单状态 + ReceiptHeader receiptHeader = new ReceiptHeader(); + receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POSTING); + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING); + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptHeader.setLastUpdated(new Date()); + LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); + receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); + if (!receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper)) { + throw new ServiceException("更新入库头表状态失败"); + } + return AjaxResult.success("完成入库任务"); + } + + @Transactional(rollbackFor = Exception.class) + public void combineInventory(TaskHeader task) { + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(InventoryHeader::getLocationCode, task.getToLocation()) + .eq(InventoryHeader::getContainerCode, task.getContainerCode()); + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); + if(header != null) { + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(InventoryDetail::getLocationCode, task.getFromLocation()) + .eq(InventoryDetail::getContainerCode, task.getContainerCode()); + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventory); + for(int i=0; i < inventoryDetailList.size() -1; i++) { + for(int j = inventoryDetailList.size() - 1; j > i; j--) { + InventoryDetail inventoryDetail = inventoryDetailList.get(i); + InventoryDetail inventoryDetail2 = inventoryDetailList.get(j); + if(inventoryDetail.getMaterialCode().equals(inventoryDetail2.getMaterialCode()) + && inventoryDetail.getBatch().equals(inventoryDetail2.getBatch()) + && inventoryDetail.getLot().equals(inventoryDetail2.getLot()) + && inventoryDetail.getProjectNo().equals(inventoryDetail2.getProjectNo())) { + BigDecimal totalQty = inventoryDetailList.get(i).getQty().add(inventoryDetailList.get(j).getQty()); + inventoryDetailList.get(i).setQty(totalQty); + LambdaQueryWrapper<InventoryDetail> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(InventoryDetail::getId, inventoryDetailList.get(i).getId()); + inventoryDetailService.update(inventoryDetailList.get(i), wrapper); + LambdaQueryWrapper<InventoryDetail> wrapper2 = Wrappers.lambdaQuery(); + wrapper2.eq(InventoryDetail::getId, inventoryDetailList.get(j).getId()); + inventoryDetailService.remove(wrapper2); + inventoryDetailList.remove(j); + } + } + } + BigDecimal totalQty = new BigDecimal(0); + int totalLines = 0; + for(InventoryDetail inventoryDetail : inventoryDetailList) { + totalQty = totalQty.add(inventoryDetail.getQty()); + totalLines++; + } + header.setTotalQty(totalQty); + header.setTotalLines(totalLines); + header.setContainerStatus("some"); + LambdaQueryWrapper<InventoryHeader> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(InventoryHeader::getId, header.getId()); + inventoryHeaderService.update(header, wrapper); + } + } + /** * 移动端创建入库任务 * @@ -518,11 +942,138 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } List<Integer> idList = new ArrayList<>(); idList.add(receiptContainerHeader.getId()); - receiptTaskService.createReceiptTask(idList); + createReceiptTask(idList); return AjaxResult.success(receiptContainerHeader); } + + /** + * 完成移库任务 + * + * @param task + */ + @Transactional(rollbackFor = Exception.class) + public void completeTransferTask(TaskHeader task) { + //找到任务明细 + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setTaskId(task.getId()); + taskDetail.setWarehouseCode(task.getWarehouseCode()); + taskDetail.setCompanyCode(task.getCompanyCode()); + taskDetail.setContainerCode(task.getContainerCode()); + LambdaQueryWrapper<TaskDetail> taskDetailLW = Wrappers.lambdaQuery(taskDetail); + taskDetail = taskDetailService.getOne(taskDetailLW); + //更新库存主表和明细的库位,更改更新用户和时间 + InventoryHeader inventoryHeader = new InventoryHeader(); + //主表 + inventoryHeader.setWarehouseCode(taskDetail.getWarehouseCode()); + inventoryHeader.setCompanyCode(taskDetail.getCompanyCode()); + inventoryHeader.setContainerCode(taskDetail.getContainerCode()); + inventoryHeader.setLocationCode(taskDetail.getFromLocation());//通过源库位查找库存 + LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(inventoryHeader); + inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); + if (StringUtils.isNotNull(inventoryHeader)){ + inventoryHeader.setLocationCode(taskDetail.getToLocation());//把目的库位写入库存 + inventoryHeader.setLastUpdated(new Date()); + inventoryHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + inventoryHeaderService.saveOrUpdate(inventoryHeader);//修改主表库位 + + //明细表 + List<InventoryDetail> inventoryDetails = new ArrayList<>(); + InventoryDetail inventoryDetail = new InventoryDetail(); + inventoryDetail.setWarehouseCode(inventoryHeader.getWarehouseCode()); + inventoryDetail.setCompanyCode(inventoryHeader.getCompanyCode()); + inventoryDetail.setInventoryHeaderId(inventoryHeader.getId()); + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(inventoryDetail); + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); + /*同时写入库存交易表*/ + List<InventoryTransaction> inventoryTransactionList = new ArrayList<>(); + for (InventoryDetail item : inventoryDetailList) { + item.setLocationCode(inventoryHeader.getLocationCode());//修改明细表库位 + item.setLastUpdated(new Date()); + item.setLastUpdatedBy(ShiroUtils.getLoginName()); + inventoryDetails.add(item); + /*----------*/ + InventoryTransaction inventoryTransaction = new InventoryTransaction(); + inventoryTransaction.setWarehouseCode(task.getWarehouseCode()); + inventoryTransaction.setLocationCode(taskDetail.getToLocation()); + inventoryTransaction.setContainerCode(taskDetail.getContainerCode()); + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTPROPERTIES); + inventoryTransaction.setMaterialCode(item.getMaterialCode()); + inventoryTransaction.setManufactureDate(item.getManufactureDate()); + inventoryTransaction.setMaterialName(item.getMaterialName()); + inventoryTransaction.setMaterialSpec(item.getMaterialSpec()); + inventoryTransaction.setMaterialUnit(item.getMaterialUnit()); + inventoryTransaction.setTaskQty(BigDecimal.ZERO); + inventoryTransaction.setInventorySts(item.getInventorySts()); + inventoryTransaction.setCompanyCode(item.getCompanyCode()); + inventoryTransaction.setReferDetailId(item.getId().toString()); + inventoryTransaction.setBatch(item.getBatch()); + inventoryTransaction.setLot(item.getLot()); + inventoryTransaction.setProjectNo(item.getProjectNo()); + inventoryTransaction.setWeight(item.getWeight()); + inventoryTransaction.setManufactureDate(item.getManufactureDate()); + inventoryTransaction.setExpirationDate(item.getExpirationDate()); + inventoryTransaction.setAgingDate(item.getCreated()); + inventoryTransaction.setAttributeId(item.getAttributeId()); + inventoryTransaction.setAttribute1(item.getAttribute1()); + inventoryTransaction.setAttribute2(item.getAttribute2()); + inventoryTransaction.setAttribute3(item.getAttribute3()); + inventoryTransaction.setCreated(new Date()); + inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName()); + //inventoryTransaction.setLockCode(); + inventoryTransaction.setBillCode(item.getInventoryHeaderId().toString()); + inventoryTransaction.setBillDetailId(item.getId()); + inventoryTransaction.setSupplierCode(item.getSupplierCode()); + inventoryTransactionList.add(inventoryTransaction); + } + if(inventoryDetails != null && inventoryDetails.size() > 0) { + if (inventoryDetailService.saveOrUpdateBatch(inventoryDetails)) { + //更新库存明细成功后,写入库存交易 + inventoryTransactionService.saveBatch(inventoryTransactionList); + } else { + throw new ServiceException("库存明细更新错误!"); + } + } + + } + //更新托盘、库位状态 + Location temp1 = new Location(); //源库位 + temp1.setCode(taskDetail.getFromLocation()); + temp1.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper<Location> lambdaQueryWrapper1 = Wrappers.lambdaQuery(temp1); + Location loc1 = locationService.getOne(lambdaQueryWrapper1); + + Location temp2 = new Location();//目的库位 + temp2.setCode(taskDetail.getToLocation()); + temp2.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper<Location> lambdaQueryWrapper2 = Wrappers.lambdaQuery(temp2); + Location loc2 = locationService.getOne(lambdaQueryWrapper2); + loc2.setContainerCode(loc1.getContainerCode()); + loc2.setStatus("empty"); + loc1.setContainerCode(""); + loc1.setStatus("empty"); + locationService.saveOrUpdate(loc1); + locationService.saveOrUpdate(loc2); + + Container container = containerService.findAllByCode(task.getContainerCode()); + container.setLocationCode(task.getToLocation()); + if (!containerService.updateById(container)){ + throw new ServiceException("更新容器失败"); + } + + //更新taskHeader状态 + task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + task.setLastUpdatedBy(ShiroUtils.getLoginName()); + task.setLastUpdated(new Date()); + taskHeaderService.saveOrUpdate(task); + //更新taskDetail状态 + taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + taskDetail.setLastUpdated(new Date()); + taskDetailService.saveOrUpdate(taskDetail); + } + /** * 盘点完成 * @@ -578,6 +1129,191 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } /** + * 完成空托盘入库任务 + * + * @param taskHeader + */ + @Transactional(rollbackFor = Exception.class) + public void completeEmptyIn(TaskHeader taskHeader) { + + //完成任务,修改主单和明细状态 + taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + taskHeader.setLastUpdated(new Date()); + //taskHeaderService.saveOrUpdate(taskHeader); + //taskDetail更新明细单总的状态 + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); + taskDetail.setTaskType(taskHeader.getTaskType()); + taskDetail.setTaskId(taskHeader.getId()); + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(taskDetail); + List<TaskDetail> taskDetailList = taskDetailService.list(lambdaQueryWrapper);//查询子单 + for (TaskDetail item : taskDetailList) { + item.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); + item.setLastUpdatedBy(ShiroUtils.getLoginName()); //更新用户 + item.setLastUpdated(new Date()); //更新时间 + } + if (taskDetailService.saveOrUpdateBatch(taskDetailList) == false || + taskHeaderService.saveOrUpdate(taskHeader) == false) { + throw new ServiceException("任务单据状态更新失败!"); + } + //解锁容器,更新库位 + containerService.updateLocationCodeAndStatus(taskHeader.getContainerCode(), taskHeader.getToLocation(), "empty"); + //解锁库位,更新容器 + locationService.updateContainerCodeAndStatus(taskHeader.getToLocation(), taskHeader.getContainerCode(), "empty"); + + //写入库存头表 + InventoryHeader inventoryHeader = new InventoryHeader(); + inventoryHeader.setWarehouseCode(taskHeader.getWarehouseCode()); + inventoryHeader.setLocationCode(taskHeader.getToLocation()); + inventoryHeader.setContainerCode(taskHeader.getContainerCode()); + inventoryHeader.setContainerStatus("empty"); + inventoryHeader.setCompanyCode(taskHeader.getCompanyCode()); + inventoryHeader.setMaterialSkuQty("0"); + inventoryHeader.setTotalWeight("0"); + inventoryHeader.setTotalQty(new BigDecimal(0)); + inventoryHeader.setTotalLines(0); + inventoryHeader.setProjectNos(""); + inventoryHeader.setBatchs(""); + inventoryHeader.setLots(""); + inventoryHeader.setLockRemark(""); + inventoryHeader.setCreated(new Date()); + inventoryHeader.setCreatedBy(ShiroUtils.getLoginName()); + inventoryHeader.setLastUpdated(new Date()); + inventoryHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + Boolean j = inventoryHeaderService.save(inventoryHeader); + if(!j){ + throw new ServiceException("新增空托库存头失败!"); + + } + } + + /** + * 创建上架任务 + * + * @param ids + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult createReceiptTask(List<Integer> ids) { + for (Integer id : ids) { + ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(id); + if (receiptContainerHeader == null) { + throw new ServiceException("任务不存在!"); + } + + if (!receiptContainerHeader.getWarehouseCode().equals(ShiroUtils.getWarehouseCode())) { + throw new ServiceException("任务不在当前仓库!"); + } + + //锁定容器 + Container container = new Container(); + container.setStatus("lock"); + LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate(); + containerUpdateWrapper.eq(Container::getCode, receiptContainerHeader.getContainerCode()); + containerService.update(container, containerUpdateWrapper); + + //查询入库组盘明细 + LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery(); + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, id); + List<ReceiptContainerDetail> list = receiptContainerDetailService.list(containerDetailLambda); + + if (list.size() < 1) { + throw new ServiceException("没有组盘明细,请先组盘!"); + } + if (receiptContainerHeader.getStatus() == QuantityConstant.RECEIPT_CONTAINER_BUILD.intValue()) { + if (receiptContainerHeader.getStatus().intValue() < QuantityConstant.RECEIPT_CONTAINER_TASK) { + receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK.intValue()); + receiptContainerHeaderService.updateById(receiptContainerHeader); + } + //添加任务主表 + TaskHeader task = new TaskHeader(); + task.setAllocationHeadId(receiptContainerHeader.getId()); + task.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHELF); + task.setWarehouseCode(receiptContainerHeader.getWarehouseCode()); + task.setCompanyCode(receiptContainerHeader.getCompanyCode()); + task.setTaskType(Integer.valueOf(receiptContainerHeader.getTaskType())); + task.setFromLocation(receiptContainerHeader.getFromLocation()); + task.setToLocation(receiptContainerHeader.getToLocation()); + task.setContainerCode(receiptContainerHeader.getContainerCode()); + task.setRecvDock(receiptContainerHeader.getRecvDock()); + task.setCreated(new Date()); + task.setCreatedBy(ShiroUtils.getLoginName()); + if (this.save(task)) { + //添加任务明细表 + int conatinQty = 0; + for (ReceiptContainerDetail item : list) { + LambdaQueryWrapper<ContainerCapacity> lambdaQueryWrapper = Wrappers.lambdaQuery(); + String[] containCodeSplit = task.getContainerCode().split("\\D"); + String containType = containCodeSplit[0]; + lambdaQueryWrapper.eq(ContainerCapacity::getContainerType, task.getContainerCode()) + .eq(ContainerCapacity::getMaterialCode, item.getMaterialCode()) + .eq(ContainerCapacity::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(ContainerCapacity::getEnable, 0); + ContainerCapacity containerCapacity = containerCapacityService.getOne(lambdaQueryWrapper); + + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setTaskId(task.getId()); + taskDetail.setTaskType(Integer.valueOf(receiptContainerHeaderService.getById(item.getReceiptContainerId()).getTaskType())); + taskDetail.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHELF); + taskDetail.setWarehouseCode(task.getWarehouseCode()); + taskDetail.setAllocationId(item.getId()); + taskDetail.setCompanyCode(task.getCompanyCode()); + taskDetail.setCompanyCode(task.getCompanyCode()); + taskDetail.setMaterialCode(item.getMaterialCode()); + taskDetail.setMaterialName(item.getMaterialName()); + taskDetail.setMaterialSpec(item.getMaterialSpec()); + taskDetail.setMaterialUnit(item.getMaterialUnit()); + taskDetail.setBillCode(item.getReceiptCode()); + taskDetail.setBillDetailId(item.getReceiptDetailId()); + taskDetail.setBillCode(item.getReceiptCode()); + taskDetail.setQty(item.getQty()); + taskDetail.setContainerCode(task.getContainerCode()); + taskDetail.setFromLocation(task.getFromLocation()); + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + taskDetail.setBatch(item.getBatch()); + taskDetail.setProjectNo(item.getProjectNo()); + if (containerCapacity != null) { + conatinQty += (int) Math.floor(item.getQty().intValue() / containerCapacity.getQty().intValue()); + taskDetail.setContainQty((int) Math.floor(item.getQty().intValue() / containerCapacity.getQty().intValue())); + } + if (!taskDetailService.save(taskDetail)) { + throw new ServiceException("生成任务明细失败"); + } + + //更新入库组盘明细状态 + item.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK); + if (!receiptContainerDetailService.updateById(item)) { + throw new ServiceException("更新入库组盘明细状态出错"); + } + + /** + * 修改明细状态为上架 + */ + ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId()); + receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_SHELF)); + if (!receiptDetailService.updateById(receiptDetail)) { + throw new ServiceException("更新入库单详情失败"); + } + //更新头表状态 + receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); + + } + + task.setContainQty(conatinQty); + if (!taskHeaderService.updateById(task)) { + throw new ServiceException("更新任务头表容器数量失败"); + } + } else { + throw new ServiceException("生成任务头表失败"); + } + } + } + return AjaxResult.success("生成上架任务成功"); + } + + /** * 自动空托出库 * */ @Override @@ -604,7 +1340,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea inventoryHeaderService.createEmptyOut(container.getCode(), location.getCode()); return AjaxResult.success("空容器出库任务已下发!",container.getCode()); } - + /** * 自动分配库位 * @param taskId 任务号 @@ -621,11 +1357,26 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (StringUtils.isNotEmpty(taskHeader.getToLocation())) { return AjaxResult.success("任务已经有目的库位,不需要再分配"); } +// Location location = new Location(); +// location.setWarehouseCode(ShiroUtils.getWarehouseCode()); +// +// location.setContainerCode(""); +// location.setStatus("empty"); +// location.setDeleted(false); +// if("M".equals(taskHeader.getContainerCode().substring(0,1))){ +// if (high.intValue() == 1) { +// location.setILayer(5); +// } +// } LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); locationLambdaQueryWrapper.eq(Location::getWarehouseCode,ShiroUtils.getWarehouseCode()) .eq(Location::getContainerCode,"") .eq(Location::getStatus,"empty") .eq(Location::getDeleted,false); +// location = locationService.getOne(locationLambdaQueryWrapper); +// if (location == null) { +// throw new ServiceException("没有对应库位可以分配给容器了!"); +// } List<Location> locations = locationService.list(locationLambdaQueryWrapper); if (locations.size() == 0) { throw new ServiceException("没有空闲库位!"); @@ -639,6 +1390,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea //锁定库位 locationService.updateStatus(location.getCode(),"lock"); //给组盘分配库位 + int internalTaskType = taskHeader.getInternalTaskType(); if(internalTaskType == QuantityConstant.TASK_TYPE_WHOLERECEIPT.intValue() || internalTaskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT.intValue() ) { ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); @@ -651,14 +1403,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); condition.setTaskId(taskHeader.getId()); LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(condition); - List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambdaQueryWrapper); - if(taskDetailList != null && taskDetailList.size() > 0) { - for(TaskDetail taskDetail : taskDetailList) { - if (taskDetail != null) { - taskDetail.setToLocation(location.getCode()); - taskDetailService.update(taskDetail, taskDetailLambdaQueryWrapper); - } - } + TaskDetail taskDetail = taskDetailService.getOne(taskDetailLambdaQueryWrapper); + if (taskDetail != null) { + taskDetail.setToLocation(location.getCode()); + taskDetailService.update(taskDetail, taskDetailLambdaQueryWrapper); } } //给任务分配库位 @@ -669,4 +1417,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } + + + + + } \ No newline at end of file diff --git a/src/main/resources/application-druid.properties b/src/main/resources/application-druid.properties index 419aee0..6446e93 100644 --- a/src/main/resources/application-druid.properties +++ b/src/main/resources/application-druid.properties @@ -4,12 +4,12 @@ spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver # ���� spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2b8 #spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/huahengExample?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false -#spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/wms_v2?characterEncoding=utf8&serverTimezone=GMT%2b8 +#spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/wms2?characterEncoding=utf8&serverTimezone=GMT%2b8 spring.datasource.druid.master.username=softhuaheng spring.datasource.druid.master.password=HHrobot123. #spring.datasource.druid.master.username=root -#spring.datasource.druid.master.password=123456 +#spring.datasource.druid.master.password=hhsoftware # �ӿ� spring.datasource.druid.slave.open = false spring.datasource.druid.slave.url=jdbc:mysql://199.19.109.117:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false diff --git a/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html b/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html index abde545..a2612b6 100644 --- a/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html +++ b/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html @@ -147,6 +147,10 @@ // },sortable:true // }, { + field : 'stationCode', + title : '出库站台' + }, + { field : 'status', title : '容器任务状态' , formatter: function(value, row, index) { diff --git a/src/main/resources/templates/shipment/shipmentDetail/add.html b/src/main/resources/templates/shipment/shipmentDetail/add.html index 3705f0b..5fc50e5 100644 --- a/src/main/resources/templates/shipment/shipmentDetail/add.html +++ b/src/main/resources/templates/shipment/shipmentDetail/add.html @@ -46,6 +46,12 @@ </div> </div> <div class="form-group"> + <label class="col-sm-3 control-label">出库站台:</label> + <div class="col-sm-8"> + <select id="stationCode" name="stationCode" class="form-control"></select> + </div> + </div> + <div class="form-group"> <label class="col-sm-3 control-label">批次:</label> <div class="col-sm-8"> <input id="batch" name="batch" class="form-control" type="text"> @@ -198,6 +204,19 @@ } } }); + $('#stationCode').select2({ + ajax: { + url: ctx+'config/station/getData', + dataType: 'json', + type: 'post', + data: function (params) { + let query = { + code: params.term, + } + return query; + } + } + }); }) </script> </body> diff --git a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html index c5dee3a..2a26b26 100644 --- a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html +++ b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html @@ -476,6 +476,10 @@ }, }, { + field: 'stationCode', + title: '出库站台', + }, + { field: 'shipQty', title: '发货数量' }, diff --git a/src/main/resources/templates/task/taskHeader/taskHeader.html b/src/main/resources/templates/task/taskHeader/taskHeader.html index 074c824..943f5cd 100644 --- a/src/main/resources/templates/task/taskHeader/taskHeader.html +++ b/src/main/resources/templates/task/taskHeader/taskHeader.html @@ -214,6 +214,10 @@ field : 'weight', title : '重量' }, + { + field : 'stationCode', + title : '站台' + }, { field : 'exceptionCode', title : '异常原因',