diff --git a/src/main/java/com/huaheng/pc/config/FilterConfigDetail/mapper/FilterConfigDetailMapper.java b/src/main/java/com/huaheng/pc/config/FilterConfigDetail/mapper/FilterConfigDetailMapper.java
index 470bf8b..6f73b84 100644
--- a/src/main/java/com/huaheng/pc/config/FilterConfigDetail/mapper/FilterConfigDetailMapper.java
+++ b/src/main/java/com/huaheng/pc/config/FilterConfigDetail/mapper/FilterConfigDetailMapper.java
@@ -2,6 +2,14 @@ package com.huaheng.pc.config.FilterConfigDetail.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
+import org.apache.ibatis.annotations.Param;
 
 public interface FilterConfigDetailMapper extends BaseMapper<FilterConfigDetail> {
+
+    //复制规则配置明细
+    int filterConfigDetailCopy(@Param("code") String code, @Param("newCode") String newCode);
+
+    //修改规则配置明细headerId
+    int updateHeaderId(@Param("code") String code);
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/FilterConfigHeader/mapper/FilterConfigHeaderMapper.java b/src/main/java/com/huaheng/pc/config/FilterConfigHeader/mapper/FilterConfigHeaderMapper.java
index b4391a1..831d0aa 100644
--- a/src/main/java/com/huaheng/pc/config/FilterConfigHeader/mapper/FilterConfigHeaderMapper.java
+++ b/src/main/java/com/huaheng/pc/config/FilterConfigHeader/mapper/FilterConfigHeaderMapper.java
@@ -2,6 +2,10 @@ package com.huaheng.pc.config.FilterConfigHeader.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.FilterConfigHeader.domain.FilterConfigHeader;
+import org.apache.ibatis.annotations.Param;
 
 public interface FilterConfigHeaderMapper extends BaseMapper<FilterConfigHeader> {
+
+    //复制规则配置主表
+    int filterConfigHeaderCopy(@Param("code") String code, @Param("newCode") String newCode);
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java b/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java
index d9e7ad6..5de586f 100644
--- a/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java
+++ b/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java
@@ -3,16 +3,25 @@ package com.huaheng.pc.config.FilterConfigHeader.service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.pc.config.FilterConfigDetail.mapper.FilterConfigDetailMapper;
 import com.huaheng.pc.config.FilterConfigHeader.domain.FilterConfigHeader;
 import com.huaheng.pc.config.FilterConfigHeader.mapper.FilterConfigHeaderMapper;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 @Service("filterConfigHeaderService")
 public class FilterConfigHeaderService extends ServiceImpl<FilterConfigHeaderMapper, FilterConfigHeader> {
 
+    @Resource
+    private FilterConfigHeaderMapper filterConfigHeaderMapper;
+
+    @Resource
+    private FilterConfigDetailMapper filterConfigDetailMapper;
+
 
     //根据模块和类型查找具体规则
     public List<FilterConfigHeader> getFilterConfigHeaderService(String moduleType,String recordType){
@@ -22,4 +31,28 @@ public class FilterConfigHeaderService extends ServiceImpl<FilterConfigHeaderMap
                 .eq(FilterConfigHeader::getWarehouseCode, ShiroUtils.getWarehouseCode());
         return this.list(lam);
     }
+
+
+    //复制规则配置
+    public Boolean filterConfigCopy(String code,String newCode){
+        int i = 0;
+        //复制规则配置主表
+        i = filterConfigHeaderMapper.filterConfigHeaderCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+
+        //复制规则配置明细
+        i = filterConfigDetailMapper.filterConfigDetailCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+
+        //修改规则配置明细headerId
+        i = filterConfigDetailMapper.updateHeaderId(newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+        return true;
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/config/shipmentType/config/shipmentTypeController.java b/src/main/java/com/huaheng/pc/config/shipmentType/controller/shipmentTypeController.java
index a91e7b1..7327902 100644
--- a/src/main/java/com/huaheng/pc/config/shipmentType/config/shipmentTypeController.java
+++ b/src/main/java/com/huaheng/pc/config/shipmentType/controller/shipmentTypeController.java
@@ -1,4 +1,4 @@
-package com.huaheng.pc.config.shipmentType.config;
+package com.huaheng.pc.config.shipmentType.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
diff --git a/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowDetailMapper.java b/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowDetailMapper.java
index cd578d2..b23db2a 100644
--- a/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowDetailMapper.java
+++ b/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowDetailMapper.java
@@ -2,6 +2,13 @@ package com.huaheng.pc.config.statusFlow.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail;
+import org.apache.ibatis.annotations.Param;
 
 public interface StatusFlowDetailMapper extends BaseMapper<StatusFlowDetail> {
+
+    //复制流程明细
+    int statusFlowDetailCopy(@Param("code") String code, @Param("newCode") String newCode);
+
+    //修改流程明细headerId
+    int updateHeaderId(@Param("code") String code);
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowHeaderMapper.java b/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowHeaderMapper.java
index 3023ea1..2d75c28 100644
--- a/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowHeaderMapper.java
+++ b/src/main/java/com/huaheng/pc/config/statusFlow/mapper/StatusFlowHeaderMapper.java
@@ -2,6 +2,10 @@ package com.huaheng.pc.config.statusFlow.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.statusFlow.domain.StatusFlowHeader;
+import org.apache.ibatis.annotations.Param;
 
 public interface StatusFlowHeaderMapper extends BaseMapper<StatusFlowHeader> {
+
+    //复制流程主表
+    int statusFlowHeaderCopy(@Param("code") String code, @Param("newCode") String newCode);
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java b/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java
index 4c5fbad..6d84c76 100644
--- a/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java
+++ b/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java
@@ -2,19 +2,27 @@ package com.huaheng.pc.config.statusFlow.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.security.ShiroUtils;
-import org.springframework.aop.aspectj.AspectJPrecedenceInformation;
+import com.huaheng.pc.config.statusFlow.mapper.StatusFlowDetailMapper;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.config.statusFlow.domain.StatusFlowHeader;
 import com.huaheng.pc.config.statusFlow.mapper.StatusFlowHeaderMapper;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
 @Service("StatusFlow")
 public class StatusFlowHeaderService extends ServiceImpl<StatusFlowHeaderMapper, StatusFlowHeader> {
 
+    @Resource
+    private StatusFlowHeaderMapper statusFlowHeaderMapper;
+    @Resource
+    private StatusFlowDetailMapper statusFlowDetailMapper;
+
+
     public List<Map<String, Object>> flowList(String recordType){
         LambdaQueryWrapper<StatusFlowHeader> lambda = Wrappers.lambdaQuery();
         lambda.select(StatusFlowHeader::getCode, StatusFlowHeader::getName)
@@ -30,4 +38,28 @@ public class StatusFlowHeaderService extends ServiceImpl<StatusFlowHeaderMapper,
                 .eq(StatusFlowHeader::getWarehouseCode, ShiroUtils.getWarehouseCode());
         return this.list(lambda);
     }
+
+
+    //复制流程
+    public Boolean statusFlowCopy(String code,String newCode){
+        int i = 0;
+        //复制流程主表
+        i = statusFlowHeaderMapper.statusFlowHeaderCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+
+        //复制流程明细
+        i = statusFlowDetailMapper.statusFlowDetailCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+
+        //修改流程明细headerId
+        i = statusFlowDetailMapper.updateHeaderId(newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+        return true;
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java b/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java
index 7ee4066..69d3110 100644
--- a/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java
@@ -4,21 +4,35 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.common.exception.service.ServiceException;
+import com.huaheng.pc.config.address.domain.Address;
 import com.huaheng.pc.config.address.service.AddressService;
+import com.huaheng.pc.config.configValue.domain.ConfigValue;
 import com.huaheng.pc.config.configValue.service.ConfigValueService;
 import com.huaheng.pc.config.containerType.service.ContainerTypeService;
+import com.huaheng.pc.config.cycleCountPreference.domain.CycleCountPreference;
 import com.huaheng.pc.config.cycleCountPreference.service.CycleCountPreferenceService;
+import com.huaheng.pc.config.locationType.domain.LocationType;
 import com.huaheng.pc.config.locationType.service.LocationTypeService;
 import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService;
 import com.huaheng.pc.config.receiptType.service.ReceiptTypeService;
+import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
 import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
 import com.huaheng.pc.config.shipmentType.service.ShipmentTypeService;
+import com.huaheng.pc.config.statusFlow.service.StatusFlowHeaderService;
 import com.huaheng.pc.config.warehouse.domain.Warehouse;
 import com.huaheng.pc.config.warehouse.mapper.WarehouseMapper;
 import com.huaheng.pc.config.warehouseCompany.domain.WarehouseCompany;
 import com.huaheng.pc.config.warehouseCompany.service.WarehouseCompanyService;
+import com.huaheng.pc.config.waveMaster.service.WaveMasterService;
+import com.huaheng.pc.shipment.wave.service.WaveService;
+import com.huaheng.pc.system.dict.service.IDictTypeService;
+import com.huaheng.pc.system.menu.service.IMenuService;
+import com.huaheng.pc.system.menu.service.MenuServiceImpl;
+import com.huaheng.pc.system.role.service.IRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import sun.util.resources.cldr.ext.CurrencyNames_rof;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -49,6 +63,18 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
     private WarehouseMapper warehouseMapper;
     @Resource
     private WarehouseCompanyService warehouseCompanyService;
+    @Autowired
+    private IRoleService roleService;
+    @Autowired
+    private IDictTypeService dictTypeService;
+    @Autowired
+    private IMenuService menuService;
+    @Autowired
+    private FilterConfigHeaderService filterConfigHeaderService;
+    @Autowired
+    private StatusFlowHeaderService statusFlowHeaderService;
+    @Autowired
+    private WaveMasterService waveMasterService;
 
     @Override
     public List<Map<String, Object>> getWarehouseList(Integer id) {
@@ -116,26 +142,54 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         if (!containerTypeService.containerTypeCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制容器类型表失败");
         }
-        /* 复制盘点首选项表*/
-        if (!cycleCountPreferenceService.cycleCountPreferenceCopy(warehouseCode, newWarehouseCode)){
-            throw new ServiceException("复制盘点首选项表失败");
-        }
         /* 复制库位类型表*/
         if (!locationTypeService.locationTypeCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制库位类型表失败");
         }
+        /* 复制盘点首选项表*/
+        if (!cycleCountPreferenceService.cycleCountPreferenceCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制盘点首选项表失败");
+        }
+        /* 复制入库首选项*/
         if (!receiptPreferenceService.receiptPreferenceCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制入库首选项表失败");
         }
-        if (!receiptTypeService.receiptTypeCopy(warehouseCode, newWarehouseCode)){
-            throw new ServiceException("复制入库类型表失败");
-        }
+        /* 复制出库首选项*/
         if (!shipmentPreferenceService.shipmentPreferenceCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制出库首选项表失败");
         }
+        /* 复制入库类型*/
+        if (!receiptTypeService.receiptTypeCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制入库类型表失败");
+        }
+        /* 复制出库类型*/
         if (!shipmentTypeService.ShipmentTypeCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制出库类型表失败");
         }
+        /* 复制角色*/
+        if (!roleService.roleCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制角色表失败");
+        }
+        /* 复制字典数据*/
+        if (!dictTypeService.dictTypeCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制字典数据表失败");
+        }
+        /* 复制菜单*/
+        if (!menuService.menuCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制菜单表失败");
+        }
+        /* 复制流程*/
+        if (!statusFlowHeaderService.statusFlowCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制流程表失败");
+        }
+        /* 复制规则配置*/
+        if (!filterConfigHeaderService.filterConfigCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制规则配置表失败");
+        }
+        /* 复制波次配置*/
+        if (!waveMasterService.waveMasterCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制波次配置表失败");
+        }
         return true;
     }
 }
diff --git a/src/main/java/com/huaheng/pc/config/waveFlowDetail/mapper/WaveFlowDetailMapper.java b/src/main/java/com/huaheng/pc/config/waveFlowDetail/mapper/WaveFlowDetailMapper.java
index 9a28317..3edcf7c 100644
--- a/src/main/java/com/huaheng/pc/config/waveFlowDetail/mapper/WaveFlowDetailMapper.java
+++ b/src/main/java/com/huaheng/pc/config/waveFlowDetail/mapper/WaveFlowDetailMapper.java
@@ -2,6 +2,13 @@ package com.huaheng.pc.config.waveFlowDetail.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.waveFlowDetail.domain.WaveFlowDetail;
+import org.apache.ibatis.annotations.Param;
 
 public interface WaveFlowDetailMapper extends BaseMapper<WaveFlowDetail> {
+
+    //复制波次流程明细
+    int waveFlowDetailCopy(@Param("code") String code, @Param("newCode") String newCode);
+
+    //修改波次流程明细headerId
+    int updateHeaderId(@Param("code") String code);
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/waveFlowHeader/mapper/WaveFlowHeaderMapper.java b/src/main/java/com/huaheng/pc/config/waveFlowHeader/mapper/WaveFlowHeaderMapper.java
index cbeecec..455a483 100644
--- a/src/main/java/com/huaheng/pc/config/waveFlowHeader/mapper/WaveFlowHeaderMapper.java
+++ b/src/main/java/com/huaheng/pc/config/waveFlowHeader/mapper/WaveFlowHeaderMapper.java
@@ -2,6 +2,11 @@ package com.huaheng.pc.config.waveFlowHeader.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.waveFlowHeader.domain.WaveFlowHeader;
+import org.apache.ibatis.annotations.Param;
 
 public interface WaveFlowHeaderMapper extends BaseMapper<WaveFlowHeader> {
+
+    //复制波次流程主表
+    int waveFlowHeaderCopy(@Param("code") String code, @Param("newCode") String newCode);
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/waveMaster/mapper/WaveMasterMapper.java b/src/main/java/com/huaheng/pc/config/waveMaster/mapper/WaveMasterMapper.java
index d789f23..5250f63 100644
--- a/src/main/java/com/huaheng/pc/config/waveMaster/mapper/WaveMasterMapper.java
+++ b/src/main/java/com/huaheng/pc/config/waveMaster/mapper/WaveMasterMapper.java
@@ -2,6 +2,10 @@ package com.huaheng.pc.config.waveMaster.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.waveMaster.domain.WaveMaster;
+import org.apache.ibatis.annotations.Param;
 
 public interface WaveMasterMapper extends BaseMapper<WaveMaster> {
+
+    //复制波次配置
+    int waveMasterCopy(@Param("code") String code, @Param("newCode") String newCode);
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java b/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java
index ee2ad9b..1889015 100644
--- a/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java
+++ b/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java
@@ -1,11 +1,56 @@
 package com.huaheng.pc.config.waveMaster.service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaheng.common.exception.service.ServiceException;
+import com.huaheng.pc.config.waveFlowDetail.domain.WaveFlowDetail;
+import com.huaheng.pc.config.waveFlowDetail.mapper.WaveFlowDetailMapper;
+import com.huaheng.pc.config.waveFlowHeader.domain.WaveFlowHeader;
+import com.huaheng.pc.config.waveFlowHeader.mapper.WaveFlowHeaderMapper;
 import com.huaheng.pc.config.waveMaster.domain.WaveMaster;
 import com.huaheng.pc.config.waveMaster.mapper.WaveMasterMapper;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 @Service
 public class WaveMasterService extends ServiceImpl<WaveMasterMapper, WaveMaster> {
 
+    @Resource
+    private WaveMasterMapper waveMasterMapper;
+    @Resource
+    private WaveFlowHeaderMapper waveFlowHeaderMapper;
+    @Resource
+    private WaveFlowDetailMapper waveFlowDetailMapper;
+
+
+
+    //复制波次配置
+    public Boolean waveMasterCopy(String code,String newCode){
+        int i = 0;
+        //复制波次配置
+        i = waveMasterMapper.waveMasterCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+
+        //复制波次流程主表
+        i = waveFlowHeaderMapper.waveFlowHeaderCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+
+        //复制波次流程明细
+        i = waveFlowDetailMapper.waveFlowDetailCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+
+        //修改波次流程明细headerId
+        i = waveFlowDetailMapper.updateHeaderId(newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+        return null;
+    }
+
 }
diff --git a/src/main/java/com/huaheng/pc/system/dict/mapper/DictDataMapper.java b/src/main/java/com/huaheng/pc/system/dict/mapper/DictDataMapper.java
index 23e1e3d..958c4c4 100644
--- a/src/main/java/com/huaheng/pc/system/dict/mapper/DictDataMapper.java
+++ b/src/main/java/com/huaheng/pc/system/dict/mapper/DictDataMapper.java
@@ -115,4 +115,10 @@ public interface DictDataMapper
 
     DictData selectModel(DictData dictData);
 
+    //复制字典明细数据
+    int dictDateCopy(@Param("code")String code, @Param("newCode")String newCode);
+
+
+    //修改复制明细的父ID
+    int updateHeaderId(@Param("code")String code);
 }
diff --git a/src/main/java/com/huaheng/pc/system/dict/mapper/DictTypeMapper.java b/src/main/java/com/huaheng/pc/system/dict/mapper/DictTypeMapper.java
index ad90a49..718cdfe 100644
--- a/src/main/java/com/huaheng/pc/system/dict/mapper/DictTypeMapper.java
+++ b/src/main/java/com/huaheng/pc/system/dict/mapper/DictTypeMapper.java
@@ -94,4 +94,8 @@ public interface DictTypeMapper
 
     public int insertDictTypes(@Param("dictTypes") List<DictType> dictTypes);
 
+
+    //先复制字典主表数据
+     int dictTypeCopy(@Param("code")String code, @Param("newCode")String newCode);
+
 }
diff --git a/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java b/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java
index 6480de8..db447a4 100644
--- a/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java
@@ -1,5 +1,6 @@
 package com.huaheng.pc.system.dict.service;
 
+import com.huaheng.common.exception.service.ServiceException;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -176,4 +177,26 @@ public class DictTypeServiceImpl  implements IDictTypeService
 
         return dictTypeMapper.insertDictTypes(dictTypeList);
     }
+
+    //复制字典数据
+    @Override
+    public Boolean dictTypeCopy(String code, String newCode) {
+        int i = 0;
+        //1、先复制字典主表数据
+        i = dictTypeMapper.dictTypeCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制字典主表失败");
+        }
+        //2、复制字典明细数据
+        i = dictDataMapper.dictDateCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制字典明细失败");
+        }
+        //3、修改复制明细的父ID
+        i = dictDataMapper.updateHeaderId(newCode);
+        if(i < 1){
+            throw new ServiceException("修改字典明细失败");
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/system/dict/service/IDictTypeService.java b/src/main/java/com/huaheng/pc/system/dict/service/IDictTypeService.java
index 65a0ae7..8b8a44c 100644
--- a/src/main/java/com/huaheng/pc/system/dict/service/IDictTypeService.java
+++ b/src/main/java/com/huaheng/pc/system/dict/service/IDictTypeService.java
@@ -96,4 +96,7 @@ public interface IDictTypeService
 
 
     public int insertDictTypes(List<DictType> dictTypes);
+
+    //复制字典数据
+    Boolean dictTypeCopy(String code,String newCode);
 }
diff --git a/src/main/java/com/huaheng/pc/system/menu/mapper/MenuMapper.java b/src/main/java/com/huaheng/pc/system/menu/mapper/MenuMapper.java
index 9269833..9f06004 100644
--- a/src/main/java/com/huaheng/pc/system/menu/mapper/MenuMapper.java
+++ b/src/main/java/com/huaheng/pc/system/menu/mapper/MenuMapper.java
@@ -118,4 +118,10 @@ public interface MenuMapper extends BaseMapper<Menu>
     public List<Menu> selectMobileMenusByUserId(@Param("warehouseCode") String warehouseCode, @Param("userId") Integer userId);
 
     List<Menu> selectMenuPageList(Menu menu);
+
+    //复制菜单数据
+    int menuCopy(@Param("code") String code, @Param("newCode") String newCode);
+
+    //修改父id
+    int updateParentId(@Param("code") String code);
 }
diff --git a/src/main/java/com/huaheng/pc/system/menu/service/IMenuService.java b/src/main/java/com/huaheng/pc/system/menu/service/IMenuService.java
index b9b1f8e..cb9cdf7 100644
--- a/src/main/java/com/huaheng/pc/system/menu/service/IMenuService.java
+++ b/src/main/java/com/huaheng/pc/system/menu/service/IMenuService.java
@@ -138,4 +138,8 @@ public interface IMenuService
      * @return 菜单列表
      */
     List<Menu> selectMobileMenusByUserId(Integer userId);
+
+
+    //复制菜单
+    Boolean menuCopy(String code,String newCode);
 }
diff --git a/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java b/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java
index 6408371..85d71fa 100644
--- a/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java
@@ -10,6 +10,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.pc.system.user.domain.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -354,5 +355,22 @@ public class MenuServiceImpl implements IMenuService
         return menus;
     }
 
+    //复制菜单
+    @Override
+    public Boolean menuCopy(String code, String newCode) {
+        int i = 0;
+        //复制菜单数据
+        i = menuMapper.menuCopy(code,newCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+        //修改父id
+        i= menuMapper.updateParentId(newCode);
+        if(i < 1){
+            throw new ServiceException("修改父Id失败");
+        }
+        return true;
+    }
+
 
 }
diff --git a/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java b/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java
index eb71982..5f80e4c 100644
--- a/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java
+++ b/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java
@@ -91,4 +91,7 @@ public interface RoleMapper
      */
     public Role checkroleCodeUnique(@Param("warehouseCode") String warehouseCode, @Param("roleCode") String roleCode);
 
+
+    public int roleCopy(@Param("code")String code, @Param("newCode")String newCode);
+
 }
diff --git a/src/main/java/com/huaheng/pc/system/role/service/IRoleService.java b/src/main/java/com/huaheng/pc/system/role/service/IRoleService.java
index 41d6a52..efafd30 100644
--- a/src/main/java/com/huaheng/pc/system/role/service/IRoleService.java
+++ b/src/main/java/com/huaheng/pc/system/role/service/IRoleService.java
@@ -108,4 +108,8 @@ public interface IRoleService
      */
     public int countUserRoleByRoleId(Integer id);
 
+
+    //复制角色
+    Boolean roleCopy(String code,String newCode);
+
 }
diff --git a/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java b/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java
index 741f6dd..87300dc 100644
--- a/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java
@@ -259,4 +259,15 @@ public class RoleServiceImpl implements IRoleService
         return userRoleMapper.countUserRoleByRoleId(id);
     }
 
+
+    //复制角色
+    @Override
+    public Boolean roleCopy(String code, String newCode) {
+        int i = roleMapper.roleCopy(code,newCode);
+        if(i > 0){
+            return true;
+        }
+        return false;
+    }
+
 }
diff --git a/src/main/resources/mybatis/config/FilterConfigDetailMapper.xml b/src/main/resources/mybatis/config/FilterConfigDetailMapper.xml
index 294d19a..7879c53 100644
--- a/src/main/resources/mybatis/config/FilterConfigDetailMapper.xml
+++ b/src/main/resources/mybatis/config/FilterConfigDetailMapper.xml
@@ -33,4 +33,24 @@
     version, userDef1, userDef2, userDef3, userDef4,
     processStamp, filterName
   </sql>
+
+
+  <insert id="filterConfigDetailCopy">
+  insert into filter_config_detail(headerId, code, moduleType, recordType, filterCode, warehouseCode, description,
+    `statement`,statements, systemCreated, customSql, createdBy, lastUpdatedBy,
+    version,processStamp, filterName)
+    select  headerId, code, moduleType, recordType, filterCode, #{newCode}, description,
+    `statement`,statements, systemCreated, customSql,createdBy, lastUpdatedBy,version,
+    processStamp, filterName from filter_config_detail
+    where warehouseCode =#{code}
+
+  </insert>
+
+  <update id="updateHeaderId">
+    update filter_config_detail d
+	inner join filter_config_header t
+	on t.filterCode=d.filterCode and d.warehouseCode=t.warehouseCode and d.warehouseCode=#{code}
+	set d.headerId=t.id
+
+  </update>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/FilterConfigHeaderMapper.xml b/src/main/resources/mybatis/config/FilterConfigHeaderMapper.xml
index df68781..cba48da 100644
--- a/src/main/resources/mybatis/config/FilterConfigHeaderMapper.xml
+++ b/src/main/resources/mybatis/config/FilterConfigHeaderMapper.xml
@@ -28,4 +28,15 @@
     created, createdBy, lastUpdated, lastUpdatedBy, version, userDef1, userDef2, userDef3, 
     userDef4, processStamp, filterName
   </sql>
+
+
+  <insert id="filterConfigHeaderCopy">
+  insert into filter_config_header(moduleType, recordType, filterCode, warehouseCode, description, systemCreated,
+    createdBy, lastUpdatedBy, version, processStamp, filterName)
+    select moduleType, recordType, filterCode, #{newCode}, description, systemCreated,
+   createdBy, lastUpdatedBy, version,  processStamp, filterName from filter_config_header
+   where warehouseCode = #{code}
+
+
+  </insert>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/StatusFlowDetailMapper.xml b/src/main/resources/mybatis/config/StatusFlowDetailMapper.xml
index 9884dec..2ac2749 100644
--- a/src/main/resources/mybatis/config/StatusFlowDetailMapper.xml
+++ b/src/main/resources/mybatis/config/StatusFlowDetailMapper.xml
@@ -33,4 +33,21 @@
     nessary, created, createdBy, lastUpdated, lastUpdatedBy, version, userDef1, userDef2, 
     userDef3, userDef4, userDef5, userDef6, userDef7, userDef8, processStamp
   </sql>
+
+  <insert id="statusFlowDetailCopy">
+  insert into status_flow_detail(headerId,headerCode, flowCode, warehouseCode, moduleType, recordType, `enable`, `sequence`,
+    nessary, createdBy, lastUpdatedBy, version, processStamp)
+    select headerId,headerCode, flowCode, #{newCode}, moduleType, recordType, `enable`, `sequence`,
+    nessary, createdBy, lastUpdatedBy, version,processStamp from status_flow_detail
+    where warehouseCode =#{code}
+
+  </insert>
+
+  <update id="updateHeaderId">
+    update status_flow_detail d
+	inner join status_flow_header t
+	on t.code=d.headerCode and d.warehouseCode=t.warehouseCode and d.warehouseCode=#{code}
+	set d.headerId=t.id
+
+  </update>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/StatusFlowHeaderMapper.xml b/src/main/resources/mybatis/config/StatusFlowHeaderMapper.xml
index 6527b96..6084930 100644
--- a/src/main/resources/mybatis/config/StatusFlowHeaderMapper.xml
+++ b/src/main/resources/mybatis/config/StatusFlowHeaderMapper.xml
@@ -32,4 +32,11 @@
     lastUpdated, lastUpdatedBy, version, userDef1, userDef2, userDef3, userDef4, userDef5, 
     userDef6, userDef7, userDef8, processStamp, systemCreated
   </sql>
+
+
+  <insert id="statusFlowHeaderCopy">
+  insert into status_flow_header(code,name,warehouseCode,moduleType,recordType,enable,createdBy,lastUpdatedBy,version,processStamp,systemCreated)
+  select code,name,#{newCode},moduleType,recordType,enable,createdBy, lastUpdatedBy,version,processStamp,systemCreated from status_flow_header
+  where warehouseCode = #{code}
+  </insert>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/WaveFlowDetailMapper.xml b/src/main/resources/mybatis/config/WaveFlowDetailMapper.xml
index 91d07b0..e03c303 100644
--- a/src/main/resources/mybatis/config/WaveFlowDetailMapper.xml
+++ b/src/main/resources/mybatis/config/WaveFlowDetailMapper.xml
@@ -31,4 +31,24 @@
     value1, value2, value3, value4, created, createdBy, lastUpdated, lastUpdatedBy, version, 
     userDef1, userDef2, userDef3, userDef4,  processStamp
   </sql>
+
+
+  <insert id="waveFlowDetailCopy">
+  insert into wave_flow_detail(headerId, waveFlowCode, warehouseCode, `sequence`, waveStepCode, waveStepName,
+    value1, value2, value3, value4, createdBy, lastUpdatedBy, version,processStamp)
+    select  headerId, waveFlowCode, #{newCode}, `sequence`, waveStepCode, waveStepName,
+    value1, value2, value3, value4, createdBy, lastUpdatedBy, version, processStamp from wave_flow_detail
+    where warehouseCode =#{code}
+
+
+  </insert>
+
+ <update id="updateHeaderId">
+  update wave_flow_detail d
+	inner join wave_flow_header t
+	on t.code=d.waveFlowCode and d.warehouseCode=t.warehouseCode and d.warehouseCode=#{code}
+	set d.headerId=t.id
+
+ </update>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/WaveFlowHeaderMapper.xml b/src/main/resources/mybatis/config/WaveFlowHeaderMapper.xml
index 626cb71..0506861 100644
--- a/src/main/resources/mybatis/config/WaveFlowHeaderMapper.xml
+++ b/src/main/resources/mybatis/config/WaveFlowHeaderMapper.xml
@@ -22,4 +22,12 @@
     id, code, warehouseCode, created, createdBy, lastUpdated, lastUpdatedBy, version, 
     userDef1, userDef2, userDef3, userDef4, processStamp
   </sql>
+
+
+  <insert id="waveFlowHeaderCopy">
+  insert into wave_flow_header(code, warehouseCode, createdBy, lastUpdatedBy, version,processStamp)
+    select code, #{newCode}, createdBy, lastUpdatedBy, version,processStamp from wave_flow_header
+    where warehouseCode =#{code}
+
+  </insert>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/WaveMasterMapper.xml b/src/main/resources/mybatis/config/WaveMasterMapper.xml
index 96e5a31..ae1c3d6 100644
--- a/src/main/resources/mybatis/config/WaveMasterMapper.xml
+++ b/src/main/resources/mybatis/config/WaveMasterMapper.xml
@@ -5,6 +5,7 @@
     <!--@mbg.generated-->
     <id column="id" jdbcType="INTEGER" property="id" />
     <result column="code" jdbcType="VARCHAR" property="code" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
     <result column="sequence" jdbcType="INTEGER" property="sequence" />
     <result column="shipmentFilterCode" jdbcType="VARCHAR" property="shipmentFilterCode" />
@@ -37,11 +38,24 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, code, warehouseCode, `sequence`, shipmentFilterCode, waveFlowCode, statusFlowCode, 
+    id, code,name, warehouseCode, `sequence`, shipmentFilterCode, waveFlowCode, statusFlowCode,
     shortMode, maxShipments, maxLines, defaultWaveCreateSize, shipmentGroupSize, holdRplnTask,
     rplnStrategy, rplnQtyUM, maxRplnQty, groupingOrderBy, assignmentRule, needReplenishment,
     rplnAllocationRule, rplnLocatingRule, created, createdBy, lastUpdated, lastUpdatedBy, 
     version, userDef1, userDef2, userDef3, userDef4,
     processStamp
   </sql>
+
+  <insert id="waveMasterCopy">
+  insert into wave_master(code,name, warehouseCode, `sequence`, shipmentFilterCode, waveFlowCode, statusFlowCode,
+    shortMode, maxShipments, maxLines, defaultWaveCreateSize, shipmentGroupSize, holdRplnTask,
+    rplnStrategy, rplnQtyUM, maxRplnQty, groupingOrderBy, assignmentRule, needReplenishment,
+    rplnAllocationRule, rplnLocatingRule, createdBy, lastUpdatedBy,version,processStamp)
+    select code,name,#{newCode}, `sequence`, shipmentFilterCode, waveFlowCode, statusFlowCode,
+    shortMode, maxShipments, maxLines, defaultWaveCreateSize, shipmentGroupSize, holdRplnTask,
+    rplnStrategy, rplnQtyUM, maxRplnQty, groupingOrderBy, assignmentRule, needReplenishment,
+    rplnAllocationRule, rplnLocatingRule, createdBy, lastUpdatedBy,version,processStamp from wave_master
+    where warehouseCode =#{code}
+
+  </insert>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/system/DictDataMapper.xml b/src/main/resources/mybatis/system/DictDataMapper.xml
index 5f6a411..f290445 100644
--- a/src/main/resources/mybatis/system/DictDataMapper.xml
+++ b/src/main/resources/mybatis/system/DictDataMapper.xml
@@ -205,4 +205,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		limit 1
 	</select>
 
+	<insert id="dictDateCopy">
+	insert into  sys_dict_data(warehouseCode,dictSort,dictLabel,dictValue,dictType,cssClass,listClass,isDefault,enable,deleted,remark)
+		SELECT #{newCode},dictSort,dictLabel,dictValue,dictType,cssClass,listClass,isDefault,enable,deleted,remark from sys_dict_data
+		where warehouseCode = {code}
+
+	</insert>
+
+	<update id="updateHeaderId">
+		update sys_dict_data d
+		inner join sys_dict_type t
+		on t.dictType=d.dictType and d.warehouseCode=t.warehouseCode and d.warehouseCode=#{code}
+		set d.headerId=t.id
+	</update>
+
 </mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/system/DictTypeMapper.xml b/src/main/resources/mybatis/system/DictTypeMapper.xml
index b64243b..57f9c35 100644
--- a/src/main/resources/mybatis/system/DictTypeMapper.xml
+++ b/src/main/resources/mybatis/system/DictTypeMapper.xml
@@ -141,5 +141,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		)
 		</foreach>
 	</insert>
+
+	<insert id="dictTypeCopy">
+		insert into sys_dict_type(warehouseCode,dictName,dictType,enable,deleted,remark)
+		select #{newCode},dictName,dictType,enable,deleted,remark from sys_dict_type
+		where warehouseCode=#{code}
+
+	</insert>
 	
 </mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/system/MenuMapper.xml b/src/main/resources/mybatis/system/MenuMapper.xml
index 823085c..f69871e 100644
--- a/src/main/resources/mybatis/system/MenuMapper.xml
+++ b/src/main/resources/mybatis/system/MenuMapper.xml
@@ -181,4 +181,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by orderNum
 	</select>
 
+	<insert id="menuCopy">
+		insert into sys_menu(menuName,parentId,parentName,orderNum,url,menuType,menuMobile,visible,perms,icon,warehouseCode,remark)
+		select menuName,parentId,parentName,orderNum,url,menuType,menuMobile,visible,perms,icon,#{newCode},remark from sys_menu
+		where warehouseCode = #{code}
+
+	</insert>
+
+	<update id="updateParentId">
+	update sys_menu s
+	inner join sys_menu m on s.warehouseCode=#{code} and s.parentName=m.menuName set s.parentId=m.id
+
+	</update>
+
 </mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/system/RoleMapper.xml b/src/main/resources/mybatis/system/RoleMapper.xml
index c740a9d..445c5df 100644
--- a/src/main/resources/mybatis/system/RoleMapper.xml
+++ b/src/main/resources/mybatis/system/RoleMapper.xml
@@ -124,5 +124,10 @@
  			sysdate()
  		)
 	</insert>
