Selaa lähdekoodia

询价单多次报价

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@1057 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
administrator 11 vuotta sitten
vanhempi
commit
5a7e441fb2

+ 48 - 3
src/main/java/com/uas/platform/b2b/core/util/DateUtils.java

@@ -4,8 +4,12 @@ import java.util.Calendar;
 import java.util.Date;
 
 public class DateUtils {
-	
-	public static final int COMPARE_DAY = 1;
+
+	public static final int COMPARE_NONE = 0;
+	public static final int COMPARE_SECOND = 1;
+	public static final int COMPARE_MINUTE = 2;
+	public static final int COMPARE_HOUR = 3;
+	public static final int COMPARE_DAY = 4;
 
 	/**
 	 * 获取月份最后日期
@@ -20,5 +24,46 @@ public class DateUtils {
 		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
 		return calendar.getTime();
 	}
-	
+
+	/**
+	 * 比较日期大小
+	 * 
+	 * @param dateParam1
+	 * @param dateParam2
+	 * @param compareType
+	 *            精确位(天、小时、分钟、秒)
+	 * @return 1表示dateParam1大于dateParam2,0表示等于,-1表示小于
+	 */
+	public static int compare(Date dateParam1, Date dateParam2, int compareType) {
+		Calendar calendar1 = Calendar.getInstance();
+		calendar1.setTime(dateParam1);
+		calendar1.clear(Calendar.MILLISECOND);
+		if (compareType >= COMPARE_SECOND)
+			calendar1.clear(Calendar.SECOND);
+		if (compareType >= COMPARE_MINUTE)
+			calendar1.clear(Calendar.MINUTE);
+		if (compareType >= COMPARE_HOUR) {
+			calendar1.clear(Calendar.HOUR_OF_DAY);
+			calendar1.clear(Calendar.HOUR);
+			calendar1.clear(Calendar.AM_PM);
+		}
+		if (compareType >= COMPARE_DAY)
+			calendar1.clear(Calendar.DAY_OF_MONTH);
+		Calendar calendar2 = Calendar.getInstance();
+		calendar2.setTime(dateParam2);
+		calendar2.clear(Calendar.MILLISECOND);
+		if (compareType >= COMPARE_SECOND)
+			calendar2.clear(Calendar.SECOND);
+		if (compareType >= COMPARE_MINUTE)
+			calendar2.clear(Calendar.MINUTE);
+		if (compareType >= COMPARE_HOUR) {
+			calendar2.clear(Calendar.HOUR_OF_DAY);
+			calendar2.clear(Calendar.HOUR);
+			calendar2.clear(Calendar.AM_PM);
+		}
+		if (compareType >= COMPARE_DAY)
+			calendar2.clear(Calendar.DAY_OF_MONTH);
+		return calendar1.compareTo(calendar2);
+	}
+
 }

+ 11 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseInquiryDao.java

@@ -4,13 +4,16 @@ import java.util.List;
 
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.uas.platform.b2b.model.PurchaseInquiry;
 
 @Repository
+@Transactional
 public interface PurchaseInquiryDao extends JpaSpecificationExecutor<PurchaseInquiry>, JpaRepository<PurchaseInquiry, Long> {
 
 	/**
@@ -41,4 +44,12 @@ public interface PurchaseInquiryDao extends JpaSpecificationExecutor<PurchaseInq
 	@Query("select p from PurchaseInquiry p inner join p.inquiryItems as i where i.vendUU = :vendUU and p.id = :id")
 	public List<PurchaseInquiry> findByVendUUAndId(@Param("vendUU") long vendUU, @Param("id") long id);
 
+	/**
+	 * 按询价单来源ID更新是否提交状态
+	 * 
+	 */
+	@Modifying(clearAutomatically = true)
+	@Query("update PurchaseInquiry p set p.check = :check where p.enUU = :enUU and p.sourceId IN (:sourceIds)")
+	public void updateByCheck(@Param("check") short check, @Param("enUU") long enUU, @Param("sourceIds") String sourceIds);
+
 }

+ 11 - 0
src/main/java/com/uas/platform/b2b/erp/controller/InquiryController.java

@@ -62,6 +62,17 @@ public class InquiryController {
 		logger.log("询价单", "上传询价单", inquiries.size());
 	}
 
