소스 검색

超欠供明细部分代码

user5 3 년 전
부모
커밋
72328ef53c

+ 193 - 0
src/main/java/com/jeeplus/modules/supply/particulars/entity/SupplyParticulars.java

@@ -0,0 +1,193 @@
+package com.jeeplus.modules.supply.particulars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 超欠供明细表
+ * @author: 徐滕
+ * @create: 2022-03-02 10:08
+ **/
+public class SupplyParticulars extends DataEntity<SupplyParticulars> {
+    private String batch;                    //varchar(255) 批次(出库单I列)
+    private String materialNumber;           //varchar(255) 物料编码(出库单G列关联物料库得到)
+    private String materialDescription;      //varchar(255) 材料描述(出库单G列关联物料库得到)
+    private String unit;                     //varchar(255) 计量单位(出库单J列关联物料库得到)
+    private String actualQuantityIssued;     //varchar(255) 实发数量(出库单K列实发数量)
+    private String  examineCount;            //varchar(255) 审定数量(审定单D列审定数量  保留三位小数)
+    private String  supplyCount;             //varchar(255) 超(欠)供数量(领用数量-实际耗用数量	当值为0时,显示‘-’)
+    private String unitPrice;                //varchar(255) 单价(出库单L列单价	当只有审定数量没有实发数量时,单价另外处理)
+    private String  supplyMoney;             //varchar(255) 超(欠)供金额(超欠供数量*材料单价)
+    //当超欠供数量不为0时,该单元格出现下拉框
+    //1.置换
+    //2.核减施工费
+    //3.欠供不在发生
+    //4.退料
+    //5.欠供转乙供
+    //6.欠供补领
+    private String  commodityHandleTenet;    //varchar(255) 商定处理原则(退料或抵扣工程价款)
+    private String  planMoney;               //varchar(255) 计划列入工程投资的物资金额(审定数量*单价	金额保留2位小数)
+    //出库数*单价
+    //当出现超欠供时,若商定处理原则选1、2、3、5则本单元格值为出库数*单价
+    //若商定处理原则选4、6时则本单元格值为审定数*单价
+    private String  practicalMoney;          //varchar(255) 实际列入工程投资的物资金额
+    private String  supplyReason;            //varchar(255) 超(欠)供原因
+    private String remarks;	                 // 备注
+
+
+    private String projectDefinition;       //varchar(255) 项目定义号
+    private String submittalsId;            //varchar(255) 送审id
+    private String materialsType;            //varchar(255) 材料类型
+
+
+    @ExcelField(title="批次", align=2, sort=1)
+    public String getBatch() {
+        return batch;
+    }
+
+    public String getMaterialNumber() {
+        return materialNumber;
+    }
+
+    @ExcelField(title="材料名称", align=2, sort=2)
+    public String getMaterialDescription() {
+        return materialDescription;
+    }
+
+    @ExcelField(title="计量单位", align=2, sort=3)
+    public String getUnit() {
+        return unit;
+    }
+
+    @ExcelField(title="实发数量", align=2, sort=4)
+    public String getActualQuantityIssued() {
+        return actualQuantityIssued;
+    }
+
+    @ExcelField(title="审定数量", align=2, sort=5)
+    public String getExamineCount() {
+        return examineCount;
+    }
+
+    @ExcelField(title="超(欠)供数量", align=2, sort=6)
+    public String getSupplyCount() {
+        return supplyCount;
+    }
+
+    @ExcelField(title="单价", align=2, sort=7)
+    public String getUnitPrice() {
+        return unitPrice;
+    }
+
+    @ExcelField(title="超(欠)供金额", align=2, sort=8)
+    public String getSupplyMoney() {
+        return supplyMoney;
+    }
+
+    @ExcelField(title="商定处理原则", align=2, sort=9)
+    public String getCommodityHandleTenet() {
+        return commodityHandleTenet;
+    }
+
+    @ExcelField(title="计划列入工程投资的物资金额", align=2, sort=10)
+    public String getPlanMoney() {
+        return planMoney;
+    }
+
+    @ExcelField(title="实际列入工程投资的物资金额", align=2, sort=11)
+    public String getPracticalMoney() {
+        return practicalMoney;
+    }
+
+    @ExcelField(title="超(欠)供原因", align=2, sort=12)
+    public String getSupplyReason() {
+        return supplyReason;
+    }
+
+    @Override
+    @ExcelField(title="备注", align=2, sort=13)
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setBatch(String batch) {
+        this.batch = batch;
+    }
+
+    public void setMaterialNumber(String materialNumber) {
+        this.materialNumber = materialNumber;
+    }
+
+    public void setMaterialDescription(String materialDescription) {
+        this.materialDescription = materialDescription;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public void setActualQuantityIssued(String actualQuantityIssued) {
+        this.actualQuantityIssued = actualQuantityIssued;
+    }
+
+    public void setExamineCount(String examineCount) {
+        this.examineCount = examineCount;
+    }
+
+    public void setSupplyCount(String supplyCount) {
+        this.supplyCount = supplyCount;
+    }
+
+    public void setUnitPrice(String unitPrice) {
+        this.unitPrice = unitPrice;
+    }
+
+    public void setSupplyMoney(String supplyMoney) {
+        this.supplyMoney = supplyMoney;
+    }
+
+    public void setCommodityHandleTenet(String commodityHandleTenet) {
+        this.commodityHandleTenet = commodityHandleTenet;
+    }
+
+    public void setPlanMoney(String planMoney) {
+        this.planMoney = planMoney;
+    }
+
+    public void setPracticalMoney(String practicalMoney) {
+        this.practicalMoney = practicalMoney;
+    }
+
+    public void setSupplyReason(String supplyReason) {
+        this.supplyReason = supplyReason;
+    }
+
+    @Override
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public String getProjectDefinition() {
+        return projectDefinition;
+    }
+
+    public void setProjectDefinition(String projectDefinition) {
+        this.projectDefinition = projectDefinition;
+    }
+
+    public String getSubmittalsId() {
+        return submittalsId;
+    }
+
+    public void setSubmittalsId(String submittalsId) {
+        this.submittalsId = submittalsId;
+    }
+
+    public String getMaterialsType() {
+        return materialsType;
+    }
+
+    public void setMaterialsType(String materialsType) {
+        this.materialsType = materialsType;
+    }
+}

+ 39 - 0
src/main/java/com/jeeplus/modules/supply/particulars/mapper/SupplyParticularsMapper.java

@@ -0,0 +1,39 @@
+package com.jeeplus.modules.supply.particulars.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.supply.judgementBills.entity.SupplyJudgementBills;
+import com.jeeplus.modules.supply.particulars.entity.SupplyParticulars;
+import com.jeeplus.modules.supply.stockOut.entity.SupplyStockOut;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author: 大猫
+ * @create: 2022-03-02 10:44
+ **/
+@MyBatisMapper
+public interface SupplyParticularsMapper extends BaseMapper<SupplyParticulars> {
+
+    /**
+     * 查询出库单中数据信息
+     * @param projectDefinitionList
+     * @return
+     */
+    List<SupplyStockOut> getSupplyStockOutList(@Param("list") List<String> projectDefinitionList);
+
+    /**
+     * 查询审定单中数据信息
+     * @param projectDefinitionList
+     * @return
+     */
+    List<SupplyJudgementBills> getSupplyJudgementBillsListList(@Param("list") List<String> projectDefinitionList);
+
+    /**
+     * 根据物料编码查询出库单单价平均数
+     * @param materialNumber 物料编码
+     * @return
+     */
+    String getAvgUtilPriceOnStockOutByMaterialNumber(String materialNumber);
+}

+ 86 - 0
src/main/java/com/jeeplus/modules/supply/particulars/mapper/xml/SupplyParticularsMapper.xml

@@ -0,0 +1,86 @@
+<?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.particulars.mapper.SupplyParticularsMapper">
+
+    <sql id="stockOutColumns">
+        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.stock_out_number AS "stockOutNumber",
+        a.wbs_element AS "wbsElement",
+        a.project_name AS "projectName",
+        a.project_definition AS "projectDefinition",
+        a.material_number AS "materialNumber",
+        ml.material_description AS "materialDescription",
+        a.batch AS "batch",
+        ml.unit_of_measurement AS "unit",
+        a.actual_quantity_issued AS "actualQuantityIssued",
+        a.unit_price AS "unitPrice",
+        a.money AS "money",
+        a.posting_account_date AS "postingAccountDate",
+        DATE_FORMAT(a.posting_account_date,'%Y-%m-%d') AS "postingAccountDateStr",
+        a.supplier_name AS "supplierName",
+        a.factory AS "factory",
+        a.picking_number AS "pickingNumber",
+        a.picking_create_by AS "pickingCreateBy",
+        a.picking_department AS "pickingDepartment",
+        a.reserved_number AS "reservedNumber",
+        a.repertory_place AS "repertoryPlace",
+        a.project_package_name AS "projectPackageName",
+        a.stock_out_person AS "stockOutPerson",
+        a.wbs_element_description AS "wbsElementDescription",
+        a.project_second_classification AS "projectSecondClassification",
+        a.project_thirdly_classification AS "projectThirdlyClassification",
+        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.materials_type AS "materialsType"
+    </sql>
+
+    <sql id="judgementBillsColumns">
+        a.project_name AS "projectName",
+        a.project_definition AS "projectDefinition",
+        ml.material_description AS "materialDescription",
+        ml.unit_of_measurement AS "unit",
+        sum(a.examine_count) AS "examineCount",
+        a.material_number AS "materialNumber",
+        a.submittals_id AS "submittalsId"
+    </sql>
+
+    <select id="getSupplyStockOutList" resultType="com.jeeplus.modules.supply.stockOut.entity.SupplyStockOut">
+        select
+        <include refid="stockOutColumns"/>
+        from supply_stock_out a
+        left join material_library ml on ml.material_code = a.material_number
+        WHERE a.project_definition in
+        <foreach collection="list" item="projectDefinition" index="index" open="(" separator="," close=")">
+            #{projectDefinition}
+        </foreach>
+        order by a.project_definition asc,a.actual_quantity_issued desc,a.posting_account_date asc
+    </select>
+
+    <select id="getSupplyJudgementBillsListList" resultType="com.jeeplus.modules.supply.judgementBills.entity.SupplyJudgementBills">
+        select
+        <include refid="judgementBillsColumns"/>
+        from supply_judgement_bills a
+        left join material_library ml on ml.material_code = a.material_number
+        WHERE a.project_definition in
+        <foreach collection="list" item="projectDefinition" index="index" open="(" separator="," close=")">
+            #{projectDefinition}
+        </foreach>
+        and (a.submittals_id is null or a.submittals_id = '')
+        group by a.project_definition,a.material_number
+    </select>
+
+    <select id="getAvgUtilPriceOnStockOutByMaterialNumber" resultType="java.lang.String">
+        select ifnull(round(avg(unit_price),3),'0.000') from supply_stock_out where material_number= #{materialNumber}
+    </select>
+
+</mapper>

+ 669 - 0
src/main/java/com/jeeplus/modules/supply/particulars/service/SupplyParticularsService.java

@@ -0,0 +1,669 @@
+package com.jeeplus.modules.supply.particulars.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.particulars.entity.SupplyParticulars;
+import com.jeeplus.modules.supply.particulars.mapper.SupplyParticularsMapper;
+import com.jeeplus.modules.supply.stockOut.entity.SupplyStockOut;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 超欠供明细service
+ * @author: 徐滕
+ * @create: 2022-03-02 10:43
+ **/
+@Service
+@Transactional(readOnly = true)
+public class SupplyParticularsService extends CrudService<SupplyParticularsMapper, SupplyParticulars> {
+
+
+
+    @Override
+    public Page<SupplyParticulars> findPage(Page<SupplyParticulars> page, SupplyParticulars supplyParticulars) {
+        //如果送审id和项目定义号均为空 则表示没有选择筛选项,则不进行数据查询展示
+        if(StringUtils.isBlank(supplyParticulars.getProjectDefinition()) && StringUtils.isBlank(supplyParticulars.getSubmittalsId())){
+            return super.findOverPage(page, supplyParticulars);
+        }
+
+        return getProjectDefinitionPage(page, supplyParticulars);
+    }
+
+    /**
+     * 查询项目定义号对应的数据信息
+     * @param page
+     * @param supplyParticulars
+     * @return
+     */
+    public Page<SupplyParticulars> getProjectDefinitionPage(Page<SupplyParticulars> page, SupplyParticulars supplyParticulars) {
+        //根据项目定义号查询出库表某个或某几个项目定义号的所有出库数据
+        //项目定义号以;隔开
+        String[] split = supplyParticulars.getProjectDefinition().split(";");
+        List projectDefinitionList = Arrays.asList(split);
+        //根据项目定义号查询出库表信息
+        List<SupplyStockOut> supplyStockOutList = mapper.getSupplyStockOutList(projectDefinitionList);
+        //对出库单数据进行分组
+        Map<String, List<SupplyStockOut>> supplyStockOutListMap = this.groupSupplyStockOut(supplyStockOutList);
+        //查询审定单中的数据信息
+        List<SupplyJudgementBills> supplyJudgementBillsList = mapper.getSupplyJudgementBillsListList(projectDefinitionList);
+        //对审定单数据进行分组
+        Map<String, List<SupplyJudgementBills>> supplyJudgementBillsListMap = this.groupSupplyJudgementBills(supplyJudgementBillsList);
+
+        List<SupplyParticulars> supplyParticularsList = disposeDataMap(supplyStockOutListMap, supplyJudgementBillsListMap);
+
+        //对超欠供明细数据进行分组
+        Map<String, List<SupplyParticulars>> supplyParticularsListMap = this.groupByMaterialsType(supplyParticularsList);
+        List<SupplyParticulars> particularsList = disposeDataMapByMaterialsType(supplyParticularsListMap);
+        SupplyParticulars supplyParticularsCollect = disposeDataCollect(supplyParticularsList);
+        particularsList.add(supplyParticularsCollect);
+        int size = 0;
+        for (SupplyParticulars info : particularsList) {
+            size ++;
+            info.setId(String.valueOf(size));
+        }
+        page.setList(particularsList);
+        return page;
+    }
+
+    /**
+     * 出库单数据分组
+     * @param supplyStockOutList
+     * @return
+     */
+    public Map<String,List<SupplyStockOut>> groupSupplyStockOut (List<SupplyStockOut> supplyStockOutList){
+        Map<String, List<SupplyStockOut>> map = new HashMap<>();
+        for(SupplyStockOut stockOut : supplyStockOutList){
+            if(map.containsKey(stockOut.getProjectDefinition())){//map中存在此id,将数据存放当前key的map中
+                map.get(stockOut.getProjectDefinition()).add(stockOut);
+            }else{//map中不存在,新建key,用来存放数据
+                List<SupplyStockOut> tmpList = new ArrayList<>();
+                tmpList.add(stockOut);
+                map.put(stockOut.getProjectDefinition(), tmpList);
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 审定单数据分组
+     * @param supplyJudgementBillsList
+     * @return
+     */
+    public Map<String,List<SupplyJudgementBills>> groupSupplyJudgementBills (List<SupplyJudgementBills> supplyJudgementBillsList){
+        Map<String, List<SupplyJudgementBills>> map = new HashMap<>();
+        for(SupplyJudgementBills judgementBills : supplyJudgementBillsList){
+            if(map.containsKey(judgementBills.getProjectDefinition())){//map中存在此id,将数据存放当前key的map中
+                map.get(judgementBills.getProjectDefinition()).add(judgementBills);
+            }else{//map中不存在,新建key,用来存放数据
+                List<SupplyJudgementBills> tmpList = new ArrayList<>();
+                tmpList.add(judgementBills);
+                map.put(judgementBills.getProjectDefinition(), tmpList);
+            }
+        }
+        return map;
+    }
+
+
+    /**
+     * 超欠供明细表根据材料类型进行分组
+     * @param supplyParticulars
+     * @return
+     */
+    public Map<String,List<SupplyParticulars>> groupByMaterialsType (List<SupplyParticulars> supplyParticulars){
+        Map<String, List<SupplyParticulars>> map = new HashMap<>();
+        for(SupplyParticulars particulars : supplyParticulars){
+            if(map.containsKey(particulars.getMaterialsType())){//map中存在此id,将数据存放当前key的map中
+                map.get(particulars.getMaterialsType()).add(particulars);
+            }else{//map中不存在,新建key,用来存放数据
+                List<SupplyParticulars> tmpList = new ArrayList<>();
+                tmpList.add(particulars);
+                map.put(particulars.getMaterialsType(), tmpList);
+            }
+        }
+        return map;
+    }
+
+    private List<SupplyParticulars> disposeDataMapByMaterialsType(Map<String, List<SupplyParticulars>> supplyParticularsMap){
+        List<SupplyParticulars> supplyParticularsList = Lists.newArrayList();
+
+        Set<String> supplyParticularsMapKeySet = supplyParticularsMap.keySet();
+        List<String> supplyParticularsMapKeyList = new ArrayList<>(supplyParticularsMapKeySet);
+
+
+        //获取迭代器
+        Iterator<String> supplyParticularsMapKey = supplyParticularsMapKeyList.iterator();
+        while (supplyParticularsMapKey.hasNext()){
+            String particularsMapKey = supplyParticularsMapKey.next();
+            //获取迭代器
+            switch (particularsMapKey){
+                case "设备":
+                    List<SupplyParticulars> facilityList = supplyParticularsMap.get("设备");
+                    supplyParticularsList.addAll(facilityList);
+                    SupplyParticulars facility = disposeDataByMaterialsType(facilityList, "设备");
+                    supplyParticularsList.add(facility);
+                    break;
+                case "材料":
+                    List<SupplyParticulars> materialsList = supplyParticularsMap.get("材料");
+                    supplyParticularsList.addAll(materialsList);
+                    SupplyParticulars materials = disposeDataByMaterialsType(materialsList, "材料");
+                    supplyParticularsList.add(materials);
+                    break;
+                case "-":
+                    List<SupplyParticulars> otherList = supplyParticularsMap.get("-");
+                    supplyParticularsList.addAll(otherList);
+                    SupplyParticulars other = disposeDataByMaterialsType(otherList, "-");
+                    supplyParticularsList.add(other);
+                    break;
+            }
+        }
+
+        return supplyParticularsList;
+    }
+
+    /**
+     * 数据处理
+     * @param supplyParticularsList 数据信息
+     * @param materialsType 材料类型
+     * @return
+     */
+    private SupplyParticulars disposeDataByMaterialsType(List<SupplyParticulars> supplyParticularsList,String materialsType){
+        BigDecimal supplyMoneyB = new BigDecimal(0);
+        BigDecimal planMoneyB = new BigDecimal(0);
+        BigDecimal practicalMoneyB = new BigDecimal(0);
+        for (SupplyParticulars facility : supplyParticularsList) {
+            BigDecimal supplyMoney = new BigDecimal(facility.getSupplyMoney());
+            BigDecimal planMoney = new BigDecimal(facility.getPlanMoney());
+            BigDecimal practicalMoney = new BigDecimal(facility.getPracticalMoney());
+            supplyMoneyB = supplyMoneyB.add(supplyMoney);
+            planMoneyB = planMoneyB.add(planMoney);
+            practicalMoneyB = practicalMoneyB.add(practicalMoney);
+        }
+
+        SupplyParticulars supplyParticulars = new SupplyParticulars();
+        supplyParticulars.setBatch("");
+        switch (materialsType){
+            case "设备":
+                supplyParticulars.setMaterialDescription("设备购置费合计");
+                break;
+            case "材料":
+                supplyParticulars.setMaterialDescription("装置性材料费合计");
+                break;
+            case "-":
+                supplyParticulars.setMaterialDescription("其他购置费合计");
+                break;
+        }
+        supplyParticulars.setUnit("");
+        supplyParticulars.setActualQuantityIssued("");
+        supplyParticulars.setExamineCount("");
+        supplyParticulars.setSupplyCount("");
+        supplyParticulars.setUnitPrice("");
+        String supplyMoneyBStr = supplyMoneyB.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
+        String[] supplyMoneyBStrSS = supplyMoneyBStr.split("\\.");
+        String supplyMoneyBIntegerStr = supplyMoneyBStrSS[0].replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");
+        supplyParticulars.setSupplyMoney(supplyMoneyBIntegerStr + "." + supplyMoneyBStrSS[1]);
+        supplyParticulars.setCommodityHandleTenet("");
+
+        String planMoneyBStr = planMoneyB.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
+        String[] planMoneyBStrSS = planMoneyBStr.split("\\.");
+        String planMoneyBIntegerStr = planMoneyBStrSS[0].replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");
+        supplyParticulars.setPlanMoney(planMoneyBIntegerStr + "." + planMoneyBStrSS[1]);
+
+        String practicalMoneyBStr = practicalMoneyB.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
+        String[] practicalMoneyBStrSS = practicalMoneyBStr.split("\\.");
+        String practicalMoneyBIntegerStr = practicalMoneyBStrSS[0].replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");
+        supplyParticulars.setPracticalMoney(practicalMoneyBIntegerStr + "." + practicalMoneyBStrSS[1]);
+        supplyParticulars.setSupplyReason("");
+        supplyParticulars.setRemarks("");
+        return supplyParticulars;
+    }
+    /**
+     * 数据汇总处理
+     * @param supplyParticularsList 数据信息
+     * @return
+     */
+    private SupplyParticulars disposeDataCollect(List<SupplyParticulars> supplyParticularsList){
+        BigDecimal supplyMoneyB = new BigDecimal(0);
+        BigDecimal planMoneyB = new BigDecimal(0);
+        BigDecimal practicalMoneyB = new BigDecimal(0);
+        for (SupplyParticulars facility : supplyParticularsList) {
+            BigDecimal supplyMoney = new BigDecimal(facility.getSupplyMoney());
+            BigDecimal planMoney = new BigDecimal(facility.getPlanMoney());
+            BigDecimal practicalMoney = new BigDecimal(facility.getPracticalMoney());
+            supplyMoneyB = supplyMoneyB.add(supplyMoney);
+            planMoneyB = planMoneyB.add(planMoney);
+            practicalMoneyB = practicalMoneyB.add(practicalMoney);
+        }
+
+        SupplyParticulars supplyParticulars = new SupplyParticulars();
+        supplyParticulars.setBatch("");
+        supplyParticulars.setMaterialDescription("甲供物资合计");
+        supplyParticulars.setUnit("");
+        supplyParticulars.setActualQuantityIssued("");
+        supplyParticulars.setExamineCount("");
+        supplyParticulars.setSupplyCount("");
+        supplyParticulars.setUnitPrice("");
+        String supplyMoneyBStr = supplyMoneyB.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
+        String[] supplyMoneyBStrSS = supplyMoneyBStr.split("\\.");
+        String supplyMoneyBIntegerStr = supplyMoneyBStrSS[0].replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");
+        supplyParticulars.setSupplyMoney(supplyMoneyBIntegerStr + "." + supplyMoneyBStrSS[1]);
+        supplyParticulars.setCommodityHandleTenet("");
+
+        String planMoneyBStr = planMoneyB.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
+        String[] planMoneyBStrSS = planMoneyBStr.split("\\.");
+        String planMoneyBIntegerStr = planMoneyBStrSS[0].replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");
+        supplyParticulars.setPlanMoney(planMoneyBIntegerStr + "." + planMoneyBStrSS[1]);
+
+        String practicalMoneyBStr = practicalMoneyB.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
+        String[] practicalMoneyBStrSS = practicalMoneyBStr.split("\\.");
+        String practicalMoneyBIntegerStr = practicalMoneyBStrSS[0].replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");
+        supplyParticulars.setPracticalMoney(practicalMoneyBIntegerStr + "." + practicalMoneyBStrSS[1]);
+        supplyParticulars.setSupplyReason("");
+        supplyParticulars.setRemarks("");
+        return supplyParticulars;
+    }
+
+    private List<SupplyParticulars> disposeDataMap(Map<String, List<SupplyStockOut>> supplyStockOutListMap,Map<String, List<SupplyJudgementBills>> supplyJudgementBillsListMap){
+        List<SupplyParticulars> supplyParticularsList = Lists.newArrayList();
+
+        Set<String> supplyStockOutListMapKeySet = supplyStockOutListMap.keySet();
+        Set<String> supplyJudgementBillsListMapKeySet = supplyJudgementBillsListMap.keySet();
+        List<String> supplyStockOutListMapKeyList = new ArrayList<>(supplyStockOutListMapKeySet);
+        List<String> supplyJudgementBillsListMapKeyList = new ArrayList<>(supplyJudgementBillsListMapKeySet);
+
+
+        //获取迭代器
+        Iterator<String> supplyStockOutListMapKey = supplyStockOutListMapKeyList.iterator();
+        while (supplyStockOutListMapKey.hasNext()){
+            Boolean flag = false;
+            String stockOutMapKey = supplyStockOutListMapKey.next();
+            //获取迭代器
+            Iterator<String> supplyJudgementBillsListMapKey = supplyJudgementBillsListMapKeyList.iterator();
+            while (supplyJudgementBillsListMapKey.hasNext()){
+                String judgementBillsMapKey = supplyJudgementBillsListMapKey.next();
+                if (stockOutMapKey.equals(judgementBillsMapKey)){
+                    //如果两个key键相同,则表示出库单和审定单均有该项目定义号的数据信息
+                    //获取该key键对应的list数据
+                    List<SupplyStockOut> supplyStockOutList = supplyStockOutListMap.get(stockOutMapKey);
+                    List<SupplyJudgementBills> supplyJudgementBillsList = supplyJudgementBillsListMap.get(judgementBillsMapKey);
+
+                    //对相同项目定义号的数据进行处理
+                    List<SupplyParticulars> supplyParticularsByMaterialNumberList = disposeMaterialNumberDataList(supplyStockOutList, supplyJudgementBillsList);
+                    if(supplyParticularsByMaterialNumberList.size()>0){
+                        supplyParticularsList.addAll(supplyParticularsByMaterialNumberList);
+                    }
+                    flag = true;
+                    //删除map中对应key键信息
+                    supplyJudgementBillsListMapKey.remove();
+                    supplyJudgementBillsListMap.remove(judgementBillsMapKey);
+                }
+            }
+            //判定当前出库单是否进行数据处理,如果没有对应审定单则另行处理
+            if(!flag){
+                List<SupplyStockOut> supplyStockOutList = supplyStockOutListMap.get(stockOutMapKey);
+                List<SupplyJudgementBills> supplyJudgementBillsList = Lists.newArrayList();
+                //对相同项目定义号的数据进行处理
+                List<SupplyParticulars> supplyParticularsByMaterialNumberList = disposeMaterialNumberDataList(supplyStockOutList, supplyJudgementBillsList);
+                if(supplyParticularsByMaterialNumberList.size()>0){
+                    supplyParticularsList.addAll(supplyParticularsByMaterialNumberList);
+                }
+            }
+            supplyStockOutListMapKey.remove();
+            supplyStockOutListMap.remove(stockOutMapKey);
+        }
+
+        //判定审定单map列表是否存在未处理的数据,如果存在则对剩余数据进行处理
+        if(supplyJudgementBillsListMap.size() > 0){
+            Iterator<String> supplyJudgementBillsListMapKey = supplyJudgementBillsListMapKeyList.iterator();
+            while (supplyJudgementBillsListMapKey.hasNext()){
+                String judgementBillsMapKey = supplyJudgementBillsListMapKey.next();
+                List<SupplyStockOut> supplyStockOutList = Lists.newArrayList();
+                List<SupplyJudgementBills> supplyJudgementBillsList = supplyJudgementBillsListMap.get(judgementBillsMapKey);
+
+                //对相同项目定义号的数据进行处理
+                List<SupplyParticulars> supplyParticularsByMaterialNumberList = disposeMaterialNumberDataList(supplyStockOutList, supplyJudgementBillsList);
+                if(supplyParticularsByMaterialNumberList.size()>0){
+                    supplyParticularsList.addAll(supplyParticularsByMaterialNumberList);
+                }
+                //删除map中对应key键信息
+                supplyJudgementBillsListMapKey.remove();
+                supplyJudgementBillsListMap.remove(judgementBillsMapKey);
+            }
+        }
+
+
+        return supplyParticularsList;
+    }
+
+    /**
+     * 物料编码对应数据处理
+     * @param supplyStockOutList
+     * @param supplyJudgementBillsList
+     * @return
+     */
+    private List<SupplyParticulars> disposeMaterialNumberDataList(List<SupplyStockOut> supplyStockOutList , List<SupplyJudgementBills> supplyJudgementBillsList){
+        List<SupplyParticulars> supplyParticularsList = Lists.newArrayList();
+        if (supplyStockOutList.size() == 0 && supplyJudgementBillsList.size() == 0){
+            return supplyParticularsList;
+        }
+        //将出库单根据物料编码进行分组
+        Map<String, List<SupplyStockOut>> stockOutMaterialNumberListMap = this.groupSupplyStockOutMaterialNumber(supplyStockOutList);
+        //将审定单根据物料编码进行分组
+        Map<String, List<SupplyJudgementBills>> judgementBillsMaterialNumberListMap = this.groupSupplyJudgementBillsMaterialNumber(supplyJudgementBillsList);
+
+        //获取所有审定单map对应的key键信息
+        Set<String> supplyJudgementBillsListMapKeySet = judgementBillsMaterialNumberListMap.keySet();
+        List<String> supplyJudgementBillsListMapKeyList = new ArrayList<>(supplyJudgementBillsListMapKeySet);
+
+        //获取审定单中物料编码对应的出库单中的信息
+        Iterator<String> supplyJudgementBillsListMapKey = supplyJudgementBillsListMapKeyList.iterator();
+        while (supplyJudgementBillsListMapKey.hasNext()){
+
+
+            String materialNumber = supplyJudgementBillsListMapKey.next();
+            //获取审定单指定数据
+            List<SupplyJudgementBills> judgementBillsList = judgementBillsMaterialNumberListMap.get(materialNumber);
+            //因为相同物料编码的审定单数据仅存在一条,则通过下标获取特定审定单信息
+            SupplyJudgementBills judgementBills = judgementBillsList.get(0);
+
+            //获取出库单中对应的物料编码信息
+            List<SupplyStockOut> stockOutMaterialNumberList = stockOutMaterialNumberListMap.get(materialNumber);
+            //如果出库单中物料编码数据量大于0,则对数据进行处理
+            if(null != stockOutMaterialNumberList && stockOutMaterialNumberList.size()>0){
+                //如果出库单对应的物料编码数据量为一条,则将所有的审定数量均放在该数据中
+                //如果存在多个并且审定数量高于该条出库单的实发数量 则最大值存放该出库单的实发数量,剩余的往后存放
+                if(stockOutMaterialNumberList.size() == 1){
+                    SupplyStockOut stockOutMaterialNumber = stockOutMaterialNumberList.get(0);
+                    SupplyParticulars supplyParticulars = new SupplyParticulars();
+
+                    supplyParticulars.setMaterialsType(stockOutMaterialNumber.getMaterialsType());
+                    supplyParticulars.setExamineCount(judgementBills.getExamineCount());
+                    supplyParticulars.setBatch(stockOutMaterialNumber.getBatch());
+                    supplyParticulars.setMaterialNumber(stockOutMaterialNumber.getMaterialNumber());
+                    supplyParticulars.setMaterialDescription(stockOutMaterialNumber.getMaterialDescription());
+                    supplyParticulars.setUnit(stockOutMaterialNumber.getUnit());
+                    supplyParticulars.setActualQuantityIssued(stockOutMaterialNumber.getActualQuantityIssued());
+                    //审定数量(审定单D列审定数量  保留三位小数)
+                    BigDecimal examineCountB = new BigDecimal(judgementBills.getExamineCount());
+                    BigDecimal examineCountBs = examineCountB.setScale(3, BigDecimal.ROUND_HALF_UP);
+                    supplyParticulars.setExamineCount(examineCountBs.toString());
+                    //单价
+                    supplyParticulars.setUnitPrice(stockOutMaterialNumber.getUnitPrice());
+
+                    //超(欠)供数量(领用数量-实际耗用数量	当值为0时,显示‘-’)
+                    double examineCount = Double.parseDouble(supplyParticulars.getExamineCount());
+                    double actualQuantityIssued = Double.parseDouble(supplyParticulars.getActualQuantityIssued());
+                    BigDecimal unitPriceB = new BigDecimal(supplyParticulars.getUnitPrice());
+                    if(examineCount == actualQuantityIssued){
+                        supplyParticulars.setSupplyCount("-");
+                        //超(欠)供金额(超欠供数量*材料单价)
+                        supplyParticulars.setSupplyMoney("-");
+                    }else{
+                        supplyParticulars.setSupplyCount(String.valueOf(examineCount - actualQuantityIssued));
+                        //超(欠)供金额(超欠供数量*材料单价)
+                        BigDecimal supplyCountB = new BigDecimal(supplyParticulars.getSupplyCount());
+                        BigDecimal bigDecimal = supplyCountB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        supplyParticulars.setSupplyMoney(bigDecimal.toString());
+                    }
+                    supplyParticulars.setCommodityHandleTenet("");
+                    //计划列入工程投资的物资金额(审定数量*单价	金额保留2位小数)
+                    BigDecimal examineCountPB = new BigDecimal(supplyParticulars.getExamineCount());
+                    BigDecimal bigDecimal = examineCountPB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    supplyParticulars.setPlanMoney(bigDecimal.toString());
+
+                    //实际列入工程投资的物资金额
+                    BigDecimal actualQuantityIssuedB = new BigDecimal(supplyParticulars.getActualQuantityIssued());
+                    BigDecimal actualQuantityIssuedBigDecimal = actualQuantityIssuedB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    supplyParticulars.setPracticalMoney(actualQuantityIssuedBigDecimal.toString());
+                    supplyParticulars.setProjectDefinition("");
+                    supplyParticulars.setRemarks("");
+                    supplyParticularsList.add(supplyParticulars);
+
+                }else {
+                    int size = stockOutMaterialNumberList.size();
+                    int forSize = 0;
+                    for (SupplyStockOut stockOutMaterialNumber :stockOutMaterialNumberList) {
+                        forSize +=1;
+                        SupplyParticulars supplyParticulars = new SupplyParticulars();
+
+                        supplyParticulars.setMaterialsType(stockOutMaterialNumber.getMaterialsType());
+                        supplyParticulars.setBatch(stockOutMaterialNumber.getBatch());
+                        supplyParticulars.setMaterialNumber(stockOutMaterialNumber.getMaterialNumber());
+                        supplyParticulars.setMaterialDescription(stockOutMaterialNumber.getMaterialDescription());
+                        supplyParticulars.setUnit(stockOutMaterialNumber.getUnit());
+                        supplyParticulars.setActualQuantityIssued(stockOutMaterialNumber.getActualQuantityIssued());
+
+                        double jExamineCount = Double.parseDouble(judgementBills.getExamineCount());
+                        double sActualQuantityIssued = Double.parseDouble(stockOutMaterialNumber.getActualQuantityIssued());
+                        //如果审定单审定数量超过了出库单出库数量,则将审定单中对应数量去除
+                        if(sActualQuantityIssued<jExamineCount){
+                            if(size == forSize){
+
+                                BigDecimal b   = new BigDecimal(judgementBills.getExamineCount());
+                                BigDecimal f1 = b.setScale(3, BigDecimal.ROUND_HALF_UP);
+                                supplyParticulars.setExamineCount(String.valueOf(f1));
+                            }else{
+                                supplyParticulars.setExamineCount(stockOutMaterialNumber.getActualQuantityIssued());
+                            }
+                            double examineCountD = Double.parseDouble(judgementBills.getExamineCount());
+                            double actualQuantityIssuedD = Double.parseDouble(stockOutMaterialNumber.getActualQuantityIssued());
+                            double resultD = examineCountD - actualQuantityIssuedD;
+                            BigDecimal b   = new BigDecimal(resultD);
+                            double f1 = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+                            judgementBills.setExamineCount(String.valueOf(f1));
+                        }else{
+                            //审定数量(审定单D列审定数量  保留三位小数)
+                            BigDecimal examineCountB = new BigDecimal(judgementBills.getExamineCount());
+                            BigDecimal examineCountBs = examineCountB.setScale(3, BigDecimal.ROUND_HALF_UP);
+                            supplyParticulars.setExamineCount(examineCountBs.toString());
+                            judgementBills.setExamineCount("0.000");
+                        }
+                        //单价
+                        supplyParticulars.setUnitPrice(stockOutMaterialNumber.getUnitPrice());
+
+                        //超(欠)供数量(领用数量-实际耗用数量	当值为0时,显示‘-’)
+                        BigDecimal examineCountB = new BigDecimal(supplyParticulars.getExamineCount());
+                        BigDecimal actualQuantityIssuedB = new BigDecimal(supplyParticulars.getActualQuantityIssued());
+                        BigDecimal unitPriceB = new BigDecimal(supplyParticulars.getUnitPrice());
+                        if(examineCountB.compareTo(actualQuantityIssuedB) == 0){
+                            supplyParticulars.setSupplyCount("-");
+                            //超(欠)供金额(超欠供数量*材料单价)
+                            supplyParticulars.setSupplyMoney("-");
+                        }else{
+                            BigDecimal a = examineCountB.subtract(actualQuantityIssuedB).setScale(3, BigDecimal.ROUND_HALF_UP);
+                            supplyParticulars.setSupplyCount(String.valueOf(examineCountB.subtract(actualQuantityIssuedB).setScale(3, BigDecimal.ROUND_HALF_UP)));
+                            //超(欠)供金额(超欠供数量*材料单价)
+                            BigDecimal supplyCountB = new BigDecimal(supplyParticulars.getSupplyCount());
+                            BigDecimal bigDecimal = supplyCountB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            supplyParticulars.setSupplyMoney(bigDecimal.toString());
+                        }
+                        supplyParticulars.setCommodityHandleTenet("");
+                        //计划列入工程投资的物资金额(审定数量*单价	金额保留2位小数)
+                        BigDecimal examineCountPB = new BigDecimal(supplyParticulars.getExamineCount());
+                        BigDecimal bigDecimal = examineCountPB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        supplyParticulars.setPlanMoney(bigDecimal.toString());
+
+                        //实际列入工程投资的物资金额
+                        BigDecimal actualQuantityIssuedBigDecimal = actualQuantityIssuedB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        supplyParticulars.setPracticalMoney(actualQuantityIssuedBigDecimal.toString());
+                        supplyParticulars.setProjectDefinition("");
+                        supplyParticulars.setRemarks("");
+
+                        supplyParticularsList.add(supplyParticulars);
+
+                    }
+
+                }
+
+            }else{
+                //如果出库单中物料编码数据量等于0,则表示物料审定后未出库,则没有单价
+                //获取历史单价信息并进行求平均数。且不存储批次号
+
+                SupplyParticulars supplyParticulars = new SupplyParticulars();
+
+                supplyParticulars.setMaterialsType("-");
+                supplyParticulars.setExamineCount(judgementBills.getExamineCount());
+                supplyParticulars.setBatch(null);
+                supplyParticulars.setMaterialNumber(judgementBills.getMaterialNumber());
+                supplyParticulars.setMaterialDescription(judgementBills.getMaterialDescription());
+                supplyParticulars.setUnit(judgementBills.getUnit());
+                supplyParticulars.setActualQuantityIssued("0.000");
+                //审定数量(审定单D列审定数量  保留三位小数)
+                BigDecimal examineCountB = new BigDecimal(judgementBills.getExamineCount());
+                BigDecimal examineCountBs = examineCountB.setScale(3, BigDecimal.ROUND_HALF_UP);
+                supplyParticulars.setExamineCount(examineCountBs.toString());
+                //单价
+                //通过物料编码查询物料对应的平均价格
+                String avgUtilPriceOnStockOutByMaterialNumber = mapper.getAvgUtilPriceOnStockOutByMaterialNumber(materialNumber);
+                supplyParticulars.setUnitPrice(avgUtilPriceOnStockOutByMaterialNumber);
+
+                //超(欠)供数量(领用数量-实际耗用数量	当值为0时,显示‘-’)
+                double examineCount = Double.parseDouble(supplyParticulars.getExamineCount());
+                double actualQuantityIssued = Double.parseDouble(supplyParticulars.getActualQuantityIssued());
+                BigDecimal unitPriceB = new BigDecimal(supplyParticulars.getUnitPrice());
+                if(examineCount == actualQuantityIssued){
+                    supplyParticulars.setSupplyCount("-");
+                    //超(欠)供金额(超欠供数量*材料单价)
+                    supplyParticulars.setSupplyMoney("-");
+                }else{
+                    supplyParticulars.setSupplyCount(String.valueOf(examineCount - actualQuantityIssued));
+                    //超(欠)供金额(超欠供数量*材料单价)
+                    BigDecimal supplyCountB = new BigDecimal(supplyParticulars.getSupplyCount());
+                    BigDecimal bigDecimal = supplyCountB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    supplyParticulars.setSupplyMoney(bigDecimal.toString());
+                }
+                supplyParticulars.setCommodityHandleTenet("");
+                //计划列入工程投资的物资金额(审定数量*单价	金额保留2位小数)
+                BigDecimal examineCountPB = new BigDecimal(supplyParticulars.getExamineCount());
+                BigDecimal bigDecimal = examineCountPB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                supplyParticulars.setPlanMoney(bigDecimal.toString());
+
+                //实际列入工程投资的物资金额
+                BigDecimal actualQuantityIssuedB = new BigDecimal(supplyParticulars.getActualQuantityIssued());
+                BigDecimal actualQuantityIssuedBigDecimal = actualQuantityIssuedB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                supplyParticulars.setPracticalMoney(actualQuantityIssuedBigDecimal.toString());
+                supplyParticulars.setProjectDefinition("");
+                supplyParticulars.setRemarks("");
+                supplyParticularsList.add(supplyParticulars);
+
+            }
+            //删除map中对应key键信息
+            judgementBillsMaterialNumberListMap.remove(materialNumber);
+            stockOutMaterialNumberListMap.remove(materialNumber);
+        }
+        //判断出库单(物料编码)Map是否还存在数据信息
+        Set<String> stockOutMaterialNumberListMapKeySet = stockOutMaterialNumberListMap.keySet();
+        if(stockOutMaterialNumberListMapKeySet.size()>0){
+            List<String> stockOutMaterialNumberListMapKeyList = new ArrayList<>(stockOutMaterialNumberListMapKeySet);
+            Iterator<String> stockOutMaterialNumberListMapKey = stockOutMaterialNumberListMapKeyList.iterator();
+            while (stockOutMaterialNumberListMapKey.hasNext()){
+
+                String materialNumber = stockOutMaterialNumberListMapKey.next();
+
+                //获取出库单中对应的物料编码信息
+                List<SupplyStockOut> stockOutMaterialNumberList = stockOutMaterialNumberListMap.get(materialNumber);
+                //如果出库单中物料编码数据量大于0,则对数据进行处理
+                if(stockOutMaterialNumberList.size()>0){
+                    for (SupplyStockOut stockOutMaterialNumber :stockOutMaterialNumberList) {
+                        SupplyParticulars supplyParticulars = new SupplyParticulars();
+
+                        supplyParticulars.setMaterialsType(stockOutMaterialNumber.getMaterialsType());
+                        supplyParticulars.setExamineCount("0.000");
+                        supplyParticulars.setBatch(stockOutMaterialNumber.getBatch());
+                        supplyParticulars.setMaterialNumber(stockOutMaterialNumber.getMaterialNumber());
+                        supplyParticulars.setMaterialDescription(stockOutMaterialNumber.getMaterialDescription());
+                        supplyParticulars.setUnit(stockOutMaterialNumber.getUnit());
+                        supplyParticulars.setActualQuantityIssued(stockOutMaterialNumber.getActualQuantityIssued());
+                        //审定数量(审定单D列审定数量  保留三位小数)
+                        BigDecimal examineCountB = new BigDecimal("0.000");
+                        BigDecimal examineCountBs = examineCountB.setScale(3, BigDecimal.ROUND_HALF_UP);
+                        supplyParticulars.setExamineCount(examineCountBs.toString());
+                        //单价
+                        supplyParticulars.setUnitPrice(stockOutMaterialNumber.getUnitPrice());
+
+                        //超(欠)供数量(领用数量-实际耗用数量	当值为0时,显示‘-’)
+                        double examineCount = Double.parseDouble(supplyParticulars.getExamineCount());
+                        double actualQuantityIssued = Double.parseDouble(supplyParticulars.getActualQuantityIssued());
+                        BigDecimal unitPriceB = new BigDecimal(supplyParticulars.getUnitPrice());
+                        if(examineCount == actualQuantityIssued){
+                            supplyParticulars.setSupplyCount("-");
+                            //超(欠)供金额(超欠供数量*材料单价)
+                            supplyParticulars.setSupplyMoney("-");
+                        }else{
+                            supplyParticulars.setSupplyCount(String.valueOf(examineCount - actualQuantityIssued));
+                            //超(欠)供金额(超欠供数量*材料单价)
+                            BigDecimal supplyCountB = new BigDecimal(supplyParticulars.getSupplyCount());
+                            BigDecimal bigDecimal = supplyCountB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            supplyParticulars.setSupplyMoney(bigDecimal.toString());
+                        }
+                        supplyParticulars.setCommodityHandleTenet("");
+                        //计划列入工程投资的物资金额(审定数量*单价	金额保留2位小数)
+                        BigDecimal examineCountPB = new BigDecimal(supplyParticulars.getExamineCount());
+                        BigDecimal bigDecimal = examineCountPB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        supplyParticulars.setPlanMoney(bigDecimal.toString());
+
+                        //实际列入工程投资的物资金额
+                        BigDecimal actualQuantityIssuedB = new BigDecimal(supplyParticulars.getActualQuantityIssued());
+                        BigDecimal actualQuantityIssuedBigDecimal = actualQuantityIssuedB.multiply(unitPriceB).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        supplyParticulars.setPracticalMoney(actualQuantityIssuedBigDecimal.toString());
+                        supplyParticulars.setProjectDefinition("");
+                        supplyParticulars.setRemarks("");
+                        supplyParticularsList.add(supplyParticulars);
+
+                    }
+                }
+                //删除对应key
+                stockOutMaterialNumberListMap.remove(materialNumber);
+            }
+        }
+
+        return supplyParticularsList;
+    }
+
+
+
+    /**
+     * 出库单(物料编码)数据分组
+     * @param supplyStockOutList
+     * @return
+     */
+    public Map<String,List<SupplyStockOut>> groupSupplyStockOutMaterialNumber (List<SupplyStockOut> supplyStockOutList){
+        Map<String, List<SupplyStockOut>> map = new HashMap<>();
+        for(SupplyStockOut stockOut : supplyStockOutList){
+            if(map.containsKey(stockOut.getMaterialNumber())){//map中存在此id,将数据存放当前key的map中
+                map.get(stockOut.getMaterialNumber()).add(stockOut);
+            }else{//map中不存在,新建key,用来存放数据
+                List<SupplyStockOut> tmpList = new ArrayList<>();
+                tmpList.add(stockOut);
+                map.put(stockOut.getMaterialNumber(), tmpList);
+            }
+        }
+        return map;
+    }
+
+
+    /**
+     * 审定单(物料编码)数据分组
+     * @param supplyJudgementBillsList
+     * @return
+     */
+    public Map<String,List<SupplyJudgementBills>> groupSupplyJudgementBillsMaterialNumber (List<SupplyJudgementBills> supplyJudgementBillsList){
+        Map<String, List<SupplyJudgementBills>> map = new HashMap<>();
+        for(SupplyJudgementBills stockOut : supplyJudgementBillsList){
+            if(map.containsKey(stockOut.getMaterialNumber())){//map中存在此id,将数据存放当前key的map中
+                map.get(stockOut.getMaterialNumber()).add(stockOut);
+            }else{//map中不存在,新建key,用来存放数据
+                List<SupplyJudgementBills> tmpList = new ArrayList<>();
+                tmpList.add(stockOut);
+                map.put(stockOut.getMaterialNumber(), tmpList);
+            }
+        }
+        return map;
+    }
+
+}

+ 66 - 0
src/main/java/com/jeeplus/modules/supply/particulars/web/SupplyParticularsController.java

@@ -0,0 +1,66 @@
+package com.jeeplus.modules.supply.particulars.web;
+
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.supply.particulars.entity.SupplyParticulars;
+import com.jeeplus.modules.supply.particulars.service.SupplyParticularsService;
+import com.jeeplus.modules.supply.stockOut.entity.SupplyStockOut;
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * 超欠供明细controller
+ * @author: 徐滕
+ * @create: 2022-03-02 10:31
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/supply/particulars")
+public class SupplyParticularsController extends BaseController {
+
+    @Autowired
+    private SupplyParticularsService service;
+
+    @ModelAttribute
+    public SupplyParticulars get(@RequestParam(required = false) String id) {
+        SupplyParticulars entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = service.get(id);
+        }
+        if (entity == null) {
+            entity = new SupplyParticulars();
+        }
+        return entity;
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("supply:particulars:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(SupplyParticulars supplyParticulars, Model model) {
+        model.addAttribute("supplyParticulars", supplyParticulars);
+        return "modules/supply/particulars/supplyParticularsList";
+    }
+
+    /**
+     * 列表数据
+     */
+    @ResponseBody
+    @RequiresPermissions("supply:particulars:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(SupplyParticulars supplyParticulars, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<SupplyParticulars> page = service.findPage(new Page<SupplyParticulars>(request, response), supplyParticulars);
+        return getBootstrapData(page);
+    }
+}

+ 6 - 6
src/main/webapp/static/common/css/app-blue.css

@@ -2812,7 +2812,7 @@ select[multiple].form-group-lg .form-control {
 .has-error.checkbox label,
 .has-error.radio-inline label,
 .has-error.checkbox-inline label {
-  color: #fff;
+  color: red;
 }
 .has-error .form-control {
   border-color: #fff;
@@ -9306,10 +9306,10 @@ table.white tbody {
 	}
 */
 }
-/* Have to set height explicity on ui-view 
+/* Have to set height explicity on ui-view
 to prevent collapsing during animation*/
 /*.well[ui-view]{
- height: 65px; 
+ height: 65px;
 }*/
 [ui-view] {
   position: absolute;
@@ -9419,7 +9419,7 @@ body {
 .sidebar-menu{
 	border-right: 1px solid #c4c8cb;
 }
-		
+
 .side-widgets {
   top: 0;
   bottom: 0;
@@ -9446,12 +9446,12 @@ body {
 }
 
 .menu-body> .nav > li >ul.collapse{
-	  border-left: 0px;    
+	  border-left: 0px;
 	 -webkit-transition: all .5s;
 	 transition: all .5s;
 }
 
-/*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷呖锟斤拷锟斤拷锟� 锟竭匡拷直锟斤拷应锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥尺达拷*/  
+/*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷呖锟斤拷锟斤拷锟� 锟竭匡拷直锟斤拷应锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥尺达拷*/
 .menu::-webkit-scrollbar-track {
 	   width: 0px;
 	   text-decoration: none;

+ 348 - 0
src/main/webapp/webpage/modules/supply/particulars/supplyParticularsList.js

@@ -0,0 +1,348 @@
+<%@ 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: false,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: false,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber:1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/supply/particulars/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/particulars/delete?id="+row.id, function(data){
+                            if(data.success){
+                                $('#dataTable').bootstrapTable('refresh');
+                                jp.success(data.msg);
+                            }else{
+                                jp.error(data.msg);
+                            }
+                        })
+
+                    });
+
+                }
+            },
+
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            columns: [/*{
+		        checkbox: true
+
+		    }
+			,*/
+                {
+                field: 'batch',
+                title: '批次',
+                width:100,
+                sortName: 'batch'
+            }/*,{
+                    field: 'materialNumber',
+                    title: '物料编码',
+                    width:120,
+                    sortName: 'materialNumber'
+                }*/
+                ,{
+                    field: 'materialDescription',
+                    title: '材料名称',
+                    width:200,
+                    sortName: 'materialDescription'
+                }
+                ,{
+                    field: 'unit',
+                    title: '计量单位',
+                    width:100,
+                    sortName: 'unit'
+                }
+                ,{
+                    field: 'actualQuantityIssued',
+                    title: '实发数量',
+                    width:100,
+                    sortName: 'actualQuantityIssued'
+                }
+                ,{
+                    field: 'examineCount',
+                    title: '审定数量',
+                    width:100,
+                    sortName: 'examineCount'
+                }
+                ,{
+                    field: 'supplyCount',
+                    title: '超(欠)供数量',
+                    width:150,
+                    sortName: 'supplyCount'
+                }
+                ,{
+                    field: 'unitPrice',
+                    title: '单价',
+                    width:120,
+                    sortName: 'unitPrice',
+                    /*formatter:function(value, row , index) {
+                        value = jp.unescapeHTML(value);
+                        console.log(value)
+                        if(true){
+                            return "<input id='" + row.id + "' type='text' name='changeAmount' class='form-control required deal' onchange='onchangeFun(this)' value='"+value+"'>"
+                            //return "<a href=\"javascript:void(0)\" data-name=\"unitPrice\"  data-pk=\""+row.id+"\" data-value=\""+ value +"\" class=\"editable editable-click\">" + value +"</a>";
+                        }
+                    }*/
+                    editable: {
+                        type: 'text',
+                        title: '单价',
+                        noEditFormatter (value, row, index) {
+                            if (row.id === 1) {
+                                console.log(1)
+                                return value
+                            }
+                            return false
+                        },
+                        validate: function (v) {
+                            if (isNaN(v))
+                                return '单价必须为数字';
+                            var age = parseFloat(v);
+                            if (age < 0) return '单价必须大于等于0';
+                        }
+                    }
+
+                }
+                ,{
+                    field: 'supplyMoney',
+                    title: '超(欠)供金额',
+                    width:150,
+                    sortName: 'supplyMoney'
+                }
+                ,{
+                    field: 'commodityHandleTenet',
+                    title: '商定处理原则',
+                    width:150,
+                    sortName: 'commodityHandleTenet'
+                }
+                ,{
+                    field: 'planMoney',
+                    title: '计划列入工程投资的物资金额',
+                    width:150,
+                    sortName: 'planMoney'
+                }
+                ,{
+                    field: 'practicalMoney',
+                    title: '实际列入工程投资的物资金额',
+                    width:150,
+                    sortName: 'practicalMoney'
+                }
+                ,{
+                    field: 'supplyReason',
+                    title: '超(欠)供原因',
+                    width:150,
+                    sortName: 'supplyReason'
+                }
+                ,{
+                    field: 'remarks',
+                    title: '备注',
+                    width:150,
+                    sortName: 'remarks'
+                }
+
+
+            ],onClickRow: function (row, $element) {
+                    $("#tb_user a").editable({
+                        type: "text",                //编辑框的类型。支持text|textarea|select|date|checklist等
+                        // title: "用户名",              //编辑框的标题
+                        disabled: false,             //是否禁用编辑
+                        pk:row.id,
+                        // emptytext: "空文本",          //空值的默认文本
+                        mode: "popup",              //编辑框的模式:支持popup和inline两种模式,默认是popup
+                        validate: function (value) { //字段验证
+                            if (!$.trim(value)) {
+                                return '不能为空';
+                            }
+                        }
+                    });
+            },
+
+
+        });
+
+        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/particulars/templates')
+                },*/
+                btn1: function(index, layero){
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    iframeWin.contentWindow.importExcel('${ctx}/supply/particulars/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/particulars/export?reserveProjectName='+reserveProjectName+'&projectName='+projectName+'&reserveCode='+reserveCode+'&projectCode='+projectCode+'&projectAttribute='+projectAttribute+'&projectBatch='+bat+'&projectDefine='+projectDefine);
+        });
+        $("#exportpro").click(function(){//导出Excel文件
+            jp.downloadFile('${ctx}/supply/particulars/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 onchangeFun(obj){
+    var index =  $(obj).attr("id");
+    $("table tbody").find("tr").eq(index-1).find("td").eq(3).html("1321");
+    updateCellData(index,'remarks',"1321");
+
+}
+function updateCellData(index,key,value){
+    $('#table').bootstrapTable('updateCell', {
+        index: index,
+        field: key,
+        value: value
+    })
+}*/
+
+function getIdSelections() {
+    return $.map($("#dataTable").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+
+function deleteAll(){
+    jp.confirm('确认要删除该记录信息吗?', function(){
+        jp.loading();
+        jp.get("${ctx}/supply/particulars/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/particulars/form",'800px', '500px');
+}
+
+
+
+function edit(id){//没有权限时,不显示确定按钮
+    if(id == undefined){
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑', "${ctx}/supply/particulars/form?id=" + id, '800px', '500px');
+}
+
+function view(id){//没有权限时,不显示确定按钮
+    if(id == undefined){
+        id = getIdSelections();
+    }
+    jp.openViewDialog('查看', "${ctx}/supply/particulars/view?id=" + id, '800px', '500px');
+}
+
+
+
+</script>

+ 83 - 0
src/main/webapp/webpage/modules/supply/particulars/supplyParticularsList.jsp

@@ -0,0 +1,83 @@
+<%@ 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="supplyParticularsList.js" %>
+
+	<link href="${ctxStatic}/plugin/editable/bootstrap3-editable/css/bootstrap-editable.css" rel="stylesheet" />
+
+	<script src="${ctxStatic}/plugin/editable/bootstrap3-editable/js/bootstrap-editable.js"></script>
+	<script src="${ctxStatic}/plugin/editable/bootstrap-table-editable.js"></script>
+</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="supplyParticulars" 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="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:stockOut:del">
+					<button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">
+						<i class="glyphicon glyphicon-remove"></i> 删除
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="supply:stockOut: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>

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