diff --git a/ant-design-vue-jeecg/src/api/api.js b/ant-design-vue-jeecg/src/api/api.js index 202cfa7..6ebe097 100644 --- a/ant-design-vue-jeecg/src/api/api.js +++ b/ant-design-vue-jeecg/src/api/api.js @@ -286,6 +286,8 @@ export const createBatchShipmentTaskByAgv = (params) => postAction('/shipment/sh export const createShipmentTaskAndAgvTask = (params) => postAction('/shipment/shipmentCombination/createShipmentTaskAndAgvTask', params); //完成平库出库 export const completeFlatShipment = (params) => postAction('/shipment/shipmentCombination/completeFlatShipment', params); +//平库入库 +export const flatReceipt = (params) => postAction('/receipt/receiveHeader/flatReceipt', params); // 中转HTTP请求 export const transitRESTful = { diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue index 5f1ddb1..7602156 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue @@ -40,8 +40,13 @@ </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="库位编码"> - <a-input placeholder="请输入库位编码" v-model="queryParam.locationCode"></a-input> + <a-form-item label="起始库位编码"> + <a-input placeholder="请输入起始库位编码" v-model="queryParam.fromLocationCode"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="目标库位编码"> + <a-input placeholder="请输入目标库位编码" v-model="queryParam.toLocationCode"></a-input> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue index e474183..36cf4a2 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue @@ -132,7 +132,7 @@ <!-- <a v-else-if="record.status == 0" @click="selectContainerStatus(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>--> <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a> <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a> - <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)"> + <a-popconfirm v-if="record.status == 0" v-has="'receipatContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)"> <a><a-button type="danger">取消配盘</a-button> <a-divider type="vertical"/></a> </a-popconfirm> diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue index f1d598b..dadd2b9 100644 --- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue @@ -130,7 +130,7 @@ <a><a-button type="danger">取消配盘</a-button> <a-divider type="vertical"/></a> </a-popconfirm> <a v-has="'shipmentContainerHeader:edit'" @click="handleEdit(record)"><a-button type="default">编辑</a-button> <a-divider type="vertical"/></a> - <a v-if="record.status == 10" v-has="'shipmentContainerHeader:reduceInventoryDetailBySn'" @click="openReduce(record)"><a-button type="primary">扣减库存</a-button></a> + <a v-if="record.status == 10 && record.taskType == 400" v-has="'shipmentContainerHeader:reduceInventoryDetailBySn'" @click="openReduce(record)"><a-button type="primary">扣减库存</a-button></a> </span> </a-table> </div> diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue index 1e7af5e..a1e1767 100644 --- a/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue +++ b/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue @@ -27,6 +27,11 @@ </a-form-model-item> </a-col> <a-col :xs="24"> + <a-form-model-item label="合格数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qualityfiedQty"> + <a-input v-model="model.qualityfiedQty" placeholder="请输入合格数量"></a-input> + </a-form-model-item> + </a-col> + <a-col :xs="24"> <a-form-model-item label="不合格数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="unqualityfiedQty"> <a-input v-model="model.unqualityfiedQty" placeholder="请输入不合格数量"></a-input> </a-form-model-item> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java index 027f513..8318839 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java @@ -18,7 +18,9 @@ public interface IPortService extends IService<Port> { List<Port> getPortListByType(int type, Integer roadWay, String zoneCode, String warehouseCode); - Port getPortByCode(String code, Integer roadWay, String zoneCode, String warehouseCode); +// Port getPortByCode(String code, Integer roadWay, String zoneCode, String warehouseCode); + + Port getPortByCode(String code, Integer type, String zoneCode, String warehouseCode); Port getPortByCode(String code, String zoneCode, String warehouseCode); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java index 914b628..dfde49f 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java @@ -42,10 +42,10 @@ public class PortServiceImpl extends ServiceImpl<PortMapper, Port> implements IP } @Override - public Port getPortByCode(String code, Integer roadWay, String zoneCode, String warehouseCode) { + public Port getPortByCode(String code, Integer type, String zoneCode, String warehouseCode) { LambdaQueryWrapper<Port> portLambdaQueryWrapper = Wrappers.lambdaQuery(); - portLambdaQueryWrapper.eq(Port::getCode, code).eq(Port::getZoneCode, zoneCode).eq(Port::getWarehouseCode, warehouseCode).in(roadWay != null, - Port::getRoadWay, roadWay); + portLambdaQueryWrapper.eq(Port::getCode, code).eq(Port::getZoneCode, zoneCode).eq(Port::getWarehouseCode, warehouseCode).in(type != null, Port::getType, + type); Port port = getOne(portLambdaQueryWrapper); return port; } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java index 28d1302..7b89e83 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java @@ -1,6 +1,7 @@ package org.jeecg.modules.wms.receipt.receiptContainerHeader.controller; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -14,6 +15,7 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; @@ -45,6 +47,7 @@ import org.springframework.web.servlet.ModelAndView; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; @@ -357,6 +360,33 @@ public class ReceiptContainerHeaderController extends JeecgController<ReceiptCon @ResponseBody public Result createReceiptBatchTask(@RequestBody List<ReceiptContainerHeader> receiptContainerHeaderList, HttpServletRequest req) { String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); + if (CollectionUtils.isEmpty(receiptContainerHeaderList)) { + return Result.error("批量创建入库任务失败,没有组盘明细"); + } + String toPort = receiptContainerHeaderList.get(0).getToPort(); + if (StringUtils.isEmpty(toPort)) { + return Result.error("批量创建入库任务失败,没有去向"); + } + List<ReceiptContainerHeader> removeList = new ArrayList<>(); + for (ReceiptContainerHeader receiptContainerHeader : receiptContainerHeaderList) { + String fromLocationCode = receiptContainerHeader.getFromLocationCode(); + Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); + if (fromLocation == null) { + throw new JeecgBootException("批量创建入库任务失败,没有找到库位" + fromLocationCode); + } + int roadWay = fromLocation.getRoadWay(); + String zoneCode = fromLocation.getZoneCode(); + List<Port> portList = portService.getPortListByType(QuantityConstant.PORT_TYPE_PICK, roadWay, zoneCode, warehouseCode); + if (CollectionUtils.isEmpty(portList)) { + removeList.add(receiptContainerHeader); + continue; + } + List<String> portCodeList = portList.stream().map(Port::getCode).collect(Collectors.toList()); + if (!portCodeList.contains(toPort)) { + removeList.add(receiptContainerHeader); + } + } + receiptContainerHeaderList.removeAll(removeList); for (ReceiptContainerHeader receiptContainerHeader : receiptContainerHeaderList) { Result result = huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode); if (!result.isSuccess()) { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java index 9bc451a..96611c4 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java @@ -15,6 +15,8 @@ import org.jeecg.modules.wms.config.container.entity.Container; import org.jeecg.modules.wms.config.container.service.IContainerService; import org.jeecg.modules.wms.config.location.service.ILocationService; import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; +import org.jeecg.modules.wms.config.zone.entity.Zone; +import org.jeecg.modules.wms.config.zone.service.IZoneService; import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; import org.jeecg.modules.wms.lockStation.service.ILockStationService; import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerDetail; @@ -94,6 +96,8 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai @Resource private ILockStationService lockStationService; + @Resource + private IZoneService zoneService; @Override @Transactional @@ -146,6 +150,10 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai if (StringUtils.isEmpty(zoneCode)) { return Result.error("容器没有配置库区,请配置!"); } + Zone zone = zoneService.getZoneByCode(zoneCode, warehouseCode); + if (zone == null) { + return Result.error("库区:" + zoneCode + " 信息为空"); + } boolean success = false; List<ReceiptContainerDetail> receiptContainerDetailList = receiptContainerDetailService.getReceiptContainerDetailListByHeaderId(receiptContainerHeader.getId()); @@ -185,6 +193,11 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai taskHeader.setWarehouseCode(warehouseCode); taskHeader.setZoneCode(zoneCode); taskHeader.setToPortCode(toPort); + if (StringUtils.isNotEmpty(zone.getType())) { + if (zone.getType().equals(QuantityConstant.ZONE_TYPE_AGV)) { + taskHeader.setToWcs(QuantityConstant.NOT_TO_WCS); + } + } success = taskHeaderService.save(taskHeader); if (!success) { throw new JeecgBootException("创建入库任务, 任务生成失败"); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java index 26fbd57..1abaaa8 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java @@ -223,7 +223,6 @@ public class ReceiveController extends HuahengBaseController { @Override public Result<?> doProcess() { Result result = receiveService.receivingAndCreateTask(receiveList, warehouseCode); - return result; } }); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java index 766c63e..53a256e 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java @@ -1,13 +1,16 @@ package org.jeecg.modules.wms.shipment.shipmentCombination.controller; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.exception.JeecgBootException; import org.jeecg.modules.wms.config.location.entity.Location; import org.jeecg.modules.wms.config.location.service.ILocationService; import org.jeecg.modules.wms.config.port.entity.Port; @@ -33,6 +36,7 @@ import org.jeecg.utils.constant.QuantityConstant; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import io.swagger.annotations.Api; @@ -133,6 +137,38 @@ public class ShipmentCombinationController extends HuahengBaseController { @ResponseBody public Result createShipmentBatchTask(@RequestBody List<ShipmentContainerHeader> shipmentContainerHeaderList, HttpServletRequest req) { String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); + if (CollectionUtils.isEmpty(shipmentContainerHeaderList)) { + return Result.error("批量创建出库任务失败,没有组盘明细"); + } + String toPort = shipmentContainerHeaderList.get(0).getToPort(); + if (StringUtils.isEmpty(toPort)) { + return Result.error("批量创建出库任务失败,没有去向"); + } + List<ShipmentContainerHeader> removeList = new ArrayList<>(); + for (ShipmentContainerHeader shipmentContainerHeader : shipmentContainerHeaderList) { + String fromLocationCode = shipmentContainerHeader.getFromLocationCode(); + Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); + if (fromLocation == null) { + throw new JeecgBootException("批量创建出库任务失败,没有找到库位" + fromLocationCode); + } + int roadWay = fromLocation.getRoadWay(); + String zoneCode = fromLocation.getZoneCode(); + int taskType = shipmentContainerHeader.getTaskType(); + int portType = QuantityConstant.PORT_TYPE_PICK; + if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT) { + portType = QuantityConstant.PORT_TYPE_OUT; + } + List<Port> portList = portService.getPortListByType(portType, roadWay, zoneCode, warehouseCode); + if (CollectionUtils.isEmpty(portList)) { + removeList.add(shipmentContainerHeader); + continue; + } + List<String> portCodeList = portList.stream().map(Port::getCode).collect(Collectors.toList()); + if (!portCodeList.contains(toPort)) { + removeList.add(shipmentContainerHeader); + } + } + shipmentContainerHeaderList.removeAll(removeList); for (ShipmentContainerHeader shipmentContainerHeader : shipmentContainerHeaderList) { Result result = huahengMultiHandlerService.createShipmentTask(shipmentContainerHeader, warehouseCode, 0, 0, 0); if (!result.isSuccess()) { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index 2939015..c68e991 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java @@ -414,7 +414,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); String zoneCode = taskLockEntity.getZoneCode(); - Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode); + Port port = portService.getPortByCode(toPortCode, QuantityConstant.PORT_TYPE_PICK, zoneCode, warehouseCode); if (port == null) { throw new JeecgBootException("创建质检任务失败,没有找到出库口:" + toPortCode); } @@ -1005,10 +1005,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea break; } taskHeaderService.cancelLocationAndContainerStatus(taskHeader); - if (taskHeader.getStatus().intValue() > QuantityConstant.TASK_STATUS_BUILD) { - result = wcsService.cancelWcsTask(taskHeader); - if (!result.isSuccess()) { - throw new JeecgBootException(result.getMessage()); + int toWcs = taskHeader.getToWcs(); + if (toWcs == QuantityConstant.TO_WCS) { + if (taskHeader.getStatus().intValue() > QuantityConstant.TASK_STATUS_BUILD) { + result = wcsService.cancelWcsTask(taskHeader); + if (!result.isSuccess()) { + throw new JeecgBootException(result.getMessage()); + } } } if (!inventoryHeaderService.updateInventoryContainerStatusByContainerCode(taskHeader.getContainerCode(), taskHeader.getWarehouseCode())) { @@ -1040,9 +1043,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (taskHeader.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) { return Result.error("下发wcs任务时, 任务" + taskId + "已经下发,请不要重复下发,操作中止"); } - Result result = wcsService.wcsTaskAssign(taskHeader); - if (!result.isSuccess()) { - return Result.error(result.getMessage()); + int toWcs = taskHeader.getToWcs(); + if (toWcs == QuantityConstant.TO_WCS) { + Result result = wcsService.wcsTaskAssign(taskHeader); + if (!result.isSuccess()) { + return Result.error(result.getMessage()); + } } taskHeader.setStatus(QuantityConstant.TASK_STATUS_RELEASE); boolean success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_RELEASE, taskHeader.getId());