+	/**
+	 * 买家在收到报价信息后,点击提交按钮后,状态传至平台,至此平台的供应商不能再对这张询价单进行报价
+	 * 
+	 * @param data
+	 */
+	@RequestMapping(value = "/checking", method = RequestMethod.POST)
+	@ResponseBody
+	public void checkInquiry(@RequestParam("data") String data) {
+		purchaseInquiryService.check(data);
+	}
+
 	/**
 	 * 买家ERP获取平台的报价信息
 	 * 

+ 18 - 16
src/main/java/com/uas/platform/b2b/erp/service/impl/PurchaseNotifyServiceImpl.java

@@ -36,12 +36,15 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 		List<PurchaseNotice> notices = new ArrayList<PurchaseNotice>();
 		for (PurchaseNotify notify : notifies) {
 			PurchaseNotice notice = notify.convert();
-			List<PurchaseOrderItem> orderItems = purchaseOrderItemDao.findByEnUUAndOrderCodeAndNumber(notice.getEnUU(), notice
-					.getOrderItem().getOrder().getCode(), notice.getOrderItem().getNumber());
-			if (!CollectionUtils.isEmpty(orderItems)) {
-				notice.setOrderItem(orderItems.get(0));
-				notice.setOrderItemId(notice.getOrderItem().getId());
-				notices.add(notice);
+			List<PurchaseNotice> existNotices = purchaseNoticeDao.findByEnUUAndSourceId(notice.getEnUU(), notice.getSourceId());
+			if (CollectionUtils.isEmpty(existNotices)) {// sourceId已存在不考虑
+				List<PurchaseOrderItem> orderItems = purchaseOrderItemDao.findByEnUUAndOrderCodeAndNumber(notice.getEnUU(), notice
+						.getOrderItem().getOrder().getCode(), notice.getOrderItem().getNumber());
+				if (!CollectionUtils.isEmpty(orderItems)) {
+					notice.setOrderItem(orderItems.get(0));
+					notice.setOrderItemId(notice.getOrderItem().getId());
+					notices.add(notice);
+				}
 			}
 		}
 		return notices;
@@ -95,16 +98,15 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 	 * 转收料单,增加客户收料数量
 	 */
 	@Override
