Browse Source

采购单存储时记录消息,打印代采订单。

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@7356 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
dongbw 9 years ago
parent
commit
3a6c27132a
28 changed files with 1301 additions and 234 deletions
  1. 32 17
      src/main/java/com/uas/platform/b2b/controller/DeputyOrderController.java
  2. 103 0
      src/main/java/com/uas/platform/b2b/controller/PagingReleaseController.java
  3. 13 0
      src/main/java/com/uas/platform/b2b/dao/PagingReleaseDao.java
  4. 14 0
      src/main/java/com/uas/platform/b2b/dao/PagingReleaseDetailDao.java
  5. 48 0
      src/main/java/com/uas/platform/b2b/event/PurchaseOrderSaveReleaseEvent.java
  6. 54 0
      src/main/java/com/uas/platform/b2b/event/SaveReleaseEvent.java
  7. 34 0
      src/main/java/com/uas/platform/b2b/listener/MessageListener.java
  8. 13 0
      src/main/java/com/uas/platform/b2b/model/DeputyOrder.java
  9. 230 0
      src/main/java/com/uas/platform/b2b/model/PagingRelease.java
  10. 205 0
      src/main/java/com/uas/platform/b2b/model/PagingReleaseDetail.java
  11. 10 32
      src/main/java/com/uas/platform/b2b/search/SearchService.java
  12. 26 83
      src/main/java/com/uas/platform/b2b/search/SearchServiceImpl.java
  13. 4 4
      src/main/java/com/uas/platform/b2b/service/DeputyOrderService.java
  14. 15 0
      src/main/java/com/uas/platform/b2b/service/PagingReleaseDetailService.java
  15. 9 0
      src/main/java/com/uas/platform/b2b/service/PagingReleaseService.java
  16. 22 40
      src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java
  17. 21 12
      src/main/java/com/uas/platform/b2b/service/impl/DeputyOrderServiceImpl.java
  18. 27 0
      src/main/java/com/uas/platform/b2b/service/impl/PagingReleaseDetailServiceImpl.java
  19. 16 0
      src/main/java/com/uas/platform/b2b/service/impl/PagingReleaseServiceImpl.java
  20. 2 0
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderServiceImpl.java
  21. 1 1
      src/main/webapp/WEB-INF/views/normal/index.html
  22. 0 1
      src/main/webapp/resources/js/common/services.js
  23. 111 3
      src/main/webapp/resources/js/index/app.js
  24. 5 1
      src/main/webapp/resources/js/index/services/DeputyOrder.js
  25. 17 0
      src/main/webapp/resources/js/index/services/Purc.js
  26. 178 0
      src/main/webapp/resources/tpl/index/home/pagingRelease.html
  27. 29 0
      src/main/webapp/resources/tpl/index/purc/deputyOrder.html
  28. 62 40
      src/main/webapp/resources/tpl/index/purc/tender_evaluation.html

+ 32 - 17
src/main/java/com/uas/platform/b2b/controller/DeputyOrderController.java

@@ -1,21 +1,5 @@
 package com.uas.platform.b2b.controller;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.ModelAndView;
-
 import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.model.DeputyOrder;
@@ -37,6 +21,20 @@ import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort.Type;
 import com.uas.search.b2b.util.SearchConstants;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 代采订单
@@ -195,9 +193,26 @@ public class DeputyOrderController {
 		return deputyOrderService.deleteProdById(id);
 	}
 
+
+	/**
+	 * 打印订单,增加打印次数
+	 * 记录打印日志
+	 *
+	 * @param id
+	 * @return
+	 */
+	@RequestMapping(value = "/printCount/{id}", method = RequestMethod.POST)
+	@ResponseBody
+	public ResponseEntity<String> printCount(@PathVariable("id") Long id) {
+		deputyOrderService.print(id);
+		logger.log("客户代采订单", "打印代采订单", id.toString());
+		return new ResponseEntity<String>(HttpStatus.OK);
+	}
+
+
 	/**
 	 * 获取供应商的汇率
-	 * 
+	 *
 	 * @return
 	 */
 	@RequestMapping(value = "/vendorRate", method = RequestMethod.GET)

+ 103 - 0
src/main/java/com/uas/platform/b2b/controller/PagingReleaseController.java

@@ -0,0 +1,103 @@
+package com.uas.platform.b2b.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2b.model.PagingReleaseDetail;
+import com.uas.platform.b2b.search.SearchService;
+import com.uas.platform.b2b.service.PagingReleaseDetailService;
+import com.uas.platform.b2b.service.PagingReleaseService;
+import com.uas.platform.b2b.service.UserService;
+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.PageParams;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.platform.core.web.bind.RequestState;
+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.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by dongbw
+ * 17/03/24 9:00.
+ */
+@Controller
+@RequestMapping("/api/paging")
+public class PagingReleaseController {
+
+    @Autowired
+    private PagingReleaseService pagingReleaseService;
+
+    @Autowired
+    private PagingReleaseDetailService pagingReleaseDetailService;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private SearchService searchService;
+
+    private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    /**
+     *  分页查找消息(未读)
+     * @param params
+     * @return
+     */
+    @RequestMapping(params = RequestState.TODO, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PagingReleaseDetail> getTodoPagingRelease(PageParams params, String searchFilter) {
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+//        logger.log("查看消息", "查看收到的消息(未读)");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, null);
+        pageParams.getFilters().put("prd_readstatus", Constant.NO);
+        pageParams.getFilters().put("prd_emuu", SystemSession.getUser().getUserUU());
+        pageParams.getFilters().put("prd_venduu", SystemSession.getUser().getEnterprise().getUu());
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("prd_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        return searchService.searchPagingReleaseDetailIds(keyword, pageParams);
+    }
+
+    /**
+     *  分页查找消息(已读)
+     * @param params
+     * @return
+     */
+    @RequestMapping(params = RequestState.DONE, method = RequestMethod.GET)
+    @ResponseBody
+    public SPage<PagingReleaseDetail> getDonePagingRelease(PageParams params, String searchFilter) {
+        JSONObject jsonObject = JSONObject.parseObject(searchFilter);
+        String keyword = jsonObject.getString("keyword");
+//        logger.log("查看消息", "查看收到的消息(已读)");
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, null);
+        pageParams.getFilters().put("prd_readstatus", Constant.YES);
+        pageParams.getFilters().put("prd_emuu", SystemSession.getUser().getUserUU());
+        pageParams.getFilters().put("prd_venduu", SystemSession.getUser().getEnterprise().getUu());
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("prd_id", false, Sort.Type.LONG, new Long(1)));
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        return searchService.searchPagingReleaseDetailIds(keyword, pageParams);
+    }
+
+    /**
+     *  选中标为已读
+     *
+     */
+    @RequestMapping(value = "/setRead", method = RequestMethod.POST)
+    @ResponseBody
+    public void setRead(@RequestBody String releases) {
+        List<PagingReleaseDetail> releaseDetails = FlexJsonUtils.fromJsonArray(releases, PagingReleaseDetail.class);
+        pagingReleaseDetailService.setRead(releaseDetails);
+    }
+}

+ 13 - 0
src/main/java/com/uas/platform/b2b/dao/PagingReleaseDao.java

@@ -0,0 +1,13 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PagingRelease;
+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/23 9:37.
+ */
+@Repository
+public interface PagingReleaseDao extends JpaSpecificationExecutor<PagingRelease>,JpaRepository<PagingRelease, Long> {
+}

+ 14 - 0
src/main/java/com/uas/platform/b2b/dao/PagingReleaseDetailDao.java

