diff --git a/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue b/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue index 5d9af0f..2969d75 100644 --- a/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue @@ -21,7 +21,7 @@ show-search placeholder="请选择容器类型" option-filter-prop="children" - + v-model="queryParam.containerTypeCode"> <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code">{{ item.name @@ -55,11 +55,11 @@ <div class="table-operator"> <a-button @click="handleAdd" v-has="'container:add'" type="primary" icon="plus">新增</a-button> <a-button v-has="'container:export'" type="primary" icon="download" @click="handleExportXls('容器管理')">导出</a-button> - <a-upload v-has="'container:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> - <a-button type="primary" icon="import">导入</a-button> - <a-button v-has="'container:print'" @click="batchPrint()" type="primary">打印</a-button> + <a-button v-has="'container:import'" type="primary" icon="import">导入</a-button> </a-upload> + <a-button v-has="'container:print'" @click="batchPrint()" type="primary">打印</a-button> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'container:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> diff --git a/ant-design-vue-jeecg/src/views/system/config/LocationList.vue b/ant-design-vue-jeecg/src/views/system/config/LocationList.vue index 65cf30f..40b47c6 100644 --- a/ant-design-vue-jeecg/src/views/system/config/LocationList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/LocationList.vue @@ -25,7 +25,7 @@ show-search placeholder="请选择库位类型" option-filter-prop="children" - + v-model="queryParam.locationTypeCode"> <a-select-option v-for="item in locationTypeList" :key="item.name" :value="item.code"> {{item.name}} @@ -40,7 +40,7 @@ show-search placeholder="请选择库区编码" option-filter-prop="children" - + v-model="queryParam.zoneCode"> <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code"> {{item.name}} @@ -107,8 +107,8 @@ <a-upload v-has="'location:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> - <a-button v-has="'material:print'" @click="batchPrint()" type="primary">打印</a-button> </a-upload> + <a-button v-has="'material:print'" @click="batchPrint()" type="primary">打印</a-button> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'location:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue index fd53f98..48a42bf 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue @@ -122,7 +122,7 @@ <span slot="action" slot-scope="text, record"> <a v-has="'inventoryHeader:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a> <a-dropdown> - <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> +<!-- <a class="ant-dropdown-link" >更多 <a-icon type="down"/></a>--> <a-menu slot="overlay" v-has="'inventoryHeader:delete'"> <a-menu-item> <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java index 1634f9c..745c4e1 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java @@ -1,18 +1,18 @@ package org.jeecg.modules.wms.inventory.inventoryHeader.entity; import java.io.Serializable; +import java.util.Date; + +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import org.jeecg.common.aspect.annotation.Dict; -import lombok.Data; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import java.util.Date; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import java.io.UnsupportedEncodingException; +import lombok.Data; /** * @Description: 库存详情 @@ -49,6 +49,11 @@ public class InventoryDetail implements Serializable { @Excel(name = "容器编码", width = 15) @ApiModelProperty(value = "容器编码") private String containerCode; + /** 容器状态 */ + @Excel(name = "容器状态", width = 15, dicCode = "container_status") + @Dict(dicCode = "container_status") + @ApiModelProperty(value = "容器状态") + private String containerStatus; /** 库位编码 */ @Excel(name = "库位编码", width = 15) @ApiModelProperty(value = "库位编码") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java index 5cf7fa1..d840ad7 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java @@ -2,14 +2,17 @@ package org.jeecg.modules.wms.inventory.inventoryHeader.service.impl; import java.io.Serializable; import java.util.Collection; +import java.util.List; import javax.annotation.Resource; import org.jeecg.modules.wms.config.container.entity.Container; import org.jeecg.modules.wms.config.container.service.IContainerService; +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; import org.jeecg.modules.wms.inventory.inventoryHeader.mapper.InventoryDetailMapper; import org.jeecg.modules.wms.inventory.inventoryHeader.mapper.InventoryHeaderMapper; +import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,6 +39,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe private IContainerService containerService; @Resource private IInventoryHeaderService inventoryHeaderService; + @Resource + private IInventoryDetailService inventoryDetailService; @Override @Transactional @@ -71,6 +76,16 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe if (inventoryHeader != null) { inventoryHeader.setContainerStatus(container.getStatus()); boolean success = inventoryHeaderService.updateById(inventoryHeader); + if (!success) { + return success; + } + List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); + if (inventoryDetailList.size() > 0) { + for (InventoryDetail inventoryDetail : inventoryDetailList) { + inventoryDetail.setContainerStatus(container.getStatus()); + } + success = inventoryDetailService.updateBatchById(inventoryDetailList); + } return success; } return false; 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 3a1141d..a083d81 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 @@ -120,8 +120,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai if (receiptContainerDetailList.size() == 0) { return Result.error("id:" + receiptContainerHeader.getId() + "的入库组盘,没有组盘明细,请先组盘!"); } - boolean success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_EMPTY, - warehouseCode); + boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode); if (!success) { throw new JeecgBootException("更新容器状态失败"); } @@ -136,10 +135,12 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai } String zoneCode = null; if (StringUtils.isNotEmpty(toLocaitonCode)) { - success = locationService.updateStatusByOriginStatus(toLocaitonCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY, - warehouseCode); - if (!success) { - throw new JeecgBootException("更新目标库位状态失败"); + if (!toLocaitonCode.equals(fromLocationCode)) { + success = locationService.updateStatusByOriginStatus(toLocaitonCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY, + warehouseCode); + if (!success) { + throw new JeecgBootException("更新目标库位状态失败"); + } } Location toLocation = locationService.getLocationByCode(toLocaitonCode, warehouseCode); if (!toLocation.getWarehouseCode().equals(warehouseCode)) { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java index a9fa5aa..e521da6 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java @@ -229,8 +229,7 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap throw new JeecgBootException("更新库位状态失败"); } // 生成任务同时锁定容器 - success = containerServiceImpl.updateStatusByOriginStatus(location.getContainerCode(), QuantityConstant.STATUS_LOCATION_LOCK, - QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); + success = containerServiceImpl.updateStatus(location.getContainerCode(), QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode); if (!success) { throw new JeecgBootException("更新容器状态失败"); } 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 6f488a4..ed776c8 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 @@ -67,6 +67,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; +import com.aliyun.oss.ServiceException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -299,8 +300,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("创建移库任务时, 终点库位" + toLocationCode + "更新失败"); } - success = containerService.updateStatusByOriginStatus(fromLocation.getContainerCode(), QuantityConstant.STATUS_CONTAINER_LOCK, - QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); + success = containerService.updateStatus(fromLocation.getContainerCode(), QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode); if (!success) { throw new JeecgBootException("创建移库任务时,容器" + fromLocation.getContainerCode() + "更新失败"); } @@ -358,8 +358,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("创建出库查看任务时,更新库位状态失败"); } - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_EMPTY, - warehouseCode); + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode); if (!success) { throw new JeecgBootException("创建出库查看任务时,更新容器状态失败"); } @@ -427,8 +426,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { return Result.error("创建跨站任务时, 创建任务失败"); } - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_EMPTY, - warehouseCode); + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode); if (!success) { return Result.error("创建跨站任务时, 更新容器状态失败"); } @@ -520,8 +518,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) { return Result.error("创建空托盘组入库任务时,容器状态不为空容器"); } - boolean success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_EMPTY, - warehouseCode); + boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode); if (!success) { throw new JeecgBootException("创建空托盘组入库任务时, 更新容器状态失败"); } @@ -586,12 +583,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (StringUtils.isEmpty(zoneCode)) { return Result.error("创建空托盘组出库任务时, 库区为空"); } - boolean success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_EMPTY, + boolean success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_MANY, warehouseCode); if (!success) { throw new JeecgBootException("创建空托盘组出库任务时, 更新容器状态失败"); } - success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_LOCK, + success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); if (!success) { throw new JeecgBootException("创建空托盘组出库任务时, 更新库位状态失败"); @@ -1128,7 +1125,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea for (InventoryDetail inventoryDetail : inventoryDetailList) { inventoryDetail.setLocationCode(toLocationCode); inventoryDetail.setZoneCode(zoneCode); - inventoryDetailService.updateById(inventoryDetail); + if (!inventoryDetailService.updateById(inventoryDetail)) { + throw new ServiceException("更新库存详情失败"); + } } } } else { @@ -1255,6 +1254,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成入库任务时,更新入库单头失败"); } } + if (!inventoryHeaderService.updateInventoryContainerStatusByContainerCode(containerCode, warehouseCode)) { + throw new JeecgBootException("完成入库任务时,更新托盘状态失败"); + } receiptDetaiList = receiptDetaiList.stream().filter(t -> t.getStatus().equals(QuantityConstant.RECEIPT_HEADER_COMPLETED)).collect(Collectors.toList()); LogRecordContext.putVariable("taskHeader", taskHeader); LogRecordContext.putVariable("taskDetailList", taskDetailList); @@ -1454,6 +1456,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成出库任务,更新出库单头失败"); } } + if (taskType != QuantityConstant.TASK_TYPE_WHOLESHIPMENT) { + if (!inventoryHeaderService.updateInventoryContainerStatusByContainerCode(containerCode, warehouseCode)) { + throw new JeecgBootException("完成出库任务,更新库存状态失败"); + } + } // 操作记录添加 shipmentDetailList = shipmentDetailList.stream().filter(t -> t.getStatus().equals(QuantityConstant.SHIPMENT_HEADER_COMPLETED)).collect(Collectors.toList()); LogRecordContext.putVariable("taskHeader", taskHeader); @@ -1585,10 +1592,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); - // 更新用户 - taskHeader.setUpdateBy(sysUser.getUsername()); - // 更新时间 - taskHeader.setUpdateTime(new Date()); // 1.先拿到盘点单主单据 CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(taskHeader.getShipmentContainerHeaderId()); @@ -1779,7 +1782,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } // 盘点明细状态 cycleCountDetail.setEnableStatus(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED); - cycleCountDetail.setCompletedBy(sysUser.getUsername()); cycleCountDetail.setCompletedAt(new Date()); cycleCountDetailService.updateById(cycleCountDetail); // 更新主单状态 @@ -2041,10 +2043,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } else { if (fromLocationCode.equals(toLocationCode)) { - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_SOME, QuantityConstant.STATUS_CONTAINER_LOCK, + success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode); } else { - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_SOME, warehouseCode); + success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); } if (!success) { throw new JeecgBootException("完成出库查看任务时,更新容器状态失败"); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java index f991249..651a396 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java @@ -11,6 +11,7 @@ import org.apache.shiro.SecurityUtils; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.utils.constant.QuantityConstant; import org.jeecg.utils.support.ApiAuthentication; import org.jeecg.utils.support.RSA256Key; import org.jeecg.utils.support.SystemAuthentication; @@ -30,7 +31,7 @@ import cn.hutool.core.util.ReflectUtil; @Component public class HuahengJwtUtil { - + /** token失效时间 1天 */ public static final long EXPIRE_TIME = 12 * 60 * 60 * 1000; @@ -42,13 +43,13 @@ public class HuahengJwtUtil { /** 全仓CODE */ public static final String ALL_WAREHOUSE_CODE = "ALL_WAREHOUSE"; - + public static final String SYSTEM_ACTIVATION_CODE_FILE_NAME = "ActivationCode.txt"; - + public static final String SYSTEM_ACTIVATION_CODE_KEY = "ActivationCode"; - public static final String UNKNOWN_USER = "unknown"; - + public static final String UNKNOWN_USER = QuantityConstant.EMPTY_STRING; + /** * 根据request中的token获取用户账号 * @param request