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

首页显示最近招标信息,招标显示修改。

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@7307 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
dongbw пре 9 година
родитељ
комит
5b93ef55ed

+ 19 - 1
src/main/java/com/uas/platform/b2b/controller/PurchaseTenderController.java

@@ -12,6 +12,7 @@ import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.platform.core.web.bind.RequestState;
@@ -20,6 +21,8 @@ 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;
@@ -239,7 +242,6 @@ 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());
         String itemStatus = SystemSession.getUser().getEnterprise().getUu() + "待投标";
         pageParams.getFilters().put("pti_ptid", itemStatus);
         pageParams.getFilters().put("pt_ispublish", Constant.YES);
@@ -520,4 +522,20 @@ public class PurchaseTenderController {
         System.out.println("attach" + JSON.toJSONString(tenderItem));
         return purchaseTenderService.addTenderItemAttaches(item, uploadItem);
     }
+
+    @RequestMapping(value = "/latestTender", method = RequestMethod.GET)
+    @ResponseBody
+    public Page<PurchaseTender> getLatestTender(PageParams params) {
+        PageInfo info = new PageInfo(params);
+        info.sorting("date", Direction.DESC); // 按发布日期倒序
+        return purchaseTenderService.findAllByPageInfo(info);
+    }
+
+    @RequestMapping(value = "/latestOpenTender", method = RequestMethod.GET)
+    @ResponseBody
+    public Page<PurchaseTender> getLatestOpenTender(PageParams params) {
+        PageInfo info = new PageInfo(params);
+        info.sorting("date", Direction.DESC); // 按发布日期倒序
+        return purchaseTenderService.findOpenByPageInfo(info);
+    }
 }

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

@@ -5,15 +5,13 @@ 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 PurchaseTenderItemDao extends JpaSpecificationExecutor<PurchaseTenderItem>,JpaRepository<PurchaseTenderItem, Long> {
 
-    List<PurchaseTenderItem> findByCode(String code);
+//    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 - 7
src/main/java/com/uas/platform/b2b/model/PurchaseTender.java

@@ -63,16 +63,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")
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "pt_enuu", insertable = false, updatable = false)
     private Enterprise enterprise;
 
     /**
@@ -259,6 +259,14 @@ public class PurchaseTender implements Serializable {
         this.purchaseTenderItems = purchaseTenderItems;
     }
 
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
     public String getUser() {
         return user;
     }

+ 11 - 0
src/main/java/com/uas/platform/b2b/service/PurchaseTenderService.java

@@ -4,6 +4,8 @@ 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 java.util.List;
@@ -92,4 +94,13 @@ public interface PurchaseTenderService {
     ModelMap addTenderAttaches(PurchaseTender purchaseTender, FileUpload uploadItem);
 
     ModelMap addTenderItemAttaches(PurchaseTenderItem item, FileUpload uploadItem);
+
+    /**
+     *  获取最近指定招标
+     *
+     * @return
+     */
+    Page<PurchaseTender> findAllByPageInfo(PageInfo info);
+
+    Page<PurchaseTender> findOpenByPageInfo(PageInfo info);
 }

+ 49 - 0
src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java