+
+	<insert id="roleCopy">
+		insert into sys_role(roleName,roleCode,roleSort,warehouseCode,enable,remark)
+		select roleName,roleCode,roleSort,#{newCode},enable,remark from sys_role where warehouseCode=#{code}
+	</insert>
 	
 </mapper> 
\ No newline at end of file
diff --git a/src/main/resources/templates/config/shipmentType/add.html b/src/main/resources/templates/config/shipmentType/add.html
index e35d3a8..13fe276 100644
--- a/src/main/resources/templates/config/shipmentType/add.html
+++ b/src/main/resources/templates/config/shipmentType/add.html
@@ -4,7 +4,7 @@
 <head th:include="include :: header"></head>
 <body class="white-bg">
 <div class="wrapper wrapper-content animated fadeInRight ibox-content">
-    <form class="form-horizontal m" id="form-receiptType-add">
+    <form class="form-horizontal m" id="form-shipmentType-add">
         <div class="form-group">
             <label class="col-sm-3 control-label">编码:</label>
             <div class="col-sm-8">
@@ -46,7 +46,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">出库流程:</label>
             <div class="col-sm-8">
-                <select id="receiptFlow" name="shipmentFlow" class="form-control" th:with="statusFlowList=${@StatusFlow.flowList()}">
+                <select id="shipmentFlow" name="shipmentFlow" class="form-control" th:with="statusFlowList=${@StatusFlow.flowList('shippingFlow')}">
                     <option th:each="flow : ${statusFlowList}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
                 </select>
             </div>
