Browse Source

招标功能修改。

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@7557 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
dongbw 9 years ago
parent
commit
0cdac39b36
25 changed files with 1997 additions and 872 deletions
  1. 162 68
      src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java
  2. 1 3
      src/main/java/com/uas/platform/b2b/dao/PurchaseTenderDao.java
  3. 0 19
      src/main/java/com/uas/platform/b2b/dao/PurchaseTenderItemDao.java
  4. 15 0
      src/main/java/com/uas/platform/b2b/dao/PurchaseTenderProdDao.java
  5. 16 0
      src/main/java/com/uas/platform/b2b/dao/SaleTenderDao.java
  6. 15 0
      src/main/java/com/uas/platform/b2b/dao/SaleTenderItemDao.java
  7. 6 23
      src/main/java/com/uas/platform/b2b/model/EnterpriseBaseInfo.java
  8. 62 113
      src/main/java/com/uas/platform/b2b/model/PurchaseTender.java
  9. 0 171
      src/main/java/com/uas/platform/b2b/model/PurchaseTenderItem.java
  10. 155 0
      src/main/java/com/uas/platform/b2b/model/PurchaseTenderProd.java
  11. 385 0
      src/main/java/com/uas/platform/b2b/model/SaleTender.java
  12. 146 0
      src/main/java/com/uas/platform/b2b/model/SaleTenderItem.java
  13. 39 28
      src/main/java/com/uas/platform/b2b/service/PurchaseTenderService.java
  14. 217 178
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java
  15. BIN
      src/main/webapp/resources/img/comm_bg01.png
  16. BIN
      src/main/webapp/resources/img/tender/upload.png
  17. 215 119
      src/main/webapp/resources/js/index/app.js
  18. 41 15
      src/main/webapp/resources/js/index/services/Purc.js
  19. 4 28
      src/main/webapp/resources/tpl/index/home/left.html
  20. 1 1
      src/main/webapp/resources/tpl/index/home/right.html
  21. 219 0
      src/main/webapp/resources/tpl/index/purc/saved_tender.html
  22. 117 12
      src/main/webapp/resources/tpl/index/purc/tender_evaluation.html
  23. 146 85
      src/main/webapp/resources/tpl/index/sale/tender.html
  24. 35 9
      src/main/webapp/resources/tpl/index/sale/tenderlist.html
  25. 0 0
      src/main/webapp/resources/tpl/index/sale/vendor_tender.html

+ 162 - 68
src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java