@@ -7,11 +7,18 @@ 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 javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
 import java.util.*;
 
 /**
@@ -145,6 +152,48 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
         return map;
     }
 
+    @Override
+    public Page<PurchaseTender> findAllByPageInfo(final PageInfo pageInfo) {
+        List<PurchaseTenderItem> tenderItems = purchaseTenderItemDao.findAll(new Specification<PurchaseTenderItem>() {
+            @Override
+            public Predicate toPredicate(Root<PurchaseTenderItem> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                Predicate myTender = cb.equal(root.get("enterpriseBaseInfo").get("uu"), SystemSession.getUser().getEnterprise().getUu());
+                query.where(myTender);
+                return query.getRestriction();
+            }
+        });
+        Set<Long> ids = new HashSet<>();
+        for (PurchaseTenderItem tenderItem : tenderItems) {
+            ids.add(tenderItem.getTender().getId());
+        }
+        System.out.println("ids" + JSON.toJSONString(ids));
+        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;
+            }
+        }, pageInfo);
+    }
+
+    @Override
+    public Page<PurchaseTender> findOpenByPageInfo(final PageInfo pageInfo) {
+        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);
+                query.where(predicate);
+                return null;
+            }
+        }, pageInfo);
+    }
+
     private List<PurchaseTenderItem> saveTenderItem (PurchaseTender tender, List<Enterprise> enterprises) {
         List<PurchaseTenderItem> tenderItems = new ArrayList<>();
         for (Enterprise enterprise: enterprises) {

+ 12 - 0
src/main/webapp/resources/js/common/services.js

@@ -171,6 +171,18 @@ define(['angular', 'toaster'], function(angular) {
                 request.success(function(data) {
                     success.call(null, data.content);
                 });
+            },
+            getTender: function(count, success) {
+                var request = $http.get(rootPath + '/tender/latestTender?page=1&count=' + count);
+                request.success(function(data) {
+                    success.call(null, data.content);
+                });
+            },
+            getOpenTender: function(count, success) {
+                var request = $http.get(rootPath + '/tender/latestOpenTender?page=1&count=' + count);
+                request.success(function(data) {
+                    success.call(null, data.content);
+                });
             }
         };
     }]).factory('SerializerUtil', function() {

+ 11 - 0
src/main/webapp/resources/js/index/app.js

@@ -1003,6 +1003,17 @@ 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表示首页显示的招标单条数
+            $scope.tenders = data;
+        });
+
+        SnapshotService.getOpenTender(5, function(data){	//5表示首页显示的招标单条数
+            $scope.openTenders = data;
+        });
+
+        $scope.dateTime = new Date();
+    }]);
 	app.controller('VendCountCtrl', ['$scope', 'VendorService', function($scope, VendorService){
 		VendorService.getCount(function(date){
 			$scope.count = date;

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

@@ -1,4 +1,23 @@
 <!-- 用户信息 Start -->
+<style>
+	.tender {
+		height: 244px;
+	}
+
+	.tender .detail>li {
+		clear: both;
+		display: block;
+		padding: 4px 8px;
+		position: relative;
+	}
+
+	.tender .detail>li:before {
+		position: absolute;
+		left: 0;
+		top: 5px;
+		content: "."
+	}
+</style>
 <div class="user">
 	<div class="user-info">
 		<div class="user-image">
@@ -80,4 +99,28 @@
 		<li><a href="serve">客服中心</a><i class="fa fa-headphones icon-right"></i></li>
 	</ul>
 </div>
-<!-- 常用操作 End -->
+<!-- 常用操作 End -->
+<div class="pane tender" ng-controller="TenderCtrl">
+	<div class="pane-header">
+		客户指定招标:
+	</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 tender" ng-controller="TenderCtrl">
+	<div class="pane-header">
+		平台公开招标:
+	</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>

+ 2 - 2
src/main/webapp/resources/tpl/index/purc/tender.html

@@ -342,8 +342,8 @@
                     <div class="col-xs-12">
                         <div class="tender-desc">上传招标文件:</div>
                         <div class="attach-upload">
-                            <input type="file" ng-file-select accept="image/*,application/pdf,*.pdf"
-                                   name="file" ng-model="MyFiles">
+                            <!-- accept="image/*,application/pdf,*.pdf" -->
+                            <input type="file" ng-file-select name="file" ng-model="MyFiles">
                         </div>
                         <div class="upload-bg"></div>
                         <div style="margin-left: 100px; color: #969595; font-size: 12px; font-family: 'Microsoft Yahei Regular';">

+ 8 - 4
src/main/webapp/resources/tpl/index/purc/tender_evaluation.html

@@ -232,18 +232,22 @@
                                 <a ui-sref="sale.vendortender({vendUU:item.enterpriseBaseInfo.uu, id:tender.id})" target="_self" title="查看投标单">查看投标单</a>
                             </td>
                             <td width="50">
-                                <div>{{item.taxrate}}</div>
+                                <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="点此输入税率"/>-->
                             </td>
                             <td width="50">
-                                <div>{{item.price}}</div>
+                                <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="点此输入单价"/>-->
                             </td>
                             <td width="70">
-                                <div>{{item.price * tender.qty * item.taxrate || 0}}</div>
+                                <div ng-show="tender.overdue != 1 && item.taxrate && item.price">***</div>
+                                <div ng-show="tender.overdue == 1 && item.taxrate && item.price">{{item.price * tender.qty || 0}}</div>
                             </td>
                             <td width="70">
-                                <div>{{item.price * tender.qty * (1 -item.taxrate/100) || 0}}</div>
+                                <div ng-show="tender.overdue != 1 && item.taxrate && item.price">***</div>
+                                <div ng-show="tender.overdue == 1 && item.taxrate && item.price">{{item.price * tender.qty * (1 + item.taxrate/100) || 0}}</div>
                             </td>
                             <td width="150">
                                 <input class="tender-input" type="text" ng-model="item.description" placeholder="点此输入说明">

+ 12 - 8
src/main/webapp/resources/tpl/index/sale/tender.html

@@ -186,12 +186,8 @@
                         <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.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 class="bid-desc">是否开放报名:</div>
+                        <div class="unchanged-info" ng-bind="bid.ifOpen == 1 ? '是': '否'"></div>
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">发票要求:</div>
@@ -199,10 +195,18 @@
                         <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-8">
+                    <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>
@@ -250,7 +254,7 @@
                     </div>
                     <div class = "col-xs-4">
                         <div class="bid-desc">含税金额:</div>
-                        <div class="unchanged-info">{{item.price * item.qty || ''}}</div>
+                        <div class="unchanged-info">{{item.price * item.qty || 0}}</div>
                     </div>
                     <div class="col-xs-12">
                         <div class="bid-desc">投标附件:</div>