@@ -153,7 +153,7 @@
 <div th:include="include::footer"></div>
 <script type="text/javascript">
     var prefix = ctx + "config/shipmentType";
-    $("#form-receiptType-add").validate({
+    $("#form-shipmentType-add").validate({
         rules:{
             code:{
                 required:true,
@@ -167,7 +167,7 @@
         },
         submitHandler: function(form) {
             // $.operate.save(prefix + "/add", $('#form-locationType-add').serialize());
-            var tableValue = $.common.getTableValue("#form-receiptType-add");
+            var tableValue = $.common.getTableValue("#form-shipmentType-add");
             tableValue = formValueReplace(tableValue, "companyCode", $("#companyCode option:selected").val());
             tableValue = formValueReplace(tableValue, "shipmentFlow", $("#shipmentFlow option:selected").val());
             tableValue = formValueReplace(tableValue, "enable", $("input[name='enable']").is(':checked'));
diff --git a/src/main/resources/templates/config/shipmentType/edit.html b/src/main/resources/templates/config/shipmentType/edit.html
index 1e6c3c2..3f2ce7e 100644
--- a/src/main/resources/templates/config/shipmentType/edit.html
+++ b/src/main/resources/templates/config/shipmentType/edit.html
@@ -155,7 +155,7 @@
 <div th:include="include::footer"></div>
 <script type="text/javascript">
     var prefix = ctx + "config/shipmentType";
-    $("#form-receiptType-edit").validate({
+    $("#form-shipmentType-edit").validate({
         rules:{
             code:{
                 required:true,