-	public List<SaleSendItem> convertAcceptNotifyVerify(
-			List<AcceptNotifyVerify> verifies) {
+	public List<SaleSendItem> convertAcceptNotifyVerify(List<AcceptNotifyVerify> verifies) {
 		System.out.println("convert : " + verifies.size());
 		List<SaleSendItem> sendItems = new ArrayList<SaleSendItem>();
-		for(AcceptNotifyVerify verify : verifies) {
+		for (AcceptNotifyVerify verify : verifies) {
 			List<SaleSendItem> items = saleSendItemDao.findBySendAndNumber(verify.getB2b_ss_id(), verify.getAnd_detno());
-			if(items.size() > 0) {
+			if (items.size() > 0) {
 				SaleSendItem item = items.get(0);
 				Double verifyQty = (item.getVerifyQty() == null ? 0 : item.getVerifyQty()) + verify.getVad_qty();
-				if(verifyQty > item.getQty())
+				if (verifyQty > item.getQty())
 					verifyQty = item.getQty();
 				item.setVerifyQty(verifyQty);
 				sendItems.add(item);
@@ -117,15 +119,15 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 	 * 收料单反审核,减少客户收料数量
 	 */
 	@Override
-	public List<SaleSendItem> convertAcceptUnauditVerify(
-			List<AcceptNotifyVerify> verifies) {
+	public List<SaleSendItem> convertAcceptUnauditVerify(List<AcceptNotifyVerify> verifies) {
 		List<SaleSendItem> sendItems = new ArrayList<SaleSendItem>();
-		for(AcceptNotifyVerify verify : verifies) {
+		for (AcceptNotifyVerify verify : verifies) {
 			List<SaleSendItem> items = saleSendItemDao.findBySendAndNumber(verify.getB2b_ss_id(), verify.getAnd_detno());
-			if(items.size() > 0) {
+			if (items.size() > 0) {
 				SaleSendItem item = items.get(0);
 				Double verifyQty = (item.getVerifyQty() == null ? 0 : item.getVerifyQty()) - verify.getVad_qty();
-				if(verifyQty < 0) verifyQty = (double) 0;
+				if (verifyQty < 0)
+					verifyQty = (double) 0;
 				item.setVerifyQty(verifyQty);
 				sendItems.add(item);
 			}

+ 15 - 1
src/main/java/com/uas/platform/b2b/model/PurchaseInquiry.java

@@ -100,7 +100,7 @@ public class PurchaseInquiry implements Serializable {
 	 */
 	@Column(name = "in_remark")
 	private String remark;
-	
+
 	/**
 	 * 环保要求
 	 */
@@ -129,6 +129,12 @@ public class PurchaseInquiry implements Serializable {
 	@Where(clause = "rel_table = 'purc$inquiry'")
 	private Set<Attach> attachs;
 
+	/**
+	 * 客户已提交
+	 */
+	@Column(name = "in_checked")
+	private Short check;
+
 	public Long getId() {
 		return id;
 	}
@@ -243,4 +249,12 @@ public class PurchaseInquiry implements Serializable {
 		this.environment = environment;
 	}
 
+	public Short getCheck() {
+		return check;
+	}
+
+	public void setCheck(Short check) {
+		this.check = check;
+	}
+	
 }

+ 23 - 2
src/main/java/com/uas/platform/b2b/model/PurchaseInquiryItem.java

@@ -22,6 +22,9 @@ import org.codehaus.jackson.annotate.JsonIgnore;
 import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.uas.platform.b2b.core.util.DateUtils;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.Status;
 
 /**
  * 平台里面,以供应商的角度来查看采购询价单明细
@@ -139,13 +142,13 @@ public class PurchaseInquiryItem {
 	 */
 	@Column(name = "id_minpackqty")
 	private Double minPackQty;
-	
+
 	/**
 	 * (卖家报的)物料品牌
 	 */
 	@Column(name = "id_brand")
 	private String brand;
-	
+
 	/**
 	 * (卖家报的)供应商物料编号
 	 */
@@ -442,4 +445,22 @@ public class PurchaseInquiryItem {
 		}
 		return null;
 	}
+
+	/**
+	 * 是否可报价
+	 * <p>
+	 * 1.未报价
+	 * </p>
+	 * <p>
+	 * 2.已报价,未截止报价,客户未提交
+	 * </p>
+	 * 
+	 * @return
+	 */
+	public boolean isReplyable() {
+		return this.status == Status.NOT_REPLY.value()
+				|| (this.status == Status.REPLIED.value() && this.inquiry.getEndDate() != null
+						&& DateUtils.compare(this.inquiry.getEndDate(), new Date(), DateUtils.COMPARE_DAY) >= 0
+						&& (this.inquiry.getCheck() == null || this.inquiry.getCheck() != Constant.YES) && this.agreed == null);
+	}
 }

+ 7 - 0
src/main/java/com/uas/platform/b2b/service/PurchaseInquiryService.java

@@ -152,4 +152,11 @@ public interface PurchaseInquiryService {
 	 */
 	public List<PurchaseInquiryItem> findHistoryByItemId(Long itemId);
 
+	/**
+	 * 买家在收到报价信息后,点击提交按钮后,状态传至平台,至此平台的供应商不能再对这张询价单进行报价
+	 * 
+	 * @param sourceIds
+	 */
+	public void check(String sourceIds);
+
 }

+ 22 - 19
src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryServiceImpl.java

@@ -90,12 +90,11 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			String tittle = (item.getAgreed() == Constant.YES) ? "客户同意了您的报价" : "客户不同意您的报价";
 			if (item.getVendUserUU() != null) {
 				// Android
-				XingePusher.pushSingleAccountAndroid(item.getVendUserUU().toString(), tittle, "物料:"
-						+ item.getProduct().getTitle() + ",客户:" + inquiry.getEnterprise().getEnName(),
-						"com.sas.mobile.activity.PurchaseChangeActivity");
+				XingePusher.pushSingleAccountAndroid(item.getVendUserUU().toString(), tittle, "物料:" + item.getProduct().getTitle() + ",客户:"
+						+ inquiry.getEnterprise().getEnName(), "com.sas.mobile.activity.PurchaseChangeActivity");
 				// IOS
-				XingePusher.pushSingleAccountIOS(item.getVendUserUU().toString(), tittle + "物料:"
-						+ item.getProduct().getTitle() + ",客户:" + inquiry.getEnterprise().getEnName());
+				XingePusher.pushSingleAccountIOS(item.getVendUserUU().toString(), tittle + "物料:" + item.getProduct().getTitle() + ",客户:"
+						+ inquiry.getEnterprise().getEnName());
 			}
 		}
 	}
@@ -130,8 +129,8 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 				item.setBackStatus((short) Status.NOT_UPLOAD.value());
 				item.setReplySendStatus((short) Status.DOWNLOADED.value());
 				item.setRemark(String.valueOf(System.currentTimeMillis()));
-				item.setBrand(down.getQu_brand());//供应商物料品牌
-				item.setVendorprodcode(down.getQu_prodcode());//供应商物料编号
+				item.setBrand(down.getQu_brand());// 供应商物料品牌
+				item.setVendorprodcode(down.getQu_prodcode());// 供应商物料编号
 				if (!CollectionUtils.isEmpty(down.getDetails())) {
 					purchaseInquiryReplyDao.delete(item.getReplies());
 					Set<PurchaseInquiryReply> replies = new HashSet<PurchaseInquiryReply>();
@@ -148,11 +147,11 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 					// 消息推送
 					if (userUU != null && userUU != 0) {
 						// Android
-						XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复", "单号:"
-								+ item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "");
+						XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复",
+								"单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "");
 						// IOS
-						XingePusher.pushSingleAccountIOS(userUU.toString(), "询价单回复" + "单号:"
-								+ item.getInquiry().getCode() + ",第" + item.getNumber() + "行");
+						XingePusher.pushSingleAccountIOS(userUU.toString(),
+								"询价单回复" + "单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行");
 					}
 				}
 				purchaseInquiryItemDao.save(item);
@@ -200,8 +199,8 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 
 			public Predicate toPredicate(Root<PurchaseInquiryItem> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
 				if (StringUtils.hasText(keyword))
-					pageInfo.expression(PredicateUtils.in("id", purchaseInquiryItemIndexDao.findByKeyword(SystemSession
-							.getUser().getEnterprise().getUu(), keyword), false));
+					pageInfo.expression(PredicateUtils.in("id",
+							purchaseInquiryItemIndexDao.findByKeyword(SystemSession.getUser().getEnterprise().getUu(), keyword), false));
 				query.where(pageInfo.getPredicates(root, query, builder));
 				return null;
 			}
@@ -240,11 +239,11 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			// 消息推送
 			if (userUU != null && userUU != 0) {
 				// Android
-				XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复", "单号:" + item.getInquiry().getCode()
-						+ ",第" + item.getNumber() + "行", "");
+				XingePusher.pushSingleAccountAndroid(userUU.toString(), "询价单回复",
+						"单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "");
 				// IOS
-				XingePusher.pushSingleAccountIOS(userUU.toString(), "询价单回复" + "单号:" + item.getInquiry().getCode()
-						+ ",第" + item.getNumber() + "行");
+				XingePusher.pushSingleAccountIOS(userUU.toString(), "询价单回复" + "单号:" + item.getInquiry().getCode() + ",第" + item.getNumber()
+						+ "行");
 			}
 		}
 		return purchaseInquiryItemDao.save(inquiryItem);
@@ -277,8 +276,7 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 		if (!CollectionUtils.isEmpty(attachs)) {
 			long enUU = SystemSession.getUser().getEnterprise().getUu();
 			for (Attach attach : attachs) {
-				List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(enUU,
-						Long.parseLong(attach.getSourceId()));
+				List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(enUU, Long.parseLong(attach.getSourceId()));
 				if (!CollectionUtils.isEmpty(inquiries)) {
 					PurchaseInquiry inquiry = inquiries.get(0);
 					attach.setRelativeTable("purc$inquiry");
@@ -291,4 +289,9 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			attachDao.save(validAttachs);
 		}
 	}
+
+	@Override
+	public void check(String sourceIds) {
+		purchaseInquiryDao.updateByCheck(Constant.YES, SystemSession.getUser().getEnterprise().getUu(), sourceIds);
+	}
 }

+ 18 - 0
src/main/webapp/resources/tpl/index/sale/inquiry.html

@@ -425,6 +425,24 @@
 				<td class="text-center br-l">
 					<div ng-if="inquiryItem.status == 201 && inquiryItem.agreed == null" class="block">
 						<span class="text-trans warning">已报价</span>
+						<div ng-if="inquiryItem.replyable">
+							<div ng-show="!inquiryItem.$editing">
+								<a ng-click="inquiryItem.$editing=!inquiryItem.$editing">修 改<br>报 价</a>
+							</div>
+							<div ng-show="inquiryItem.$editing">
+								<div>
+									<a ng-click="inquiryItem.$editing=!inquiryItem.$editing">取消</a>
+								</div>
+								<div>
+									<button ng-click="onReplyClick(inquiryItem, true)"
+										ng-disabled="!isValid(inquiryItem, true)"
+										class="btn btn-link btn-xs text-inverse">
+										保存并<br>确认报价
+									</button>
+								</div>
+							</div>
+						</div>
+						<div ng-if="inquiryItem.inquiry.check == 1">价格正在审批...</div>
 					</div>
 					<div ng-if="inquiryItem.status == 201 && inquiryItem.agreed == 1" class="block">
 						<span class="text-trans success">报价已采纳</span>