Bladeren bron

出库单、审定单代码上传

user5 3 jaren geleden
bovenliggende
commit
c69f776a4f
17 gewijzigde bestanden met toevoegingen van 1356 en 117 verwijderingen
  1. 43 43
      src/main/java/com/jeeplus/common/utils/excel/ImportExcel.java
  2. 92 0
      src/main/java/com/jeeplus/modules/supply/judgementBills/entity/SupplyJudgementBills.java
  3. 31 0
      src/main/java/com/jeeplus/modules/supply/judgementBills/mapper/SupplyJudgementBillsMapper.java
  4. 123 0
      src/main/java/com/jeeplus/modules/supply/judgementBills/mapper/xml/SupplyJudgementBillsMapper.xml
  5. 128 0
      src/main/java/com/jeeplus/modules/supply/judgementBills/service/SupplyJudgementBillsService.java
  6. 140 0
      src/main/java/com/jeeplus/modules/supply/judgementBills/web/SupplyJudgementBillsController.java
  7. 18 0
      src/main/java/com/jeeplus/modules/supply/stockOut/entity/SupplyStockOut.java
  8. 6 0
      src/main/java/com/jeeplus/modules/supply/stockOut/mapper/SupplyStockOutMapper.java
  9. 54 32
      src/main/java/com/jeeplus/modules/supply/stockOut/mapper/xml/SupplyStockOutMapper.xml
  10. 82 25
      src/main/java/com/jeeplus/modules/supply/stockOut/service/SupplyStockOutService.java
  11. 27 7
      src/main/java/com/jeeplus/modules/supply/stockOut/web/SupplyStockOutController.java
  12. 10 2
      src/main/resources/properties/jeeplus.properties
  13. 251 0
      src/main/webapp/webpage/modules/supply/judgementBills/supplyJudgementBillsList.js
  14. 81 0
      src/main/webapp/webpage/modules/supply/judgementBills/supplyJudgementBillsList.jsp
  15. 65 0
      src/main/webapp/webpage/modules/supply/judgementBills/supplyJudgementBillsView.jsp
  16. 20 8
      src/main/webapp/webpage/modules/supply/stockOut/supplyStockOutList.js
  17. 185 0
      src/main/webapp/webpage/modules/supply/stockOut/supplyStockOutView.jsp

+ 43 - 43
src/main/java/com/jeeplus/common/utils/excel/ImportExcel.java

@@ -45,44 +45,44 @@ import com.jeeplus.modules.sys.utils.UserUtils;
  * @version 2016-03-10
  */
 public class ImportExcel {
-	
+
 	private static Logger log = LoggerFactory.getLogger(ImportExcel.class);
-			
+
 	/**
 	 * 工作薄对象
 	 */
 	private Workbook wb;
-	
+
 	/**
 	 * 工作表对象
 	 */
 	private Sheet sheet;
-	
+
 	/**
 	 * 标题行号
 	 */
 	private int headerNum;
-	
+
 	/**
 	 * 构造函数
 	 * @param path 导入文件,读取第一个工作表
 	 * @param headerNum 标题行号,数据行号=标题行号+1
-	 * @throws InvalidFormatException 
-	 * @throws IOException 
+	 * @throws InvalidFormatException
+	 * @throws IOException
 	 */
-	public ImportExcel(String fileName, int headerNum) 
+	public ImportExcel(String fileName, int headerNum)
 			throws InvalidFormatException, IOException {
 		this(new File(fileName), headerNum);
 	}
-	
+
 	/**
 	 * 构造函数
 	 * @param path 导入文件对象,读取第一个工作表
 	 * @param headerNum 标题行号,数据行号=标题行号+1
-	 * @throws InvalidFormatException 
-	 * @throws IOException 
+	 * @throws InvalidFormatException
+	 * @throws IOException
 	 */
-	public ImportExcel(File file, int headerNum) 
+	public ImportExcel(File file, int headerNum)
 			throws InvalidFormatException, IOException {
 		this(file, headerNum, 0);
 	}
@@ -92,36 +92,36 @@ public class ImportExcel {
 	 * @param path 导入文件
 	 * @param headerNum 标题行号,数据行号=标题行号+1
 	 * @param sheetIndex 工作表编号
-	 * @throws InvalidFormatException 
-	 * @throws IOException 
+	 * @throws InvalidFormatException
+	 * @throws IOException
 	 */
-	public ImportExcel(String fileName, int headerNum, int sheetIndex) 
+	public ImportExcel(String fileName, int headerNum, int sheetIndex)
 			throws InvalidFormatException, IOException {
 		this(new File(fileName), headerNum, sheetIndex);
 	}
-	
+
 	/**
 	 * 构造函数
 	 * @param path 导入文件对象
 	 * @param headerNum 标题行号,数据行号=标题行号+1
 	 * @param sheetIndex 工作表编号
-	 * @throws InvalidFormatException 
-	 * @throws IOException 
+	 * @throws InvalidFormatException
+	 * @throws IOException
 	 */
-	public ImportExcel(File file, int headerNum, int sheetIndex) 
+	public ImportExcel(File file, int headerNum, int sheetIndex)
 			throws InvalidFormatException, IOException {
 		this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);
 	}
-	
+
 	/**
 	 * 构造函数
 	 * @param file 导入文件对象
 	 * @param headerNum 标题行号,数据行号=标题行号+1
 	 * @param sheetIndex 工作表编号
-	 * @throws InvalidFormatException 
-	 * @throws IOException 
+	 * @throws InvalidFormatException
+	 * @throws IOException
 	 */
-	public ImportExcel(MultipartFile multipartFile, int headerNum, int sheetIndex) 
+	public ImportExcel(MultipartFile multipartFile, int headerNum, int sheetIndex)
 			throws InvalidFormatException, IOException {
 		this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex);
 	}
@@ -131,20 +131,20 @@ public class ImportExcel {
 	 * @param path 导入文件对象
 	 * @param headerNum 标题行号,数据行号=标题行号+1
 	 * @param sheetIndex 工作表编号
-	 * @throws InvalidFormatException 
-	 * @throws IOException 
+	 * @throws InvalidFormatException
+	 * @throws IOException
 	 */
-	public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex) 
+	public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex)
 			throws InvalidFormatException, IOException {
 		if (StringUtils.isBlank(fileName)){
 			throw new RuntimeException("导入文档为空!");
-		}else if(fileName.toLowerCase().endsWith("xls")){    
-			this.wb = new HSSFWorkbook(is);    
-        }else if(fileName.toLowerCase().endsWith("xlsx")){  
+		}else if(fileName.toLowerCase().endsWith("xls")){
+			this.wb = new HSSFWorkbook(is);
+        }else if(fileName.toLowerCase().endsWith("xlsx")){
         	this.wb = new XSSFWorkbook(is);
-        }else{  
+        }else{
         	throw new RuntimeException("文档格式不正确!");
-        }  
+        }
 		if (this.wb.getNumberOfSheets()<sheetIndex){
 			throw new RuntimeException("文档中没有工作表!");
 		}
