Преглед изворни кода

项目信息和物料库修改,超欠供明细部分代码上传

user5 пре 3 година
родитељ
комит
39929440ea

+ 12 - 0
src/main/java/com/jeeplus/modules/supply/materialLibrary/mapper/MaterialLibraryMapper.java

@@ -47,4 +47,16 @@ public interface MaterialLibraryMapper extends BaseMapper<MaterialLibrary> {
      * @return
      */
     Integer getCountByMaterialCodeList(@Param("materialCodeList") List<String> materialCodeList);
+
+    /**
+     * 查询物料库表中数据量
+     * @return
+     */
+    Integer getMaterialCodeByMaterialCount();
+
+    /**
+     * 删除物料库中所有数据
+     * @return
+     */
+    Integer deleteAll();
 }

+ 8 - 0
src/main/java/com/jeeplus/modules/supply/materialLibrary/mapper/xml/MaterialLIbraryMapper.xml

@@ -120,4 +120,12 @@
             </foreach>
         </where>
     </delete>
+
+    <select id="getMaterialCodeByMaterialCount" resultType="java.lang.Integer">
+        select count(id) from material_library
+    </select>
+
+    <delete id="deleteAll">
+        delete from material_library
+    </delete>
 </mapper>

+ 46 - 10
src/main/java/com/jeeplus/modules/supply/materialLibrary/service/MaterialLibraryService.java

@@ -41,6 +41,30 @@ public class MaterialLibraryService extends CrudService<MaterialLibraryMapper, M
         return super.findPage(page,materialLibrary);
     }
 
+    /**
+     * 数据验证
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    public LinkedHashMap dataVerification(MultipartFile file) throws Exception{
+        LinkedHashMap returnMap = new LinkedHashMap();
+        //查询数据库的物料库表中是否含有数据
+        Integer materialCount= materialLibraryMapper.getMaterialCodeByMaterialCount();
+        if(materialCount>0){
+            File multipartFile = transformMultipartFile(file);
+            String multipartFileStr = multipartFile.getCanonicalPath().replaceAll("\\\\","/");
+            returnMap.keySet().removeIf(key -> key == "repeat");
+            returnMap.put("repeat","3");
+            returnMap.put("success",true);
+            returnMap.put("file",multipartFile.getCanonicalPath());
+            returnMap.keySet().removeIf(key -> key == "msg");
+            returnMap.put("msg","已存在物料数据,是否覆盖?");
+        }else{
+            returnMap.put("success",false);
+        }
+        return returnMap;
+    }
 
 
 
@@ -52,19 +76,20 @@ public class MaterialLibraryService extends CrudService<MaterialLibraryMapper, M
     @Transactional(readOnly = false)
     public LinkedHashMap disposeImportMaterialLibrary(List<MaterialLibrary> list,MultipartFile file,String repeat) throws Exception{
         LinkedHashMap returnMap = new LinkedHashMap();
-
+        Integer index= 2;
         Iterator<MaterialLibrary> its = list.iterator();
         while(its.hasNext()){  //验证主键不为空
+            index ++;
             MaterialLibrary info = its.next();
             if(StringUtils.isBlank(info.getMaterialCode())){
                 returnMap.put("success",false);
-                returnMap.put("msg","存在物料编码为空的数据,请确认后重新提交!");
+                returnMap.put("msg","第" + index + "行,存在物料编码为空的数据,请确认后重新提交!");
                 return returnMap;
 //                its.remove();  //删除为空信息
             }
         }
 
-        Set<String> materialCodeSet = new HashSet<>();
+        /*Set<String> materialCodeSet = new HashSet<>();
         for (MaterialLibrary importInfo : list){
             //将物料编码放入set中
             materialCodeSet.add(importInfo.getMaterialCode());
@@ -77,10 +102,10 @@ public class MaterialLibraryService extends CrudService<MaterialLibraryMapper, M
             returnMap.keySet().removeIf(key -> key == "msg");
             returnMap.put("success",false);
             returnMap.put("msg","存在物流编码重复的数据,请确认后重新提交!");
-        }
+        }*/
 
         //方便快捷删除  找到对应重复数据,以便最后批量操作使用
