diff --git a/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java b/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java
new file mode 100644
index 0000000..90aafdc
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java
@@ -0,0 +1,123 @@
+package com.huaheng.api.general.controller;
+
+import com.huaheng.api.general.service.BasicDataApiService;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.customer.domain.Customer;
+import com.huaheng.pc.config.material.domain.Material;
+import com.huaheng.pc.config.supplier.domain.Supplier;
+import com.huaheng.pc.config.warehouse.domain.Warehouse;
+import com.huaheng.pc.system.dept.domain.Dept;
+import com.huaheng.pc.system.dict.domain.DictData;
+import com.huaheng.pc.system.user.domain.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/basicData")
+@Api(tags = {"basicData"}, description = "基础数据接口")
+public class BasicDataApi extends BaseController {
+
+    @Autowired
+    private BasicDataApiService basicDataApiService;
+
+    /**
+     * 同步物料
+     */
+    @Log(title = "物料添加", action = BusinessType.INSERT)
+    @PostMapping("/material")
+    @ApiOperation("物料添加公共接口")
+    @ResponseBody
+    public AjaxResult MaterialApi(@RequestBody Material material)
+    {
+        AjaxResult ajaxResult = basicDataApiService.material(material);
+        return ajaxResult;
+    }
+
+    /**
+     * 同步字典
+     */
+    @Log(title = "字典添加", action = BusinessType.INSERT)
+    @PostMapping("/dictData")
+    @ApiOperation("字典添加公共接口")
+    @ResponseBody
+    public AjaxResult UnitlApi(@RequestBody DictData dictData)
+    {
+        AjaxResult ajaxResult = basicDataApiService.dict(dictData);
+        return ajaxResult;
+    }
+
+
+
+    /**
+     * 同步仓库和货主
+     */
+    @Log(title = "仓库添加", action = BusinessType.INSERT)
+    @PostMapping("/warehouse")
+    @ApiOperation("仓库添加公共接口")
+    @ResponseBody
+    public AjaxResult WarehouseApi(@RequestBody Warehouse warehouse)
+    {
+        AjaxResult ajaxResult = basicDataApiService.warehouse(warehouse);
+        return ajaxResult;
+    }
+
+    /**
+     * 同步客户档案
+     */
+    @Log(title = "客户档案添加", action = BusinessType.INSERT)
+    @PostMapping("/customer")
+    @ApiOperation("客户档案添加公共接口")
+    @ResponseBody
+    public AjaxResult CustomerApi(@RequestBody Customer customer)
+    {
+        AjaxResult ajaxResult = basicDataApiService.customer(customer);
+        return ajaxResult;
+    }
+
+    /**
+     * 同步部门档案
+     */
+    @Log(title = "部门档案添加", action = BusinessType.INSERT)
+    @PostMapping("/dept")
+    @ApiOperation("部门档案添加公共接口")
+    @ResponseBody
+    public AjaxResult DeptApi(@RequestBody Dept dept)
+    {
+        AjaxResult ajaxResult = basicDataApiService.dept(dept);
+        return ajaxResult;
+    }
+
+    /**
+     * 同步人员档案
+     */
+    @Log(title = "人员档案添加", action = BusinessType.INSERT)
+    @PostMapping("/user")
+    @ApiOperation("人员档案添加公共接口")
+    @ResponseBody
+    public AjaxResult UserApi(@RequestBody User user)
+    {
+        AjaxResult ajaxResult = basicDataApiService.user(user);
+        return ajaxResult;
+    }
+
+    /**
+     * 同步供应商档案
+     */
+    @Log(title = "供应商档案添加", action = BusinessType.INSERT)
+    @PostMapping("/supplier")
+    @ApiOperation("供应商档案添加公共接口")
+    @ResponseBody
+    public AjaxResult SupplierApi(@RequestBody Supplier supplier){
+        AjaxResult ajaxResult = basicDataApiService.supplier(supplier);
+        return ajaxResult;
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/huaheng/api/general/controller/LoginApi.java b/src/main/java/com/huaheng/api/general/controller/LoginApi.java
new file mode 100644
index 0000000..38dba14
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/controller/LoginApi.java
@@ -0,0 +1,54 @@
+package com.huaheng.api.general.controller;
+
+import com.alibaba.fastjson.JSONException;
+import com.huaheng.common.utils.DataUtils;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.system.user.service.IUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+
+@RestController
+@RequestMapping("/api")
+@Api(tags = {"Login"}, description = "登陆接口")
+public class LoginApi extends BaseController {
+
+    @Autowired
+    private IUserService userService;
+
+    @PostMapping("/login")
+    @ApiOperation("登陆接口")
+    public AjaxResult login(@RequestBody @ApiParam(value="登陆的Map集合") Map<String, String> param)
+    {
+        if  (param.get("username") == null)
+            throw new JSONException("username(用户名)不能为空");
+        if  (param.get("password") == null)
+            throw new JSONException("password(密码)不能为空");
+        if  (param.get("warehouseCode") == null)
+            throw new JSONException("warehouseCode(仓库编码)不能为空");
+        String username = param.get("username");
+        String password = param.get("password");
+        String warehouseCode = param.get("warehouseCode");
+        AjaxResult ajaxResult = userService.login(username, password,  warehouseCode, false);
+        return ajaxResult;
+    }
+
+
+    @PostMapping("/heartbeat")
+    @ApiOperation("心跳接口,用于延长cookie有效期")
+    public AjaxResult heartbeat()
+    {
+        return AjaxResult.success("success");
+    }
+
+
+}
diff --git a/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java b/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java
new file mode 100644
index 0000000..16920ea
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java
@@ -0,0 +1,510 @@
+package com.huaheng.api.general.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.StringUtils;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.company.domain.Company;
+import com.huaheng.pc.config.company.service.CompanyService;
+import com.huaheng.pc.config.customer.domain.Customer;
+import com.huaheng.pc.config.customer.service.CustomerServiceImpl;
+import com.huaheng.pc.config.material.domain.Material;
+import com.huaheng.pc.config.material.service.MaterialService;
+import com.huaheng.pc.config.supplier.domain.Supplier;
+import com.huaheng.pc.config.supplier.service.SupplierService;
+import com.huaheng.pc.config.warehouse.domain.Warehouse;
+import com.huaheng.pc.config.warehouse.service.WarehouseService;
+import com.huaheng.pc.system.dept.domain.Dept;
+import com.huaheng.pc.system.dept.service.IDeptService;
+import com.huaheng.pc.system.dict.domain.DictData;
+import com.huaheng.pc.system.dict.domain.DictType;
+import com.huaheng.pc.system.dict.mapper.DictDataMapper;
+import com.huaheng.pc.system.dict.mapper.DictTypeMapper;
+import com.huaheng.pc.system.dict.service.IDictDataService;
+import com.huaheng.pc.system.dict.service.IDictTypeService;
+import com.huaheng.pc.system.user.domain.User;
+import com.huaheng.pc.system.user.service.IUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+@Transactional
+public class BasicDataApiService {
+    @Autowired
+    IDictTypeService dictTypeService;
+    @Autowired
+    IDictDataService dictDataService;
+    @Autowired
+    MaterialService materialService;
+
+    @Resource
+    private DictTypeMapper dictTypeMapper;
+    @Resource
+    private DictDataMapper dictDataMapper;
+
+    @Autowired
+    IUserService iUserService;
+
+    @Autowired
+    IDeptService iDeptService;
+
+    @Autowired
+    CustomerServiceImpl iCustomerService;
+
+    @Autowired
+    WarehouseService iWarehouseService;
+
+    @Autowired
+    SupplierService iSupplierService;
+
+    @Autowired
+    CompanyService companyService;
+
+    //检查仓库
+    public Warehouse checkWarehouse(String code) {
+        LambdaQueryWrapper<Warehouse> warehouseLam = Wrappers.lambdaQuery();
+        warehouseLam.eq(Warehouse::getCode, code);
+        Warehouse warehouse = iWarehouseService.getOne(warehouseLam);
+        if (warehouse == null) {
+            throw new ServiceException("数据出现问题,系统没有该仓库");
+        }
+        return warehouse;
+    }
+
+    /**
+     * 字典通用接口
+     * 1、判断必填字段是否为空
+     * 2、仓库是否正确
+     * 3、检查字典头表,如果没有就添加
+     * 4、增新一条字典明细表的记录
+     * @param dictData
+     * @return
+     */
+    public AjaxResult dict(DictData dictData) {
+        //1、判断必填字段是否为空
+        if(StringUtils.isEmpty(dictData.getWarehouseCode())){
+            return AjaxResult.error("没有仓库编码");
+        }
+        if(StringUtils.isEmpty(dictData.getDictLabel())){
+            return AjaxResult.error("没有字典标签");
+        }
+        if(StringUtils.isEmpty(dictData.getDictType())){
+            return AjaxResult.error("没有字典类型");
+        }
+        if(StringUtils.isEmpty(dictData.getDictValue())){
+            return AjaxResult.error("没有字典键值");
+        }
+
+        //2、仓库是否正确
+        int result = 0;
+        this.checkWarehouse(dictData.getWarehouseCode());
+
+        //3、检查字典头表,如果没有就添加
+        DictData condition = new DictData();
+        try {
+            condition.setDictType(dictData.getDictType());
+            condition.setWarehouseCode(dictData.getWarehouseCode());
+            condition.setDictValue(dictData.getDictValue());
+            condition.setEnable(true);
+            List<DictData> dictDatas = dictDataService.selectDictDataList(dictData);
+            if (dictDatas.size() < 1) {
+                //找出字典头表的id
+                DictType dictType = new DictType();
+                dictType.setWarehouseCode(dictData.getWarehouseCode());
+                dictType.setDictType(dictData.getDictType());
+                List<DictType> dictList = dictTypeService.selectDictTypeList(dictType);
+                if (dictList.size() < 1) {
+                    dictType.setWarehouseId(dictData.getWarehouseId());
+                    dictType.setCreateBy(dictData.getCreateBy());
+                    dictType.setCreateTime(dictData.getCreateTime());
+                    if(StringUtils.isEmpty(dictType.getCreateBy())) {
+                        result = dictTypeService.insertDictType(dictType);
+                    }else {
+                        result=dictTypeMapper.insertDictType(dictType);
+                    }
+                    dictList.add(dictType);
+                    if (result < 1) {
+                        throw new ServiceException("新增字典类型失败!");
+                    }
+                }
+                //4、增新一条字典明细表的记录
+                dictData.setHeaderId(dictList.get(0).getId());
+                if(StringUtils.isEmpty(dictData.getCreateBy())) {
+                    result = dictDataService.insertDictData(dictData);
+                }else {
+                    result=dictDataMapper.insertDictData(dictData);
+                }
+                if (result < 1) {
+                    throw new ServiceException("新增字典数据失败!");
+                }
+            }
+        }catch (Exception e){
+            throw new ServiceException("字典数据有误!!");
+        }
+        return AjaxResult.success("新增字典成功");
+    }
+
+    /**
+     * 检查是否存在物料,如果存在就修改,不存在就新增
+     * 1、判断必填字段是否为空
+     * 2、检查仓库和货主
+     * 3、查看此物料在系统是否存在
+     * @param material
+     * @return
+     */
+    @Transactional
+    public AjaxResult material(Material material)    {
+
+        //1、判断必填字段是否为空
+        if(StringUtils.isEmpty(material.getCode())){
+            return AjaxResult.error("物料编码不能为空!!");
+        }
+        if(StringUtils.isEmpty(material.getWarehouseCode())){
+            return AjaxResult.error("仓库编码不能为空!!");
+        }
+        if(StringUtils.isEmpty(material.getCompanyCode())){
+            return AjaxResult.error("货主编码不能为空!!");
+        }
+        if(StringUtils.isEmpty(material.getType())){
+            return AjaxResult.error("物料类型不能为空!!");
+        }
+        if(StringUtils.isEmpty(material.getName())){
+            return AjaxResult.error("物料名称不能为空!!");
+        }
+        if(StringUtils.isEmpty(material.getSpec())){
+            return AjaxResult.error("物料规格不能为空!!");
+        }
+        if(StringUtils.isEmpty(material.getUnit())){
+            return AjaxResult.error("物料单位不能为空!!");
+        }
+
+        //2、检查仓库和货主
+        this.checkWarehouse(material.getWarehouseCode());
+        LambdaQueryWrapper<Company> companyLam = Wrappers.lambdaQuery();
+        companyLam.eq(Company::getCode,material.getCompanyCode());
+        Company company=companyService.getOne(companyLam);
+        if(company==null){
+            return AjaxResult.error("没有该货主!!");
+        }
+
+        Boolean flag = false;
+        try {
+            //3、查看此物料在系统是否存在
+            LambdaQueryWrapper<Material> materialLam = Wrappers.lambdaQuery();
+            materialLam.eq(Material::getCode,material.getCode())
+                    .eq(Material::getWarehouseCode,material.getWarehouseCode());
+            Material entity = materialService.getOne(materialLam);
+            if (entity == null) {
+                flag = materialService.save(material);
+                if (flag == false) {
+                    throw new ServiceException("新增物料失败!");
+                }
+            } else {
+//                return AjaxResult.error("已有该物料,无法进行修改!!");
+                material.setId(entity.getId());
+                flag = materialService.updateById(material);
+                if (flag == false) {
+                    throw new ServiceException("更新物料失败!");
+                }else {
+                    return AjaxResult.success("更新物流成功!");
+                }
+            }
+        }catch (Exception e){
+            throw new ServiceException("物料数据问题");
+        }
+        return AjaxResult.success("新增物料成功");
+    }
+
+
+
+    /**
+     * 人员档案通用接口
+     * 1、判断必填字段是否为空
+     * 2、判断系统中是否有该用户,如果有则更新,如果没有则新增
+     *新增: (1)、默认密码为123456
+     *       (2)默认为普通用户
+     *       (3)默认为长沙仓库
+     * @param user
+     * @return
+     */
+    public AjaxResult user(User user){
+        //1、判断必填字段是否为空
+        int result = 0;
+        User user1 = new User();
+        if(user.getLoginName()==null || user.getLoginName()=="") {
+            return AjaxResult.error("没有人员编码!!");
+        }
+        if (user.getUserName()==null || user.getUserName()==""){
+            return AjaxResult.error("没有人员名称!!");
+        }
+        if(user.getDeptId()==null){
+            return AjaxResult.error("没有部门ID!!");
+        }
+        if(iDeptService.selectDeptById(user.getDeptId())==null){
+            return AjaxResult.error("系统没有此部门!!");
+        }
+        try {
+            user1.setLoginName(user.getLoginName());
+            //2、判断系统中是否有该用户,如果有则更新,如果没有则新增
+                if (iUserService.selectmen(user.getLoginName()) == null) {
+                    //(1)默认密码为123456
+                    if(user.getPassword()==null) {
+                        user.setPassword("123456");
+                    }
+                    //(2)默认为普通用户
+                    if(StringUtils.isEmpty(user.getRoleIds())) {
+                        List<Integer> roleIds=new ArrayList<>();
+                        roleIds.add(2);
+                        user.setRoleIds(roleIds);
+                    }
+                    //(3)默认为长沙仓库
+                    if(StringUtils.isEmpty(user.getCompanyIdList())) {
+                        List<Integer> companyIdList = new ArrayList<>();
+                        companyIdList.add(2);
+                        user.setCompanyIdList(companyIdList);
+                    }
+                result = iUserService.insertUser(user);
+                if (result < 1) {
+                    throw new ServiceException("新增人员档案失败!");
+                } else {
+                    return AjaxResult.success("新增人员档案成功!");
+                }
+            } else {
+                    return AjaxResult.error("已有该人员档案,无法进行修改!");
+//                result = iUserService.updateUser(user);
+//                if (result < 1) {
+//                    throw new ServiceException("更新人员档案失败!");
+//                } else {
+//                    return AjaxResult.success("更新人员档案成功!");
+//                }
+            }
+        }catch (Exception e){
+            throw new ServiceException("数据问题。。。");
+        }
+    }
+
+
+
+    /**
+     * 部门档案通用接口
+     * 1、判断必填字段是否为空
+     * 2、部门编码长度应是双数
+     *
+     * @param dept
+     * @return
+     */
+    @Transactional
+    public AjaxResult dept(Dept dept) {
+
+        //1、判断必填字段是否为空
+        int result = 0;
+        String code = dept.getCode();
+        if (code == null || code == "") {
+            return AjaxResult.error("部门编码不能为空!!");
+        }
+        try {
+            Dept rs = iDeptService.selectDepts(code);
+
+            //2、部门编码长度应是双数
+            if (rs == null) {
+                int x = code.length() % 2;
+                if (x != 0) {
+                    return AjaxResult.error("部门编码长度应是双数");
+                } else {
+                    int y = code.length() / 2;
+                    if (y >= 1) {
+                        String scode = code.substring(0, 2);
+                        if (iDeptService.selectDepts(scode) == null) {
+                            dept.setCode(scode);
+                            dept.setParentId(100);
+                            dept.setAncestors("0,100");
+                            dept.setOrderNum("1");
+                            result = iDeptService.insertDept(dept);
+                            if (result < 1) {
+                                throw new ServiceException("新增部门档案失败!");
+                            }
+                        }
+                    }
+                    for (int z = 1; z <=y; z++) {
+
+                        //找到上级部门
+                        String sqcode = code.substring(0, 2 * (z - 1));
+                        Dept sdept = iDeptService.selectDepts(sqcode);
+                        String sscode = code.substring(0, 2 * z);
+                        if (iDeptService.selectDepts(sscode) == null) {
+                            dept.setCode(sscode);
+                            dept.setParentId(sdept.getId());
+                            dept.setAncestors(sdept.getAncestors() + "," + sdept.getId());
+                            dept.setOrderNum(String.valueOf(z));
+                            result = iDeptService.insertDept(dept);
+                            if (result < 1) {
+                                throw new ServiceException("新增部门档案失败!");
+                            }
+                        }
+                    }
+                }
+                return AjaxResult.success("新增部门成功");
+            } else {
+                dept.setId(rs.getId());
+                int num = iDeptService.updatesDept(dept);
+                if (num < 1) {
+                    throw new ServiceException("部门修改失败");
+                } else {
+                    return AjaxResult.success("部门修改成功");
+                }
+            }
+        } catch (Exception e) {
+            throw new ServiceException("数据问题。。。");
+        }
+    }
+
+    /**
+     * 客户档案通用接口
+     * 1、判断必填字段是否为空
+     * 2、检查仓库
+     * 3、查看此客户在系统是否存在
+     * @param customer
+     * @return
+     */
+    public AjaxResult customer(Customer customer){
+        Boolean flag = true;
+        //1、判断必填字段是否为空
+        if(customer.getCode()==null||customer.getCode()=="") {
+            return AjaxResult.error("客户代码不能为空!!");
+        }
+        if(StringUtils.isEmpty(customer.getWarehouseCode())){
+            return AjaxResult.error("没有仓库编码");
+        }
+        if(StringUtils.isEmpty(customer.getName())){
+            return AjaxResult.error("没有客户名称");
+        }
+        if(StringUtils.isEmpty(customer.getCompanyCode())){
+            return AjaxResult.error("没有货主编码");
+        }
+        try {
+            //2、检查仓库
+            this.checkWarehouse(customer.getWarehouseCode());
+
+            //3、查看此客户在系统是否存在
+            LambdaQueryWrapper<Customer> customerLam = Wrappers.lambdaQuery();
+            customerLam.eq(Customer::getCode,customer.getCode())
+                    .eq(Customer::getWarehouseCode,customer.getWarehouseCode());
+            Customer ctr = iCustomerService.getOne(customerLam);
+
+            //不存在添加
+            if ( ctr == null) {
+                flag = iCustomerService.save(customer);
+                if (flag == false) {
+                    throw new ServiceException("新增客户档案失败!");
+                } else {
+                    return AjaxResult.success("新增客户档案成功!");
+                }
+            } else {
+                return AjaxResult.error("已有该客户,无法进行修改!!");
+//                customer.setId(rs.getId());
+//                result = iCustomerService.updateByModel(customer);
+//                if (result < 1) {
+//                    throw new ServiceException("更新客户档案失败!");
+//                } else {
+//                    return AjaxResult.success("更新客户档案成功!");
+//                }
+            }
+        }catch (Exception e){
+            throw new ServiceException("数据问题。。。");
+        }
+    }
+
+    /**
+     * 仓库档案通用接口
+     * 1、判断必填字段是否为空
+     * 2、判断系统中是否有该仓库,若有则更新,若无则新增
+     * @param warehouse
+     * @return
+     */
+    public AjaxResult warehouse(Warehouse warehouse){
+        if(warehouse.getCode()==null||warehouse.getCode()=="") {
+            return AjaxResult.error("仓库编码不能为空!!");
+        }
+        if(warehouse.getName()==null||warehouse.getName()=="") {
+            return AjaxResult.error("仓库名称不能为空!!");
+        }
+        try {
+            LambdaQueryWrapper<Warehouse> warehouseLam = Wrappers.lambdaQuery();
+            warehouseLam.eq(Warehouse::getCode,warehouse.getCode());
+            Warehouse whs = iWarehouseService.getOne(warehouseLam);
+
+            //2、判断系统中是否有该仓库,若有则更新,若无则新增
+            if (whs == null) {
+                Boolean flag = iWarehouseService.save(warehouse);
+                if (flag == false) {
+                    throw new ServiceException("新增仓库档案失败!");
+                } else {
+                    return AjaxResult.success("新增仓库档案成功!");
+                }
+            } else {
+                return AjaxResult.error("已有该仓库,无法进行修改!");
+//                warehouse.setId(rs.getId());
+//                result = iWarehouseService.updateByModel(warehouse);
+//                if (result < 1) {
+//                    throw new ServiceException("更新仓库档案失败!");
+//                } else {
+//                    return AjaxResult.success("更新仓库档案成功!");
+//                }
+            }
+        }catch (Exception e){
+            throw new ServiceException("仓库数据问题。。。");
+        }
+    }
+
+    /**
+     * 供应商档案通用接口
+     * 1、判断必填字段是否为空
+     *  2、检查仓库
+     *  3、查看此供应商在系统是否存在
+     * @param supplier
+     * @return
+     */
+    public AjaxResult supplier(Supplier supplier){
+
+        //1、判断必填字段是否为空
+        if(StringUtils.isEmpty(supplier.getCode())){
+            return AjaxResult.error("没有供应商代码");
+        }
+        if(StringUtils.isEmpty(supplier.getName())){
+            return AjaxResult.error("没有供应商名称");
+        }
+        if(StringUtils.isEmpty(supplier.getWarehouseCode())){
+            return AjaxResult.error("没有仓库编码");
+        }
+
+        //2、检查仓库
+        this.checkWarehouse(supplier.getCode());
+
+        //3、查看此供应商在系统是否存在
+        try {
+            LambdaQueryWrapper<Supplier> supplierLam = Wrappers.lambdaQuery();
+            supplierLam.eq(Supplier::getCode,supplier.getCode())
+                    .eq(Supplier::getWarehouseCode,supplier.getWarehouseCode());
+            Supplier spl=iSupplierService.getOne(supplierLam);
+
+            if (spl== null) {
+                Boolean flag = iSupplierService.save(supplier);
+                if (flag == false) {
+                    throw new ServiceException("新增供应商失败!");
+                } else {
+                    return AjaxResult.success("新增供应商成功!");
+                }
+            } else {
+                return AjaxResult.error("已有该供应商,无法修改!!");
+            }
+        }catch (Exception e){
+            throw new ServiceException("供应商数据问题。。。");
+        }
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/check/checkDetail/controller/CheckDetailController.java b/src/main/java/com/huaheng/pc/check/checkDetail/controller/CheckDetailController.java
index d41fe04..9191b17 100644
--- a/src/main/java/com/huaheng/pc/check/checkDetail/controller/CheckDetailController.java
+++ b/src/main/java/com/huaheng/pc/check/checkDetail/controller/CheckDetailController.java
@@ -131,8 +131,7 @@ public class CheckDetailController extends BaseController {
 
     /**
      * 保存质检完成
-     * @param inventorySts 库存状态
-     * @param qty 数量
+     * @param id
      * @return AjaxResult
      */
     @ApiOperation(value="完成质检详情", notes="完成质检详情", httpMethod = "POST")
diff --git a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java
index a950e13..293c66a 100644
--- a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java
+++ b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java
@@ -10,6 +10,6 @@ public interface ShipmentPreferenceService extends IService<ShipmentPreference>{
 
 
     //查看出库此操作是否符合出库首选项的出库流程
-    List<ShipmentHeader>  checkShipmentProcess(String ids, Integer code);
+    List<ShipmentHeader>  checkShipmentProcess(String ids, Integer status,String code);
 
 }
diff --git a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java
index 2071bff..cda6380 100644
--- a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java
@@ -45,11 +45,11 @@ public class ShipmentPreferenceServiceImpl extends ServiceImpl<ShipmentPreferenc
      * 4、判断单据是否按出库流程操作
      *
      * @param ids 出库单id
-     * @param code 状态流
+     * @param status 状态流
      * @return
      */
     @Override
-    public List<ShipmentHeader> checkShipmentProcess(String ids, Integer code) {
+    public List<ShipmentHeader> checkShipmentProcess(String ids, Integer status,String code) {
 
         LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery();
         configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment")
@@ -80,21 +80,33 @@ public class ShipmentPreferenceServiceImpl extends ServiceImpl<ShipmentPreferenc
         LambdaQueryWrapper<StatusFlowDetail> statusFlowDetailLamb = Wrappers.lambdaQuery();
         statusFlowDetailLamb.eq(StatusFlowDetail::getHeaderId,statusFlowHeader.getId())
                 .eq(StatusFlowDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
-                .eq(StatusFlowDetail::getFlowCode,code.toString());
+                .eq(StatusFlowDetail::getFlowCode,status.toString());
         StatusFlowDetail statusFlowDetail = statusFlowDetailService.getOne(statusFlowDetailLamb);
 
         List<ShipmentHeader> shipmentHeaderList = new ArrayList<>();
-        if(statusFlowDetail != null && statusFlowDetail.getNessary() == 1){
-            for (Integer id : Convert.toIntArray(ids))
-            {
-                //判断单据是否按出库流程操作
-                ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id);
-                if(shipmentHeader == null || shipmentHeader.getFirstStatus()<code){
+        if(statusFlowDetail != null && statusFlowDetail.getNessary() == 1) {
+            if (StringUtils.isNotEmpty(ids)) {
+                for (Integer id : Convert.toIntArray(ids)) {
+                    //判断单据是否按出库流程操作
+                    ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id);
+                    if (shipmentHeader == null || shipmentHeader.getFirstStatus() < status) {
+                        throw new ServiceException("单据状态不对,此操作不符合出库流程,请按照出库流程出库");
+                    }
+                    shipmentHeaderList.add(shipmentHeader);
+                }
+            }
+            else {
+                LambdaQueryWrapper<ShipmentHeader> lam = Wrappers.lambdaQuery();
+                lam.eq(ShipmentHeader::getCode,code)
+                        .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode());
+                ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(lam);
+                if (shipmentHeader == null || shipmentHeader.getFirstStatus() < status) {
                     throw new ServiceException("单据状态不对,此操作不符合出库流程,请按照出库流程出库");
                 }
                 shipmentHeaderList.add(shipmentHeader);
             }
         }
+
         return shipmentHeaderList;
     }
 }
diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java
index 86c7cf7..b5c33b9 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java
@@ -111,7 +111,7 @@ public class adjustDetailController extends BaseController {
     @GetMapping("/add")
     public String add(String adjustCode, ModelMap m)
     {
-        if( adjustCode== null){
+        if( adjustCode == null){
             throw new SecurityException("调整单头编码不能为空!");
         }
         m.put("adjustCode",adjustCode);
@@ -127,16 +127,21 @@ public class adjustDetailController extends BaseController {
     @ResponseBody
     public AjaxResult addSave(AdjustDetail adjustDetail)
     {
-        //查询货主
+        if(adjustDetail.getAdjustCode() == null){
+            return AjaxResult.error("调整主单编码不能为空,请先选中主单再新增明细!");
+        }
+        //查询主单及加入仓库和货主,盘点,质检单编码
         AdjustHeader adjustHeader = new AdjustHeader();
         adjustHeader.setCode(adjustDetail.getAdjustCode());
         LambdaQueryWrapper<AdjustHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(adjustHeader);
         AdjustHeader ah = adjustHeaderMapper.selectOne(lambdaQueryWrapper);
         if(ah == null){
-            throw new SecurityException("没有对应的主单据!");
+            return AjaxResult.error("没有对应的主单据!");
         }
         adjustDetail.setWarehouseCode(ah.getWarehouseCode());
         adjustDetail.setCompanyCode(ah.getCompanyCode());
+        adjustDetail.setCycleCountCode(ah.getCycleCountCode());
+        adjustDetail.setCheckCode(ah.getCheckCode());
         return adjustDetailService.addDetails(adjustDetail);
     }
 
@@ -152,7 +157,7 @@ public class adjustDetailController extends BaseController {
     public AjaxResult editAdjustSave(String ids)
     {
         if(ids == null){
-            throw new SecurityException("ID不能为空!");
+            return AjaxResult.error("ID不能为空!");
         }
         Integer[] integers = Convert.toIntArray(ids);
         for (Integer id : integers)
@@ -178,13 +183,15 @@ public class adjustDetailController extends BaseController {
     public AjaxResult adjustAgree (String ids){
 
         if(ids == null){
-            throw new SecurityException("ID不能为空!");
+            return AjaxResult.error("ID不能为空!");
         }
         Integer[] integers = Convert.toIntArray(ids);
         for (Integer id : integers){
             AdjustDetail adjustDetailEdit = adjustDetailService.getById(id);
+            if(StringUtils.isNotEmpty(adjustDetailEdit.getAgreeBy())){
+                return AjaxResult.error("明细已审批,请勿重复审批!");
+            }
             adjustDetailService.adjustAgree(adjustDetailEdit);
-
         }
         return AjaxResult.success("审批已下发!");
     }
diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
index 7a1e006..efefe05 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
@@ -5,11 +5,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.check.checkDetail.domain.CheckDetail;
+import com.huaheng.pc.check.checkDetail.service.CheckDetailService;
 import com.huaheng.pc.config.container.service.ContainerService;
 import com.huaheng.pc.config.location.domain.Location;
 import com.huaheng.pc.config.location.service.LocationService;
+import com.huaheng.pc.config.material.domain.Material;
+import com.huaheng.pc.config.material.service.MaterialService;
 import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader;
 import com.huaheng.pc.inventory.adjustHeader.service.AdjustHeaderService;
+import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail;
 import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService;
 import com.huaheng.pc.inventory.cycleCountHeader.service.CycleCountHeaderService;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
@@ -36,8 +41,13 @@ import java.util.WeakHashMap;
 public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, AdjustDetail> implements AdjustDetailService {
 
 
+
+    @Resource
+    private CycleCountDetailService cycleCountDetailService;
+    @Resource
+    private MaterialService materialService;
     @Resource
-    private AdjustHeaderService adjustHeaderService;
+    private CheckDetailService checkDetailService;
     @Resource
     private InventoryHeaderService inventoryHeaderService;
     @Resource
@@ -62,11 +72,49 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
     @Transactional
     @Override
     public AjaxResult addDetails(AdjustDetail adjustDetail) {
+        //数据直接插入表里
+        //查询主单据
 
 
+        //检查库存
+        if((adjustDetail.getInventoryDetailId()) != null){
+            InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
+            if(inventoryDetail == null){
+                return AjaxResult.error("没有该条库存明细");
+            }
+        }
+        //检查盘点单
+        if(StringUtils.isNotEmpty(adjustDetail.getCycleCountCode())){
+           CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(adjustDetail.getCheckDetailId());
+            if(cycleCountDetail == null || !cycleCountDetail.getCycleCountHeadCode().equals(adjustDetail.getCycleCountCode())){
+              return AjaxResult.error("盘点单错误,请核对盘点单据!");
+            }
+        }
+        //检查质检单
+        if(StringUtils.isNotEmpty(adjustDetail.getCheckCode())){
+            CheckDetail checkDetail = checkDetailService.getById(adjustDetail.getCheckDetailId());
+            if(checkDetail == null || !checkDetail.getCheckCode().equals(adjustDetail.getCheckCode())){
+                return AjaxResult.error("质检单错误,请核对质检单据!");
+            }
+        }
+        //检查物料
+        Material material = materialService.findAllByCode(adjustDetail.getMaterialCode());
+        if(material != null){
+            if(!material.getName().equals(adjustDetail.getMaterialName())){
+               return AjaxResult.error("物料名称错误!");
+            }
 
+        }else{
+            return AjaxResult.error("物料编码错误!");
+        }
+        adjustDetail.setMaterialUnit(material.getUnit());
+        adjustDetail.setMaterialSpec(material.getSpec());
+        adjustDetail.setCreated(new Date());
+        adjustDetail.setCreatedBy(ShiroUtils.getLoginName());
+        adjustDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+        adjustDetail.setLastUpdated(new Date());
 
-
+        this.saveOrUpdate(adjustDetail);
 
         return AjaxResult.success("新增调整明细成功!");
     }
@@ -113,19 +161,19 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         //调整单中不带库存明细时不查询
         if(adjustDetail.getInventoryDetailId() != null) {
             inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
-            //验证该条库存是不是正在使用,通过库位是否锁定来判断
             if (!adjustDetail.getLocationCode().equals(inventoryDetail.getLocationCode()) ||
                     !adjustDetail.getContainerCode().equals(inventoryDetail.getContainerCode())) {
-                throw new SecurityException("调整单和所调整库存的库位容器不符,前检查数据");
+                return AjaxResult.error("调整单和所调整库存的库位容器不符,前检查数据");
             }
-            Location location = new Location();
+            //验证该条库存是不是正在使用,验证库存明细
+            /*Location location = new Location();
             location.setCode(inventoryDetail.getLocationCode());
             location.setWarehouseCode(inventoryDetail.getWarehouseCode());
             LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(location);
             location = locationService.getOne(lambdaQueryWrapper);
             if (!location.getStatus().equals("empty")) {
-                throw new SecurityException(inventoryDetail.getId() + "库存非空闲,请等待其他任务完成再进行调整!");
-            }
+               return AjaxResult.error (inventoryDetail.getId() + "库存非空闲,请等待其他任务完成再进行调整!");
+            }*/
 
             //判断调整哪一个属性值
             /*以下方法有待验证讨论,BigDecimal传入null,如何避免传入0?*/
@@ -138,19 +186,19 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
                 //调整数量
                 updateAdjustDetailNumber(adjustDetail, inventoryDetail);
             }
-            if (StringUtils.isNotEmpty(adjustDetail.getFromInventorySts()) && StringUtils.isNotEmpty(adjustDetail.getToInventorySts())) {
+            if (!adjustDetail.getFromInventorySts().equals(adjustDetail.getToInventorySts())) {
                 //调整库存状态
                 updateAdjustDetailState(adjustDetail, inventoryDetail);
             }
+        }else{
+            String fromQtyString = adjustDetail.getFromQty().toString(); //调整前库存数量
+            if(StringUtils.isNotEmpty(fromQtyString)){
+                //调整插入库存
+                updateAdjustDetailInsert(adjustDetail);
+            }
         }
-        String fromQtyString = adjustDetail.getFromQty().toString(); //调整前库存数量
-        if(StringUtils.isNotEmpty(fromQtyString)){
-            //调整插入库存
-            updateAdjustDetailInsert(adjustDetail);
-        }
-
         //修改调整单明细状态
-        adjustDetail.setStatus(1);
+        adjustDetail.setStatus(3);
         adjustDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
         adjustDetail.setLastUpdated(new Date());
         this.saveOrUpdate(adjustDetail);
@@ -263,7 +311,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
         inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
         inventoryTransaction.setMaterialUnit(inventoryDetail.getMaterialUnit());
-        inventoryTransaction.setTaskQty(null);//数量不变
+        inventoryTransaction.setTaskQty(BigDecimal.ZERO);//数量不变
         inventoryTransaction.setInventorySts(adjustDetail.getFromInventorySts());//状态
         inventoryTransaction.setReferCode(inventoryDetail.getReferCode());
         inventoryTransaction.setReferDetailId(inventoryDetail.getReferDetailId());
@@ -296,7 +344,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryTransaction2.setMaterialName(inventoryDetail.getMaterialName());
         inventoryTransaction2.setMaterialSpec(inventoryDetail.getMaterialSpec());
         inventoryTransaction2.setMaterialUnit(inventoryDetail.getMaterialUnit());
-        inventoryTransaction2.setTaskQty(null);//数量不变
+        inventoryTransaction2.setTaskQty(BigDecimal.ZERO);//数量不变
         inventoryTransaction2.setInventorySts(inventoryDetail.getInventorySts());//状态
         inventoryTransaction2.setReferCode(inventoryDetail.getReferCode());
         inventoryTransaction2.setReferDetailId(inventoryDetail.getReferDetailId());
@@ -390,7 +438,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryDetail.setLastUpdated(new Date());
         inventoryDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
         inventoryDetail.setReceiptCode("");
-        inventoryDetail.setReceiptDetailId(null);
+        inventoryDetail.setReceiptDetailId(0);
         inventoryDetailService.saveOrUpdate(inventoryDetail);
 
         //写入库存交易
diff --git a/src/main/java/com/huaheng/pc/inventory/adjustHeader/controller/adjustHeaderController.java b/src/main/java/com/huaheng/pc/inventory/adjustHeader/controller/adjustHeaderController.java
index 451857d..e22e29b 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustHeader/controller/adjustHeaderController.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustHeader/controller/adjustHeaderController.java
@@ -4,26 +4,30 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaheng.common.support.Convert;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.aspectj.lang.annotation.Log;
 import com.huaheng.framework.aspectj.lang.constant.BusinessType;
 import com.huaheng.framework.web.controller.BaseController;
+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.inventory.adjustDetail.domain.AdjustDetail;
 import com.huaheng.pc.inventory.adjustDetail.service.AdjustDetailService;
 import com.huaheng.pc.inventory.adjustDetail.service.AdjustDetailServiceImpl;
 import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader;
 import com.huaheng.pc.inventory.adjustHeader.service.AdjustHeaderService;
 import com.huaheng.pc.inventory.adjustHeader.service.AdjustHeaderServiceImpl;
+import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 
 @Controller
@@ -37,7 +41,6 @@ public class adjustHeaderController extends BaseController {
     private AdjustDetailService adjustDetailService;
 
 
-
     private String prefix = "inventory/adjustHeader";
 
 
@@ -86,9 +89,69 @@ public class adjustHeaderController extends BaseController {
         }
     }
 
+    /**
+     * 新增调整单主页面
+     */
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
 
+    /**
+     * 新增保存调整单主
+     */
+    //@RequiresPermissions("inventory:cycleCount:add")
+    @Log(title = "库存-调整",operating = "新增调整主单", action = BusinessType.INSERT)
+    @PostMapping("/addsave")
+    @ResponseBody
+    public AjaxResult addSave(AdjustHeader adjustHeader)
+    {
+        adjustHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
+        return AjaxResult.success(adjustHeaderService.addSave(adjustHeader));
+    }
 
+    /**
+     * 删除调整单主
+     */
+    //@RequiresPermissions("inventory:cycleCount:remove")
+    @Log(title = "库存-调整",operating = "删除调整主单", action = BusinessType.DELETE)
+    @PostMapping( "/remove")
+    @ResponseBody
+    public AjaxResult remove(String ids)
+    {
+        if (StringUtils.isEmpty(ids))
+            return AjaxResult.error("id不能为空");
+        for (Integer id : Convert.toIntArray(ids))
+        {
+            AjaxResult result = adjustHeaderService.delete(id);
+            if(result.code!=200){
+                return result;
+            }
+        }
+        return AjaxResult.success("删除成功!");
+    }
 
+    /**
+     *  调整单打印
+     * @return
+     */
+    //@RequiresPermissions("inventory:cyclecountAdjust:report")
+    @GetMapping("/report/{id}")
+    public String report(@PathVariable("id") Integer id, ModelMap mmap)
+    {
+        AdjustHeader adjustHeader = adjustHeaderService.getById(id);
+        mmap.put("adjustHeader", adjustHeader);
+        //明细
+        AdjustDetail adjustDetail = new AdjustDetail();
+        adjustDetail.setAdjustCode(adjustHeader.getCode());
+        adjustDetail.setWarehouseCode(adjustHeader.getWarehouseCode());
+        adjustDetail.setCompanyCode(adjustHeader.getCompanyCode());
+        LambdaQueryWrapper<AdjustDetail> adjustDetailLambdaQueryWrapper = Wrappers.lambdaQuery(adjustDetail);
+        List<AdjustDetail> adjustDetails = adjustDetailService.list(adjustDetailLambdaQueryWrapper);
+        mmap.put("adjustDetails", adjustDetails);
+        return prefix + "/report";
+    }
 
 
 
diff --git a/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderService.java b/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderService.java
index 3709d1c..4c4635c 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderService.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderService.java
@@ -1,6 +1,7 @@
 package com.huaheng.pc.inventory.adjustHeader.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader;
 import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader;
 
@@ -10,8 +11,9 @@ public interface AdjustHeaderService extends IService<AdjustHeader> {
 
     String createCode();
 
+    AjaxResult delete(Integer id);
 
-
+    AjaxResult addSave(AdjustHeader adjustHeader);
 
 }
 
diff --git a/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderServiceImpl.java
index 9e75c9e..9e1a1b6 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustHeader/service/AdjustHeaderServiceImpl.java
@@ -1,9 +1,14 @@
 package com.huaheng.pc.inventory.adjustHeader.service;
 
+import com.huaheng.common.utils.StringUtils;
+import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.inventory.adjustDetail.domain.AdjustDetail;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader;
 import com.huaheng.pc.inventory.adjustHeader.mapper.AdjustHeaderMapper;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
@@ -21,6 +26,7 @@ public class AdjustHeaderServiceImpl extends ServiceImpl<AdjustHeaderMapper, Adj
 
 
 
+
     //生成差异单号
     @Override
     public String createCode() {
@@ -41,9 +47,56 @@ public class AdjustHeaderServiceImpl extends ServiceImpl<AdjustHeaderMapper, Adj
         return code;
     }
 
+    /**
+     * 删除
+     * 空缺
+     * @param id
+     * @return
+     */
+    @Override
+    public AjaxResult delete(Integer id) {
+        AdjustHeader adjustHeader = this.getById(id);
+        if(adjustHeader == null){
+            return AjaxResult.error("id为"+id.toString()+"的调整单不存在出,操作中止");
+        }
 
+        //批量删除子单据
+        AdjustDetail temp = new AdjustDetail();
+        temp.setAdjustCode(adjustHeader.getCode());
+
+        return AjaxResult.success("删除成功");
+    }
 
 
+    /**
+     * 保存新增调整头
+     * @param adjustHeader
+     * @return
+     */
+    @Transactional
+    @Override
+    public AjaxResult addSave(AdjustHeader adjustHeader) {
+        //校验调整类型
+        //盘点调整,质检调整需要和盘点和质检单据确认。
+        switch (adjustHeader.getProblemType()){
+            case "checkAdjust":   //质检调整
+            if(StringUtils.isEmpty(adjustHeader.getCheckCode())){
+                throw new SecurityException("选择单据类型为质检调整时,质检单编码不能为空!");
+            }
+                break;
+            case "adjust":   //盘点调整
+                if(StringUtils.isEmpty(adjustHeader.getCycleCountCode())){
+                    throw new SecurityException("选择单据类型为盘点调整时,盘点单编码不能为空!");
+                }
+                break;
+        }
+
+        adjustHeader.setCreated(new Date());
+        adjustHeader.setCreatedBy(ShiroUtils.getLoginName());
+        adjustHeader.setCode(this.createCode());
+        this.save(adjustHeader);
+        return AjaxResult.success("新增调整头成功!");
+    }
 
 
 }
diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java
index 7f66033..a8fce46 100644
--- a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java
+++ b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java
@@ -58,9 +58,10 @@ public class CycleCountDetailController extends BaseController {
 
 
 
-
     private String prefix = "inventory/cycleCountDetail";
 
+
+    @RequiresPermissions("inventory:cyclecountDetail:view")
     @GetMapping()
     public String cyclecountHeader()
     {
@@ -70,7 +71,7 @@ public class CycleCountDetailController extends BaseController {
     /**
      * 查询盘点单主列表
      */
-    //@RequiresPermissions("inventory:cycleCount:list")
+    @RequiresPermissions("inventory:cycleCountDetail:list")
     @PostMapping("/list")
     @Log(title = "库存-盘点",operating = "查看盘点明细", action = BusinessType.GRANT)
     @ResponseBody
@@ -143,7 +144,7 @@ public class CycleCountDetailController extends BaseController {
     /**
      * 新增保存盘点明细
      */
-    //@RequiresPermissions("inventory:cyclecountDetail:add")
+    @RequiresPermissions("inventory:cyclecountDetail:add")
     @Log(title = "库存-盘点", operating = "新增盘点补货明细", action = BusinessType.INSERT)
     @PostMapping("/add")
     @ResponseBody
@@ -155,7 +156,7 @@ public class CycleCountDetailController extends BaseController {
     /**
      * 删除盘点明细
      */
-    //@RequiresPermissions("inventory:cyclecountDetail:remove")
+    @RequiresPermissions("inventory:cyclecountDetail:remove")
     @Log(title = "库存-盘点", operating = "删除盘点明细", action = BusinessType.DELETE)
     @PostMapping( "/remove")
     @ResponseBody
@@ -194,7 +195,7 @@ public class CycleCountDetailController extends BaseController {
     }
 
     /**生成全部盘点任务*/
-    //@RequiresPermissions("inventory:cyclecountDetail:createTask")
+    @RequiresPermissions("inventory:cyclecountDetail:createTask")
     @PostMapping("/createCycleCountTaskByHeadId")
     @ResponseBody
     public AjaxResult createCycleCountTaskByHeadId(String cycleCountHeadCode){
@@ -205,7 +206,7 @@ public class CycleCountDetailController extends BaseController {
     }
 
     /**生成单条盘点任务*/
-    //@RequiresPermissions("inventory:cyclecountDetail:createTask")
+    @RequiresPermissions("inventory:cyclecountDetail:createTask")
     @PostMapping("/createCycleCoutTaskByDetailId")
     @ResponseBody
     public AjaxResult createCycleCoutTaskByDetailId(Integer cycleCoutdetailId){
@@ -221,7 +222,7 @@ public class CycleCountDetailController extends BaseController {
      * @param qty
      * @return
      */
-    //@RequiresPermissions("inventory:cyclecountDetail:confirm")
+    @RequiresPermissions("inventory:cyclecountDetail:confirm")
     @PostMapping("/confirmGapQty")
     @ResponseBody
     public AjaxResult confirmGapQty(Integer detailId, BigDecimal qty){
@@ -233,7 +234,7 @@ public class CycleCountDetailController extends BaseController {
      * @param cycleCountHeadCode
      * @return
      */
-    //@RequiresPermissions("inventory:cyclecountDetail:cyclecountRepeat")
+    @RequiresPermissions("inventory:cyclecountDetail:cyclecountRepeat")
     @PostMapping("/createCyclecountWithGapQty")
     @ResponseBody
     public AjaxResult createCyclecountWithGapQty(String cycleCountHeadCode){
diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java b/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java
index 31e041d..31e746f 100644
--- a/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java
+++ b/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java
@@ -44,15 +44,12 @@ public class CycleCountHeaderController extends BaseController {
     private CycleCountHeaderService cycleCountHeaderService;
     @Resource
     private CycleCountDetailService cycleCountDetailService;
-    @Resource
-    private AdjustHeaderService adjustHeaderService;
-
 
 
     private String prefix = "inventory/cycleCountHeader";
 
 
-    //@RequiresPermissions("inventory:cycleCount:view")
+    @RequiresPermissions("inventory:cycleCountHeader:view")
     @GetMapping()
     public String cyclecountHeader()
     {
@@ -62,7 +59,7 @@ public class CycleCountHeaderController extends BaseController {
     /**
      * 查询盘点单主列表
      */
-    //@RequiresPermissions("inventory:cycleCount:list")
+    @RequiresPermissions("inventory:cycleCountHeader:list")
     @PostMapping("/list")
     @Log(title = "库存-盘点",operating = "查看盘点主单", action = BusinessType.GRANT)
     @ResponseBody
@@ -95,6 +92,9 @@ public class CycleCountHeaderController extends BaseController {
         }
 
     }
+
+
+
     /**
      * 新增盘点单主
      */
@@ -107,7 +107,7 @@ public class CycleCountHeaderController extends BaseController {
     /**
      * 新增保存盘点单主
      */
-    //@RequiresPermissions("inventory:cycleCount:add")
+    @RequiresPermissions("inventory:cycleCountHeader:add")
     @Log(title = "库存-盘点",operating = "新增盘点主单", action = BusinessType.INSERT)
     @PostMapping("/add")
     @ResponseBody
@@ -137,7 +137,7 @@ public class CycleCountHeaderController extends BaseController {
     /**
      * 修改保存盘点单主
      */
-    //@RequiresPermissions("inventory:cycleCount:edit")
+    @RequiresPermissions("inventory:cycleCountHeader:edit")
     @Log(title = "库存-盘点",operating = "修改盘点主单", action = BusinessType.UPDATE)
     @PostMapping("/edit")
     @ResponseBody
@@ -151,7 +151,7 @@ public class CycleCountHeaderController extends BaseController {
     /**
      * 删除盘点单主
      */
-    //@RequiresPermissions("inventory:cycleCount:remove")
+    @RequiresPermissions("inventory:cycleCountHeader:remove")
     @Log(title = "库存-盘点",operating = "删除盘点主单", action = BusinessType.DELETE)
     @PostMapping( "/remove")
     @ResponseBody
@@ -173,7 +173,7 @@ public class CycleCountHeaderController extends BaseController {
      *
      * 生成调整单
      * */
-    //@RequiresPermissions("inventory:cyclecountHead:addAdjust")
+    @RequiresPermissions("inventory:cyclecountHead:addAdjust")
     @Log(title = "库存-盘点", operating = "新增盘点差异调整单", action = BusinessType.INSERT)
     @PostMapping("/goAdjust")
     @ResponseBody
@@ -187,7 +187,7 @@ public class CycleCountHeaderController extends BaseController {
      *  盘点单报表打印
      * @return
      */
-    //@RequiresPermissions("inventory:cycleCount:report")
+    @RequiresPermissions("inventory:cycleCountHeader:report")
     @GetMapping("/report/{id}")
     public String report(@PathVariable("id") Integer id, ModelMap mmap)
     {
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/controller/InventoryDetailController.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/controller/InventoryDetailController.java
index 44213d6..7228398 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/controller/InventoryDetailController.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/controller/InventoryDetailController.java
@@ -18,6 +18,7 @@ import com.huaheng.pc.config.material.service.MaterialServiceImpl;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
 import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -160,9 +161,8 @@ public class InventoryDetailController extends BaseController
         return AjaxResult.success("库存明细出库查看任务下发成功!");
     }
 
-
     /**在库质检*/
-    //@RequiresPermissions("inventory:inventoryHeader:detailCheckTask")
+    @RequiresPermissions("inventory:inventoryDetail:detailCheckTask")
     @PostMapping("/detailCheckTask")
     @ResponseBody
     public AjaxResult detailCheckTask(String ids) throws InvocationTargetException, IllegalAccessException {
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
index 571ceb1..d05234a 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
@@ -95,7 +95,7 @@ public class InventoryHeaderController extends BaseController
 	}
 
 	/**移库*/
-	//@RequiresPermissions("inventory:inventoryHeader:transfer")
+	@RequiresPermissions("inventory:inventoryHeader:transfer")
 	@PostMapping("/transfer")
 	@ResponseBody
 	public AjaxResult transfer(String sourceLocation, String destinationLocation){
@@ -106,7 +106,7 @@ public class InventoryHeaderController extends BaseController
 	}
 
     /**出库查看*/
-	//@RequiresPermissions("inventory:inventoryHeader:seeOut")
+	@RequiresPermissions("inventory:inventoryHeader:seeOut")
 	@PostMapping("/createCheckOutTask")
 	@ResponseBody
 	public AjaxResult createCheckOutTask(String[] ids){
@@ -130,7 +130,7 @@ public class InventoryHeaderController extends BaseController
      * @param destinationLocation
      * @return
      */
-    //@RequiresPermissions("task:task:emptyIn")
+    @RequiresPermissions("inventory:inventoryHeader:emptyIn")
     @PostMapping("/emptyIn")
     @Log(title = "任务-任务管理", operating = "生成空托盘入库任务", action = BusinessType.INSERT)
     @ResponseBody
@@ -155,7 +155,7 @@ public class InventoryHeaderController extends BaseController
      * @param sourceLocation
      * @return
      */
-   //@RequiresPermissions("task:task:emptyOut")
+    @RequiresPermissions("inventory:inventoryHeader:emptyOut")
     @PostMapping("/emptyOut")
     @Log(title = "任务-任务管理", operating = "生成空托盘出库任务", action = BusinessType.INSERT)
     @ResponseBody
@@ -180,7 +180,7 @@ public class InventoryHeaderController extends BaseController
      * @param location
      * @return
      */
-    //@RequiresPermissions("task:task:emptyInOut")
+    @RequiresPermissions("inventory:inventoryHeader:emptyCheckOut")
     @PostMapping("/emptyCheckOut")
     @Log(title = "任务-任务管理", operating = "生成空托盘出库查看任务", action = BusinessType.INSERT)
     @ResponseBody
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
index 08cb6dd..02cf7c2 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
@@ -18,6 +18,7 @@ import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
 import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction;
 import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
 import io.swagger.models.auth.In;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
@@ -43,7 +44,7 @@ public class InventoryTransactionController extends BaseController{
 
     private String prefix = "inventory/inventoryTransaction";
 
-    //@RequiresPermissions("inventory:inventoryTransaction:view")
+    @RequiresPermissions("inventory:inventoryTransaction:view")
     @GetMapping()
     public String inventoryTransaction()
     {
@@ -53,7 +54,7 @@ public class InventoryTransactionController extends BaseController{
     /**
      * 查询库存交易列表
      */
-    //@RequiresPermissions("inventory:inventoryTransaction:inventoryTransactionList")
+    @RequiresPermissions("inventory:inventoryTransaction:inventoryTransactionList")
     @Log(title = "库存-库存交易",operating = "查看库存交易列表", action = BusinessType.GRANT)
     @PostMapping("/inventoryTransactionList")
     @ResponseBody
@@ -95,15 +96,16 @@ public class InventoryTransactionController extends BaseController{
         }
     }
 
-    //@RequiresPermissions("receipt:bill:report")
+    @RequiresPermissions("inventory:inventoryTransaction:view:report")
     @Log(title = "库存-库存交易明细", operating = "库存交易明细报表打印", action = BusinessType.OTHER)
     @GetMapping("/report/{ids}")
     public String report(@PathVariable("ids") Integer[] ids, ModelMap mmap)
     {
-        List<InventoryTransaction> list=new ArrayList<InventoryTransaction>();
+        List<InventoryTransaction> list = new ArrayList<>();
         for(Integer id:ids){
-            if(id!=null) {
-                //list.add(inventoryTransaction);
+            if(id != null) {
+                InventoryTransaction inventoryTransaction = inventoryTransactionService.getById(id);
+                list.add(inventoryTransaction);
             }
             mmap.put("inventoryTransaction", list);
         }
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
index 50c2f5c..6f4abc2 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
@@ -68,7 +68,6 @@ public class ShipmentContainerHeaderController extends BaseController
 				.ge(StringUtils.isNotEmpty(createdBegin),ShipmentContainerHeader::getCreated, createdBegin)
 				.le(StringUtils.isNotEmpty(createdEnd), ShipmentContainerHeader::getCreated, createdEnd)
 				.in(ShipmentContainerHeader::getCompanyCode,ShiroUtils.getCompanyCodeList())
-				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getShipmentCode()), ShipmentContainerHeader::getShipmentCode, shipmentContainerHeader.getShipmentCode())
 				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getContainerCode()), ShipmentContainerHeader::getContainerCode, shipmentContainerHeader.getContainerCode())
 				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getLocationCode()), ShipmentContainerHeader::getLocationCode, shipmentContainerHeader.getLocationCode())
 				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getCreatedBy()), ShipmentContainerHeader::getCreatedBy, shipmentContainerHeader.getCreatedBy())
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 9507dfc..cfac054 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
@@ -99,12 +99,6 @@ public class ShipmentContainerHeader implements Serializable {
     private BigDecimal height;
 
 
-    /**
-     * 出库单内部号
-     */
-    @TableField(value = "shipmentId")
-    @ApiModelProperty(value="出库单内部号")
-    private Integer shipmentId;
 
     /**
      * 货主编码
@@ -141,12 +135,6 @@ public class ShipmentContainerHeader implements Serializable {
     @ApiModelProperty(value="序号")
     private Integer groupIndex;
 
-    /**
-     * 波次号
-     */
-    @TableField(value = "waveId")
-    @ApiModelProperty(value="波次号")
-    private Integer waveId;
 
 
     /**
@@ -156,12 +144,7 @@ public class ShipmentContainerHeader implements Serializable {
     @ApiModelProperty(value="任务已创建?")
     private Integer taskCreated;
 
-    /**
-     * 出库单号
-     */
-    @TableField(value = "shipmentCode")
-    @ApiModelProperty(value="出库单号")
-    private String shipmentCode;
+
 
     /**
      * 周转箱号
@@ -316,8 +299,6 @@ public class ShipmentContainerHeader implements Serializable {
 
     public static final String COL_HEIGHT = "height";
 
-    public static final String COL_SHIPMENTID = "shipmentId";
-
     public static final String COL_COMPANYCODE = "companyCode";
 
     public static final String COL_TOTALQTY = "totalQty";
@@ -328,12 +309,8 @@ public class ShipmentContainerHeader implements Serializable {
 
     public static final String COL_GROUPINDEX = "groupIndex";
 
-    public static final String COL_WAVEID = "waveId";
-
     public static final String COL_TASKCREATED = "taskCreated";
 
-    public static final String COL_SHIPMENTCODE = "shipmentCode";
-
     public static final String COL_TRANSCONTAINERCODE = "transContainerCode";
 
     public static final String COL_OQCBENCH = "oqcBench";
@@ -568,24 +545,6 @@ public class ShipmentContainerHeader implements Serializable {
 
 
     /**
-     * 获取出库单内部号
-     *
-     * @return shipmentId - 出库单内部号
-     */
-    public Integer getShipmentId() {
-        return shipmentId;
-    }
-
-    /**
-     * 设置出库单内部号
-     *
-     * @param shipmentId 出库单内部号
-     */
-    public void setShipmentId(Integer shipmentId) {
-        this.shipmentId = shipmentId;
-    }
-
-    /**
      * 获取货主编码
      *
      * @return companyCode - 货主编码
@@ -665,23 +624,6 @@ public class ShipmentContainerHeader implements Serializable {
         this.groupIndex = groupIndex;
     }
 
-    /**
-     * 获取波次号
-     *
-     * @return waveId - 波次号
-     */
-    public Integer getWaveId() {
-        return waveId;
-    }
-
-    /**
-     * 设置波次号
-     *
-     * @param waveId 波次号
-     */
-    public void setWaveId(Integer waveId) {
-        this.waveId = waveId;
-    }
 
     /**
      * 获取任务已创建?
@@ -701,24 +643,6 @@ public class ShipmentContainerHeader implements Serializable {
         this.taskCreated = taskCreated;
     }
 
-    /**
-     * 获取出库单号
-     *
-     * @return shipmentCode - 出库单号
-     */
-    public String getShipmentCode() {
-        return shipmentCode;
-    }
-
-    /**
-     * 设置出库单号
-     *
-     * @param shipmentCode 出库单号
-     */
-    public void setShipmentCode(String shipmentCode) {
-        this.shipmentCode = shipmentCode;
-    }
-
     public String getTransContainerCode() {
         return transContainerCode;
     }
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 732a40e..e414571 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
@@ -6,6 +6,8 @@ import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.framework.web.domain.RetCode;
+import com.huaheng.pc.config.container.domain.Container;
+import com.huaheng.pc.config.container.service.ContainerService;
 import com.huaheng.pc.config.location.domain.Location;
 import com.huaheng.pc.config.location.service.LocationService;
 import com.huaheng.pc.config.material.domain.Material;
@@ -40,7 +42,6 @@ import java.util.Map;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
 import com.huaheng.pc.shipment.shipmentContainerHeader.mapper.ShipmentContainerHeaderMapper;
-import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
@@ -70,6 +71,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     private WaveService waveService;
     @Autowired
     private ShipmentPreferenceService shipmentPreferenceService;
+    @Autowired
+    private ContainerService containerService;
 
 
     @Override
@@ -80,6 +83,14 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
 
 
     /**
+     * 1.检查基本属性
+     * 2.更改库存明细
+     * 3.更新单据明细的已出库数量
+     * 4.自动判定出库任务状态,根据库存数量减去预定库存相等就是整盘出--预计任务状态
+     * 5.增加出库组盘头
+     * 6.增加出库组盘明细
+     * 7.更新单据状态
+     *
      * 出库组盘单条保存
      * @param shipmentCombinationModel
      * @return
@@ -88,6 +99,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     @Override
     public ShipmentContainerHeader combination(ShipmentCombinationModel shipmentCombinationModel) {
 
+        //1.检查基本属性
         //校验
         if(shipmentCombinationModel.getShipQty().compareTo(new BigDecimal("0")) <= 0){
             throw new ServiceException("出库数量必须大于0");
@@ -116,8 +128,9 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
         lambdaQueryWrapper.eq(Location::getWarehouseCode,inventoryDetail.getWarehouseCode())
                 .eq(Location::getCode,inventoryDetail.getLocationCode());
         Location location = locationService.getOne(lambdaQueryWrapper);
-        if (location == null)
-            throw new ServiceException("库位 "+ inventoryDetail.getLocationCode() +" 不存在");
+        if (location == null) {
+            throw new ServiceException("库位 " + inventoryDetail.getLocationCode() + " 不存在");
+        }
 //        if (location.getStatus().equals("lock"))    {
 //            //如果库位状态是锁定的话,就查找出库组盘表,如果存在未下发
 //            LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();
@@ -130,7 +143,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
 //            }
 //        }
 
-        //更新库存分配数
+        //2.更新库存分配数
         inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().add(shipmentCombinationModel.getShipQty()));
         inventoryDetailService.saveOrUpdate(inventoryDetail);
         //获取库位,然后锁定
@@ -138,7 +151,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             location.setStatus("lock");
             locationService.saveOrUpdate(location);
         }
-        //更新单据明细的已出库数量
+        //3.更新单据明细的已出库数量
         shipmentDetail.setRequestQty(shipmentDetail.getRequestQty().add(shipmentCombinationModel.getShipQty()));
         int i = shipmentDetail.getShipQty().compareTo(shipmentDetail.getRequestQty());
         if(i > 0){
@@ -158,27 +171,32 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             shipmentCombinationModel.setTaskType(400);
         }
 
-        //增加出库组盘头
-        ShipmentContainerHeader shipmentContainerHeader = ShipmentContainerHeaderAdd(location, shipmentDetail, shipmentCombinationModel);
-        //增加出库组盘明细
+        //5.增加出库组盘头
+        ShipmentContainerHeader shipmentContainerHeader = ShipmentContainerHeaderAdd(location, shipmentDetail);
+        //6.增加出库组盘明细
         ShipmentContainerDetail shipmentContainerDetail = ShipmentContainerDetailAdd(shipmentDetail, shipmentContainerHeader, shipmentCombinationModel);
-        //更新单据状态
+        //7.更新单据状态
         shipmentHeaderService.updateShipmentStatus(shipmentDetail.getShipmentId());
 
         return  shipmentContainerHeader;
     }
 
     /**
-     * 在组盘表中查找任务状态小于20的容器,如果状态为0就合并出库明细,状态大于0就提示不能组盘。如果找不到就新增一条组盘表头
+     * 组盘头
+     * 1.查看是否有状态小于等于20的组盘头,有就需新建组盘头,没有就新建
+     * 2.没有符合条件的组盘头,新建组盘头
+     *
      * @param location
-     * @param shipmentCombination
+     * @param shipmentDetail
      * @return
      */
     private ShipmentContainerHeader ShipmentContainerHeaderAdd(Location location,
-                                                               ShipmentDetail shipmentDetail,
-                                                               ShipmentCombinationModel shipmentCombination) {
+                                                               ShipmentDetail shipmentDetail) {
+
+        //1.查看是否有状态小于等于20的组盘头,有就需新建组盘头,没有就新建
         LambdaQueryWrapper<ShipmentContainerHeader> lambdaQueryWrapper=Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
+        lambdaQueryWrapper.eq(ShipmentContainerHeader::getLocationCode,location.getCode())
+                .eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
                 .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
                 .le(ShipmentContainerHeader::getStatus,20);
         ShipmentContainerHeader shipmentContainerHeader = this.getOne(lambdaQueryWrapper);
@@ -186,34 +204,39 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             return shipmentContainerHeader;
         }
         else {
-//            LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();
-//            lam.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
-//                    .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
-//                    .eq(ShipmentContainerHeader::getTaskCreated,0)
-//                    .eq(ShipmentContainerHeader::getStatus,0);
-//            shipmentContainerHeader = this.getOne(lam);
-//            if (shipmentContainerHeader == null) {
+            // 2.没有符合条件的组盘头,新建组盘头
+            //找到容器类型
+            LambdaQueryWrapper<Container> containerLam=Wrappers.lambdaQuery();
+            containerLam.eq(Container::getCode,location.getContainerCode())
+                    .eq(Container::getWarehouseCode,ShiroUtils.getWarehouseCode());
+            Container container = containerService.getOne(containerLam);
+            if(container == null){
+                throw new ServiceException("系统没有此容器编码");
+            }
                 shipmentContainerHeader = new ShipmentContainerHeader();
                 shipmentContainerHeader.setContainerCode(location.getContainerCode());
                 shipmentContainerHeader.setLocationCode(location.getCode());
                 shipmentContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
-                //赋值u8仓库
                 shipmentContainerHeader.setCompanyCode(shipmentDetail.getCompanyCode());
+                shipmentContainerHeader.setContainerType(container.getContainerType());
                 shipmentContainerHeader.setStatus(0);
                 shipmentContainerHeader.setTaskCreated(0);
                 shipmentContainerHeader.setCreatedBy(ShiroUtils.getLoginName());
-                shipmentContainerHeader.setCreated(null);
-//            Material material=new Material();
-//            material.setCode(shipmentDetail.getMaterialCode());
-//            shipmentContainerHeader.setZoneCode(materialService.selectFirstEntity(material).getZoneCode());
-                this.save(shipmentContainerHeader);
+                Boolean flag = this.save(shipmentContainerHeader);
+                if(flag == false){
+                    throw new ServiceException("新建组盘头失败,sql错误");
+                }
             return shipmentContainerHeader;
             }
-//        }
     }
 
     /**
-     * 查询 容器编码、库存Id、出库明细Id 一致的组盘明细,如果存在则增加组盘数量,如果不存在就新增一条组盘明细
+     * 组盘明细
+     * 1.查看是否有同一出库明细的物料需要出库
+     * 2.有时修改阻盘明细的出库数量就行
+     * 3.没有就新建明细
+     * 4。查看组盘头状态,如果状态在10到20,则生成任务明细或修改任务明细的数量
+     *
      * @param shipmentDetail
      * @param shipmentContainerHeader
      * @param shipmentCombinationModel
@@ -222,46 +245,66 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     private ShipmentContainerDetail ShipmentContainerDetailAdd(ShipmentDetail shipmentDetail,
                                                                ShipmentContainerHeader shipmentContainerHeader,
                                                                ShipmentCombinationModel shipmentCombinationModel) {
+
+        Boolean flag =true;
+        //1.查看是否有同一出库明细的物料需要出库
         LambdaQueryWrapper<ShipmentContainerDetail> lambdaQueryWrapper=Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(ShipmentContainerDetail::getShippingContainerId,shipmentContainerHeader.getId())
+                .eq(ShipmentContainerDetail::getLocationCode,shipmentContainerHeader.getLocationCode())
+                .eq(ShipmentContainerDetail::getContainerCode,shipmentContainerHeader.getContainerCode())
                 .eq(ShipmentContainerDetail::getShipmentDetailId,shipmentCombinationModel.getShipmentDetailId())
                 .eq(ShipmentContainerDetail::getWarehouseCode,ShiroUtils.getWarehouseCode());
         ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getOne(lambdaQueryWrapper);
+        ShipmentContainerDetail shipmentContainerDetaill = new ShipmentContainerDetail();
+
+        //2.有时修改阻盘明细的出库数量就行
         if(shipmentContainerDetail != null)    {
             shipmentContainerDetail.setQty(shipmentContainerDetail.getQty().add(shipmentCombinationModel.getShipQty()));
-            shipmentContainerDetailService.saveOrUpdate(shipmentContainerDetail);
+            flag=shipmentContainerDetailService.saveOrUpdate(shipmentContainerDetail);
+            if(flag == false){
+                throw new ServiceException("修改组盘明细失败,sql错误");
+            }
         }
-        else    {
-            //构建明细
+        else  {
 
+            //3.没有就新建明细
             LambdaQueryWrapper<Material> lam=Wrappers.lambdaQuery();
             lam.eq(Material::getCode,shipmentDetail.getMaterialCode())
                     .eq(Material::getWarehouseCode,ShiroUtils.getWarehouseCode());
             Material material = materialService.getOne(lam);
-            if (material == null)
-                throw new ServiceException("出库单(" + shipmentDetail.getShipmentCode() + ")的物料("+ shipmentDetail.getMaterialCode() +")不存在!");
-            shipmentContainerDetail = new ShipmentContainerDetail();
-            shipmentContainerDetail.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
-            shipmentContainerDetail.setCompanyCode(shipmentContainerHeader.getCompanyCode());
-            shipmentContainerDetail.setContainerCode(shipmentContainerHeader.getContainerCode());
-            shipmentContainerDetail.setLocationCode(shipmentContainerHeader.getLocationCode());
-            shipmentContainerDetail.setInventoryId(shipmentCombinationModel.getInventoryDetailId());
-            shipmentContainerDetail.setInventorySts(shipmentDetail.getInventorySts());
-            shipmentContainerDetail.setShippingContainerId(shipmentContainerHeader.getId());
-            shipmentContainerDetail.setShipmentCode(shipmentDetail.getShipmentCode());
-            shipmentContainerDetail.setShipmentId(shipmentDetail.getShipmentId());
-            shipmentContainerDetail.setShipmentDetailId(shipmentCombinationModel.getShipmentDetailId());
-            shipmentContainerDetail.setMaterialCode(material.getCode());
-            shipmentContainerDetail.setMaterialName(material.getName());
-            shipmentContainerDetail.setMaterialSpec(material.getSpec());
-            shipmentContainerDetail.setQty(shipmentCombinationModel.getShipQty());
-            shipmentContainerDetail.setCreated(null);
-            shipmentContainerDetail.setWaveId(shipmentDetail.getWaveId());
-            shipmentContainerDetail.setCreatedBy(ShiroUtils.getLoginName());
-            shipmentContainerDetailService.save(shipmentContainerDetail);
+            if (material == null) {
+                throw new ServiceException("出库单(" + shipmentDetail.getShipmentCode() + ")的物料(" + shipmentDetail.getMaterialCode() + ")不存在!");
+            }
+            shipmentContainerDetaill.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
+            shipmentContainerDetaill.setCompanyCode(shipmentContainerHeader.getCompanyCode());
+            shipmentContainerDetaill.setContainerCode(shipmentContainerHeader.getContainerCode());
+            shipmentContainerDetaill.setLocationCode(shipmentContainerHeader.getLocationCode());
+            shipmentContainerDetaill.setInventoryId(shipmentCombinationModel.getInventoryDetailId());
+            shipmentContainerDetaill.setInventorySts(shipmentDetail.getInventorySts());
+            shipmentContainerDetaill.setShippingContainerId(shipmentContainerHeader.getId());
+            shipmentContainerDetaill.setShipmentCode(shipmentDetail.getShipmentCode());
+            shipmentContainerDetaill.setShipmentId(shipmentDetail.getShipmentId());
+            shipmentContainerDetaill.setShipmentDetailId(shipmentDetail.getId());
+            shipmentContainerDetaill.setMaterialCode(shipmentDetail.getMaterialCode());
+            shipmentContainerDetaill.setMaterialName(shipmentDetail.getMaterialName());
+            shipmentContainerDetaill.setMaterialSpec(shipmentDetail.getMaterialSpec());
+            shipmentContainerDetaill.setMaterialUnit(shipmentDetail.getMaterialUnit());
+            shipmentContainerDetaill.setQty(shipmentCombinationModel.getShipQty());
+            shipmentContainerDetaill.setWaveId(shipmentDetail.getWaveId());
+            shipmentContainerDetaill.setTaskCreated(0);
+            shipmentContainerDetaill.setStatus(0);
+            shipmentContainerDetaill.setBatch(shipmentDetail.getBatch());
+            shipmentContainerDetaill.setLot(shipmentDetail.getLot());
+            shipmentContainerDetaill.setProjectNo(shipmentDetail.getProjectNo());
+            shipmentContainerDetaill.setCreatedBy(ShiroUtils.getLoginName());
+            flag = shipmentContainerDetailService.save(shipmentContainerDetaill);
+            if(flag == false){
+                throw new ServiceException("新建组盘明细失败,sql错误");
+            }
         }
 
-        //
+        //4.查看组盘头状态,如果状态在10到20,则生成任务明细或修改任务明细的数量
+        //查看任务头
         if(shipmentContainerHeader.getStatus()>=10 && shipmentContainerHeader.getStatus()<30){
             LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper=Wrappers.lambdaQuery();
             taskHeaderLambdaQueryWrapper.eq(TaskHeader::getWarehouseCode,shipmentContainerHeader.getWarehouseCode())
@@ -271,33 +314,60 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             if(taskHeader==null){
                 throw new ServiceException("有相同的组盘头,但找不到相应的任务头");
             }
-            TaskDetail taskDetail = new TaskDetail();
-            taskDetail.setTaskId(taskHeader.getId());
-            taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
-            taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
-            taskDetail.setCompanyCode(taskHeader.getCompanyCode());
-            taskDetail.setTaskType(taskHeader.getTaskType());
-            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(taskHeader.getContainerCode());
-            taskDetail.setFromLocation(taskHeader.getFromLocation());
-            taskDetail.setToLocation(taskHeader.getToLocation());
-            if(shipmentContainerHeader.getStatus()==10) {
-                taskDetail.setStatus(0);
+
+            if(shipmentContainerDetaill == null) {
+                //shipmentContainerDetaill为空时,说明组盘明细不是新建,so修改任务明细
+                //查找任务明细
+                LambdaQueryWrapper<TaskDetail> taskDetailLam = Wrappers.lambdaQuery();
+                taskDetailLam.eq(TaskDetail::getWarehouseCode,shipmentContainerDetail.getWarehouseCode())
+                        .eq(TaskDetail::getAllocationId,shipmentContainerDetail.getId())
+                        .eq(TaskDetail::getTaskId,taskHeader.getId())
+                        .eq(TaskDetail::getInternalTaskType,200);
+                TaskDetail taskDetail = taskDetailService.getOne(taskDetailLam);
+                if(taskDetail == null){
+                    throw new ServiceException("找不到对应的任务明细");
+                }
+                taskDetail.setQty(taskDetail.getQty().add(shipmentCombinationModel.getShipQty()));
+                flag=taskDetailService.saveOrUpdate(taskDetail);
+                if(flag == false){
+                    throw new ServiceException("修改任务明细失败,sql错误");
+                }
             }else {
-                taskDetail.setStatus(10);
+                //shipmentContainerDetaill不为空时,说明组盘明细是新建,so新建任务明细
+                TaskDetail taskDetail = new TaskDetail();
+                taskDetail.setTaskId(taskHeader.getId());
+                taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
+                taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
+                taskDetail.setCompanyCode(taskHeader.getCompanyCode());
+                taskDetail.setTaskType(taskHeader.getTaskType());
+                taskDetail.setAllocationId(shipmentContainerDetaill.getId());
+                taskDetail.setBillCode(shipmentContainerDetaill.getShipmentCode());
+                taskDetail.setBillDetailId(shipmentContainerDetaill.getShipmentDetailId());
+                taskDetail.setMaterialCode(shipmentContainerDetaill.getMaterialCode());
+                taskDetail.setMaterialName(shipmentContainerDetaill.getMaterialName());
+                taskDetail.setMaterialSpec(shipmentContainerDetaill.getMaterialSpec());
+                taskDetail.setMaterialUnit(shipmentContainerDetaill.getMaterialUnit());
+                taskDetail.setFromInventoryId(shipmentContainerDetaill.getInventoryId());
+                taskDetail.setQty(shipmentContainerDetaill.getQty());
+                taskDetail.setContainerCode(taskHeader.getContainerCode());
+                taskDetail.setFromLocation(taskHeader.getFromLocation());
+                taskDetail.setToLocation(taskHeader.getToLocation());
+                taskDetail.setLot(shipmentContainerDetaill.getLot());
+                taskDetail.setWaveId(shipmentContainerDetaill.getWaveId());
+                taskDetail.setBatch(shipmentContainerDetaill.getBatch());
+                taskDetail.setProjectNo(shipmentContainerDetail.getProjectNo());
+                if (shipmentContainerHeader.getStatus() == 10) {
+                    taskDetail.setStatus(0);
+                } else {
+                    taskDetail.setStatus(10);
+                }
+                taskDetail.setCreatedBy(ShiroUtils.getLoginName());
+                taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+                flag = taskDetailService.save(taskDetail);
+                if(flag == false){
+                    throw new ServiceException("新建任务明细失败,sql错误");
+                }
             }
-            taskDetail.setTaskType(taskHeader.getTaskType());
-            taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-            taskDetail.setLastUpdated(null);
-            taskDetailService.save(taskDetail);
         }
         return shipmentContainerDetail;
     }
@@ -342,7 +412,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             if(shipmentDetail.getRequestQty().compareTo(BigDecimal.ZERO) != 0 ){
                 shipmentDetail.setStatus(200);//明细状态恢复,如果删除后还有以出数量就是波次
             }else{
-                shipmentDetail.setStatus(0 );//明细状态
+                shipmentDetail.setStatus(100 );//明细状态
             }
             shipmentDetailService.saveOrUpdate(shipmentDetail);
             //删除这个配盘明细
@@ -402,7 +472,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
         if(shipmentHeader == null){
             throw new ServiceException("系统没有此单据");
         }
-        shipmentPreferenceService.checkShipmentProcess(shipmentHeader.getId().toString(),100);
+        shipmentPreferenceService.checkShipmentProcess(shipmentHeader.getId().toString(),100,shipmentCode);
 
         LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentCode)
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java
index 7096489..28959b5 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java
@@ -13,10 +13,12 @@ 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.shipmentPreference.service.ShipmentPreferenceService;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
 import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
 import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
+import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -41,6 +43,8 @@ public class ShipmentDetailController extends BaseController
 	private ShipmentDetailService shipmentDetailService;
 	@Autowired
 	private InventoryDetailService inventoryDetailService;
+	@Autowired
+	private ShipmentPreferenceService shipmentPreferenceService;
 
 
 
@@ -162,4 +166,15 @@ public class ShipmentDetailController extends BaseController
 
 
 
+	@RequiresPermissions("shipment:bill:view")
+	@PostMapping( "/shippingCombination")
+	@ResponseBody
+	public AjaxResult ShippingCombination(String shipmentCode, ModelMap map){
+		map.put("code", shipmentCode);
+		Integer status = 100;
+		String ids="";
+		List<ShipmentHeader> shipmentHeaderList =shipmentPreferenceService.checkShipmentProcess(ids,status,shipmentCode);
+		return AjaxResult.success("成功");
+	}
+
 }
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java
index 4e6eac6..fbd3a31 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java
@@ -174,7 +174,7 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper,
     @Transactional
     public void saveWave(String ids, String code) {
         Integer status = 100;
-        List<ShipmentHeader> shipmentHeaderList =shipmentPreferenceService.checkShipmentProcess(ids,status);
+        List<ShipmentHeader> shipmentHeaderList =shipmentPreferenceService.checkShipmentProcess(ids,status,code);
 
         //找到波次主表,看系统是否有此波次
         LambdaQueryWrapper<WaveMaster> lam=Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java
index 1833cbf..4a8bd03 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java
@@ -106,25 +106,19 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
         Map<String,Integer> map = shipmentContainerHeaderService.getShipmentContainerMaxAndMinStatusByShipmentID(shipmentId);
         if(map==null){
             //说明没有货箱,则直接首位均为新建
-            shipmentHeader.setFirstStatus(0);
-            shipmentHeader.setLastStatus(0);
+            shipmentHeader.setFirstStatus(100);
+            shipmentHeader.setLastStatus(100);
             this.saveOrUpdate(shipmentHeader);
         }else {
             int firstStatus = map.get("maxStatus");
             int lastStatus = map.get("minStatus");
-            if(firstStatus<20){
-                shipmentHeader.setFirstStatus(200);
-            }
-            if(firstStatus==20){
+            if(firstStatus<=20){
                 shipmentHeader.setFirstStatus(300);
             }
             if(firstStatus==30){
                 shipmentHeader.setFirstStatus(500);
             }
-            if(lastStatus<20){
-                shipmentHeader.setLastStatus(200);
-            }
-            if(lastStatus==20){
+            if(lastStatus <=20){
                 shipmentHeader.setLastStatus(300);
             }
             if(lastStatus==30){
@@ -133,7 +127,7 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
             //是否存在未配盘的数量,如果是,则尾状态为新建
             Integer UnCompleted = shipmentDetailService.countUnCompleted(shipmentId);
             if(UnCompleted != null && UnCompleted.intValue() > 0){
-                shipmentHeader.setLastStatus(0);
+                shipmentHeader.setLastStatus(100);
             }
             this.saveOrUpdate(shipmentHeader);
         }
diff --git a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
index 47bc577..276b8f6 100644
--- a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
@@ -53,6 +53,8 @@ public class ShippingCombinationController extends BaseController {
     ShipmentContainerDetailService shipmentContainerDetailService;
     @Autowired
     ShipmentHeaderService shipmentHeaderService;
+    @Autowired
+    ShipmentPreferenceService shipmentPreferenceService;
 
 
     /**
diff --git a/src/main/java/com/huaheng/pc/system/user/controller/IndexController.java b/src/main/java/com/huaheng/pc/system/user/controller/IndexController.java
index 75ba1e2..c7010c9 100644
--- a/src/main/java/com/huaheng/pc/system/user/controller/IndexController.java
+++ b/src/main/java/com/huaheng/pc/system/user/controller/IndexController.java
@@ -73,7 +73,7 @@ public class IndexController extends BaseController
         pie.itemStyle().emphasis().setShadowBlur(10);
         pie.itemStyle().emphasis().setShadowOffsetX(0);
         pie.itemStyle().emphasis().setShadowColor("rgba(0, 0, 0, 0.4)");
-        String sql = "SELECT d.dictLabel '状态', i.qty '库存' FROM (SELECT status ,SUM(qty) qty FROM inventoryHeader WHERE warehouseCode = " + ShiroUtils.getWarehouseCode() + " GROUP BY status) i INNER JOIN sys_dict_data d ON i.status= d.dictValue AND d.warehouseCode = ' " + ShiroUtils.getWarehouseCode()+"' ;";
+        String sql = "SELECT d.dictLabel '状态', i.qty '库存' FROM (SELECT inventorySts ,SUM(qty) qty FROM inventory_detail WHERE warehouseCode = '" + ShiroUtils.getWarehouseCode()+"' GROUP BY inventorySts) i INNER JOIN sys_dict_data d ON i.inventorySts= d.dictValue AND d.warehouseCode = '" + ShiroUtils.getWarehouseCode()+"' ;";
         List<LinkedHashMap<String, Object>> results = mapper.selectCommon(sql);
         for(LinkedHashMap<String, Object> item : results){
             ChartData chartData = new ChartData();
@@ -147,7 +147,7 @@ public class IndexController extends BaseController
                 "    union all\n" +
                 "    SELECT date_sub(curdate(), interval 6 day) as click_date\n" +
                 ") a left join (\n" +
-                "SELECT DATE(h.created) AS created , SUM(d.qty) AS taskQty from shipment_container_detail d join shipment_container_header h on d.shippingContainerId = h.id and h.warehouseCode='"+ShiroUtils.getWarehouseCode()+"' WHERE h.created >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND h.enable>19 GROUP BY DATE(h.created)\n" +
+                "SELECT DATE(h.created) AS created , SUM(d.qty) AS taskQty from shipment_container_detail d join shipment_container_header h on d.shippingContainerId = h.id and h.warehouseCode='"+ShiroUtils.getWarehouseCode()+"' WHERE h.created >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND h.status=30 GROUP BY DATE(h.created)\n" +
                 ") b on a.click_date = b.created ORDER BY a.click_date;";
         List<LinkedHashMap<String, Object>> list = mapper.selectCommon(sql);
 
@@ -167,7 +167,7 @@ public class IndexController extends BaseController
                 "    union all\n" +
                 "    SELECT date_sub(curdate(), interval 6 day) as click_date\n" +
                 ") a left join (\n" +
-                "SELECT DATE(h.created) AS created , SUM(d.qty) AS taskQty from receipt_container_detail d join receipt_container_header h on d.headerId = h.id and h.warehouseCode="+ShiroUtils.getWarehouseCode()+" WHERE h.created >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND h.processStamp=20 GROUP BY DATE(h.created)\n" +
+                "SELECT DATE(h.created) AS created , SUM(d.qty) AS taskQty from receipt_container_detail d join receipt_container_header h on d.receiptContainerId = h.id and h.warehouseCode='"+ShiroUtils.getWarehouseCode()+"' WHERE h.created >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND h.processStamp=20 GROUP BY DATE(h.created)\n" +
                 ") b on a.click_date = b.created ORDER BY a.click_date;";
         List<LinkedHashMap<String, Object>> list2 = mapper.selectCommon(sql);
 
@@ -211,7 +211,7 @@ public class IndexController extends BaseController
     @GetMapping("index/getInventoryProp")
     @ResponseBody
     public String getInventoryProp(){
-        String sql = "SELECT m.`name`,sum(i.qty) as total from inventoryHeader i join material m on i.materialCode = m.`code` and i.warehouseId = m.warehouseId AND i.warehouseCode = "+ShiroUtils.getWarehouseCode()+" \n" +
+        String sql = "SELECT m.`name`,sum(i.qty) as total from inventory_detail i join material m on i.materialCode = m.`code` and i.warehouseCode = m.warehouseCode AND i.warehouseCode = '"+ShiroUtils.getWarehouseCode()+"' \n" +
                 "GROUP BY m.`name` ORDER BY total desc;";
         List<LinkedHashMap<String, Object>> results = mapper.selectCommon(sql);
 
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 fb7843a..76e5524 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
@@ -203,6 +203,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional
     public AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel) {
+        Boolean flag = true;
         Integer shipmentContainerHeaderId = shipmentTaskCreateModel.getShipmentContainerHeaderIds();
         //获取表头
         ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeaderId);
@@ -235,13 +236,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         task.setFromLocation(shipmentContainerHeader.getLocationCode());
         task.setToLocation(shipmentContainerHeader.getLocationCode());
         //判断是否整出任务,钱柜和AGV不能整出
-        if (shipmentContainerHeader.getStatus().intValue() == 300) {
+
             //表示整出优先
             //判断当前子货箱所有数量是否等于该托盘对应的所有库存的数量,
             //这里必须与库存的在库数量对比,后期可能存在一个配盘在执行任务,后一个配盘又在配这个的情况(这个时候不能整出)
             // 如果相等,则说明这个货箱包含了所有的数量,则可以整出,否则,创建拣选任务;
             //查询所有库存
-            InventoryDetail inventoryCondition = new InventoryDetail();
             LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
             inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode, shipmentContainerHeader.getLocationCode())
                     .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
@@ -258,7 +258,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 task.setTaskType(300);//整盘出库
                 task.setToLocation("");
             }
-        }
+
         task.setInternalTaskType(200);
         task.setAllocationHeadId(shipmentContainerHeader.getId());
         task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
@@ -293,19 +293,32 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             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(0);
             taskDetail.setWaveId(shipmentContainerDetail.getWaveId());
             taskDetail.setInventorySts(shipmentContainerDetail.getInventorySts());
-            taskDetail.setTaskType(task.getTaskType());
+            taskDetail.setCreatedBy(ShiroUtils.getLoginName());
             taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-            taskDetail.setLastUpdated(null);
-            taskDetailService.save(taskDetail);
+            flag=taskDetailService.save(taskDetail);
+            if(flag == false){
+                throw new ServiceException("新建任务明细失败,sql报错");
+            }
+
+            shipmentContainerDetail.setStatus(10);
         }
         //更新货位状态
-        ShipmentContainerHeader record = new ShipmentContainerHeader();
-        record.setId(shipmentContainerHeaderId);
-        record.setStatus(10);
-        shipmentContainerHeaderService.saveOrUpdate(record);
+        shipmentContainerHeader.setStatus(10);
+        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());
 
     }
@@ -852,6 +865,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
         for (String id : ids) {
             InventoryHeader inventoryHeader = inventoryHeaderService.getById(Integer.parseInt(id));
+            //校验库位是否锁定
             //检查库位容器
             Location temp = new Location();
             temp.setCode(inventoryHeader.getLocationCode());
@@ -911,7 +925,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
             if (taskDetailService.saveBatch(taskDetails)) {
                 //锁定库位状态
-                locationService.updateStatus(loc.getContainerCode(), "lock");
+                locationService.updateStatus(inventoryHeader.getLocationCode(), "lock");
             } else {
                 throw new ServiceException("出库查看任务明细生成失败!");
             }
@@ -1227,11 +1241,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
                 inventoryTransaction.setTransactionType(20);
                 inventoryTransaction.setMaterialCode(shipmentDetail.getMaterialCode());
-                //inventory.setMaterialName(DataUtils.getString(taskDetail.getMaterialName()));//物料名称
+                inventoryTransaction.setMaterialName(shipmentDetail.getMaterialName());
+                inventoryTransaction.setMaterialSpec(shipmentDetail.getMaterialSpec());
+                inventoryTransaction.setMaterialUnit(shipmentDetail.getMaterialUnit());
                 inventoryTransaction.setBillCode(taskDetail.getBillCode());
                 inventoryTransaction.setBillDetailId(shipmentDetail.getId());
                 inventoryTransaction.setBatch(shipmentDetail.getBatch());
                 inventoryTransaction.setLot(shipmentDetail.getLot());
+                inventoryTransaction.setProjectNo(shipmentDetail.getProjectNo());
+                inventoryTransaction.setQcCheck(inventoryDetail.getQcCheck());
+                inventoryTransaction.setSupplierCode(inventoryDetail.getSupplierCode());
                 inventoryTransaction.setManufactureDate(shipmentDetail.getManufactureDate());
                 inventoryTransaction.setExpirationDate(shipmentDetail.getExpirationDate());
                 inventoryTransaction.setInventorySts(inventoryDetail.getInventorySts());
@@ -1255,14 +1274,18 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         containerService.removeByCode(task.getContainerCode());
 
         //将库位状态改为空闲,如果是整出的对应的容器也清空
-        Location locationRecord = new Location();
+
+        LambdaQueryWrapper<Location>  lam=Wrappers.lambdaQuery();
+        lam.eq(Location::getCode,task.getToLocation());
+        Location locationRecord = locationService.getOne(lam);
+        if(lam == null){
+            throw new ServiceException("系统没有"+task.getToLocation()+"库位");
+        }
         locationRecord.setStatus("empty");
         if(task.getTaskType()==300) {
             locationRecord.setContainerCode("");
         }
-        LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate();
-                locationLambdaUpdateWrapper.eq(Location::getCode,task.getToLocation());
-        locationService.update(locationLambdaUpdateWrapper);
+        locationService.updateById(locationRecord);
         //如果是整出,删掉这个库位上的这个托盘,否则更改托盘状态
         Container containerRecord = new Container();
         if(task.getTaskType()==300) {
@@ -1286,14 +1309,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
         }
         //设置出库货箱状态为拣货任务完成
-        ShipmentContainerDetail shipmentContainerDetail = new ShipmentContainerDetail();
-        shipmentContainerDetail.setStatus(30);
-        shipmentContainerDetail.setLastUpdated(new Date());
-        shipmentContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-        LambdaUpdateWrapper<ShipmentContainerDetail> shipmentContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
-        shipmentContainerDetailLambdaUpdateWrapper.eq(ShipmentContainerDetail::getId,task.getAllocationHeadId());
-        if (! shipmentContainerDetailService.update(shipmentContainerDetail, shipmentContainerDetailLambdaUpdateWrapper)){
-            throw new ServiceException("更新组盘明细状态失败");
+        for(TaskDetail taskDetail : taskDetails) {
+            ShipmentContainerDetail shipmentContainerDetail = new ShipmentContainerDetail();
+            shipmentContainerDetail.setStatus(30);
+            shipmentContainerDetail.setLastUpdated(new Date());
+            shipmentContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+            LambdaUpdateWrapper<ShipmentContainerDetail> shipmentContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+            shipmentContainerDetailLambdaUpdateWrapper.eq(ShipmentContainerDetail::getId, taskDetail.getAllocationId());
+            if (!shipmentContainerDetailService.update(shipmentContainerDetail, shipmentContainerDetailLambdaUpdateWrapper)) {
+                throw new ServiceException("更新组盘明细状态失败");
+            }
         }
     //设置出库货箱表头状态为拣货任务完成
         ShipmentContainerHeader shipmentContainerHeader = new ShipmentContainerHeader();
@@ -1315,8 +1340,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
                     ShipmentHeader shipmentHeader =new ShipmentHeader();
                     shipmentHeader.setId(shipmentDetailService.getOne(shipmentDetailLambdaQueryWrapper).getShipmentId());
-                    shipmentHeader.setFirstStatus(100);
-                    shipmentHeader.setLastStatus(100);
+                    shipmentHeader.setFirstStatus(300);
+                    shipmentHeader.setLastStatus(300);
                     shipmentHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
                     shipmentHeader.setLastUpdated(new Date());
                     shipmentHeaderService.updateById(shipmentHeader);
diff --git a/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml b/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml
index 8fdb262..aad2c80 100644
--- a/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml
+++ b/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml
@@ -14,28 +14,16 @@
     <result column="length" jdbcType="DECIMAL" property="length" />
     <result column="width" jdbcType="DECIMAL" property="width" />
     <result column="height" jdbcType="DECIMAL" property="height" />
-    <result column="totalValue" jdbcType="DECIMAL" property="totalValue" />
-    <result column="shipmentId" jdbcType="INTEGER" property="shipmentId" />
     <result column="companyCode" jdbcType="VARCHAR" property="companyCode" />
     <result column="totalQty" jdbcType="INTEGER" property="totalQty" />
     <result column="waybillCode" jdbcType="VARCHAR" property="waybillCode" />
     <result column="groupNum" jdbcType="INTEGER" property="groupNum" />
     <result column="groupIndex" jdbcType="INTEGER" property="groupIndex" />
-    <result column="waveId" jdbcType="INTEGER" property="waveId" />
-    <result column="countIndex" jdbcType="INTEGER" property="countIndex" />
-    <result column="countTotal" jdbcType="INTEGER" property="countTotal" />
     <result column="taskCreated" jdbcType="INTEGER" property="taskCreated" />
-    <result column="shipmentCode" jdbcType="VARCHAR" property="shipmentCode" />
-    <result column="transContCode" jdbcType="VARCHAR" property="transContCode" />
     <result column="oqcBench" jdbcType="VARCHAR" property="oqcBench" />
     <result column="oqcBy" jdbcType="VARCHAR" property="oqcBy" />
     <result column="oqcStartAt" jdbcType="TIMESTAMP" property="oqcStartAt" />
     <result column="oqcEndAt" jdbcType="TIMESTAMP" property="oqcEndAt" />
-    <result column="loadId" jdbcType="INTEGER" property="loadId" />
-    <result column="cageId" jdbcType="INTEGER" property="cageId" />
-    <result column="cageCode" jdbcType="VARCHAR" property="cageCode" />
-    <result column="stagedAt" jdbcType="TIMESTAMP" property="stagedAt" />
-    <result column="stagedBy" jdbcType="VARCHAR" property="stagedBy" />
     <result column="created" jdbcType="TIMESTAMP" property="created" />
     <result column="createdBy" jdbcType="VARCHAR" property="createdBy" />
     <result column="lastUpdated" jdbcType="TIMESTAMP" property="lastUpdated" />
@@ -44,15 +32,7 @@
     <result column="userDef1" jdbcType="VARCHAR" property="userDef1" />
     <result column="userDef2" jdbcType="VARCHAR" property="userDef2" />
     <result column="userDef3" jdbcType="VARCHAR" property="userDef3" />
-    <result column="userDef4" jdbcType="VARCHAR" property="userDef4" />
-    <result column="userDef5" jdbcType="VARCHAR" property="userDef5" />
-    <result column="userDef6" jdbcType="VARCHAR" property="userDef6" />
-    <result column="userDef7" jdbcType="VARCHAR" property="userDef7" />
-    <result column="userDef8" jdbcType="VARCHAR" property="userDef8" />
     <result column="carrierCode" jdbcType="VARCHAR" property="carrierCode" />
-    <result column="scaledBy" jdbcType="VARCHAR" property="scaledBy" />
-    <result column="scaledAt" jdbcType="TIMESTAMP" property="scaledAt" />
-    <result column="storeCode" jdbcType="VARCHAR" property="storeCode" />
     <result column="picUrls" jdbcType="VARCHAR" property="picUrls" />
     <result column="pidIds" jdbcType="VARCHAR" property="pidIds" />
     <result column="actualShipDateTime" jdbcType="TIMESTAMP" property="actualShipDateTime" />
@@ -61,12 +41,9 @@
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, containerCode, warehouseCode, containerType, `enable`, parent, totalWeight, totalVolume, 
-    `length`, width, height, totalValue, shipmentId, companyCode, totalQty, waybillCode, 
-    groupNum, groupIndex, waveId, countIndex, countTotal, taskCreated, shipmentCode, 
-    transContCode, oqcBench, oqcBy, oqcStartAt, oqcEndAt, loadId, cageId, cageCode, stagedAt, 
-    stagedBy, created, createdBy, lastUpdated, lastUpdatedBy, version, userDef1, userDef2, 
-    userDef3, userDef4, userDef5, userDef6, userDef7, userDef8, carrierCode, scaledBy, 
-    scaledAt, storeCode, picUrls, pidIds, actualShipDateTime, systemCreated
+    `length`, width, height, totalValue, companyCode, totalQty, waybillCode, groupNum, groupIndex, taskCreated,
+    transContCode, oqcBench, oqcBy, oqcStartAt, oqcEndAt, created, createdBy, lastUpdated, lastUpdatedBy, version,
+     userDef1, userDef2,userDef3,carrierCode,picUrls, pidIds, actualShipDateTime, systemCreated
   </sql>
 
   <select id="getShipmentContainerMaxAndMinStatusByShipmentID" resultType="java.util.Map">
diff --git a/src/main/resources/templates/check/checkHeader/checkHeader.html b/src/main/resources/templates/check/checkHeader/checkHeader.html
index f11b78a..350d130 100644
--- a/src/main/resources/templates/check/checkHeader/checkHeader.html
+++ b/src/main/resources/templates/check/checkHeader/checkHeader.html
@@ -103,10 +103,12 @@
                     </div>
 
                     <div class="btn-group hidden-xs" id="toolbarReg" role="group">
-                        <a class="btn btn-outline btn-success btn-rounded" onclick="complete()" shiro:hasPermission="check:checkingRegister:remove">
+                        <a class="btn btn-outline btn-success btn-rounded" onclick="complete()"
+                           shiro:hasPermission="check:checkingRegister:remove">
                             <i class="fa fa-check-circle-o"></i> 质检完成
                         </a>
-                        <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="check:checkingRegister:remove">
+                        <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()"
+                           shiro:hasPermission="check:checkingRegister:remove">
                             <i class="fa fa-trash-o"></i> 删除
                         </a>
                     </div>
diff --git a/src/main/resources/templates/inventory/adjustDetail/add.html b/src/main/resources/templates/inventory/adjustDetail/add.html
index d54f90d..d5d3095 100644
--- a/src/main/resources/templates/inventory/adjustDetail/add.html
+++ b/src/main/resources/templates/inventory/adjustDetail/add.html
@@ -27,7 +27,7 @@
                 <input id="inventoryDetailId" name="inventoryDetailId" class="form-control" type="text">
             </div>
         </div>
-        <div class="form-group">
+        <!--<div class="form-group">
             <label class="col-sm-3 control-label">盘点单号:</label>
             <div class="col-sm-8">
                 <input id="cycleCountCode" name="cycleCountCode" class="form-control" type="text">
@@ -38,8 +38,8 @@
             <div class="col-sm-8">
                 <input id="cycleDetailId" name="cycleDetailId" class="form-control" type="text">
             </div>
-        </div>
-        <div class="form-group">
+        </div>-->
+        <!--<div class="form-group">
             <label class="col-sm-3 control-label">质检单号:</label>
             <div class="col-sm-8">
                 <input id="checkCode" name="checkCode" class="form-control" type="text">
@@ -50,7 +50,7 @@
             <div class="col-sm-8">
                 <input id="checkDetailId" name="checkDetailId" class="form-control" type="text">
             </div>
-        </div>
+        </div>-->
         <div class="form-group">
             <label class="col-sm-3 control-label">调整单关联单号:</label>
             <div class="col-sm-8">
@@ -80,8 +80,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">商品编码:</label>
             <div class="col-sm-8">
-                <input id="materialCode" name="materialCode" class="form-control" type="text"
-                       onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')">
+                <input id="materialCode" name="materialCode" class="form-control" type="text">
             </div>
         </div>
         <div class="form-group">
@@ -90,7 +89,7 @@
                 <input id="materialName" name="materialName" class="form-control" type="text">
             </div>
         </div>
-        <div class="form-group">
+        <!--<div class="form-group">
             <label class="col-sm-3 control-label">商品规格:</label>
             <div class="col-sm-8">
                 <input id="materialSpec" name="materialSpec" class="form-control" type="text">
@@ -101,7 +100,7 @@
             <div class="col-sm-8">
                 <input id="materialUnit" name="materialUnit" class="form-control" type="text">
             </div>
-        </div>
+        </div>-->
         <div class="form-group">
             <label class="col-sm-3 control-label">调整类型:</label>
             <div class="col-sm-8">
@@ -232,12 +231,6 @@
             problemType: {
                 required: true,
             },
-            inventoryDetailId: {
-                required: true,
-            },
-            status: {
-                required: true,
-            },
             materialCode: {
                 required: true,
             },
diff --git a/src/main/resources/templates/inventory/adjustHeader/add.html b/src/main/resources/templates/inventory/adjustHeader/add.html
index 74ede88..eae72d7 100644
--- a/src/main/resources/templates/inventory/adjustHeader/add.html
+++ b/src/main/resources/templates/inventory/adjustHeader/add.html
@@ -5,110 +5,67 @@
 <body class="white-bg">
     <div class="wrapper wrapper-content animated fadeInRight ibox-content">
 
-        <form class="form-horizontal m" id="form-cyclecountAdjustDetail-addAdjust" >
-            <input type="hidden" id="cyclecountAdjustId" name="cyclecountAdjustId" th:value="${cyclecountAdjustId}">
+        <form class="form-horizontal m" id="form-adjustHeader-add" >
 
             <div class="form-group">
-                <label class="col-sm-3 control-label">调整单编号:</label>
+                <label class="col-sm-3 control-label">货主:</label>
                 <div class="col-sm-8">
-					<input id="code" name="code" th:value="${code}" class="form-control" type="text" readonly="readonly">
+                    <select id="companyCode" name="companyCode" class="form-control" th:with="list=${@companyService.getCode()}">
+                        <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['code']}" th:attr = " code = ${item['code']}"></option>
+                    </select>
                 </div>
             </div>
+            <!--<div class="form-group">
+                <label class="col-sm-3 control-label">调整类型:</label>
+                <div class="col-sm-8">
+                    <div class="col-sm-8">
+                        <select id="problemType" name="problemType" class="form-control" th:with="problemType=${@dict.getType('adjustType')}">
+                            <option th:each="dict : ${problemType}" th:text="${dict['dictLabel']}" th:value="${dict['dictValue']}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>-->
+
             <div class="form-group">
-                <label class="col-sm-3 control-label">货主编码:</label>
+                <label class="col-sm-3 control-label">调整类型:</label>
                 <div class="col-sm-8">
-                    <input id="companyId" name="companyId" type="hidden" th:value="*{companyId}">
-                    <input id="companyCode" name="companyCode" th:value="${companyCode}" class="form-control" type="text" readonly="readonly">
+                    <select id="problemType" name="problemType" class="form-control" th:with="problemType=${@dict.getType('adjustType')}">
+                        <option th:each="dict : ${problemType}" th:text="${dict['dictLabel']}" th:value="${dict['dictValue']}"></option>
+                    </select>
                 </div>
             </div>
             <div class="form-group">
-                <label class="col-sm-3 control-label">盘点单编号:</label>
+                <label class="col-sm-3 control-label">盘点单编码:</label>
                 <div class="col-sm-8">
-                    <input id="cyclecountHeadCode" name="cyclecountHeadCode" th:value="${cyclecountHeadCode}" class="form-control" type="text" readonly="readonly">
+                    <input id="cyclecountHeadCode" name="cyclecountHeadCode" class="form-control" type="text" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')">
                 </div>
             </div>
             <div class="form-group">
-                <label class="col-sm-3 control-label">物料编码:</label>
+                <label class="col-sm-3 control-label">质检单编码:</label>
                 <div class="col-sm-8">
-                    <input id="materialCode" name="materialCode"  class="form-control" type="text" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')">
+                    <input id="checkCode" name="checkCode" class="form-control" type="text" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')">
                 </div>
             </div>
             <div class="form-group">
-                <label class="col-sm-3 control-label">库位编码:</label>
+                <label class="col-sm-3 control-label">关联上游单编码:</label>
                 <div class="col-sm-8">
-                    <input id="locationCode" name="locationCode"  class="form-control" type="text" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')">
+                    <input id="referCode" name="referCode"  class="form-control" type="text" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')">
                 </div>
             </div>
 			<div class="form-group">	
-                <label class="col-sm-3 control-label">容器编号:</label>
+                <label class="col-sm-3 control-label">关联上游说明:</label>
                 <div class="col-sm-8">
-                    <input id="containerCode" name="containerCode"  class="form-control" type="text" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')">
+                    <input id="referReason" name="referReason"  class="form-control" type="text" >
                 </div>
             </div>
-            <div class="form-group">
+            <!--<div class="form-group">
                 <label class="col-sm-3 control-label">库存状态:</label>
                 <div class="col-sm-8">
                     <select id="inventoryStatus" name="inventoryStatus" class="form-control" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}">
                         <option th:each="dict : ${inventoryStatus}" th:text="${dict['dictLabel']}" th:value="${dict['dictValue']}"></option>
                     </select>
                 </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">系统数量:</label>
-                <div class="col-sm-8">
-                    <input id="systemQty" name="systemQty" value="0" class="form-control" type="text" onkeyup="this.value=this.value.replace(/[^\-?\d.]/g,'')" readonly="readonly">
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">实际数量:</label>
-                <div class="col-sm-8">
-                    <input id="countedQty" name="countedQty" class="form-control" type="text" onkeyup="this.value=this.value.replace(/[^\-?\d.]/g,'')" >
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">差异数量:</label>
-                <div class="col-sm-8">
-                    <input id="gapQty" name="gapQty"  class="form-control" type="text" onkeyup="this.value=this.value.replace(/[^\-?\d.]/g,'')" >
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">调整数量:</label>
-                <div class="col-sm-8">
-                     <input id="adjustQty" name="adjustQty" class="form-control" type="text" onkeyup="this.value=this.value.replace(/[^\-?\d.]/g,'')">
-                </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" >
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">批号:</label>
-                <div class="col-sm-8">
-                    <input id="lot" name="lot" class="form-control" type="text" >
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">项目号:</label>
-                <div class="col-sm-8">
-                    <input id="project" name="project"  class="form-control" type="text" >
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">生产日期:</label>
-                <div class="col-sm-8">
-                    <input id="manufactureDate" name="manufactureDate"  class="form-control" type="text" >
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">失效日期:</label>
-                <div class="col-sm-8">
-                    <input id="expirationDate" name="expirationDate" class="form-control" type="text">
-                </div>
-            </div>
-
+            </div>-->
 
 			<div class="form-group">
 				<div class="form-control-static col-sm-offset-9">
@@ -120,36 +77,20 @@
     </div>
     <div th:include="include::footer"></div>
     <script type="text/javascript">
-		var prefix = ctx + "inventory/cyclecountAdjustDetail"
+		var prefix = ctx + "inventory/adjustHeader"
 
-        $("#form-cyclecountAdjustDetail-addAdjust").validate({
+        $("#form-adjustHeader-add").validate({
             rules:{
-                materialCode:{
-                    required:true,
-                },
-                containerCode:{
-                    required:true,
-                },
-                locationCode:{
+                companyCode:{
                     required:true,
                 },
-                systemQty:{
+                problemType:{
                     required:true,
                 },
-                countedQty:{
-                    required:true,
-                },
-                gapQty:{
-                    required:true,
-                },
-                adjustQty:{
-                    required:true,
-                },
-
                 //必须填值判定
             },
             submitHandler: function(form) {
-                $.operate.save(prefix + "/addAdjust", $('#form-cyclecountAdjustDetail-addAdjust').serialize());
+                $.operate.save(prefix + "/addsave", $('#form-adjustHeader-add').serialize());
             }
         });
 
diff --git a/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html b/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html
index e214421..1ab0768 100644
--- a/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html
+++ b/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html
@@ -131,10 +131,11 @@
                     field: 'cycleCountCode',
                     title: '盘点单编码'
                 },
-                /*{
-                    field: 'problemType',
-                    title: '调整类型'
-                },*/
+                {
+                    field: 'checkCode',
+                    title: '质检单编码'
+                },
+
                 {
                     field: 'referCode',
                     title: '关联上游单编码'
@@ -179,9 +180,9 @@
                     align: 'center',
                     formatter: function (value, row, index) {
                         var actions = [];
-                        actions.push('<a class="btn btn-success btn-xs ' + report + '" href="#" onclick="cyclecountPrint(\'' + row.id + '\')"><i class="fa fa-print"></i>打印</a> ');
-                        actions.push('<a class="btn btn-info btn-xs ' + upload + ' " href="#" onclick="upLoad(\'' + row.code + '\',\'' + row.sourceCode + '\')"><i class="fa fa-edit"></i>上传</a> ');
-                        actions.push('<a class="btn btn-danger btn-xs " href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a> ');
+                        /* actions.push('<a class="btn btn-success btn-xs " href="#" onclick="adjustPrint(\'' + row.id + '\')"><i class="fa fa-print"></i>打印</a> ');
+                           actions.push('<a class="btn btn-info btn-xs ' + upload + ' " href="#" onclick="upLoad(\'' + row.code + '\',\'' + row.sourceCode + '\')"><i class="fa fa-edit"></i>上传</a> ');
+                         actions.push('<a class="btn btn-danger btn-xs " href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a> ');*/
                         actions.push('<a style="background: #b5bdc0" class="btn btn-default btn-xs " href="#" onclick="detail(\'' + row.id + '\',\'' + row.code + '\')"><i class="fa fa-list-ul"></i>明细</a>');
                         return actions.join('');
                     }
@@ -212,9 +213,9 @@
         $("#tabDetail").addClass("in active");
     }
 
-    function cyclecountPrint(id) {
+    function adjustPrint(id) {
         var url = prefix + "/report/" + id;
-        $.modal.open("差异单打印", url);
+        $.modal.open("调整单打印", url);
     }
 
 
diff --git a/src/main/resources/templates/inventory/adjustHeader/report.html b/src/main/resources/templates/inventory/adjustHeader/report.html
index f63ec60..f8baa96 100644
--- a/src/main/resources/templates/inventory/adjustHeader/report.html
+++ b/src/main/resources/templates/inventory/adjustHeader/report.html
@@ -10,8 +10,8 @@
             <tr>
                 <td colspan="10">
                     <span style="padding-top:40px;width: 40%; float:left;" class="time_c"></span>
-                    <h2 style="width:24%;text-align:center;float:left;padding-top:10px;">盘点差异调整单</h2>
-                    <span style="padding-top:20px;width:35%;float:right; text-align: right"><img id="code" th:data="${cyclecountAdjust['code']}"></img></span>
+                    <h2 style="width:24%;text-align:center;float:left;padding-top:10px;">调整单</h2>
+                    <span style="padding-top:20px;width:35%;float:right; text-align: right"><img id="code" th:data="${adjustHeader['code']}"></img></span>
                 </td>
             </tr>
             <tr style="padding:15px 0 5px 0;border-bottom:1px solid #606060">
@@ -35,7 +35,7 @@
             </tr>
             </thead>
             <tbody>
-            <tr th:each="row,rowStat : ${details}">
+            <tr th:each="row,rowStat : ${adjustDetails}">
                 <td th:text="${row.containerCode}"></td>
                 <td th:text="${row.id}"></td>
                 <td th:text="${row.materialCode}"></td>
diff --git a/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html b/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html
index 8c9e175..cc1c667 100644
--- a/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html
+++ b/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html
@@ -85,7 +85,7 @@
         </div>
         <div class="btn-group hidden-xs" id="toolbar" role="group">
             <a class="btn btn-outline btn-success btn-rounded" onclick="add()"
-               shiro:hasPermission="inventory:cycleCountDetail:add">
+               shiro:hasPermission="inventory:cyclecountDetail:add">
                 <i class="fa fa-plus"></i> 新增
             </a>
             <a class="btn btn-outline btn-danger btn-rounded" onclick="createCyclecountWithGapQty()"
@@ -98,7 +98,7 @@
             </a>
             <a class="btn btn-outline btn-danger btn-rounded" onclick="batRemove()"
                shiro:hasPermission="inventory:cyclecountDetail:remove">
-                <i class="fa fa-trash-o"></i> 批量删除
+                <i class="fa fa-trash-o"></i> 删除
             </a>
             <a class="btn btn-outline btn-success btn-rounded" onclick="$.table.refresh()">
                 <i class="fa fa-refresh"></i> 刷新
@@ -109,10 +109,10 @@
 </div>
 <div th:include="include :: footer"></div>
 <script th:inline="javascript">
-    var editFlag = [[${@permission.hasPermi('inventoryHeader:cycleCountDetail:edit')}]];
-    var removeFlag = [[${@permission.hasPermi('inventoryHeader:cycleCountDetail:remove')}]];
-    var confirmFlag=[[${@permission.hasPermi('inventoryHeader:cycleCountDetail:confirm')}]];
-    var createTaskFalg=[[${@permission.hasPermi('inventoryHeader:cycleCountDetail:createTask')}]];
+    //var editFlag = [[${@permission.hasPermi('inventory:cyclecountDetail:edit')}]];
+    var removeFlag = [[${@permission.hasPermi('inventory:cyclecountDetail:remove')}]];
+    var confirmFlag = [[${@permission.hasPermi('inventory:cyclecountDetail:confirm')}]];
+    var createTaskFalg = [[${@permission.hasPermi('inventory:cyclecountDetail:createTask')}]];
     var prefix = ctx + "inventory/cycleCountDetail";
     var prefix_head = ctx + "inventory/cycleCountHeader";
     var remove_url= prefix + "/remove";
@@ -319,11 +319,12 @@
                     formatter: function (value, row, index) {
                         var actions = [];
 
-                            actions.push('<a class="btn btn-success btn-xs " href="#" onclick="confirmGapQty(\'' + row.id + '\')"><i class="fa fa-comment"></i>实盘登记</a> ');
+                            actions.push('<a class="btn btn-success btn-xs ' + confirmFlag + '" href="#" onclick="confirmGapQty(\'' + row.id + '\')"><i class="fa fa-comment"></i>实盘登记</a> ');
 
-                            actions.push('<a class="btn btn-primary btn-xs " href="#" onclick="outcheck(\'' + row.id + '\')"><i class="fa fa-gbp"></i>生成盘点任务</a> ');
+                            actions.push('<a class="btn btn-primary btn-xs ' + createTaskFalg + '" href="#" onclick="outcheck(\'' + row.id + '\')"><i class="fa fa-gbp"></i>生成盘点任务</a> ');
+
+                            actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.id + '\')" ><i class="fa fa-trash-o"></i>删除</a>');
 
-                        actions.push('<a class="btn btn-danger btn-xs " href="#" onclick="remove(\'' + row.id + '\')" ><i class="fa fa-trash-o"></i>删除</a>');
                         return actions.join('');
                     }
                 }]
diff --git a/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html b/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html
index 11bb5bd..695d68d 100644
--- a/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html
+++ b/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html
@@ -70,13 +70,13 @@
                     </div>
                     <div class="btn-group hidden-xs" id="toolbar" role="group">
                         <a class="btn btn-outline btn-success btn-rounded" onclick="$.operate.add()"
-                           shiro:hasPermission="inventory:cycleCount:add">
+                           shiro:hasPermission="inventory:cycleCountHeader:add">
                             <i class="fa fa-plus"></i> 新增
                         </a>
-                        <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()"
-                           shiro:hasPermission="inventory:cycleCount:remove">
+                        <!--<a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()"
+                           shiro:hasPermission="inventory:cycleCountHeader:remove">
                             <i class="fa fa-trash-o"></i> 删除
-                        </a>
+                        </a>-->
                     </div>
                     <table id="bootstrap-table" data-mobile-responsive="true"
                            class="table table-bordered table-hover"></table>
@@ -89,10 +89,10 @@
 </div>
 <div th:include="include :: footer"></div>
 <script th:inline="javascript">
-    var reportFlag = [[${@permission.hasPermi('inventoryHeader:cycleCount:report')}]];
-    var editFlag = [[${@permission.hasPermi('inventoryHeader:cycleCount:edit')}]];
-    var addAdjust = [[${@permission.hasPermi('inventoryHeader:cyclecountHead:addAdjust')}]];
-    var removeFlag = [[${@permission.hasPermi('inventoryHeader:cycleCount:remove')}]];
+    var reportFlag = [[${@permission.hasPermi('inventory:cycleCountHeader:report')}]];
+    //var editFlag = [[${@permission.hasPermi('inventory:cycleCountHeader:edit')}]];
+    var addAdjust = [[${@permission.hasPermi('inventory:cyclecountHead:addAdjust')}]];
+    var removeFlag = [[${@permission.hasPermi('inventory:cycleCount:remove')}]];
     var prefix = ctx + "inventory/cycleCountHeader";
     var datas = [[${@dict.getType('sys_normal_disable')}]];
     var types = [[${@dict.getType('cyclecountType')}]];
@@ -274,12 +274,12 @@
                     align: 'center',
                     formatter: function (value, row, index) {
                         var actions = [];
-                        actions.push('<a class="btn btn-success btn-xs " href="#" onclick="cyclecountPrint(\'' + row.id + '\')"><i class="fa fa-print"></i>打印</a> ');
+                        actions.push('<a class="btn btn-success btn-xs ' + reportFlag + '" href="#" onclick="cyclecountPrint(\'' + row.id + '\')"><i class="fa fa-print"></i>打印</a> ');
 
-                        actions.push('<a class="btn btn-warning btn-xs " href="#" onclick="goAdjust(\'' + row.id + '\')"><i class="fa fa-gbp"></i>生成调整单</a> ');
+                        actions.push('<a class="btn btn-warning btn-xs ' + addAdjust + '" href="#" onclick="goAdjust(\'' + row.id + '\')"><i class="fa fa-gbp"></i>生成调整单</a> ');
 
-                        //actions.push('<a class="btn btn-info btn-xs " href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
-                        actions.push('<a class="btn btn-danger btn-xs " href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a> ');
+                        //actions.push('<a class="btn btn-info btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a> ');
                          return actions.join('');
                     }
                 }]
diff --git a/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html b/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html
index 8b59b6a..f7c4248 100644
--- a/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html
+++ b/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html
@@ -83,11 +83,11 @@
         </div>
         <div class="btn-group hidden-xs" id="toolbar" role="group">
             <a class="btn btn-outline btn-primary btn-rounded" onclick="checkOut()"
-               shiro:hasPermission="inventory:inventory:seeOut">
+               shiro:hasPermission="inventory:inventoryHeader:seeOut">
                 <i class="fa fa-eye"></i> 出库查看
             </a>
             <a class="btn btn-outline btn-primary btn-rounded" onclick="check()"
-            >
+               shiro:hasPermission="inventory:inventoryDetail:detailCheckTask">
                 <i class="fa fa-eye"></i> 在库质检
             </a>
         </div>
diff --git a/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html b/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
index fba264f..81325e5 100644
--- a/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
+++ b/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
@@ -53,19 +53,24 @@
                         </form>
                     </div>
                     <div class="btn-group hidden-xs" id="toolbar" role="group">
-                        <a class="btn btn-outline btn-danger btn-rounded" onclick="transfer()">
+                        <a class="btn btn-outline btn-danger btn-rounded" onclick="transfer()"
+                           shiro:hasPermission="inventory:inventoryHeader:transfer">
                             <i class="fa fa-exchange"></i> 立库移库
                         </a>
-                        <a class="btn btn-outline btn-primary btn-rounded" onclick="checkOut()">
+                        <a class="btn btn-outline btn-primary btn-rounded" onclick="checkOut()"
+                           shiro:hasPermission="inventory:inventoryHeader:seeOut">
                             <i class="fa fa-eye"></i> 出库查看
                         </a>
-                        <a class="btn btn-outline btn-info btn-rounded" onclick="emptyIn()" shiro:hasPermission="task:task:emptyIn">
+                        <a class="btn btn-outline btn-info btn-rounded" onclick="emptyIn()"
+                           shiro:hasPermission="inventory:inventoryHeader:emptyIn">
                             <i class="fa fa-level-down"></i> 空托入库
                         </a>
-                        <a class="btn btn-outline btn-default btn-rounded" onclick="emptyCheckOut()" >
+                        <a class="btn btn-outline btn-default btn-rounded" onclick="emptyCheckOut()"
+                           shiro:hasPermission="inventory:inventoryHeader:emptyCheckOut">
                             <i class="fa fa fa-eye"></i> 空托出库查看
                         </a>
-                        <a class="btn btn-outline btn-info btn-rounded" onclick="emptyOut()" shiro:hasPermission="task:task:emptyOut">
+                        <a class="btn btn-outline btn-info btn-rounded" onclick="emptyOut()"
+                           shiro:hasPermission="inventory:inventoryHeader:emptyOut">
                             <i class="fa fa-level-up"></i> 空托出库
                         </a>
                     </div>
diff --git a/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html b/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
index 5482699..8c83724 100644
--- a/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
+++ b/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
@@ -81,7 +81,8 @@
             </div>
             <div class="col-sm-12 select-info">
                 <div class="btn-group hidden-xs" id="toolbar" role="group">
-                    <a class="btn btn-outline btn-success btn-rounded" onclick="report()">
+                    <a class="btn btn-outline btn-success btn-rounded" onclick="report()"
+                       shiro:hasPermission="inventory:inventoryTransaction:report">
                         <i class="fa fa-plus"></i> 打印
                     </a>
                 </div>
diff --git a/src/main/resources/templates/inventory/inventoryTransaction/report.html b/src/main/resources/templates/inventory/inventoryTransaction/report.html
index 7ce9d62..3c7357a 100644
--- a/src/main/resources/templates/inventory/inventoryTransaction/report.html
+++ b/src/main/resources/templates/inventory/inventoryTransaction/report.html
@@ -4,7 +4,7 @@
 <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <head th:include="include :: header"></head>
-    <title>文字</title>
+    <title>库存交易明细</title>
     <!--<link href="css/bootstrap.min.css" rel="stylesheet" />-->
     <!--<link href="css/font-awesome.min.css" rel="stylesheet" />-->
     <!--&lt;!&ndash;[if IE]>-->
@@ -33,19 +33,19 @@
             <caption style="font-size:18px;text-align:center; color:#333; padding-bottom: 3px;">长沙华恒机器人系统有限公司</caption>
             <tbody>
             <tr>
-                <td width="20%" scope="col">存货编码</td>
+                <td width="20%" scope="col">物料编码</td>
                 <td colspan="2" scope="col" style="text-align:center">
                     <span th:text="${row.materialCode}" ></span>
                 </td>
             </tr>
             <tr>
-                <td scope="col">存货代码</td>
+                <td scope="col">重量</td>
                 <td colspan="2" scope="col" style="text-align:center">
-                    <span th:text="${row.userDef1}" ></span>
+                    <span th:text="${row.weight}" ></span>
                 </td>
             </tr>
             <tr style="vertical-align:middle">
-                <td>存货名称</td>
+                <td>物料名称</td>
                 <td style="text-align:center">
                     <span th:text="${row.materialName}"></span>
                 </td>
@@ -56,22 +56,22 @@
                 </td>
             </tr>
             <tr>
-                <td>规格型号</td>
+                <td>物料规格</td>
                 <td style="text-align:center">
                     <span th:text="${row.materialSpec}"></span>
                 </td>
             </tr>
             <tr>
-                <td>数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;量</td>
+                <td>任务数量</td>
                 <td style="text-align:center; padding: 0">
                     <!--<input name="" type="text" style="line-height:18px;  border:0; text-align:center;" th:text="${receiptDetail.qty}"/>-->
-                    <input id="qty" name="qty" th:value="*{row.qty}" class="form-control" type="text" style="text-align:center;height:30px;border: none"/>
+                    <input id="qty" name="qty" th:value="*{row.taskQty}" class="form-control" type="text" style="text-align:center;height:30px;border: none"/>
                 </td>
             </tr>
             <tr>
-                <td scope="col">生产编号</td>
+                <td scope="col">项目号</td>
                 <td colspan="2" scope="col" style="text-align:center">
-                    <span th:text="${row.project}" ></span>
+                    <span th:text="${row.projectNo}" ></span>
                 </td>
             </tr>
             </tbody>
@@ -102,12 +102,12 @@
             var code16=$(this).children()[1].children[1].innerText;
             var name=$(this).children()[1].children[2].innerText;
             var spec=$(this).children()[1].children[3].innerText;
-            var project=$(this).children()[1].children[5].innerText;
+            var projectNo=$(this).children()[1].children[5].innerText;
             company=company.substring(5);
             code16=code16.substring(5);
             name=name.substring(5);
             spec=spec.substring(5);
-            project=project.substring(5);
+            projectNo=projectNo.substring(5);
             var reg=/\t/;
             name=name.replace(reg,"");
             var qty=$(this).find('input').val();
diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html
index d29a611..df52bff 100644
--- a/src/main/resources/templates/main.html
+++ b/src/main/resources/templates/main.html
@@ -112,18 +112,18 @@
         var chart4 = echarts.init(document.getElementById('chart4'));
 
         function refresh() {
-            // $.get("../index/getShipmentsLast7Days").done(function (data) {
-            //     chart1.setOption(JSON.parse(data));
-            // })
+            $.get("../index/getShipmentsLast7Days").done(function (data) {
+                chart1.setOption(JSON.parse(data));
+            })
             $.get("../index/getLocationProp").done(function (data) {
                 chart2.setOption(JSON.parse(data));
             });
-            // $.get("../index/getInventoryStatus").done(function (data) {
-            //     chart3.setOption(JSON.parse(data));
-            // })
-            // $.get("../index/getInventoryProp").done(function(data){
-            //     chart4.setOption(JSON.parse(data));
-            // });
+            $.get("../index/getInventoryStatus").done(function (data) {
+                chart3.setOption(JSON.parse(data));
+            })
+            $.get("../index/getInventoryProp").done(function(data){
+                chart4.setOption(JSON.parse(data));
+            });
 
             $.get("../index/getCommonData").done(function (data) {
                 if(data.code==200){
diff --git a/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html b/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html
index 1ac36be..84c39a3 100644
--- a/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html
+++ b/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html
@@ -93,7 +93,7 @@
         var shipmentTaskType=[[${@dict.getType('shipmentTaskType')}]];
         var shipmentContainerHeaderStatus=[[${@dict.getType('shipmentContainerHeaderStatus')}]];
         var createTaskFlag = [[${@permission.hasPermi('shipment:container:add')}]]
-		var headerId;
+		var shippingContainerId;
 
         $(function() {
             var options = {
@@ -291,7 +291,7 @@
                 ]
         });
 
-        function createtable(url,headerId) {
+        function createtable(url,shippingContainerId) {
             // $("#tabDetail").children().remove();
             $("#myTab li").removeClass("active");
             $(".tab-pane").removeClass("in active");
@@ -301,7 +301,7 @@
                 url:url,
                 type: 'post',
                 data:{
-                    headerId:headerId
+					shippingContainerId:shippingContainerId
                 },
                 success : function (value) {
                     $("#bootstrap-table1").bootstrapTable('load',value.data);
@@ -333,9 +333,9 @@
         /*入库单列表-详细*/
         function detail(id) {
             var url = detailPrefix + '/list/';
-            headerId = id;
+			shippingContainerId = id;
             // createMenuItem(url, "入库组盘明细");
-            createtable(url,headerId);
+            createtable(url,shippingContainerId);
         }
 
         /* 单个生成任务 */
diff --git a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
index 4101300..d440942 100644
--- a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
+++ b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
@@ -695,8 +695,22 @@
             parent.$('.tabReload').click();
         }
         else{
-            createMenuItem(url, "出库组盘");
-            parent.$('.tabReload').click();
+            $.ajax({
+                url: ctx + "shipment/shipmentDetail/shippingCombination",
+                type: 'post',
+                data:{
+                    shipmentCode
+                },
+                success: function(res) {
+                    if (res.code === 200) {
+                        createMenuItem(url, "出库组盘");
+                        parent.$('.tabReload').click();
+                    }
+                    else {
+                        $.modal.msgError(res.msg)
+                    }
+                }
+            });
         }
     }
     /* 点击明细面板 */