@@ -21,13 +21,11 @@ import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.util.SearchConstants;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort.Direction;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
@@ -75,6 +73,7 @@ public class PurchaseTenderController {
             enterpriseBaseInfo = enterpriseBaseInfo.concat("]");
             List<Enterprise> enterprises = FlexJsonUtils.fromJsonArray(enterpriseBaseInfo, Enterprise.class);
             System.out.println("enterpriseBaseInfo" + JSON.toJSONString(enterprises));
+            System.out.println("tender" + JSON.toJSONString(purchaseTender));
             purchaseTenderService.publish(purchaseTender, enterprises);
         } else {
             purchaseTenderService.publishOpen(purchaseTender);
@@ -110,23 +109,27 @@ public class PurchaseTenderController {
     /**
      * 供应商投标
      *
-     * @param bid
-     * @param tenderItem
+     * @param enBaseInfo
+     * @param tenderItems
      * @return
      */
     @RequestMapping(value = "/reply", method = RequestMethod.POST)
     @ResponseBody
-    public ResponseEntity<String> replyTender(String bid, String tenderItem) {
-        System.out.println("投标" + JSON.toJSONString(bid));
-        PurchaseTender tender = FlexJsonUtils.fromJson(bid, PurchaseTender.class);
-        PurchaseTenderItem item = FlexJsonUtils.fromJson(tenderItem, PurchaseTenderItem.class);
-        purchaseTenderService.reply(tender, item);
-        logger.log("供应商投标", "供应商对招标单进行投标",  "供应商名称" + item.getEnterpriseBaseInfo().getEnName() + ",价格" + item.getPrice() + ",税率" + item.getTaxrate()+ item.getCode());
+    public ResponseEntity<String> replyTender(String tenderItems, String enBaseInfo, String attaches) {
+        tenderItems = "[".concat(tenderItems);
+        tenderItems = tenderItems.concat("]");
+        List<SaleTenderItem> saleTenderItems = FlexJsonUtils.fromJsonArray(tenderItems, SaleTenderItem.class);
+        EnterpriseBaseInfo vendor = FlexJsonUtils.fromJson(enBaseInfo, EnterpriseBaseInfo.class);
+        attaches = "[".concat(attaches);
+        attaches = attaches.concat("]");
+        List<Attach> saleTenderAttaches = FlexJsonUtils.fromJsonArray(attaches, Attach.class);
+        purchaseTenderService.reply(saleTenderItems, vendor, saleTenderAttaches);
+//        logger.log("供应商投标", "供应商对招标单进行投标",  "供应商名称" + item.getEnterpriseBaseInfo().getEnName() + ",价格" + item.getPrice() + ",税率" + item.getTaxrate()+ item.getCode());
         return new ResponseEntity<String>(HttpStatus.OK);
     }
 
     /**
-     * 查看招标单
+     * 查看招标单(公开招标则创建投标单)
      *
      * @param id
      * @return
@@ -137,17 +140,18 @@ public class PurchaseTenderController {
         return purchaseTenderService.findById(id);
     }
 
-    /**
-     * 采购方查看投标单
-     *
-     * @param id
-     * @return
-     */
-    @RequestMapping(value = "/item/{id}", method = RequestMethod.GET)
-    @ResponseBody
-    public PurchaseTenderItem getBidById(@PathVariable("id") Long id) {
-       return purchaseTenderService.findByItemId(id);
-    }
+
+//    /**
+//     * 采购方查看投标单
+//     *
+//     * @param id
+//     * @return
+//     */
+//    @RequestMapping(value = "/item/{id}", method = RequestMethod.GET)
+//    @ResponseBody
+//    public SaleTender getBidById(@PathVariable("id") Long id) {
+//       return purchaseTenderService.findByItemId(id);
+//    }
 
     /**
      * 供应商查看投标单
@@ -157,23 +161,22 @@ public class PurchaseTenderController {
      */
     @RequestMapping(value = "vendorTenderDetail/{vendUU}/{id}", method = RequestMethod.GET)
     @ResponseBody
-    public PurchaseTenderItem getVendorItemByIdAndEnUU(@PathVariable("vendUU")Long vendUU,@PathVariable("id") Long id) {
+    public SaleTender getVendorItemByIdAndEnUU(@PathVariable("vendUU")Long vendUU, @PathVariable("id") Long id) {
         return purchaseTenderService.findByEnUUAndId(vendUU, id);
     }
 
 
-    /**
-     * 查看评标单
-     *
-     * @param id
-     * @return
-     */
-    @RequestMapping(value = "/items/{id}", method = RequestMethod.GET)
-    @ResponseBody
-    public List<PurchaseTenderItem> getTenderItemsById(@PathVariable("id") Long id) {
-        System.out.println("controller item" + JSON.toJSONString(purchaseTenderService.getItemsByTenderId(id)));
-        return purchaseTenderService.getItemsByTenderId(id);
-    }
+//    /**
+//     * 查看评标单
+//     *
+//     * @param id
+//     * @return
+//     */
+//    @RequestMapping(value = "/items/{id}", method = RequestMethod.GET)
+//    @ResponseBody
+//    public List<SaleTender> getTenderItemsById(@PathVariable("id") Long id) {
+//        return purchaseTenderService.getItemsByTenderId(id);
+//    }
 
     /**
      * 招标方定标
@@ -184,9 +187,9 @@ public class PurchaseTenderController {
     @RequestMapping(value = "/decide", method = RequestMethod.POST)
     @ResponseBody
     public ResponseEntity<String> decideTender(@RequestBody String json) {
-        System.out.println("json" + JSON.toJSONString(json));
         PurchaseTender purchaseTender = FlexJsonUtils.fromJson(json, PurchaseTender.class);
-        purchaseTender = purchaseTenderService.decide(purchaseTender);
+        System.out.println("decide " + JSON.toJSONString(purchaseTender));
+        purchaseTenderService.decide(purchaseTender);
         logger.log("供应商投标", "供应商对招标单进行投标",  "标题" + purchaseTender.getTitle() + purchaseTender.getCode());
         return new ResponseEntity<String>(HttpStatus.OK);
     }
@@ -214,7 +217,38 @@ public class PurchaseTenderController {
         pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
         pageParams.getFilters().put("pt_ifopen", Constant.NO);
-        pageParams.getFilters().put("pti_ptid", SystemSession.getUser().getEnterprise().getUu());
+        pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getEnName());
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+    /**
+     * 作为供应商,查看收到的招标单(待评标)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(params = RequestState.DONE, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getDoneTenders(PageParams params, String searchFilter) {
+        logger.log("客户招标单", "查看客户发出的招标单(待评标)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 判断当前用户是否被客户分配
+        SearchFilter filter = userService.distribute();
+        if (filter != null && filter.getDistribute() == null) {
+            return null;
+        }
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+//        String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
+//        pageParams.getFilters().put("tp_ptid", itemStatus);
+        pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getEnName());
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.NO);
+        pageParams.getFilters().put("pt_overdue", Constant.YES);
+        pageParams.getFilters().put("pt_result", Constant.NO);
         return searchService.searchPurcTenderIds(keyword, pageParams);
     }
 
@@ -242,8 +276,9 @@ public class PurchaseTenderController {
         List<Sort> sortList = new ArrayList<>();
         sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
         pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-        String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
-        pageParams.getFilters().put("pti_ptid", itemStatus);
+//        String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
+//        pageParams.getFilters().put("tp_ptid", itemStatus);
+        pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getEnName());
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
         pageParams.getFilters().put("pt_ifopen", Constant.NO);
         pageParams.getFilters().put("pt_overdue", Constant.NO);
@@ -274,7 +309,7 @@ public class PurchaseTenderController {
         List<Sort> sortList = new ArrayList<>();
         sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
         pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-        pageParams.getFilters().put("pti_ptid", SystemSession.getUser().getEnterprise().getUu());
+        pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getEnName());
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
         pageParams.getFilters().put("pt_ifopen", Constant.NO);
         pageParams.getFilters().put("pt_status", "待投标");
@@ -293,8 +328,6 @@ public class PurchaseTenderController {
     @ResponseBody
     public SPage<PurchaseTender> getAllOpenTenders(PageParams params, String searchFilter) {
         logger.log("平台公开招标单", "查看平台公开招标单(全部)");
-        System.out.println("params" + JSON.toJSONString(params));
-        System.out.println("searchFilter" + JSON.toJSONString(searchFilter));
         JSONObject jsonObject = JSONObject.parseObject(searchFilter);
         String keyword = jsonObject.getString("keyword");
         com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
@@ -303,8 +336,31 @@ public class PurchaseTenderController {
         pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
         pageParams.getFilters().put("pt_ifopen", Constant.YES);
-        System.out.println("pageParams" + JSON.toJSONString(pageParams));
-        System.out.println("return" + JSON.toJSONString(searchService.searchPurcTenderIds(keyword, pageParams)));
+        return searchService.searchPurcTenderIds(keyword, pageParams);
+    }
+
+
+    /**
+     * 作为供应商,查看平台开放招标单(待评标)
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/open", params = RequestState.DONE, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PurchaseTender> getDoneOpenTenders(PageParams params, String searchFilter) {
+        logger.log("平台公开招标单", "查看平台公开招标单(待评标)");
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("pt_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pt_ispublish", Constant.YES);
+        pageParams.getFilters().put("pt_ifopen", Constant.YES);
+        pageParams.getFilters().put("pt_overdue", Constant.YES);
+        pageParams.getFilters().put("pt_result", Constant.NO);
+        pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getEnName());
         return searchService.searchPurcTenderIds(keyword, pageParams);
     }
 
@@ -319,8 +375,6 @@ public class PurchaseTenderController {
     @ResponseBody
     public SPage<PurchaseTender> getTodoOpenTenders(PageParams params, String searchFilter) {
         logger.log("平台公开招标单", "查看平台公开招标单(待投标)");
-        System.out.println("params" + JSON.toJSONString(params));
-        System.out.println("searchFilter" + JSON.toJSONString(searchFilter));
         JSONObject jsonObject = JSONObject.parseObject(searchFilter);
         String keyword = jsonObject.getString("keyword");
         com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
@@ -330,10 +384,9 @@ public class PurchaseTenderController {
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
         pageParams.getFilters().put("pt_ifopen", Constant.YES);
         pageParams.getFilters().put("pt_overdue", Constant.NO);
-        String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
-        pageParams.getFilters().put("pti_ptid", itemStatus);
-        System.out.println("pageParams" + JSON.toJSONString(pageParams));
-        System.out.println("return" + JSON.toJSONString(searchService.searchPurcTenderIds(keyword, pageParams)));
+        pageParams.getFilters().put("tp_ptid", SystemSession.getUser().getEnterprise().getEnName());
+//        String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
+//        pageParams.getFilters().put("pti_ptid", itemStatus);
         return searchService.searchPurcTenderIds(keyword, pageParams);
     }
 
@@ -357,7 +410,8 @@ public class PurchaseTenderController {
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
         pageParams.getFilters().put("pt_ifopen", Constant.YES);
         pageParams.getFilters().put("pt_overdue", Constant.YES);
-        pageParams.getFilters().put("pt_status", "待投标");
+        pageParams.getFilters().put("pt_result", Constant.YES);
+//        pageParams.getFilters().put("pt_status", "待投标");
         return searchService.searchPurcTenderIds(keyword, pageParams);
     }
 
@@ -496,46 +550,86 @@ public class PurchaseTenderController {
      /**
      * 招标附件上传
      *
-     * @param tender
      * @return
      */
      @RequestMapping(value = "/addTenderAttach", method = RequestMethod.POST)
      @ResponseBody
-     public ModelMap addTenderAttaches(String tender, FileUpload uploadItem) {
-         System.out.println("FileUpload" + JSON.toJSONString(uploadItem));
-         PurchaseTender purchaseTender = FlexJsonUtils.fromJson(tender, PurchaseTender.class);
-         System.out.println("attach" + JSON.toJSONString(tender));
-         return purchaseTenderService.addTenderAttaches(purchaseTender, uploadItem);
+     public Attach addTenderAttaches(FileUpload uploadItem) throws Exception{
+         return purchaseTenderService.addTenderAttaches(uploadItem);
      }
 
     /**
      * 投标附件上传
      *
-     * @param tenderItem
      * @return
      */
     @RequestMapping(value = "/addTenderItemAttach", method = RequestMethod.POST)
     @ResponseBody
-    public ModelMap addTenderItemAttaches(String tenderItem, FileUpload uploadItem) {
-        System.out.println("FileUpload" + JSON.toJSONString(uploadItem));
-        PurchaseTenderItem item = FlexJsonUtils.fromJson(tenderItem, PurchaseTenderItem.class);
-        System.out.println("attach" + JSON.toJSONString(tenderItem));
-        return purchaseTenderService.addTenderItemAttaches(item, uploadItem);
+    public Attach addTenderItemAttaches(FileUpload uploadItem) throws Exception{
+        return purchaseTenderService.addTenderItemAttaches(uploadItem);
     }
 
+    /**
+     * 查看最近指定招标
+     *
+     * @param params
+     * @return
+     */
     @RequestMapping(value = "/latestTender", method = RequestMethod.GET)
     @ResponseBody
-    public Page<PurchaseTender> getLatestTender(PageParams params) {
+    public List<PurchaseTender> getLatestTender(PageParams params) {
         PageInfo info = new PageInfo(params);
         info.sorting("date", Direction.DESC); // 按发布日期倒序
-        return purchaseTenderService.findAllByPageInfo(info);
+        return purchaseTenderService.findAll();
     }
 
+    /**
+     * 查看最近公开招标
+     *
+     * @param params
+     * @return
+     */
     @RequestMapping(value = "/latestOpenTender", method = RequestMethod.GET)
     @ResponseBody
-    public Page<PurchaseTender> getLatestOpenTender(PageParams params) {
+    public List<PurchaseTender> getLatestOpenTender(PageParams params) {
         PageInfo info = new PageInfo(params);
         info.sorting("date", Direction.DESC); // 按发布日期倒序
-        return purchaseTenderService.findOpenByPageInfo(info);
+        return purchaseTenderService.findOpen();
     }
+
+    /**
+     *  删除在录入的单据
+     *
+     * @param json
+     */
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public void deleteTender(@RequestBody String json) {
+        PurchaseTender tender = FlexJsonUtils.fromJson(json, PurchaseTender.class);
+        purchaseTenderService.delete(tender.getId());
+    }
+
+    /**
+     * 发布在录入单据
+     *
+     * @param json
+     */
+    @RequestMapping(value = "/publishSaved", method = RequestMethod.POST)
+    @ResponseBody
+    public void publishSaved(@RequestBody String json) {
+        PurchaseTender tender = FlexJsonUtils.fromJson(json, PurchaseTender.class);
+        purchaseTenderService.publishSaved(tender.getId());
+    }
+
+    /**
+     * 删除单个附件
+     *
+     * @param attachId
+     */
+    @RequestMapping(value = "/removeAttach", method = RequestMethod.POST)
+    @ResponseBody
+    public void deleteAttach(@PathVariable ("attachId") Long attachId) {
+        purchaseTenderService.deleteAttach(attachId);
+    }
+
 }

+ 1 - 3
src/main/java/com/uas/platform/b2b/dao/PurchaseTenderDao.java

@@ -5,13 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
-import java.util.List;
-
 /**
  * Created by dongbw on 17/03/07 14:10.
  */
 @Repository
 public interface PurchaseTenderDao extends JpaSpecificationExecutor<PurchaseTender>,JpaRepository<PurchaseTender, Long> {
 
-    List<PurchaseTender> findByCode(String code);
+    PurchaseTender findByEnUUAndCode(Long uu, String code);
 }

+ 0 - 19
src/main/java/com/uas/platform/b2b/dao/PurchaseTenderItemDao.java

@@ -1,19 +0,0 @@
-package com.uas.platform.b2b.dao;
-
-import com.uas.platform.b2b.model.PurchaseTenderItem;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.stereotype.Repository;
-
-/**
- * Created by dongbw on 17/03/07 14:10.
- */
-@Repository
-public interface PurchaseTenderItemDao extends JpaSpecificationExecutor<PurchaseTenderItem>,JpaRepository<PurchaseTenderItem, Long> {
-
-//    List<PurchaseTenderItem> findByCode(String code);
-
-//    @Query("select m.id,m.applyStatus,m.description,m.price,m.taxrate from PurchaseTenderItem m where m.code=:code order by m.price desc")
-//    List<PurchaseTenderItem> findByTenderCode(@Param("code") String code);
-
-}

+ 15 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseTenderProdDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PurchaseTenderProd;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by dongbw on 17/03/07 14:10.
+ */
+@Repository
+public interface PurchaseTenderProdDao extends JpaSpecificationExecutor<PurchaseTenderProd>,JpaRepository<PurchaseTenderProd, Long> {
+
+
+}

+ 16 - 0
src/main/java/com/uas/platform/b2b/dao/SaleTenderDao.java

@@ -0,0 +1,16 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.SaleTender;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by dongbw on 17/03/07 14:10.
+ */
+@Repository
+public interface SaleTenderDao extends JpaSpecificationExecutor<SaleTender>,JpaRepository<SaleTender, Long> {
+
+
+    SaleTender findByEnUUAndVendUUAndCode(Long enUU, Long vendUU, String code);
+}

+ 15 - 0
src/main/java/com/uas/platform/b2b/dao/SaleTenderItemDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.SaleTenderItem;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by dongbw on 17/03/07 14:10.
+ */
+@Repository
+public interface SaleTenderItemDao extends JpaSpecificationExecutor<SaleTenderItem>,JpaRepository<SaleTenderItem, Long> {
+
+
+}

+ 6 - 23
src/main/java/com/uas/platform/b2b/model/EnterpriseBaseInfo.java

@@ -1,12 +1,12 @@
 package com.uas.platform.b2b.model;
 
-import com.alibaba.fastjson.annotation.JSONField;
-import org.codehaus.jackson.annotate.JsonIgnore;
-
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 import java.util.Date;
-import java.util.Set;
 
 /**
  *  用于招标中的企业基本信息
@@ -15,7 +15,7 @@ import java.util.Set;
 
 @Table(name = "sec$enterprisebaseinfo")
 @Entity
-public class EnterpriseBaseInfo {
+public class EnterpriseBaseInfo implements Serializable {
 
     /**
      * 序列号
@@ -101,13 +101,6 @@ public class EnterpriseBaseInfo {
     @Column(name = "en_remark")
     private String remark;
 
-    /**
-     * 投标明细
-     */
-    @OneToMany(mappedBy = "enterpriseBaseInfo", cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
-    @OrderBy("id desc")
-    private Set<PurchaseTenderItem> purchaseTenderItems;
-
     public EnterpriseBaseInfo(Long uu, String enBusinessCode, String enName, String enAddress) {
         this.uu = uu;
         this.enBusinessCode = enBusinessCode;
@@ -118,16 +111,6 @@ public class EnterpriseBaseInfo {
     public EnterpriseBaseInfo() {
     }
 
-    @JsonIgnore
-    @JSONField(serialize = false)
-    public Set<PurchaseTenderItem> getPurchaseTenderItems() {
-        return purchaseTenderItems;
-    }
-
-    public void setPurchaseTenderItems(Set<PurchaseTenderItem> purchaseTenderItems) {
-        this.purchaseTenderItems = purchaseTenderItems;
-    }
-
     public Long getUu() {
         return uu;
     }

+ 62 - 113
src/main/java/com/uas/platform/b2b/model/PurchaseTender.java

@@ -5,7 +5,6 @@ import org.hibernate.annotations.Where;
 import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -40,13 +39,13 @@ public class PurchaseTender implements Serializable {
     private String title;
 
     /**
-     * 录入日期
+     * 单据最后时间
      */
     @Column(name = "pt_modified")
     private Date modified;
 
     /**
-     * 单据最后时间
+     * 录入日期
      */
     @Column(name = "pt_date")
     private Date date;
@@ -63,16 +62,16 @@ public class PurchaseTender implements Serializable {
     @Column(name = "pt_usertel")
     private String userTel;
 
-//    /**
-//     * 招标企业uu
-//     */
-//    @Column(name = "pt_enuu")
-//    private Long enUU;
+    /**
+     * 招标企业uu
+     */
+    @Column(name = "pt_enuu")
+    private Long enUU;
     /**
      * 企业基本信息
      */
     @OneToOne
-    @JoinColumn(name = "pt_enuu")
+    @JoinColumn(name = "pt_enuu", insertable = false, updatable = false)
     private Enterprise enterprise;
 
     /**
@@ -93,29 +92,6 @@ public class PurchaseTender implements Serializable {
     @Column(name = "pt_status")
     private String status;
 
-    /**
-     * 物料名称
-     */
-    @Column(name = "pt_prodtitle")
-    private String prodTitle;
-
-    /**
-     * 物料型号
-     */
-    @Column(name = "pt_prodcode")
-    private String prodCode;
-
-    /**
-     * 单位
-     */
-    @Column(name = "pt_unit")
-    private String unit;
-
-    /**
-     * 数量
-     */
-    @Column(name = "pt_qty")
-    private Long qty;
 
     /**
      * 币别
@@ -166,20 +142,17 @@ public class PurchaseTender implements Serializable {
     private Short isPublish;
 
     /**
-     * 投标明细
+     * 招标产品明细
      */
-    @OneToMany(mappedBy = "tender", cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
-            CascadeType.MERGE }, fetch = FetchType.EAGER)
-    @OrderBy("id desc")
-    private Set<PurchaseTenderItem> purchaseTenderItems;
+    @OneToMany(mappedBy = "tender", cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
+    @OrderBy("id")
+    private Set<PurchaseTenderProd> purchaseTenderProds;
 
     /**
      * 招标附件
      */
-    @OneToMany(fetch = FetchType.EAGER)
-    @JoinColumn(name = "rel_key")
-    @org.hibernate.annotations.ForeignKey(name = "none")
-    @Where(clause = "rel_table = 'purc$tender'")
+    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.REFRESH})
+    @JoinTable(name = "purc$tenderattach", joinColumns = @JoinColumn(name = "pt_id", referencedColumnName = "pt_id"), inverseJoinColumns = @JoinColumn(name="at_id", referencedColumnName = "at_id"))
     private Set<Attach> tenderAttaches;
 
 
@@ -195,22 +168,6 @@ public class PurchaseTender implements Serializable {
     @Column(name = "pt_result", insertable = false, updatable = false)
     private Short result;
 
-    public Short getOverdue() {
-        return overdue;
-    }
-
-    public void setOverdue(Short overdue) {
-        this.overdue = overdue;
-    }
-
-    public Short getResult() {
-        return result;
-    }
-
-    public void setResult(Short result) {
-        this.result = result;
-    }
-
     public Long getId() {
         return id;
     }
@@ -231,32 +188,24 @@ public class PurchaseTender implements Serializable {
         return title;
     }
 
-    public Date getModified() {
-        return modified;
-    }
-
-    public void setModified(Date modified) {
-        this.modified = modified;
-    }
-
     public void setTitle(String title) {
         this.title = title;
     }
 
-    public Short getIsPublish() {
-        return isPublish;
+    public Date getModified() {
+        return modified;
     }
 
-    public void setIsPublish(Short isPublish) {
-        this.isPublish = isPublish;
+    public void setModified(Date modified) {
+        this.modified = modified;
     }
 
-    public Set<PurchaseTenderItem> getPurchaseTenderItems() {
-        return purchaseTenderItems;
+    public Date getDate() {
+        return date;
     }
 
-    public void setPurchaseTenderItems(Set<PurchaseTenderItem> purchaseTenderItems) {
-        this.purchaseTenderItems = purchaseTenderItems;
+    public void setDate(Date date) {
+        this.date = date;
     }
 
     public String getUser() {
@@ -275,6 +224,14 @@ public class PurchaseTender implements Serializable {
         this.userTel = userTel;
     }
 
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
     public Enterprise getEnterprise() {
         return enterprise;
     }
@@ -307,46 +264,6 @@ public class PurchaseTender implements Serializable {
         this.status = status;
     }
 
-    public String getProdTitle() {
-        return prodTitle;
-    }
-
-    public void setProdTitle(String prodTitle) {
-        this.prodTitle = prodTitle;
-    }
-
-    public String getProdCode() {
-        return prodCode;
-    }
-
-    public void setProdCode(String prodCode) {
-        this.prodCode = prodCode;
-    }
-
-    public String getUnit() {
-        return unit;
-    }
-
-    public void setUnit(String unit) {
-        this.unit = unit;
-    }
-
-    public Date getDate() {
-        return date;
-    }
-
-    public void setDate(Date date) {
-        this.date = date;
-    }
-
-    public Long getQty() {
-        return qty;
-    }
-
-    public void setQty(Long qty) {
-        this.qty = qty;
-    }
-
     public String getCurrency() {
         return currency;
     }
@@ -403,6 +320,22 @@ public class PurchaseTender implements Serializable {
         this.certificate = certificate;
     }
 
+    public Short getIsPublish() {
+        return isPublish;
+    }
+
+    public void setIsPublish(Short isPublish) {
+        this.isPublish = isPublish;
+    }
+
+    public Set<PurchaseTenderProd> getPurchaseTenderProds() {
+        return purchaseTenderProds;
+    }
+
+    public void setPurchaseTenderProds(Set<PurchaseTenderProd> purchaseTenderProds) {
+        this.purchaseTenderProds = purchaseTenderProds;
+    }
+
     public Set<Attach> getTenderAttaches() {
         return tenderAttaches;
     }
@@ -410,6 +343,22 @@ public class PurchaseTender implements Serializable {
     public void setTenderAttaches(Set<Attach> tenderAttaches) {
         this.tenderAttaches = tenderAttaches;
     }
+
+    public Short getOverdue() {
+        return overdue;
+    }
+
+    public void setOverdue(Short overdue) {
+        this.overdue = overdue;
+    }
+
+    public Short getResult() {
+        return result;
+    }
+
+    public void setResult(Short result) {
+        this.result = result;
+    }
 }
 
 

+ 0 - 171
src/main/java/com/uas/platform/b2b/model/PurchaseTenderItem.java

@@ -1,171 +0,0 @@
-package com.uas.platform.b2b.model;
-
-import com.alibaba.fastjson.annotation.JSONField;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.hibernate.annotations.Where;
-
-import javax.persistence.*;
-import java.util.List;
-import java.util.Set;
-
-/**
- *  投标单信息
- * Created by dongbw on 17/03/07 11:16.
- */
-
-@Table(name = "purc$tenderitem")
-@Entity
-public class PurchaseTenderItem {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$tenderitem_gen")
-    @SequenceGenerator(name = "purc$tenderitem_gen", sequenceName = "purc$tenderitem_seq", allocationSize = 1)
-    @Column(name = "pti_id")
-    private Long id;
-
-    /**
-     * 税率
-     */
-    @Column(name = "pti_taxrate")
-    private Long taxrate;
-
-    /**
-     * 单价
-     */
-    @Column(name = "pti_price")
-    private Double price;
-
-
-    /**
-     * 说明
-     */
-    @Column(name = "pti_description")
-    private String description;
-
-    /**
-     * 说明
-     */
-    @Column(name = "pti_code")
-    private String code;
-
-
-    /**
-     * 中标状态(为空表示未处理,0表示未中标,1表示已中标)
-     */
-    @Column(name = "pti_applystatus")
-    private Short applyStatus;
-
-    /**
-     * 投标状态(用于search项目的单据过滤,是否投标其实可以通过是否存在价格判断)
-     */
-    @Column(name = "pti_status")
-    private String status;
-
-    /**
-     * 投标附件
-     */
-    @OneToMany(fetch = FetchType.EAGER)
-    @JoinColumn(name = "rel_key")
-    @org.hibernate.annotations.ForeignKey(name = "none")
-    @Where(clause = "rel_table = 'purc$tenderitem'")
-    private Set<Attach> bidAttaches;
-
-    /**
-     * 招标单
-     */
-    @ManyToOne(cascade = CascadeType.REFRESH)
-    @JoinColumn(name = "pti_ptid", nullable = false)
-    private PurchaseTender tender;
-
-    /**
-     * 投标企业基本信息
-     */
-    @ManyToOne(cascade = {CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST})
-    @JoinColumn(name = "pti_venduu", nullable = false)
-    private EnterpriseBaseInfo enterpriseBaseInfo;
-
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getTaxrate() {
-        return taxrate;
-    }
-
-    public void setTaxrate(Long taxrate) {
-        this.taxrate = taxrate;
-    }
-
-    public Double getPrice() {
-        return price;
-    }
-
-    public void setPrice(Double price) {
-        this.price = price;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public Short getApplyStatus() {
-        return applyStatus;
-    }
-
-    public void setApplyStatus(Short applyStatus) {
-        this.applyStatus = applyStatus;
-    }
-
-    public Set<Attach> getBidAttaches() {
-        return bidAttaches;
-    }
-
-    public void setBidAttaches(Set<Attach> bidAttaches) {
-        this.bidAttaches = bidAttaches;
-    }
-
-    @JsonIgnore
-    @JSONField(serialize = false)
-    public PurchaseTender getTender() {
-        return tender;
-    }
-
-    public void setTender(PurchaseTender tender) {
-        this.tender = tender;
-    }
-
-    public EnterpriseBaseInfo getEnterpriseBaseInfo() {
-        return enterpriseBaseInfo;
-    }
-
-    public void setEnterpriseBaseInfo(EnterpriseBaseInfo enterpriseBaseInfo) {
-        this.enterpriseBaseInfo = enterpriseBaseInfo;
-    }
-
-
-}

+ 155 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseTenderProd.java

@@ -0,0 +1,155 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * 招标单产品信息
+ *
+ * Created by dongbw
+ * 17/03/30 10:00.
+ */
+@Table( name = "purc$tenderprod")
+@Entity
+public class PurchaseTenderProd implements Serializable {
+
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$tenderprod_gen")
+    @SequenceGenerator(name = "purc$tenderprod_gen", sequenceName = "purc$tenderprod_seq", allocationSize = 1)
+    @Column(name = "tp_id")
+    private Long id;
+
+    /**
+     * 物料名称
+     */
+    @Column(name = "tp_prodtitle")
+    private String prodTitle;
+
+    /**
+     * 物料型号
+     */
+    @Column(name = "tp_prodspec")
+    private String prodSpec;
+
+    /**
+     * 物料型号
+     */
+    @Column(name = "tp_prodcode")
+    private String prodCode;
+
+    /**
+     * 品牌
+     */
+    @Column(name = "tp_brand")
+    private String brand;
+
+    /**
+     * 单位
+     */
+    @Column(name = "tp_unit")
+    private String unit;
+
+    /**
+     * 采购数量
+     */
+    @Column(name = "tp_qty")
+    private Long qty;
+
+    /**
+     * 招标单
+     */
+    @ManyToOne(cascade = {CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE})
+    @JoinColumn(name = "tp_ptid", nullable = false)
+    private PurchaseTender tender;
+
+    /**
+     * 投标明细
+     */
+    @OneToMany(mappedBy = "tenderProd", cascade = {CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.EAGER)
+    @OrderBy("id")
+    private Set<SaleTenderItem> saleTenderItems;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getProdTitle() {
+        return prodTitle;
+    }
+
+    public void setProdTitle(String prodTitle) {
+        this.prodTitle = prodTitle;
+    }
+
+    public String getProdCode() {
+        return prodCode;
+    }
+
+    public void setProdCode(String prodCode) {
+        this.prodCode = prodCode;
+    }
+
+    public String getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public Long getQty() {
+        return qty;
+    }
+
+    public void setQty(Long qty) {
+        this.qty = qty;
+    }
+
+    public String getProdSpec() {
+        return prodSpec;
+    }
+
+    public void setProdSpec(String prodSpec) {
+        this.prodSpec = prodSpec;
+    }
+
+    @JsonIgnore
+    @JSONField(serialize = false)
+    public PurchaseTender getTender() {
+        return tender;
+    }
+
+    public void setTender(PurchaseTender tender) {
+        this.tender = tender;
+    }
+
+
+    public Set<SaleTenderItem> getSaleTenderItems() {
+        return saleTenderItems;
+    }
+
+    public void setSaleTenderItems(Set<SaleTenderItem> saleTenderItems) {
+        this.saleTenderItems = saleTenderItems;
+    }
+}

+ 385 - 0
src/main/java/com/uas/platform/b2b/model/SaleTender.java

@@ -0,0 +1,385 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * 投标单主表
+ * <p>
+ * Created by dongbw on 17/03/07 11:16.
+ */
+
+@Table(name = "sale$tender")
+@Entity
+public class SaleTender implements Serializable, Comparable<SaleTender> {
+
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sale$tender_gen")
+    @SequenceGenerator(name = "sale$tender_gen", sequenceName = "sale$tender_seq", allocationSize = 1)
+    @Column(name = "st_id")
+    private Long id;
+
+
+    /**
+     * 招标编号
+     */
+    @Column(name = "st_code")
+    private String code;
+
+    /**
+     * 招标项目
+     */
+    @Column(name = "st_title")
+    private String title;
+
+    /**
+     * 单据最后修改时间
+     */
+    @Column(name = "st_modified")
+    private Date modified;
+
+    /**
+     * 招标单录入日期
+     */
+    @Column(name = "st_date")
+    private Date date;
+
+    /**
+     * 招标方联系人
+     */
+    @Column(name = "st_user")
+    private String user;
+
+    /**
+     * 招标方联系人电话
+     */
+    @Column(name = "st_usertel")
+    private String userTel;
+
+    /**
+     * 招标企业uu
+     */
+    @Column(name = "st_enuu")
+    private Long enUU;
+
+    /**
+     * 招标企业基本信息
+     */
+    @OneToOne(cascade = CascadeType.REFRESH )
+    @JoinColumn(name = "st_enuu", insertable = false, updatable = false)
+    private Enterprise enterprise;
+
+    /**
+     * 投标截止日期
+     */
+    @Column(name = "st_enddate")
+    private Date endDate;
+
+    /**
+     * 结果公布日期
+     */
+    @Column(name = "st_publishdate")
+    private Date publishDate;
+
+    /**
+     * 币别
+     */
+    @Column(name = "st_currency")
+    private String currency;
+
+    /**
+     * 是否开放报名(1为开放,0为指定供应商)
+     */
+    @Column(name = "st_ifopen")
+    private Short ifOpen;
+
+    /**
+     * 是否含税(1含税,0不含税)
+     */
+    @Column(name = "st_iftax")
+    private Short ifTax;
+
+    /**
+     * 收货地址
+     */
+    @Column(name = "st_shipaddress")
+    private String shipAddress;
+
+    /**
+     * 付款方式
+     */
+    @Column(name = "st_payment")
+    private String payment;
+
+    /**
+     * 发票类型(0表示不要发票, 1表示增值税普通发票, 2表示增值税专用发票)
+     */
+    @Column(name = "st_invoicetype")
+    private Short invoiceType;
+
+    /**
+     * 证照要求
+     */
+    @Column(name = "st_certificate")
+    private String certificate;
+
+    /**
+     * 投标单状态
+     */
+    @Column(name = "st_status")
+    private String status;
+
+    /**
+     * 投标附件
+     */
+    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.REFRESH})
+    @JoinTable(name = "sale$tenderattach", joinColumns = @JoinColumn(name = "st_id", referencedColumnName = "st_id"), inverseJoinColumns = @JoinColumn(name="at_id", referencedColumnName = "at_id"))
+    private Set<Attach> bidAttaches;
+
+    /**
+     * 投标明细
+     */
+    @OneToMany(mappedBy = "saleTender", cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
+    @OrderBy("id")
+    private Set<SaleTenderItem> saleTenderItems;
+
+    /**
+     * 投标企业uu
+     */
+    @Column(name = "st_venduu")
+    private Long vendUU;
+
+    /**
+     * 投标企业基本信息
+     */
+    @OneToOne(cascade = {CascadeType.REFRESH, CascadeType.MERGE, CascadeType.PERSIST})
+    @JoinColumn(name = "st_venduu", insertable = false, updatable = false)
+    private EnterpriseBaseInfo enterpriseBaseInfo;
+
+    public SaleTender(PurchaseTender tender) {
+        this.setCode(tender.getCode());
+        this.setCertificate(tender.getCertificate());
+        this.setCurrency(tender.getCurrency());
+        this.setDate(tender.getDate());
+        this.setEndDate(tender.getEndDate());
+        this.setEnterprise(tender.getEnterprise());
+        this.setIfOpen(tender.getIfOpen());
+        this.setIfTax(tender.getIfTax());
+        this.setInvoiceType(tender.getInvoiceType());
+        this.setModified(tender.getModified());
+        this.setPayment(tender.getPayment());
+        this.setPublishDate(tender.getPublishDate());
+        this.setShipAddress(tender.getShipAddress());
+        this.setStatus(tender.getStatus());
+        this.setTitle(tender.getTitle());
+        this.setUser(tender.getUser());
+        this.setUserTel(tender.getUserTel());
+        this.setEnUU(tender.getEnUU());
+    }
+
+    public SaleTender() {
+    }
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Date getModified() {
+        return modified;
+    }
+
+    public void setModified(Date modified) {
+        this.modified = modified;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getUser() {
+        return user;
+    }
+
+    public void setUser(String user) {
+        this.user = user;
+    }
+
+    public String getUserTel() {
+        return userTel;
+    }
+
+    public void setUserTel(String userTel) {
+        this.userTel = userTel;
+    }
+
+    public Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise enterprise) {
+        this.enterprise = enterprise;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public Date getPublishDate() {
+        return publishDate;
+    }
+
+    public void setPublishDate(Date publishDate) {
+        this.publishDate = publishDate;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public Short getIfOpen() {
+        return ifOpen;
+    }
+
+    public void setIfOpen(Short ifOpen) {
+        this.ifOpen = ifOpen;
+    }
+
+    public Short getIfTax() {
+        return ifTax;
+    }
+
+    public void setIfTax(Short ifTax) {
+        this.ifTax = ifTax;
+    }
+
+    public String getShipAddress() {
+        return shipAddress;
+    }
+
+    public void setShipAddress(String shipAddress) {
+        this.shipAddress = shipAddress;
+    }
+
+    public String getPayment() {
+        return payment;
+    }
+
+    public void setPayment(String payment) {
+        this.payment = payment;
+    }
+
+    public Short getInvoiceType() {
+        return invoiceType;
+    }
+
+    public void setInvoiceType(Short invoiceType) {
+        this.invoiceType = invoiceType;
+    }
+
+    public String getCertificate() {
+        return certificate;
+    }
+
+    public void setCertificate(String certificate) {
+        this.certificate = certificate;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Set<Attach> getBidAttaches() {
+        return bidAttaches;
+    }
+
+    public void setBidAttaches(Set<Attach> bidAttaches) {
+        this.bidAttaches = bidAttaches;
+    }
+
+    @JsonIgnore
+    @JSONField(serialize = false)
+    public Set<SaleTenderItem> getSaleTenderItems() {
+        return saleTenderItems;
+    }
+
+    public void setSaleTenderItems(Set<SaleTenderItem> saleTenderItems) {
+        this.saleTenderItems = saleTenderItems;
+    }
+
+    public EnterpriseBaseInfo getEnterpriseBaseInfo() {
+        return enterpriseBaseInfo;
+    }
+
+    public void setEnterpriseBaseInfo(EnterpriseBaseInfo enterpriseBaseInfo) {
+        this.enterpriseBaseInfo = enterpriseBaseInfo;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public Long getVendUU() {
+        return vendUU;
+    }
+
+    public void setVendUU(Long vendUU) {
+        this.vendUU = vendUU;
+    }
+
+    @Override
+    public int compareTo(SaleTender o) {
+        return this.getId().compareTo(o.getId());
+    }
+}

+ 146 - 0
src/main/java/com/uas/platform/b2b/model/SaleTenderItem.java

@@ -0,0 +1,146 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ *  投标单明细
+ * Created by dongbw
+ * 17/03/30 11:53.
+ */
+@Table(name = "sale$tenderitem")
+@Entity
+public class SaleTenderItem implements Serializable{
+
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sale$tenderitem_gen")
+    @SequenceGenerator(name = "sale$tenderitem_gen", sequenceName = "sale$tenderitem_seq", allocationSize = 1)
+    @Column(name = "sti_id")
+    private Long id;
+
+
+    /**
+     * 税率
+     */
+    @Column(name = "sti_taxrate")
+    private Long taxrate;
+
+    /**
+     * 单价
+     */
+    @Column(name = "sti_price")
+    private Double price;
+
+    /**
+     * 采购周期
+     */
+    @Column(name = "sti_cycle")
+    private String cycle;
+
+    /**
+     * 说明
+     */
+    @Column(name = "sti_description")
+    private String description;
+
+    /**
+     * 中标状态(为空表示未处理,0表示未中标,1表示已中标)
+     */
+    @Column(name = "sti_applystatus")
+    private Short applyStatus;
+
+//    /**
+//     * 投标状态(用于search项目的单据过滤,是否投标其实可以通过是否存在价格判断)
+//     */
+//    @Column(name = "sti_status")
+//    private String status;
+
+    /**
+     * 招标产品明细
+     */
+    @ManyToOne(cascade = {CascadeType.REFRESH, CascadeType.MERGE})
+    @JoinColumn(name = "sti_tpid", nullable = false)
+    private PurchaseTenderProd tenderProd;
+
+    /**
+     * 投标主表
+     */
+    @ManyToOne(cascade = {CascadeType.REFRESH,CascadeType.MERGE})
+    @JoinColumn(name = "sti_stid", nullable = false)
+    private SaleTender saleTender;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTaxrate() {
+        return taxrate;
+    }
+
+    public void setTaxrate(Long taxrate) {
+        this.taxrate = taxrate;
+    }
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+
+    public String getCycle() {
+        return cycle;
+    }
+
+    public void setCycle(String cycle) {
+        this.cycle = cycle;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Short getApplyStatus() {
+        return applyStatus;
+    }
+
+    public void setApplyStatus(Short applyStatus) {
+        this.applyStatus = applyStatus;
+    }
+
+    @JsonIgnore
+    @JSONField(serialize = false)
+    public PurchaseTenderProd getTenderProd() {
+        return tenderProd;
+    }
+
+    public void setTenderProd(PurchaseTenderProd tenderProd) {
+        this.tenderProd = tenderProd;
+    }
+
+    public SaleTender getSaleTender() {
+        return saleTender;
+    }
+
+    public void setSaleTender(SaleTender saleTender) {
+        this.saleTender = saleTender;
+    }
+}

+ 39 - 28
src/main/java/com/uas/platform/b2b/service/PurchaseTenderService.java

@@ -1,12 +1,6 @@
 package com.uas.platform.b2b.service;
 
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.FileUpload;
-import com.uas.platform.b2b.model.PurchaseTender;
-import com.uas.platform.b2b.model.PurchaseTenderItem;
-import com.uas.platform.core.model.PageInfo;
-import org.springframework.data.domain.Page;
-import org.springframework.ui.ModelMap;
+import com.uas.platform.b2b.model.*;
 
 import java.util.List;
 
@@ -34,18 +28,20 @@ public interface PurchaseTenderService {
     /**
      * 投标
      *
-     * @param item
-     * @return
-     */
-    PurchaseTenderItem reply(PurchaseTender tender, PurchaseTenderItem item);
-
-    /**
-     * 根据id获取投标单
      *
-     * @param bidId
+     * @param tenderItems
+     * @param enBaseInfo
      * @return
      */
-    PurchaseTenderItem findByItemId(Long bidId);
+    void reply(List<SaleTenderItem> tenderItems, EnterpriseBaseInfo enBaseInfo, List<Attach> attaches);
+
+//    /**
+//     * 根据id获取投标单
+//     *
+//     * @param bidId
+//     * @return
+//     */
+//    SaleTender findByItemId(Long bidId);
 
 
     /**
@@ -54,7 +50,7 @@ public interface PurchaseTenderService {
      * @param purchaseTender
      * @return
      */
-    PurchaseTender decide(PurchaseTender purchaseTender);
+    void decide(PurchaseTender purchaseTender);
 
     /**
      * 根据id获取招标单
@@ -64,12 +60,12 @@ public interface PurchaseTenderService {
      */
     PurchaseTender findById(Long bidId);
 
-    /**
-     *  根据id获取评标单
-     * @param id
-     * @return
-     */
-    List<PurchaseTenderItem> getItemsByTenderId(Long id);
+//    /**
+//     *  根据id获取评标单
+//     * @param id
+//     * @return
+//     */
+//    List<SaleTender> getItemsByTenderId(Long id);
 
     /**
      *  根据id和enuu获取客户投标单
@@ -77,7 +73,7 @@ public interface PurchaseTenderService {
      * @param id
      * @return
      */
-    PurchaseTenderItem findByEnUUAndId(Long vendUU, Long id);
+    SaleTender findByEnUUAndId(Long vendUU, Long id);
 
     /**
      *  发布公开招标单
@@ -91,16 +87,31 @@ public interface PurchaseTenderService {
      */
     void saveOpen(PurchaseTender purchaseTender);
 
-    ModelMap addTenderAttaches(PurchaseTender purchaseTender, FileUpload uploadItem);
+    Attach addTenderAttaches(FileUpload uploadItem) throws Exception;
 
-    ModelMap addTenderItemAttaches(PurchaseTenderItem item, FileUpload uploadItem);
+    Attach addTenderItemAttaches(FileUpload uploadItem) throws Exception;
 
     /**
      *  获取最近指定招标
      *
      * @return
      */
-    Page<PurchaseTender> findAllByPageInfo(PageInfo info);
+    List<PurchaseTender> findAll();
 
-    Page<PurchaseTender> findOpenByPageInfo(PageInfo info);
+    List<PurchaseTender> findOpen();
+
+    /**
+     *  删除指定id招标单
+     * @param id
+     */
+    void delete(Long id);
+
+    void publishSaved(Long id);
+
+    /**
+     * 根据id删除单个附件
+     *
+     * @param attachId
+     */
+    void deleteAttach(Long attachId);
 }

+ 217 - 178
src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java

@@ -1,19 +1,15 @@
 package com.uas.platform.b2b.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.PurchaseTenderService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.model.Constant;
-import com.uas.platform.core.model.PageInfo;
-import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
-import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -31,7 +27,13 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
     private PurchaseTenderDao purchaseTenderDao;
 
     @Autowired
-    private PurchaseTenderItemDao purchaseTenderItemDao;
+    private PurchaseTenderProdDao purchaseTenderProdDao;
+
+    @Autowired
+    private SaleTenderDao saleTenderDao;
+
+    @Autowired
+    private SaleTenderItemDao saleTenderItemDao;
 
     @Autowired
     private AttachDao attachDao;
@@ -54,9 +56,10 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
     @Override
     public void save(PurchaseTender tender, List<Enterprise> enterprises) {
         tender.setIsPublish(Constant.NO);
-        tender.setStatus("在录入");
+        tender.setStatus("待发布");
+        tender.setEnUU(SystemSession.getUser().getEnterprise().getUu());
         tender.setEnterprise(SystemSession.getUser().getEnterprise());
-        purchaseTenderItemDao.save(saveTenderItem(tender, enterprises));
+        saveTenderItem(tender, enterprises);
     }
 
     /**
@@ -69,182 +72,219 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
     public void publish(PurchaseTender tender, List<Enterprise> enterprises) {
         tender.setIsPublish(Constant.YES);
         tender.setStatus("待投标");
+        tender.setEnUU(SystemSession.getUser().getEnterprise().getUu());
         tender.setEnterprise(SystemSession.getUser().getEnterprise());
-        purchaseTenderItemDao.save(saveTenderItem(tender, enterprises));
+        saveTenderItem(tender, enterprises);
+    }
+
+    private void saveTenderItem (PurchaseTender tender, List<Enterprise> enterprises) {
+//        List<SaleTenderItem> saleTenderItems = new ArrayList<>();
+        Set<PurchaseTenderProd> tenderProds = tender.getPurchaseTenderProds();
+        for (PurchaseTenderProd tenderProd : tenderProds) {
+            tenderProd.setTender(tender);
+            purchaseTenderProdDao.save(tenderProd);
+            for (Enterprise enterprise : enterprises) {
+                EnterpriseBaseInfo enBaseInfo = enterpriseBaseInfoDao.findOne(enterprise.getUu());
+                if (null == enBaseInfo) {
+                    enBaseInfo = new EnterpriseBaseInfo(enterprise.getUu(), enterprise.getEnBussinessCode(), enterprise.getEnName(), enterprise.getEnAddress());
+                }
+                SaleTenderItem tenderItem = new SaleTenderItem();
+                // 找不到投标单主表才新建一个
+                if (tender.getEnUU() != null && enBaseInfo.getUu() != null && tender.getCode() != null) {
+                    SaleTender saleTender =  saleTenderDao.findByEnUUAndVendUUAndCode(tender.getEnUU(), enBaseInfo.getUu(), tender.getCode());
+                    if (null == saleTender) {
+                        saleTender = new SaleTender(tender);
+                        saleTender.setVendUU(enBaseInfo.getUu());
+                        saleTender.setEnterpriseBaseInfo(enBaseInfo); // 投标单主表构造完毕
+                        saleTenderDao.save(saleTender);
+                    }
+                    tenderItem.setSaleTender(saleTender);
+                }
+                tenderItem.setTenderProd(tenderProd);
+                saleTenderItemDao.save(tenderItem);
+            }
+        }
     }
 
     @Override
     public void publishOpen(PurchaseTender tender) {
         tender.setIsPublish(Constant.YES);
         tender.setStatus("待投标");
-        tender.setEnterprise(SystemSession.getUser().getEnterprise());
+        tender.setEnUU(SystemSession.getUser().getEnterprise().getUu());
         purchaseTenderDao.save(tender);
+        Set<PurchaseTenderProd> tenderProds = tender.getPurchaseTenderProds();
+        for (PurchaseTenderProd tenderProd : tenderProds) {
+            tenderProd.setTender(tender);
+            purchaseTenderProdDao.save(tenderProd);
+        }
     }
 
     @Override
     public void saveOpen(PurchaseTender tender) {
         tender.setIsPublish(Constant.NO);
         tender.setStatus("待发布");
-        tender.setEnterprise(SystemSession.getUser().getEnterprise());
+        tender.setEnUU(SystemSession.getUser().getEnterprise().getUu());
         purchaseTenderDao.save(tender);
     }
 
     @Override
-    public ModelMap addTenderAttaches(PurchaseTender purchaseTender, FileUpload uploadItem) {
-        ModelMap map = new ModelMap();
-        Set<Attach> attaches = new HashSet<>();
-        if (uploadItem.getFile() != null) {// 附件存在
-            Attach attach = attachService.upload(uploadItem, "tenderAttachs", "招标附件");
-            if (attach == null) {
-                map.put("error", "文件太大");
-            } else {
-                attach.setRelativeTable("purc$tender");
-                attaches.add(attach);
-//                purchaseTender = purchaseTenderDao.save(purchaseTender);
-            }
+    public Attach addTenderAttaches(FileUpload uploadItem) throws Exception{
+        if (uploadItem.getFile() == null) {
+            throw new Exception("没有附件");
         }
-        List<PurchaseTender> tenders = purchaseTenderDao.findByCode(purchaseTender.getCode());
-        PurchaseTender tender = tenders.get(0);
-        tender.setTenderAttaches(attaches);
-        System.out.println("tender attach impl" + JSON.toJSONString(tender));
-        attachDao.save(attaches);
-        tender = purchaseTenderDao.save(tender);
-        if (!CollectionUtils.isEmpty(tenders)) {
-            map.put("id", tender.getId());
-            map.put("success", "招标附件上传成功");
+        Attach attach = attachService.upload(uploadItem, "purchaseTenderAttaches", "招标附件");
+        if (attach == null) {
+            throw new Exception("文件太大");
         }
-        return map;
+        return attachDao.save(attach);
     }
 
     @Override
-    public ModelMap addTenderItemAttaches(PurchaseTenderItem item, FileUpload uploadItem) {
-        ModelMap map = new ModelMap();
-        Set<Attach> attaches = new HashSet<>();
-        if (uploadItem.getFile() != null) {// 附件存在
-            Attach attach = attachService.upload(uploadItem, "tenderItemAttachs", "投标附件");
-            if (attach == null) {
-                map.put("error", "文件太大");
-            } else {
-                attach.setRelativeTable("purc$tenderitem");
-                attaches.add(attach);
-//                purchaseTender = purchaseTenderDao.save(purchaseTender);
-            }
+    public Attach addTenderItemAttaches(FileUpload uploadItem) throws Exception{
+        if (uploadItem.getFile() == null) {
+            throw new Exception("没有附件");
         }
-        List<PurchaseTender> tenders = purchaseTenderDao.findByCode(item.getCode());
-        PurchaseTenderItem purchaseTenderItem = new PurchaseTenderItem();
-        Set<PurchaseTenderItem> tenderItems = tenders.get(0).getPurchaseTenderItems();
-        for (PurchaseTenderItem tenderItem: tenderItems) {
-            if (tenderItem.getEnterpriseBaseInfo().getUu().intValue() == SystemSession.getUser().getEnterprise().getUu().intValue()) {
-                purchaseTenderItem = purchaseTenderItemDao.findOne(tenderItem.getId());
-            }
+        Attach attach = attachService.upload(uploadItem, "saleTenderAttaches", "投标附件");
+        if (attach == null) {
+            throw new Exception("文件太大");
         }
-        purchaseTenderItem.setBidAttaches(attaches);
-        purchaseTenderItem.setTender(tenders.get(0));
-        System.out.println("tenderItem attach impl" + JSON.toJSONString(purchaseTenderItem));
-        attachDao.save(attaches);
-        purchaseTenderItem = purchaseTenderItemDao.save(purchaseTenderItem);
-        map.put("id", purchaseTenderItem.getId());
-        map.put("success", "投标附件上传成功");
-        return map;
+        return attachDao.save(attach);
     }
 
     @Override
-    public Page<PurchaseTender> findAllByPageInfo(final PageInfo pageInfo) {
-        List<PurchaseTenderItem> tenderItems = purchaseTenderItemDao.findAll(new Specification<PurchaseTenderItem>() {
+    public List<PurchaseTender> findAll() {
+        List<SaleTender> saleTenders = saleTenderDao.findAll(new Specification<SaleTender>() {
             @Override
-            public Predicate toPredicate(Root<PurchaseTenderItem> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+            public Predicate toPredicate(Root<SaleTender> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                 Predicate myTender = cb.equal(root.get("enterpriseBaseInfo").get("uu"), SystemSession.getUser().getEnterprise().getUu());
                 query.where(myTender);
                 return query.getRestriction();
             }
         });
-        final Set<Long> ids = new HashSet<>();
-        for (PurchaseTenderItem tenderItem : tenderItems) {
-            ids.add(tenderItem.getTender().getId());
-        }
-        return purchaseTenderDao.findAll(new Specification<PurchaseTender>() {
-
-            public Predicate toPredicate(Root<PurchaseTender> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
-                Predicate p1 = root.get("id").in(ids.toArray());
-                Predicate p2 = builder.equal(root.get("isPublish"), Constant.YES);
-                Predicate p3 = builder.equal(root.get("ifOpen"), Constant.NO);
-                Predicate p = builder.and(p1,builder.and(p2,p3));
-                query.where(p);
-                return null;
+        List<PurchaseTender> tenderList = new ArrayList<>();
+        for (SaleTender saleTender : saleTenders) {
+            PurchaseTender purchaseTender = purchaseTenderDao.findByEnUUAndCode(saleTender.getEnUU(), saleTender.getCode());
+            if (purchaseTender.getIfOpen() == Constant.NO && purchaseTender.getIsPublish() == Constant.YES) {
+                tenderList.add(purchaseTender);
             }
-        }, pageInfo);
+        }
+        return tenderList;
     }
 
     @Override
-    public Page<PurchaseTender> findOpenByPageInfo(final PageInfo pageInfo) {
+    public List<PurchaseTender> findOpen() {
         return purchaseTenderDao.findAll(new Specification<PurchaseTender>() {
 
             public Predicate toPredicate(Root<PurchaseTender> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
                 Predicate p1 = builder.equal(root.get("ifOpen"), Constant.YES);
                 Predicate p2 = builder.equal(root.get("isPublish"), Constant.YES);
-                Predicate predicate = builder.and(p1,p2);
+                Predicate p3 = builder.notEqual(root.get("enUU"), SystemSession.getUser().getEnterprise().getUu());
+                Predicate predicate = builder.and(p1,p2,p3);
                 query.where(predicate);
                 return null;
             }
-        }, pageInfo);
+        });
     }
 
-    private List<PurchaseTenderItem> saveTenderItem (PurchaseTender tender, List<Enterprise> enterprises) {
-        List<PurchaseTenderItem> tenderItems = new ArrayList<>();
-        for (Enterprise enterprise: enterprises) {
-            PurchaseTenderItem tenderItem = new PurchaseTenderItem();
-            tenderItem.setTender(tender);
-            tenderItem.setCode(tender.getCode());
-            EnterpriseBaseInfo enBaseInfo = enterpriseBaseInfoDao.findOne(enterprise.getUu());
-            if (null == enBaseInfo) {
-                enBaseInfo = new EnterpriseBaseInfo(enterprise.getUu(),enterprise.getEnBussinessCode(),enterprise.getEnName(),enterprise.getEnAddress());
-            }
-            tenderItem.setEnterpriseBaseInfo(enBaseInfo);
-            tenderItem.setStatus(enBaseInfo.getUu() + "待投标");
+    @Override
+    public void delete(Long id) {
+        PurchaseTender tender = purchaseTenderDao.findOne(id);
+        if (null != tender) {
+            purchaseTenderDao.delete(tender);
+        }
+    }
+
+    @Override
+    public void publishSaved(Long id) {
+        PurchaseTender tender = purchaseTenderDao.findOne(id);
+        if (null != tender) {
+            tender.setIsPublish(Constant.YES);
             purchaseTenderDao.save(tender);
-            tenderItems.add(tenderItem);
         }
-        return tenderItems;
     }
 
+    @Override
+    public void deleteAttach(Long attachId) {
+        Attach attach = attachDao.findOne(attachId);
+        if (attach != null) {
+            attachDao.delete(attach);
+        }
+    }
 
 
-    /**
-     * 投标
-     *
-     * @param item
-     * @return
-     */
     @Override
-    public PurchaseTenderItem reply(PurchaseTender tender, PurchaseTenderItem item) {
-        PurchaseTender purchaseTender = purchaseTenderDao.findOne(tender.getId());
-        purchaseTender.setStatus("待评标");
-        purchaseTender.setModified(new Date());
-        purchaseTenderDao.save(purchaseTender);
-//        enterpriseBaseInfoDao.save(item.getEnterpriseBaseInfo());
-        PurchaseTenderItem tenderItem = purchaseTenderItemDao.findOne(item.getId());
-        tenderItem.setEnterpriseBaseInfo(item.getEnterpriseBaseInfo());
-        tenderItem.setPrice(item.getPrice());
-        tenderItem.setTaxrate(item.getTaxrate());
-        tenderItem.setStatus(item.getEnterpriseBaseInfo().getUu() + "已投标");
-        System.out.println("reply impl" + JSON.toJSONString(tenderItem));
-        return purchaseTenderItemDao.save(tenderItem);
+    public PurchaseTender findById(Long id) {
+        PurchaseTender tender = purchaseTenderDao.findOne(id);
+        if (tender.getIfOpen() == Constant.NO){ // 如果是指定供应商投标,直接返回查找结果
+            return tender;
+        }
+        for (PurchaseTenderProd tenderProd : tender.getPurchaseTenderProds()) {
+            Long vendUU = SystemSession.getUser().getEnterprise().getUu();
+            EnterpriseBaseInfo enBaseInfo = enterpriseBaseInfoDao.findOne(vendUU);
+            if (null == enBaseInfo) {
+                Enterprise enterprise = enterpriseDao.findOne(vendUU);
+                enBaseInfo = new EnterpriseBaseInfo(enterprise.getUu(), enterprise.getEnBussinessCode(), enterprise.getEnName(), enterprise.getEnAddress());
+            }
+            SaleTenderItem tenderItem = new SaleTenderItem();
+            // 找不到投标单主表才新建一个
+            SaleTender saleTender =  saleTenderDao.findByEnUUAndVendUUAndCode(tender.getEnterprise().getUu(), enBaseInfo.getUu(), tender.getCode());
+            if (null == saleTender) {
+                saleTender = new SaleTender(tender);
+                saleTender.setVendUU(enBaseInfo.getUu()); // 投标单主表构造完毕
+                saleTenderDao.save(saleTender);
+            }
+            tenderItem.setSaleTender(saleTender);
+            tenderItem.setTenderProd(tenderProd);
+            saleTenderItemDao.saveAndFlush(tenderItem);
+        }
+        return tender;
     }
 
+
+
     /**
-     * 根据id获取投标单(供应商进入投标)
+     * 投标
      *
-     * @param id
+     *
+     * @param tenderItems
+     * @param enBaseInfo
      * @return
      */
     @Override
-    public PurchaseTenderItem findByItemId(Long id) {
-        PurchaseTender tender = purchaseTenderDao.findOne(id);
-        tender.setModified(new Date());
-        Long enUU = SystemSession.getUser().getEnterprise().getUu();
-        return returnPurchaseTenderItem(tender, enUU);
+    public void reply(List<SaleTenderItem> tenderItems, EnterpriseBaseInfo enBaseInfo, List<Attach> attaches) {
+        enterpriseBaseInfoDao.save(enBaseInfo);
+        SaleTender saleTender = tenderItems.get(0).getSaleTender();
+        Set<Attach> attachSet = new HashSet<>();
+        if (!CollectionUtils.isEmpty(attaches)) {
+            attachSet.addAll(attaches);
+            saleTender.setBidAttaches(attachSet);
+            saleTenderDao.save(saleTender);
+        }
+        for (SaleTenderItem tenderItem : tenderItems) {
+            SaleTenderItem saleTenderItem = saleTenderItemDao.findOne(tenderItem.getId());
+            // 需要修改见索引主表中的字段来触发索引更新
+            saleTenderItem.getTenderProd().getTender().setModified(new Date());
+            saleTenderItem.setPrice(tenderItem.getPrice());
+            saleTenderItem.setTaxrate(tenderItem.getTaxrate());
+            saleTenderItem.setCycle(tenderItem.getCycle());
+            saleTenderItemDao.save(saleTenderItem);
+        }
     }
 
+//    /**
+//     * 根据id获取投标单(供应商进入投标)
+//     *
+//     * @param id
+//     * @return
+//     */
+//    @Override
+//    public SaleTender findByItemId(Long id) {
+//        PurchaseTender tender = purchaseTenderDao.findOne(id);
+//        tender.setModified(new Date());
+//        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+//        return returnPurchaseTenderItem(tender, enUU);
+//    }
+
     /**
      * 根据id和供应商uu获取投标单(采购方查看投标单)
      *
@@ -252,47 +292,48 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
      * @return
      */
     @Override
-    public PurchaseTenderItem findByEnUUAndId(Long enUU, Long id) {
+    public SaleTender findByEnUUAndId(Long enUU, Long id) {
         PurchaseTender tender = purchaseTenderDao.findOne(id);
         return returnPurchaseTenderItem(tender, enUU);
     }
 
-    private PurchaseTenderItem returnPurchaseTenderItem(PurchaseTender tender, Long enUU) {
-        PurchaseTenderItem tenderItem = new PurchaseTenderItem();
-        if (!CollectionUtils.isEmpty(tender.getPurchaseTenderItems())) {
-            Set<PurchaseTenderItem> tenderItems = tender.getPurchaseTenderItems();
-            for (PurchaseTenderItem item : tenderItems) {
-                if (null != item.getEnterpriseBaseInfo()) {
-                    if (item.getEnterpriseBaseInfo().getUu().intValue() == enUU.intValue()) {
-                        item.setTender(tender);
-//                        item.setStatus(enUU + "待投标");
-                        return item;
-                    }
-                }
-            }
-        }
-        // 如果不存在就新建一个投标单。
-        tenderItem.setTender(tender);
-        tenderItem.setCode(tender.getCode());
-        EnterpriseBaseInfo enBaseInfo = enterpriseBaseInfoDao.findOne(enUU);
-        if (null == enBaseInfo) {
-            Enterprise enterprise = enterpriseDao.findOne(enUU);
-            if (null != enterprise) {
-                enBaseInfo = new EnterpriseBaseInfo(enterprise.getUu(),enterprise.getEnBussinessCode(),enterprise.getEnName(),enterprise.getEnAddress());
-            }
-        }
-        tenderItem.setEnterpriseBaseInfo(enBaseInfo);
-        tenderItem.setStatus(enUU + "待投标");
-        System.out.println("getItem impl tender" + JSON.toJSONString(tender));
-        System.out.println("getItem impl tenderItem" + JSON.toJSONString(tenderItem));
-        Set<PurchaseTenderItem> items = new HashSet<>();
-        if (!CollectionUtils.isEmpty(tender.getPurchaseTenderItems())) {
-            items = tender.getPurchaseTenderItems();
-        }
-        items.add(tenderItem);
-        tender.setPurchaseTenderItems(items);
-        purchaseTenderDao.save(tender);
-        return tenderItem;
+    private SaleTender returnPurchaseTenderItem(PurchaseTender tender, Long enUU) {
+//        SaleTender tenderItem = new SaleTender();
+//        if (!CollectionUtils.isEmpty(tender.getPurchaseTenderItems())) {
+//            Set<SaleTender> tenderItems = tender.getPurchaseTenderItems();
+//            for (SaleTender item : tenderItems) {
+//                if (null != item.getEnterpriseBaseInfo()) {
+//                    if (item.getEnterpriseBaseInfo().getUu().intValue() == enUU.intValue()) {
+//                        item.setTender(tender);
+////                        item.setStatus(enUU + "待投标");
+//                        return item;
+//                    }
+//                }
+//            }
+//        }
+//        // 如果不存在就新建一个投标单。
+//        tenderItem.setTender(tender);
+//        tenderItem.setCode(tender.getCode());
+//        EnterpriseBaseInfo enBaseInfo = enterpriseBaseInfoDao.findOne(enUU);
+//        if (null == enBaseInfo) {
+//            Enterprise enterprise = enterpriseDao.findOne(enUU);
+//            if (null != enterprise) {
+//                enBaseInfo = new EnterpriseBaseInfo(enterprise.getUu(),enterprise.getEnBussinessCode(),enterprise.getEnName(),enterprise.getEnAddress());
+//            }
+//        }
+//        tenderItem.setEnterpriseBaseInfo(enBaseInfo);
+//        tenderItem.setStatus(enUU + "待投标");
+//        System.out.println("getItem impl tender" + JSON.toJSONString(tender));
+//        System.out.println("getItem impl tenderItem" + JSON.toJSONString(tenderItem));
+//        Set<SaleTender> items = new HashSet<>();
+//        if (!CollectionUtils.isEmpty(tender.getPurchaseTenderItems())) {
+//            items = tender.getPurchaseTenderItems();
+//        }
+//        items.add(tenderItem);
+//        tender.setPurchaseTenderItems(items);
+//        purchaseTenderDao.save(tender);
+//        return tenderItem;
+        return null;
     }
 
     /**
@@ -302,32 +343,30 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
      * @return
      */
     @Override
-    public PurchaseTender decide(PurchaseTender purchaseTender) {
-        System.out.println("decide impl" + JSON.toJSONString(purchaseTender));
+    public void decide(PurchaseTender purchaseTender) {
         purchaseTender.setStatus("已结标");
-        for (PurchaseTenderItem tenderItem : purchaseTender.getPurchaseTenderItems()) {
-            tenderItem.setTender(purchaseTender);
-            purchaseTenderItemDao.save(tenderItem);
+        purchaseTenderDao.save(purchaseTender);
+        for (PurchaseTenderProd tenderProd : purchaseTender.getPurchaseTenderProds()) {
+            tenderProd.setTender(purchaseTender);
+            for (SaleTenderItem tenderItem : tenderProd.getSaleTenderItems()) {
+                tenderItem.setTenderProd(tenderProd);
+                saleTenderItemDao.save(tenderItem);
+            }
         }
-        return purchaseTenderDao.save(purchaseTender);
     }
 
-    @Override
-    public PurchaseTender findById(Long id) {
-        return purchaseTenderDao.findOne(id);
-    }
 
-    @Override
-    public List<PurchaseTenderItem> getItemsByTenderId(Long id) {
-        System.out.println("enter impl getItemsByTenderId");
-        PurchaseTender tender = purchaseTenderDao.findOne(id);
-        List<PurchaseTenderItem> tenderItems = new ArrayList<>();
-        for (PurchaseTenderItem tenderItem : tender.getPurchaseTenderItems()) {
-            tenderItems.add(tenderItem);
-        }
-        System.out.println("getItemsByTenderId" + JSON.toJSONString(tenderItems));
-        return tenderItems;
-    }
+//    @Override
+//    public List<SaleTender> getItemsByTenderId(Long id) {
+//        System.out.println("enter impl getItemsByTenderId");
+//        PurchaseTender tender = purchaseTenderDao.findOne(id);
+//        List<SaleTender> tenderItems = new ArrayList<>();
+//        for (SaleTender tenderItem : tender.getPurchaseTenderItems()) {
+//            tenderItems.add(tenderItem);
+//        }
+//        System.out.println("getItemsByTenderId" + JSON.toJSONString(tenderItems));
+//        return tenderItems;
+//    }
 
 
 }

BIN
src/main/webapp/resources/img/comm_bg01.png


BIN
src/main/webapp/resources/img/tender/upload.png


+ 215 - 119
src/main/webapp/resources/js/index/app.js

@@ -133,9 +133,13 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
             controller : 'PurcTenderCtrl'
             /* 招标 */
         }).state('purc.tender', {
-            url : "/tender/:id",
+            url : "/addTender",
             templateUrl : "static/tpl/index/purc/tender.html",
             controller : 'PurcNewTenderCtrl'
+        }).state('purc.savedtender', {
+            url : "/tender/:id",
+            templateUrl : "static/tpl/index/purc/saved_tender.html",
+            controller : 'PurcNewTenderCtrl'
             /* 评标 */
         }).state('purc.evaluation', {
             url : "/evaluation/:id",
@@ -190,7 +194,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
             /* 采购方查看供应商投标 */
         }).state('sale.vendortender', {
             url : "/tender/:vendUU/:id",
-            templateUrl : "static/tpl/index/sale/tender_vendor.html",
+            templateUrl : "static/tpl/index/sale/vendor_tender.html",
             controller : 'SaleVendorTenderDetailCtrl'
         }).state('sale.todo', {
             url : "/todo",
@@ -1310,11 +1314,11 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 		$scope.dateTime = new Date();
 	}]);
     app.controller('TenderCtrl', ['$scope', 'SnapshotService', function($scope, SnapshotService){
-        SnapshotService.getTender(5, function(data){	//5表示首页显示的招标单条数
+        SnapshotService.getTender(250, function(data){
             $scope.tenders = data;
         });
 
-        SnapshotService.getOpenTender(5, function(data){	//5表示首页显示的招标单条数
+        SnapshotService.getOpenTender(250, function(data){
             $scope.openTenders = data;
         });
 
@@ -9677,62 +9681,83 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
     app.controller('PurcNewTenderCtrl', ['$scope', '$filter', 'PurcTender', 'ngTableParams', 'toaster', 'BaseService', '$stateParams', '$modal', '$rootScope', '$upload', function($scope, $filter, PurcTender, ngTableParams, toaster, BaseService, $stateParams, $modal, $rootScope, $upload) {
 
 
-        // if( ! angular.isUndefined($stateParams.id) && $stateParams.id != "") {
-        //     $scope.loading  = true;
-        //     PurcTender.getOne({id: $stateParams.id}, function(data){
-        //         data.$editing = false;
-        //         $scope.tenderItem.tender = data;
-        //         staticItem = angular.copy(data);
-        //         $scope.loading  = false;
-        //     }, function(response){
-        //         $scope.loading  = false;
-        //         toaster.pop('error', '数据加载失败', response.data);
-        //     });
-        // } else {//
         $scope.loading = false;
 
         $scope.condition = {dateZone: 1};
-        $scope.tenderItem = {
-            $editing: true,
-            tender: {
-                date: new Date(),
-                unit: 'PCS',
-                currency: 'RMB',
-                ifOpen: 1,
-                ifTax: 1,
-                invoiceType: 2,
-                tenderAttachs:[{}]
-            }
+        $scope.tenderProd = [];
+        var prod = {
+            prodTitle: null,
+            prodCode: null,
+            brand: null,
+            unit: null,
+            qty: null
             // 供应商企业信息
             // enterpriseBaseInfo: [{}]
         };
 
-        // 删除一个供应商
-        $scope.removeVendor = function(index) {
-            $scope.tenderItem.enterpriseBaseInfo.splice(index, 1);
+        $scope.tender = {
+            date: new Date(),
+            unit: 'PCS',
+            currency: 'RMB',
+            ifOpen: 0,
+            ifTax: 1,
+            invoiceType: 2,
+            tenderAttachs:[{}]
+        };
+        //
+        $scope.tenderProd.push(prod);
+        //增加商品
+        $scope.add = function(index) {
+            $scope.tenderProd.push({
+                prodTitle: null,
+                prodCode: null,
+                brand: null,
+                unit: null,
+                qty: null
+                // 供应商企业信息
+                // enterpriseBaseInfo: [{}]
+            });
+        };
+        //删除商品
+        $scope.del = function(index) {
+            $scope.tenderProd.splice(index, 1);
         };
 
+        // 已存在id的为查看招标单(用于在录入的招标单的发布和删除)
+        if( ! angular.isUndefined($stateParams.id)) {
+            $scope.loading  = true;
+            PurcTender.getOne({id: $stateParams.id}, function(data){
+                data.$editing = false;
+                $scope.tender = data;
+                console.log($scope.tender);
+                $scope.loading  = false;
+            }, function(response){
+                $scope.loading  = false;
+                toaster.pop('error', '数据加载失败', response.data);
+            });
+        }
+
         // 可选的证照要求
         $scope.certificates = [{name:'三/五证合一'}, {name:'营业执照'}, {name:'组织机构代码证'}, {name:'一般纳税人证明材料'},{name:'统计登记证'},{name:'社会保险登记证'}];
 
         // 处理区域
-        var parseCertificate = function(a) {
-            if (a) {
-                var arr = a.split(',');
-                angular.forEach(arr, function(app) {
-                    var contained = false;
-                    angular.forEach($scope.certificates, function($app) {
-                        if($app.name == app) {
-                            $app.checked = true;
-                            contained = true;
-                        }
-                    });
-                    if(!contained) {
-                        $scope.certificates.push({name: app, checked: true});
-                    }
-                });
-            }
-        }
+        // var parseCertificate = function(a) {
+        //     if (a) {
+        //         var arr = a.split(',');
+        //         angular.forEach(arr, function(app) {
+        //             var contained = false;
+        //             angular.forEach($scope.certificates, function($app) {
+        //                 if($app.name == app) {
+        //                     $app.checked = true;
+        //                     contained = true;
+        //                 }
+        //             });
+        //             if(!contained) {
+        //                 $scope.certificates.push({name: app, checked: true});
+        //             }
+        //         });
+        //     }
+        // };
 
         // 查找客户
         $scope.dbfindVendor = function(){
@@ -9748,28 +9773,33 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
             var ifPush = true;
             modalInstance.result.then(function(data){
                 angular.forEach(data, function(vendor) {
-                    if (!$scope.tenderItem.enterpriseBaseInfo) {// 不存在就先创建
-                        $scope.tenderItem.enterpriseBaseInfo = [{}];
-                        $scope.tenderItem.enterpriseBaseInfo.splice(0, 1, vendor.vendorEnterprise);
+                    if (!$scope.tenderProd.enterpriseBaseInfo) {// 不存在就先创建
+                        $scope.tenderProd.enterpriseBaseInfo = [{}];
+                        $scope.tenderProd.enterpriseBaseInfo.splice(0, 1, vendor.vendorEnterprise);
                     } else {
-                        for (var i = 0;i<$scope.tenderItem.enterpriseBaseInfo.length; i++) {
+                        for (var i = 0;i<$scope.tenderProd.enterpriseBaseInfo.length; i++) {
                             ifPush = true;
-                            if ($scope.tenderItem.enterpriseBaseInfo[i].enName == vendor.vendorEnterprise.enName) {
+                            if ($scope.tenderProd.enterpriseBaseInfo[i].enName == vendor.vendorEnterprise.enName) {
                                 ifPush = false;
                                 break; // 判定到已存在供应商,就终止循环。
                             }
                         }
                         if (ifPush) {
-                            $scope.tenderItem.enterpriseBaseInfo.push(vendor.vendorEnterprise);
+                            $scope.tenderProd.enterpriseBaseInfo.push(vendor.vendorEnterprise);
                         }
                     }
                 });
-                $rootScope.tenderVendor = $scope.tenderItem.enterpriseBaseInfo;
+                $rootScope.tenderVendor = $scope.tenderProd.enterpriseBaseInfo;
             }, function(){
 
             });
         };
 
+        // 删除一个供应商
+        $scope.removeVendor = function(index) {
+            $scope.tenderProd.enterpriseBaseInfo.splice(index, 1);
+        };
+
         // // 查找客户物料
         // $scope.dbfindCustProd = function(){
         //     if($scope.item.$editing) {
@@ -9794,9 +9824,33 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
         //     }
         // };
 
+        $scope.attaches = []; // 存放上传了的附件
+
+        $scope.upload = function(myFile) {  // 上传附件
+            var file = $scope.myFile, file = file && file.length > 0 ? file : null;
+            $upload.upload({
+                url: 'tender/addTenderAttach',
+                file: file,
+                method: 'POST'
+                // data: {
+                //     tender: $scope.tender
+                // }
+            }).success(function (attach) {
+                $scope.attaches.push(attach);
+                console.log($scope.attaches);
+            });
+        };
+
+        $scope.removeAttach = function(id, index) {
+            $scope.attaches.splice(index, 1);
+            PurcTender.removeAttach({attachId:id}, function() {
+
+            });
+        };
+
         var sleep = function (d){
             for(var t = Date.now();Date.now() - t <= d;);
-        }
+        };
 
         // 保存和发布招标单
         $scope.save = function(isPublish){
@@ -9808,35 +9862,27 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
                     myCertificate.push(certificate.name);
                 }
             });
-            $scope.tenderItem.tender.certificate = myCertificate.join(',');
+            $scope.tender.certificate = myCertificate.join(',');
 
-            if(!$scope.tenderItem.tender.code) { //新增,设单号
-                $scope.tenderItem.tender.code = 'ZB' + $filter('date')(new Date(), 'yyMMddHHmmss_sss');
+            if(!$scope.tender.code) { //新增,设单号
+                $scope.tender.code = 'ZB' + $filter('date')(new Date(), 'yyMMddHHmmss');
             }
-            if($scope.tenderItem.tender.date instanceof Date) {
-                $scope.tenderItem.tender.date = $scope.tenderItem.tender.date.getTime();
+            if($scope.tender.date instanceof Date) {
+                $scope.tender.date = $scope.tender.date.getTime();
             }
-            if($scope.tenderItem.tender.endDate instanceof Date) {
-                $scope.tenderItem.tender.endDate = $scope.tenderItem.tender.endDate.getTime();
+            if($scope.tender.endDate instanceof Date) {
+                $scope.tender.endDate = $scope.tender.endDate.getTime();
             }
-            if($scope.tenderItem.tender.publishDate instanceof Date) {
-                $scope.tenderItem.tender.publishDate = $scope.tenderItem.tender.publishDate.getTime();
+            if($scope.tender.publishDate instanceof Date) {
+                $scope.tender.publishDate = $scope.tender.publishDate.getTime();
             }
+
+            $scope.tender.purchaseTenderProds = $scope.tenderProd;
+
+            $scope.tender.tenderAttaches = $scope.attaches;
             if (isPublish) { // 发布
                 toaster.pop('info', '提示', '正在发布,请稍候');
-                PurcTender.publish({tender: $scope.tenderItem.tender, enterpriseBaseInfo: $scope.tenderItem.enterpriseBaseInfo}, {},  function(tender,enterprise){
-                    // angular.forEach(tender.tenderAttaches, function(tenderAttach) {
-                    var file = $scope.MyFiles, file = file && file.length>0 ? file[0]: null;
-                    $upload.upload({
-                            url: 'tender/addTenderAttach',
-                            file: file,
-                            method: 'POST',
-                            data: {
-                                tender: $scope.tenderItem.tender
-                            }
-                        // });
-                    });
-                    parseCertificate(tender.certificate);
+                PurcTender.publish({tender: $scope.tender, enterpriseBaseInfo: $scope.tenderProd.enterpriseBaseInfo}, {},  function(data){
                     sleep(1500); //当前方法暂停1.5秒
                     $scope.loading = false;
                     toaster.pop('success', '成功', '发布成功');
@@ -9847,16 +9893,7 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
                 });
             } else { // 保存
                 toaster.pop('info', '提示', '正在保存,请稍候');
-                PurcTender.save({tender: $scope.tenderItem.tender, enterpriseBaseInfo: $scope.tenderItem.enterpriseBaseInfo}, {},  function(tender,enterprise) {
-                    var file = $scope.MyFiles, file = file && file.length>0 ? file[0]: null;
-                    $upload.upload({
-                        url: 'tender/addTenderAttach',
-                        file: file,
-                        method: 'POST',
-                        data: {
-                            tender: $scope.tenderItem.tender
-                        }
-                    });
+                PurcTender.save({tender: $scope.tender, enterpriseBaseInfo: $scope.tenderProd.enterpriseBaseInfo}, {},  function(data) {
                     $scope.loading = false;
                     sleep(1500); //当前方法暂停1.5秒  给更新索引留点时间
                     toaster.pop('success', '成功', '保存成功');
@@ -9868,13 +9905,37 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
             }
         };
 
+        // 删除(在录入状态)
+        $scope.delete = function(tender) {
+            PurcTender.deleteOne({}, tender, function() {
+                toaster.pop('info', '提示', '删除成功');
+                window.location.hash = '#/purc/tender';
+            });
+        };
 
+        // 发布(在录入状态)
+        $scope.publishSaved = function(tender) {
+            var now = new Date().getTime();
+            if (tender.endDate.getTime() < now) {
+                toaster.pop('warning', '警告', '单据已过期,请重新设置日期');
+            } else {
+                toaster.pop('info', '提示', '正在发布,请稍候');
+                PurcTender.publishSaved({}, tender, function() {
+                    sleep(1500); //当前方法暂停1.5秒  给更新索引留点时间
+                    toaster.pop('success', '提示', '发布成功');
+                    window.location.hash = '#/purc/tender';
+                });
+            }
+        };
+
+        $scope.currentDay = function() {
+            return $filter('date')(new Date(), 'yyyy-MM-dd');
+        };
 
         $scope.getMinDate = function() {
-            if (!$scope.tenderItem.tender) {
-                return $filter('date')(new Date(), 'yyyy-MM-dd');
-            }
-            return $scope.tenderItem.tender.endDate ? $filter('date')($scope.tenderItem.tender.endDate, 'yyyy-MM-dd'):$filter('date')(new Date(), 'yyyy-MM-dd');
+            var now = new Date();
+            now = now.setDate(now.getDate()+1);
+            return $scope.tender.endDate ? $filter('date')(now, 'yyyy-MM-dd'):$filter('date')(new Date(), 'yyyy-MM-dd');s
         };
 
         $scope.openDatePicker = function($event, item, openParam) {
@@ -10117,52 +10178,87 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
         });
 
     }]);
+
     /**
      * 投标
      */
-    app.controller('SaleTenderDetailCtrl', ['$scope', '$filter', 'PurcTender', 'ngTableParams', 'toaster', 'BaseService', '$stateParams', '$modal', '$rootScope', '$upload', function($scope, $filter, PurcTender, ngTableParams, toaster, BaseService, $stateParams, $modal, $rootScope, $upload) {
+    app.controller('SaleTenderDetailCtrl', ['$scope', '$filter', 'PurcTender', 'ngTableParams', 'toaster', 'BaseService', '$stateParams', '$modal', '$rootScope', '$upload', 'AccountEnterprise', function($scope, $filter, PurcTender, ngTableParams, toaster, BaseService, $stateParams, $modal, $rootScope, $upload, AccountEnterprise) {
 
-        var staticItem = null;
+        $scope.itemStatusTodo = true;
+        // var staticItem = null;
         // $scope.loading  = true;
 
-        PurcTender.getItem({id: $stateParams.id}, function(data){
-            $scope.item = data; // 用于投标
-            if ($scope.item.enterpriseBaseInfo != null) {
-                $scope.itemStatusTodo = $scope.item.enterpriseBaseInfo.uu + "待投标";
-            }
-            staticItem = angular.copy(data);
-            $scope.loading  = false;
-        }, function(response){
-            $scope.loading  = false;
-            toaster.pop('error', '数据加载失败', response.data);
-        });
+        // PurcTender.getItem({id: $stateParams.id}, function(data){
+        //     $scope.item = data; // 用于投标
+        //     if ($scope.item.enterpriseBaseInfo != null) {
+        //         $scope.itemStatusTodo = $scope.item.enterpriseBaseInfo.uu + "待投标";
+        //     }
+        //     staticItem = angular.copy(data);
+        //     $scope.loading  = false;
+        // }, function(response){
+        //     $scope.loading  = false;
+        //     toaster.pop('error', '数据加载失败', response.data);
+        // });
 
         var sleep = function (d){
             for(var t = Date.now();Date.now() - t <= d;);
         }
 
+        AccountEnterprise.get({}, function(data){
+            $scope.currentEn = data;
+            console.log(data);
+        });
+
         PurcTender.getOne({id: $stateParams.id}, function(data){
-            $scope.bid = data; // 用于展示
+            $scope.bid = data;
+            angular.forEach(data.purchaseTenderProds, function(tenderProd) {
+                angular.forEach(tenderProd.saleTenderItems, function(saleTenderItem) {
+                    if (saleTenderItem.saleTender.vendUU == $scope.currentEn.uu) {
+                        tenderProd.currentItem = saleTenderItem;
+                        $scope.saleTender = saleTenderItem.saleTender;
+                        $scope.currentEnBaseInfo = saleTenderItem.saleTender.enterpriseBaseInfo;
+                        if (tenderProd.currentItem.price != null) { // 为投标时
+                            $scope.itemStatusTodo = false;
+                        }
+                    }
+                });
+            });
         }, function(response){
             toaster.pop('error', '数据加载失败', response.data);
         });
 
+        $scope.attaches = []; // 存放上传了的附件
+
+        $scope.upload = function(myFile) {  // 上传附件
+            var file = $scope.myFile, file = file && file.length > 0 ? file : null;
+            $upload.upload({
+                url: 'tender/addTenderItemAttach',
+                file: file,
+                method: 'POST'
+            }).success(function (attach) {
+                $scope.attaches.push(attach);
+            });
+        };
+
+        $scope.removeAttach = function(id, index) {
+            $scope.attaches.splice(index, 1);
+            PurcTender.removeAttach({attachId:id}, function() {
+
+            });
+        };
+
         // 投标
-        $scope.bidIt = function(tender,item){
+        $scope.bidIt = function(tender, currentEnBaseInfo){
             $scope.loading = true;
-            if(item.enterpriseBaseInfo.enEstablishDate instanceof Date) {
-                item.enterpriseBaseInfo.enEstablishDate = item.enterpriseBaseInfo.enEstablishDate.getTime();
+            if(currentEnBaseInfo.enEstablishDate instanceof Date) {
+                currentEnBaseInfo.enEstablishDate = currentEnBaseInfo.enEstablishDate.getTime();
             }
-            PurcTender.reply({bid:tender, tenderItem:item}, {}, function(tender, tenderItem){
-                var file = $scope.MyFiles, file = file && file.length>0 ? file[0]: null;
-                $upload.upload({
-                    url: 'tender/addTenderItemAttach',
-                    file: file,
-                    method: 'POST',
-                    data: {
-                        tenderItem: $scope.item
-                    }
-                });
+            var saleTenderItems = [];
+            angular.forEach(tender.purchaseTenderProds, function(tenderProd) {
+                saleTenderItems.push(tenderProd.currentItem);
+            });
+
+            PurcTender.reply({tenderItems: saleTenderItems, enBaseInfo: currentEnBaseInfo, attaches:$scope.attaches}, {}, function(data){
                 $scope.loading = false;
                 toaster.pop('info', '成功', '投标成功');
                 // $window.location.reload();
@@ -10176,7 +10272,7 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
 
         $scope.condition = {
             $fromOpened:false
-        }
+        };
 
         $scope.getMaxDate = function() {
             return $filter('date')(new Date(), 'yyyy-MM-dd');

+ 41 - 15
src/main/webapp/resources/js/index/services/Purc.js

@@ -192,6 +192,11 @@ define([ 'ngResource'], function() {
             },
             getAll: {
             },
+            getDone: {
+                params: {
+                    _state: 'done'
+                }
+            },
             getTodo: {
                 params: {
                     _state: 'todo'
@@ -205,6 +210,12 @@ define([ 'ngResource'], function() {
             getOpenAll: {
             	url: 'tender/open'
             },
+            getOpenDone: {
+                url: 'tender/open',
+                params: {
+                    _state: 'done'
+                }
+            },
             getOpenTodo: {
                 url: 'tender/open',
                 params: {
@@ -224,13 +235,13 @@ define([ 'ngResource'], function() {
     				id: 'id'
 				}
 			},
-            getItem: {
-                url: 'tender/item/:id',
-                method: 'GET',
-                params: {
-                    id: 'id'
-                }
-            },
+            // getItem: {
+            //     url: 'tender/item/:id',
+            //     method: 'GET',
+            //     params: {
+            //         id: 'id'
+            //     }
+            // },
             getVendorTenderItem: {
                 url: 'tender/vendorTenderDetail/:vendUU/:id',
                 method: 'GET',
@@ -239,14 +250,14 @@ define([ 'ngResource'], function() {
                     id: 'id'
                 }
             },
-            getItems: {
-                url: 'tender/items/:id',
-                method: 'GET',
-                params: {
-                    id: 'id'
-                },
-                isArray: true
-            },
+            // getItems: {
+            //     url: 'tender/items/:id',
+            //     method: 'GET',
+            //     params: {
+            //         id: 'id'
+            //     },
+            //     isArray: true
+            // },
 			save: {
                 url: 'tender/save',
                 method: 'POST'
@@ -262,6 +273,21 @@ define([ 'ngResource'], function() {
             decide: {
                 url: 'tender/decide',
                 method: 'POST'
+            },
+            deleteOne: {
+                url: 'tender/delete',
+                method: 'POST'
+            },
+            publishSaved: {
+                url: 'tender/publishSaved',
+                method: 'POST'
+            },
+            removeAttach: {
+                url: 'tender/removeAttach',
+                method: 'POST',
+                params: {
+                    attachId: 'attachId'
+                }
             }
 		});
 	}]).factory('PurcInquiryMould', ['$resource', function($resource) {

+ 4 - 28
src/main/webapp/resources/tpl/index/home/left.html

@@ -47,7 +47,7 @@
 </div>
 <!-- 用户信息 End -->
 <!-- 常用操作 Start -->
-<div class="feed-wrap">
+<!--<div class="feed-wrap">
 	<div class="pane notice" ng-controller="NoticeCtrl">
 		<div class="pane-header">
 			<img src="resources/img/home/gonggao.png"> 公告(3)<span class="pull-right f12">{{dateTime | date:
@@ -62,7 +62,7 @@
 			</ul>
 		</div>
 	</div>
-<!-- 	<div class="pane service" ng-controller="TenderCtrl">
+ 	<div class="pane service" ng-controller="TenderCtrl">
 		<div class="pane-header">
 			<img src="resources/img/home/target.png"> 认证供应商招标<a href="serve" class="pull-right text-muted"></a>
 		</div>
@@ -87,30 +87,6 @@
 		</div>
 	</div>
 	</div>
-</div> -->
-<!-- 常用操作 End -->
-<!--
-<div class="pane service" ng-controller="TenderCtrl">
-	<div class="pane-header">
-		<i class="fa fa-legal"></i> 客户指定招标:
-	</div>
-	<div class="pane-body">
-		<ul class="list-unstyled detail">
-			<li ng-repeat="tender in tenders">
-				<a ui-sref="sale.tender({id:tender.id})" class="text-light" ng-bind="::tender.title"></a>
-			</li>
-		</ul>
-	</div>
-</div>
-<div class="pane service" ng-controller="TenderCtrl">
-	<div class="pane-header">
-		<i class="fa fa-legal"></i> 平台公开招标:
-	</div>
-	<div class="pane-body">
-		<ul class="list-unstyled detail">
-			<li ng-repeat="tender in openTenders">
-				<a ui-sref="sale.tender({id:tender.id})" class="text-light" ng-bind="::tender.title"></a>
-			</li>
-		</ul>
-	</div>
 </div>-->
+<!-- 常用操作 End -->
+

+ 1 - 1
src/main/webapp/resources/tpl/index/home/right.html

@@ -95,7 +95,7 @@
 						<a class="col-xs-4" style="color: #327ebe" href="#/baseInfo/myRquest"><i class="fa fa-plus"></i> 添加供应商</a>
 						<a class="col-xs-4" style="color: #327ebe" href="#/purc/addOrder"><i class="fa fa-plus"></i> 新增采购单</a>
 						<a class="col-xs-4" style="color: #327ebe" href="#/purc/deputy/add"><i class="fa fa-plus"></i> 新增代采订单</a>
-						<a class="col-xs-4" style="color: #327ebe" href=""><i class="fa fa-plus"></i> 发布招标</a>
+						<a class="col-xs-4" style="color: #327ebe" href="#/purc/addTender"><i class="fa fa-plus"></i> 发布招标</a>
 					</div>
 				</div>
 			</div>

+ 219 - 0
src/main/webapp/resources/tpl/index/purc/saved_tender.html

@@ -0,0 +1,219 @@
+<!--  招标单  -->
+<style>
+
+    /* 标题 */
+    .tender-label {
+        height: 30px;
+        margin-left: 10px;
+        margin-right: 10px;
+        background-color: #e8e8e8;
+        box-shadow: 0 0 5px #6f6f6f;
+        border-top-right-radius: 20px;
+    }
+
+    /* 主体 */
+    .purc-tender {
+        line-height: 2;
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+    }
+
+    .purc-tender .row {
+        margin-left: 0px;
+        margin-right: 0px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+
+    .tender-content {
+        background-color: #fff;
+    }
+
+    .tender-content > div > div {
+        margin-top: 3px;
+        margin-bottom: 3px;
+    }
+
+    /* 二级标题栏 */
+    .title-div {
+        font-family: "Microsoft Yahei Regular";
+        font-size: 14px;
+        font-weight: 600;
+        padding-left: 30px;
+        height: 50px;
+        padding-top: 11px;
+    }
+
+    /* 输入框前描述 */
+    .tender-desc {
+        width: 100px;
+        float: left;
+    }
+
+    /* 收货地址 */
+    .address-group {
+        border-bottom: 1px solid #323232;
+        border-bottom-left-radius: 0;
+        margin-right: 20px;
+    }
+
+    .address-group > input:focus {
+        outline: none;
+    }
+
+    /* 基本信息 */
+    .base-info {
+        border-bottom: 1px solid #e8e8e8;
+        padding-bottom: 30px;
+        padding-top: 20px;
+        margin-bottom: 0; /* 去除index中公共样式影响 */
+    }
+
+    /* 右下角按钮 */
+    .tender-content > div {
+        background-color: #fff;
+    }
+
+    .tender-content > div > div > button {
+        width: 94px;
+        height: 36px;
+        font-size: 14px;
+        font-family: "Microsoft Yahei Regular";
+        color: #fff;
+        border-radius: 0;
+    }
+
+    .tender-content > div > div.btn-publish > button {
+        background-color: #327EBE;
+    }
+
+    .read-only {
+        border: none;
+        color: #969595;
+    }
+
+    .read-only:focus {
+        border: none;
+    }
+
+</style>
+
+<div class="ng-scope">
+    <div class="purc-tender">
+        <div class="tender-label list-unstyled">
+            <strong style="padding: 0 10px 0 10px;">|</strong><label>招标单</label>
+        </div>
+        <div class="tender-content ng-scope" ng-controller="PurcNewTenderCtrl">
+            <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                <span>基本信息</span>&nbsp;
+                <span style="color: rgb(211,37,38);">*</span>
+            </div>
+            <div class="row base-info">
+                <div class="col-xs-4">
+                    <div class="tender-desc">招标标题:</div>
+                    <div>{{tenderItem.tender.title}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">联系人:</div>
+                    <div>{{tenderItem.tender.user}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">联系电话:</div>
+                    <div>{{tenderItem.tender.userTel}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">产品名称:</div>
+                    <div>{{tenderItem.tender.prodTitle}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">产品型号:</div>
+                    <div>{{tenderItem.tender.prodCode}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">单位:</div>
+                    <div>{{tenderItem.tender.unit}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">采购数量:</div>
+                    <div>{{tenderItem.tender.qty}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">交易币别:</div>
+                    <div>{{tenderItem.tender.currency}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <div class="tender-desc">是否含税:</div>
+                    <div>{{tenderItem.tender.ifTax == 1 ? '是' : '否'}}</div>
+                </div>
+                <div class="col-xs-12">
+                    <div class="tender-desc">收货地址:</div>
+                    <div>{{tenderItem.tender.shipAddress}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <span class="tender-desc">投标截止时间:</span>
+                    <div>{{tenderItem.tender.endDate | date:'yyyy-MM-dd'}}</div>
+                </div>
+                <div class="col-xs-4">
+                    <span class="tender-desc">发布结果时间:</span>
+                    <div>{{tenderItem.tender.publishDate | date:'yyyy-MM-dd'}}</div>
+                </div>
+                <div class="col-xs-12">
+                    <div class="tender-desc">招标文件:</div>
+                    <a class="file" ng-repeat="attach in tenderItem.tender.tenderAttaches"
+                       href="file/{{attach.id}}">{{::attach.name}}</a>
+                </div>
+            </div>
+            <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                <span>供应商信息</span>
+            </div>
+            <div class="row vend-info">
+                <div class="col-xs-12">
+                    <div class="tender-desc">是否开放报名:</div>
+                    <div>{{tenderItem.tender.ifOpen == 1 ? '允许优软平台的供应商参与' : '只允许我邀请的供应商参与'}}</div>
+                </div>
+                <div class="col-xs-12" style="" ng-repeat="item in tenderItem.tender.saleTenders">
+                    <div class="col-xs-2 control-label" style="width: 100px;">供应商{{$index + 1}}</div>
+                    <div for="uu{{$index + 1}}" class="col-xs-1" style="width: 20px;">UU</div>
+                    <div class="col-xs-2">
+                        <div>{{item.enterpriseBaseInfo.uu}}</div>
+                    </div>
+                    <div for="enName{{$index + 1}}" class="col-xs-1"
+                         style="width: 60px; margin-left: 20px; margin-right: -20px;">名称
+                    </div>
+                    <div class="col-xs-3">
+                        <div>{{item.enterpriseBaseInfo.enName}}</div>
+                    </div>
+                </div>
+                <div class="col-xs-12" style="border-bottom: 1px dashed #327ebe;">
+                    <div class="tender-desc">供应商报名要求</div>
+                </div>
+                <div class="col-xs-12">
+                    <div class="tender-desc">交易方式:</div>
+                    <div>{{tenderItem.tender.payment}}</div>
+                </div>
+                <div class="col-xs-2"></div>
+                <div class="col-xs-12">
+                    <div class="tender-desc">发票要求:</div>
+                    <div ng-if="tenderItem.tender.invoiceType == 3">增值税专用发票</div>
+                    <div ng-if="tenderItem.tender.invoiceType == 2">增值税普通发票</div>
+                    <div ng-if="tenderItem.tender.invoiceType == 1">不需要发票</div>
+                </div>
+                <div class="col-xs-12">
+                    <div class="tender-desc">证照要求:
+                    </div>
+                    <div>
+                        {{tenderItem.tender.certificate}}
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12" style="padding: 30px;">
+                <div class="col-xs-2 pull-right btn-publish">
+                    <button class="btn" ng-click="publishSaved(tenderItem.tender)">发布</button>
+                </div>
+                <div class="col-xs-2 pull-right btn-delete">
+                    <button class="btn btn-danger" ng-click="delete(tenderItem.tender)">删除</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 117 - 12
src/main/webapp/resources/tpl/index/purc/tender_evaluation.html

@@ -71,7 +71,6 @@
 
     /* 基本信息 */
     .base-info {
-        border-bottom: 1px solid #969595;
         padding-bottom: 30px;
         padding-top: 20px;
         margin-bottom: 0; /* 去除index中公共样式影响 */
@@ -145,6 +144,63 @@
     .tender-input:focus {
         outline: none;
     }
+
+
+    .com_head{width:100%;height:40px;line-height:42px;background:url(static/img/comm_bg01.png) no-repeat center;background-size: 100%;}
+    .com_head span{margin-left:30px;color:#000;font-size:14px;}
+    .com_head a{color:#327ebe;float:right;margin-right:40px;font-size: 14px;}
+    .com_head a i{margin-left: 5px;line-height: 40px;}
+    .com_head a:hover{color: #d2272d;}
+
+    .com_title{width:100%;margin:0px auto;height:40px;line-height:40px;font-size:14px;color:#323232;background:#f5f5f5;}
+    .com_title font{color:#327ebe;}
+
+
+    .com_title01{height: 50px;line-height:50px;width:100%;border-bottom:#3578ba 1px dotted;border-top:#e8e8e8 1px solid;margin-top: -4px;} /*  这里修改过 margin-top*/
+    .com_title01 span{margin-left:20px;font-size: 14px;line-height: 50px;color: #555;font-weight: bold;}
+
+    .comment-oder-list  a {
+        color: #5078cb;
+    }
+    .comment-oder-list  a:hover {
+        cursor: pointer;
+        color: #d2272d;
+    }
+
+    /*评标单*/
+    .tender-list02 .comment-oder{width: 100%;margin: 0 auto;}
+    .tender-list02 .comment-oder:hover{border: #d32526 1px solid;}
+    .tender-list02 .comment-oder-text{border-bottom: #5078cb 1px solid;}
+    .tender-list02 .comment-oder-text,.comment-oder-text ul{width: 100%;margin: 0 auto;padding: 5px 0;position: relative;}
+    .tender-list02 .comment-oder-text i{position: absolute;top: -1px;left: 35px;width: 20px;height: 20px;line-height: 15px;text-align: center;background: #595959;display: inline-block;font-weight: 700;font-size: 14px;color: #fff;border-radius: 0 0 50px 0;}
+    .tender-list02 .comment-oder-text ul li{width: 88%;margin: 0 auto;height: 30px;line-height: 30px;}
+    .tender-list02 .comment-oder-text ul li span{width: 33.3333%;float: left;}
+    .tender-list02 .comment-oder-text ul li span em,.comment-oder-text ul li span b{font-size: 14px;}
+    .tender-list02 .comment-oder-text ul li span em{width:110px;display: inline-block;}
+    .tender-list02 .comment-oder-text ul li span b{color: #959595;}
+    .tender-list02 .comment-oder-list,.comment-oder-list dl{width: 100%;margin:0 auto;}
+    .tender-list02 .comment-oder-list dl dt,.comment-oder-list dl dd{width: 100%;margin: 0 auto;border-bottom: #ccc 1px dashed;height: 50px;line-height: 50px;}
+    .tender-list02 .comment-oder-list dl dt span.wid01{ text-align: left; padding-left: 30px;}
+    .tender-list02 .comment-oder-list dl dd span.wid01{ text-align: left; padding-left: 30px;}
+    .tender-list02 .comment-oder-list dl span{font-size: 14px;width: 9.1%;float: left;color: #323232 !important; line-height: 50px; position: relative;overflow: hidden;}
+    .tender-list02 .comment-oder-list dl span.wid01{width: 30%;}
+    .tender-list02 .comment-oder-list dl span.wid02{width: 15%;}
+    .tender-list02 .comment-oder-list dl dd span a{ margin-left: 15px; font-size: 12px;}
+    .tender-list02 .comment-oder-list dl dd:hover{border-bottom: #ccc 1px dotted;border-top: none;border-left: none;border-right: none;}
+    .tender-list02 .change01{width: 16px;height: 14px;display: inline-block;float: right;line-height: 7px;position: absolute;top: 13px;}
+    .tender-list02 .change01 i{width:100%;display: inline-block;height: 7px;color: #000;}
+    .tender-list02 .change01:hover i{color: #5078cb;}
+    .tender-list02 .explain{width: 90%;height: 30px;border: none;text-align: center;}
+    .tender-list02 .save{margin-top: 30px;}
+    .tender-list02 .save a{width:94px;height: 36px;display: inline-block;background: #3578ba;text-align: center;color: #fff;font-size: 14px;float: right;line-height: 36px;margin-right: 40px;}
+    .tender-list02 .save a:hover{background: #1f4fb2;}
+    .tender-list02 .com_title01,.tender-list .com_title01{ margin-top: 0;}
+
+    i,em {
+        font-style: normal;
+    }
+
+
 </style>
 
 <div class="ng-scope">
@@ -153,9 +209,8 @@
             <!--<div class="col-xs-12" style="font-size: 14px; height: 36px; padding-top: 10px;">
                 <span style="font-family: 'Microsoft Yahei Regular'; font-weight: 600; color: rgb(0,0,0);">服务>招标></span><span style="color: #327EBE;">待投标</span>
             </div>-->
-            <div class="bid-label list-unstyled">
-                <strong style="padding: 0 10px 0 10px;">|</strong><label>评标单</label>
-            </div>
+            <div class="com_title">服务>招标<font>>待评标</font></div>
+            <div class="com_head"><span>评标单</span></div>
             <div class="bid-content ng-scope" ng-controller="PurcEvaluationCtrl">
                 <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
                     <span>基本信息</span>
@@ -219,7 +274,7 @@
                         <div class="unchanged-info">{{tender.certificate}}</div>
                     </div>
                 </div>
-                <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
+                <!--<div class="title-div" style="border-bottom: 1px dashed #327ebe;">
                     <span>供应商信息</span>
                 </div>
                 <form name="evaluationForm">
@@ -237,11 +292,11 @@
                         </tr>
                         </thead>
                         <tbody>
-                        <tr ng-if="tender.purchaseTenderItems == '' || tender.purchaseTenderItems == null"
+                        <tr ng-if="tender.saleTenders == '' || tender.saleTenders == null"
                             style="font-family: 'Microsoft Yahei Regular'; font-size: 14px; color: #969595;">
                             <td colspan="8">暂无企业参加招标</td>
                         </tr>
-                        <tr ng-repeat="item in tender.purchaseTenderItems track by item.id">
+                        <tr ng-repeat="item in tender.saleTenders track by item.id">
                             <td width="300">{{item.enterpriseBaseInfo.enName}}&nbsp;
                                 <a ui-sref="sale.vendortender({vendUU:item.enterpriseBaseInfo.uu, id:tender.id})"
                                    target="_self" title="查看投标单">查看投标单</a>
@@ -249,12 +304,12 @@
                             <td width="50">
                                 <div ng-show="tender.overdue != 1 && item.taxrate">**</div>
                                 <div ng-show="tender.overdue == 1 && item.taxrate">{{item.taxrate}}</div>
-                                <!--<input class="tender-input" type="number" name="taxrate" ng-model="item.taxrate" placeholder="点此输入税率"/>-->
+                                &lt;!&ndash;<input class="tender-input" type="number" name="taxrate" ng-model="item.taxrate" placeholder="点此输入税率"/>&ndash;&gt;
                             </td>
                             <td width="50">
                                 <div ng-show="tender.overdue != 1 && item.price">**</div>
                                 <div ng-show="tender.overdue == 1 && item.price">{{item.price}}</div>
-                                <!--<input class="tender-input" type="number" name="price" ng-model="item.price" placeholder="点此输入单价"/>-->
+                                &lt;!&ndash;<input class="tender-input" type="number" name="price" ng-model="item.price" placeholder="点此输入单价"/>&ndash;&gt;
                             </td>
                             <td width="70">
                                 <div ng-show="tender.overdue != 1 && item.taxrate && item.price">***</div>
@@ -281,14 +336,64 @@
                         </tr>
                         </tbody>
                     </table>
-                </form>
+                </form>-->
+                <div class="tender-list02">
+                    <!--投标信息-->
+                    <div class="com_title01"><span>投标信息</span></div>
+                    <div class="comment-oder" ng-repeat="tenderProd in tender.purchaseTenderProds">
+                        <div class="comment-oder-text">
+                            <ul>
+                                <li class="list-unstyled">
+                                    <span><em>产品名称:</em><b>{{tenderProd.prodTitle}}</b></span>
+                                    <span><em>产品型号:</em><b>{{tenderProd.prodCode}}</b></span>
+                                    <span><em>品牌:</em><b>{{tenderProd.brand}}</b></span>
+                                </li>
+                                <li class="list-unstyled">
+                                    <span><em>采购数量:</em><b>{{tenderProd.qty}}</b></span>
+                                    <span><em>单位:</em><b>{{tenderProd.unit}}</b></span>
+                                </li>
+                            </ul>
+                            <i>{{$index + 1}}</i>
+                        </div>
+                        <div class="comment-oder-list">
+                            <dl>
+                                <dt>
+                                    <span class="wid01">投标供应商</span>
+                                    <span>税率</span>
+                                    <span>单价<a href="#" class="change01"><i class="fa fa-angle-up"></i><i class="fa fa-angle-down"></i></a></span>
+                                    <span>含税金额</span>
+                                    <span>采购周期<a href="#" class="change01"><i class="fa fa-angle-up"></i><i class="fa fa-angle-down"></i></a></span>
+                                    <span class="wid02">说明</span>
+                                    <span>定标</span>
+                                    <span>不定标</span>
+                                </dt>
+                                <dd ng-if="tenderProd.saleTenderItems == '' || tenderProd.saleTenderItems == null">
+                                    <div style="font-family: 'Microsoft Yahei Regular'; font-size: 14px; color: #969595; text-align: center;">
+                                        暂无企业参加招标
+                                    </div>
+                                </dd>
+                                <dd ng-repeat="saleTenderItem in tenderProd.saleTenderItems">
+                                    <span class="wid01">{{saleTenderItem.saleTender.enterpriseBaseInfo.enName}}<a ui-sref="sale.vendortender({vendUU:item.enterpriseBaseInfo.uu, id:tender.id})" target="_self" title="查看投标单">查看投标单</a></span>
+                                    <span>{{saleTenderItem.taxrate || 0}}</span>
+                                    <span>{{saleTenderItem.price || 0}}</span>
+                                    <span>{{saleTenderItem.price * tenderProd.qty || 0}}</span>
+                                    <span>{{saleTenderItem.cycle || 0}}</span>
+                                    <span class="wid02"><input type="text" ng-model="saleTenderItem.description" class="explain" placeholder="请输入说明文字"/></span>
+                                    <span><input type="radio" ng-model="saleTenderItem.applyStatus" value="1"/></span>
+                                    <span><input type="radio" ng-model="saleTenderItem.applyStatus" value="0"/></span>
+                                </dd>
+                            </dl>
+                        </div>
+                    </div>
+                </div>
                 <div class="col-xs-12" style="padding: 30px 0;">
                     <div class="col-xs-2 pull-right btn-bid">
                         <button class="btn"
-                                ng-disabled="evaluationForm.$invalid || tender.overdue == 0"
-                                ng-hide="tender.result == 1 || tender.status == '已结标'"
+                                ng-disabled="bidForm.$invalid || tender.overdue == 0"
+                                ng-hide="tender.result == 1"
                                 ng-click="submit(tender)">确定
                         </button>
+                        <!--<div><i class="fa fa-info-circle"></i><span style="font-family: 'Microsoft Yahei Regular'; font-size: 12px; color: #969595;">评标时间为投标截止时间之后,公布结果时间之前</span></div>-->
                     </div>
                 </div>
             </div>

+ 146 - 85
src/main/webapp/resources/tpl/index/sale/tender.html

@@ -79,22 +79,44 @@
     }
 
     /* 附件上传 */
+    .purc-tender .base-info .attach-upload {
+        display: inline;
+    }
     .purc-tender .base-info .attach-upload input {
-        /*height: 100px;*/
-        /*width: 60%;*/
-        height: 50px;
-        margin: 6px 0 0px 100px;
+        height: 100px;
+        width: 100px;
+        margin: 6px 0 0 100px;
+        opacity: 0;
+        z-index: 1;
+        position: relative;
     }
     .purc-tender .base-info .attach-upload input:hover {
         cursor: pointer;
     }
-    .upload-bg {
-        width: 100px;
-        height: 100px;
+    .fileInputContainer{
+        height:100px;
         background-image: url('resources/img/tender/upload.png');
-        margin-top: 10px;
+        position:relative;
+        width: 100px;
         margin-left: 100px;
-        border: 1px solid #e8e8e8;
+        margin-top: 20px;
+    }
+    .fileInput{
+        height:100px;
+        font-size: 100px;
+        position:absolute;
+        margin-left: 100px;
+        margin-top: 20px;
+        right:0;
+        top:0;
+        opacity: 0;
+        filter:alpha(opacity=0);
+        cursor:pointer;
+    }
+
+    .attach-file {
+        margin-left: 130px;
+        width: 400px;
     }
 
     /* 右下角按钮 */
@@ -144,13 +166,55 @@
         border-radius: 0;
         border: none;
     }
+
+
+
+    .com_head{width:100%;height:40px;line-height:42px;background:url(static/img/comm_bg01.png) no-repeat center;background-size: 100%;}
+    .com_head span{margin-left:30px;color:#000;font-size:14px;}
+    .com_head a{color:#327ebe;float:right;margin-right:40px;font-size: 14px;}
+    .com_head a i{margin-left: 5px;line-height: 40px;}
+    .com_head a:hover{color: #d2272d;}
+
+    .com_title{width:100%;margin:0px auto;height:40px;line-height:40px;font-size:14px;color:#323232;background:#f5f5f5;}
+    .com_title font{color:#327ebe;}
+
+
+    .com_title01{height: 50px;line-height:50px;width:100%;border-bottom:#3578ba 1px dotted;border-top:#e8e8e8 1px solid;margin-top: -4px;} /*  这里修改过 margin-top*/
+    .com_title01 span{margin-left:20px;font-size: 14px;line-height: 50px;color: #555;font-weight: bold;}
+
+    .com_title01  a {
+        color: #5078cb;
+    }
+    .com_title01  a:hover {
+        cursor: pointer;
+        color: #55b6ff;
+    }
+
+    /*投标单*/
+    .tender-list,.tender-list02{width:100%;margin: 0 auto;background: #fff;}
+    .tender-list dl{width: 100%;margin:0 auto;}
+    .tender-list dl dt{width: 100%;margin:0 auto;height: 40px;}
+    .tender-list dl dt span{height: 40px;line-height: 48px;display: inline-block;color: #999;}
+    .tender-list dl dd{width: 100%;margin:0 auto;height: 100px;border-bottom: #ccc 1px dashed;overflow: hidden;}
+    .tender-list dl dd:hover{border: #d32526 1px solid;}
+    .tender-list dl dd span{height: 100px;line-height: 50px;display: inline-block;}
+    .tender-list dl span{width:10.6%;font-size: 14px;float: left;text-align: center;}
+    .tender-list dl span.wid01{width:25%;}
+    .tender-list dl span.wid01 p{font-size: 14px;line-height: 22px;text-align: left;margin: 0;}
+    .tender-list dl dd span.wid01{margin-top: 15px;}
+    .tender-list .com_title01 em,.tender-list02 .com_title01 em{margin-left: 5px;font-size: 16px;color: #f00;position: relative;top: 3px;}
+
+    /* 点击变输入框 */
+    .editAble{ width: 100%; height: 34px; border: none; font-size: 14px; text-align:center;line-height:34px;}
+
 </style>
 
 <div class="ng-scope">
     <form name="bidForm">
         <div class="purc-bid">
-            <div class="bid-label list-unstyled">
-                <strong style="padding: 0 10px 0 10px;">|</strong><label>投标单</label>
+            <div class="list-unstyled">
+                <div class="com_title">服务>招标<font>>投标中</font></div>
+                <div class="com_head"><span>投标单</span></div>
             </div>
             <div class="bid-content ng-scope" ng-controller="SaleTenderDetailCtrl">
                 <div class="title-div" style="border-bottom: 1px dashed #327ebe;">
@@ -177,6 +241,18 @@
                         <div class="bid-desc">联系电话:</div>
                         <div class="unchanged-info">{{bid.userTel}}</div>
                     </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">投标截止时间:</div>
+                        <div class="unchanged-info">{{bid.endDate | date:'yyyy-MM-dd'}}</div>
+                    </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">公布结果时间:</div>
+                        <div class="unchanged-info">{{bid.publishDate | date:'yyyy-MM-dd'}}</div>
+                    </div>
+                    <div class = "col-xs-8">
+                        <div class="bid-desc">交货地址:</div>
+                        <div class="unchanged-info">{{bid.shipAddress}}</div>
+                    </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">交易币别:</div>
                         <div class="unchanged-info">{{bid.currency}}</div>
@@ -185,6 +261,10 @@
                         <div class="bid-desc">是否含税:</div>
                         <div class="unchanged-info" ng-bind="bid.ifTax == 1 ? '是': '否'"></div>
                     </div>
+                    <div class = "col-xs-4">
+                        <div class="bid-desc">付款方式:</div>
+                        <div class="unchanged-info">{{bid.payment}}</div>
+                    </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">是否开放报名:</div>
                         <div class="unchanged-info" ng-bind="bid.ifOpen == 1 ? '是': '否'"></div>
@@ -195,22 +275,6 @@
                         <div class="unchanged-info" ng-if="bid.invoiceType == 1">增值税普通发票</div>
                         <div class="unchanged-info" ng-if="bid.invoiceType == 0">不需要发票</div>
                     </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">交易方式:</div>
-                        <div class="unchanged-info">{{bid.payment}}</div>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">投标截止时间:</div>
-                        <div class="unchanged-info">{{bid.endDate | date:'yyyy-MM-dd'}}</div>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">公布结果时间:</div>
-                        <div class="unchanged-info">{{bid.publishDate | date:'yyyy-MM-dd'}}</div>
-                    </div>
-                    <div class = "col-xs-12">
-                        <div class="bid-desc">交货地址:</div>
-                        <div class="unchanged-info">{{bid.shipAddress}}</div>
-                    </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">证照要求:</div>
                         <div class="unchanged-info">{{bid.certificate}}</div>
@@ -219,52 +283,49 @@
                         招标附件:<a class="file" ng-repeat="attach in bid.tenderAttaches" href="file/{{attach.id}}">{{::attach.name}}</a>
                     </div>
                 </div>
-                <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
-                    <span>产品信息</span>
-                    <span style="color: rgb(211,37,38);">*</span>
-                </div>
-                <div class="row prod-info">
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">产品名称:</div>
-                        <div class="unchanged-info">{{bid.prodTitle}}</div>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">产品型号:</div>
-                        <div class="unchanged-info">{{bid.prodCode}}</div>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">单位:</div>
-                        <div class="unchanged-info">{{bid.unit}}</div>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">采购数量:</div>
-                        <div class="unchanged-info">{{bid.qty}}</div>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">币别:</div>
-                        <div class="unchanged-info">{{bid.currency}}</div>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">税率:</div>
-                        <input class="bid-input" ng-model="item.taxrate" value="taxrate" type="number" required ng-pattern="/^(100|[1-9]\d|\d)$/"/>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">单价:</div>
-                        <input class="bid-input" ng-model="item.price" value="price" required ng-pattern="/^\d{1,9}$|^\d{1,9}[.]\d{1,6}$/" placeholder="最多六位小数"/>
-                    </div>
-                    <div class = "col-xs-4">
-                        <div class="bid-desc">含税金额:</div>
-                        <div class="unchanged-info">{{item.price * item.qty || 0}}</div>
-                    </div>
-                    <div class="col-xs-12">
-                        <div class="bid-desc">投标附件:</div>
-                        <div class="attach-upload">
-                            <input type="file" ng-file-select name="file" ng-model="MyFiles">
+                <div class="wrap">
+                    <div class="content">
+                        <div class="tender-list">
+                            <!--产品信息-->
+                            <div class="com_title01"><span>产品信息</span><em>*</em></div>
+                            <dl>
+                                <dt>
+                                    <span>序号</span>
+                                    <span class="wid01">产品信息</span>
+                                    <span>单位</span>
+                                    <span>采购数量</span>
+                                    <span>采购周期</span>
+                                    <span>税率</span>
+                                    <span>单价</span>
+                                    <span>含税金额</span>
+                                </dt>
+                                <dd ng-repeat="prod in bid.purchaseTenderProds">
+                                    <span>{{$index + 1}}</span>
+                                    <span class="wid01">
+                                        <p>产品编号:{{prod.prodCode}}</p>
+                                        <p>产品名称:{{prod.prodTitle}}</p>
+                                        <!--<p>产品规格:<span ng-bind="prod.prodSpec"></span></p>-->
+                                    </span>
+                                    <span ng-bind="prod.unit"></span>
+                                    <span ng-bind="prod.qty"></span>
+                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.cycle" ng-pattern="/^\+?[1-9][0-9]*$/" placeholder="点击填写周期"/></span>
+                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.taxrate" ng-pattern="/^\+?[1-9][0-9]*$/" placeholder="点击填写税率"/></span>
+                                    <span><input type="text" class="editAble" ng-model="prod.currentItem.price" ng-pattern="/^(0|[0-9][0-9]{0,9})(\.[0-9]{1,6})?$/" placeholder="点击填写单价"/></span>
+                                    <span ng-bind="prod.currentItem.price * prod.qty || ''"></span>
+                                </dd>
+                            </dl>
                         </div>
-                        <!--<div class="upload-bg"></div>-->
-                        <span style="margin-left: 100px; color: #969595; font-size: 12px; font-family: 'Microsoft Yahei Regular';">提示:选择附件大小不超过5MB,可上传JPG,PNG,EXCEL,WORD,PDF</span>
                     </div>
                 </div>
+                <div style="min-height: 150px;">
+                    <div class="bid-desc" style="margin-left: 20px;">投标附件:</div>
+                    <div class="fileInputContainer">
+                        <input class="fileInput" type="file" ng-file-select name="file" ng-model="myFile" ng-change="upload(myFile)" />
+                        <!-- href="file/{{attach.id}}" -->
+                        <div class="attach-file" ng-repeat="attach in attaches">{{attach.name}}&nbsp;&nbsp;<a ng-click="removeAttach(attach.id, $index)" title="删除"><i class="fa fa-trash-o"></i></a></div>
+                    </div>
+                    <span style="margin-left: 100px; color: #969595; font-size: 12px; font-family: 'Microsoft Yahei Regular';">提示:选择附件大小不超过5MB,可上传JPG,PNG,EXCEL,WORD,PDF</span>
+                </div>
                 <div  class="title-div" style="border-bottom: 1px dashed #327ebe;">
                     <span>投标企业基本信息</span>
                     <span style="color: rgb(211,37,38);">*</span>
@@ -272,24 +333,24 @@
                 <div class="row prod-info">
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业名称:</div>
-                        <div class="unchanged-info">{{item.enterpriseBaseInfo.enName}}</div>
+                        <div class="unchanged-info">{{currentEnBaseInfo.enName}}</div>
                     </div>
                     <div class = "col-xs-8">
                         <div class="bid-desc">注册地址:</div>
-                        <div class="unchanged-info">{{item.enterpriseBaseInfo.enAddress}}</div>
+                        <div class="unchanged-info">{{currentEnBaseInfo.enAddress}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业UU号:</div>
-                        <div class="unchanged-info">{{item.enterpriseBaseInfo.uu}}</div>
+                        <div class="unchanged-info">{{currentEnBaseInfo.uu}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">营业执照号:</div>
-                        <div class="unchanged-info">{{item.enterpriseBaseInfo.enBusinessCode}}</div>
+                        <div class="unchanged-info">{{currentEnBaseInfo.enBusinessCode}}</div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">成立时间:</div>
-                        <div class="bid-desc" ng-show="item.enterpriseBaseInfo.enEstablishDate">{{item.enterpriseBaseInfo.enEstablishDate | date:'yyyy-MM-dd'}}</div>
-                        <div class="input-group input-trigger date-picker" ng-show="item.enterpriseBaseInfo.enEstablishDate == null">
+                        <div class="bid-desc" ng-show="currentEnBaseInfo.enEstablishDate">{{currentEnBaseInfo.enEstablishDate | date:'yyyy-MM-dd'}}</div>
+                        <div class="input-group input-trigger date-picker" ng-show="currentEnBaseInfo.enEstablishDate == null">
                             <input type="text" ng-model="item.enterpriseBaseInfo.enEstablishDate"
                                    class="form-control" placeholder="点击选择日期" readonly="readonly"
                                    datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
@@ -308,40 +369,40 @@
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">员工人数:</div>
-                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.emNum" type="number" />
+                        <input class="bid-input" ng-model="currentEnBaseInfo.emNum" type="text" ng-pattern="/^\+?[1-9][0-9]*$/" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业电话:</div>
-                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.enTel" type="text" />
+                        <input class="bid-input" ng-model="currentEnBaseInfo.enTel" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">企业传真:</div>
-                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.enFax" type="text" />
+                        <input class="bid-input" ng-model="currentEnBaseInfo.enFax" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系人:</div>
-                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.enUser" type="text" />
+                        <input class="bid-input" ng-model="currentEnBaseInfo.enUser" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">联系电话:</div>
-                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.userTel" type="text" />
+                        <input class="bid-input" ng-model="currentEnBaseInfo.userTel" type="text" />
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">开户银行:</div>
-                        <input class="bid-input" ng-model="item.enterpriseBaseInfo.bank" type="text" />
+                        <input class="bid-input" ng-model="currentEnBaseInfo.bank" type="text" />
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">经营范围:</div>
-                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="item.enterpriseBaseInfo.scope" type="text" />
+                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="currentEnBaseInfo.scope" type="text" />
                     </div>
                     <div class = "col-xs-12">
                         <div class="bid-desc">备注:</div>
-                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="item.enterpriseBaseInfo.remark" type="text" />
+                        <input class="bid-input" style="width: 80%; text-align: left;" ng-model="currentEnBaseInfo.remark" type="text" />
                     </div>
                 </div>
                 <div class="col-xs-12" style="padding: 30px;">
                     <div class="col-xs-2 pull-right btn-bid">
-                        <button class="btn" ng-disabled="bidForm.$invalid" ng-hide="bid.overdue == 1 || item.status != itemStatusTodo" ng-click="bidIt(bid,item)">投标</button>
+                        <button class="btn" ng-disabled="bid.overdue == 1 || !itemStatusTodo" ng-click="bidIt(bid, currentEnBaseInfo)">投标</button>
                     </div>
                 </div>
             </div>

+ 35 - 9
src/main/webapp/resources/tpl/index/sale/tenderlist.html

@@ -125,7 +125,7 @@
         font-weight: inherit;
     }
 </style>
-<div ng-controller="SaleTenderCtrl">
+<div ng-controller="SaleTenderCtrl" style=" margin-top: 20px;">
     <!-- 顶部导航及搜索框 -->
     <div class="top-nav">
         <div class="col-xs-8" style="font-size: 14px; height: 36px; padding-top: 10px;">
@@ -152,6 +152,10 @@
                             <button type="button" class="btn btn-select"
                                     ng-class="{'btn-selected':active=='all'}" ng-click="setActive('all')">全部</button>
                         </div>
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-select"
+                                    ng-class="{'btn-selected':active=='done'}" ng-click="setActive('done')">待评标</button>
+                        </div>
                         <div class="btn-group">
                             <button type="button" class="btn btn-select"
                                     ng-class="{'btn-selected':active=='todo'}" ng-click="setActive('todo')">待投标</button>
@@ -328,17 +332,39 @@
                     <td width="150">{{tender.endDate | date:'yyyy-MM-dd'}}</td>
                     <td width="150">{{tender.publishDate | date:'yyyy-MM-dd'}}</td>
                     <td width="150">
-                        <div ng-if = "getTenderStatus(tender) == 'daitoubiao'">
-                            <img src="resources/img/tender/daitoubiao.png">
+                        <!--<div ng-if = "getTenderStatus(tender) == 'daitoubiao'">-->
+                            <!--<img src="resources/img/tender/daitoubiao.png">-->
+                        <!--</div>-->
+                        <!--<div ng-if = "getTenderStatus(tender) == 'yitoubiao'">-->
+                            <!--<img src="resources/img/tender/yitoubiao.png">-->
+                        <!--</div>-->
+                        <!--<div ng-if = "getTenderStatus(tender) == 'zhongbiao'">-->
+                            <!--<img src="resources/img/tender/zhongbiao.png">-->
+                        <!--</div>-->
+                        <!--<div ng-if = "getTenderStatus(tender) == 'weizhongbiao'">-->
+                            <!--<img src="resources/img/tender/weizhongbiao.png">-->
+                        <!--</div>-->
+                        <div ng-if="tender.status == '已结标'">
+                            <img src="resources/img/tender/yijiebiao.png">
                         </div>
-                        <div ng-if = "getTenderStatus(tender) == 'yitoubiao'">
-                            <img src="resources/img/tender/yitoubiao.png">
+                        <div ng-if="tender.status == '待评标' && tender.overdue == 1 && tender.result == 1">
+                            <img src="resources/img/tender/liubiao.png">
+                        </div>
+                        <div ng-if="tender.status == '待评标' && tender.overdue == 1 && tender.result != 1">
+                            <img src="resources/img/tender/daipingbiao.png">
+                        </div>
+                        <div ng-if="tender.status == '待评标' && tender.overdue != 1">
+                            <img src="resources/img/tender/toubiaozhong.png">
+                        </div>
+                        <!-- overdue与投标截止日期比较  result与公布结果日期比较 -->
+                        <div ng-if="tender.status == '待投标' && tender.overdue != 1">
+                            <img src="resources/img/tender/daitoubiao.png">
                         </div>
-                        <div ng-if = "getTenderStatus(tender) == 'zhongbiao'">
-                            <img src="resources/img/tender/zhongbiao.png">
+                        <div ng-if="tender.status == '待投标' && tender.overdue == 1">
+                            <img src="resources/img/tender/liubiao.png">
                         </div>
-                        <div ng-if = "getTenderStatus(tender) == 'weizhongbiao'">
-                            <img src="resources/img/tender/weizhongbiao.png">
+                        <div ng-if="tender.status == '待发布'">
+                            <img src="resources/img/tender/zailuru.png">
                         </div>
                     </td>
                 </tr>

+ 0 - 0
src/main/webapp/resources/tpl/index/sale/tender_vendor.html → src/main/webapp/resources/tpl/index/sale/vendor_tender.html