@@ -152,7 +152,7 @@ public class ImportExcel {
 		this.headerNum = headerNum;
 		log.debug("Initialize success.");
 	}
-	
+
 	/**
 	 * 获取行对象
 	 * @param rownum
@@ -169,7 +169,7 @@ public class ImportExcel {
 	public int getDataRowNum(){
 		return headerNum+1;
 	}
-	
+
 	/**
 	 * 获取最后一个数据行号
 	 * @return
@@ -177,7 +177,7 @@ public class ImportExcel {
 	public int getLastDataRowNum(){
 		return this.sheet.getLastRowNum()+headerNum;
 	}
-	
+
 	/**
 	 * 获取最后一个列号
 	 * @return
@@ -185,7 +185,7 @@ public class ImportExcel {
 	public int getLastCellNum(){
 		return this.getRow(headerNum).getLastCellNum();
 	}
-	
+
 	/**
 	 * 获取单元格值
 	 * @param row 获取的行
@@ -226,7 +226,7 @@ public class ImportExcel {
 		}
 		return val;
 	}
-	
+
 	/**
 	 * 获取导入数据列表
 	 * @param cls 导入对象类型
@@ -234,7 +234,7 @@ public class ImportExcel {
 	 */
 	public <E> List<E> getDataList(Class<E> cls, int... groups) throws InstantiationException, IllegalAccessException{
 		List<Object[]> annotationList = Lists.newArrayList();
-		// Get annotation field 
+		// Get annotation field
 		Field[] fs = cls.getDeclaredFields();
 		for (Field f : fs){
 			ExcelField ef = f.getAnnotation(ExcelField.class);
@@ -292,7 +292,7 @@ public class ImportExcel {
 		//log.debug("Import column count:"+annotationList.size());
 		// Get excel data
 		List<E> dataList = Lists.newArrayList();
-		for (int i = this.getDataRowNum(); i < this.getLastDataRowNum(); i++) {
+		for (int i = this.getDataRowNum(); i <= this.getLastDataRowNum(); i++) {
 			E e = (E)cls.newInstance();
 			int column = 0;
 			Row row = this.getRow(i);
@@ -338,7 +338,7 @@ public class ImportExcel {
 							val = Float.valueOf(val.toString());
 						}else if (valType == Date.class){
 							SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
-							val=sdf.parse(val.toString()); 
+							val=sdf.parse(val.toString());
 						}else if (valType == User.class){
 							val = UserUtils.getByUserName(val.toString());
 						}else if (valType == Office.class){
@@ -349,7 +349,7 @@ public class ImportExcel {
 							if (ef.fieldType() != Class.class){
 								val = ef.fieldType().getMethod("getValue", String.class).invoke(null, val.toString());
 							}else{
-								val = Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(), 
+								val = Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(),
 										"fieldtype."+valType.getSimpleName()+"Type")).getMethod("getValue", String.class).invoke(null, val.toString());
 							}
 						}
@@ -380,9 +380,9 @@ public class ImportExcel {
 //	 * 导入测试
 //	 */
 //	public static void main(String[] args) throws Throwable {
-//		
+//
 //		ImportExcel ei = new ImportExcel("target/export.xlsx", 1);
-//		
+//
 //		for (int i = ei.getDataRowNum(); i < ei.getLastDataRowNum(); i++) {
 //			Row row = ei.getRow(i);
 //			for (int j = 0; j < ei.getLastCellNum(); j++) {
@@ -391,7 +391,7 @@ public class ImportExcel {
 //			}
 //			System.out.print("\n");
 //		}
-//		
+//
 //	}
 
 }

+ 92 - 0
src/main/java/com/jeeplus/modules/supply/judgementBills/entity/SupplyJudgementBills.java

@@ -0,0 +1,92 @@
+package com.jeeplus.modules.supply.judgementBills.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 审定单表
+ * @author: 徐滕
+ * @create: 2022-02-28 15:38
+ **/
+public class SupplyJudgementBills extends DataEntity<SupplyJudgementBills> {
+    private String serialNumber;            //序号
+    private String materialNumber;          //varchar(255) 物料编码
+    private String materialDescription;     //varchar(500) 物料描述
+    public String  examineCount;            //varchar(255) 审定数量
+    private String unit;                    //varchar(255) 单位
+    private String projectDefinition;       //varchar(255) 项目定义号
+    private String projectName;             //varchar(255) 项目名称
+    private String submittalsId;            //varchar(255) 送审id
+
+    @ExcelField(title="序号", align=2, sort=1)
+    public String getSerialNumber() {
+        return serialNumber;
+    }
+
+    @ExcelField(title="物料编码", align=2, sort=2)
+    public String getMaterialNumber() {
+        return materialNumber;
+    }
+
+    @ExcelField(title="物料描述", align=2, sort=3)
+    public String getMaterialDescription() {
+        return materialDescription;
+    }
+
+    @ExcelField(title="审定数量", align=2, sort=4)
+    public String getExamineCount() {
+        return examineCount;
+    }
+
+    @ExcelField(title="单位", align=2, sort=5)
+    public String getUnit() {
+        return unit;
+    }
+
+    @ExcelField(title="项目定义号", align=2, sort=6)
+    public String getProjectDefinition() {
+        return projectDefinition;
+    }
+
+    @ExcelField(title="项目名称", align=2, sort=7)
+    public String getProjectName() {
+        return projectName;
+    }
+
+    @ExcelField(title="送审Id", align=2, sort=8)
+    public String getSubmittalsId() {
+        return submittalsId;
+    }
+
+    public void setSerialNumber(String serialNumber) {
+        this.serialNumber = serialNumber;
+    }
+
+    public void setMaterialNumber(String materialNumber) {
+        this.materialNumber = materialNumber;
+    }
+
+    public void setMaterialDescription(String materialDescription) {
+        this.materialDescription = materialDescription;
+    }
+
+    public void setExamineCount(String examineCount) {
+        this.examineCount = examineCount;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public void setProjectDefinition(String projectDefinition) {
+        this.projectDefinition = projectDefinition;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public void setSubmittalsId(String submittalsId) {
+        this.submittalsId = submittalsId;
+    }
+}

+ 31 - 0
src/main/java/com/jeeplus/modules/supply/judgementBills/mapper/SupplyJudgementBillsMapper.java

@@ -0,0 +1,31 @@
+package com.jeeplus.modules.supply.judgementBills.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.supply.judgementBills.entity.SupplyJudgementBills;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author: 大猫
+ * @create: 2022-02-28 16:00
+ **/
+@MyBatisMapper
+public interface SupplyJudgementBillsMapper extends BaseMapper<SupplyJudgementBills> {
+
+    List<String> getProjectDefinitionList(@Param("list") List<String> getProjectDefinitionList);
+
+    /**
+     * 批量新增
+     * @param list
+     * @return
+     */
+    Integer insertList(@Param("list") List<SupplyJudgementBills> list);
+
+    /**
+     * 批量删除
+     * @param list
+     */
+    void deleteByIdList(@Param("list") List<String> list);
+}

+ 123 - 0
src/main/java/com/jeeplus/modules/supply/judgementBills/mapper/xml/SupplyJudgementBillsMapper.xml

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.supply.judgementBills.mapper.SupplyJudgementBillsMapper">
+
+    <sql id="infoColumns">
+        a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+        a.project_name AS "projectName",
+        a.project_definition AS "projectDefinition",
+        a.examine_count AS "examineCount",
+        a.material_number AS "materialNumber",
+        a.submittals_id AS "submittalsId"
+    </sql>
+
+
+
+    <select id="get" resultType="com.jeeplus.modules.supply.judgementBills.entity.SupplyJudgementBills">
+        SELECT
+        <include refid="infoColumns"/>
+        ,mi.material_description as "materialDescription"
+        ,mi.unit_of_measurement as "unit"
+        FROM supply_judgement_bills a
+        left join material_library mi on a.material_number = mi.material_code
+        WHERE a.id = #{id}
+    </select>
+
+    <select id="findList" resultType="com.jeeplus.modules.supply.judgementBills.entity.SupplyJudgementBills">
+        SELECT
+        <include refid="infoColumns"/>
+        ,mi.material_description as "materialDescription"
+        ,mi.unit_of_measurement as "unit"
+        FROM supply_judgement_bills a
+        left join material_library mi on a.material_number = mi.material_code
+        <where>
+            a.del_flag = #{DEL_FLAG_NORMAL}
+            ${dataScope}
+            <if test="materialNumber != null and materialNumber != ''">
+                AND a.material_number LIKE CONCAT('%',#{materialNumber},'%')
+            </if>
+            <if test="projectDefinition != null and projectDefinition != ''">
+                AND a.project_definition LIKE CONCAT('%',#{projectDefinition},'%')
+            </if>
+            <if test="submittalsId != null and submittalsId != ''">
+                AND a.submittals_id LIKE CONCAT('%',#{submittalsId},'%')
+            </if>
+        </where>
+        <choose>
+            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
+                ORDER BY ${page.orderBy}
+            </when>
+            <otherwise>
+                ORDER BY a.material_number asc,a.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+
+    <select id="getProjectDefinitionList" resultType="java.lang.String">
+        select project_definition_number from project_information
+        WHERE project_definition_number in
+        <foreach collection="list" item="projectDefinition" index="index" open="(" separator="," close=")">
+            #{projectDefinition}
+        </foreach>
+    </select>
+
+    <insert id="insertList">
+        insert into supply_judgement_bills (
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        remarks,
+        material_number,
+        material_description,
+        examine_count,
+        unit,
+        project_definition,
+        project_name,
+        submittals_id
+        )
+        values
+        <foreach collection="list" item="item" index="index" separator="," >
+            (
+            #{item.id},
+            #{item.createBy.id},
+            #{item.createDate},
+            #{item.updateBy.id},
+            #{item.updateDate},
+            #{item.remarks},
+            #{item.materialNumber},
+            #{item.materialDescription},
+            #{item.examineCount},
+            #{item.unit},
+            #{item.projectDefinition},
+            #{item.projectName},
+            #{item.submittalsId}
+            )
+        </foreach>
+    </insert>
+
+    <!--物理删除-->
+    <update id="delete">
+        DELETE
+        FROM supply_judgement_bills
+        WHERE id = #{id}
+    </update>
+
+    <!--物理删除-->
+    <update id="deleteByIdList">
+        DELETE
+        FROM supply_judgement_bills
+        WHERE id in
+        <foreach collection="list" item="id" index="index" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>

+ 128 - 0
src/main/java/com/jeeplus/modules/supply/judgementBills/service/SupplyJudgementBillsService.java

@@ -0,0 +1,128 @@
+package com.jeeplus.modules.supply.judgementBills.service;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.supply.judgementBills.entity.SupplyJudgementBills;
+import com.jeeplus.modules.supply.judgementBills.mapper.SupplyJudgementBillsMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author: 大猫
+ * @create: 2022-02-28 15:59
+ **/
+@Service
+@Transactional(readOnly = true)
+public class SupplyJudgementBillsService extends CrudService<SupplyJudgementBillsMapper, SupplyJudgementBills> {
+
+    @Override
+    public Page<SupplyJudgementBills> findPage(Page<SupplyJudgementBills> page, SupplyJudgementBills supplyJudgementBills) {
+        return super.findPage(page, supplyJudgementBills);
+    }
+
+
+    /**
+     * 导入物料库Excel数据
+     * @param judgementBillsList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public Map disposeJudgementBills(List<SupplyJudgementBills> judgementBillsList){
+        Map map = new HashMap();
+        Set set = new HashSet<>();
+        Iterator<SupplyJudgementBills> it = judgementBillsList.iterator();
+        //删除项目编号为空的数据信息
+        while(it.hasNext()){
+            SupplyJudgementBills info = it.next();
+            if(StringUtils.isBlank(info.getMaterialNumber())){//判定物料编码是否为空
+
+                map.put("success",false);
+                map.put("message","存在物料编码为空的数据,请确认后重新提交");
+                return map;
+            } else if(StringUtils.isBlank(info.getExamineCount())){//判定审定数量是否为空
+
+                map.put("success",false);
+                map.put("message","存在审定数量为空的数据,请确认后重新提交");
+                return map;
+            } else if(StringUtils.isBlank(info.getProjectDefinition())){//判定项目定义号是否为空
+
+                map.put("success",false);
+                map.put("message","存在项目定义号为空的数据,请确认后重新提交");
+                return map;
+            }else {
+                //将项目定义号添加到set中
+                set.add(info.getProjectDefinition());
+                info.preInsert();
+            }
+        }
+        //查询项目定义号对应的项目信息
+        List<String> projectDefinitionList = new ArrayList(set);
+        List<String> projectDefinitionInfoList = mapper.getProjectDefinitionList(projectDefinitionList);
+        String projectDefinitions = StringUtils.join(projectDefinitionInfoList);
+
+        List<String> nonentityProjectDefinitionList = Lists.newArrayList();
+        //判断项目信息和数据库中的项目信息数量是否一致,不一致则找到对应信息并进行提示
+        if(projectDefinitionList.size() != projectDefinitionInfoList.size()){
+            for (String projectDefinition : projectDefinitionList) {
+                //判定上传的信息中的项目定义号是否包含在数据库中
+                if(!projectDefinitions.contains(projectDefinition)){
+                    nonentityProjectDefinitionList.add(projectDefinition);
+                }
+            }
+            String nonentityProjectDefinitions = StringUtils.join(nonentityProjectDefinitionList);
+            map.put("success",false);
+            map.put("message","查询不到项目定义号为:" + nonentityProjectDefinitions + " 的项目信息。请先上传对应项目信息");
+            return map;
+        }
+        //批量处理
+        disposeStockOutList(judgementBillsList);
+        map.put("success",true);
+        return map;
+    }
+
+
+    /**
+     * 批量处理物料库数据信息
+     * @param judgementBillsList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String disposeStockOutList(List<SupplyJudgementBills> judgementBillsList){
+        //分批处理
+        if(null!=judgementBillsList && judgementBillsList.size()>0){
+            int pointsDataLimit = 1000;//限制条数
+            Integer size = judgementBillsList.size();
+            //判断是否有必要分批
+            if(pointsDataLimit<size){
+                int part = size/pointsDataLimit;//分批数
+                //
+                for (int i = 0; i < part; i++) {
+                    //1000条
+                    List<SupplyJudgementBills> listPage = judgementBillsList.subList(0, pointsDataLimit);
+                    mapper.insertList(listPage);
+                    //剔除
+                    judgementBillsList.subList(0, pointsDataLimit).clear();
+                }
+                if(!judgementBillsList.isEmpty()){
+                    mapper.insertList(judgementBillsList);
+                }
+            }else{
+                mapper.insertList(judgementBillsList);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 批量删除
+     * @param idList
+     */
+    @Transactional(readOnly = false)
+    public void deleteByIdList(List<String> idList){
+        mapper.deleteByIdList(idList);
+    }
+}

+ 140 - 0
src/main/java/com/jeeplus/modules/supply/judgementBills/web/SupplyJudgementBillsController.java

@@ -0,0 +1,140 @@
+package com.jeeplus.modules.supply.judgementBills.web;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.supply.judgementBills.entity.SupplyJudgementBills;
+import com.jeeplus.modules.supply.judgementBills.service.SupplyJudgementBillsService;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 审定单 controller
+ * @author: 徐滕
+ * @create: 2022-02-28 15:55
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/supply/judgementBills")
+public class SupplyJudgementBillsController extends BaseController {
+    @Autowired
+    private SupplyJudgementBillsService service;
+
+    @ModelAttribute
+    public SupplyJudgementBills get(@RequestParam(required = false) String id) {
+        SupplyJudgementBills entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = service.get(id);
+        }
+        if (entity == null) {
+            entity = new SupplyJudgementBills();
+        }
+        return entity;
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("supply:judgementBills:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(SupplyJudgementBills supplyJudgementBills, Model model) {
+        model.addAttribute("supplyJudgementBills", supplyJudgementBills);
+        return "modules/supply/judgementBills/supplyJudgementBillsList";
+    }
+
+    /**
+     * 列表数据
+     */
+    @ResponseBody
+    @RequiresPermissions("supply:judgementBills:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(SupplyJudgementBills supplyJudgementBills, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<SupplyJudgementBills> page = service.findPage(new Page<SupplyJudgementBills>(request, response), supplyJudgementBills);
+        return getBootstrapData(page);
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("supply:judgementBills:view")
+    @RequestMapping(value = "view")
+    public String view(SupplyJudgementBills supplyJudgementBills, Model model) {
+        model.addAttribute("supplyJudgementBills", supplyJudgementBills);
+        return "modules/supply/judgementBills/supplyJudgementBillsView";
+    }
+
+
+
+    /**
+     * 删除项目
+     */
+    @ResponseBody
+    @RequiresPermissions("supply:judgementBills:del")
+    @RequestMapping(value = "delete")
+    public AjaxJson delete(SupplyJudgementBills supplyJudgementBills) {
+        AjaxJson j = new AjaxJson();
+        service.delete(supplyJudgementBills);
+        j.setMsg("删除成功");
+        return j;
+    }
+
+    /**
+     * 批量删除
+     */
+    @ResponseBody
+    @RequiresPermissions("supply:judgementBills:del")
+    @RequestMapping(value = "deleteAll")
+    public AjaxJson deleteAll(String ids) {
+        AjaxJson j = new AjaxJson();
+        String[] idArray = ids.split(",");
+        List idList = Arrays.asList(idArray);
+        service.deleteByIdList(idList);
+        j.setMsg("删除成功");
+        return j;
+    }
+
+    /**
+     * 导入年度物资上报Excel数据-根据条件自动发送流程
+     */
+    @ResponseBody
+    @RequiresPermissions("supply:judgementBills:import")
+    @RequestMapping(value = "import")
+    public AjaxJson importFile(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportExcel ei = new ImportExcel(file, 0, 0);
+            List<SupplyJudgementBills> list = ei.getDataList(SupplyJudgementBills.class);
+            Map<String,Object> map = service.disposeJudgementBills(list);
+            Boolean bool = (Boolean) map.get("success");
+            if(bool){
+                j.setMsg("已成功导入 " + list.size() +" 条审定单记录");
+            }else{
+                j.setMsg(map.get("message").toString());
+            }
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入审定单失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+}

+ 18 - 0
src/main/java/com/jeeplus/modules/supply/stockOut/entity/SupplyStockOut.java

@@ -43,8 +43,10 @@ public class SupplyStockOut extends DataEntity<SupplyStockOut> {
     private String assessType;              //varchar(255) 评估类型
     private String remarks;                 //varchar(255) 备注
     private Date stockOutImportDate;        //datetime 出库单输入日期
+    private String stockOutImportDateStr;        //datetime 出库单输入日期
     private String accountantCertificate;   //varchar(255) 会计凭证
     private String replyProof;              //varchar(255) 可研批复文号
+    private String materialsType;              //varchar(255) 材料类型
     private Date beginDate;                 //开始时间
     private Date endDate;                   //结束事件
 
@@ -347,6 +349,14 @@ public class SupplyStockOut extends DataEntity<SupplyStockOut> {
         this.replyProof = replyProof;
     }
 
+    public String getMaterialsType() {
+        return materialsType;
+    }
+
+    public void setMaterialsType(String materialsType) {
+        this.materialsType = materialsType;
+    }
+
     public Date getBeginDate() {
         return beginDate;
     }
@@ -370,4 +380,12 @@ public class SupplyStockOut extends DataEntity<SupplyStockOut> {
     public void setPostingAccountDateStr(String postingAccountDateStr) {
         this.postingAccountDateStr = postingAccountDateStr;
     }
+
+    public String getStockOutImportDateStr() {
+        return stockOutImportDateStr;
+    }
+
+    public void setStockOutImportDateStr(String stockOutImportDateStr) {
+        this.stockOutImportDateStr = stockOutImportDateStr;
+    }
 }

+ 6 - 0
src/main/java/com/jeeplus/modules/supply/stockOut/mapper/SupplyStockOutMapper.java

@@ -21,4 +21,10 @@ public interface SupplyStockOutMapper extends BaseMapper<SupplyStockOut> {
      * @param list
      */
     void insertOrUpdateList(@Param("list") List<SupplyStockOut> list);
+
+    /**
+     * 批量删除
+     * @param list
+     */
+    void deleteByIdList(@Param("list") List<String> list);
 }

+ 54 - 32
src/main/java/com/jeeplus/modules/supply/stockOut/mapper/xml/SupplyStockOutMapper.xml

@@ -38,8 +38,10 @@
         a.order_number AS "orderNumber",
         a.assess_type AS "assessType",
         a.stock_out_import_date AS "stockOutImportDate",
+        DATE_FORMAT(a.stock_out_import_date,'%Y-%m-%d') AS "stockOutImportDateStr",
         a.accountant_certificate AS "accountantCertificate",
-        a.reply_proof AS "replyProof"
+        a.reply_proof AS "replyProof",
+        a.materials_type AS "materialsType"
     </sql>
 
 
@@ -59,7 +61,7 @@
             a.del_flag = #{DEL_FLAG_NORMAL}
             ${dataScope}
             <if test="projectDefinition != null and projectDefinition != ''">
-                AND a.projectDefinition LIKE CONCAT(CONCAT('%',#{projectDefinition},'%'))
+                AND a.project_definition LIKE CONCAT('%',#{projectDefinition},'%')
             </if>
 
             <if test="beginDate != null ">
@@ -74,7 +76,7 @@
                 ORDER BY ${page.orderBy}
             </when>
             <otherwise>
-                ORDER BY a.update_date DESC
+                ORDER BY a.stock_out_number asc,a.update_date DESC
             </otherwise>
         </choose>
     </select>
@@ -115,7 +117,8 @@
         create_by,
         create_date,
         update_by,
-        update_date
+        update_date,
+        materials_type
         )
         values
         <foreach collection="list" item="item" index="index" separator="," >
@@ -154,7 +157,8 @@
             #{item.createBy.id},
             #{item.createDate},
             #{item.updateBy.id},
-            #{item.updateDate}
+            #{item.updateDate},
+            #{item.materialsType}
             )
         </foreach>
     </insert>
@@ -181,7 +185,7 @@
             picking_department,
             reserved_number,
             repertory_place,
-            Project_package_name,
+            project_package_name,
             stock_out_person,
             wbs_element_description,
             project_second_classification,
@@ -218,7 +222,7 @@
             #{item.pickingDepartment},
             #{item.reservedNumber},
             #{item.repertoryPlace},
-            #{item.ProjectPackageName},
+            #{item.projectPackageName},
             #{item.stockOutPerson},
             #{item.wbsElementDescription},
             #{item.projectSecondClassification},
@@ -237,36 +241,36 @@
             DUPLICATE KEY
             update supply_stock_out
             set
-            stock_out_number = #{item.stock_out_number},
-            wbs_element = #{item.wbs_element},
-            project_name = #{item.project_name},
-            project_definition = #{item.project_definition},
-            material_number = #{item.material_number},
-            material_description = #{item.material_description},
+            stock_out_number = #{item.stockOutNumber},
+            wbs_element = #{item.wbsElement},
+            project_name = #{item.projectName},
+            project_definition = #{item.projectDefinition},
+            material_number = #{item.materialNumber},
+            material_description = #{item.materialDescription},
             batch = #{item.batch},
             unit = #{item.unit},
-            actual_quantity_issued = #{item.actual_quantity_issued},
-            unit_price = #{item.unit_price},
+            actual_quantity_issued = #{item.actualQuantityIssued},
+            unit_price = #{item.unitPrice},
             money = #{item.money},
-            posting_account_date = #{item.posting_account_date},
-            supplier_name = #{item.supplier_name},
+            posting_account_date = #{item.postingAccountDate},
+            supplier_name = #{item.supplierName},
             factory = #{item.factory},
-            picking_number = #{item.picking_number},
-            picking_create_by = #{item.picking_create_by},
-            picking_department = #{item.picking_department},
-            reserved_number = #{item.reserved_number},
-            repertory_place = #{item.repertory_place},
-            project_package_name = #{item.project_package_name},
-            stock_out_person = #{item.stock_out_person},
-            wbs_element_description = #{item.wbs_element_description},
-            project_second_classification = #{item.project_second_classification},
-            project_thirdly_classification = #{item.project_thirdly_classification},
-            order_number = #{item.order_number},
-            assess_type = #{item.assess_type},
+            picking_number = #{item.pickingNumber},
+            picking_create_by = #{item.pickingCreateBy},
+            picking_department = #{item.pickingDepartment},
+            reserved_number = #{item.reservedNumber},
+            repertory_place = #{item.repertoryPlace},
+            project_package_name = #{item.projectPackageName},
+            stock_out_person = #{item.stockOutPerson},
+            wbs_element_description = #{item.wbsElementDescription},
+            project_second_classification = #{item.projectSecondClassification},
+            project_thirdly_classification = #{item.projectThirdlyClassification},
+            order_number = #{item.orderNumber},
+            assess_type = #{item.assessType},
             remarks = #{item.remarks},
-            stock_out_import_date = #{item.stock_out_import_date},
-            accountant_certificate = #{item.accountant_certificate},
-            reply_proof = #{item.reply_proof},
+            stock_out_import_date = #{item.stockOutImportDate},
+            accountant_certificate = #{item.accountantCertificate},
+            reply_proof = #{item.replyProof},
             create_by = #{item.createBy.id},
             create_date = #{item.createDate},
             update_by = #{item.updateBy.id},
@@ -275,4 +279,22 @@
         </foreach>
     </update>
 
+
+    <!--物理删除-->
+    <update id="delete">
+        DELETE
+        FROM supply_stock_out
+        WHERE id = #{id}
+    </update>
+
+    <!--物理删除-->
+    <update id="deleteByIdList">
+        DELETE
+        FROM supply_stock_out
+        WHERE id in
+        <foreach collection="list" item="id" index="index" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
 </mapper>

+ 82 - 25
src/main/java/com/jeeplus/modules/supply/stockOut/service/SupplyStockOutService.java

@@ -1,15 +1,17 @@
 package com.jeeplus.modules.supply.stockOut.service;
 
+import com.google.common.collect.Lists;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.core.persistence.Page;
 import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.supply.judgementBills.mapper.SupplyJudgementBillsMapper;
 import com.jeeplus.modules.supply.stockOut.entity.SupplyStockOut;
 import com.jeeplus.modules.supply.stockOut.mapper.SupplyStockOutMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author: 徐滕
@@ -19,6 +21,9 @@ import java.util.List;
 @Transactional(readOnly = true)
 public class SupplyStockOutService  extends CrudService<SupplyStockOutMapper, SupplyStockOut> {
 
+    @Autowired
+    private SupplyJudgementBillsMapper supplyJudgementBillsMapper;
+
     @Override
     public Page<SupplyStockOut> findPage(Page<SupplyStockOut> page, SupplyStockOut supplyStockOut) {
         return super.findPage(page, supplyStockOut);
@@ -35,57 +40,109 @@ public class SupplyStockOutService  extends CrudService<SupplyStockOutMapper, Su
 
 
     /**
-     * 导入人工维护Excel数据
-     * @param handmadeVindicateList
+     * 导入物料库Excel数据
+     * @param stockOutList
      * @return
      */
     @Transactional(readOnly = false)
-    public String disposeHandmadeVindicateInfo(List<SupplyStockOut> handmadeVindicateList){
-        Iterator<SupplyStockOut> it = handmadeVindicateList.iterator();
+    public Map disposeStockOut(List<SupplyStockOut> stockOutList){
+        Map map = new HashMap();
+        Set set = new HashSet<>();
+        Iterator<SupplyStockOut> it = stockOutList.iterator();
         //删除项目编号为空的数据信息
         while(it.hasNext()){
             SupplyStockOut info = it.next();
-            if(StringUtils.isBlank(info.getProjectDefinition())){//判定项目定义号是否为空,为空则删除该条记录
-                it.remove();
-            }else{
-                info.preInsert();//添加修改人和时间记录信息
+            if(StringUtils.isBlank(info.getStockOutNumber())){//判定出库单编号是否为空
+
+                map.put("success",false);
+                map.put("message","存在出库单编号为空的数据,请确认后重新提交");
+                return map;
+            } else if(StringUtils.isBlank(info.getProjectDefinition())){//判定项目定义号是否为空
+
+                map.put("success",false);
+                map.put("message","存在项目定义号为空的数据,请确认后重新提交");
+                return map;
+            }else {
+                //将项目定义号添加到set中
+                set.add(info.getProjectDefinition());
+                //冲击力材料类型
+                if(StringUtils.isNotBlank(info.getAssessType())){
+                    if(info.getAssessType().contains("材料")){
+                        info.setMaterialsType("材料");
+                    } else if (info.getAssessType().contains("设备")){
+                        info.setMaterialsType("设备");
+                    } else {
+                        info.setMaterialsType("");
+                    }
+                }
+                info.preInsert();
             }
         }
-        //批量修改(人工维护)
-        modifyHandmadeVindicateList(handmadeVindicateList);
-        return null;
+        //查询项目定义号对应的项目信息
+        List<String> projectDefinitionList = new ArrayList(set);
+        List<String> projectDefinitionInfoList = supplyJudgementBillsMapper.getProjectDefinitionList(projectDefinitionList);
+        String projectDefinitions = StringUtils.join(projectDefinitionInfoList);
+
+        List<String> nonentityProjectDefinitionList = Lists.newArrayList();
+        //判断项目信息和数据库中的项目信息数量是否一致,不一致则找到对应信息并进行提示
+        if(projectDefinitionList.size() != projectDefinitionInfoList.size()){
+            for (String projectDefinition : projectDefinitionList) {
+                //判定上传的信息中的项目定义号是否包含在数据库中
+                if(!projectDefinitions.contains(projectDefinition)){
+                    nonentityProjectDefinitionList.add(projectDefinition);
+                }
+            }
+            String nonentityProjectDefinitions = StringUtils.join(nonentityProjectDefinitionList);
+            map.put("success",false);
+            map.put("message","查询不到项目定义号为:" + nonentityProjectDefinitions + " 的项目信息。请先上传对应项目信息");
+            return map;
+        }
+
+        //批量处理
+        disposeStockOutList(stockOutList);
+        map.put("success",true);
+        return map;
     }
 
 
     /**
-     * 批量修改手工上传数据信息
-     * @param projectBasicsList
+     * 批量处理物料库数据信息
+     * @param stockOutList
      * @return
      */
     @Transactional(readOnly = false)
-    public String modifyHandmadeVindicateList(List<SupplyStockOut> projectBasicsList){
+    public String disposeStockOutList(List<SupplyStockOut> stockOutList){
         //分批处理
-        if(null!=projectBasicsList && projectBasicsList.size()>0){
-            int pointsDataLimit = 100;//限制条数
-            Integer size = projectBasicsList.size();
+        if(null!=stockOutList && stockOutList.size()>0){
+            int pointsDataLimit = 1000;//限制条数
+            Integer size = stockOutList.size();
             //判断是否有必要分批
             if(pointsDataLimit<size){
                 int part = size/pointsDataLimit;//分批数
                 //
                 for (int i = 0; i < part; i++) {
-                    //100条
-                    List<SupplyStockOut> listPage = projectBasicsList.subList(0, pointsDataLimit);
+                    //1000
+                    List<SupplyStockOut> listPage = stockOutList.subList(0, pointsDataLimit);
                     mapper.insertList(listPage);
                     //剔除
-                    projectBasicsList.subList(0, pointsDataLimit).clear();
+                    stockOutList.subList(0, pointsDataLimit).clear();
                 }
-                if(!projectBasicsList.isEmpty()){
-                    mapper.insertList(projectBasicsList);
+                if(!stockOutList.isEmpty()){
+                    mapper.insertList(stockOutList);
                 }
             }else{
-                mapper.insertList(projectBasicsList);
+                mapper.insertList(stockOutList);
             }
         }
         return null;
     }
+
+    /**
+     * 批量删除
+     * @param idList
+     */
+    @Transactional(readOnly = false)
+    public void deleteByIdList(List<String> idList){
+        mapper.deleteByIdList(idList);
+    }
 }

+ 27 - 7
src/main/java/com/jeeplus/modules/supply/stockOut/web/SupplyStockOutController.java

@@ -10,6 +10,7 @@ import com.jeeplus.core.persistence.Page;
 import com.jeeplus.core.web.BaseController;
 import com.jeeplus.modules.supply.stockOut.entity.SupplyStockOut;
 import com.jeeplus.modules.supply.stockOut.service.SupplyStockOutService;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -22,6 +23,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -66,6 +69,16 @@ public class SupplyStockOutController extends BaseController {
         return getBootstrapData(page);
     }
 
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("supply:stockOut:view")
+    @RequestMapping(value = "view")
+    public String view(SupplyStockOut supplyStockOut, Model model) {
+        model.addAttribute("supplyStockOut", supplyStockOut);
+        return "modules/supply/stockOut/supplyStockOutView";
+    }
+
 
 
     /**
@@ -77,7 +90,7 @@ public class SupplyStockOutController extends BaseController {
     public AjaxJson delete(SupplyStockOut supplyStockOut) {
         AjaxJson j = new AjaxJson();
         supplyStockOutService.delete(supplyStockOut);
-        j.setMsg("删除项目成功");
+        j.setMsg("删除成功");
         return j;
     }
 
@@ -90,9 +103,11 @@ public class SupplyStockOutController extends BaseController {
     public AjaxJson deleteAll(String ids) {
         AjaxJson j = new AjaxJson();
         String[] idArray = ids.split(",");
-        for (String id : idArray) {
+        List idList = Arrays.asList(idArray);
+        supplyStockOutService.deleteByIdList(idList);
+        /*for (String id : idArray) {
             supplyStockOutService.delete(supplyStockOutService.get(id));
-        }
+        }*/
         j.setMsg("删除成功");
         return j;
     }
@@ -106,13 +121,18 @@ public class SupplyStockOutController extends BaseController {
     public AjaxJson importFile(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
         AjaxJson j = new AjaxJson();
         try {
-            ImportExcel ei = new ImportExcel(file, 1, 0);
+            ImportExcel ei = new ImportExcel(file, 0, 0);
             List<SupplyStockOut> list = ei.getDataList(SupplyStockOut.class);
-            supplyStockOutService.disposeHandmadeVindicateInfo(list);
-            j.setMsg("已成功导入 1 条项目表单记录");
+            Map<String,Object> map = supplyStockOutService.disposeStockOut(list);
+            Boolean bool = (Boolean) map.get("success");
+            if(bool){
+                j.setMsg("已成功导入 " + list.size() +" 条出库单记录");
+            }else{
+                j.setMsg(map.get("message").toString());
+            }
         } catch (Exception e) {
             j.setSuccess(false);
-            j.setMsg("导入项目表单失败!失败信息:" + e.getMessage());
+            j.setMsg("导入出库单失败!失败信息:" + e.getMessage());
         }
         return j;
     }

+ 10 - 2
src/main/resources/properties/jeeplus.properties

@@ -14,9 +14,9 @@
 #mysql database setting
 jdbc.type=mysql
 jdbc.driver=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://127.0.0.1:3306/njsupply?useUnicode=true&characterEncoding=utf-8
+jdbc.url=jdbc:mysql://192.168.2.7:3306/njSupply?useUnicode=true&characterEncoding=utf-8
 jdbc.username=root
-jdbc.password=123456
+jdbc.password=root
 jdbc.testSql=SELECT 'x'
 jdbc.dual =
 
@@ -122,3 +122,11 @@ spring.http.multipart.max-file-size=100MB
 spring.http.multipart.max-request-size=100MB
 #\u6388\u6743\u57DF\u540D
 domain.url=
+
+
+remoteServer.host = 127.0.0.1
+
+remoteServer.winDirectory =d:/attachment-file
+
+remoteServer.directory =/attachment-file
+

+ 251 - 0
src/main/webapp/webpage/modules/supply/judgementBills/supplyJudgementBillsList.js

@@ -0,0 +1,251 @@
+<%@ 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: true,
+            //显示刷新按钮
+            showRefresh: true,
+            //显示切换手机试图按钮
+            showToggle: true,
+            //显示 内容列下拉框
+            showColumns: true,
+            //显示到处按钮
+            showExport: true,
+            //显示切换分页按钮
+            showPaginationSwitch: true,
+            //最低显示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/judgementBills/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/judgementBills/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: 'materialNumber',
+                title: '物料编码',
+                width:100,
+                sortName: 'materialNumber',
+                formatter:function(value, row , index) {
+                    value = jp.unescapeHTML(value);
+                <c:choose>
+                    <c:when test="${fns:hasPermission('supply:judgementBills:view')}">
+                    return "<a href='javascript:view(\"" + row.id + "\")'>" + value + "</a>";
+                </c:when>
+                    <c:otherwise>
+                    return value;
+                </c:otherwise>
+                    </c:choose>
+
+                }
+            },{
+                    field: 'materialDescription',
+                    title: '物料描述',
+                    width:150,
+                    sortName: 'materialDescription'
+                }
+                ,{
+                    field: 'examineCount',
+                    title: '审定数量',
+                    width:100,
+                    sortName: 'examineCount'
+                }
+                ,{
+                    field: 'unit',
+                    title: '单位',
+                    width:100,
+                    sortName: 'unit'
+                }
+                ,{
+                    field: 'projectDefinition',
+                    title: '项目定义号',
+                    width:150,
+                    sortName: 'projectDefinition'
+                }
+                ,{
+                    field: 'projectName',
+                    title: '项目名称',
+                    width:120,
+                    sortName: 'projectName'
+                }
+                ,{
+                    field: 'submittalsId',
+                    title: '送审Id',
+                    width:100,
+                    sortName: 'submittalsId'
+                }
+            ]
+
+        });
+
+        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/judgementBills/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文件物料
+            jp.downloadFile('${ctx}/supply/judgementBills/export');
+        });
+        $("#exportpro").click(function(){//导出Excel文件
+            jp.downloadFile('${ctx}/supply/judgementBills/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');
+        });
+    });
+
+
+function getIdSelections() {
+    return $.map($("#dataTable").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+
+function deleteAll(){
+    jp.confirm('确认要删除该记录信息吗?', function(){
+        jp.loading();
+        jp.get("${ctx}/supply/judgementBills/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/judgementBills/form",'800px', '500px');
+}
+
+
+
+function edit(id){//没有权限时,不显示确定按钮
+    if(id == undefined){
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑', "${ctx}/supply/judgementBills/form?id=" + id, '800px', '500px');
+}
+
+function view(id){//没有权限时,不显示确定按钮
+    if(id == undefined){
+        id = getIdSelections();
+    }
+    jp.openViewDialog('查看', "${ctx}/supply/judgementBills/view?id=" + id, '800px', '500px');
+}
+
+</script>

+ 81 - 0
src/main/webapp/webpage/modules/supply/judgementBills/supplyJudgementBillsList.jsp

@@ -0,0 +1,81 @@
+<%@ 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="supplyJudgementBillsList.js" %>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">审定单列表</h3>
+	</div>
+	<div class="panel-body">
+
+	<!-- 搜索 -->
+	<div id="search-collapse" class="collapse">
+		<div class="accordion-inner">
+			<form:form id="searchForm" modelAttribute="supplyJudgementBills" class="form form-horizontal well clearfix">
+			    <div class="col-xs-12 col-sm-4 col-md-4">
+				   <label class="label-item single-overflow pull-left" title="物料编码:">物料编码:</label>
+				   <form:input path="materialNumber" htmlEscape="false" maxlength="64"  class=" form-control"/>
+			    </div>
+				<div class="col-xs-12 col-sm-4 col-md-4">
+					<label class="label-item single-overflow pull-left" title="项目定义号:">项目定义号:</label>
+					<form:input path="projectDefinition" htmlEscape="false" maxlength="64"  class=" form-control"/>
+				</div>
+				<div class="col-xs-12 col-sm-4 col-md-4">
+					<label class="label-item single-overflow pull-left" title="送审Id:">送审Id:</label>
+					<form:input path="submittalsId" htmlEscape="false" maxlength="64"  class=" form-control"/>
+				</div>
+
+				 <div class="col-xs-12 col-sm-6 col-md-4">
+					<div style="margin-top:26px">
+					  <a  id="search" class="btn btn-primary btn-rounded  btn-bordered btn-sm"><i class="fa fa-search"></i> 查询</a>
+					  <a  id="reset" class="btn btn-primary btn-rounded  btn-bordered btn-sm" ><i class="fa fa-refresh"></i> 重置</a>
+					 </div>
+				</div>
+			</form:form>
+		</div>
+	</div>
+
+		<!-- 工具栏 -->
+			<div id="toolbar">
+				<shiro:hasPermission name="supply:judgementBills:del">
+					<button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">
+						<i class="glyphicon glyphicon-remove"></i> 删除
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="supply:judgementBills:import">
+					<button id="btnImport" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入
+					</button>
+				</shiro:hasPermission>
+			</div>
+
+	<!-- 表格 -->
+	<table id="dataTable"  style="table-layout:fixed"   data-toolbar="#toolbar"></table>
+
+    <!-- context menu -->
+    <%--<ul id="context-menu" class="dropdown-menu">
+    	<shiro:hasPermission name="supply:stockOut:view">
+        <li data-item="view"><a>查看</a></li>
+        </shiro:hasPermission>
+    	<shiro:hasPermission name="supply:stockOut:edit">
+        <li data-item="edit"><a>编辑</a></li>
+        </shiro:hasPermission>
+        <shiro:hasPermission name="supply:stockOut:del">
+        <li data-item="delete"><a>删除</a></li>
+        </shiro:hasPermission>
+        <li data-item="action1"><a>取消</a></li>
+    </ul>--%>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 65 - 0
src/main/webapp/webpage/modules/supply/judgementBills/supplyJudgementBillsView.jsp

@@ -0,0 +1,65 @@
+<%@ 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="supplyJudgementBills" 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="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="examineCount" 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="projectDefinition" 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="projectName" htmlEscape="false" class="form-control " readonly="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">送审Id:</label></td>
+					<td class="width-35">
+						<form:input path="submittalsId" htmlEscape="false" class="form-control" readonly="true"/>
+					</td>
+				</tr>
+
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 20 - 8
src/main/webapp/webpage/modules/supply/stockOut/supplyStockOutList.js

@@ -86,8 +86,20 @@
 			,{
                 field: 'stockOutNumber',
                 title: '出库单编号',
-                    width:120,
-                sortName: 'stockOutNumber'
+                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元素',
@@ -184,11 +196,11 @@
                 auto: true,
                 title:"导入数据",
                 content: "${ctx}/tag/importExcel" ,
-                btn: ['导出模板','确定', '关闭'],
-                btn1: function () {
+                btn: [/*'导出模板',*/'确定', '关闭'],
+                /*btn1: function () {
                     jp.downloadFile('${ctx}/supply/stockOut/templates')
-                },
-                btn2: function(index, layero){
+                },*/
+                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){
@@ -201,7 +213,7 @@
                     });//调用保存事件
                     return false;
                 },
-                btn3: function(index){
+                btn2: function(index){
                     //  jp.close(index);
                 }
             });
@@ -289,7 +301,7 @@ function view(id){//没有权限时,不显示确定按钮
     if(id == undefined){
         id = getIdSelections();
     }
-    jp.openViewDialog('查看', "${ctx}/supply/stockOut/form?id=" + id, '800px', '500px');
+    jp.openViewDialog('查看', "${ctx}/supply/stockOut/view?id=" + id, '800px', '500px');
 }
 
 

+ 185 - 0
src/main/webapp/webpage/modules/supply/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>