-        List<String> codeList = materialLibraryMapper.getMaterialCodeByMaterialCodeList(materialCodeList);  //即为重复数据的编码集合
+        /*List<String> codeList = materialLibraryMapper.getMaterialCodeByMaterialCodeList(materialCodeList);  //即为重复数据的编码集合
         Iterator<MaterialLibrary> it = list.iterator();
         if(codeList.size()!=0 && repeat.equals("0") && codeList != null) {  //有重复值并且为第一次交互  就保存文件
             File copyFile = transformMultipartFile(file);
@@ -93,19 +118,30 @@ public class MaterialLibraryService extends CrudService<MaterialLibraryMapper, M
             returnMap.keySet().removeIf(key -> key == "msg");
             returnMap.put("msg","已存在物料数据,是否覆盖?");
             return returnMap;
+        }*/
+
+        if(repeat.equals("1")){  //覆盖 则删除数据库中的重复数据
+            //删除数据库中数据
+            if(list.size()>0){
+                materialLibraryMapper.deleteAll();
+            }else{
+                returnMap.keySet().removeIf(key -> key == "msg");
+                returnMap.put("success",false);
+                returnMap.put("msg","导入表数据量为0条,不进行替换");
+                return returnMap;
+            }
+            /*//批量删除重复数据  覆盖操作  物理删除
+            modifyHandmadeVindicateListTwo(codeList);*/
         }
 