@@ -0,0 +1,14 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PagingReleaseDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by dongbw
+ * 17/03/23 9:39.
+ */
+@Repository
+public interface PagingReleaseDetailDao extends JpaRepository<PagingReleaseDetail, Long>,JpaSpecificationExecutor<PagingReleaseDetail> {
+}

+ 48 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseOrderSaveReleaseEvent.java

@@ -0,0 +1,48 @@
+package com.uas.platform.b2b.event;
+
+import com.uas.platform.b2b.model.PagingRelease;
+import com.uas.platform.b2b.model.PagingReleaseDetail;
+import com.uas.platform.b2b.model.PurchaseOrderAll;
+
+import java.util.*;
+
+/**
+ * 采购订单保存时生成消息事件
+ * Created by dongbw
+ * 17/03/23 14:06.
+ */
+public class PurchaseOrderSaveReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseOrderAll> {
+
+    public PurchaseOrderSaveReleaseEvent(List<PurchaseOrderAll> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param orderAll
+     * @return
+     */
+    @Override
+    public PagingReleaseDetail release(PurchaseOrderAll orderAll) {
+        //TODO 保存erp新订单之后,触发新增消息事件。
+        Long emUU = orderAll.getUserUU();
+        String emName = orderAll.getUser().getUserName();
+        Long enUU = orderAll.getEnUU();
+        Date date = new Date();
+        String codeValue = orderAll.getCode();
+        String from = "B2B";
+        if (orderAll.getErpId() != null && orderAll.getStatus() == 200) { // erp传到平台的单据,包含erpId字段记录来源
+            from = "ERP";
+        }
+        String type = "新增采购订单";
+        String title = from + type;
+        String context = from + orderAll.getEnName() + "的" + emName + type + ",单号:" + codeValue;
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type);
+        Long vendUU = orderAll.getVendUU();
+        Long vendUserUU = orderAll.getVendUserUU();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 54 - 0
src/main/java/com/uas/platform/b2b/event/SaveReleaseEvent.java

@@ -0,0 +1,54 @@
+package com.uas.platform.b2b.event;
+
+import org.springframework.context.ApplicationEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 新增消息事件
+ * 
+ * @param <S>
+ *            生成的消息记录
+ * @param <T>
+ *            原单据
+ * 
+ * @author yingp
+ * 
+ */
+public abstract class SaveReleaseEvent<S, T> extends ApplicationEvent {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private List<T> savedList;
+
+	public SaveReleaseEvent(List<T> savedList) {
+		super(savedList);
+		this.savedList = savedList;
+	}
+
+	/**
+	 *
+	 *
+	 * @return
+	 */
+	public final List<S> release() {
+		List<S> releaseList = new ArrayList<S>();
+		for (T saved : savedList)
+			releaseList.add(release(saved));
+		return releaseList;
+	}
+
+	/**
+	 * 生成对应消息记录
+	 * 
+	 * @param saved
+	 * @return
+	 */
+	public abstract S release(T saved);
+
+}

+ 34 - 0
src/main/java/com/uas/platform/b2b/listener/MessageListener.java

@@ -0,0 +1,34 @@
+package com.uas.platform.b2b.listener;
+
+import com.uas.platform.b2b.dao.PagingReleaseDetailDao;
+import com.uas.platform.b2b.event.PurchaseOrderSaveReleaseEvent;
+import com.uas.platform.b2b.event.SaveReleaseEvent;
+import com.uas.platform.b2b.model.PagingReleaseDetail;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 监听新增数据事件
+ * 生成对应消息
+ *
+ */
+@Component
+public class MessageListener implements ApplicationListener<SaveReleaseEvent<?, ?>> {
+
+	@Autowired
+	private PagingReleaseDetailDao pagingReleaseDetailDao;
+
+	@SuppressWarnings("unchecked")
+	@Async
+	@Override
+	public void onApplicationEvent(final SaveReleaseEvent<?, ?> event) {
+		if (event instanceof PurchaseOrderSaveReleaseEvent) {
+			pagingReleaseDetailDao.save((List<PagingReleaseDetail>) event.release());
+		}
+	}
+
+}

+ 13 - 0
src/main/java/com/uas/platform/b2b/model/DeputyOrder.java

@@ -360,6 +360,12 @@ public class DeputyOrder implements Serializable {
 	@Column(name = "deo_enuu")
 	private Long enuu;
 
+	/**
+	 * 打印次数
+	 */
+	@Column(name = "deo_print")
+	private Short print;
+
 	public Long getId() {
 		return id;
 	}
@@ -768,4 +774,11 @@ public class DeputyOrder implements Serializable {
 		this.erpdate = erpdate;
 	}
 
+	public Short getPrint() {
+		return print;
+	}
+
+	public void setPrint(Short print) {
+		this.print = print;
+	}
 }

+ 230 - 0
src/main/java/com/uas/platform/b2b/model/PagingRelease.java

@@ -0,0 +1,230 @@
+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.Date;
+import java.util.Set;
+
+/**
+ *  推送消息表
+ * Created by dongbw on 17/03/22 14:55.
+ */
+@Entity
+@Table(name = "purc$pagingrelease")
+public class PagingRelease implements Serializable {
+
+    /**
+     * 序号
+     */
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$pagingrelease_gen")
+    @SequenceGenerator(name = "purc$pagingrelease_gen", sequenceName = "purc$pagingrelease_seq", allocationSize = 1)
+    @Column(name = "pr_id")
+    private Long id;
+
+    /**
+     * 员工UU
+     */
+    @Column(name = "pr_emuu")
+    private Long emUU;
+
+    /**
+     * 员工姓名
+     */
+    @Column(name = "pr_emname")
+    private String emName;
+
+    /**
+     * 企业UU
+     */
+    @Column(name = "pr_enuu")
+    private Long enUU;
+
+    /**
+     * 采购企业
+     */
+    @OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+    @JoinColumn(name = "pr_enuu", insertable = false, updatable = false)
+    private EnterpriseInfo enterprise;
+
+    /**
+     * 采购单所属采购员
+     */
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "pr_emuu", insertable = false, updatable = false)
+    private User user;
+
+    /**
+     * 推送时间
+     */
+    @Column(name = "pr_date")
+    private Date date;
+
+    /**
+     * 消息正文
+     */
+    @Column(name = "pr_context")
+    private String context;
+
+    /**
+     * 消息来源
+     */
+    @Column(name = "pr_from")
+    private String from;
+
+    /**
+     * 来源单据编号
+     */
+    @Column(name = "pr_codevalue")
+    private String code;
+
+    /**
+     * 消息标题
+     */
+    @Column(name = "pr_title")
+    private String title;
+
+    /**
+     * 消息类型
+     */
+    @Column(name = "pr_type")
+    private String type;
+
+    /**
+     * 消息明细
+     */
+    @OneToMany(mappedBy = "pagingRelease", cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
+            CascadeType.MERGE }, fetch = FetchType.EAGER)
+    @OrderBy("prd_id")
+    private Set<PagingReleaseDetail> pagingReleaseDetails;
+
+
+
+    public PagingRelease(Long emUU, String emname, Long enUU, Date date, String codeValue, String from, String title, String context, String type) {
+        this.emUU = emUU;
+        this.emName = emname;
+        this.enUU = enUU;
+        this.date = date;
+        this.code = codeValue;
+        this.from = from;
+        this.title = title;
+        this.context = context;
+        this.type = type;
+    }
+
+    public PagingRelease() {
+
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getEmUU() {
+        return emUU;
+    }
+
+    public void setEmUU(Long emUU) {
+        this.emUU = emUU;
+    }
+
+    public String getEmName() {
+        return emName;
+    }
+
+    public void setEmName(String emName) {
+        this.emName = emName;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public EnterpriseInfo getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(EnterpriseInfo enterprise) {
+        this.enterprise = enterprise;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getContext() {
+        return context;
+    }
+
+    public void setContext(String context) {
+        this.context = context;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    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 String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    @JsonIgnore
+    @JSONField(serialize = false)
+    public Set<PagingReleaseDetail> getPagingReleaseDetails() {
+        return pagingReleaseDetails;
+    }
+
+    public void setPagingReleaseDetails(Set<PagingReleaseDetail> pagingReleaseDetails) {
+        this.pagingReleaseDetails = pagingReleaseDetails;
+    }
+}

+ 205 - 0
src/main/java/com/uas/platform/b2b/model/PagingReleaseDetail.java

@@ -0,0 +1,205 @@
+package com.uas.platform.b2b.model;
+
+import com.uas.platform.core.model.Constant;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 消息明细表
+ * Created by dongbw on 17/03/22 14:55.
+ */
+@Entity
+@Table(name = "purc$pagingreleasedetail")
+public class PagingReleaseDetail implements Serializable{
+
+    /**
+     * 序号
+     */
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$pagingreleasedetail_gen")
+    @SequenceGenerator(name = "purc$pagingreleasedetail_gen", sequenceName = "purc$pagingreleasedetail_seq", allocationSize = 1)
+    @Column(name = "prd_id")
+    private Long id;
+
+    /**
+     * 接收人UU
+     */
+    @Column(name = "prd_emuu")
+    private Long vendUserUU;
+
+    /**
+     * 采购单所属采购员
+     */
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "prd_emuu", insertable = false, updatable = false)
+    private User vendUser;
+
+    /**
+     * 供应商企业UU
+     */
+    @Column(name = "prd_venduu")
+    private Long vendUU;
+
+    /**
+     * 供应商企业
+     */
+    @OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+    @JoinColumn(name = "prd_venduu", insertable = false, updatable = false)
+    private EnterpriseInfo vendor;
+
+    /**
+     * 接收人姓名
+     */
+    @Column(name = "prd_emname")
+    private String vendUserName;
+
+    /**
+     * 阅读时间
+     */
+    @Column(name = "prd_readdate")
+    private Date readDate;
+
+    /**
+     * 阅读状态
+     */
+    @Column(name = "prd_readstatus")
+    private Short readStatus;
+
+    /**
+     * 获取状态
+     */
+    @Column(name = "prd_status")
+    private Short status;
+
+    /**
+     * 推送状态
+     */
+    @Column(name = "prd_pushstatus")
+    private Short pushStatus;
+
+    /**
+     * 统计状态
+     */
+    @Column(name = "prd_totalstatus")
+    private Short totalStatus;
+
+    /**
+     * 消息主表
+     */
+    @ManyToOne(cascade = CascadeType.ALL)
+    @JoinColumn(name = "prd_prid", nullable = false)
+    private PagingRelease pagingRelease;
+
+    public PagingReleaseDetail() {
+    }
+
+    public PagingReleaseDetail(Long vendUU, Long vendUserUU) {
+        this.vendUU = vendUU;
+        this.vendUserUU = vendUserUU;
+        this.readStatus = Constant.NO;
+        this.status = Constant.NO;
+        this.pushStatus = Constant.NO;
+        this.totalStatus = Constant.NO;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getVendUserUU() {
+        return vendUserUU;
+    }
+
+    public void setVendUserUU(Long vendUserUU) {
+        this.vendUserUU = vendUserUU;
+    }
+
+    public User getVendUser() {
+        return vendUser;
+    }
+
+    public void setVendUser(User vendUser) {
+        this.vendUser = vendUser;
+    }
+
+    public Long getVendUU() {
+        return vendUU;
+    }
+
+    public void setVendUU(Long vendUU) {
+        this.vendUU = vendUU;
+    }
+
+    public Date getReadDate() {
+        return readDate;
+    }
+
+    public void setReadDate(Date readDate) {
+        this.readDate = readDate;
+    }
+
+    public String getVendUserName() {
+        return vendUserName;
+    }
+
+    public void setVendUserName(String vendUserName) {
+        this.vendUserName = vendUserName;
+    }
+
+    public EnterpriseInfo getVendor() {
+        return vendor;
+    }
+
+    public void setVendor(EnterpriseInfo vendor) {
+        this.vendor = vendor;
+    }
+
+
+    public Short getReadStatus() {
+        return readStatus;
+    }
+
+    public void setReadStatus(Short readStatus) {
+        this.readStatus = readStatus;
+    }
+
+    public Short getStatus() {
+        return status;
+    }
+
+    public void setStatus(Short status) {
+        this.status = status;
+    }
+
+    public Short getPushStatus() {
+        return pushStatus;
+    }
+
+    public void setPushStatus(Short pushStatus) {
+        this.pushStatus = pushStatus;
+    }
+
+    public Short getTotalStatus() {
+        return totalStatus;
+    }
+
+    public void setTotalStatus(Short totalStatus) {
+        this.totalStatus = totalStatus;
+    }
+
+    public PagingRelease getPagingRelease() {
+        return pagingRelease;
+    }
+
+    public void setPagingRelease(PagingRelease pagingRelease) {
+        this.pagingRelease = pagingRelease;
+    }
+}

+ 10 - 32
src/main/java/com/uas/platform/b2b/search/SearchService.java

@@ -1,39 +1,9 @@
 package com.uas.platform.b2b.search;
 
-import com.uas.platform.b2b.model.Component;
-import com.uas.platform.b2b.model.DeputyOrder;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.MakeAccept;
-import com.uas.platform.b2b.model.MakeOrder;
-import com.uas.platform.b2b.model.MakeOrderChangeItem;
-import com.uas.platform.b2b.model.MakeReturn;
-import com.uas.platform.b2b.model.Product;
-import com.uas.platform.b2b.model.PurchaseAccept;
-import com.uas.platform.b2b.model.PurchaseApBill;
-import com.uas.platform.b2b.model.PurchaseApCheck;
-import com.uas.platform.b2b.model.PurchaseBadIn;
-import com.uas.platform.b2b.model.PurchaseBadOut;
-import com.uas.platform.b2b.model.PurchaseForecastAll;
-import com.uas.platform.b2b.model.PurchaseInquiryItem;
-import com.uas.platform.b2b.model.PurchaseInquiryMould;
-import com.uas.platform.b2b.model.PurchaseMRB;
-import com.uas.platform.b2b.model.PurchaseNotice;
-import com.uas.platform.b2b.model.PurchaseOrderAll;
-import com.uas.platform.b2b.model.PurchaseOrderChange;
-import com.uas.platform.b2b.model.PurchaseOrderDone;
-import com.uas.platform.b2b.model.PurchaseOrderEnd;
-import com.uas.platform.b2b.model.PurchaseOrderTodo;
-import com.uas.platform.b2b.model.PurchaseOrderWaiting;
-import com.uas.platform.b2b.model.PurchaseProofingApproval;
-import com.uas.platform.b2b.model.PurchaseProofingItem;
-import com.uas.platform.b2b.model.PurchaseProofingSend;
-import com.uas.platform.b2b.model.PurchaseReturn;
-import com.uas.platform.b2b.model.PurchaseTender;
-import com.uas.platform.b2b.model.SaleARCheck;
-import com.uas.platform.b2b.model.SaleQuotationAll;
-import com.uas.platform.b2b.model.SaleSendAll;
+import com.uas.platform.b2b.model.*;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.SPage;
+import org.springframework.data.domain.Page;
 
 /**
  * 搜索接口
@@ -309,4 +279,12 @@ public interface SearchService {
 	 */
 	public SPage<DeputyOrder> searchDeputyOrderCheckIds(String keyword, PageParams pageParams);
 
+	/**
+	 * 消息
+	 *
+	 * @param keyword
+	 * @param pageParams
+	 * @return
+	 */
+    SPage<PagingReleaseDetail> searchPagingReleaseDetailIds(String keyword, PageParams pageParams);
 }

+ 26 - 83
src/main/java/com/uas/platform/b2b/search/SearchServiceImpl.java

@@ -1,94 +1,26 @@
 package com.uas.platform.b2b.search;
 
-import java.lang.reflect.Field;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
 import com.alibaba.fastjson.JSONObject;
-import com.uas.platform.b2b.dao.ComponentDao;
-import com.uas.platform.b2b.dao.DeputyOrderDao;
-import com.uas.platform.b2b.dao.EnterpriseDao;
-import com.uas.platform.b2b.dao.MakeAcceptDao;
-import com.uas.platform.b2b.dao.MakeOrderChangeItemDao;
-import com.uas.platform.b2b.dao.MakeOrderDao;
-import com.uas.platform.b2b.dao.MakeReturnDao;
-import com.uas.platform.b2b.dao.ProductDao;
-import com.uas.platform.b2b.dao.PurchaseAcceptDao;
-import com.uas.platform.b2b.dao.PurchaseApBillDao;
-import com.uas.platform.b2b.dao.PurchaseApCheckDao;
-import com.uas.platform.b2b.dao.PurchaseBadInDao;
-import com.uas.platform.b2b.dao.PurchaseBadOutDao;
-import com.uas.platform.b2b.dao.PurchaseForecastAllDao;
-import com.uas.platform.b2b.dao.PurchaseInquiryItemDao;
-import com.uas.platform.b2b.dao.PurchaseInquiryMouldDao;
-import com.uas.platform.b2b.dao.PurchaseMRBDao;
-import com.uas.platform.b2b.dao.PurchaseNoticeDao;
-import com.uas.platform.b2b.dao.PurchaseOrderAllDao;
-import com.uas.platform.b2b.dao.PurchaseOrderChangeDao;
-import com.uas.platform.b2b.dao.PurchaseOrderDoneDao;
-import com.uas.platform.b2b.dao.PurchaseOrderEndDao;
-import com.uas.platform.b2b.dao.PurchaseOrderTodoDao;
-import com.uas.platform.b2b.dao.PurchaseOrderWaitingDao;
-import com.uas.platform.b2b.dao.PurchaseProofingApprovalDao;
-import com.uas.platform.b2b.dao.PurchaseProofingItemDao;
-import com.uas.platform.b2b.dao.PurchaseProofingSendDao;
-import com.uas.platform.b2b.dao.PurchaseReturnDao;
-import com.uas.platform.b2b.dao.PurchaseTenderDao;
-import com.uas.platform.b2b.dao.SaleARCheckDao;
-import com.uas.platform.b2b.dao.SaleQuotationAllDao;
-import com.uas.platform.b2b.dao.SaleSendAllDao;
-import com.uas.platform.b2b.model.Component;
-import com.uas.platform.b2b.model.DeputyOrder;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.MakeAccept;
-import com.uas.platform.b2b.model.MakeOrder;
-import com.uas.platform.b2b.model.MakeOrderChangeItem;
-import com.uas.platform.b2b.model.MakeReturn;
-import com.uas.platform.b2b.model.Product;
-import com.uas.platform.b2b.model.PurchaseAccept;
-import com.uas.platform.b2b.model.PurchaseApBill;
-import com.uas.platform.b2b.model.PurchaseApCheck;
-import com.uas.platform.b2b.model.PurchaseBadIn;
-import com.uas.platform.b2b.model.PurchaseBadOut;
-import com.uas.platform.b2b.model.PurchaseForecastAll;
-import com.uas.platform.b2b.model.PurchaseInquiryItem;
-import com.uas.platform.b2b.model.PurchaseInquiryMould;
-import com.uas.platform.b2b.model.PurchaseMRB;
-import com.uas.platform.b2b.model.PurchaseNotice;
-import com.uas.platform.b2b.model.PurchaseOrderAll;
-import com.uas.platform.b2b.model.PurchaseOrderChange;
-import com.uas.platform.b2b.model.PurchaseOrderDone;
-import com.uas.platform.b2b.model.PurchaseOrderEnd;
-import com.uas.platform.b2b.model.PurchaseOrderTodo;
-import com.uas.platform.b2b.model.PurchaseOrderWaiting;
-import com.uas.platform.b2b.model.PurchaseProofingApproval;
-import com.uas.platform.b2b.model.PurchaseProofingItem;
-import com.uas.platform.b2b.model.PurchaseProofingSend;
-import com.uas.platform.b2b.model.PurchaseReturn;
-import com.uas.platform.b2b.model.PurchaseTender;
-import com.uas.platform.b2b.model.SaleARCheck;
-import com.uas.platform.b2b.model.SaleQuotationAll;
-import com.uas.platform.b2b.model.SaleSendAll;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.core.persistence.criteria.PredicateFactory;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.service.SearchService.Table_name;
 import com.uas.search.b2b.util.SearchConstants;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.lang.reflect.Field;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * 搜索实现
@@ -198,6 +130,9 @@ public class SearchServiceImpl implements com.uas.platform.b2b.search.SearchServ
 	@Autowired
 	private PurchaseTenderDao purchaseTenderDao;
 
+	@Autowired
+	private PagingReleaseDetailDao pagingReleaseDetailDao;
+
 	private ConcurrentHashMap<String, Field> sortFields = new ConcurrentHashMap<String, Field>();
 
 	private Field getPropertyField(Class<?> targetCls, String properyName) {
@@ -638,7 +573,15 @@ public class SearchServiceImpl implements com.uas.platform.b2b.search.SearchServ
 		return toSPage(idsPage, content);
 	}
 
-	/**
+    @Override
+    public SPage<PagingReleaseDetail> searchPagingReleaseDetailIds(String keyword, PageParams pageParams) {
+		SPage<Long> idsPage = searchService.searchIds(keyword, Table_name.PURC$PAGINGRELEASEDETAIL, pageParams);
+		List<PagingReleaseDetail> content = pagingReleaseDetailDao.findAll(idsPage.getContent());
+		sortByProperty(content, PagingReleaseDetail.class, "id", idsPage.getContent());
+		return toSPage(idsPage, content);
+    }
+
+    /**
 	 *  招标单
 	 * @param keyword
 	 * @param pageParams

+ 4 - 4
src/main/java/com/uas/platform/b2b/service/DeputyOrderService.java

@@ -1,11 +1,10 @@
 package com.uas.platform.b2b.service;
 
-import java.util.List;
-
+import com.uas.platform.b2b.model.DeputyOrder;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.ui.ModelMap;
 
-import com.uas.platform.b2b.model.DeputyOrder;
+import java.util.List;
 
 public interface DeputyOrderService {
 
@@ -51,9 +50,10 @@ public interface DeputyOrderService {
 
 	/**
 	 * 获取供应商汇率
-	 * 
+	 *
 	 * @return
 	 */
 	public Double vendorRate();
 
+    void print(Long id);
 }

+ 15 - 0
src/main/java/com/uas/platform/b2b/service/PagingReleaseDetailService.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2b.service;
+
+import com.uas.platform.b2b.model.PagingReleaseDetail;
+
+import java.util.List;
+
+/**
+ * Created by dongbw
+ * 17/03/23 9:41.
+ */
+public interface PagingReleaseDetailService {
+
+
+    void setRead(List<PagingReleaseDetail> releaseDetails);
+}

+ 9 - 0
src/main/java/com/uas/platform/b2b/service/PagingReleaseService.java

@@ -0,0 +1,9 @@
+package com.uas.platform.b2b.service;
+
+/**
+ * Created by dongbw
+ * 17/03/23 9:41.
+ */
+public interface PagingReleaseService {
+
+}

+ 22 - 40
src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java

@@ -1,52 +1,18 @@
 package com.uas.platform.b2b.service.impl;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.ui.ModelMap;
-
 import com.uas.account.entity.RequsetStatus;
 import com.uas.account.support.Page;
 import com.uas.account.util.AccountUtils;
-import com.uas.platform.b2b.dao.CartDetailDao;
-import com.uas.platform.b2b.dao.ComponentDao;
-import com.uas.platform.b2b.dao.EnterpriseDao;
-import com.uas.platform.b2b.dao.ProductDao;
-import com.uas.platform.b2b.dao.PurchaseOrderAllItemDao;
-import com.uas.platform.b2b.dao.UserBaseInfoDao;
-import com.uas.platform.b2b.dao.VendorDao;
-import com.uas.platform.b2b.model.Attach;
-import com.uas.platform.b2b.model.Cart;
-import com.uas.platform.b2b.model.CartDetail;
-import com.uas.platform.b2b.model.Component;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.EnterpriseInfo;
-import com.uas.platform.b2b.model.FileUpload;
-import com.uas.platform.b2b.model.Product;
-import com.uas.platform.b2b.model.PurchaseOrderAll;
-import com.uas.platform.b2b.model.PurchaseOrderAllItem;
-import com.uas.platform.b2b.model.UserBaseInfo;
-import com.uas.platform.b2b.model.Vendor;
+import com.uas.platform.b2b.core.util.ContextUtils;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.event.PurchaseOrderSaveReleaseEvent;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.BaseInfoService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.UsageBufferedLogger;
-import com.uas.platform.b2b.temporary.model.BasePartnersInfo;
-import com.uas.platform.b2b.temporary.model.NewPurcOrder;
-import com.uas.platform.b2b.temporary.model.OrderItems;
-import com.uas.platform.b2b.temporary.model.PartStatus;
-import com.uas.platform.b2b.temporary.model.ProdInfo;
-import com.uas.platform.b2b.temporary.model.UserSpaceDetail;
+import com.uas.platform.b2b.temporary.model.*;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.Constant;
@@ -56,6 +22,19 @@ import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort.Type;
 import com.uas.search.b2b.util.SearchConstants;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 @Service
 public class BaseInfoServiceImpl implements BaseInfoService {
@@ -299,7 +278,10 @@ public class BaseInfoServiceImpl implements BaseInfoService {
 			}
 		}
 		logger.log("平台新增采购订单", "新增采购单", SystemSession.getUser().getUserName() + "新增了采购单");
-		return purchaseOrderAllItemDao.save(orderItems);
+		List<PurchaseOrderAllItem> orderAllItems = purchaseOrderAllItemDao.save(orderItems);
+		// 生成消息
+		ContextUtils.publishEvent(new PurchaseOrderSaveReleaseEvent(PurchaseOrderAllItem.distinct(orderAllItems)));
+		return orderAllItems;
 	}
 
 	@Override

+ 21 - 12
src/main/java/com/uas/platform/b2b/service/impl/DeputyOrderServiceImpl.java

@@ -1,17 +1,5 @@
 package com.uas.platform.b2b.service.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.ui.ModelMap;
-
 import com.uas.platform.b2b.dao.DeputyOrderDao;
 import com.uas.platform.b2b.dao.DeputyOrderItemDao;
 import com.uas.platform.b2b.dao.VendorDao;
@@ -24,6 +12,17 @@ import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.b2b.temporary.model.DeputyOrderInfo;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.Status;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+
+import java.util.ArrayList;
+import java.util.List;
 
 @Service
 public class DeputyOrderServiceImpl implements DeputyOrderService {
@@ -216,6 +215,16 @@ public class DeputyOrderServiceImpl implements DeputyOrderService {
 		return deputyOrderDao.getByDeputyuuAndEntrystatusAndDownloadstatus(enuu, entryStatus, downloadStatus);
 	}
 
+	@Override
+	public void print(Long id) {
+		DeputyOrder order = deputyOrderDao.findOne(id);
+		if (order != null) {
+			order.setPrint((short) ((order.getPrint() == null ? 0 : order.getPrint()) + 1));
+//			PrintLog printLog = new PrintLog(new Date(), SystemSession.getUser().getUserName(), "平台客户打印代采订单", order.getId(), "purc$orders", order.getCode(), order.getErpId(), Constant.NO);
+		}
+		deputyOrderDao.save(order);
+	}
+
 	@Override
 	public Double vendorRate() {
 		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(SystemSession.getUser().getEnterprise().getUu(),

+ 27 - 0
src/main/java/com/uas/platform/b2b/service/impl/PagingReleaseDetailServiceImpl.java

@@ -0,0 +1,27 @@
+package com.uas.platform.b2b.service.impl;
+
+import com.uas.platform.b2b.dao.PagingReleaseDetailDao;
+import com.uas.platform.b2b.model.PagingReleaseDetail;
+import com.uas.platform.b2b.service.PagingReleaseDetailService;
+import com.uas.platform.core.model.Constant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class PagingReleaseDetailServiceImpl implements PagingReleaseDetailService {
+
+    @Autowired
+    private PagingReleaseDetailDao pagingReleaseDetailDao;
+
+    @Override
+    public void setRead(List<PagingReleaseDetail> releaseDetails) {
+        for (PagingReleaseDetail releaseDetail : releaseDetails) {
+            releaseDetail.setReadStatus(Constant.YES);
+            releaseDetail.setReadDate(new Date());
+        }
+        pagingReleaseDetailDao.save(releaseDetails);
+    }
+}

+ 16 - 0
src/main/java/com/uas/platform/b2b/service/impl/PagingReleaseServiceImpl.java

@@ -0,0 +1,16 @@
+package com.uas.platform.b2b.service.impl;
+
+import com.uas.platform.b2b.model.PagingRelease;
+import com.uas.platform.b2b.service.PagingReleaseService;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by dongbw
+ * 17/03/24 11:28.
+ */
+@Service
+public class PagingReleaseServiceImpl implements PagingReleaseService {
+
+}

+ 2 - 0
src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.uas.platform.b2b.service.impl;
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.event.PurchaseOrderSaveEvent;
+import com.uas.platform.b2b.event.PurchaseOrderSaveReleaseEvent;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseOrderService;
@@ -77,6 +78,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 	public void save(List<PurchaseOrderAllItem> orderItems) {
 		List<PurchaseOrderAllItem> newOrderItems = purchaseOrderAllItemDao.save(orderItems);
 		ContextUtils.publishEvent(new PurchaseOrderSaveEvent(PurchaseOrderAllItem.distinct(newOrderItems)));
+		ContextUtils.publishEvent(new PurchaseOrderSaveReleaseEvent(PurchaseOrderAllItem.distinct(newOrderItems)));
 	}
 
 	@Override

+ 1 - 1
src/main/webapp/WEB-INF/views/normal/index.html

@@ -111,7 +111,7 @@
 				</ul>
 				<div id="home-headerBtns">
 					<i class="fa fa-mobile-phone fa-lg"></i>
-					<a href=""><i class="fa fa-comments-o fa-lg"></i></a>
+					<a ng-click="showMessage()" title="查看消息"><i class="fa fa-comments-o fa-lg"></i></a>
 					<a href="#/approvalFlow"><i class="fa fa-cog fa-lg"></i></a>
 					<a ng-click="logout()" title="退出登录"><i class="fa fa-power-off fa-lg"></i></a>
 				</div>

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

@@ -225,7 +225,6 @@ define(['angular', 'toaster'], function(angular) {
 			 * 
 			 */
             print: function(enuu, reportName, whereCondition) {
-            	console.log("enter");
             	window.open(rootPath + "/report/print?enuu=" + enuu + "&reportName=" + reportName + "&whereCondition=" + whereCondition);
                 /*$http.get(rootPath + '/report/print', {
                     params: {

+ 111 - 3
src/main/webapp/resources/js/index/app.js

@@ -644,7 +644,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 	  }
 	});
 	
-	app.controller('MyCtrl', ['$scope', '$rootScope', function($scope, $rootScope) {
+	app.controller('MyCtrl', ['$scope', '$rootScope', '$modal', function($scope, $rootScope, $modal) {
 		$rootScope.$on('$locationChangeSuccess', function(evt, newUrl) {
 			var routeState = newUrl.substr(newUrl.indexOf('#/') + 2);
 			if (routeState.indexOf('/') > -1)
@@ -660,8 +660,107 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 				window.location.hash = '#/search?keyword='+keyword;
 			}
 		};
+
+		$scope.showMessage = function() {
+            var $modalInstance = $modal.open({
+                templateUrl: 'static/tpl/index/home/pagingRelease.html',
+                controller: 'PagingReleaseCtrl'
+            });
+        };
 	}]);
-	// TODO
+
+    app.controller('PagingReleaseCtrl', ['$scope', 'PagingRelease', 'BaseService', 'ngTableParams', 'toaster', '$modalInstance', function($scope, PagingRelease, BaseService, ngTableParams, toaster, $modalInstance){
+        $scope.active = "todo";
+        $scope.setActive = function(state) {
+            if($scope.active != state) {
+                $scope.active = state;
+                if($scope.tableParams.page() == 1)
+                    $scope.tableParams.reload();
+                else
+                    $scope.tableParams.page(1);
+            }
+        };
+
+        $scope.tableParams = new ngTableParams({
+            page : 1,
+            count : 5,
+            sorting: {
+                'releaseDetail.release.date': 'desc'
+            }
+        }, {
+            total : 0,
+            counts: [5, 10, 25, 50],
+            getData : function($defer, params) {
+                $scope.loading = true;
+                var pageParams = params.url();
+                var realActive = {};
+                pageParams.searchFilter = { // 筛选条件
+                    keyword: $scope.keyword
+                    // fromDate: getDateTime($scope.condition.dateFrom),
+                    // endDate: getDateTime($scope.condition.dateTo)
+                };
+                // AccountEnterprise.get({}, function(data){
+                //     $scope.loading = false;
+                //     $scope.currentEn = data;
+                // });
+                PagingRelease[getState($scope.active)].call(null, BaseService.parseParams(pageParams), function(page){
+                    $scope.loading = false;
+                    if(page) {
+                        params.total(page.totalElement);
+                        $defer.resolve(page.content);
+                        // $scope.keywordXls = angular.copy($scope.keyword); // 保存当前取值的关键词  做导出时需要的字段
+                    }
+                }, function(response){
+                    $scope.loading = false;
+                    toaster.pop('error', '数据加载失败', response.data);
+                });
+            }
+        });
+
+        $scope.close = function() {
+            $modalInstance.close();
+        };
+
+
+        $scope.checks = {
+            checked : false
+        };// 全选框
+
+        $scope.checkAll = function() {
+            angular.forEach($scope.tableParams.data, function(message) {
+                message.checked = $scope.checks.checked;
+            });
+        };
+
+        // 单选
+        $scope.checkOne = function(message) {
+            message.checked = true;
+
+        };
+
+        // 标为已读
+        $scope.setRead = function() {
+            var selectedMessages = [];
+            angular.forEach($scope.tableParams.data, function(message) {
+                if(message.checked) {
+                    selectedMessages.push(message);
+                }
+            });
+            console.log(selectedMessages);
+            PagingRelease.setRead({}, selectedMessages , function(message) {
+                $scope.tableParams.page(1);
+                $scope.tableParams.reload();
+            });
+        };
+
+        // 搜索框回车
+        $scope.onSearch = function() {
+            $scope.tableParams.page(1);
+            $scope.tableParams.reload();
+        };
+
+    }]);
+        // TODO
 	app.controller('TopSearchCtrl', ['$scope', '$rootScope', 'getAccountUserSpace', 'ngTableParams', 'toaster', 'BaseService', 'AddPartner', '$filter', '$stateParams', 'SearchProd', '$sce', function($scope, $rootScope, getAccountUserSpace, ngTableParams, toaster, BaseService, AddPartner, $filter, $stateParams, SearchProd, $sce) {
 		$scope.active = 'all';
 		$scope.tip = $rootScope.searchKeyword;
@@ -8978,7 +9077,7 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
 	/***
 	 * 代采定单
 	 */
-	app.controller('DeputyOrderCtrl', ['$scope', 'toaster', 'getDeOrder', 'ngTableParams', 'BaseService', function($scope, toaster, getDeOrder, ngTableParams, BaseService) {
+	app.controller('DeputyOrderCtrl', ['$scope', 'toaster', 'getDeOrder', 'ngTableParams', 'BaseService', 'DeputyOrder', 'ReportService', function($scope, toaster, getDeOrder, ngTableParams, BaseService, DeputyOrder, ReportService) {
 		$scope.active = 'all';
 		$scope.currency = Symbol.currency;//将币别转化为对应的符号
 		$scope.total = null;
@@ -9017,6 +9116,15 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
 				});
 			}
 		});
+
+        //打印
+        $scope.print = function(deputyOrder) {
+            DeputyOrder.printCount({id: deputyOrder.id},{});//增加打印此次
+            ReportService.print(deputyOrder.deputyuu, 'PURCNOTICE', "where purc$deputyorders.deo_id=" + deputyOrder.id); // 定向采购通知
+            ReportService.print(deputyOrder.deputyuu, 'PURCHASE', "where purc$deputyorders.deo_id=" + deputyOrder.id); // 采购订单
+            ReportService.print(deputyOrder.deputyuu, 'PAYCONFIRM', "where purc$deputyorders.deo_id=" + deputyOrder.id); // 付款确认
+            ReportService.print(deputyOrder.deputyuu, 'TRADECONTRACT', "where purc$deputyorders.deo_id=" + deputyOrder.id); // 买卖合同
+        };
 		
 		// 搜索框回车
 		$scope.onSearch = function() {

+ 5 - 1
src/main/webapp/resources/js/index/services/DeputyOrder.js

@@ -20,7 +20,11 @@ define(['ngResource'], function() {
 			vendorRate: {
 				url: 'deputyOrder/vendorRate',
 				method: 'GET'
-			}
+			},
+            printCount: {
+                url: 'deputyOrder/printCount/:id',
+                method: 'POST'
+            }
 		})
 	}]).factory('getDeOrder', ['$resource', function($resource) {
 		return $resource('deputyOrder/getDeOrder', {}, {

+ 17 - 0
src/main/webapp/resources/js/index/services/Purc.js

@@ -576,6 +576,23 @@ define([ 'ngResource'], function() {
 		});
 	}]).factory('Customer', ['$resource', function($resource){
 		return $resource('vendor/customer/:id', {}, {});
+    }]).factory('PagingRelease', ['$resource', function($resource){
+        return $resource('api/paging', {}, {
+        	getTodo: {
+                params: {
+                    _state: 'todo'
+                }
+			},
+			getDone:{
+                params: {
+                    _state: 'done'
+                }
+			},
+            setRead:{
+                url: 'api/paging/setRead',
+                method: 'POST'
+            }
+		});
 	}]).factory('Product', ['$resource', function($resource){
 		return $resource('product', {}, {});
 	}]).factory('Vendor', ['$resource', function($resource){

+ 178 - 0
src/main/webapp/resources/tpl/index/home/pagingRelease.html

@@ -0,0 +1,178 @@
+<style>
+    .btn {
+        border-radius: 0;
+    }
+
+    .modal-content {
+        /*margin-top: 100px;*/
+        height: 500px;
+        width: 1058px;
+        margin-left: auto;
+        margin-right: auto;
+        left: -35%;   /*居中*/
+        top: 100px;
+        padding: 0 27px;
+    }
+
+    /* 选项按钮 */
+    .div-menu .menu-status .btn-select {
+        background-color: #fff;
+        color: #000000;
+        border: none;
+        border-radius: 0;
+        height: 36px;
+        font-family: "Microsoft Yahei Regular";
+        margin: 0 5px 0 5px;
+        padding: 0 15px 0 15px;
+        border-bottom: 2px solid #fff;
+    }
+
+    .menu-status {
+        height: 36px;
+        margin-bottom: 36px;
+    }
+
+    .menu-status .btn-select:hover {
+        border-bottom: 2px solid #D32526;
+    }
+
+    .menu-status .btn-select:focus {
+        border-bottom: 2px solid #D32526;
+    }
+    .menu-status .btn-select:first-child {
+        margin-left: 10px;
+    }
+
+    /* 顶部搜索框 */
+    .div-menu {
+        margin-top: 12px;
+    }
+    .div-menu #search_input {
+        height: 36px;
+        font-size: 16px;
+        font-family: '微软雅黑';
+        border: 1px solid #327EBE;
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+        text-align: center;
+    }
+
+    .div-menu #search_btn {
+        height: 36px;
+        padding-top: 0;
+        padding-bottom: 0;
+        font-size: 16px;
+        background: #327EBE;
+        border: 1px solid #327EBE;
+        color: #fff;
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+    }
+
+    /* 当前激活 */
+
+    .div-menu .menu-status .btn-selected {
+        background-color: #fff;
+        color: #D32526;
+        border: none;
+        border-bottom: 2px solid #D32526;
+        border-radius: 0;
+
+    }
+
+    .div-menu .menu-status .btn-selected:hover {
+        background-color: #f5f5f5;
+    }
+
+
+    /* 消息表格 */
+    .release-table thead tr th {
+        font-family: "Microsoft Yahei Regular";
+        font-weight: 500;
+        color: rgb(0, 0, 0);
+        height: 50px;
+        text-align: center;
+    }
+
+    .release-table tbody tr td {
+        height: 50px;
+        text-align: center;
+    }
+
+    .footer-click {
+
+    }
+</style>
+<div class="modal-body">
+    <div class="col-xs-12" style="height: 14px;">
+        <div class="pull-right" style="margin-right: -33px; margin-top: -5px;">
+            <a ng-click="close()"><i class="fa fa-close fa-lg"></i></a>
+        </div>
+    </div>
+    <div class="div-menu">
+        <div style="font-family: 'Microsoft Yahei Regular'; font-size: 14px; color: rgb(102,102,102); float: left; margin-top: 6px;margin-left: 6px;">
+            <span>消息分类:</span>
+        </div>
+        <div class="btn-group menu-status">
+            <div class="btn-group">
+                <button type="button" class="btn btn-select"
+                        ng-class="{'btn-selected':active=='todo'}" ng-click="setActive('todo')">未读</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>
+        <div class="input-group search-group col-xs-4 pull-right" style="margin-right: 48px;">
+            <input id="search_input" type="search" class="form-control input-sm" ng-model="keyword" ng-search="onSearch()" placeholder="输入查询信息" />
+            <span class="input-group-btn">
+                <button id="search_btn" class="btn x-rss-btn x-background-whiteblue" ng-click="onSearch()">&nbsp;&nbsp;搜索&nbsp;&nbsp;</button>
+            </span>
+        </div>
+    </div>
+
+    <table class="block table release-table"
+           ng-table="tableParams">
+        <thead>
+            <tr class="header">
+                <th width="40" ng-hide="active == 'done'"></th>
+                <th width="150">推送时间</th>
+                <th width="500">信息描述</th>
+                <th width="100">阅读状态</th>
+                <th width="150">阅读时间</th>
+            </tr>
+        </thead>
+        <tbody>
+        <tr ng-repeat="releaseDetail in $data">
+            <td ng-hide="active == 'done'">
+                <input ng-model="releaseDetail.checked" name="checkbox" ng-click="checkOne(releaseDetail)" type="checkbox">
+            </td>
+            <td>
+                <div>{{releaseDetail.pagingRelease.date | date:'yyyy-MM-dd HH:mm'}}</div>
+            </td>
+            <td>
+                <div>{{releaseDetail.pagingRelease.context}}</div>
+            </td>
+            <td>
+                <div ng-if="releaseDetail.readStatus == 1">已读</div>
+                <div ng-if="releaseDetail.readStatus != 1" style="font-family: 'Microsoft Yahei Regular'; color: #327EBE;">未读</div>
+            </td>
+            <td>
+                <div>{{releaseDetail.readDate | date:'yyyy-MM-dd HH:mm'}}</div>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+    <div class="footer-click">
+        <div ng-hide="active == 'done'" style="float: left; padding: 1px 5px 0 15px;">
+            <input type="checkbox" name="checkbox" ng-model="checks.checked" ng-click="checkAll()" />
+        </div>
+        <div ng-hide="active == 'done'" style="float: left; padding: 0 20px 0 0;">
+            <!--<a ng-click="checkAll()">全选</a>-->
+            <span>全选</span>
+        </div>
+        <div ng-hide="active == 'done'" style="padding: 0 10px;">
+            <a ng-click="setRead()">标为已读</a>
+        </div>
+    </div>
+</div>

+ 29 - 0
src/main/webapp/resources/tpl/index/purc/deputyOrder.html

@@ -123,6 +123,25 @@
 	.tender-table tbody>tr{
 		border-bottom: 1px solid #e8e8e8;
 	}
+
+    .unPrinted {
+        color: #327ebe;
+    }
+
+    .main-content>table .operates {
+        display: none;
+    }
+
+    .main-content>table .operates i {
+        padding: 0 2px;
+    }
+
+    .main-content>table>tbody:hover .operates {
+        display: block;
+    }
+    .main-content>table>tbody:hover .operates-status {
+        display: none;
+    }
 </style>
 <div>
     <!-- 顶部导航及搜索框 -->
@@ -174,6 +193,7 @@
                     <th width="237">我方付款信息</th>
                     <th width="237">终端供应商付款信息</th>
                     <th width="143">业务状态</th>
+                    <th>操作</th>
                 </tr>
             </thead>
 			<tbody ng-if="tableParams.total() == 0">
@@ -197,6 +217,15 @@
                 	<td>
                 		<img alt="" src="resources/img/deputyOrder/pay_ok.png">
                 	</td>
+                    <td class="text-center">
+                        <span ng-if="order.print" class="label ng-scope operates-status" style="margin-right: 5px;background-color: #5D6C79">已打印</span>
+                        <span ng-if="!order.print" class="label ng-scope operates-status" style="margin-right: 5px;background-color: #CA3955">未打印</span>
+                        <div class="operates">
+                            <a ng-click="print(order)" title="打印{{order.print? '(已打印)':'(未打印)'}}" ng-class="{'unPrinted' : !order.print, 'text-muted': order.print}">
+                                <i class="fa fa-print fa-lg"></i>
+                            </a>
+                        </div>
+                    </td>
                 </tr>
             </tbody>
         </table>

+ 62 - 40
src/main/webapp/resources/tpl/index/purc/tender_evaluation.html

@@ -10,23 +10,26 @@
         box-shadow: 0 0 5px #6f6f6f;
         border-top-right-radius: 20px;
     }
+
     /* 主体 */
     .purc-bid {
         line-height: 2;
         font-family: "Microsoft Yahei Regular";
         font-size: 14px;
     }
+
     .purc-bid .row {
         margin-left: 0px;
         margin-right: 0px;
         padding-left: 15px;
         padding-right: 15px;
     }
+
     .bid-content {
         background-color: #fff;
     }
 
-    .bid-content>div>div {
+    .bid-content > div > div {
         margin-top: 3px;
         margin-bottom: 3px;
     }
@@ -37,6 +40,7 @@
         color: #969595;
         overflow: hidden;
     }
+
     /* 二级标题栏 */
     .title-div {
         font-family: "Microsoft Yahei Regular";
@@ -52,18 +56,19 @@
         width: 100px;
         float: left;
     }
+
     /* 输入框 */
     .bid-input {
         border: none;
         border-bottom: 1px solid #323232;
         text-align: center;
     }
-    .bid-input:focus{
-        outline:none;
+
+    .bid-input:focus {
+        outline: none;
         border-bottom: 1px solid #5078cb;
     }
 
-
     /* 基本信息 */
     .base-info {
         border-bottom: 1px solid #969595;
@@ -73,10 +78,11 @@
     }
 
     /* 右下角按钮 */
-    .bid-content>div {
+    .bid-content > div {
         background-color: #fff;
     }
-    .bid-content>div>div>button {
+
+    .bid-content > div > div > button {
         width: 94px;
         height: 36px;
         font-size: 14px;
@@ -84,41 +90,47 @@
         color: #fff;
         border-radius: 0;
     }
-    .bid-content>div>div.btn-bid>button {
+
+    .bid-content > div > div.btn-bid > button {
         background-color: #327EBE;
     }
 
     /* 列表内容 */
     .tender-table {
-       padding: 0 20px;
+        padding: 0 20px;
     }
+
     .tender-table .header {
         height: 50px;
         background-color: #fff;
-        color: rgb(50,50,50);
+        color: rgb(50, 50, 50);
         font-family: "Microsoft Yahei Regular";
         border-bottom: 1px solid #327ebe;
     }
-    .tender-table thead>tr>th:first-child,.tender-table tbody>tr>td:first-child {
+
+    .tender-table thead > tr > th:first-child, .tender-table tbody > tr > td:first-child {
         padding-left: 30px;
     }
+
     .tender-table tr {
         height: 50px;
         border-bottom: 1px dashed #969595;
     }
 
-    .tender-table>tbody {
+    .tender-table > tbody {
         height: 100px;
         font-family: "Microsoft Yahei Regular";
         font-size: 14px;
         color: #323232;
         border: 1px solid transparent;
     }
+
     .tender-table tbody tr td a {
-         font-family: "Microsoft Yahei Regular";
-         color: #327ebe;
-         font-size: 12px;
-     }
+        font-family: "Microsoft Yahei Regular";
+        color: #327ebe;
+        font-size: 12px;
+    }
+
     .tender-table tbody tr td a:hover {
         color: #D32526;
         cursor: pointer;
@@ -129,8 +141,9 @@
         border: none;
         width: 100px;
     }
-    .tender-input:focus{
-        outline:none;
+
+    .tender-input:focus {
+        outline: none;
     }
 </style>
 
@@ -148,68 +161,68 @@
                     <span>基本信息</span>
                 </div>
                 <div class="row base-info">
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">招标标题:</div>
                         <div class="unchanged-info">{{tender.title}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">联系人:</div>
                         <div class="unchanged-info">{{tender.user}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">联系电话:</div>
                         <div class="unchanged-info">{{tender.userTel}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">产品名称:</div>
                         <div class="unchanged-info">{{tender.prodTitle}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">产品型号:</div>
                         <div class="unchanged-info">{{tender.prodCode}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">单位:</div>
                         <div class="unchanged-info">{{tender.unit}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">采购数量:</div>
                         <div class="unchanged-info">{{tender.qty}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">交易币别:</div>
                         <div class="unchanged-info">{{tender.currency}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">是否含税:</div>
                         <div class="unchanged-info" ng-if="tender.ifTax == 1">是</div>
                         <div class="unchanged-info" ng-if="tender.ifTax == 0">否</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">投标截止时间:</div>
                         <div class="unchanged-info">{{tender.endDate | date:'yyyy-MM-dd'}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">公布结果时间:</div>
                         <div class="unchanged-info">{{tender.publishDate | date:'yyyy-MM-dd'}}</div>
                     </div>
-                    <div class = "col-xs-4">
+                    <div class="col-xs-4">
                         <div class="bid-desc">付款方式:</div>
                         <div class="unchanged-info">{{tender.payment}}</div>
                     </div>
-                    <div class = "col-xs-12">
+                    <div class="col-xs-12">
                         <div class="bid-desc">收货地址:</div>
                         <div class="unchanged-info">{{tender.shipAddress}}</div>
                     </div>
-                    <div class = "col-xs-12">
+                    <div class="col-xs-12">
                         <div class="bid-desc">证照要求:</div>
                         <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">
+                <form name="evaluationForm">
                     <table class="tender-table block" ng-table="tableParams">
                         <thead>
                         <tr class="header">
@@ -224,12 +237,14 @@
                         </tr>
                         </thead>
                         <tbody>
-                        <tr ng-if="tender.purchaseTenderItems == '' || tender.purchaseTenderItems == null" style="font-family: 'Microsoft Yahei Regular'; font-size: 14px; color: #969595;">
+                        <tr ng-if="tender.purchaseTenderItems == '' || tender.purchaseTenderItems == 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">
                             <td width="300">{{item.enterpriseBaseInfo.enName}}&nbsp;
-                                <a ui-sref="sale.vendortender({vendUU:item.enterpriseBaseInfo.uu, id:tender.id})" target="_self" title="查看投标单">查看投标单</a>
+                                <a ui-sref="sale.vendortender({vendUU:item.enterpriseBaseInfo.uu, id:tender.id})"
+                                   target="_self" title="查看投标单">查看投标单</a>
                             </td>
                             <td width="50">
                                 <div ng-show="tender.overdue != 1 && item.taxrate">**</div>
@@ -243,14 +258,19 @@
                             </td>
                             <td width="70">
                                 <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>
+                                <div ng-show="tender.overdue == 1 && item.taxrate && item.price">{{item.price *
+                                    tender.qty || 0}}
+                                </div>
                             </td>
                             <td width="70">
                                 <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>
+                                <div ng-show="tender.overdue == 1 && item.taxrate && item.price">{{item.price *
+                                    tender.qty * (1 + item.taxrate/100) |number: 2 || 0}}
+                                </div>
                             </td>
                             <td width="150">
-                                <input class="tender-input" type="text" ng-model="item.description" placeholder="点此输入说明">
+                                <input class="tender-input" type="text" ng-model="item.description"
+                                       placeholder="点此输入说明">
                             </td>
                             <td width="70">
                                 <input type="radio" ng-model="item.applyStatus" value="1"/>
@@ -265,8 +285,10 @@
                 <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-click="submit(tender)">确定</button>
+                                ng-disabled="evaluationForm.$invalid || tender.overdue == 0"
+                                ng-hide="tender.result == 1 || tender.status == '已结标'"
+                                ng-click="submit(tender)">确定
+                        </button>
                     </div>
                 </div>
             </div>