浏览代码

Merge branch 'master' of http://git.iamberry.com/hexiugang/iamberry-common-parent

# Conflicts:
#	watero-rst-service/src/main/java/com/iamberry/rst/service/cm/CustomerServiceImpl.java
wangxiaoming 7 年之前
父节点
当前提交
d73fe02c0c
共有 43 个文件被更改,包括 1220 次插入150 次删除
  1. 23 3
      watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsBom.java
  2. 19 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsBomComponents.java
  3. 10 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsComponents.java
  4. 11 1
      watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsSupplier.java
  5. 7 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/MachinePartsService.java
  6. 3 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/MachineSupplierService.java
  7. 2 2
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/ProduceService.java
  8. 2 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/PtsBatchService.java
  9. 3 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/PtsBomService.java
  10. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/MachinePartsServiceImpl.java
  11. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/MachineSupplierServiceImpl.java
  12. 4 4
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/ProduceServiceImpl.java
  13. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/PtsBatchServiceImpl.java
  14. 7 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/PtsBomServiceImpl.java
  15. 8 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/MachinePartsMapper.java
  16. 3 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/MachineSupplierMapper.java
  17. 2 2
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/ProduceMapper.java
  18. 16 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/machinePartsMapper.xml
  19. 18 4
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/machineSupplierMapper.xml
  20. 3 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/machineVersionMapper.xml
  21. 3 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/produceMapper.xml
  22. 7 6
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/ptsBatchMapper.xml
  23. 17 6
      watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/ptsBomMapper.xml
  24. 47 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminMachinePartsController.java
  25. 56 4
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminPtsBatchController.java
  26. 315 7
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminPtsBomController.java
  27. 26 4
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminPtsSupplierController.java
  28. 135 13
      watero-rst-web/src/main/java/com/iamberry/rst/utils/ExcelUtil.java
  29. 9 9
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/add_customer.ftl
  30. 1 0
      watero-rst-web/src/main/webapp/WEB-INF/views/order/excel_to_order.ftl
  31. 6 6
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/batch/add_batch.ftl
  32. 9 0
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/batch/batch_list.ftl
  33. 4 4
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/batch/update_batch.ftl
  34. 71 19
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/add_bom.ftl
  35. 9 4
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/bom_details.ftl
  36. 106 5
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/bom_list.ftl
  37. 64 15
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/update_bom.ftl
  38. 62 14
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/machinePtras/ptras_add.ftl
  39. 69 17
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/machinePtras/ptras_update.ftl
  40. 21 0
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/supplier/add_supplier.ftl
  41. 3 1
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/supplier/supplier_list.ftl
  42. 24 0
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/supplier/update_supplier.ftl
  43. 二进制
      watero-rst-web/src/main/webapp/common/images/uploadExcel/Bom单上传模板.xls

+ 23 - 3
watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsBom.java