-        if(repeat.equals("2")) {  //不覆盖 则删除list中的重复数据
+        /*if(repeat.equals("2")) {  //不覆盖 则删除list中的重复数据
             while (it.hasNext()) {
                 MaterialLibrary materialLibrary = it.next();
                 if (codeList.contains(materialLibrary.getMaterialCode())) {
                     it.remove();
                 }
             }
-        }else if(repeat.equals("1")){  //覆盖 则删除数据库中的重复数据
-            //批量删除重复数据  覆盖操作  物理删除
-            modifyHandmadeVindicateListTwo(codeList);
-        }
+        }*/
 
         //提前保存读取的list的长度
         int size = list.size();

+ 23 - 10
src/main/java/com/jeeplus/modules/supply/materialLibrary/web/MaterialLibraryController.java

@@ -107,17 +107,26 @@ public class MaterialLibraryController extends BaseController {
     public AjaxJson importFile(@RequestParam("file") MultipartFile file) {
         AjaxJson j = new AjaxJson();
         try {
-            String repeat = "0";  //repeat=0:第一次交互,1:覆盖,2:不覆盖,3:重复
-            ImportExcel ei = new ImportExcel(file, 1, 0);
-            List<MaterialLibrary> list = ei.getDataList(MaterialLibrary.class);
-            LinkedHashMap returnMap = materialLibraryService.disposeImportMaterialLibrary(list,file,repeat);
-            //放要放的值
-            Boolean boole = (Boolean) returnMap.get("success");
-            if(!boole){
-                j.setSuccess(false);
+            LinkedHashMap verificationMap = materialLibraryService.dataVerification(file);
+            //获取数据库数据状态
+            Boolean verificationMapBool = (Boolean) verificationMap.get("success");
+            if(verificationMapBool){
+                j.setBody(verificationMap);
+                j.setMsg(verificationMap.get("msg").toString());
+            }else{
+                String repeat = "0";  //repeat=0:第一次交互,1:覆盖,2:不覆盖,3:重复
+                ImportExcel ei = new ImportExcel(file, 1, 0);
+                List<MaterialLibrary> list = ei.getDataList(MaterialLibrary.class);
+                LinkedHashMap returnMap = materialLibraryService.disposeImportMaterialLibrary(list,file,repeat);
+                //放要放的值
+                Boolean boole = (Boolean) returnMap.get("success");
+                if(!boole){
+                    j.setSuccess(false);
+                }
+                j.setBody(returnMap);
+                j.setMsg(returnMap.get("msg").toString());
             }
-            j.setBody(returnMap);
-            j.setMsg(returnMap.get("msg").toString());
+
         } catch (Exception e) {
             j.setSuccess(false);
             j.setMsg("导入物料库失败!失败信息:" + e.getMessage());
@@ -141,6 +150,10 @@ public class MaterialLibraryController extends BaseController {
             LinkedHashMap returnMap = materialLibraryService.disposeImportMaterialLibrary(list,file1,repeat);
             //如果文件已经使用完毕,则删除
             materialLibraryService.deleteFileContent(file);
+            Boolean boole = (Boolean) returnMap.get("success");
+            if(!boole){
+                j.setSuccess(false);
+            }
             //放要放的值
             j.setBody(returnMap);
             j.setMsg(returnMap.get("msg").toString());

+ 16 - 0
src/main/java/com/jeeplus/modules/supply/projectInformation/mapper/ProjectInformationMapper.java

@@ -56,4 +56,20 @@ public interface ProjectInformationMapper extends BaseMapper<ProjectInformation>
      * @return
      */
     int deleteAllById(ProjectInformation projectInformation);
+
+    /**
+     * 查询向目标数据量
+     * @return
+     */
+    Integer getProjectCount();
+
+    /**
+     * 删除项目表中数据
+     */
+    void deleteAllProject();
+
+    /**
+     * 删除工程结算表中数据
+     */
+    void deleteAllSubmissionForm();
 }

+ 12 - 0
src/main/java/com/jeeplus/modules/supply/projectInformation/mapper/xml/ProjectInformationMapper.xml

@@ -310,4 +310,16 @@
         where sf.id = #{id}
     </update>
 
+    <select id="getProjectCount" resultType="java.lang.Integer">
+        select count(id) from project_information
+    </select>
+
+    <delete id="deleteAllProject">
+        delete from project_information
+    </delete>
+
+    <delete id="deleteAllSubmissionForm">
+        delete from submission_form
+    </delete>
+
 </mapper>

+ 71 - 11
src/main/java/com/jeeplus/modules/supply/projectInformation/service/ProjectInformationService.java

@@ -1,5 +1,6 @@
 package com.jeeplus.modules.supply.projectInformation.service;
 
+import com.google.common.collect.Lists;
 import com.jeeplus.common.config.Global;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.core.persistence.Page;
@@ -7,6 +8,7 @@ import com.jeeplus.core.service.CrudService;
 import com.jeeplus.modules.supply.materialLibrary.service.MaterialLibraryService;
 import com.jeeplus.modules.supply.projectInformation.entity.ProjectInformation;
 import com.jeeplus.modules.supply.projectInformation.mapper.ProjectInformationMapper;
+import com.jeeplus.modules.supply.stockOut.entity.SupplyStockOut;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +46,31 @@ public class ProjectInformationService extends CrudService<ProjectInformationMap
     }
 
     /**
+     * 数据验证
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    public LinkedHashMap dataVerification(MultipartFile file) throws Exception{
+        LinkedHashMap returnMap = new LinkedHashMap();
+        //查询项目数据量
+        Integer projectCount= projectInformationMapper.getProjectCount();
+        if(projectCount>0){
+            File multipartFile = transformMultipartFile(file);
+            String multipartFileStr = multipartFile.getCanonicalPath().replaceAll("\\\\","/");
+            returnMap.keySet().removeIf(key -> key == "repeat");
+            returnMap.put("repeat","3");
+            returnMap.put("success",true);
+            returnMap.put("filePath",multipartFileStr);
+            returnMap.keySet().removeIf(key -> key == "msg");
+            returnMap.put("msg","已存在项目数据,是否覆盖?");
+        }else{
+            returnMap.put("success",false);
+        }
+        return returnMap;
+    }
+
+    /**
      * 项目信息导入处理
      * @param list
      * @return
@@ -51,18 +78,19 @@ public class ProjectInformationService extends CrudService<ProjectInformationMap
     @Transactional(readOnly = false)
     public LinkedHashMap disposeImportProjectInformation(List<ProjectInformation> list, MultipartFile file, String repeat) throws Exception{
         LinkedHashMap returnMap = new LinkedHashMap();
-
+        Integer index = 2;
         Iterator<ProjectInformation> its = list.iterator();
         while(its.hasNext()){
+            index ++ ;
             ProjectInformation info = its.next();
             if(StringUtils.isBlank(info.getSubmissionFormId())){
                 returnMap.put("success",false);
-                returnMap.put("msg","存在审定单id为空的数据,请确认后重新提交!");
+                returnMap.put("msg","第" + index + "行,存在审定单id为空的数据,请确认后重新提交!");
                 return returnMap;
 //                its.remove();       //根据主键 送审单id做判断,防止空值
             }else if(StringUtils.isBlank(info.getProjectDefinitionNumber())){
                 returnMap.put("success",false);
-                returnMap.put("msg","存在项目定义号为空的数据,请确认后重新提交!");
+                returnMap.put("msg","第" + index + "行,存在项目定义号为空的数据,请确认后重新提交!");
                 return returnMap;
             }
         }
@@ -84,8 +112,8 @@ public class ProjectInformationService extends CrudService<ProjectInformationMap
 
 
         //将项目信息的内容去重  遍历
-        List<ProjectInformation> projectInformationList = new ArrayList();
-        Set<String> projectDefinitionNumberSet = new HashSet<>();//去重后的项目定义号
+        List<ProjectInformation> projectInformationList = groupDistinctProjectInformation(list);
+        /*Set<String> projectDefinitionNumberSet = new HashSet<>();//去重后的项目定义号
         for(int i=0;i<list.size();i++){ //遍历取出项目定义号
             projectDefinitionNumberSet.add(list.get(i).getProjectDefinitionNumber());
         }
@@ -98,10 +126,10 @@ public class ProjectInformationService extends CrudService<ProjectInformationMap
                     break;
                 }
             }
-        }
+        }*/
 
 
-        //方便快捷删除  找到对应重复数据,以便最后批量操作使用  审定单id
+        /*//方便快捷删除  找到对应重复数据,以便最后批量操作使用  审定单id
         List<String> codeList = projectInformationMapper.getSubmissionFormIdListBysubmissionFormIdList(submissionFormIdList);  //即为重复数据的审定单id集合
         Iterator<ProjectInformation> it = list.iterator();
         if(codeList.size()!=0 && repeat.equals("0") && codeList != null) {  //有重复值并且为第一次交互  就保存文件
@@ -115,9 +143,9 @@ public class ProjectInformationService extends CrudService<ProjectInformationMap
             returnMap.put("success",true);
             returnMap.put("msg","已存在项目数据,是否覆盖?");
             return returnMap;
-        }
+        }*/
 
-        if(repeat.equals("2")) {  //不覆盖 则删除list中的重复数据
+        /*if(repeat.equals("2")) {  //不覆盖 则删除list中的重复数据
             while (it.hasNext()) {
                 ProjectInformation projectInformation = it.next();
                 if (codeList.contains(projectInformation.getSubmissionFormId())) {
@@ -131,9 +159,24 @@ public class ProjectInformationService extends CrudService<ProjectInformationMap
                     projectIt.remove();
                 }
             }
-        }else if(repeat.equals("1")){  //覆盖 则删除数据库中的重复数据
+        }else */
+
+        if(repeat.equals("1")){  //覆盖 则删除数据库中的重复数据
+
+            if(list.size()>0){
+                //删除项目数据
+                projectInformationMapper.deleteAllProject();
+                //删除工程信息
+                projectInformationMapper.deleteAllSubmissionForm();
+            }else{
+                returnMap.keySet().removeIf(key -> key == "msg");
+                returnMap.put("success",false);
+                returnMap.put("msg","导入表数据量为0条,不进行替换");
+                return returnMap;
+            }
+
             //批量删除重复数据  覆盖操作
-            modifyHandmadeVindicateListTwo(codeList);
+            //modifyHandmadeVindicateListTwo(codeList);
         }
 
         //提前保存读取的list的长度
@@ -152,6 +195,23 @@ public class ProjectInformationService extends CrudService<ProjectInformationMap
     }
 
     /**
+     * 根据项目定义号对项目信息进行去重
+     * @param projectInformationList
+     * @return
+     */
+    public List<ProjectInformation> groupDistinctProjectInformation (List<ProjectInformation> projectInformationList){
+        List<ProjectInformation> list = Lists.newArrayList();
+        Map<String, ProjectInformation> map = new HashMap<>();
+        for(ProjectInformation project : projectInformationList){
+            if(!map.containsKey(project.getProjectDefinitionNumber())){//map中不存在此id,将数据存放当前key的map中
+                map.put(project.getProjectDefinitionNumber(), project);
+                list.add(project);
+            }
+        }
+        return list;
+    }
+
+    /**
      * 批量新增审定单信息表数据
      * @param projectBasicsList
      * @return

+ 18 - 10
src/main/java/com/jeeplus/modules/supply/projectInformation/web/ProjectInformationController.java

@@ -115,17 +115,25 @@ public class ProjectInformationController extends BaseController {
     public AjaxJson importFile(@RequestParam("file") MultipartFile file) {
         AjaxJson j = new AjaxJson();
         try {
-            String repeat = "0";  //repeat:0:第一次交互,1:覆盖,2:不覆盖,3:询问
-            ImportExcel ei = new ImportExcel(file, 1, 0);
-            List<ProjectInformation> list = ei.getDataList(ProjectInformation.class);
-            LinkedHashMap returnMap = projectInformationService.disposeImportProjectInformation(list,file,repeat);
-            //放要放的值
-            Boolean boole = (Boolean) returnMap.get("success");
-            if(!boole){
-                j.setSuccess(false);
+            LinkedHashMap verificationMap = projectInformationService.dataVerification(file);
+            //获取数据库数据状态
+            Boolean verificationMapBool = (Boolean) verificationMap.get("success");
+            if(verificationMapBool){
+                j.setBody(verificationMap);
+                j.setMsg(verificationMap.get("msg").toString());
+            }else{
+                String repeat = "0";  //repeat:0:第一次交互,1:覆盖,2:不覆盖,3:询问
+                ImportExcel ei = new ImportExcel(file, 1, 0);
+                List<ProjectInformation> list = ei.getDataList(ProjectInformation.class);
+                LinkedHashMap returnMap = projectInformationService.disposeImportProjectInformation(list,file,repeat);
+                //放要放的值
+                Boolean boole = (Boolean) returnMap.get("success");
+                if(!boole){
+                    j.setSuccess(false);
+                }
+                j.setBody(returnMap);
+                j.setMsg(returnMap.get("msg").toString());
             }
-            j.setBody(returnMap);
-            j.setMsg(returnMap.get("msg").toString());
         } catch (Exception e) {
             j.setSuccess(false);
             j.setMsg("导入项目信息失败!失败信息:" + e.getMessage());

+ 309 - 0
src/main/webapp/webpage/modules/supply/particulars/stockOut/supplyStockOutList.js

@@ -0,0 +1,309 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+    <script>
+    $(document).ready(function() {
+        $('#dataTable').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //显示检索按钮
+            showSearch: false,
+            //显示刷新按钮
+            showRefresh: false,
+            //显示切换手机试图按钮
+            showToggle: false,
+            //显示 内容列下拉框
+            showColumns: false,
+            //显示到处按钮
+            showExport: false,
+            //显示切换分页按钮
+            showPaginationSwitch: false,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: true,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber:1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/supply/stockOut/data",
+            //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+            //queryParamsType:'',
+            ////查询参数,每次调用是会带上这个参数,可自定义
+            queryParams : function(params) {
+                var searchParam = $("#searchForm").serializeJSON();
+                searchParam.pageNo = params.limit === undefined? "1" :params.offset/params.limit+1;
+                searchParam.pageSize = params.limit === undefined? -1 : params.limit;
+                searchParam.orderBy = params.sort === undefined? "" : params.sort+ " "+  params.order;
+                return searchParam;
+            },
+            //分页方式:client客户端分页,server服务端分页(*)
+            sidePagination: "server",
+            contextMenuTrigger:"right",//pc端 按右键弹出菜单
+            contextMenuTriggerMobile:"press",//手机端 弹出菜单,click:单击, press:长按。
+            contextMenu: '#context-menu',
+            onContextMenuItem: function(row, $el){
+                if($el.data("item") == "edit"){
+                    edit(row.id);
+                }else if($el.data("item") == "view"){
+                    view(row.id);
+                } else if($el.data("item") == "delete"){
+                    jp.confirm('确认要删除该数据记录吗?', function(){
+                        jp.loading();
+                        jp.get("${ctx}/supply/stockOut/delete?id="+row.id, function(data){
+                            if(data.success){
+                                $('#dataTable').bootstrapTable('refresh');
+                                jp.success(data.msg);
+                            }else{
+                                jp.error(data.msg);
+                            }
+                        })
+
+                    });
+
+                }
+            },
+
+            onClickRow: function(row, $el){
+            },
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            columns: [{
+		        checkbox: true
+
+		    }
+			,{
+                field: 'stockOutNumber',
+                title: '出库单编号',
+                width:120,
+                sortName: 'stockOutNumber',
+                formatter:function(value, row , index) {
+                    value = jp.unescapeHTML(value);
+                <c:choose>
+                    <c:when test="${fns:hasPermission('supply:stockOut:view')}">
+                        return "<a href='javascript:view(\"" + row.id + "\")'>" + value + "</a>";
+                    </c:when>
+                    <c:otherwise>
+                        return value;
+                        </c:otherwise>
+                </c:choose>
+
+                }
+            },{
+                    field: 'wbsElement',
+                    title: 'WBS元素',
+                    width:210,
+                    sortName: 'wbsElement'
+                }
+                ,{
+                    field: 'projectDefinition',
+                    title: '项目定义',
+                    width:150,
+                    sortName: 'projectDefinition'
+                }
+                ,{
+                    field: 'materialNumber',
+                    title: '物料编码',
+                    width:100,
+                    sortName: 'materialNumber'
+                }
+                ,{
+                    field: 'batch',
+                    title: '批次',
+                    width:100,
+                    sortName: 'batch'
+                }
+                ,{
+                    field: 'actualQuantityIssued',
+                    title: '实发数量',
+                    width:100,
+                    sortName: 'actualQuantityIssued'
+                }
+                ,{
+                    field: 'unitPrice',
+                    title: '单价',
+                    width:100,
+                    sortName: 'unitPrice'
+                }
+                ,{
+                    field: 'postingAccountDateStr',
+                    title: '过账日期',
+                    width:120,
+                    sortName: 'postingAccountDateStr'
+                }
+                ,{
+                    field: 'supplierName',
+                    title: '供应商名称',
+                    width:100,
+                    sortName: 'supplierName'
+                }
+                ,{
+                    field: 'pickingNumber',
+                    title: '领料单号',
+                    width:100,
+                    sortName: 'pickingNumber'
+                }
+                ,{
+                    field: 'pickingCreateBy',
+                    title: '领料单创建人',
+                    width:100,
+                    sortName: 'pickingCreateBy'
+                }
+                ,{
+                    field: 'stockOutPerson',
+                    title: '出库人',
+                    width:100,
+                    sortName: 'stockOutPerson'
+                }
+                ,{
+                    field: 'accountantCertificate',
+                    title: '会计凭证',
+                    width:100,
+                    sortName: 'accountantCertificate'
+                }
+
+
+            ]
+
+        });
+
+        if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端
+
+
+            $('#dataTable').bootstrapTable("toggleView");
+        }
+
+        $('#dataTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+            'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', ! $('#dataTable').bootstrapTable('getSelections').length);
+            $('#view,#edit').prop('disabled', $('#dataTable').bootstrapTable('getSelections').length!=1);
+        });
+        $("#btnImport").click(function(){
+            jp.open({
+                type: 2,
+                area: [500, 200],
+                auto: true,
+                title:"导入数据",
+                content: "${ctx}/tag/importExcel" ,
+                btn: [/*'导出模板',*/'确定', '关闭'],
+                /*btn1: function () {
+                    jp.downloadFile('${ctx}/supply/stockOut/templates')
+                },*/
+                btn1: function(index, layero){
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    iframeWin.contentWindow.importExcel('${ctx}/supply/stockOut/import', function (data) {
+                        if(data.success){
+                            jp.success(data.msg);
+                            refresh();
+                        }else{
+                            jp.error(data.msg);
+                        }
+                        jp.close(index);
+                    });//调用保存事件
+                    return false;
+                },
+                btn2: function(index){
+                    //  jp.close(index);
+                }
+            });
+        });
+
+
+
+        $("#export").click(function(){//导出Excel文件物料
+            var reserveProjectName = $("#reserveProjectName").val();//储备项目暂定名称:
+            var projectName = $("#projectName").val();//项目名称
+            var reserveCode = $("#reserveCode").val();//储备编码
+            var projectCode = $("#projectCode").val();//项目编码
+            var projectAttribute = $("#projectAttribute").val();//项目属性
+            var projectDefine = $("#projectDefine").val();//项目定义
+            var bat = $("#bat").val();//项目批次
+            jp.downloadFile('${ctx}/supply/stockOut/export?reserveProjectName='+reserveProjectName+'&projectName='+projectName+'&reserveCode='+reserveCode+'&projectCode='+projectCode+'&projectAttribute='+projectAttribute+'&projectBatch='+bat+'&projectDefine='+projectDefine);
+        });
+        $("#exportpro").click(function(){//导出Excel文件
+            jp.downloadFile('${ctx}/supply/stockOut/exportpro');
+        });
+
+
+        $("#search").click("click", function() {// 绑定查询按扭
+            $('#dataTable').bootstrapTable('refresh');
+        });
+
+        $("#reset").click("click", function() {// 绑定查询按扭
+            $("#searchForm  input").val("");
+            $("#searchForm  select").val("");
+            $("#searchForm  .select-item").html("");
+            $('#dataTable').bootstrapTable('refresh');
+        });
+
+        var picker1 = $('#beginDate').datetimepicker({
+            format: 'YYYY-MM-DD',
+            locale: moment.locale('zh-cn'),
+        });
+        var picker2 = $('#endDate').datetimepicker({
+            format: 'YYYY-MM-DD',
+            locale: moment.locale('zh-cn')
+        });
+
+    });
+
+function getIdSelections() {
+    return $.map($("#dataTable").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+
+function deleteAll(){
+    jp.confirm('确认要删除该记录信息吗?', function(){
+        jp.loading();
+        jp.get("${ctx}/supply/stockOut/deleteAll?ids=" + getIdSelections(), function(data){
+            if(data.success){
+                $('#dataTable').bootstrapTable('refresh');
+                jp.success(data.msg);
+            }else{
+                jp.error(data.msg);
+            }
+        })
+
+    })
+}
+
+//刷新列表
+function refresh(){
+    $('#dataTable').bootstrapTable('refresh');
+}
+
+function add(){
+    jp.openSaveDialog('新增', "${ctx}/supply/stockOut/form",'800px', '500px');
+}
+
+
+
+function edit(id){//没有权限时,不显示确定按钮
+    if(id == undefined){
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑', "${ctx}/supply/stockOut/form?id=" + id, '800px', '500px');
+}
+
+function view(id){//没有权限时,不显示确定按钮
+    if(id == undefined){
+        id = getIdSelections();
+    }
+    jp.openViewDialog('查看', "${ctx}/supply/stockOut/view?id=" + id, '800px', '500px');
+}
+
+
+
+</script>

+ 32 - 0
src/main/webapp/webpage/modules/supply/particulars/stockOut/supplyStockOutList.jsp

@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>出库单列表</title>
+	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+	<meta name="decorator" content="ani"/>
+	<%@ include file="/webpage/include/bootstraptable.jsp"%>
+	<%@include file="/webpage/include/treeview.jsp" %>
+	<%@include file="supplyStockOutList.js" %>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-body">
+
+	<!-- 搜索 -->
+	<div id="search-collapse" class="collapse">
+		<div class="accordion-inner">
+			<form:form id="searchForm" modelAttribute="supplyStockOut" class="form form-horizontal well clearfix">
+				<input type="hidden" id="particularMaterialNumber" name="particularMaterialNumber" value="${supplyStockOut.particularMaterialNumber}">
+			</form:form>
+		</div>
+	</div>
+
+	<!-- 表格 -->
+	<table id="dataTable"  style="table-layout:fixed"   data-toolbar="#toolbar"></table>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 185 - 0
src/main/webapp/webpage/modules/supply/particulars/stockOut/supplyStockOutView.jsp

@@ -0,0 +1,185 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>出库单详情</title>
+	<meta name="decorator" content="ani"/>
+	<script type="text/javascript">
+
+		$(document).ready(function() {
+			// $('#startDate').datetimepicker({
+			// 	format: "YYYY-MM-DD"
+			// });
+			// $('#endDate').datetimepicker({
+			// 	format: "YYYY-MM-DD"
+			// });
+		});
+	</script>
+</head>
+<body class="bg-white">
+		<form:form id="inputForm" modelAttribute="supplyStockOut" class="form-horizontal">
+		<form:hidden path="id"/>
+		<table class="table table-bordered">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">出库单编号:</label></td>
+					<td class="width-35">
+						<form:input path="stockOutNumber" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">WBS元素:</label></td>
+					<td class="width-35">
+						<form:input path="wbsElement" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目名称:</label></td>
+					<td class="width-35">
+						<form:input path="projectName" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目定义号:</label></td>
+					<td class="width-35">
+						<form:input path="projectDefinition" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">物料编码:</label></td>
+					<td class="width-35">
+						<form:input path="materialNumber" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">物料描述:</label></td>
+					<td class="width-35">
+						<form:input path="materialDescription" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">批次:</label></td>
+					<td class="width-35">
+						<form:input path="batch" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">计量单位:</label></td>
+					<td class="width-35">
+						<form:input path="unit" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">实发数量:</label></td>
+					<td class="width-35">
+						<form:input path="actualQuantityIssued" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">单价:</label></td>
+					<td class="width-35">
+						<form:input path="unitPrice" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">金额:</label></td>
+					<td class="width-35">
+						<form:input path="money" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">过账日期:</label></td>
+					<td class="width-35">
+						<form:input path="postingAccountDateStr" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">供应商名称:</label></td>
+					<td class="width-35">
+						<form:input path="supplierName" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">工厂:</label></td>
+					<td class="width-35">
+						<form:input path="factory" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">领料单号:</label></td>
+					<td class="width-35">
+						<form:input path="pickingNumber" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">领料单创建人:</label></td>
+					<td class="width-35">
+						<form:input path="pickingCreateBy" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">领料部门:</label></td>
+					<td class="width-35">
+						<form:input path="pickingDepartment" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">预留号:</label></td>
+					<td class="width-35">
+						<form:input path="reservedNumber" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">库存地点:</label></td>
+					<td class="width-35">
+						<form:input path="repertoryPlace" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目包名称:</label></td>
+					<td class="width-35">
+						<form:input path="projectPackageName" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">出库人:</label></td>
+					<td class="width-35">
+						<form:input path="stockOutPerson" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">wbs元素描述:</label></td>
+					<td class="width-35">
+						<form:input path="wbsElementDescription" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目二级分类:</label></td>
+					<td class="width-35">
+						<form:input path="projectSecondClassification" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目三级分类:</label></td>
+					<td class="width-35">
+						<form:input path="projectThirdlyClassification" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">订单号:</label></td>
+					<td class="width-35">
+						<form:input path="orderNumber" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">评估类型:</label></td>
+					<td class="width-35">
+						<form:input path="assessType" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">备注:</label></td>
+					<td class="width-35">
+						<form:input path="remarks" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">出库单输入日期:</label></td>
+					<td class="width-35">
+						<form:input path="stockOutImportDateStr" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">会计凭证:</label></td>
+					<td class="width-35">
+						<form:input path="accountantCertificate" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">可研批复文号:</label></td>
+					<td class="width-35">
+						<form:input path="replyProof" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">材料类型:</label></td>
+					<td class="width-35">
+						<form:input path="materialsType" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+				</tr>
+
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 10 - 1
src/main/webapp/webpage/modules/supply/particulars/supplyParticularsList.js

@@ -233,7 +233,16 @@
                 var index =  row.index
                 if("unitPrice" === field){
                     row.planMoney = (row.unitPrice * row.examineCount).toFixed(2)
-                    row.practicalMoney = (row.unitPrice * row.actualQuantityIssued).toFixed(2)
+                    if(row.commodityHandleTenet === '置换' || row.commodityHandleTenet === '核减施工费' ||
+                        row.commodityHandleTenet === '欠供不在发生' || row.commodityHandleTenet === '欠供转乙供'){
+                        //实际列入工程投资的材料金额  =  出库数*单价
+                        row.practicalMoney = (row.unitPrice * row.actualQuantityIssued).toFixed(2)
+                        $("table tbody").find("tr").eq(index-1).find("td").eq(10).html(row.practicalMoney);
+                    } else if(row.commodityHandleTenet === '退料' || row.commodityHandleTenet === '欠供补领'){
+                        //实际列入工程投资的材料金额  =  审定数*单价
+                        row.practicalMoney = (row.unitPrice * row.examineCount).toFixed(2)
+                        $("table tbody").find("tr").eq(index-1).find("td").eq(10).html(row.practicalMoney);
+                    }
                     $("table tbody").find("tr").eq(index-1).find("td").eq(9).html(row.planMoney);
                     $("table tbody").find("tr").eq(index-1).find("td").eq(10).html(row.practicalMoney);
 

+ 1 - 1
src/main/webapp/webpage/modules/supply/projectInformation/supplyProjectInformationList.js

@@ -335,7 +335,7 @@
                             var repeat = body.repeat;
                             var filePath = body.filePath;
                             if(repeat == 3) {
-                                jp.confirm('已存在物料数据,是否覆盖?', function () {
+                                jp.confirm('已存在项目数据,是否覆盖?', function () {
                                     jp.loading();
                                     jp.get("${ctx}/supply/projectInformation/importTwo?repeat=1&filePath="+filePath+"", function (data) {
                                         if (data.success) {