@@ -19,6 +19,8 @@ public class PtsBom implements Serializable{
 
     private String bomVersion; //版本
 
+    private Integer machineVersionId; //软件id
+
     private String bomRemarks;//备注
 
     private Date bomCreateTime;//创建时间
@@ -31,7 +33,9 @@ public class PtsBom implements Serializable{
 
     private String produceName; //产品名称
 
-    private String componentsQuantity; //零件数量
+    private Integer componentsQuantity; //零件数量
+
+    private String machineVersionNo;  //软件版本号
 
     private List<PtsBomComponents> ptsBomComponentsList;//bom单的关联表
 
@@ -122,11 +126,27 @@ public class PtsBom implements Serializable{
         this.bomVersion = bomVersion;
     }
 
-    public String getComponentsQuantity() {
+    public Integer getComponentsQuantity() {
         return componentsQuantity;
     }
 
-    public void setComponentsQuantity(String componentsQuantity) {
+    public void setComponentsQuantity(Integer componentsQuantity) {
         this.componentsQuantity = componentsQuantity;
     }
+
+    public Integer getMachineVersionId() {
+        return machineVersionId;
+    }
+
+    public void setMachineVersionId(Integer machineVersionId) {
+        this.machineVersionId = machineVersionId;
+    }
+
+    public String getMachineVersionNo() {
+        return machineVersionNo;
+    }
+
+    public void setMachineVersionNo(String machineVersionNo) {
+        this.machineVersionNo = machineVersionNo;
+    }
 }

+ 19 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsBomComponents.java

@@ -16,7 +16,10 @@ public class PtsBomComponents implements Serializable{
 
     private Integer bomComponentsQuantity;//零件数量
 
+
     private PtsComponents ptsComponents; //零件
+    private String componentsNo;    //零件编号
+    private String componentsName;  //零件名称
 
     public Integer getBomComponentsId() {
         return bomComponentsId;
@@ -57,4 +60,20 @@ public class PtsBomComponents implements Serializable{
     public void setPtsComponents(PtsComponents ptsComponents) {
         this.ptsComponents = ptsComponents;
     }
+
+    public String getComponentsNo() {
+        return componentsNo;
+    }
+
+    public void setComponentsNo(String componentsNo) {
+        this.componentsNo = componentsNo;
+    }
+
+    public String getComponentsName() {
+        return componentsName;
+    }
+
+    public void setComponentsName(String componentsName) {
+        this.componentsName = componentsName;
+    }
 }

+ 10 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsComponents.java

@@ -45,6 +45,8 @@ public class PtsComponents implements Serializable {
 
     private String produceName; //产品名称
 
+    private String serialNumber; //流水号
+
     public Integer getComponentsId() {
         return componentsId;
     }
@@ -188,4 +190,12 @@ public class PtsComponents implements Serializable {
     public void setProduceName(String produceName) {
         this.produceName = produceName;
     }
+
+    public String getSerialNumber() {
+        return serialNumber;
+    }
+
+    public void setSerialNumber(String serialNumber) {
+        this.serialNumber = serialNumber;
+    }
 }

+ 11 - 1
watero-rst-core/src/main/java/com.iamberry.rst.core/pts/PtsSupplier.java

@@ -15,7 +15,7 @@ public class PtsSupplier implements Serializable {
 
     private String supplierAbbreviation;//简称
 
-    private String supplierNumber;
+    private String supplierNumber; //供应商编号
 
     private String supplierAddress;//地址
 
@@ -33,6 +33,8 @@ public class PtsSupplier implements Serializable {
 
     private Integer componentsNumber; //零件数量
 
+    private String serialNumber; //流水号
+
     public Integer getSupplierId() {
         return supplierId;
     }
@@ -128,4 +130,12 @@ public class PtsSupplier implements Serializable {
     public void setSupplierNumber(String supplierNumber) {
         this.supplierNumber = supplierNumber;
     }
+
+    public String getSerialNumber() {
+        return serialNumber;
+    }
+
+    public void setSerialNumber(String serialNumber) {
+        this.serialNumber = serialNumber;
+    }
 }

+ 7 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/MachinePartsService.java

@@ -19,6 +19,13 @@ public interface MachinePartsService {
     Integer addMachineParts(PtsComponents ptsComponents);
 
     /**
+     * 查询零件的数量
+     * @param ptsComponents
+     * @return
+     */
+    Integer  getmachinePartsNumber(PtsComponents ptsComponents);
+
+    /**
      * 查询单个机器零件信息
      * **/
     PtsComponents getmachineParts(PtsComponents ptsComponents);

+ 3 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/MachineSupplierService.java

@@ -30,6 +30,9 @@ public interface MachineSupplierService {
     //添加批次
     Integer savePtsSupplier(PtsSupplier ptsSupplier);
 
+    /*查询数量*/
+    Integer getPtsSupplierNumber(PtsSupplier ptsSupplier);
+
     //查询单个批次
     PtsSupplier getPtsSupplier(PtsSupplier ptsSupplier);
 

+ 2 - 2
watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/ProduceService.java

@@ -15,8 +15,8 @@ public interface ProduceService {
     //获取生产产品列表
     List<Produce> getProduceList();
 
-    //获取生产产品列表到内存
-    List<Produce> getAllProduceListToRam();
+    //获取生产产品列表
+    //List<Produce> getAllProduceListToRam();
 
     //获取生产产品列表
     List<Produce> getProduceList(Produce produce);

+ 2 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/PtsBatchService.java

@@ -14,6 +14,8 @@ public interface PtsBatchService {
     //查询b批次列表
     PagedResult<PtsBatch> listPtsBatchPage(int pageNO, int pageSize, PtsBatch ptsBatch, boolean isTotalNum);
 
+    List<PtsBatch> listPtsBatch(PtsBatch ptsBatch);
+
     //添加批次
     Integer savePtsBatch(PtsBatch ptsBatch);
 

+ 3 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/PtsBomService.java

@@ -14,6 +14,9 @@ public interface PtsBomService {
     //查询bom单列表
     PagedResult<PtsBom> listPtsBom(int pageNO, int pageSize, PtsBom ptsBom, boolean isTotalNum);
 
+    //查询bom单
+    List<PtsBom> listPtsBom(PtsBom ptsBom);
+
     //查询bom单集合
     List<PtsBom> listBom(PtsBom ptsBom);
 

+ 5 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/MachinePartsServiceImpl.java

@@ -41,6 +41,11 @@ public class MachinePartsServiceImpl implements MachinePartsService {
     }
 
     @Override
+    public Integer getmachinePartsNumber(PtsComponents ptsComponents) {
+        return machinePartsMapper.getmachinePartsNumber(ptsComponents);
+    }
+
+    @Override
     public PtsComponents getmachineParts(PtsComponents ptsComponents) {
         return machinePartsMapper.getmachineParts(ptsComponents);
     }

+ 5 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/MachineSupplierServiceImpl.java

@@ -44,6 +44,11 @@ public class MachineSupplierServiceImpl implements MachineSupplierService {
     }
 
     @Override
+    public Integer getPtsSupplierNumber(PtsSupplier ptsSupplier) {
+        return machineSupplierMapper.getPtsSupplierNumber(ptsSupplier);
+    }
+
+    @Override
     public PtsSupplier getPtsSupplier(PtsSupplier ptsSupplier) {
         return machineSupplierMapper.getPtsSupplier(ptsSupplier);
     }

+ 4 - 4
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/ProduceServiceImpl.java

@@ -30,10 +30,10 @@ public class ProduceServiceImpl implements ProduceService {
         return produceMapper.getProduceList(produce);
     }
 
-    @Override
-    public List<Produce> getAllProduceListToRam() {
-        return produceMapper.getAllProduceListToRam();
-    }
+//    @Override
+//    public List<Produce> getAllProduceListToRam() {
+//        return produceMapper.getAllProduceListToRam();
+//    }
 
     //获取生产产品列表
     public List<Produce> getProduceList(Produce produce) {

+ 5 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/PtsBatchServiceImpl.java

@@ -28,6 +28,11 @@ public class PtsBatchServiceImpl implements PtsBatchService {
     }
 
     @Override
+    public List<PtsBatch> listPtsBatch(PtsBatch ptsBatch) {
+        return ptsBatchMapper.listPtsBatch(ptsBatch);
+    }
+
+    @Override
     public Integer savePtsBatch(PtsBatch ptsBatch) {
         if(ptsBatch.getBatchStatus() == 1){
             PtsBatch pts = new PtsBatch();

+ 7 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/PtsBomServiceImpl.java

@@ -2,11 +2,13 @@ package com.iamberry.rst.service.pts;
 
 import com.github.pagehelper.PageHelper;
 import com.iamberry.rst.core.page.PagedResult;
+import com.iamberry.rst.core.pts.Produce;
 import com.iamberry.rst.core.pts.PtsBom;
 import com.iamberry.rst.core.pts.PtsBomComponents;
 import com.iamberry.rst.core.pts.PtsComponents;
 import com.iamberry.rst.faces.pts.PtsBomService;
 import com.iamberry.rst.service.pts.mapper.MachinePartsMapper;
+import com.iamberry.rst.service.pts.mapper.ProduceMapper;
 import com.iamberry.rst.service.pts.mapper.PtsBomMapper;
 import com.iamberry.rst.util.PageUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +34,11 @@ public class PtsBomServiceImpl implements PtsBomService {
         return PageUtil.getPage(list);
     }
 
+    @Override
+    public List<PtsBom> listPtsBom(PtsBom ptsBom) {
+        return ptsBomMapper.listPtsBom(ptsBom);
+    }
+
     //查询bom单集合
     @Override
     public List<PtsBom> listBom(PtsBom ptsBom) {

+ 8 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/MachinePartsMapper.java

@@ -17,6 +17,14 @@ public interface MachinePartsMapper {
     Integer addMachineParts(PtsComponents ptsComponents);
 
     /**
+     * 查询零件的数量
+     * @param ptsComponents
+     * @return
+     */
+    Integer  getmachinePartsNumber(PtsComponents ptsComponents);
+
+
+    /**
      * 查询单个机器零件信息
      * **/
     PtsComponents getmachineParts(PtsComponents ptsComponents);

+ 3 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/MachineSupplierMapper.java

@@ -20,6 +20,9 @@ public interface MachineSupplierMapper {
     //添加批次
     Integer savePtsSupplier(PtsSupplier ptsSupplier);
 
+    /*查询数量*/
+    Integer getPtsSupplierNumber(PtsSupplier ptsSupplier);
+
     //查询单个批次
     PtsSupplier getPtsSupplier(PtsSupplier ptsSupplier);
 

+ 2 - 2
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/ProduceMapper.java

@@ -15,8 +15,8 @@ public interface ProduceMapper {
     //获取生产产品列表
     List<Produce> getProduceList(Produce produce);
 
-    //获取生产产品列表到内存
-    List<Produce> getAllProduceListToRam();
+    //获取生产产品列表
+    //List<Produce> getAllProduceListToRam();
 
     //获取生产产品,产品工序,工序节点
     List<Produce> getAllProduceList(Integer employeeId);

+ 16 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/machinePartsMapper.xml

@@ -51,6 +51,22 @@
             </if>
         </where>
     </select>
+
+    <select id="getmachinePartsNumber" parameterType="PtsComponents" resultType="Integer">
+        SELECT
+        COUNT(*)
+        FROM
+        tb_rst_pts_components
+        <where>
+            <if test="componentsType != null and componentsType != ''">
+                components_type = #{componentsType}
+            </if>
+            <if test="componentsNo != null and componentsNo != ''">
+                AND  components_no = #{componentsNo}
+            </if>
+        </where>
+    </select>
+
     <select id="listPtsComponents" parameterType="PtsComponents" resultType="PtsComponents" >
         SELECT
             t.components_id AS componentsId,

+ 18 - 4
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/machineSupplierMapper.xml

@@ -23,13 +23,13 @@
             tb_rst_pts_components trpc ON trps.supplier_id = trpc.supplier_id
         <where>
             <if test="supplierName !=null and supplierName !=''">
-                supplier_name like CONCAT('%',#{supplierName},'%')
+                AND  supplier_name like CONCAT('%',#{supplierName},'%')
             </if>
             <if test="supplierContactPerson !=null and supplierContactPerson !=''">
-                supplier_contact_person like CONCAT('%',#{supplierContactPerson},'%')
+                AND supplier_contact_person like CONCAT('%',#{supplierContactPerson},'%')
             </if>
             <if test="supplierTel !=null and supplierTel !=''">
-                supplier_tel like CONCAT('%',#{supplierTel},'%')
+                AND supplier_tel like CONCAT('%',#{supplierTel},'%')
             </if>
         </where>
         GROUP BY trps.supplier_id
@@ -59,6 +59,9 @@
             <if test="supplierEmail !=null and supplierEmail !=''">
                 supplier_email = #{supplierEmail},
             </if>
+            <if test="supplierNumber !=null and supplierNumber !=''">
+                supplier_number = #{supplierNumber},
+            </if>
                 supplier_phone = #{supplierPhone},
                 supplier_address = #{supplierAddress}
             <!--</if>-->
@@ -83,7 +86,7 @@
             tb_rst_pts_supplier
         <where>
             <if test="supplierId !=null and supplierId !=''">
-                AND supplier_id = #{supplierId},
+                AND supplier_id = #{supplierId}
             </if>
             <if test="supplierNumber !=null and supplierNumber !=''">
                 AND supplier_number = #{supplierNumber}
@@ -91,4 +94,15 @@
         </where>
     </select>
 
+
+    <select id="getPtsSupplierNumber"  resultType="Integer" parameterType="PtsSupplier">
+        SELECT COUNT(*) FROM tb_rst_pts_supplier
+        <where>
+            <if test="supplierId !=null and supplierId !=''">
+                supplier_id = #{supplierId}
+            </if>
+        </where>
+    </select>
+
+
 </mapper>

+ 3 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/machineVersionMapper.xml

@@ -33,6 +33,9 @@
             <if test="machineVersionType != null and machineVersionType != ''">
                 AND machine_version_type = #{machineVersionType}
             </if>
+            <if test="machineVersionNo != null and machineVersionNo != ''">
+                AND machine_version_no like CONCAT('%',#{machineVersionNo},'%')
+            </if>
         </where>
     </select>
 

+ 3 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/produceMapper.xml

@@ -18,6 +18,9 @@
             <if test="produceStatus !=null">
                 produce_status = #{produceStatus}
             </if>
+            <if test="produceName !=null and produceName !=''">
+                AND produce_name like CONCAT('%',#{produceName},'%')
+            </if>
         </where>
     </select>
 

+ 7 - 6
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/ptsBatchMapper.xml

@@ -10,21 +10,21 @@
             t.batch_color_quantity AS batchColorQuantity,
             t.bom_id AS bomId,
             t.produce_id AS produceId,
-            t.batch_software_version_id AS batchSoftwareVersionId,
             t.batch_status AS  batchStatus,
             t.batch_desc AS batchDesc,
             t.batch_create_time AS batchCreateTime,
             t.batch_update_time AS batchUpdateTime,
             trpp.produce_name AS produceName,
             trpb.bom_name AS bomName,
-            tepmv.machine_version_no AS  softwareVersionNo,
-            count(tbpm.machine_id) AS generatedQuantity
+            count(tbpm.machine_id) AS generatedQuantity,
+            trpmv.machine_version_no AS softwareVersionNo,
+            trpb.machine_version_id AS batchSoftwareVersionId
         FROM
             	tb_rst_pts_batch t
         LEFT JOIN tb_rst_pts_produce trpp ON t.produce_id = trpp.produce_id
         LEFT JOIN tb_rst_pts_bom trpb ON t.bom_id = trpb.bom_id
-        LEFT JOIN tb_rst_pts_machine_version tepmv ON t.batch_software_version_id = tepmv.machine_version_id
         LEFT JOIN tb_rst_pts_machine tbpm  ON t.batch_id = tbpm.machine_batch_id
+        LEFT JOIN tb_rst_pts_machine_version trpmv ON trpb.machine_version_id = trpmv.machine_version_id
         <where>
             <if test="produceId !=null">
                 AND t.produce_id = #{produceId}
@@ -45,13 +45,14 @@
             t.batch_color_quantity AS batchColorQuantity,
             t.bom_id AS bomId,
             t.produce_id AS produceId,
-            t.batch_software_version_id AS batchSoftwareVersionId,
             t.batch_status AS  batchStatus,
             t.batch_desc AS batchDesc,
             t.batch_create_time AS batchCreateTime,
-            t.batch_update_time AS batchUpdateTime
+            t.batch_update_time AS batchUpdateTime,
+            trpb.machine_version_id AS batchSoftwareVersionId
         FROM
             tb_rst_pts_batch t
+        LEFT JOIN tb_rst_pts_bom trpb ON t.bom_id = trpb.bom_id
         <where>
             <if test="produceId !=null">
                 AND t.produce_id = #{produceId}

+ 17 - 6
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/ptsBomMapper.xml

@@ -8,18 +8,21 @@
         trpb.bom_name AS bomName,
         trpb.produce_id AS produceId,
         trpb.bom_version AS bomVersion,
+        trpb.machine_version_id AS machineVersionId,
         trpb.bom_remarks AS bomRemarks,
         trpb.bom_create_time AS bomCreateTime,
         trpb.bom_update_time AS bomUpdateTime,
         IFNULL(SUM(trpbc.bom_components_quantity),0) AS componentsQuantity,
         ifnull(SUM(trpc.components_cost * trpbc.bom_components_quantity),0)  AS allComponentsCost,
         ifnull(SUM(trpc.components_weight * trpbc.bom_components_quantity),0)  AS allComponentsWeight,
-        trpp.produce_name AS produceName
+        trpp.produce_name AS produceName,
+        trpmv.machine_version_no AS machineVersionNo
         FROM
         tb_rst_pts_bom trpb
         LEFT JOIN tb_rst_pts_bom_components trpbc ON trpb.bom_id = trpbc.bom_id
         LEFT JOIN tb_rst_pts_components trpc ON trpbc.components_id = trpc.components_id
         LEFT JOIN tb_rst_pts_produce trpp ON trpb.produce_id = trpp.produce_id
+        LEFT JOIN tb_rst_pts_machine_version trpmv ON trpb.machine_version_id = trpmv.machine_version_id
         <where>
             <if test="bomId !=null">
                 AND trpb.bom_id like CONCAT('%',#{bomId},'%')
@@ -47,21 +50,23 @@
         trpb.bom_name AS bomName,
         trpb.produce_id AS produceId,
         trpb.bom_version AS bomVersion,
+        trpb.machine_version_id AS machineVersionId,
         trpb.bom_remarks AS bomRemarks,
         trpb.bom_create_time AS bomCreateTime,
         trpb.bom_update_time AS bomUpdateTime,
         IFNULL(SUM(trpbc.bom_components_quantity),0) AS componentsQuantity,
         ifnull(SUM(trpc.components_cost * trpbc.bom_components_quantity),0)  AS allComponentsCost,
         ifnull(SUM(trpc.components_weight * trpbc.bom_components_quantity),0)  AS allComponentsWeight,
-        trpp.produce_name AS produceName
+        trpp.produce_name AS produceName,
+        trpmv.machine_version_no AS machineVersionNo
         FROM
         tb_rst_pts_bom trpb
         LEFT JOIN tb_rst_pts_bom_components trpbc ON trpb.bom_id = trpbc.bom_id
         LEFT JOIN tb_rst_pts_components trpc ON trpbc.components_id = trpc.components_id
         LEFT JOIN tb_rst_pts_produce trpp ON trpb.produce_id = trpp.produce_id
+        LEFT JOIN tb_rst_pts_machine_version trpmv ON trpb.machine_version_id = trpmv.machine_version_id
         WHERE
               trpb.bom_id = #{bomId}
-
         GROUP BY trpb.bom_id
     </select>
 
@@ -70,17 +75,20 @@
             t.bom_components_id AS bomComponentsId,
             t.bom_id AS bomId,
             t.components_id AS componentsId,
-            t.bom_components_quantity AS bomComponentsQuantity
+            t.bom_components_quantity AS bomComponentsQuantity,
+            trpc.components_no AS componentsNo,
+		    trpc.components_name AS componentsName
         FROM
             tb_rst_pts_bom_components t
+        LEFT JOIN tb_rst_pts_components trpc ON t.components_id = trpc.components_id
         WHERE
             t.bom_id = #{bomId}
     </select>
 
 
     <insert id="savePtsBom" parameterType="PtsBom" useGeneratedKeys="true" keyProperty="bomId">
-         insert into tb_rst_pts_bom (bom_name ,produce_id ,bom_remarks,bom_version  )
-         values (#{bomName},#{produceId},#{bomRemarks},#{bomVersion})
+         insert into tb_rst_pts_bom (bom_name ,produce_id ,bom_remarks,bom_version, machine_version_id )
+         values (#{bomName},#{produceId},#{bomRemarks},#{bomVersion},#{machineVersionId})
     </insert>
 
     <insert id="savePtsBomComponentsList" parameterType="java.util.List" useGeneratedKeys="true">
@@ -105,6 +113,9 @@
             <if test="bomVersion !=null  and bomVersion !=''">
                 bom_version = #{bomVersion},
             </if>
+            <if test="machineVersionId !=null  and machineVersionId !=''">
+                machine_version_id = #{machineVersionId},
+            </if>
                 bom_remarks = #{bomRemarks}
         </set>
         where

+ 47 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminMachinePartsController.java

@@ -91,6 +91,10 @@ public class AdminMachinePartsController {
         }
         ptsComponents.setComponentsCost(ptsComponents.getComponentsCost() * 100);//元转换为分
         ptsComponents.setComponentsCreateTime(new Date());
+
+        /* 生成机器零件编号 */
+        ptsComponents.setComponentsNo(this.getComPonentsNumber(ptsComponents.getComponentsNo(),ptsComponents.getComponentsType()));
+
         Integer msg =  machinePartsService.addMachineParts(ptsComponents);
         if(msg > 0){
             responseJson.setReturnCode(200);
@@ -101,6 +105,35 @@ public class AdminMachinePartsController {
     }
 
     /**
+     * 生成机器零件编号
+     * @param componentsNo
+     * @param type
+     * @return
+     */
+    private String getComPonentsNumber(String componentsNo,Integer type){
+        PtsComponents compon = new PtsComponents();
+        compon.setComponentsType(type);
+        Integer number = machinePartsService.getmachinePartsNumber(compon) + 1;
+        String no =  String.format("%04d", number);
+        String comPonentsNo = componentsNo + "-" + no;
+
+        boolean flag = true;
+        while (flag){
+            compon = new PtsComponents();
+            compon.setComponentsNo(comPonentsNo);
+            Integer comNumber = machinePartsService.getmachinePartsNumber(compon);
+            if(comNumber == 0){
+                flag = false;
+            }else{
+                number ++ ;
+                no =  String.format("%04d", number);
+                comPonentsNo = componentsNo + "-" + no;
+            }
+        }
+        return comPonentsNo;
+    }
+
+    /**
      * 导入EXCEL生产零件(图片为默认图片)
      * **/
     @RequestMapping("/excelAdd")
@@ -261,6 +294,14 @@ public class AdminMachinePartsController {
         PtsComponents ptsComponents = new PtsComponents();
         ptsComponents.setComponentsId(Integer.valueOf(componentsId));
         ptsComponents = machinePartsService.getmachineParts(ptsComponents);
+
+        String comPonentsNos[] = ptsComponents.getComponentsNo().split("-");
+        if(comPonentsNos != null && comPonentsNos.length > 2){
+            ptsComponents.setComponentsNo(comPonentsNos[1]);
+            String number = String.valueOf(comPonentsNos[2]);
+            ptsComponents.setSerialNumber(number);
+        }
+
         mv.addObject("ptsComponents", ptsComponents);
         List<Produce> list = produceService.getProduceList();
         mv.addObject("produceList", list);
@@ -304,6 +345,12 @@ public class AdminMachinePartsController {
         ptsComponents.setComponentsId(componentsId);
         ptsComponents.setComponentsCost(ptsComponents.getComponentsCost() * 100);//元转换为分
         ptsComponents.setComponentsUpdateTime(new Date());
+
+        String comPonentsNos[] = ptsComponents.getComponentsNo().split("-");
+        if(comPonentsNos != null && comPonentsNos.length < 3){
+            ptsComponents.setComponentsNo(this.getComPonentsNumber(ptsComponents.getComponentsNo(),ptsComponents.getComponentsType()));
+        }
+
         Integer msg =  machinePartsService.updateParts(ptsComponents);
         if(msg > 0){
             responseJson.setReturnCode(200);

+ 56 - 4
watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminPtsBatchController.java

@@ -7,6 +7,7 @@ import com.iamberry.rst.faces.pts.ProduceService;
 import com.iamberry.rst.faces.pts.PtsBatchService;
 import com.iamberry.rst.faces.pts.PtsBomService;
 import com.iamberry.rst.utils.StitchAttrUtil;
+import com.iamberry.wechat.tools.ObjectExcelView;
 import com.iamberry.wechat.tools.ResponseJson;
 import net.sf.json.JSONArray;
 import org.apache.shiro.authz.annotation.Logical;
@@ -19,8 +20,11 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 批次管理controller
@@ -191,7 +195,7 @@ public class AdminPtsBatchController {
      * @param ptsBatch
      * @return
      */
-    public boolean isValiData(PtsBatch ptsBatch) {
+    private boolean isValiData(PtsBatch ptsBatch) {
         boolean flag = true;
         if(ptsBatch.getBatchNo() == null  || ptsBatch.getBatchNo().length() >= 20){
             return false;
@@ -205,9 +209,9 @@ public class AdminPtsBatchController {
         if (ptsBatch.getProduceId() == null){
             return false;
         }
-        if (ptsBatch.getBatchSoftwareVersionId() == null){
-            return false;
-        }
+//        if (ptsBatch.getBatchSoftwareVersionId() == null){
+//            return false;
+//        }
         if (ptsBatch.getBatchStatus() == null){
             return false;
         }
@@ -275,4 +279,52 @@ public class AdminPtsBatchController {
         }
     }
 
+    /**
+     *  批次 -- excel导出
+     *
+     * @return
+     */
+    @RequestMapping(value = "/generation_excel")
+    public ModelAndView generationExcel(HttpServletRequest request) throws Exception{
+
+        // 准备model
+        Map<String, Object> model = new HashMap<String, Object>();
+        model.put("fileName", "批次列表");	// 下载文件名称
+
+        // 标题
+        List<String> titles = new ArrayList<String>();
+        titles.add("所属产品");
+        titles.add("批次编号");
+        titles.add("总数量");
+        titles.add("已生产数量");
+        titles.add("状态");
+        titles.add("软件版本");
+        titles.add("Bom单名称");
+        titles.add("创建时间");
+        model.put("titles", titles);
+        PtsBatch ptsBatch = new PtsBatch();
+        List<List<Object>> countexts = new ArrayList<List<Object>>();
+        List<PtsBatch> list = ptsBatchService.listPtsBatch(ptsBatch);
+        for (PtsBatch info : list) {
+            List<Object> row = new ArrayList<Object>();
+            row.add(info.getProduceName() == null ? null:info.getProduceName());
+            row.add(info.getBatchNo() == null ? null:info.getBatchNo());
+            row.add(info.getBatchQuantity() == null ? null:info.getBatchQuantity());
+            row.add(info.getGeneratedQuantity() == null ? null:info.getGeneratedQuantity());
+            row.add(info.getBatchStatus() == 0 ? "停止使用":"正常使用");
+            row.add(info.getSoftwareVersionNo() == null ? null:info.getSoftwareVersionNo());
+            row.add(info.getBomName() == null ? null:info.getBomName());
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String time = formatter.format(info.getBatchCreateTime());
+            row.add(time);
+            countexts.add(row);
+        }
+        model.put("varList", countexts);
+
+        ObjectExcelView erv = new ObjectExcelView();
+        ModelAndView mv = new ModelAndView(erv,model);
+        return mv;
+    }
+
+
 }

+ 315 - 7
watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminPtsBomController.java

@@ -1,16 +1,21 @@
 package com.iamberry.rst.controllers.pts;
 
 import com.iamberry.rst.core.page.PagedResult;
-import com.iamberry.rst.core.pts.Produce;
-import com.iamberry.rst.core.pts.PtsBom;
-import com.iamberry.rst.core.pts.PtsBomComponents;
-import com.iamberry.rst.core.pts.PtsComponents;
+import com.iamberry.rst.core.pts.*;
 import com.iamberry.rst.faces.pts.MachinePartsService;
+import com.iamberry.rst.faces.pts.MachineVersionService;
 import com.iamberry.rst.faces.pts.ProduceService;
 import com.iamberry.rst.faces.pts.PtsBomService;
+import com.iamberry.rst.utils.ExcelUtil;
 import com.iamberry.rst.utils.StitchAttrUtil;
+import com.iamberry.wechat.tools.ObjectExcelView;
 import com.iamberry.wechat.tools.ResponseJson;
+import com.iamberry.wechat.tools.ResultInfo;
 import net.sf.json.JSONArray;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.shiro.authz.annotation.Logical;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,10 +23,14 @@ import org.springframework.stereotype.Controller;
 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 org.springframework.web.multipart.commons.CommonsMultipartFile;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.*;
 
 /**
  * bom单管理 controller
@@ -40,6 +49,9 @@ public class AdminPtsBomController {
     @Autowired
     private MachinePartsService machinePartsService;
 
+    @Autowired
+    private MachineVersionService machineVersionService;
+
     /**
      * 获取bom单列表
      *
@@ -67,6 +79,28 @@ public class AdminPtsBomController {
     }
 
     /**
+     * 获取bom单全部
+     *
+     * @param request
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("bom:select:list")
+    @RequestMapping("/get_bom_list")
+    public ResponseJson getPtsBom(HttpServletRequest request, PtsBom ptsBom) {
+
+        List<PtsBom> bomList = ptsBomService.listPtsBom(ptsBom);
+
+        if (bomList != null) {
+            ResponseJson rj = new ResponseJson(200, "SUCCESS", 200);
+            rj.addResponseKeyValue("bomList", bomList);
+            return rj;
+        } else {
+            return new ResponseJson(500, "ERROR", 500);
+        }
+    }
+
+    /**
      * 跳转到添加bom单页面
      *
      * @return
@@ -79,7 +113,15 @@ public class AdminPtsBomController {
         //获取产品集合,用于页面选择产品
         List<Produce> produceList = produceService.getProduceList();
 
+        //获取软件集合,用于页面选择软件版本
+        PtsMachineVersion ptsMachineVersion = new PtsMachineVersion();
+        if (produceList != null && produceList.size() > 0) {
+            ptsMachineVersion.setProduceId(produceList.get(0).getProduceId());
+        }
+        List<PtsMachineVersion> machineVersionList = machineVersionService.listMachineVersion(ptsMachineVersion);
+
         mv.addObject("produceList", produceList);
+        mv.addObject("machineVersionList", machineVersionList);
         return mv;
     }
 
@@ -112,6 +154,7 @@ public class AdminPtsBomController {
 
     /**
      * 验证方法
+     *
      * @param ptsBom
      * @return
      */
@@ -120,16 +163,44 @@ public class AdminPtsBomController {
         if (ptsBom.getBomName() == null || "".equals(ptsBom.getBomName())) {
             return false;
         }
-        if(ptsBom.getProduceId() == null){
+        if (ptsBom.getProduceId() == null) {
             return false;
         }
-        if(ptsBom.getBomVersion() == null || "".equals(ptsBom.getBomVersion())){
+        if (ptsBom.getBomVersion() == null || "".equals(ptsBom.getBomVersion())) {
             return false;
         }
         return flag;
     }
 
     /**
+     * 获取软件版本
+     *
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions(value = {"bom:add:bom", "bom:update:bom"}, logical = Logical.OR)
+    @RequestMapping(value = "/get_listMachineVersion")
+    public ResponseJson listMachineVersion(HttpServletRequest request) {
+
+        String produceId = request.getParameter("produceId");
+        if (produceId == null || "".equals(produceId)) {
+            return new ResponseJson(500, "ERROR", 500);
+        }
+
+        PtsMachineVersion ptsMachineVersion = new PtsMachineVersion();
+        ptsMachineVersion.setProduceId(Integer.valueOf(produceId));
+        List<PtsMachineVersion> machineVersionList = machineVersionService.listMachineVersion(ptsMachineVersion);
+
+        if (machineVersionList != null) {
+            ResponseJson rj = new ResponseJson(200, "SUCCESS", 200);
+            rj.addResponseKeyValue("machineVersionList", machineVersionList);
+            return rj;
+        } else {
+            return new ResponseJson(500, "ERROR", 500);
+        }
+    }
+
+    /**
      * 获取bom单,根据produce
      *
      * @return
@@ -241,9 +312,17 @@ public class AdminPtsBomController {
         ptsComponents.setComponentsStatus(1);
         List<PtsComponents> ptsComponentsList = machinePartsService.listPtsComponentsOrderByNo(ptsComponents);
 
+        //获取软件集合,用于页面选择软件版本
+        PtsMachineVersion ptsMachineVersion = new PtsMachineVersion();
+        if (produceList != null && produceList.size() > 0) {
+            ptsMachineVersion.setProduceId(ptsBom.getProduceId());
+        }
+        List<PtsMachineVersion> machineVersionList = machineVersionService.listMachineVersion(ptsMachineVersion);
+
         mv.addObject("produceList", produceList);
         mv.addObject("ptsBom", ptsBom);
         mv.addObject("ptsComponentsList", ptsComponentsList);
+        mv.addObject("machineVersionList", machineVersionList);
         return mv;
     }
 
@@ -306,4 +385,233 @@ public class AdminPtsBomController {
     }
 
 
+    /**
+     * 添加bom单  -- excel导入
+     *
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("bom:list:uploadFile")
+    @RequestMapping(value = "/upload_bom")
+    public ResponseJson uploadBom(@RequestParam("file") String file, HttpServletRequest request) throws Exception {
+        //mv.addObject("heads", ExcelUtil.readExcelHead(request.getServletContext().getRealPath(file)));
+        //mv.addObject("productUrl", file);
+        String path = request.getServletContext().getRealPath(file);
+
+        Map<String, Object> map = ExcelUtil.readExcelBom(path);
+        String bomName = String.valueOf(map.get("bomName"));
+        String produceName = String.valueOf(map.get("produceName"));
+        String bomVersion = String.valueOf(map.get("bomVersion"));  //硬件版本号
+        String machineVersionNo = String.valueOf(map.get("machineVersionNo"));   //软件版本号
+        String bomRemarks = String.valueOf(map.get("bomRemarks"));   //备注
+        List<PtsBomComponents> componentsList = (List<PtsBomComponents>) map.get("componentsList");
+
+        Produce produce = new Produce();
+        produce.setProduceName(produceName);
+        List<Produce> produceList = produceService.getProduceList(produce);
+        if (produceList == null || produceList.size() < 1) {
+            return new ResponseJson(500, "未查询到该产品或查询到多个产品,请重新填写", 500);
+        }
+
+        PtsMachineVersion ptsMachineVersion = new PtsMachineVersion();
+        ptsMachineVersion.setMachineVersionNo(machineVersionNo);
+        ptsMachineVersion.setProduceId(produceList.get(0).getProduceId());
+        List<PtsMachineVersion> machineVersionList = machineVersionService.listMachineVersion(ptsMachineVersion);
+        if (machineVersionList == null || machineVersionList.size() < 1) {
+            return new ResponseJson(500, "未查询到该产品的软件版本或查询到多个软件版本,请重新填写", 500);
+        }
+
+        for (int i = 0; i < componentsList.size(); i++) {
+            PtsComponents ptsComponents = new PtsComponents();
+            ptsComponents.setComponentsNo(componentsList.get(i).getComponentsNo());
+            ptsComponents = machinePartsService.getmachineParts(ptsComponents);
+            if (ptsComponents == null) {
+                return new ResponseJson(500, "未查询到" + componentsList.get(i).getComponentsNo() + "编号的零件", 500);
+            }
+            componentsList.get(i).setComponentsId(ptsComponents.getComponentsId());
+        }
+
+        PtsBom bom = new PtsBom();
+        bom.setBomName(bomName);
+        bom.setProduceId(produceList.get(0).getProduceId());
+        bom.setBomVersion(bomVersion);
+        bom.setMachineVersionId(machineVersionList.get(0).getMachineVersionId());
+        bom.setBomRemarks(bomRemarks);
+        bom.setPtsBomComponentsList(componentsList);
+        Integer flag = ptsBomService.savePtsBom(bom);
+
+        if (flag < 1) {
+            return new ResponseJson(500, "添加失败", 500);
+        } else {
+            return new ResponseJson(200, "添加成功", 200);
+        }
+    }
+
+
+    /**
+     * 导入bom单
+     * **/
+   /* @ResponseBody
+    @RequiresPermissions("bom:list:uploadFile")
+    @RequestMapping(value = "/upload_bom")
+    public ResponseJson uploadBom(@RequestParam("sourceFile") MultipartFile sourceFile, HttpServletRequest request, HttpServletResponse response)throws IOException {
+        //判断文件是否为空
+        if (sourceFile==null) {
+            return new ResponseJson(500, "文件为空", 500);
+        }
+        //获取文件名
+        String name=sourceFile.getOriginalFilename();
+        long size =sourceFile.getSize();
+        if (name==null ||("").equals(name) && size==0) {
+            return new ResponseJson(500, "文件为空", 500);
+        }
+
+        //把spring文件上传的MultipartFile转换成CommonsMultipartFile类型
+        CommonsMultipartFile cf= (CommonsMultipartFile)sourceFile; //获取本地存储路径
+        File file = new File(ResultInfo.PARTS_EXCEL);
+        //创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
+        if (!file.exists()) file.mkdirs();
+        //新建一个文件
+        File file1 = new File(ResultInfo.PARTS_EXCEL + new Date().getTime() + ".xls");
+        //将上传的文件写入新建的文件中
+        try {
+            cf.getFileItem().write(file1);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        String path = file1.getCanonicalPath();
+
+        Map<String, Object> map = ExcelUtil.readExcelBom(path);
+        String bomName = String.valueOf(map.get("bomName"));
+        String produceName = String.valueOf(map.get("produceName"));
+        String bomVersion = String.valueOf(map.get("bomVersion"));  //硬件版本号
+        String machineVersionNo = String.valueOf(map.get("machineVersionNo"));   //软件版本号
+        String bomRemarks = String.valueOf(map.get("bomRemarks"));   //备注
+        List<PtsBomComponents> componentsList = (List<PtsBomComponents>) map.get("componentsList");
+
+        Produce produce = new Produce();
+        produce.setProduceName(produceName);
+        List<Produce> produceList = produceService.getProduceList(produce);
+        if (produceList == null || produceList.size() < 1) {
+            return new ResponseJson(500, "未查询到该产品(" + produceName +")或查询到多个产品,请重新填写", 500);
+        }
+
+        PtsMachineVersion ptsMachineVersion = new PtsMachineVersion();
+        ptsMachineVersion.setMachineVersionNo(machineVersionNo);
+        ptsMachineVersion.setProduceId(produceList.get(0).getProduceId());
+        List<PtsMachineVersion> machineVersionList = machineVersionService.listMachineVersion(ptsMachineVersion);
+        if (machineVersionList == null || machineVersionList.size() < 1) {
+            return new ResponseJson(500, "未查询到相应产品的软件版本号("+ machineVersionNo +")或查询到多个软件版本,请重新填写", 500);
+        }
+
+        for (int i = 0; i < componentsList.size(); i++) {
+            PtsComponents ptsComponents = new PtsComponents();
+            ptsComponents.setComponentsNo(componentsList.get(i).getComponentsNo());
+            ptsComponents = machinePartsService.getmachineParts(ptsComponents);
+            if (ptsComponents == null) {
+                return new ResponseJson(500, "未查询到" + componentsList.get(i).getComponentsNo() + "编号的零件", 500);
+            }
+            componentsList.get(i).setComponentsId(ptsComponents.getComponentsId());
+        }
+
+        PtsBom bom = new PtsBom();
+        bom.setBomName(bomName);
+        bom.setProduceId(produceList.get(0).getProduceId());
+        bom.setBomVersion(bomVersion);
+        bom.setMachineVersionId(machineVersionList.get(0).getMachineVersionId());
+        bom.setBomRemarks(bomRemarks);
+        bom.setPtsBomComponentsList(componentsList);
+        Integer flag = ptsBomService.savePtsBom(bom);
+
+        if (flag < 1) {
+            return new ResponseJson(500, "添加失败", 500);
+        } else {
+            return new ResponseJson(200, "添加成功", 200);
+        }
+
+    }*/
+
+    /**
+     * bom单  -- excel导出
+     *
+     * @return
+     */
+    @RequiresPermissions("bom:list:uploadFile")
+    @RequestMapping(value = "/generation_excel")
+    public ModelAndView generationExcel(HttpServletRequest request) throws Exception {
+
+        String bomId = request.getParameter("bomId");
+        PtsBom ptsBom = new PtsBom();
+        if (bomId == null || "".equals(bomId)) {
+            throw new Exception("未获取到Bom单");
+        }
+        ptsBom.setBomId(Integer.valueOf(bomId));
+        ptsBom = ptsBomService.getPtsBom(ptsBom);
+
+        List<PtsBomComponents> ptsBomComponentsList = ptsBom.getPtsBomComponentsList();
+
+        // 准备model
+        Map<String, Object> model = new HashMap<String, Object>();
+        model.put("fileName", "Bom单");    // 下载文件名称
+
+        // 标题
+        List<String> t1 = new ArrayList<String>();
+        t1.add("bom单基本信息");
+        t1.add("");
+        t1.add("");
+        model.put("titles", t1);
+
+        List<List<Object>> countexts = new ArrayList<List<Object>>();
+        for (int i = 0; i <ptsBomComponentsList.size() + 8; i++) {
+            List<Object> row = new ArrayList<Object>();
+            switch (i) {
+                case 0:
+                    row.add("bom单名称");
+                    row.add(ptsBom.getBomName());
+                    break;
+                case 1:
+                    row.add("所属产品");
+                    row.add(ptsBom.getProduceName());
+                    break;
+                case 2:
+                    row.add("硬件版本号");
+                    row.add(ptsBom.getBomVersion());
+                    break;
+                case 3:
+                    row.add("软件版本号");
+                    row.add(ptsBom.getMachineVersionNo());
+                    break;
+                case 4:
+                    row.add("备注");
+                    row.add(ptsBom.getBomRemarks());
+                    break;
+                case 5:
+                    row.add("");
+                    row.add("");
+                    break;
+                case 6:
+                    row.add("Bom零件清单");
+                    row.add("");
+                    break;
+                case 7:
+                    row.add("零件编号");
+                    row.add("零件数量");
+                    break;
+                default:
+                    PtsBomComponents ptsBomComponents = ptsBomComponentsList.get(i-8);
+                    row.add(ptsBomComponents.getComponentsNo());
+                    row.add(ptsBomComponents.getBomComponentsQuantity()/100);
+                    break;
+            }
+            countexts.add(row);
+        }
+        model.put("varList", countexts);
+
+        ObjectExcelView erv = new ObjectExcelView();
+        ModelAndView mv = new ModelAndView(erv, model);
+        return mv;
+    }
+
+
 }

+ 26 - 4
watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminPtsSupplierController.java

@@ -140,6 +140,12 @@ public class AdminPtsSupplierController {
         if (!this.isValiData(ptsSupplier)  ) {
             return new ResponseJson(500, "请检查表单,再次提交", 500);
         }
+
+        PtsSupplier supplier = new PtsSupplier();
+        Integer number = machineSupplierService.getPtsSupplierNumber(supplier);
+        String no = String.format("%05d",number + 1);
+        ptsSupplier.setSupplierNumber(ptsSupplier.getSupplierNumber() + no);
+
         Integer flag = machineSupplierService.savePtsSupplier(ptsSupplier);
         if (flag < 1) {
             return new ResponseJson(500, "添加失败", 500);
@@ -163,36 +169,52 @@ public class AdminPtsSupplierController {
     }
 
     /**
-     * 跳转到修改批次页面
+     * 跳转到修改gongyignshnag
      *
      * @return
      */
     @RequiresPermissions("supplier:update:supplier")
     @RequestMapping(value = "/to_update_supplier")
-    public ModelAndView toUpdateBatch(Integer supplierId, HttpServletRequest request) {
+    public ModelAndView toUpdateSupplier(Integer supplierId, HttpServletRequest request) {
         ModelAndView mv = new ModelAndView("pts/supplier/update_supplier");
 
         PtsSupplier ptsSupplier = new PtsSupplier();
         ptsSupplier.setSupplierId(supplierId);
         ptsSupplier = machineSupplierService.getPtsSupplier(ptsSupplier);
 
+        if(ptsSupplier.getSupplierNumber() != null && !"".equals(ptsSupplier.getSupplierNumber())){
+            String no = ptsSupplier.getSupplierNumber();
+            String number = no.substring(3,4);
+            String serialNumber = no.substring(4,9);
+            ptsSupplier.setSupplierNumber(number);
+            ptsSupplier.setSerialNumber(serialNumber);
+        }
         mv.addObject("ptsSupplier", ptsSupplier);
         return mv;
     }
 
     /**
-     * 修改批次
+     * 修改gongyingshang
      *
      * @return
      */
     @ResponseBody
     @RequiresPermissions("supplier:add:supplier")
     @RequestMapping(value = "/update_supplier")
-    public ResponseJson updateBatch(PtsSupplier ptsSupplier, HttpServletRequest request) {
+    public ResponseJson updateSupplier(PtsSupplier ptsSupplier, HttpServletRequest request) {
 
         if (!this.isValiData(ptsSupplier)  ) {
             return new ResponseJson(500, "请检查表单,再次提交", 500);
         }
+
+        String supplierNumber = ptsSupplier.getSupplierNumber();
+        if(supplierNumber.length() == 4){
+            PtsSupplier supplier = new PtsSupplier();
+            Integer number = machineSupplierService.getPtsSupplierNumber(supplier);
+            String no = String.format("%05d",number + 1);
+            ptsSupplier.setSupplierNumber(ptsSupplier.getSupplierNumber() + no);
+        }
+
         Integer flag = machineSupplierService.updatePtsSupplier(ptsSupplier);
         if (flag < 1) {
             return new ResponseJson(500, "修改失败", 500);

+ 135 - 13
watero-rst-web/src/main/java/com/iamberry/rst/utils/ExcelUtil.java

@@ -1,6 +1,8 @@
 package com.iamberry.rst.utils;
+
 import com.iamberry.rst.core.order.EfastOrder;
 import com.iamberry.rst.core.order.ProductColor;
+import com.iamberry.rst.core.pts.PtsBomComponents;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.poi.hssf.usermodel.*;
@@ -15,6 +17,7 @@ import java.util.*;
 
 /**
  * Excel工具类
+ *
  * @author 献
  * @company 深圳爱贝源科技有限公司
  * @website www.iamberry.com
@@ -27,6 +30,7 @@ public class ExcelUtil {
 
     /**
      * 读取Excel文件头
+     *
      * @param filePath
      * @return
      */
@@ -39,7 +43,7 @@ public class ExcelUtil {
         }
         // 获取Workbook
         InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
-        Workbook wb  = null;
+        Workbook wb = null;
         if (filePath.endsWith("xls")) {
             wb = new HSSFWorkbook(inputStream);
         } else {
@@ -61,9 +65,11 @@ public class ExcelUtil {
 
         return heads;
     }
+
     /**
      * 读取Excel内容
      * 去除重复
+     *
      * @param filePath
      * @return
      */
@@ -75,7 +81,7 @@ public class ExcelUtil {
         }
         // 获取Workbook
         InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
-        Workbook wb  = null;
+        Workbook wb = null;
         if (filePath.endsWith("xls")) {
             wb = new HSSFWorkbook(inputStream);
         } else {
@@ -94,7 +100,8 @@ public class ExcelUtil {
         while (cells.hasNext()) {
             Cell cell = cells.next();
             if (cellName.trim().equals(cell.getStringCellValue().trim())) {
-                cellNum = cell.getColumnIndex();break;
+                cellNum = cell.getColumnIndex();
+                break;
             }
         }
         if (cellNum == -1) return null;
@@ -121,9 +128,123 @@ public class ExcelUtil {
         Collection<String> valueCollection = map.values();
         return new ArrayList<String>(valueCollection);
     }
+
+    /**
+     * 读取Excel内容
+     * 读取bom单excel的内容
+     *
+     * @param filePath
+     * @return
+     */
+    public static Map<String, Object> readExcelBom(String filePath) throws IOException {
+        // 判断文件是否存在
+        File file = new File(filePath);
+        if (!file.exists()) {
+            return null;
+        }
+        // 获取Workbook
+        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
+        Workbook wb = null;
+        if (filePath.endsWith("xls")) {
+            wb = new HSSFWorkbook(inputStream);
+        } else {
+            wb = new XSSFWorkbook(inputStream);
+        }
+        inputStream.close();
+
+        // 获取Sheet
+        Sheet sheet = wb.getSheetAt(0);
+
+        //获取bom单名称
+        Row rows = sheet.getRow(1);// 获取行
+        Cell cell = null;
+        cell = rows.getCell(1);//列
+        String bomName = "";
+        if(cell != null){
+            bomName = cell.getStringCellValue();
+        }
+
+        //获取产品名称
+        rows = sheet.getRow(2);// 获取行
+        cell = rows.getCell(1);//列
+        String produceName = "";
+        if(cell != null){
+            produceName = cell.getStringCellValue();
+        }
+
+        //硬件版本号
+        rows = sheet.getRow(3);// 获取行
+        cell = rows.getCell(1);//列
+        String bomVersion = "";
+        if(cell != null){
+            bomVersion = cell.getStringCellValue();
+        }
+
+        //软件版本号
+        rows = sheet.getRow(4);// 获取行
+        cell = rows.getCell(1);//列
+        String machineVersionNo = "";
+        if(cell != null){
+            machineVersionNo = cell.getStringCellValue();
+        }
+
+        //备注
+        rows = sheet.getRow(5);// 获取行
+        cell = rows.getCell(1);//列
+        String bomRemarks = "";
+        if(cell != null){
+            bomRemarks = cell.getStringCellValue();
+        }
+
+        List<PtsBomComponents> componentsList = new ArrayList<PtsBomComponents>();
+        Iterator<Row> rowss = sheet.rowIterator();
+        int i = 0;
+        while (rowss.hasNext()) {
+            Row ro = rowss.next();
+            if(i>7){
+                Iterator<Cell> cells = ro.cellIterator();
+                if(ro == null){
+                    break;
+                }
+
+                int j=0;
+                PtsBomComponents bomComponents = new PtsBomComponents();
+                String componentsNo = "";
+                String bomComponentsQuantity = "";
+                while (cells.hasNext()) {
+                    Cell ce = cells.next();
+                    if (ce == null){
+                        break;
+                    }
+                    if(j == 0){
+                        componentsNo = ce.getStringCellValue();
+                    }else if(j == 1){
+                        bomComponentsQuantity = ce.getStringCellValue();
+                    }
+                    j++;
+                }
+                bomComponents.setComponentsNo(componentsNo);
+                bomComponents.setBomComponentsQuantity(Integer.valueOf(bomComponentsQuantity) * 100);
+                componentsList.add(bomComponents);
+            }
+            i++;
+        }
+
+        Map<String,Object> map = new HashMap<String, Object>();
+        map.put("bomName",bomName);
+        map.put("produceName",produceName);
+        map.put("bomVersion",bomVersion);
+        map.put("machineVersionNo",machineVersionNo);
+        map.put("bomRemarks",bomRemarks);
+        map.put("componentsList",componentsList);
+        return map;
+    }
+
+
     /**
      * 读取Excel内容
      * 不去除重复
+     *
      * @param filePath
      * @return
      */
@@ -135,7 +256,7 @@ public class ExcelUtil {
         }
         // 获取Workbook
         InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
-        Workbook wb  = null;
+        Workbook wb = null;
         if (filePath.endsWith("xls")) {
             wb = new HSSFWorkbook(inputStream);
         } else {
@@ -154,7 +275,8 @@ public class ExcelUtil {
         while (cells.hasNext()) {
             Cell cell = cells.next();
             if (cellName.trim().equals(cell.getStringCellValue().trim())) {
-                cellNum = cell.getColumnIndex();break;
+                cellNum = cell.getColumnIndex();
+                break;
             }
         }
         if (cellNum == -1) return null;
@@ -185,8 +307,8 @@ public class ExcelUtil {
                                             String[] infos, String tel, String name, String num,
                                             Map<String, ProductColor> price, String postType, String shopId)
             throws IOException {
-        Map<String,String> map = new HashMap<>();
-        for(String t : maps) {
+        Map<String, String> map = new HashMap<>();
+        for (String t : maps) {
             String[] temp = StringUtils.split(t, "_");
             map.put(temp[1], (temp[0]));
         }
@@ -198,7 +320,7 @@ public class ExcelUtil {
         }
         // 获取Workbook
         InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
-        Workbook wb  = null;
+        Workbook wb = null;
         if (filePath.endsWith("xls")) {
             wb = new HSSFWorkbook(inputStream);
         } else {
@@ -215,7 +337,7 @@ public class ExcelUtil {
         int telColumnIndex = -1;
         int productColumnIndex = -1;
         int numColumnIndex = -1;
-        int [] infoColumnIndex = new int[infos.length];
+        int[] infoColumnIndex = new int[infos.length];
         int infoCount = 0;
 
         // 读取数据
@@ -268,7 +390,7 @@ public class ExcelUtil {
                 order.setOrderAddressTel(userTel);                                                         // 读取tel
                 order.setOrderProductBarCode(map.get(getValue(temp.getCell(productColumnIndex))));         // 读取对应的产品id
                 order.setOrderNum(Integer.parseInt(getValue(temp.getCell(numColumnIndex))));               // 读取购买数量
-                if (infoColumnIndex.length == 1){
+                if (infoColumnIndex.length == 1) {
                     // 如果infoColumnIndex = 1, 则表示需要截取(可能是-、“ ”)
                     Cell cell = temp.getCell(infoColumnIndex[0]);
                     String addrInfo = getValue(cell);
@@ -290,12 +412,12 @@ public class ExcelUtil {
                     order.setOrderCity(addrs[1].trim());
                     order.setOrderArea(addrs[2].trim());
                     order.setOrderAddress(addrInfo.trim());
-                } else if (infoColumnIndex.length == 4){
+                } else if (infoColumnIndex.length == 4) {
                     order.setOrderProvince(getValue(temp.getCell(infoColumnIndex[0])).trim());
                     order.setOrderCity(getValue(temp.getCell(infoColumnIndex[1])).trim());
                     order.setOrderArea(getValue(temp.getCell(infoColumnIndex[2])).trim());
                     order.setOrderAddress(getValue(temp.getCell(infoColumnIndex[3])).trim());
-                } else if (infoColumnIndex.length == 3){
+                } else if (infoColumnIndex.length == 3) {
                     order.setOrderProvince(getValue(temp.getCell(infoColumnIndex[0])).trim());
                     order.setOrderCity(getValue(temp.getCell(infoColumnIndex[1])).trim());
                     order.setOrderArea(getValue(temp.getCell(infoColumnIndex[1])).trim());
@@ -333,7 +455,7 @@ public class ExcelUtil {
                 logger.error(e.getMessage(), e);
             }
             // 迭代
-            oid ++;
+            oid++;
         }
 
         // 写入

+ 9 - 9
watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/add_customer.ftl

@@ -307,7 +307,7 @@
                 <label class="form-label col-1 col-sm-1"><span class="c-red">*</span><span id="relationProduct">换新产品</span>:</label>
                 <div class="formControls col-9 col-sm-9 text-c" id="produceSelect">
 
-                    <#--<table class="table table-border table-bg table-bordered">
+                    <table class="table table-border table-bg table-bordered">
                         <thead>
                             <tr class="text-c">
                                 <th style="text-align: center;" width="60">产品名称</th>
@@ -341,7 +341,7 @@
                             </tr>
                         </tbody>
                     </table>
--->
+
                 </div>
             </div>
 
@@ -457,31 +457,31 @@
                 <div class="row cl" id="needToVisit">
                     <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>回访人:</label>
                     <div class="formControls col-2 col-sm-2">
-                        <input type="text" class="input-text" value="" placeholder="填写回访人姓名" id="" name="visit.visitName">
+                        <input type="text" class="input-text" value="" placeholder="填写回访人姓名" id="" name="visitName">
                     </div>
                     <div class="formControls col-2 col-sm-2">
-                        <input type="text" class="input-text" value="" placeholder="填写回访人手机号" id="" name="visit.visitTel">
+                        <input type="text" class="input-text" value="" placeholder="填写回访人手机号" id="" name="visitTel">
                     </div>
                 </div>
                 <div class="row cl">
                     <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>回访日期:</label>
                     <div class="formControls col-2 col-sm-2">
-                        <input type="text" placeholder="请选择回访日期" id="datemin"  name="visit.visitDate" class="input-text Wdate" onclick="WdatePicker({skin:'whyGreen',minDate:'%y-%M-%d'})"  readonly="readonly">
+                        <input type="text" placeholder="请选择回访日期" id="datemin"  name="visitDate" class="input-text Wdate" onclick="WdatePicker({skin:'whyGreen',minDate:'%y-%M-%d'})"  readonly="readonly">
                     </div>
                 </div>
                 <div class="row cl">
                     <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>回访时间:</label>
                     <div class="formControls col-10 col-sm-10 skin-minimal">
                         <div class="radio-box">
-                            <input type="radio" id="visit-time-1" name="visit.visitTimeSelect">
+                            <input type="radio" id="visit-time-1" name="visitTimeSelect">
                             <label for="visit-time-1">09:00-12:00</label>
                         </div>
                         <div class="radio-box">
-                            <input type="radio" id="visit-time-2" name="visit.visitTimeSelect">
+                            <input type="radio" id="visit-time-2" name="visitTimeSelect">
                             <label for="visit-time-2">12:00-14:00</label>
                         </div>
                         <div class="radio-box">
-                            <input type="radio" id="visit-time-3" name="visit.visitTimeSelect">
+                            <input type="radio" id="visit-time-3" name="visitTimeSelect">
                             <label for="visit-time-3">14:00-18:00</label>
                         </div>
                     </div>
@@ -489,7 +489,7 @@
                 <div class="row cl">
                     <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>提醒人:</label>
                     <div class="formControls col-4 col-sm-4"> <span class="select-box">
-                    <select name="" class="select" id="visitAdminId" name="visit.adminId">
+                    <select name="" class="select" id="visitAdminId" name="adminId">
 
                     </select>
                     </span>

+ 1 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/excel_to_order.ftl

@@ -83,6 +83,7 @@
                             <option value="18">年糕妈妈</option>
                             <option value="19">快抱团</option>
                             <option value="20">北京北斗</option>
+                            <option value="21">凯叔</option>
                             <option value="22">上海-崔玉涛育学园</option>
                             <option value="23">简二家</option>
                         </select>

+ 6 - 6
watero-rst-web/src/main/webapp/WEB-INF/views/pts/batch/add_batch.ftl

@@ -81,7 +81,7 @@
             </div>
         </div>
 
-        <div class="row cl">
+        <#--<div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>软件版本:</label>
             <div class="formControls col-xs-8 col-sm-9">
                 <span class="select-box">
@@ -90,7 +90,7 @@
 				</span>
                 <span id="batchSoftwareVersionIdMsg" style="color: red;"></span>
             </div>
-        </div>
+        </div>-->
 
         <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>Bom单:</label>
@@ -206,7 +206,7 @@
         /*添加页面初始化,将根据产品的来获取bom和软件版本*/
         var produceId = $("[name='produceId']").val();
         getBomByProduce(produceId);
-        getVersionByProduce(produceId);
+        //getVersionByProduce(produceId);
 
         /*初始化一个颜色*/
         addBatchColor('','');
@@ -215,7 +215,7 @@
         $("[name='produceId']").change(function(){
             var produceId = $(this).val();
             getBomByProduce(produceId);
-            getVersionByProduce(produceId);
+           //getVersionByProduce(produceId);
         })
     })
     
@@ -275,7 +275,7 @@
     }
 
     /*根据产品获取软件版本*/
-    function getVersionByProduce(produceId) {
+   /* function getVersionByProduce(produceId) {
         $.ajax({
             type: "POST",
             data: {
@@ -302,7 +302,7 @@
             }
         });
     }
-
+*/
     /**
      * 添加颜色
      * colorName

+ 9 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/pts/batch/batch_list.ftl

@@ -43,6 +43,8 @@
             </select>
             <input type="text" class="my-input"  style="width:150px" value="${batchNo!''}" placeholder="批次编号" id="batchNo" name="batchNo">
             <button type="submit" class="btn" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);" id="" name=""><i class="Hui-iconfont">&#xe665;</i> 搜索</button>
+
+            <button type="button" style="cursor:pointer;" class="my-btn-search" onclick="toExcel();">导出Excel</button>
         </form>
     </div>
 
@@ -168,6 +170,13 @@
         });
     }
 
+    /**
+     * 导出零件到excel
+     */
+    function toExcel(){
+        window.location.href= "${path}/admin/batch/generation_excel";
+    }
+
 </script>
 </body>
 </html>

+ 4 - 4
watero-rst-web/src/main/webapp/WEB-INF/views/pts/batch/update_batch.ftl

@@ -101,7 +101,7 @@
             </div>
         </div>
 
-        <div class="row cl">
+       <#-- <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>软件版本:</label>
             <div class="formControls col-xs-8 col-sm-9">
                 <span class="select-box">
@@ -115,7 +115,7 @@
 				</span>
                 <span id="batchSoftwareVersionIdMsg" style="color: red;"></span>
             </div>
-        </div>
+        </div>-->
 
         <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>Bom单:</label>
@@ -288,7 +288,7 @@
     }
 
     /*根据产品获取软件版本*/
-    function getVersionByProduce(produceId) {
+    /*function getVersionByProduce(produceId) {
         $.ajax({
             type: "POST",
             data: {
@@ -314,7 +314,7 @@
             error: function(XmlHttpRequest, textStatus, errorThrown){
             }
         });
-    }
+    }*/
 
     /*添加颜色*/
     function addBatchColor(colorName,colorQuantity) {

+ 71 - 19
watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/add_bom.ftl

@@ -8,7 +8,6 @@
           content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
     <meta http-equiv="Cache-Control" content="no-siteapp"/>
     <#include "/base/add_base.ftl">
-    <link href="${path}/common/lib/jquery.ui/jquery-ui.css" rel="stylesheet" type="text/css"/>
     <style>
         .add-list>li{margin: 10px 0;}
         input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
@@ -33,7 +32,7 @@
 				<select class="select" size="1" name="produceId" datatype="*" errormsg="请选择产品">
                 <#if produceList?? &&  (produceList?size > 0) >
                     <#list produceList as produce>
-                        <option value="${produce.produceId}" <#if produceId??><#if produceId ==produce.produceId >selected="selected"</#if></#if>>${produce.produceName}</option>
+                        <option value="${produce.produceId}" >${produce.produceName}</option>
                     </#list>
                 <#else>
                     <option value="">暂时没有产品,需要到生产产品页面添加产品</option>
@@ -67,6 +66,22 @@
         </div>
 
         <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>软件版本:</label>
+            <div class="formControls col-xs-8 col-sm-9"> <span class="select-box">
+                    <select class="select" size="1" id="machineVersionId" name="machineVersionId" datatype="*" errormsg="请选择软件版本">
+                    <#if machineVersionList?? &&  (machineVersionList?size > 0) >
+                        <#list machineVersionList as version>
+                            <option value="${version.machineVersionId}">${version.machineVersionName}(${version.machineVersionNo})</option>
+                        </#list>
+                    <#else>
+                        <option value="">暂时没有产品,需要到生产产品页面添加产品</option>
+                    </#if>
+                    </select>
+				</span>
+            </div>
+        </div>
+
+        <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3">备注:</label>
             <div class="formControls col-xs-8 col-sm-9">
                 <textarea name="bomRemarks" id="bomRemarks" cols="" rows="" class="textarea"
@@ -142,7 +157,7 @@
                 $("#componentaAll").find("tr").each(function (){
                     var ptsBomComponents = {};
                     ptsBomComponents.componentsId = $(this).find("[name='comName']").eq(0).val();
-                    ptsBomComponents.bomComponentsQuantity = $(this).find("[name='comNumber']").eq(0).val();
+                    ptsBomComponents.bomComponentsQuantity = $(this).find("[name='comNumber']").eq(0).val() * 100;
                     ptsBomComponentsList.push(ptsBomComponents);
                 })
                 $("#bomComponentJson").val(JSON.stringify(ptsBomComponentsList));
@@ -163,7 +178,8 @@
 
     var allComponents;  //所有零件的集合
     var staticProduceId;  //产品id,用于判断产品更改
-    
+    var index;
+
     $(function () {
         /*添加页面初始化,添加一个零件选择框*/
         addComponents("#","");
@@ -174,8 +190,10 @@
 
         /*监听产品选择*/
         $("[name='produceId']").change(function(){
+
             var produceId = $(this).val();
             getBomByProduce(produceId);
+            getMachineVersion(produceId);
 
             delComponent(0,"all");
             addComponents("#","");
@@ -187,9 +205,13 @@
             getBom(bomId);
         })
     })
-    
+
     /* 添加零件 */
     function addComponents(componentsId,number) {
+        if(number == null || number == "" || typeof(number)=="undefined"){
+            number = 1;
+        }
+
         var tbody = $("#componentaAll");
 
         var produceId = $("[name='produceId']").val();
@@ -214,7 +236,8 @@
                 +'</select> '
                 +'</td> '
                 +'<td> '
-                +'<input type="text" class="input-text" value="'+ number +'" id="" name="comNumber" placeholder="零件数量" datatype="n1-3" errormsg="零件数量只能为数字且不能超过999件!"> '
+                //+'<input type="text" class="input-text" value="'+ number +'" id="" name="comNumber" placeholder="零件数量" datatype="n1-3" errormsg="零件数量只能为数字且不能超过1000件!"> '
+                +'<input type="text" class="input-text" value="'+ number +'" id="" name="comNumber" placeholder="零件数量" datatype="/^([1-9]\\d{0,2}|0)(\\.\\d{0,2})?$/"  errormsg="零件数量只能为数字且不能超过1000件!"> '
                 +'</td> '
                 +'<td> '
                 +'<a style="" href="javascript:void(0);" title="删除" onclick="delComponent(this,1)"> '
@@ -299,6 +322,9 @@
 
     /*获取bom信息,赋值在页面上*/
     function getBom(bomId){
+        var index = layer.load(1, {
+            shade: [0.5,'#fff'] //0.1透明度的白色背景
+        });
         var bom = new Object();
         $.ajax({
             type: "POST",
@@ -306,30 +332,56 @@
                 bomId : bomId
             },
             url: "${path}/admin/bom/get_bom",
-            async: false,
+            async: true,
             success: function(data){
                 if (data.returnCode == 200) {
                     bom = data.returnMsg.ptsBom;
+                    if(bom != null && bom.bomId != null){
+                        $("#bomName").val(bom.bomName);
+                        $("#bomRemarks").val(bom.bomRemarks);
+                        $("#bomVersion").val(bom.bomVersion);
+                        delComponent(0,"all");
+                        var components = bom.ptsBomComponentsList;
+                        if(components != null && components.length > 0){
+                            for(var i=0;i<components.length;i++){
+                                addComponents(components[i].componentsId,components[i].bomComponentsQuantity/100);
+                            }
+                        }
+                        layer.close(index);
+                    }else{
+                        defaultAllInput();
+                    }
                 }
             },
             error: function(XmlHttpRequest, textStatus, errorThrown){
             }
         });
+    }
 
-        if(bom != null && bom.bomId != null){
-            $("#bomName").val(bom.bomName);
-            $("#bomRemarks").val(bom.bomRemarks);
-            $("#bomVersion").val(bom.bomVersion);
-            delComponent(0,"all");
-            var components = bom.ptsBomComponentsList;
-            if(components != null && components.length > 0){
-                for(var i=0;i<components.length;i++){
-                    addComponents(components[i].componentsId,components[i].bomComponentsQuantity);
+    /* 获取软件版本 */
+    function getMachineVersion(produceId){
+        var html = '';
+        $.ajax({
+            type: "POST",
+            data: {
+                produceId : produceId
+            },
+            url: "${path}/admin/bom/get_listMachineVersion",
+            async: false,
+            success: function(data){
+                if (data.returnCode == 200 && data.returnMsg.machineVersionList.length > 0) {
+                    for(var i=0;i<data.returnMsg.machineVersionList.length;i++){
+                        var version = data.returnMsg.machineVersionList[i];
+                        html += '<option value="'+ version.machineVersionId +'">'+ version.machineVersionName +'('+ version.machineVersionNo +')</option>';
+                    }
+                }else{
+                    html += '<option value="">暂时没有软件版本,需要到生产产品页面添加软件版本</option>';
                 }
+            },
+            error: function(XmlHttpRequest, textStatus, errorThrown){
             }
-        }else{
-            defaultAllInput();
-        }
+        });
+        $("#machineVersionId").html(html);
     }
 
     /*当选择产品或者bom不选择时,都需要重置所有的输入框和表格*/

+ 9 - 4
watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/bom_details.ftl

@@ -52,17 +52,22 @@
 
             <div class="input-box">
                 <span class="my-con-right content">所属产品:</span>&nbsp;&nbsp;
-                <span class="my-con-left content">${ptsBom.produceName}</span>
+                <span class="my-con-left content">${ptsBom.produceName ! ''}</span>
             </div>
 
             <div class="input-box">
                 <span class="my-con-right content">Bom名称:</span>&nbsp;&nbsp;
-                <span class="my-con-left content">${ptsBom.bomName}</span>
+                <span class="my-con-left content">${ptsBom.bomName ! ''}</span>
             </div>
 
             <div class="input-box">
                 <span class="my-con-right content">硬件版本:</span>&nbsp;&nbsp;
-                <span class="my-con-left content">${ptsBom.bomVersion}</span>
+                <span class="my-con-left content">${ptsBom.bomVersion ! ''}</span>
+            </div>
+
+            <div class="input-box">
+                <span class="my-con-right content">软件版本:</span>&nbsp;&nbsp;
+                <span class="my-con-left content">${ptsBom.machineVersionNo ! ''}</span>
             </div>
 
             <div class="input-box">
@@ -109,7 +114,7 @@
                                                 ${compont.componentsName}
                                             </td>
                                             <td>
-                                                ${bomComponents.bomComponentsQuantity}
+                                                ${bomComponents.bomComponentsQuantity/100 ! '0'}
                                             </td>
                                             <td>
                                                 <#if compont.componentsCost?? >${compont.componentsCost/100}</#if>

+ 106 - 5
watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/bom_list.ftl

@@ -29,8 +29,8 @@
     <a class="btn radius r" style="line-height:1.6em;margin-top:3px;background: #32a3d8;color: #fff;border:1px solid #32a3d8;" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a>
 </nav>
 <div class="page-container">
-    <div class="text-c">
-        <form action="${path}/admin/bom/_bom_list" method="post">
+    <div class="text-c" >
+        <form action="${path}/admin/bom/_bom_list" method="post" >
             <button type="button" style="cursor:pointer; float: left;" class="my-btn-search" onclick="toAddBom();">增加Bom</button>
             <select class="my-select" name="produceId" style="height: 36px;width: 150px">
                 <option value ="">所有产品</option>
@@ -44,6 +44,8 @@
             <input type="text" class="my-input"  style="width:150px" value="${bomName!}" placeholder="Bom单名称" id="bomName" name="bomName">
             <input type="text" class="my-input"  style="width:150px" value="${bomRemarks!}" placeholder="Bom单备注" id="bomRemarks" name="bomRemarks">
             <button type="submit" class="btn" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);" id="" name=""><i class="Hui-iconfont">&#xe665;</i> 搜索</button>
+            <input class="my-btn-search  btn" data-loading-text="请勿重复提交" type="button" value="上传EXCEL" onClick="upFiles()">
+            <button type="button" style="cursor:pointer;" class="my-btn-search" onclick="downloadExcel();">下载模板</button>
         </form>
     </div>
 
@@ -55,6 +57,7 @@
             <th width="60">所属产品</th>
             <th width="100">bom名称</th>
             <th width="80">硬件版本</th>
+            <th width="80">软件版本</th>
             <th width="80">零件总数量</th>
             <th width="80">零件总成本(元)</th>
             <th width="80">零件总重(g)</th>
@@ -72,9 +75,10 @@
                             <td>${bom.produceName!''}</td>
                             <td>${bom.bomName!''}</td>
                             <td>${bom.bomVersion!''}</td>
-                            <td>${bom.componentsQuantity!'0'}</td>
-                            <td><#if bom.allComponentsCost?? >${bom.allComponentsCost/100}</#if></td>
-                            <td><#if bom.allComponentsWeight?? >${bom.allComponentsWeight}</#if></td>
+                            <td>${bom.machineVersionNo!''}</td>
+                            <td>${bom.componentsQuantity/100 !'0'}</td>
+                            <td><#if bom.allComponentsCost?? >${bom.allComponentsCost/10000}</#if></td>
+                            <td><#if bom.allComponentsWeight?? >${bom.allComponentsWeight/100}</#if></td>
                             <td>${bom.bomRemarks!''}</td>
                             <td>${(bom.bomUpdateTime?string("yyyy-MM-dd HH:mm:ss"))!''}</td>
                             <td>${(bom.bomCreateTime?string("yyyy-MM-dd HH:mm:ss"))!''}</td>
@@ -84,6 +88,9 @@
                                 </a>&nbsp;
                                 <a style="text-decoration:none" href="javascript:void(0);" title="查看bom单详情" onclick="admin_details_bom(${bom.bomId!''})">
                                     <i class="Hui-iconfont">&#xe665;</i>
+                                </a>&nbsp;
+                                <a style="text-decoration:none" href="javascript:void(0);" title="导出Excel" onclick="downloadEx(${bom.bomId!''})">
+                                    <i class="Hui-iconfont">&#xe640;</i>
                                 </a>
                             </td>
                         </tr>
@@ -97,6 +104,10 @@
 </div>
 <tfoot>
 <#include "/base/page_util.ftl">
+<script type="text/javascript" src="${path}/common/lib/ueditor/1.4.3/ueditor.config.js"></script>
+<script type="text/javascript" src="${path}/common/lib/ueditor/1.4.3/ueditor.all.min.js"> </script>
+<script type="text/javascript" src="${path}/common/lib/ueditor/1.4.3/lang/zh-cn/zh-cn.js"></script>
+<script type="text/plain" id="upload_ue"></script>
 </tfoot>
 <script>
     /**
@@ -122,6 +133,96 @@
         window.location.href= "${path}/admin/bom/to_details_bom?bomId="+bomId;
     }
 
+    var _editor;
+    $(function() {
+        //重新实例化一个编辑器,防止在上面的editor编辑器中显示上传的图片或者文件
+        _editor = UE.getEditor('upload_ue',{
+            initialFrameWidth : 375,
+            initialFrameHeight: 600
+        });
+        _editor.ready(function () {
+            _editor.setDisabled("attachment");//设置编辑器不可用
+            _editor.hide();//隐藏编辑器,因为不会用到这个编辑器实例,所以要隐藏
+            //侦听图片上传
+            _editor.addListener('beforeInsertImage', function (t, arg) {
+                console.log(arg[0].src);
+                $("#picture").attr("value", arg[0].src);//将地址赋值给相应的input,只去第一张图片的路径
+                $("#preview").attr("src", arg[0].src);  //图片预览
+            });
+            //侦听文件上传,取上传文件列表中第一个上传的文件的路径
+            _editor.addListener('afterUpfile', function (t, arg) {
+                console.log(arg[0].url);
+                var filePath = arg[0].url;
+                $.ajax({
+                    cache: true,
+                    type: "POST",
+                    data: {
+                    },
+                    contentType: false,
+                    processData: false,
+                    url: "${path}/admin/bom/upload_bom?file="+arg[0].url,
+                    async: false,
+                    success: function(data){
+                        if (data.resultCode == 200) {
+                            window.location.href = '${path}/admin/bom/_bom_list'
+                        }else{
+                            layer.msg(data.resultMsg, {icon: 2, time: 4000});
+                        }
+                    },
+                    error: function(XmlHttpRequest, textStatus, errorThrown){
+                        layer.msg('添加失败!', {icon: 2, time: 4000});
+                    }
+                });
+                //window.location.href=root_path + '/admin/bom/upload_bom?file='+arg[0].url;
+                $("#file").attr("value", _editor.options.filePath + arg[0].url);
+            });
+        });
+    });
+
+    //弹出文件上传的对话框
+    function upFiles() {
+        var myFiles = _editor.getDialog("attachment");
+        myFiles.open();
+    }
+
+    //弹出文件上传的对话框
+    /*function upPolicy() {
+        if($('#source_file').val().length > 0){
+            var formData = new FormData($( "#sourcefile" )[0]);
+            $.ajax({
+                cache: true,
+                type: "POST",
+                data: formData,
+                contentType: false,
+                processData: false,
+                url: "${path}/admin/bom/upload_bom",
+                async: false,
+                success: function(data){
+                    if (data.resultCode == 200) {
+                        window.location.href = '${path}/admin/bom/_bom_list'
+                    }else{
+                        layer.msg(data.resultMsg, {icon: 2, time: 4000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                    layer.msg('添加失败!', {icon: 2, time: 2000});
+                }
+            });
+        }else{
+            layer.msg('请先上传文件!', {icon: 2, time: 2000});
+        }
+    }*/
+
+    function downloadEx(bomId){
+        window.location.href= "${path}/admin/bom/generation_excel?bomId=" + bomId;
+    }
+
+    /**
+     * 下载模板
+     */
+    function downloadExcel(){
+        window.location.href= "${path}/common/images/uploadExcel/Bom单上传模板.xls";
+    }
 </script>
 </body>
 </html>

+ 64 - 15
watero-rst-web/src/main/webapp/WEB-INF/views/pts/bom/update_bom.ftl

@@ -56,6 +56,22 @@
         </div>
 
         <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>软件版本:</label>
+            <div class="formControls col-xs-8 col-sm-9"> <span class="select-box">
+                    <select class="select" size="1" id="machineVersionId" name="machineVersionId" datatype="*" errormsg="请选择软件版本">
+                    <#if machineVersionList?? &&  (machineVersionList?size > 0) >
+                        <#list machineVersionList as version>
+                            <option value="${version.machineVersionId}" <#if ptsBom.machineVersionId??><#if ptsBom.machineVersionId == version.machineVersionId >selected="selected" </#if></#if>>${version.machineVersionName}(${version.machineVersionNo})</option>
+                        </#list>
+                    <#else>
+                        <option value="">暂时没有产品,需要到生产产品页面添加产品</option>
+                    </#if>
+                    </select>
+				</span>
+            </div>
+        </div>
+
+        <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3">备注:</label>
             <div class="formControls col-xs-8 col-sm-9">
                 <textarea name="bomRemarks" id="bomRemarks" cols="" rows="" class="textarea"
@@ -88,7 +104,7 @@
                                     </select>
                                 </td>
                                 <td>
-                                    <input type="text" class="input-text" value="${bomComponents.bomComponentsQuantity}" id="" name="comNumber" placeholder="零件数量" datatype="n1-3" errormsg="零件数量不能超过999件!">
+                                    <input type="text" class="input-text" value="${bomComponents.bomComponentsQuantity/100 ! ''}" id="" name="comNumber" placeholder="零件数量" datatype="/^([1-9]\d{0,2}|0)(\.\d{0,2})?$/" errormsg="零件数量不能超过1000件!">
                                 </td>
                                 <td>
                                     <a style="" href="javascript:void(0);" title="删除" onclick="delComponent(this,1)"> <i class="Hui-iconfont"></i> </a>
@@ -164,7 +180,7 @@
                 $("#componentaAll").find("tr").each(function (){
                     var ptsBomComponents = {};
                     ptsBomComponents.componentsId = $(this).find("[name='comName']").eq(0).val();
-                    ptsBomComponents.bomComponentsQuantity = $(this).find("[name='comNumber']").eq(0).val();
+                    ptsBomComponents.bomComponentsQuantity = $(this).find("[name='comNumber']").eq(0).val() * 100;
                     ptsBomComponentsList.push(ptsBomComponents);
                 })
                 $("#bomComponentJson").val(JSON.stringify(ptsBomComponentsList));
@@ -200,6 +216,10 @@
 
     /* 添加零件 */
     function addComponents(componentsId,number) {
+        if(number == null || number == "" || typeof(number)=="undefined"){
+            number = 1;
+        }
+
         var tbody = $("#componentaAll");
 
         if(allComponents == null){ //获取零件列表
@@ -223,7 +243,7 @@
                 +'</select> '
                 +'</td> '
                 +'<td> '
-                +'<input type="text" class="input-text" value="'+ number +'" id="" name="comNumber" placeholder="零件数量" datatype="n1-3" errormsg="零件数量不能超过999件!"> '
+                +'<input type="text" class="input-text" value="'+ number +'" id="" name="comNumber" placeholder="零件数量"  datatype="/^([1-9]\\d{0,2}|0)(\\.\\d{0,2})?$/"  errormsg="零件数量不能超过1000件!"> '
                 +'</td> '
                 +'<td> '
                 +'<a style="" href="javascript:void(0);" title="删除" onclick="delComponent(this,1)"> '
@@ -276,6 +296,9 @@
 
     /*获取bom信息,赋值在页面上*/
     function getBom(bomId){
+       var index = layer.load(1, {
+            shade: [0.1,'#fff'] //0.1透明度的白色背景
+        });
         var bom = new Object();
         $.ajax({
             type: "POST",
@@ -287,26 +310,52 @@
             success: function(data){
                 if (data.returnCode == 200) {
                     bom = data.returnMsg.ptsBom;
+                    if(bom != null && bom.bomId != null){
+                        $("#bomName").val(bom.bomName);
+                        $("#bomRemarks").val(bom.bomRemarks);
+                        $("#bomVersion").val(bom.bomVersion);
+                        delComponent(0,"all");
+                        var components = bom.ptsBomComponentsList;
+                        if(components != null && components.length > 0){
+                            for(var i=0;i<components.length;i++){
+                                addComponents(components[i].componentsId,components[i].bomComponentsQuantity/100);
+                            }
+                        }
+                    }else{
+                        defaultAllInput();
+                    }
+                    layer.close(index);
                 }
             },
             error: function(XmlHttpRequest, textStatus, errorThrown){
             }
         });
+    }
 
-        if(bom != null && bom.bomId != null){
-            $("#bomName").val(bom.bomName);
-            $("#bomRemarks").val(bom.bomRemarks);
-            $("#bomVersion").val(bom.bomVersion);
-            delComponent(0,"all");
-            var components = bom.ptsBomComponentsList;
-            if(components != null && components.length > 0){
-                for(var i=0;i<components.length;i++){
-                    addComponents(components[i].componentsId,components[i].bomComponentsQuantity);
+    /* 获取软件版本 */
+    function getMachineVersion(produceId){
+        var html = '';
+        $.ajax({
+            type: "POST",
+            data: {
+                produceId : produceId
+            },
+            url: "${path}/admin/bom/get_listMachineVersion",
+            async: false,
+            success: function(data){
+                if (data.returnCode == 200 && data.returnMsg.machineVersionList.length > 0) {
+                    for(var i=0;i<data.returnMsg.machineVersionList.length;i++){
+                        var version = data.returnMsg.machineVersionList[i];
+                        html += '<option value="'+ version.machineVersionId +'">'+ version.machineVersionName +'('+ version.machineVersionNo +')</option>';
+                    }
+                }else{
+                    html += '<option value="">暂时没有软件版本,需要到生产产品页面添加软件版本</option>';
                 }
+            },
+            error: function(XmlHttpRequest, textStatus, errorThrown){
             }
-        }else{
-            defaultAllInput();
-        }
+        });
+        $("#machineVersionId").html(html);
     }
 
     /*当选择产品或者bom不选择时,都需要重置所有的输入框和表格*/

+ 62 - 14
watero-rst-web/src/main/webapp/WEB-INF/views/pts/machinePtras/ptras_add.ftl

@@ -53,12 +53,33 @@
 
         <input type="hidden" value="0" name="produceId" id="produceId">
 
+
+          <div class="row cl">
+              <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>材料类型:</label>
+              <div class="formControls col-xs-8 col-sm-9">
+                  <span class="select-box">
+                      <select class="select" size="1" name="componentsType" id="componentsType">
+                          <option value ="1">塑胶件</option>
+                          <option value ="2">五金件</option>
+                          <option value ="4">电子类</option>
+                          <option value ="5">线材</option>
+                          <option value ="6">辅材</option>
+                          <option value ="3">其他</option>
+                      </select>
+                  </span>
+              </div>
+          </div>
+
 		<div class="row cl">
 			<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>零件编号:</label>
 			<div class="formControls col-xs-8 col-sm-9">
-				<input type="text" class="input-text" value=""  id="componentsNo" name="componentsNo" placeholder="请输入零件编号,支持数字、字母组合" onkeyup="this.value=this.value.replace(/[^\w]/g,'')" onpaste="this.value=this.value.replace(/[^\w]/g,'')">
+                <span  style="height: 30px;    width: 10%;float: left;line-height: 30px;"><span id="comType">220</span><span>&nbsp;-&nbsp;</span></span>
+				<input type="text" class="input-text" style="float: left;width: 90%;" value=""  id="comPontNo" name="comPontNo" placeholder="请输入零件编号,支持数字、字母组合" onkeyup="this.value=this.value.replace(/[^\w]/g,'')" onpaste="this.value=this.value.replace(/[^\w]/g,'')">
+                <input type="hidden" class="input-text"  value=""  id="componentsNo" name="componentsNo" >
+                <span style="display: block;padding-top: 35px;color: #e00;">零件编号后四位流水号,系统自动生成</span>
 			</div>
 		</div>
+
         <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>零件名称:</label>
             <div class="formControls col-xs-8 col-sm-9">
@@ -143,19 +164,7 @@
                 <input type="text" class="input-text" value="" id="componentsMaterial" name="componentsMaterial" placeholder="请输入零件材料,支持1-30位字符">
             </div>
         </div>
-        <div class="row cl">
-            <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>材料类型:</label>
-            <div class="formControls col-xs-8 col-sm-9">
-                <select class="select" size="1" name="componentsType" id="componentsType">
-                    <option value ="1">塑胶件</option>
-                    <option value ="2">五金件</option>
-                    <option value ="4">电子类</option>
-                    <option value ="5">线材</option>
-                    <option value ="6">包装</option>
-                    <option value ="3">其他</option>
-                </select>
-            </div>
-        </div>
+
         <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>MBSC:</label>
             <div class="formControls col-xs-8 col-sm-9">
@@ -194,6 +203,36 @@
 <script type="text/javascript" src="${path}/common/lib/jquery/1.9.1/ajaxfileupload.js"></script>
 <script type="text/javascript">
 
+    $(function(){
+        $("#componentsType").change(function () {
+            var val = parseInt($(this).val());
+            var typeHtml = '';
+            switch (val){
+                case 1:
+                    typeHtml = 110;
+                    break;
+                case 2:
+                    typeHtml = 220;
+                    break;
+                case 4:
+                    typeHtml = 330;
+                    break;
+                case 5:
+                    typeHtml = 440;
+                    break;
+                case 6:
+                    typeHtml = 550;
+                    break;
+                case 3:
+                    typeHtml = 660;
+                    break;
+                default:
+                        break;
+            }
+            $("#comType").html(typeHtml);
+        })
+    })
+
     /*KindEditor.ready(function(K) {
         var editor = K.editor({
             fileManagerJson : '${path}/common/kingedit/jsp/file_manager_json.jsp',
@@ -286,6 +325,15 @@
                 return;
             }
 
+            var types = $("#comType").html();
+            var comPontNoOld = $("#comPontNo").val();
+            if(comPontNoOld.length > 5){
+                layer.msg('零件编号不能超过五位!', {icon: 2, time: 2000});
+                return;
+            }
+            var comPontNo = types + '-' + $("#comPontNo").val();
+            $("#componentsNo").val(comPontNo);
+
 			//$(form).ajaxSubmit();
             //var index = parent.layer.getFrameIndex(window.name);
 			//parent.$('.btn-refresh').click();

+ 69 - 17
watero-rst-web/src/main/webapp/WEB-INF/views/pts/machinePtras/ptras_update.ftl

@@ -42,11 +42,32 @@
         <input type="hidden" value="${ptsComponents.produceId!''}" name="produceId" id="produceId">
         <input type="hidden" value="${ptsComponents.produceId!''}" name="oldProduceId" id="oldProduceId">
 
+        <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>材料类型:</label>
+            <div class="formControls col-xs-8 col-sm-9">
+                <select class="select" size="1" name="componentsType" id="componentsType">
+                    <option value ="1"<#if ptsComponents.componentsType == 1>selected</#if>>塑胶件</option>
+                    <option value ="2"<#if ptsComponents.componentsType == 2>selected</#if>>五金件</option>
+                    <option value ="4"<#if ptsComponents.componentsType == 4>selected</#if>>电子类</option>
+                    <option value ="5"<#if ptsComponents.componentsType == 5>selected</#if>>线材</option>
+                    <option value ="6"<#if ptsComponents.componentsType == 6>selected</#if>>包装</option>
+                    <option value ="3"<#if ptsComponents.componentsType == 3>selected</#if>>其他</option>
+                </select>
+            </div>
+        </div>
+
 		<div class="row cl">
 			<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>零件编号:</label>
 			<div class="formControls col-xs-8 col-sm-9">
-				<input type="text" class="input-text" value="${ptsComponents.componentsNo!''}"   id="componentsNo" name="componentsNo" placeholder="请输入零件编号,支持数字、字母组合" onkeyup="this.value=this.value.replace(/[^u4e00-u9fa5w]/g,'')">
-			</div>
+                <span  style="height: 30px;    width: 10%;float: left;line-height: 30px;">
+                    <span id="comType"><#if ptsComponents.componentsType == 1>110</#if><#if ptsComponents.componentsType == 2>220</#if><#if ptsComponents.componentsType == 4>330</#if><#if ptsComponents.componentsType == 5>440</#if><#if ptsComponents.componentsType == 6>550</#if><#if ptsComponents.componentsType == 3>660</#if></span>
+                    <span>&nbsp;-&nbsp;</span>
+                </span>
+				<input type="text" class="input-text" style="float: left;width: 90%;" value="${ptsComponents.componentsNo!''}"   id="comPontNo" name="comPontNo" placeholder="请输入零件编号,支持数字、字母组合" onkeyup="this.value=this.value.replace(/[^u4e00-u9fa5w]/g,'')">
+                <input type="hidden" class="input-text" style="" value=""   id="componentsNo" name="componentsNo" >
+                <input type="hidden" class="input-text" style="" value="${ptsComponents.serialNumber!''}"   id="serialNumber" name="serialNumber" >
+                <span style="display: block;padding-top: 35px;color: #e00;">零件编号后四位流水号,系统自动生成</span>
+            </div>
 		</div>
         <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>零件名称:</label>
@@ -119,20 +140,6 @@
             </div>
         </div>
         <div class="row cl">
-            <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>材料类型:</label>
-            <div class="formControls col-xs-8 col-sm-9">
-                <select class="select" size="1" name="componentsType" id="componentsType">
-                    <option value ="1"<#if ptsComponents.componentsType == 1>selected</#if>>塑胶件</option>
-                    <option value ="2"<#if ptsComponents.componentsType == 2>selected</#if>>五金件</option>
-                    <option value ="4"<#if ptsComponents.componentsType == 4>selected</#if>>电子类</option>
-                    <option value ="5"<#if ptsComponents.componentsType == 5>selected</#if>>线材</option>
-                    <option value ="6"<#if ptsComponents.componentsType == 6>selected</#if>>包装</option>
-                    <option value ="3"<#if ptsComponents.componentsType == 3>selected</#if>>其他</option>
-                </select>
-            </div>
-        </div>
-        <div class="row cl">
-
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>MBSC:</label>
             <div class="formControls col-xs-8 col-sm-9">
                 <input type="text" class="input-text" value="${ptsComponents.componentsMbsc!''}"  id="componentsMbsc" name="componentsMbsc" placeholder="请输入MBSC">
@@ -171,6 +178,37 @@
 <script type="text/javascript" src="${path}/common/lib/jquery/1.9.1/ajaxfileupload.js"></script>
 <script type="text/javascript">
 
+
+    $(function(){
+        $("#componentsType").change(function () {
+            var val = parseInt($(this).val());
+            var typeHtml = '';
+            switch (val){
+                case 1:
+                    typeHtml = 110;
+                    break;
+                case 2:
+                    typeHtml = 220;
+                    break;
+                case 4:
+                    typeHtml = 330;
+                    break;
+                case 5:
+                    typeHtml = 440;
+                    break;
+                case 6:
+                    typeHtml = 550;
+                    break;
+                case 3:
+                    typeHtml = 660;
+                    break;
+                default:
+                    break;
+            }
+            $("#comType").html(typeHtml);
+        })
+    })
+
     /*KindEditor.ready(function(K) {
         var editor = K.editor({
             fileManagerJson : '${path}/common/kingedit/jsp/file_manager_json.jsp',
@@ -258,7 +296,21 @@
                 layer.msg('零件成本不能小于0.1元!', {icon: 2, time: 2000});
                 return;
             }
-           var produceId = $("#produceId").val();
+
+            var comPontNoOld = $("#comPontNo").val();
+            if(comPontNoOld.length > 5){
+                layer.msg('零件编号不能超过五位!', {icon: 2, time: 2000});
+                return;
+            }
+            var types = $("#comType").html();
+            var serialNumber = $("#serialNumber").val();
+            var comPontNo = types + '-' + $("#comPontNo").val();
+            if(serialNumber != null && serialNumber != "" && typeof(serialNumber) != "undefined"){
+                comPontNo += "-" + serialNumber;
+            }
+            $("#componentsNo").val(comPontNo);
+
+            var produceId = $("#produceId").val();
            var oldProduceId =   $("#oldProduceId").val();
            var componentsStatus=$('input:radio[name="componentsStatus"]:checked').val();
            var oldComponentsStatus =   $("#oldComponentsStatus").val();

+ 21 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/pts/supplier/add_supplier.ftl

@@ -13,6 +13,7 @@
         .add-list>li{margin: 10px 0;}
         input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
         input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        select{border: 1px solid rgba(0,0,0,.1);border-radius: 5px;padding:6px 35px 6px 5px;height: 32px;-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/select-1.png) right center no-repeat !important;background-size:auto 100% !important;margin-right: 10px;width: 85px;}
     </style>
     <title>添加供应商 - 供应商管理 - RST</title>
 </head>
@@ -28,6 +29,22 @@
     <form action="${path}/admin/supplier/save_supplier" method="post" class="form form-horizontal" id="form-supplier-add">
 
         <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>供应商编号:</label>
+            <div class="formControls col-xs-8 col-sm-9">
+                <span  style="height: 30px;    width: 10%;float: left;line-height: 30px;"><span id="comType">YNY</span></span>
+                <div class="input-box ">
+                    <select class="" style="width: 290px;" id="number" name="number">
+                        <option value="A" selected>A</option>
+                        <option value="B">B</option>
+                        <option value="C">C</option>
+                        <option value="D">D</option>
+                    </select>
+                </div>
+                <input type="hidden" class="input-text" value="" id="supplierNumber" name="supplierNumber" >
+            </div>
+        </div>
+
+        <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>供应商名称:</label>
             <div class="formControls col-xs-8 col-sm-9">
 				<input type="text" class="input-text" value="" id="supplierName" name="supplierName" placeholder="请输入1-30位的名称,支持中文、英文字母" datatype="/^[a-zA-Z\u4e00-\u9fa5]{1,30}$/" errormsg="供应商名称请输入1-30位的中文、英文字母!">
@@ -103,6 +120,10 @@
             beforeCheck: function (curform) {  //验证通过之前执行的函数
             },
             beforeSubmit: function (curform) {  //验证通过之后执行的函数
+
+                var types = $("#comType").html();
+                var comPontNo = types + $("#number").val();
+                $("#supplierNumber").val(comPontNo);
             },
             callback: function (data) {//异步回调函数
                 if (data) {

+ 3 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/pts/supplier/supplier_list.ftl

@@ -45,6 +45,7 @@
         <table class="table table-border table-bordered table-bg table-hover table-sort">
         <thead>
         <tr class="text-c">
+            <th width="50">供应商编号</th>
             <th width="50">供应商名称</th>
             <th width="60">供应商简称</th>
             <th width="100">联系人姓名</th>
@@ -61,6 +62,7 @@
             <#if page.dataList?? &&  (page.dataList?size > 0) >
                     <#list page.dataList as supplier>
                         <tr class="text-c">
+                            <td>${supplier.supplierNumber!''}</td>
                             <td>${supplier.supplierName!''}</td>
                             <td>${supplier.supplierAbbreviation!''}</td>
                             <td>${supplier.supplierContactPerson!''}</td>
@@ -82,7 +84,7 @@
                         </tr>
                     </#list>
             <#else>
-                <tr><td colspan="9" class="td-manage text-c" >暂时没有供应商,请添加!</td></tr>
+                <tr><td colspan="10" class="td-manage text-c" >暂时没有供应商,请添加!</td></tr>
             </#if>
         </tbody>
     </table>

+ 24 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/pts/supplier/update_supplier.ftl

@@ -13,6 +13,7 @@
         .add-list>li{margin: 10px 0;}
         input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
         input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        select{border: 1px solid rgba(0,0,0,.1);border-radius: 5px;padding:6px 35px 6px 5px;height: 32px;-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/select-1.png) right center no-repeat !important;background-size:auto 100% !important;margin-right: 10px;width: 85px;}
     </style>
     <title>修改供应商 - 供应商管理 - RST</title>
 </head>
@@ -28,6 +29,24 @@
     <form action="${path}/admin/supplier/update_supplier" method="post" class="form form-horizontal" id="form-supplier-update">
         <input type="hidden" name="supplierId" id="supplierId" value="${ptsSupplier.supplierId!''}">
 
+
+        <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>供应商编号:</label>
+            <div class="formControls col-xs-8 col-sm-9">
+                <span  style="height: 30px;    width: 10%;float: left;line-height: 30px;"><span id="comType">YNY</span></span>
+                <div class="input-box ">
+                    <select class="" style="width: 290px;" id="number" name="number">
+                        <option value="A" <#if ptsSupplier.supplierNumber??><#if ptsSupplier.supplierNumber == 'A'>selected</#if></#if>>A</option>
+                        <option value="B" <#if ptsSupplier.supplierNumber??><#if ptsSupplier.supplierNumber == 'B'>selected</#if></#if>>B</option>
+                        <option value="C" <#if ptsSupplier.supplierNumber??><#if ptsSupplier.supplierNumber == 'C'>selected</#if></#if>>C</option>
+                        <option value="D" <#if ptsSupplier.supplierNumber??><#if ptsSupplier.supplierNumber == 'D'>selected</#if></#if>>D</option>
+                    </select>
+                </div>
+                <input type="hidden" class="input-text" value="${ptsSupplier.serialNumber!''}" id="serialNumber" name="serialNumber" >
+                <input type="hidden" class="input-text" value="" id="supplierNumber" name="supplierNumber" >
+            </div>
+        </div>
+
         <div class="row cl">
             <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>供应商名称:</label>
             <div class="formControls col-xs-8 col-sm-9">
@@ -104,6 +123,11 @@
             beforeCheck: function (curform) {  //验证通过之前执行的函数
             },
             beforeSubmit: function (curform) {  //验证通过之后执行的函数
+
+                var types = $("#comType").html();
+                var comPontNo = types + $("#number").val() + $("#serialNumber").val();
+                $("#supplierNumber").val(comPontNo);
+
             },
             callback: function (data) {//异步回调函数
                 if (data) {

二进制
watero-rst-web/src/main/webapp/common/images/uploadExcel/Bom单上传模板.xls