Browse Source

消息事件新增;客户分配功能修改,新增客户转移功能。

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@10627 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
dongbw 8 years ago
parent
commit
f985e16806
59 changed files with 2303 additions and 895 deletions
  1. 70 0
      src/main/java/com/uas/platform/b2b/controller/UserController.java
  2. 17 0
      src/main/java/com/uas/platform/b2b/dao/DistributeDao.java
  3. 10 0
      src/main/java/com/uas/platform/b2b/dao/PagingReleaseDetailDao.java
  4. 12 24
      src/main/java/com/uas/platform/b2b/erp/controller/InquiryMouldController.java
  5. 1 1
      src/main/java/com/uas/platform/b2b/erp/controller/PurchaseNotifyController.java
  6. 4 9
      src/main/java/com/uas/platform/b2b/erp/model/APCheck.java
  7. 12 2
      src/main/java/com/uas/platform/b2b/erp/model/PurchaseDetail.java
  8. 7 7
      src/main/java/com/uas/platform/b2b/erp/service/impl/APCheckServiceImpl.java
  9. 1 1
      src/main/java/com/uas/platform/b2b/erp/service/impl/TenderServiceImpl.java
  10. 63 0
      src/main/java/com/uas/platform/b2b/event/MakeAcceptSaveReleaseEvent.java
  11. 63 0
      src/main/java/com/uas/platform/b2b/event/PurchaseAcceptSaveReleaseEvent.java
  12. 67 0
      src/main/java/com/uas/platform/b2b/event/PurchaseApCheckReplyReleaseEvent.java
  13. 1 1
      src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemDecideReleaseEvent.java
  14. 1 1
      src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemInvalidReleaseEvent.java
  15. 2 2
      src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemReplyReleaseEvent.java
  16. 1 1
      src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemSaveReleaseEvent.java
  17. 67 0
      src/main/java/com/uas/platform/b2b/event/PurchaseInquiryMouldInvalidReleaseEvent.java
  18. 78 0
      src/main/java/com/uas/platform/b2b/event/PurchaseInquiryMouldReplyReleaseEvent.java
  19. 68 0
      src/main/java/com/uas/platform/b2b/event/PurchaseInquiryMouldSaveReleaseEvent.java
  20. 53 0
      src/main/java/com/uas/platform/b2b/event/PurchaseProofingApprovalSaveReleaseEvent.java
  21. 72 0
      src/main/java/com/uas/platform/b2b/event/PurchaseProofingItemSaveReleaseEvent.java
  22. 68 0
      src/main/java/com/uas/platform/b2b/event/PurchaseTenderDecideReleaseEvent.java
  23. 66 0
      src/main/java/com/uas/platform/b2b/event/PurchaseTenderSaveReleaseEvent.java
  24. 62 0
      src/main/java/com/uas/platform/b2b/event/SaleSendAcceptReleaseEvent.java
  25. 61 0
      src/main/java/com/uas/platform/b2b/event/SaleSendRefuseReleaseEvent.java
  26. 12 8
      src/main/java/com/uas/platform/b2b/listener/MessageListener.java
  27. 4 4
      src/main/java/com/uas/platform/b2b/mobile/service/impl/MobileReleaseServiceImpl.java
  28. 15 1
      src/main/java/com/uas/platform/b2b/model/Distribute.java
  29. 15 11
      src/main/java/com/uas/platform/b2b/model/MakeAccept.java
  30. 1 1
      src/main/java/com/uas/platform/b2b/model/MakeReturnItem.java
  31. 15 7
      src/main/java/com/uas/platform/b2b/model/PagingRelease.java
  32. 17 20
      src/main/java/com/uas/platform/b2b/model/PagingReleaseDetail.java
  33. 14 0
      src/main/java/com/uas/platform/b2b/model/PurcOrderInfoItem.java
  34. 14 0
      src/main/java/com/uas/platform/b2b/model/PurchaseApCheck.java
  35. 538 525
      src/main/java/com/uas/platform/b2b/model/PurchaseInquiryMould.java
  36. 15 0
      src/main/java/com/uas/platform/b2b/model/PurchaseProofingItem.java
  37. 55 17
      src/main/java/com/uas/platform/b2b/model/SaleSend.java
  38. 17 18
      src/main/java/com/uas/platform/b2b/model/SaleSendItem.java
  39. 52 6
      src/main/java/com/uas/platform/b2b/model/SaleTender.java
  40. 14 0
      src/main/java/com/uas/platform/b2b/model/User.java
  41. 5 6
      src/main/java/com/uas/platform/b2b/model/UserInfo.java
  42. 3 12
      src/main/java/com/uas/platform/b2b/service/PurchaseInquiryMouldService.java
  43. 32 1
      src/main/java/com/uas/platform/b2b/service/UserService.java
  44. 19 18
      src/main/java/com/uas/platform/b2b/service/impl/MakeAcceptServiceImpl.java
  45. 17 41
      src/main/java/com/uas/platform/b2b/service/impl/MakeOrderChangeServiceImpl.java
  46. 17 20
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseAcceptServiceImpl.java
  47. 4 3
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseApCheckServiceImpl.java
  48. 22 9
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryMouldServiceImpl.java
  49. 14 6
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseNoticeServiceImpl.java
  50. 5 3
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderChangeServiceImpl.java
  51. 24 20
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseProofingServiceImpl.java
  52. 31 52
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java
  53. 91 5
      src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java
  54. 17 1
      src/main/webapp/resources/js/common/services.js
  55. 204 28
      src/main/webapp/resources/js/index/app.js
  56. 1 1
      src/main/webapp/resources/tpl/index/account/add_userInfo.html
  57. 69 0
      src/main/webapp/resources/tpl/index/account/transfer_userInfo.html
  58. 1 1
      src/main/webapp/resources/tpl/index/baseInfo/myRequest.html
  59. 2 1
      src/main/webapp/resources/tpl/index/sale/customer.html

+ 70 - 0
src/main/java/com/uas/platform/b2b/controller/UserController.java

@@ -282,6 +282,12 @@ public class UserController {
 		}
 		}
 	}
 	}
 
 
+	/**
+	 * 将用户绑定到供应商
+	 * @param custUU
+	 * @param json
+	 * @return
+	 */
 	@RequestMapping(value = "/bindUserToVendor/{uu}", method = RequestMethod.POST)
 	@RequestMapping(value = "/bindUserToVendor/{uu}", method = RequestMethod.POST)
 	@ResponseBody
 	@ResponseBody
 	public ResponseEntity<String> bindUserToVendor(@PathVariable("uu") Long custUU, @RequestBody String json) {
 	public ResponseEntity<String> bindUserToVendor(@PathVariable("uu") Long custUU, @RequestBody String json) {
@@ -294,6 +300,41 @@ public class UserController {
 		}
 		}
 	}
 	}
 
 
+	/**
+	 * 将客户权限转移给用户(管理员操作)
+	 * @param custUU
+	 * @param json
+	 * @return
+	 */
+	@RequestMapping(value = "/transferUserToVendor/{uu}", method = RequestMethod.POST)
+	@ResponseBody
+	public ResponseEntity<String> transferUserToVendor(@PathVariable("uu") Long custUU, @RequestBody String json) {
+		List<User> users = FlexJsonUtils.fromJsonArray(json, User.class);
+		boolean result = userService.transferUserToVendor(custUU, users);
+		if (result) {
+			return new ResponseEntity<String>(HttpStatus.OK);
+		} else {
+			return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * 将客户权限转移给用户(有权限的用户操作)
+	 * @param custUU
+	 * @param userUU
+	 * @return
+	 */
+	@RequestMapping(value = "/transferMyDistribute", method = RequestMethod.POST)
+	@ResponseBody
+	public ResponseEntity<String> transferMyDistribute(Long custUU, Long userUU) {
+		boolean result = userService.transferMyDistribute(custUU, userUU);
+		if (result) {
+			return new ResponseEntity<String>(HttpStatus.OK);
+		} else {
+			return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
 	/**
 	/**
 	 * 为用户分配客户权限,删除被选中客户(管理员才能操作)
 	 * 为用户分配客户权限,删除被选中客户(管理员才能操作)
 	 * 
 	 * 
@@ -337,6 +378,35 @@ public class UserController {
 		return userService.findDistribute();
 		return userService.findDistribute();
 	}
 	}
 
 
+
+	/**
+	 * 查询当前登录用户是否被转移权限
+	 *
+	 * @return
+	 */
+	@RequestMapping(value = "/getEnTransfer/{custUU}", method = RequestMethod.GET)
+	@ResponseBody
+	public ModelMap getEnTransfer(@PathVariable("custUU") Long custUU) {
+		Boolean result = userService.getEnTransfer(custUU);
+		ModelMap modelMap = new ModelMap();
+		modelMap.put("result", result);
+		return  modelMap;
+	}
+
+    /**
+     * 查询当前登录用户是否被分配权限
+     *
+     * @return
+     */
+    @RequestMapping(value = "/getDistribute/{custUU}", method = RequestMethod.GET)
+    @ResponseBody
+    public ModelMap getDistribute(@PathVariable("custUU") Long custUU) {
+        Boolean result = userService.getDistribute(custUU);
+		ModelMap modelMap = new ModelMap();
+		modelMap.put("result", result);
+		return  modelMap;
+    }
+
 	/**
 	/**
 	 * 发送手机验证码验证手机号
 	 * 发送手机验证码验证手机号
 	 * 
 	 * 

+ 17 - 0
src/main/java/com/uas/platform/b2b/dao/DistributeDao.java

@@ -30,4 +30,21 @@ public interface DistributeDao extends JpaSpecificationExecutor<Distribute>, Gen
 	List<Distribute> findByVendorId(Long vendorId);
 	List<Distribute> findByVendorId(Long vendorId);
 
 
     Distribute findByVendorIdAndIsTransfer(Long vendorId, short yes);
     Distribute findByVendorIdAndIsTransfer(Long vendorId, short yes);
+
+	/**
+	 * 查找被当前用户绑定当前客户权限的记录
+	 * @param id
+	 * @param userUU
+	 * @return
+	 */
+	List<Distribute> findByVendorIdAndLeaderUU(Long id, Long userUU);
+
+	/**
+	 * 根据用户uu和供应商关系id查找转移权限记录
+	 * @param userUU
+	 * @param id
+	 * @param yes
+	 * @return
+	 */
+	Distribute findByUserUUAndVendorIdAndIsTransfer(Long userUU, Long id, short yes);
 }
 }

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

@@ -41,6 +41,16 @@ public interface PagingReleaseDetailDao extends JpaRepository<PagingReleaseDetai
     @Query("update PagingReleaseDetail o set o.readStatus = 1 where o.vendUserUU = :vendUseruu and o.vendUU = :venduu and o.pagingRelease in (select p from PagingRelease p where p.sourceId in :sourceId)")
     @Query("update PagingReleaseDetail o set o.readStatus = 1 where o.vendUserUU = :vendUseruu and o.vendUU = :venduu and o.pagingRelease in (select p from PagingRelease p where p.sourceId in :sourceId)")
     void setReadByVendUserUUAndVendUUAndSourceId(@Param("vendUseruu") Long vendUseruu, @Param("venduu") Long venduu, @Param("sourceId") Long[] sourceId);
     void setReadByVendUserUUAndVendUUAndSourceId(@Param("vendUseruu") Long vendUseruu, @Param("venduu") Long venduu, @Param("sourceId") Long[] sourceId);
 
 
+    /**
+     * 将消息设置成已推送
+     *
+     * @param ids
+     */
+    @Modifying
+    @Query("update PagingReleaseDetail o set o.pushStatus = 1 where o.id in :ids")
+    void setPushedByIds(@Param("ids") Object[] ids);
+
+
     /**
     /**
      * 获得未读消息的单据id
      * 获得未读消息的单据id
      *
      *

+ 12 - 24
src/main/java/com/uas/platform/b2b/erp/controller/InquiryMouldController.java

@@ -1,30 +1,27 @@
 package com.uas.platform.b2b.erp.controller;
 package com.uas.platform.b2b.erp.controller;
 
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
 import com.uas.platform.b2b.erp.model.InquiryMould;
 import com.uas.platform.b2b.erp.model.InquiryMould;
 import com.uas.platform.b2b.erp.model.InquiryMouldDecide;
 import com.uas.platform.b2b.erp.model.InquiryMouldDecide;
 import com.uas.platform.b2b.erp.service.InquiryMouldService;
 import com.uas.platform.b2b.erp.service.InquiryMouldService;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.model.Attach;
 import com.uas.platform.b2b.model.Attach;
 import com.uas.platform.b2b.model.FileUpload;
 import com.uas.platform.b2b.model.FileUpload;
-import com.uas.platform.b2b.model.PurchaseInquiryMould;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.PurchaseInquiryMouldService;
 import com.uas.platform.b2b.service.PurchaseInquiryMouldService;
-import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.util.ArrayUtils;
 import com.uas.platform.core.util.ArrayUtils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * 对买家ERP数据接口<br>
  * 对买家ERP数据接口<br>
@@ -145,16 +142,7 @@ public class InquiryMouldController {
 	public void onInvalid(@RequestParam("data") String data) throws UnsupportedEncodingException {
 	public void onInvalid(@RequestParam("data") String data) throws UnsupportedEncodingException {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		List<InquiryMould> inquiryMoulds = FlexJsonUtils.fromJsonArray(jsonStr, InquiryMould.class);
 		List<InquiryMould> inquiryMoulds = FlexJsonUtils.fromJsonArray(jsonStr, InquiryMould.class);
-		for (InquiryMould inquiryMould : inquiryMoulds) {
-			// 因为存在还未报价就作废单据的情况,所以不能用b2b_im_id,而用in_id来查找单据
-			if (null != inquiryMould.getIn_id()) {
-				PurchaseInquiryMould purchaseInquiryMould = purchaseInquiryMouldService
-						.findByEnuuAndErpSourceId(SystemSession.getUser().getEnterprise().getUu(),inquiryMould.getIn_id());
-				if (null != purchaseInquiryMould) {
-					purchaseInquiryMouldService.onInvalid(purchaseInquiryMould);
-				}
-			}
-		}
+		purchaseInquiryMouldService.onInvalid(inquiryMoulds);
 		logger.log("模具询价单", "作废模具询价单", inquiryMoulds.size());
 		logger.log("模具询价单", "作废模具询价单", inquiryMoulds.size());
 	}
 	}
 
 

+ 1 - 1
src/main/java/com/uas/platform/b2b/erp/controller/PurchaseNotifyController.java

@@ -217,7 +217,7 @@ public class PurchaseNotifyController {
 	}
 	}
 
 
 	/**
 	/**
-	 * 买家修改收料通知的数量后,写回到平台
+	 * 买家修改收料通知的数量后,写回到平台(UAS点全部拒收)
 	 * 
 	 * 
 	 * @return
 	 * @return
 	 * @throws UnsupportedEncodingException
 	 * @throws UnsupportedEncodingException

+ 4 - 9
src/main/java/com/uas/platform/b2b/erp/model/APCheck.java

@@ -1,15 +1,10 @@
 package com.uas.platform.b2b.erp.model;
 package com.uas.platform.b2b.erp.model;
 
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.springframework.util.CollectionUtils;
-
 import com.uas.platform.b2b.model.PurchaseApCheck;
 import com.uas.platform.b2b.model.PurchaseApCheck;
 import com.uas.platform.b2b.model.PurchaseApCheckItem;
 import com.uas.platform.b2b.model.PurchaseApCheckItem;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
 
 
 
 
 /**
 /**
@@ -38,7 +33,7 @@ public class APCheck{
 	private String ac_confirmstatus;//客户回复状态 #
 	private String ac_confirmstatus;//客户回复状态 #
 	private List<APCheckDetail> details; // 明细
 	private List<APCheckDetail> details; // 明细
 	private String ac_reason;//回复平台原因
 	private String ac_reason;//回复平台原因
-	
+
 	public String getAc_reason() {
 	public String getAc_reason() {
 		return ac_reason;
 		return ac_reason;
 	}
 	}

+ 12 - 2
src/main/java/com/uas/platform/b2b/erp/model/PurchaseDetail.java

@@ -1,12 +1,12 @@
 package com.uas.platform.b2b.erp.model;
 package com.uas.platform.b2b.erp.model;
 
 
-import java.util.Date;
-
 import com.uas.platform.b2b.model.Product;
 import com.uas.platform.b2b.model.Product;
 import com.uas.platform.b2b.model.PurcOrderInfoItem;
 import com.uas.platform.b2b.model.PurcOrderInfoItem;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 
 
+import java.util.Date;
+
 /**
 /**
  * ERP系统的采购订单明细
  * ERP系统的采购订单明细
  * 
  * 
@@ -25,6 +25,7 @@ public class PurchaseDetail {
 	private short pd_detno;
 	private short pd_detno;
 	private String pd_factory;
 	private String pd_factory;
 	private String pd_vendspec;
 	private String pd_vendspec;
+	private Integer pd_beipin;
 
 
 	public String getPd_vendspec() {
 	public String getPd_vendspec() {
 		return pd_vendspec;
 		return pd_vendspec;
@@ -106,6 +107,14 @@ public class PurchaseDetail {
 		this.pd_detno = pd_detno;
 		this.pd_detno = pd_detno;
 	}
 	}
 
 
+	public Integer getPd_beipin() {
+		return pd_beipin;
+	}
+
+	public void setPd_beipin(Integer pd_beipin) {
+		this.pd_beipin = pd_beipin;
+	}
+
 	/**
 	/**
 	 * 转为平台的采购订单明细
 	 * 转为平台的采购订单明细
 	 * 
 	 * 
@@ -126,6 +135,7 @@ public class PurchaseDetail {
 		product.setCode(this.pd_prodcode);
 		product.setCode(this.pd_prodcode);
 		product.setEnUU(SystemSession.getUser().getEnterprise().getUu());
 		product.setEnUU(SystemSession.getUser().getEnterprise().getUu());
 		item.setProduct(product);
 		item.setProduct(product);
+		item.setBeipin(this.pd_beipin);
 		return item;
 		return item;
 	}
 	}
 
 

+ 7 - 7
src/main/java/com/uas/platform/b2b/erp/service/impl/APCheckServiceImpl.java

@@ -1,12 +1,5 @@
 package com.uas.platform.b2b.erp.service.impl;
 package com.uas.platform.b2b.erp.service.impl;
 
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-
 import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.erp.model.APCheck;
 import com.uas.platform.b2b.erp.model.APCheck;
 import com.uas.platform.b2b.erp.service.APCheckService;
 import com.uas.platform.b2b.erp.service.APCheckService;
@@ -14,6 +7,12 @@ import com.uas.platform.b2b.model.PurchaseApCheck;
 import com.uas.platform.b2b.model.PurchaseApCheckItem;
 import com.uas.platform.b2b.model.PurchaseApCheckItem;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.exception.IllegalStatusException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
 
 
 @Service
 @Service
 public class APCheckServiceImpl implements APCheckService {
 public class APCheckServiceImpl implements APCheckService {
@@ -41,6 +40,7 @@ public class APCheckServiceImpl implements APCheckService {
 					PurchaseApCheck apcheckb2b = existChecks.get(0);
 					PurchaseApCheck apcheckb2b = existChecks.get(0);
 					apcheckb2b.setCheckStatus(apCheck.getAc_confirmstatus());
 					apcheckb2b.setCheckStatus(apCheck.getAc_confirmstatus());
 					apcheckb2b.setCustreply(apCheck.getAc_reason());
 					apcheckb2b.setCustreply(apCheck.getAc_reason());
+					apcheckb2b.setReason(apCheck.getAc_reason());
 					if (apCheck.getAc_code() != null && apcheckb2b.getStatus() == 203) {
 					if (apCheck.getAc_code() != null && apcheckb2b.getStatus() == 203) {
 						if (apCheck.getAc_confirmstatus().equals("未对账")) {
 						if (apCheck.getAc_confirmstatus().equals("未对账")) {
 							throw new IllegalStatusException("已提交,不能重复提交");
 							throw new IllegalStatusException("已提交,不能重复提交");

+ 1 - 1
src/main/java/com/uas/platform/b2b/erp/service/impl/TenderServiceImpl.java

@@ -593,7 +593,7 @@ public class TenderServiceImpl implements TenderService {
                             if (null == saleTender) {
                             if (null == saleTender) {
                                 saleTender = new SaleTender(tender, contactInfo);
                                 saleTender = new SaleTender(tender, contactInfo);
                                 saleTender.setVendUU(enBaseInfo.getUu());
                                 saleTender.setVendUU(enBaseInfo.getUu());
-                                saleTender.setEnterpriseBaseInfo(enBaseInfo); // 投标单主表构造完毕
+                                saleTender.setVendor(enBaseInfo); // 投标单主表构造完毕
                                 saleTenderDao.save(saleTender);
                                 saleTenderDao.save(saleTender);
                                 saveUserOrders(saleTender, tender);
                                 saveUserOrders(saleTender, tender);
                             }
                             }

+ 63 - 0
src/main/java/com/uas/platform/b2b/event/MakeAcceptSaveReleaseEvent.java

@@ -0,0 +1,63 @@
+package com.uas.platform.b2b.event;
+
+import com.uas.platform.b2b.model.MakeAccept;
+import com.uas.platform.b2b.model.PagingRelease;
+import com.uas.platform.b2b.model.PagingReleaseDetail;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 委外验收单在平台保存时生成消息事件
+ *
+ */
+public class MakeAcceptSaveReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, MakeAccept> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public MakeAcceptSaveReleaseEvent(List<MakeAccept> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param accept
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(MakeAccept accept) {
+        String emName = accept.getRecorder();
+        Long enUU = accept.getEnUU();
+        Date date = new Date();
+        String codeValue = accept.getCode();
+        String from = "B2B";
+        if (accept.getErpId() != null) { // erp传到平台的单据,包含erpId字段记录来源
+            from = "ERP";
+        }
+        String type = "新增委外验收单";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "make$accept";
+        Long sourceId = accept.getId();
+        String url = "#/sale/makeaccept";
+        String context;
+        if (null != accept.getSendCode()) {
+            context = accept.getEnterprise().getEnName() + "的" + emName + "签收了您送货单(" + accept.getSendCode() + ")的产品!委外验收单号:" + codeValue;
+        } else {
+            context = accept.getEnterprise().getEnName() + "的" + emName + "签收了您的产品!委外验收单号:" + codeValue;
+        }
+        PagingRelease release = new PagingRelease(null, emName, enUU, date, codeValue, from, title, context, type, isReply,
+                category, table, sourceId, null, toVendor, url);
+        Long vendUU = accept.getVendUU();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, null, null);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 63 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseAcceptSaveReleaseEvent.java

@@ -0,0 +1,63 @@
+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.PurchaseAccept;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 采购验收单在平台保存时生成消息事件
+ *
+ */
+public class PurchaseAcceptSaveReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseAccept> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseAcceptSaveReleaseEvent(List<PurchaseAccept> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param accept
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(PurchaseAccept accept) {
+        String emName = accept.getRecorder();
+        Long enUU = accept.getEnUU();
+        Date date = new Date();
+        String codeValue = accept.getCode();
+        String from = "B2B";
+        if (accept.getErpId() != null) { // erp传到平台的单据,包含erpId字段记录来源
+            from = "ERP";
+        }
+        String type = "新增采购验收单";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "purc$accept";
+        Long sourceId = accept.getId();
+        String url = "#/sale/accept/" + accept.getId();
+        String context;
+        if (null != accept.getSendCode()) {
+            context = accept.getEnterprise().getEnName() + "的" + emName + "签收了您送货单(" + accept.getSendCode() + ")的产品!采购验收单号:" + codeValue;
+        } else {
+            context = accept.getEnterprise().getEnName() + "的" + emName + "签收了您的产品!采购验收单号:" + codeValue;
+        }
+        PagingRelease release = new PagingRelease(null, emName, enUU, date, codeValue, from, title, context, type, isReply,
+                category, table, sourceId, null, toVendor, url);
+        Long vendUU = accept.getVendUU();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, null, null);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 67 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseApCheckReplyReleaseEvent.java

@@ -0,0 +1,67 @@
+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.PurchaseApCheck;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * UAS确认或不同意对账单时生成消息事件
+ *
+ */
+public class PurchaseApCheckReplyReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseApCheck> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseApCheckReplyReleaseEvent(List<PurchaseApCheck> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param apCheck
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(PurchaseApCheck apCheck) {
+        Long enUU = apCheck.getCustUu();
+        Date date = new Date();
+        String codeValue = apCheck.getCode();
+        String from = "ERP";
+        String type = "确认对账单";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.YES;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "purc$apcheck";
+        Long sourceId = apCheck.getId();
+        String url = "#/sale/apCheck/" + apCheck.getId();
+        String context = "";
+        if ("已确认".equals(apCheck.getCheckStatus())) {
+            context = apCheck.getCustName() + "确认了您发出的对账单(" + codeValue + ")!";
+        } else if ("不同意".equals(apCheck.getCheckStatus())) {
+            context = apCheck.getCustName() + "因为" + apCheck.getReason() + "退回了您发出的对账单(" + codeValue + ")!";
+        } else if ("未确认".equals(apCheck.getCheckStatus())) {
+            context = apCheck.getCustName() + "取消确认了您发出的对账单(" + codeValue + ")!";
+        } else if ("已作废".equals(apCheck.getCheckStatus())) {
+            context = apCheck.getCustName() + "作废了您发出的对账单(" + codeValue + ")!";
+        }
+        PagingRelease release = new PagingRelease(null, null, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, null, toVendor, url);
+        Long vendUU = apCheck.getEnUu();
+        Long vendUserUU = apCheck.getRecorderUU();
+        if (null == vendUserUU) {
+            vendUserUU = 1L;
+        }
+        String vendUserName = apCheck.getRecorder();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 1 - 1
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemDecideReleaseEvent.java

@@ -56,7 +56,7 @@ public class PurchaseInquiryItemDecideReleaseEvent extends SaveReleaseEvent<Pagi
         }
         }
         Short isReply = Constant.NO;
         Short isReply = Constant.NO;
         String category = "sale";
         String category = "sale";
-        String table = "purc$inquiryitems";
+        String table = "v$purc$inquiryitems";
         Long sourceId = inquiryItem.getId();
         Long sourceId = inquiryItem.getId();
         Short orderStatus = inquiryItem.getStatus();
         Short orderStatus = inquiryItem.getStatus();
         Short toVendor = Constant.YES;
         Short toVendor = Constant.YES;

+ 1 - 1
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemInvalidReleaseEvent.java

@@ -51,7 +51,7 @@ public class PurchaseInquiryItemInvalidReleaseEvent extends SaveReleaseEvent<Pag
         String context = inquiryItem.getInquiry().getEnterprise().getEnName() + "的" + emName + "作废了询价单(" + codeValue + ")!";
         String context = inquiryItem.getInquiry().getEnterprise().getEnName() + "的" + emName + "作废了询价单(" + codeValue + ")!";
         Short isReply = Constant.NO;
         Short isReply = Constant.NO;
         String category = "sale";
         String category = "sale";
-        String table = "purc$inquiryitems";
+        String table = "v$purc$inquiryitems";
         Long sourceId = inquiryItem.getId();
         Long sourceId = inquiryItem.getId();
         Short orderStatus = inquiryItem.getStatus();
         Short orderStatus = inquiryItem.getStatus();
         Short toVendor = Constant.YES;
         Short toVendor = Constant.YES;

+ 2 - 2
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemReplyReleaseEvent.java

@@ -48,11 +48,11 @@ public class PurchaseInquiryItemReplyReleaseEvent extends SaveReleaseEvent<Pagin
         String context = enName + "的" + emName + "回复了询价单(" + codeValue + ")的报价,请及时确认!";
         String context = enName + "的" + emName + "回复了询价单(" + codeValue + ")的报价,请及时确认!";
         Short isReply = Constant.YES;
         Short isReply = Constant.YES;
         String category = "purc";
         String category = "purc";
-        String table = "purc$inquiryitems";
+        String table = "v$purc$inquiryitems";
         Long sourceId = inquiryItem.getId();
         Long sourceId = inquiryItem.getId();
         Short orderStatus = inquiryItem.getStatus();
         Short orderStatus = inquiryItem.getStatus();
         Short toVendor = Constant.NO;
         Short toVendor = Constant.NO;
-        String url = "#/purc/inquiry/" + inquiryItem.getInquiry().getId();
+        String url = "#/purc/purcinquirydetail/" + inquiryItem.getInquiry().getId();
         PagingRelease release = new PagingRelease(emUU, emName, vendUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
         PagingRelease release = new PagingRelease(emUU, emName, vendUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
         Long enUU = inquiryItem.getInquiry().getEnUU();
         Long enUU = inquiryItem.getInquiry().getEnUU();
         Long userUU = inquiryItem.getUserUU();
         Long userUU = inquiryItem.getUserUU();

+ 1 - 1
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemSaveReleaseEvent.java

@@ -49,7 +49,7 @@ public class PurchaseInquiryItemSaveReleaseEvent extends SaveReleaseEvent<Paging
         }
         }
         Short isReply = Constant.NO;
         Short isReply = Constant.NO;
         String category = "sale";
         String category = "sale";
-        String table = "purc$inquiryitems";
+        String table = "v$purc$inquiryitems";
         Long sourceId = inquiryItem.getId();
         Long sourceId = inquiryItem.getId();
         Short orderStatus = inquiryItem.getStatus();
         Short orderStatus = inquiryItem.getStatus();
         Short toVendor = Constant.YES;
         Short toVendor = Constant.YES;

+ 67 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryMouldInvalidReleaseEvent.java

@@ -0,0 +1,67 @@
+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.PurchaseInquiryMould;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 模具询价单作废时生成消息事件
+ */
+public class PurchaseInquiryMouldInvalidReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseInquiryMould> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseInquiryMouldInvalidReleaseEvent(List<PurchaseInquiryMould> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param mould
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(PurchaseInquiryMould mould) {
+        //TODO 保存新订单之后,触发新增消息事件。
+        Long emUU = mould.getRecorderuu();
+        if (null == emUU) {
+            emUU = 1L;
+        }
+        String emName = mould.getRecorder();
+        Long enUU = mould.getEnuu();
+        Date date = new Date();
+        String codeValue = mould.getCode();
+        String from = "B2B";
+        if (mould.getErpSourceId() != null) { // erp传到平台的单据,包含erpId字段记录来源
+            from = "ERP";
+        }
+        String type = "作废模具询价单";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "v$purc$inquiry_mould";
+        Long sourceId = mould.getId();
+        String url = "#/sale/mould/" + mould.getId();
+        Short orderStatus = mould.getStatus();
+        String context = mould.getEnterprise().getEnName() + "的" + emName + "作废了模具询价单(" + codeValue + ")!";
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
+        Long vendUU = mould.getVenduu();
+        Long vendUserUU = mould.getVendUserUU();
+        if (null == vendUserUU) {
+            vendUserUU = 1L;
+        }
+        String vendUserName = mould.getVendUser().getUserName();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 78 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryMouldReplyReleaseEvent.java

@@ -0,0 +1,78 @@
+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.PurchaseInquiryMould;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 回复模具询价单时生成消息事件
+ * Created by dongbw
+ */
+public class PurchaseInquiryMouldReplyReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseInquiryMould> {
+
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseInquiryMouldReplyReleaseEvent(List<PurchaseInquiryMould> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param mould
+     * @return
+     */
+    @Override
+    public PagingReleaseDetail release(PurchaseInquiryMould mould) {
+        // 回复订单的话,跟新增订单是相反的,所以接收人是user,发出人是vendUser
+        Long emUU = mould.getVendUserUU();
+        String emName = "操作员";
+        if (null == emUU) {
+            emUU = 1L;
+        } else {
+            emName = mould.getVendUser().getUserName();
+        }
+        Long vendUU = mould.getVenduu();
+        Date date = new Date();
+        String codeValue = mould.getCode();
+        String from = "B2B";
+        String type = "回复模具询价单";
+        String title = "B2B商务提醒";
+        String enName = mould.getEnterprise().getEnName();
+        Short isReply = Constant.YES;
+        String category = "purc";
+        String table = "v$purc$inquiry_mould";
+        Long sourceId = mould.getId();
+        // 根据状态判断是修改报价,还是第一次回复报价
+        Short orderStatus = mould.getStatus();
+        String context;
+        if (orderStatus == 201) {
+            context = enName + "的" + emName + "回复了模具询价单(" + codeValue + ")的单价,请及时确认!";
+        } else {
+            context = enName + "的" + emName + "修改了模具询价单(" + codeValue + ")的单价,请及时确认!";
+        }
+        Short toVendor = Constant.NO;
+        String url = "#/purc/mould/" + mould.getId();
+        PagingRelease release = new PagingRelease(emUU, emName, vendUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
+        Long enUU = mould.getEnuu();
+        Long userUU = mould.getUseruu();
+        String userName = "操作员";
+        if (null == userUU) {
+           userUU = 1L;
+        }
+        if (null != mould.getRecorder()) {
+            userName = mould.getRecorder();
+        }
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(enUU, userUU, userName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 68 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryMouldSaveReleaseEvent.java

@@ -0,0 +1,68 @@
+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.PurchaseInquiryMould;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 模具询价单保存时生成消息事件
+ */
+public class PurchaseInquiryMouldSaveReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseInquiryMould> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseInquiryMouldSaveReleaseEvent(List<PurchaseInquiryMould> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param mould
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(PurchaseInquiryMould mould) {
+        //TODO 保存新订单之后,触发新增消息事件。
+        Long emUU = mould.getRecorderuu();
+        if (null == emUU) {
+            emUU = 1L;
+        }
+        String emName = mould.getRecorder();
+        Long enUU = mould.getEnuu();
+        Date date = new Date();
+        String codeValue = mould.getCode();
+        String from = "B2B";
+        if (mould.getErpSourceId() != null) { // erp传到平台的单据,包含erpId字段记录来源
+            from = "ERP";
+        }
+        String type = "新增模具询价单";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "v$purc$inquiry_mould";
+        Long sourceId = mould.getId();
+        String url = "#/sale/mould/" + mould.getId();
+        Short orderStatus = mould.getStatus();
+        String context = mould.getEnterprise().getEnName() + "的" + emName + "给您发送了模具询价单(" + codeValue + ")!";
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
+        Long vendUU = mould.getVenduu();
+        Long vendUserUU = mould.getVendUserUU();
+        String vendUserName = "业务员";
+        if (null == vendUserUU) {
+            vendUserUU = 1L;
+            vendUserName = mould.getVendUser().getUserName();
+        }
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 53 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseProofingApprovalSaveReleaseEvent.java

@@ -0,0 +1,53 @@
+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.PurchaseProofingApproval;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 客户认定单保存时生成消息事件
+ */
+public class PurchaseProofingApprovalSaveReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseProofingApproval> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseProofingApprovalSaveReleaseEvent(List<PurchaseProofingApproval> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param approval
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(PurchaseProofingApproval approval) {
+        String emName = approval.getRecordor();
+        Long enUU = approval.getEnUU();
+        Date date = new Date();
+        String codeValue = approval.getCode();
+        String from = "ERP";
+        String type = "新增认定单";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "purc$proofingapproval";
+        Long sourceId = approval.getId();
+        String url = "#/sale/approval";
+        String context = approval.getEnterprise().getEnName() + "已经对物料“" + approval.getProdDetail() + " " + approval.getProdSpec() + "”进行了认定!";
+        PagingRelease release = new PagingRelease(null, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, null, toVendor, url);
+        Long vendUU = approval.getVendUU();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, null, null);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 72 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseProofingItemSaveReleaseEvent.java

@@ -0,0 +1,72 @@
+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.PurchaseProofing;
+import com.uas.platform.b2b.model.PurchaseProofingItem;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 打样申请单保存时生成消息事件
+ *
+ * Created by dongbw
+ *
+ */
+public class PurchaseProofingItemSaveReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, PurchaseProofingItem> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseProofingItemSaveReleaseEvent(List<PurchaseProofingItem> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param proofingItem
+     * @return
+     */
+    @Override
+    public PagingReleaseDetail release(PurchaseProofingItem proofingItem) {
+        PurchaseProofing proofing = proofingItem.getProofing();
+        Long emUU = proofing.getUserUU();
+        if (null == emUU) {
+            emUU = 1L;
+        }
+        String emName = proofing.getRecorder();
+        Long enUU = proofing.getEnUU();
+        Date date = new Date();
+        String codeValue = proofing.getCode();
+        String from = "B2B";
+        if (proofing.getErpId() != null) { // erp传到平台的单据,包含erpId字段记录来源
+            from = "ERP";
+        }
+        Short isReply = Constant.NO;
+        String category = "sale";
+        String table = "purc$proofingitems";
+        Long sourceId = proofingItem.getId();
+        Short orderStatus = proofingItem.getStatus();
+        Short toVendor = Constant.YES;
+        String type = "新增打样申请";
+        String title = "B2B商务提醒";
+        String url = "#/sale/sample/" + proofing.getId();
+        String context = proofing.getEnterprise().getEnName() + "的" + emName + "给您发送了一张新的打样申请单(" + codeValue + ")!";
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
+        Long vendUU = proofingItem.getVendUU();
+        Long vendUserUU = proofingItem.getVendUserUU();
+        String vendUserName = "业务员";
+        if (null == vendUserUU) {
+            vendUserUU = 1L;
+            vendUserName = proofingItem.getVendUser().getUserName();
+        }
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 68 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseTenderDecideReleaseEvent.java

@@ -0,0 +1,68 @@
+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.SaleTender;
+import com.uas.platform.core.model.Constant;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 招标单评标时生成消息事件
+ *
+ */
+public class PurchaseTenderDecideReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, SaleTender> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseTenderDecideReleaseEvent(List<SaleTender> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param saleTender
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(SaleTender saleTender) {
+        Long emUU = saleTender.getRecorderuu();
+        String emName = "采购员";
+        if (null == emUU) {
+            emUU = 1L;
+        } else {
+            emName = saleTender.getRecorder().getUserName();
+        }
+        Long enUU = saleTender.getEnUU();
+        Date date = new Date();
+        String codeValue = saleTender.getCode();
+        String from = "B2B";
+        String type = "招标单评标";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "v$purc$tender";
+        Long sourceId = saleTender.getPtId();
+        String url = "#/sale/tender/" + saleTender.getPtId();
+        Short orderStatus = 200;
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String context = saleTender.getEnterprise().getEnName() + "对招标单(" + codeValue + ")进行了评标,开标日期:" + formatter.format(saleTender.getPublishDate()) + "!";
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
+        Long vendUU = saleTender.getVendUU();
+        Long vendUserUU = saleTender.getUseruu();
+        if (null == vendUserUU) {
+            vendUserUU = 1L;
+        }
+        String vendUserName = saleTender.getUser();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 66 - 0
src/main/java/com/uas/platform/b2b/event/PurchaseTenderSaveReleaseEvent.java

@@ -0,0 +1,66 @@
+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.SaleTender;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 招标单保存时生成消息事件
+ *
+ */
+public class PurchaseTenderSaveReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, SaleTender> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PurchaseTenderSaveReleaseEvent(List<SaleTender> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param saleTender
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(SaleTender saleTender) {
+        Long emUU = saleTender.getRecorderuu();
+        String emName = "采购员";
+        if (null == emUU) {
+            emUU = 1L;
+        } else {
+            emName = saleTender.getRecorder().getUserName();
+        }
+        Long enUU = saleTender.getEnUU();
+        Date date = new Date();
+        String codeValue = saleTender.getCode();
+        String from = "B2B";
+        String type = "新增招标单";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "v$purc$tender";
+        Long sourceId = saleTender.getPtId();
+        String url = "#/sale/tender/" + saleTender.getPtId();
+        Short orderStatus = 200;
+        String context = saleTender.getEnterprise().getEnName() + "的" + emName + "给您发送了一张新的招标单(" + codeValue + ")!";
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
+        Long vendUU = saleTender.getVendUU();
+        Long vendUserUU = saleTender.getUseruu();
+        if (null == vendUserUU) {
+            vendUserUU = 1L;
+        }
+        String vendUserName = saleTender.getUser();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 62 - 0
src/main/java/com/uas/platform/b2b/event/SaleSendAcceptReleaseEvent.java

@@ -0,0 +1,62 @@
+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.SaleSend;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 买家ERP收料时生成消息事件
+ *
+ *
+ */
+public class SaleSendAcceptReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, SaleSend> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SaleSendAcceptReleaseEvent(List<SaleSend> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param send
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(SaleSend send) {
+        Long emUU = send.getCustUserUU();
+        if (null == emUU) {
+            emUU = 1L;
+        }
+        String emName = send.getCustUser().getUserName();
+        Long enUU = send.getCustUU();
+        Date date = new Date();
+        String codeValue = send.getCode();
+        String from = "ERP";
+        String type = "买家收料";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "sale$send";
+        Long sourceId = send.getId();
+        String url = "#/sale/send" + send.getId();
+        String context = send.getCustomer().getEnName() + "的" + emName + "签收了您送货单(" + codeValue + ")的产品!";
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, null, toVendor, url);
+        Long vendUU = send.getEnUU();
+        // 发货单未记录录入人uu
+        Long vendUserUU = 1L;
+        String vendUserName = send.getRecorder();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 61 - 0
src/main/java/com/uas/platform/b2b/event/SaleSendRefuseReleaseEvent.java

@@ -0,0 +1,61 @@
+package com.uas.platform.b2b.event;
+
+import com.uas.platform.b2b.model.*;
+import com.uas.platform.core.model.Constant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 买家修改收料通知的数量时生成消息事件
+ *
+ *
+ */
+public class SaleSendRefuseReleaseEvent extends SaveReleaseEvent<PagingReleaseDetail, SaleSend> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SaleSendRefuseReleaseEvent(List<SaleSend> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param send
+     * @return
+     */
+    @Override
+	public PagingReleaseDetail release(SaleSend send) {
+        Long emUU = send.getCustUserUU();
+        if (null == emUU) {
+            emUU = 1L;
+        }
+        String emName = send.getCustUser().getUserName();
+        Long enUU = send.getCustUU();
+        Date date = new Date();
+        String codeValue = send.getCode();
+        String from = "ERP";
+        String type = "修改发货数量";
+        String title = "B2B商务提醒";
+        Short toVendor = Constant.YES;
+        Short isReply = Constant.NO;
+        String category = "sale";  // 对接收方来说,该单据类型
+        String table = "sale$send";
+        Long sourceId = send.getId();
+        String url = "#/sale/send" + send.getId();
+        Short orderStatus = 0;
+        String context = send.getCustomer().getEnName() + "的" + emName + "拒收了您送货单(" + codeValue + ")的产品!";
+        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
+        Long vendUU = send.getEnUU();
+        // 发货单未记录录入人uu
+        Long vendUserUU = 1L;
+        String vendUserName = send.getRecorder();
+        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
+        releaseDetail.setPagingRelease(release);
+        return releaseDetail;
+    }
+}

+ 12 - 8
src/main/java/com/uas/platform/b2b/listener/MessageListener.java

@@ -16,8 +16,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
-/*
-* *
+/**
  * 监听新增数据事件
  * 监听新增数据事件
  * 生成对应消息
  * 生成对应消息
  *
  *
@@ -49,8 +48,10 @@ public class MessageListener implements ApplicationListener<SaveReleaseEvent<?,
 	public void onApplicationEvent(final SaveReleaseEvent<?, ?> event) {
 	public void onApplicationEvent(final SaveReleaseEvent<?, ?> event) {
 		List<PagingReleaseDetail> pagingReleaseDetails = (List<PagingReleaseDetail>) event.release();
 		List<PagingReleaseDetail> pagingReleaseDetails = (List<PagingReleaseDetail>) event.release();
 		Set<Long> userUUs = new HashSet<>(); // 存储需要接收消息的用户UU
 		Set<Long> userUUs = new HashSet<>(); // 存储需要接收消息的用户UU
-		List<PagingReleaseDetail> otherReleaseDetails = new ArrayList<>(); // 用来保存单据新增的其他消息,推送消息时用。
+		List<PagingReleaseDetail> otherReleaseDetails = new ArrayList<>(); // 用来保存单据新增的其他消息
 		for (PagingReleaseDetail detail : pagingReleaseDetails) {
 		for (PagingReleaseDetail detail : pagingReleaseDetails) {
+			// 先将产生的一条记录加入保存列表
+			otherReleaseDetails.add(detail);
 			PagingRelease release = detail.getPagingRelease();
 			PagingRelease release = detail.getPagingRelease();
 			if (null != detail.getVendUU() && null != release.getEnUU()) {
 			if (null != detail.getVendUU() && null != release.getEnUU()) {
 				// 添加管理员
 				// 添加管理员
@@ -63,7 +64,6 @@ public class MessageListener implements ApplicationListener<SaveReleaseEvent<?,
 						}
 						}
 					}
 					}
 				}
 				}
-//				boolean addSysAdmin = true;  // 默认会给系统管理员发送消息
 				List<Vendor> vendors;
 				List<Vendor> vendors;
 				if (release.getToVendor() == Constant.YES) { // 消息接收方为供应商,查找供应商表方式不同
 				if (release.getToVendor() == Constant.YES) { // 消息接收方为供应商,查找供应商表方式不同
 					vendors = vendorDao.findByMyEnUUAndVendUU(release.getEnUU(), detail.getVendUU());
 					vendors = vendorDao.findByMyEnUUAndVendUU(release.getEnUU(), detail.getVendUU());
@@ -85,10 +85,14 @@ public class MessageListener implements ApplicationListener<SaveReleaseEvent<?,
 				// 新增消息
 				// 新增消息
 				for (Long userUU : userUUs) {
 				for (Long userUU : userUUs) {
                     try { //去除userUU为空值的情况
                     try { //去除userUU为空值的情况
-                        User user = userDao.findOne(userUU);
-                        PagingReleaseDetail pagingReleaseDetail = new PagingReleaseDetail(detail.getVendUU(), userUU, user.getUserName());
-                        pagingReleaseDetail.setPagingRelease(release);
-                        otherReleaseDetails.add(pagingReleaseDetail);
+						if (null != userUU) {
+							User user = userDao.findOne(userUU);
+							if (null != user) {
+								PagingReleaseDetail pagingReleaseDetail = new PagingReleaseDetail(detail.getVendUU(), userUU, user.getUserName());
+								pagingReleaseDetail.setPagingRelease(release);
+								otherReleaseDetails.add(pagingReleaseDetail);
+							}
+						}
                     } catch (RuntimeException e){
                     } catch (RuntimeException e){
                         e.getStackTrace();
                         e.getStackTrace();
                     }
                     }

+ 4 - 4
src/main/java/com/uas/platform/b2b/mobile/service/impl/MobileReleaseServiceImpl.java

@@ -216,7 +216,7 @@ public class MobileReleaseServiceImpl implements MobileReleaseService {
 
 
     @Override
     @Override
     public void pushReleases(List<PagingReleaseDetail> pagingReleaseDetails) {
     public void pushReleases(List<PagingReleaseDetail> pagingReleaseDetails) {
-        List<PagingReleaseDetail> saveDetails = new ArrayList<>();
+        List<Long> detailIds = new ArrayList<>();
         Set<Long> userUUs = new HashSet<>();
         Set<Long> userUUs = new HashSet<>();
         for (PagingReleaseDetail releaseDetail : pagingReleaseDetails) {
         for (PagingReleaseDetail releaseDetail : pagingReleaseDetails) {
             // 推送消息同一个人只推一次
             // 推送消息同一个人只推一次
@@ -240,17 +240,17 @@ public class MobileReleaseServiceImpl implements MobileReleaseService {
                         if (!res.isSuccess()) {
                         if (!res.isSuccess()) {
                             throw new Exception(res.getContent());
                             throw new Exception(res.getContent());
                         } else {
                         } else {
-                            releaseDetail.setPushStatus(Constant.YES);
                             userUUs.add(releaseDetail.getVendUserUU());
                             userUUs.add(releaseDetail.getVendUserUU());
-                            saveDetails.add(releaseDetail);
                         }
                         }
                     } catch (Exception e) {
                     } catch (Exception e) {
                         e.printStackTrace();
                         e.printStackTrace();
                     }
                     }
                 }
                 }
             }
             }
+            releaseDetail.setPushStatus(Constant.YES);
+            detailIds.add(releaseDetail.getId());
         }
         }
-        pagingReleaseDetailDao.save(saveDetails);
+        pagingReleaseDetailDao.setPushedByIds(detailIds.toArray());
     }
     }
 
 
 }
 }

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

@@ -15,7 +15,7 @@ import javax.persistence.Table;
 
 
 
 
 /**
 /**
- * 客户分配表 --(消息推送时,这个表作为消息接收绑定或转移关系表,相当于针对供应商也存在分配。查看客户单据时,获取权限时,不会受此类数据影响)
+ * 客户分配表
  * @author aof
  * @author aof
  * @date 2016年1月4日 上午10:58:07
  * @date 2016年1月4日 上午10:58:07
  *
  *
@@ -64,6 +64,12 @@ public class Distribute implements Serializable {
 	@Column(name = "pd_istransfer")
 	@Column(name = "pd_istransfer")
 	private Short isTransfer;
 	private Short isTransfer;
 
 
+	/**
+	 * 分配此权限的人的uu号
+	 */
+	@Column(name = "pd_leaderuu")
+	private Long leaderUU;
+
 	public Long getId() {
 	public Long getId() {
 		return id;
 		return id;
 	}
 	}
@@ -111,4 +117,12 @@ public class Distribute implements Serializable {
 	public void setIsTransfer(Short isTransfer) {
 	public void setIsTransfer(Short isTransfer) {
 		this.isTransfer = isTransfer;
 		this.isTransfer = isTransfer;
 	}
 	}
+
+	public Long getLeaderUU() {
+		return leaderUU;
+	}
+
+	public void setLeaderUU(Long leaderUU) {
+		this.leaderUU = leaderUU;
+	}
 }
 }

+ 15 - 11
src/main/java/com/uas/platform/b2b/model/MakeAccept.java

@@ -4,17 +4,7 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 import java.util.Set;
 import java.util.Set;
 
 
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 
 /**
 /**
  * 买家的委外验收单
  * 买家的委外验收单
@@ -54,6 +44,13 @@ public class MakeAccept implements Serializable {
 	@Column(name = "ma_enuu")
 	@Column(name = "ma_enuu")
 	private Long enUU;
 	private Long enUU;
 
 
+	/**
+	 * 验收单 所属企业(买家)
+	 */
+	@OneToOne
+	@JoinColumn(name = "ma_enuu", insertable = false, updatable = false)
+	private EnterpriseInfo enterprise;
+
 	/**
 	/**
 	 * 送货单号
 	 * 送货单号
 	 */
 	 */
@@ -272,4 +269,11 @@ public class MakeAccept implements Serializable {
 		this.erpId = erpId;
 		this.erpId = erpId;
 	}
 	}
 
 
+	public EnterpriseInfo getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(EnterpriseInfo enterprise) {
+		this.enterprise = enterprise;
+	}
 }
 }

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

@@ -217,7 +217,7 @@ public class MakeReturnItem {
 		List<MakeReturn> list = new ArrayList<MakeReturn>();
 		List<MakeReturn> list = new ArrayList<MakeReturn>();
 		Set<Long> keys = new HashSet<Long>();
 		Set<Long> keys = new HashSet<Long>();
 		for (MakeReturnItem item : items) {
 		for (MakeReturnItem item : items) {
-			if (!keys.contains(item.getReturn())) {
+			if (!keys.contains(item.getReturn().getId())) {
 				list.add(item.getReturn());
 				list.add(item.getReturn());
 				keys.add(item.getReturn().getId());
 				keys.add(item.getReturn().getId());
 			}
 			}

+ 15 - 7
src/main/java/com/uas/platform/b2b/model/PagingRelease.java

@@ -45,19 +45,19 @@ public class PagingRelease implements Serializable {
     @Column(name = "pr_enuu")
     @Column(name = "pr_enuu")
     private Long enUU;
     private Long enUU;
 
 
-//    /**
-//     * 采购企业
-//     */
-//    @OneToOne(cascade = CascadeType.REFRESH)
-//    @JoinColumn(name = "pr_enuu", insertable = false, updatable = false)
-//    private EnterpriseInfo enterprise;
+    /**
+     * 采购企业
+     */
+    @OneToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pr_enuu", insertable = false, updatable = false)
+    private EnterpriseInfo enterprise;
 
 
 //    /**
 //    /**
 //     * 采购单所属采购员
 //     * 采购单所属采购员
 //     */
 //     */
 //    @OneToOne(cascade = { CascadeType.REFRESH })
 //    @OneToOne(cascade = { CascadeType.REFRESH })
 //    @JoinColumn(name = "pr_emuu", insertable = false, updatable = false)
 //    @JoinColumn(name = "pr_emuu", insertable = false, updatable = false)
-//    private User user;
+//    private UserBaseInfo user;
 
 
     /**
     /**
      * 推送时间
      * 推送时间
@@ -330,6 +330,14 @@ public class PagingRelease implements Serializable {
         this.url = url;
         this.url = url;
     }
     }
 
 
+    public EnterpriseInfo getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(EnterpriseInfo enterprise) {
+        this.enterprise = enterprise;
+    }
+
     @JsonIgnore
     @JsonIgnore
     @JSONField(serialize = false)
     @JSONField(serialize = false)
     public Set<PagingReleaseDetail> getPagingReleaseDetails() {
     public Set<PagingReleaseDetail> getPagingReleaseDetails() {

+ 17 - 20
src/main/java/com/uas/platform/b2b/model/PagingReleaseDetail.java

@@ -1,21 +1,11 @@
 package com.uas.platform.b2b.model;
 package com.uas.platform.b2b.model;
 
 
+import com.uas.platform.core.model.Constant;
+
+import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 
 
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
-import com.uas.platform.core.model.Constant;
-
 /**
 /**
  * 消息明细表
  * 消息明细表
  * Created by dongbw on 17/03/22 14:55.
  * Created by dongbw on 17/03/22 14:55.
@@ -46,7 +36,7 @@ public class PagingReleaseDetail implements Serializable{
 //     */
 //     */
 //    @OneToOne(cascade = { CascadeType.REFRESH })
 //    @OneToOne(cascade = { CascadeType.REFRESH })
 //    @JoinColumn(name = "prd_emuu", insertable = false, updatable = false)
 //    @JoinColumn(name = "prd_emuu", insertable = false, updatable = false)
-//    private User vendUser;
+//    private UserBaseInfo vendUser;
 
 
     /**
     /**
      * 供应商企业UU
      * 供应商企业UU
@@ -54,12 +44,12 @@ public class PagingReleaseDetail implements Serializable{
     @Column(name = "prd_venduu")
     @Column(name = "prd_venduu")
     private Long vendUU;
     private Long vendUU;
 
 
-//    /**
-//     * 供应商企业
-//     */
-//    @OneToOne(cascade = CascadeType.REFRESH)
-//    @JoinColumn(name = "prd_venduu", insertable = false, updatable = false)
-//    private EnterpriseInfo vendor;
+    /**
+     * 供应商企业
+     */
+    @OneToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "prd_venduu", insertable = false, updatable = false)
+    private EnterpriseInfo vendor;
 
 
     /**
     /**
      * 接收人姓名
      * 接收人姓名
@@ -214,4 +204,11 @@ public class PagingReleaseDetail implements Serializable{
         this.pagingRelease = pagingRelease;
         this.pagingRelease = pagingRelease;
     }
     }
 
 
+    public EnterpriseInfo getVendor() {
+        return vendor;
+    }
+
+    public void setVendor(EnterpriseInfo vendor) {
+        this.vendor = vendor;
+    }
 }
 }

+ 14 - 0
src/main/java/com/uas/platform/b2b/model/PurcOrderInfoItem.java

@@ -100,6 +100,12 @@ public class PurcOrderInfoItem {
 	@Column(name = "pd_vendspec")
 	@Column(name = "pd_vendspec")
 	private String vendspec;
 	private String vendspec;
 
 
+	/**
+	 * 备品数量
+	 */
+	@Column(name = "pd_beipin")
+	private Integer beipin;
+
 	public String getVendspec() {
 	public String getVendspec() {
 		return vendspec;
 		return vendspec;
 	}
 	}
@@ -363,6 +369,14 @@ public class PurcOrderInfoItem {
 		this.erpDate = erpDate;
 		this.erpDate = erpDate;
 	}
 	}
 
 
+	public Integer getBeipin() {
+		return beipin;
+	}
+
+	public void setBeipin(Integer beipin) {
+		this.beipin = beipin;
+	}
+
 	public double getBalance() {
 	public double getBalance() {
 		double qtyNum, returnQtyNum, acceptQtyNum;
 		double qtyNum, returnQtyNum, acceptQtyNum;
 		qtyNum = qty == null ? 0 : qty;
 		qtyNum = qty == null ? 0 : qty;

+ 14 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseApCheck.java

@@ -175,6 +175,12 @@ public class PurchaseApCheck implements Serializable {
 	@Column(name = "pa_print")
 	@Column(name = "pa_print")
 	private Short print;
 	private Short print;
 
 
+	/**
+	 * 不同意原因
+	 */
+	@Column(name = "pa_reason")
+	private String reason;
+
 	/**
 	/**
 	 * 对账单明细行
 	 * 对账单明细行
 	 */
 	 */
@@ -382,4 +388,12 @@ public class PurchaseApCheck implements Serializable {
 	public void setRecorderUU(Long recorderUU) {
 	public void setRecorderUU(Long recorderUU) {
 		this.recorderUU = recorderUU;
 		this.recorderUU = recorderUU;
 	}
 	}
+
+	public String getReason() {
+		return reason;
+	}
+
+	public void setReason(String reason) {
+		this.reason = reason;
+	}
 }
 }

+ 538 - 525
src/main/java/com/uas/platform/b2b/model/PurchaseInquiryMould.java

@@ -11,7 +11,7 @@ import java.util.Set;
 
 
 /**
 /**
  * 模具询价
  * 模具询价
- * 
+ *
  * <pre>
  * <pre>
  * CREATE OR REPLACE FORCE VIEW V$PURC$INQUIRY_MOULD
  * CREATE OR REPLACE FORCE VIEW V$PURC$INQUIRY_MOULD
  * SELECT purc$inquirymould."IM_ID",purc$inquirymould."IM_CODE",purc$inquirymould."IM_CURRENCY", purc$inquirymould."IM_ADOPTSTATUS", purc$inquirymould."IM_AUDITDATE", purc$inquirymould."IM_AUDITOR", purc$inquirymould."IM_DATE", purc$inquirymould."IM_ENDDATE", purc$inquirymould."IM_ENUU", purc$inquirymould."IM_ERPSOURCEID", purc$inquirymould."IM_RECORDDATE", purc$inquirymould."IM_RECORDER",purc$inquirymould."IM_RECORDERID", purc$inquirymould."IM_REMARK", purc$inquirymould."IM_SENDSTATUS", purc$inquirymould."IM_SOURCE", purc$inquirymould."IM_SOURCEID", purc$inquirymould."IM_SOURCETYPE", purc$inquirymould."IM_STATUS", purc$inquirymould."IM_STATUSCODE", purc$inquirymould."IM_TAXRATE", purc$inquirymould."IM_VENDNAME", purc$inquirymould."IM_VENDUU", purc$inquirymould."IM_VALID" ,purc$inquirymould."IM_BACKSTATUS", purc$inquirymould."IM_CHECKED", purc$inquirymould."IM_RECORDERUU", purc$inquirymould."IM_REPLYSENDSTATUS", purc$inquirymould."IM_VENDUSERUU" ,case when trunc(im_enddate) + 1 < sysdate then 1 else 0 end as im_overdue from purc$inquirymould
  * SELECT purc$inquirymould."IM_ID",purc$inquirymould."IM_CODE",purc$inquirymould."IM_CURRENCY", purc$inquirymould."IM_ADOPTSTATUS", purc$inquirymould."IM_AUDITDATE", purc$inquirymould."IM_AUDITOR", purc$inquirymould."IM_DATE", purc$inquirymould."IM_ENDDATE", purc$inquirymould."IM_ENUU", purc$inquirymould."IM_ERPSOURCEID", purc$inquirymould."IM_RECORDDATE", purc$inquirymould."IM_RECORDER",purc$inquirymould."IM_RECORDERID", purc$inquirymould."IM_REMARK", purc$inquirymould."IM_SENDSTATUS", purc$inquirymould."IM_SOURCE", purc$inquirymould."IM_SOURCEID", purc$inquirymould."IM_SOURCETYPE", purc$inquirymould."IM_STATUS", purc$inquirymould."IM_STATUSCODE", purc$inquirymould."IM_TAXRATE", purc$inquirymould."IM_VENDNAME", purc$inquirymould."IM_VENDUU", purc$inquirymould."IM_VALID" ,purc$inquirymould."IM_BACKSTATUS", purc$inquirymould."IM_CHECKED", purc$inquirymould."IM_RECORDERUU", purc$inquirymould."IM_REPLYSENDSTATUS", purc$inquirymould."IM_VENDUSERUU" ,case when trunc(im_enddate) + 1 < sysdate then 1 else 0 end as im_overdue from purc$inquirymould
@@ -23,559 +23,572 @@ import java.util.Set;
 @Entity
 @Entity
 public class PurchaseInquiryMould implements Serializable {
 public class PurchaseInquiryMould implements Serializable {
 
 
-	/**
-	 * 序列化
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * id
-	 */
-	@Id
-	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$inquirymould_gen")
-	@SequenceGenerator(name = "purc$inquirymould_gen", sequenceName = "purc$inquirymould_seq", allocationSize = 1)
-	@Column(name = "im_id")
-	private Long id;
-
-	/**
-	 * 询价单号
-	 */
-	@Column(name = "im_code")
-	private String code;
-
-	/**
-	 * 日期
-	 */
-	@Column(name = "im_date")
-	private Date date;
-
-	/**
-	 * 供应商UU
-	 */
-	@Column(name = "im_venduu")
-	private Long venduu;
-
-	/**
-	 * 供应商名称
-	 */
-	@Column(name = "im_vendname")
-	private String vendName;
-
-	/**
-	 * 供应商企业信息
-	 */
-	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
-	@JoinColumn(name = "im_venduu", insertable = false, updatable = false)
-	private EnterpriseInfo vend;
-
-	/**
-	 * 供应商联系人uu
-	 */
-	@Column(name = "im_venduseruu")
-	private Long vendUserUU;
-
-	/**
-	 * 币别
-	 */
-	@Column(name = "im_currency")
-	private String currency;
-
-	/**
-	 * 税率
-	 */
-	@Column(name = "im_taxrate")
-	private Float taxrate;
-
-	/**
-	 * 备注
-	 */
-	@Column(name = "im_remark")
-	private String remark;
-
-	/**
-	 * 单据状态
-	 */
-	@Column(name = "im_status")
-	private Short status;
-
-	/**
-	 * 所属企业uu
-	 */
-	@Column(name = "im_enuu")
-	private Long enuu;
-
-	/**
-	 * 当前用户UU
-	 */
-	@Column(name = "im_useruu")
-	private Long useruu;
-
-	/**
-	 * 所属企业
-	 */
-	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
-	@JoinColumn(name = "im_enuu", insertable = false, updatable = false)
-	private EnterpriseInfo enterprise;
-
-	/**
-	 * 来源id
-	 */
-	@Column(name = "im_sourceid")
-	private Long sourceId;
-
-	/**
-	 * 来源单号
-	 */
-	@Column(name = "im_source")
-	private String sourceCode;
-
-	/**
-	 * 来源类型
-	 */
-	@Column(name = "im_sourcetype")
-	private String sourceType;
-
-	/**
-	 * 状态编号
-	 */
-	@Column(name = "im_statuscode")
-	private String statusCode;
-
-	/**
-	 * 审核人
-	 */
-	@Column(name = "im_auditor")
-	private String auditor;
-
-	/**
-	 * 审核日期
-	 */
-	@Column(name = "im_auditdate")
-	private Date auditDate;
-
-	/**
-	 * 录入人
-	 */
-	@Column(name = "im_recorder")
-	private String recorder;
-
-	/**
-	 * 录入日期
-	 */
-	@Column(name = "im_recorddate")
-	private Date recordDate;
-
-	/**
-	 * erp报价单传入日期
-	 */
-	@Column(name = "im_erpindate")
-	private Date erpInDate;
-
-	/**
-	 * 录入人ID
-	 */
-	@Column(name = "im_recorderuu")
-	private Long recorderuu;
-
-	/**
-	 * 报价日期
-	 */
-	@Column(name = "im_replydate")
-	private Date replyDate;
-
-	/**
-	 * 报价截止日期
-	 */
-	@Column(name = "im_enddate")
-	private Date endDate;
-
-	/**
-	 * 采纳状态(已采纳为1,待采纳为0)
-	 */
-	@Column(name = "im_adoptstatus")
-	private Short adoptStatus;
-
-	/**
-	 * 上传状态(待上传202、已下载203)
-	 */
-	@Column(name = "im_sendstatus")
-	private Short sendStatus;
-
-	/**
-	 * (针对买家的)报价信息传输状态{待上传、已下载}
-	 */
-	@Column(name = "im_backstatus")
-	private Short backStatus;
-
-	/**
-	 * (针对卖家的)报价信息传输状态{待上传、已下载}
-	 */
-	@Column(name = "im_replysendstatus")
-	private Short replySendStatus;
-
-	/**
-	 * 客户已提交(1为已提交,0为未提交)
-	 */
-	@Column(name = "im_checked")
-	private Short check;
-
-	/**
-	 * (针对卖家的)是否采纳信息传输状态{待上传、已下载}
-	 */
-	@Column(name = "im_decidestatus")
-	private Short decideStatus;
-
-	/**
-	 * 是否有效(0无效,1有效)
-	 */
-	@Column(name = "im_valid")
-	private Short valid;
-
-	/**
-	 * 附件
-	 */
-	@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
-	@JoinTable(name = "purc$inquirymouldattach", joinColumns = @JoinColumn(name = "im_id", referencedColumnName = "im_id"), inverseJoinColumns = @JoinColumn(name="at_id", referencedColumnName = "at_id"))
-	private Set<Attach> attachs;
-
-	/**
-	 * erp sourceId
-	 */
-	@Column(name = "im_erpsourceid")
-	private Long erpSourceId;
-
-	/**
-	 * 询价明细
-	 */
-	@OneToMany(mappedBy = "inquiryMould", cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
-			CascadeType.MERGE }, fetch = FetchType.EAGER)
-	@OrderBy("detno")
-	private Set<PurchaseInquiryMouldItem> inquiryMouldItems;
-
-	/**
-	 * 是否过期(0未过期,1已过期)(表中的im_overdue字段只是search项目过滤时报错时建立,无实际意义也不会赋值,
-	 * 只是用于搜索项目对是否已过期的判断,这里使用视图中的im_overdue来做其他操作)
-	 */
-	@Column(name = "im_overdue", insertable = false, updatable = false)
-	private Short overdue;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getCode() {
-		return code;
-	}
-
-	public void setCode(String code) {
-		this.code = code;
-	}
-
-	public Date getDate() {
-		return date;
-	}
-
-	public void setDate(Date date) {
-		this.date = date;
-	}
-
-	public Long getVenduu() {
-		return venduu;
-	}
-
-	public void setVenduu(Long venduu) {
-		this.venduu = venduu;
-	}
-
-	public EnterpriseInfo getVend() {
-		return vend;
-	}
-
-	public void setVend(EnterpriseInfo vend) {
-		this.vend = vend;
-	}
-
-	public String getCurrency() {
-		return currency;
-	}
-
-	public void setCurrency(String currency) {
-		this.currency = currency;
-	}
-
-	public String getRemark() {
-		return remark;
-	}
-
-	public void setRemark(String remark) {
-		this.remark = remark;
-	}
-
-	public Short getStatus() {
-		return status;
-	}
-
-	public void setStatus(Short status) {
-		this.status = status;
-	}
-
-	public Short getBackStatus() {
-		return backStatus;
-	}
-
-	public void setBackStatus(Short backStatus) {
-		this.backStatus = backStatus;
-	}
-
-	public Short getReplySendStatus() {
-		return replySendStatus;
-	}
-
-	public void setReplySendStatus(Short replySendStatus) {
-		this.replySendStatus = replySendStatus;
-	}
-
-	public Short getCheck() {
-		return check;
-	}
-
-	public void setCheck(Short check) {
-		this.check = check;
-	}
-
-	public Long getEnuu() {
-		return enuu;
-	}
+    /**
+     * 序列化
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "purc$inquirymould_gen")
+    @SequenceGenerator(name = "purc$inquirymould_gen", sequenceName = "purc$inquirymould_seq", allocationSize = 1)
+    @Column(name = "im_id")
+    private Long id;
+
+    /**
+     * 询价单号
+     */
+    @Column(name = "im_code")
+    private String code;
+
+    /**
+     * 日期
+     */
+    @Column(name = "im_date")
+    private Date date;
+
+    /**
+     * 供应商UU
+     */
+    @Column(name = "im_venduu")
+    private Long venduu;
+
+    /**
+     * 供应商名称
+     */
+    @Column(name = "im_vendname")
+    private String vendName;
+
+    /**
+     * 供应商企业信息
+     */
+    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH})
+    @JoinColumn(name = "im_venduu", insertable = false, updatable = false)
+    private EnterpriseInfo vend;
+
+    /**
+     * 供应商联系人uu
+     */
+    @Column(name = "im_venduseruu")
+    private Long vendUserUU;
+
+    /**
+     * 供应商联系人
+     */
+    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH})
+    @JoinColumn(name = "im_venduseruu", insertable = false, updatable = false)
+    private UserBaseInfo vendUser;
+
+    /**
+     * 币别
+     */
+    @Column(name = "im_currency")
+    private String currency;
+
+    /**
+     * 税率
+     */
+    @Column(name = "im_taxrate")
+    private Float taxrate;
+
+    /**
+     * 备注
+     */
+    @Column(name = "im_remark")
+    private String remark;
+
+    /**
+     * 单据状态
+     */
+    @Column(name = "im_status")
+    private Short status;
+
+    /**
+     * 所属企业uu
+     */
+    @Column(name = "im_enuu")
+    private Long enuu;
+
+    /**
+     * 当前用户UU
+     */
+    @Column(name = "im_useruu")
+    private Long useruu;
+
+    /**
+     * 所属企业
+     */
+    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH})
+    @JoinColumn(name = "im_enuu", insertable = false, updatable = false)
+    private EnterpriseInfo enterprise;
+
+    /**
+     * 来源id
+     */
+    @Column(name = "im_sourceid")
+    private Long sourceId;
+
+    /**
+     * 来源单号
+     */
+    @Column(name = "im_source")
+    private String sourceCode;
+
+    /**
+     * 来源类型
+     */
+    @Column(name = "im_sourcetype")
+    private String sourceType;
+
+    /**
+     * 状态编号
+     */
+    @Column(name = "im_statuscode")
+    private String statusCode;
+
+    /**
+     * 审核人
+     */
+    @Column(name = "im_auditor")
+    private String auditor;
+
+    /**
+     * 审核日期
+     */
+    @Column(name = "im_auditdate")
+    private Date auditDate;
+
+    /**
+     * 录入人
+     */
+    @Column(name = "im_recorder")
+    private String recorder;
+
+    /**
+     * 录入日期
+     */
+    @Column(name = "im_recorddate")
+    private Date recordDate;
+
+    /**
+     * erp报价单传入日期
+     */
+    @Column(name = "im_erpindate")
+    private Date erpInDate;
+
+    /**
+     * 录入人ID
+     */
+    @Column(name = "im_recorderuu")
+    private Long recorderuu;
+
+    /**
+     * 报价日期
+     */
+    @Column(name = "im_replydate")
+    private Date replyDate;
+
+    /**
+     * 报价截止日期
+     */
+    @Column(name = "im_enddate")
+    private Date endDate;
+
+    /**
+     * 采纳状态(已采纳为1,待采纳为0)
+     */
+    @Column(name = "im_adoptstatus")
+    private Short adoptStatus;
+
+    /**
+     * 上传状态(待上传202、已下载203)
+     */
+    @Column(name = "im_sendstatus")
+    private Short sendStatus;
+
+    /**
+     * (针对买家的)报价信息传输状态{待上传、已下载}
+     */
+    @Column(name = "im_backstatus")
+    private Short backStatus;
+
+    /**
+     * (针对卖家的)报价信息传输状态{待上传、已下载}
+     */
+    @Column(name = "im_replysendstatus")
+    private Short replySendStatus;
+
+    /**
+     * 客户已提交(1为已提交,0为未提交)
+     */
+    @Column(name = "im_checked")
+    private Short check;
+
+    /**
+     * (针对卖家的)是否采纳信息传输状态{待上传、已下载}
+     */
+    @Column(name = "im_decidestatus")
+    private Short decideStatus;
+
+    /**
+     * 是否有效(0无效,1有效)
+     */
+    @Column(name = "im_valid")
+    private Short valid;
+
+    /**
+     * 附件
+     */
+    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+    @JoinTable(name = "purc$inquirymouldattach", joinColumns = @JoinColumn(name = "im_id", referencedColumnName = "im_id"), inverseJoinColumns = @JoinColumn(name = "at_id", referencedColumnName = "at_id"))
+    private Set<Attach> attachs;
+
+    /**
+     * erp sourceId
+     */
+    @Column(name = "im_erpsourceid")
+    private Long erpSourceId;
+
+    /**
+     * 询价明细
+     */
+    @OneToMany(mappedBy = "inquiryMould", cascade = {CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
+            CascadeType.MERGE}, fetch = FetchType.EAGER)
+    @OrderBy("detno")
+    private Set<PurchaseInquiryMouldItem> inquiryMouldItems;
+
+    /**
+     * 是否过期(0未过期,1已过期)(表中的im_overdue字段只是search项目过滤时报错时建立,无实际意义也不会赋值,
+     * 只是用于搜索项目对是否已过期的判断,这里使用视图中的im_overdue来做其他操作)
+     */
+    @Column(name = "im_overdue", insertable = false, updatable = false)
+    private Short overdue;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Long getVenduu() {
+        return venduu;
+    }
+
+    public void setVenduu(Long venduu) {
+        this.venduu = venduu;
+    }
+
+    public EnterpriseInfo getVend() {
+        return vend;
+    }
+
+    public void setVend(EnterpriseInfo vend) {
+        this.vend = vend;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Short getStatus() {
+        return status;
+    }
+
+    public void setStatus(Short status) {
+        this.status = status;
+    }
+
+    public Short getBackStatus() {
+        return backStatus;
+    }
+
+    public void setBackStatus(Short backStatus) {
+        this.backStatus = backStatus;
+    }
+
+    public Short getReplySendStatus() {
+        return replySendStatus;
+    }
+
+    public void setReplySendStatus(Short replySendStatus) {
+        this.replySendStatus = replySendStatus;
+    }
+
+    public Short getCheck() {
+        return check;
+    }
+
+    public void setCheck(Short check) {
+        this.check = check;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
 
 
-	public void setEnuu(Long enuu) {
-		this.enuu = enuu;
-	}
+    public void setEnuu(Long enuu) {
+        this.enuu = enuu;
+    }
 
 
-	public Long getUseruu() {
-		return useruu;
-	}
+    public Long getUseruu() {
+        return useruu;
+    }
 
 
-	public void setUseruu(Long useruu) {
-		this.useruu = useruu;
-	}
+    public void setUseruu(Long useruu) {
+        this.useruu = useruu;
+    }
 
 
-	public EnterpriseInfo getEnterprise() {
-		return enterprise;
-	}
+    public EnterpriseInfo getEnterprise() {
+        return enterprise;
+    }
 
 
-	public void setEnterprise(EnterpriseInfo enterprise) {
-		this.enterprise = enterprise;
-	}
+    public void setEnterprise(EnterpriseInfo enterprise) {
+        this.enterprise = enterprise;
+    }
 
 
-	public Long getSourceId() {
-		return sourceId;
-	}
+    public Long getSourceId() {
+        return sourceId;
+    }
 
 
-	public void setSourceId(Long sourceId) {
-		this.sourceId = sourceId;
-	}
+    public void setSourceId(Long sourceId) {
+        this.sourceId = sourceId;
+    }
 
 
-	public String getSourceCode() {
-		return sourceCode;
-	}
+    public String getSourceCode() {
+        return sourceCode;
+    }
 
 
-	public void setSourceCode(String sourceCode) {
-		this.sourceCode = sourceCode;
-	}
+    public void setSourceCode(String sourceCode) {
+        this.sourceCode = sourceCode;
+    }
 
 
-	public String getSourceType() {
-		return sourceType;
-	}
+    public String getSourceType() {
+        return sourceType;
+    }
 
 
-	public void setSourceType(String sourceType) {
-		this.sourceType = sourceType;
-	}
+    public void setSourceType(String sourceType) {
+        this.sourceType = sourceType;
+    }
 
 
-	public String getStatusCode() {
-		return statusCode;
-	}
+    public String getStatusCode() {
+        return statusCode;
+    }
 
 
-	public void setStatusCode(String statusCode) {
-		this.statusCode = statusCode;
-	}
+    public void setStatusCode(String statusCode) {
+        this.statusCode = statusCode;
+    }
 
 
-	public String getAuditor() {
-		return auditor;
-	}
+    public String getAuditor() {
+        return auditor;
+    }
 
 
-	public void setAuditor(String auditor) {
-		this.auditor = auditor;
-	}
+    public void setAuditor(String auditor) {
+        this.auditor = auditor;
+    }
 
 
-	public Date getAuditDate() {
-		return auditDate;
-	}
+    public Date getAuditDate() {
+        return auditDate;
+    }
 
 
-	public void setAuditDate(Date auditDate) {
-		this.auditDate = auditDate;
-	}
+    public void setAuditDate(Date auditDate) {
+        this.auditDate = auditDate;
+    }
 
 
-	public String getRecorder() {
-		return recorder;
-	}
+    public String getRecorder() {
+        return recorder;
+    }
 
 
-	public void setRecorder(String recorder) {
-		this.recorder = recorder;
-	}
+    public void setRecorder(String recorder) {
+        this.recorder = recorder;
+    }
 
 
-	public Date getRecordDate() {
-		return recordDate;
-	}
+    public Date getRecordDate() {
+        return recordDate;
+    }
 
 
-	public Date getErpInDate() {
-		return erpInDate;
-	}
+    public Date getErpInDate() {
+        return erpInDate;
+    }
 
 
-	public void setErpInDate(Date erpInDate) {
-		this.erpInDate = erpInDate;
-	}
+    public void setErpInDate(Date erpInDate) {
+        this.erpInDate = erpInDate;
+    }
 
 
-	public void setRecordDate(Date recordDate) {
-		this.recordDate = recordDate;
-	}
+    public void setRecordDate(Date recordDate) {
+        this.recordDate = recordDate;
+    }
 
 
-	public Long getRecorderuu() {
-		return recorderuu;
-	}
+    public Long getRecorderuu() {
+        return recorderuu;
+    }
 
 
-	public void setRecorderuu(Long recorderuu) {
-		this.recorderuu = recorderuu;
-	}
+    public void setRecorderuu(Long recorderuu) {
+        this.recorderuu = recorderuu;
+    }
 
 
-	public Date getEndDate() {
-		return endDate;
-	}
+    public Date getEndDate() {
+        return endDate;
+    }
 
 
-	public void setEndDate(Date endDate) {
-		this.endDate = endDate;
-	}
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
 
 
-	public Date getReplyDate() {
-		return replyDate;
-	}
+    public Date getReplyDate() {
+        return replyDate;
+    }
 
 
-	public void setReplyDate(Date replyDate) {
-		this.replyDate = replyDate;
-	}
+    public void setReplyDate(Date replyDate) {
+        this.replyDate = replyDate;
+    }
 
 
-	public Short getAdoptStatus() {
-		return adoptStatus;
-	}
-
-	public void setAdoptStatus(Short adoptStatus) {
-		this.adoptStatus = adoptStatus;
-	}
-
-	public Short getSendStatus() {
-		return sendStatus;
-	}
-
-	public void setSendStatus(Short sendStatus) {
-		this.sendStatus = sendStatus;
-	}
-
-	public Set<Attach> getAttachs() {
-		return attachs;
-	}
-
-	public void setAttachs(Set<Attach> attachs) {
-		this.attachs = attachs;
-	}
-
-	public Long getErpSourceId() {
-		return erpSourceId;
-	}
-
-	public void setErpSourceId(Long erpSourceId) {
-		this.erpSourceId = erpSourceId;
-	}
-
-	public String getVendName() {
-		return vendName;
-	}
-
-	public void setVendName(String vendName) {
-		this.vendName = vendName;
-	}
-
-	public Long getVendUserUU() {
-		return vendUserUU;
-	}
-
-	public void setVendUserUU(Long vendUserUU) {
-		this.vendUserUU = vendUserUU;
-	}
-
-	public Float getTaxrate() {
-		return taxrate;
-	}
-
-	public void setTaxrate(Float taxrate) {
-		this.taxrate = taxrate;
-	}
-
-	public Short getOverdue() {
-		return overdue;
-	}
-
-	public void setOverdue(Short overdue) {
-		this.overdue = overdue;
-	}
-
-	public Short getValid() {
-		return valid;
-	}
-
-	public void setValid(Short valid) {
-		this.valid = valid;
-	}
-
-	public Short getDecideStatus() {
-		return decideStatus;
-	}
-
-	public void setDecideStatus(Short decideStatus) {
-		this.decideStatus = decideStatus;
-	}
-
-	public Set<PurchaseInquiryMouldItem> getInquiryMouldItems() {
-		return inquiryMouldItems;
-	}
-
-	public void setInquiryMouldItems(Set<PurchaseInquiryMouldItem> inquiryMouldItems) {
-		this.inquiryMouldItems = inquiryMouldItems;
-	}
-
-
-
-	/**
-	 * 是否可报价
-	 * <p>
-	 * 1.未报价,未截止报价
-	 * </p>
-	 * <p>
-	 * 2.已报价,未截止报价,客户未提交
-	 * </p>
-	 * 
-	 * @return
-	 */
-	public boolean isReplyable() {
-		if (this.getEndDate() != null) {
-			return DateUtils.compare(this.getEndDate(), new Date(), DateUtils.COMPARE_DAY) >= 0
-					&& (this.status == Status.NOT_REPLY.value() || (this.status == Status.REPLIED.value()
-							&& (this.getCheck() == null || this.getCheck() != Constant.YES)
-							&& this.adoptStatus == null));
-		}
-		return this.status == Status.NOT_REPLY.value();
-	}
+    public Short getAdoptStatus() {
+        return adoptStatus;
+    }
+
+    public void setAdoptStatus(Short adoptStatus) {
+        this.adoptStatus = adoptStatus;
+    }
+
+    public Short getSendStatus() {
+        return sendStatus;
+    }
+
+    public void setSendStatus(Short sendStatus) {
+        this.sendStatus = sendStatus;
+    }
+
+    public Set<Attach> getAttachs() {
+        return attachs;
+    }
+
+    public void setAttachs(Set<Attach> attachs) {
+        this.attachs = attachs;
+    }
+
+    public Long getErpSourceId() {
+        return erpSourceId;
+    }
+
+    public void setErpSourceId(Long erpSourceId) {
+        this.erpSourceId = erpSourceId;
+    }
+
+    public String getVendName() {
+        return vendName;
+    }
+
+    public void setVendName(String vendName) {
+        this.vendName = vendName;
+    }
+
+    public Long getVendUserUU() {
+        return vendUserUU;
+    }
+
+    public void setVendUserUU(Long vendUserUU) {
+        this.vendUserUU = vendUserUU;
+    }
+
+    public Float getTaxrate() {
+        return taxrate;
+    }
+
+    public void setTaxrate(Float taxrate) {
+        this.taxrate = taxrate;
+    }
+
+    public Short getOverdue() {
+        return overdue;
+    }
+
+    public void setOverdue(Short overdue) {
+        this.overdue = overdue;
+    }
+
+    public Short getValid() {
+        return valid;
+    }
+
+    public void setValid(Short valid) {
+        this.valid = valid;
+    }
+
+    public Short getDecideStatus() {
+        return decideStatus;
+    }
+
+    public void setDecideStatus(Short decideStatus) {
+        this.decideStatus = decideStatus;
+    }
+
+    public Set<PurchaseInquiryMouldItem> getInquiryMouldItems() {
+        return inquiryMouldItems;
+    }
+
+    public void setInquiryMouldItems(Set<PurchaseInquiryMouldItem> inquiryMouldItems) {
+        this.inquiryMouldItems = inquiryMouldItems;
+    }
+
+    public UserBaseInfo getVendUser() {
+        return vendUser;
+    }
+
+    public void setVendUser(UserBaseInfo vendUser) {
+        this.vendUser = vendUser;
+    }
+
+    /**
+     * 是否可报价
+     * <p>
+     * 1.未报价,未截止报价
+     * </p>
+     * <p>
+     * 2.已报价,未截止报价,客户未提交
+     * </p>
+     *
+     * @return
+     */
+    public boolean isReplyable() {
+        if (this.getEndDate() != null) {
+            return DateUtils.compare(this.getEndDate(), new Date(), DateUtils.COMPARE_DAY) >= 0
+                    && (this.status == Status.NOT_REPLY.value() || (this.status == Status.REPLIED.value()
+                    && (this.getCheck() == null || this.getCheck() != Constant.YES)
+                    && this.adoptStatus == null));
+        }
+        return this.status == Status.NOT_REPLY.value();
+    }
 
 
 }
 }

+ 15 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseProofingItem.java

@@ -86,6 +86,13 @@ public class PurchaseProofingItem {
 	@Column(name = "ppi_venduseruu")
 	@Column(name = "ppi_venduseruu")
 	private Long vendUserUU;
 	private Long vendUserUU;
 
 
+	/**
+	 * 供应商联系人
+	 */
+	@OneToOne
+	@JoinColumn(name = "ppi_venduseruu", insertable = false, updatable = false)
+	private UserBaseInfo vendUser;
+
 	/**
 	/**
 	 * 备注
 	 * 备注
 	 */
 	 */
@@ -265,4 +272,12 @@ public class PurchaseProofingItem {
 	public void setDate(Date date) {
 	public void setDate(Date date) {
 		this.date = date;
 		this.date = date;
 	}
 	}
+
+	public UserBaseInfo getVendUser() {
+		return vendUser;
+	}
+
+	public void setVendUser(UserBaseInfo vendUser) {
+		this.vendUser = vendUser;
+	}
 }
 }

+ 55 - 17
src/main/java/com/uas/platform/b2b/model/SaleSend.java

@@ -1,25 +1,13 @@
 package com.uas.platform.b2b.model;
 package com.uas.platform.b2b.model;
 
 
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
+import com.alibaba.fastjson.annotation.JSONField;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
-import com.alibaba.fastjson.annotation.JSONField;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
 
 
 /**
 /**
  * 平台里面,供应商发起的发货单(明细表角度)<br>
  * 平台里面,供应商发起的发货单(明细表角度)<br>
@@ -55,6 +43,14 @@ public class SaleSend implements Serializable {
 	@Column(name = "ss_enuu")
 	@Column(name = "ss_enuu")
 	private Long enUU;
 	private Long enUU;
 
 
+	/**
+	 * 发货单 所属企业(卖家)
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "ss_enuu", insertable = false, updatable = false)
+	private EnterpriseInfo vendor;
+
+
 	/**
 	/**
 	 * 发货单日期
 	 * 发货单日期
 	 */
 	 */
@@ -85,12 +81,27 @@ public class SaleSend implements Serializable {
 	@Column(name = "ss_custuu")
 	@Column(name = "ss_custuu")
 	private Long custUU;
 	private Long custUU;
 
 
+	/**
+	 * 客户企业
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "ss_custuu", insertable = false, updatable = false)
+	private EnterpriseInfo customer;
+
 	/**
 	/**
 	 * 客户联系人UU
 	 * 客户联系人UU
 	 */
 	 */
 	@Column(name = "ss_custuseruu")
 	@Column(name = "ss_custuseruu")
 	private Long custUserUU;
 	private Long custUserUU;
 
 
+	/**
+	 * 客户联系人
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "ss_custuseruu", insertable = false, updatable = false)
+	private UserBaseInfo custUser;
+
+
 	/**
 	/**
 	 * 备注
 	 * 备注
 	 */
 	 */
@@ -135,6 +146,9 @@ public class SaleSend implements Serializable {
 	@Column(name = "ss_verifystatus")
 	@Column(name = "ss_verifystatus")
 	private Short verifystatus;
 	private Short verifystatus;
 
 
+	public SaleSend() {
+	}
+
 	public Long getId() {
 	public Long getId() {
 		return id;
 		return id;
 	}
 	}
@@ -265,6 +279,30 @@ public class SaleSend implements Serializable {
 		this.print = print;
 		this.print = print;
 	}
 	}
 
 
+	public EnterpriseInfo getVendor() {
+		return vendor;
+	}
+
+	public void setVendor(EnterpriseInfo vendor) {
+		this.vendor = vendor;
+	}
+
+	public EnterpriseInfo getCustomer() {
+		return customer;
+	}
+
+	public void setCustomer(EnterpriseInfo customer) {
+		this.customer = customer;
+	}
+
+	public UserBaseInfo getCustUser() {
+		return custUser;
+	}
+
+	public void setCustUser(UserBaseInfo custUser) {
+		this.custUser = custUser;
+	}
+
 	/**
 	/**
 	 * 送货单详细
 	 * 送货单详细
 	 * 
 	 * 

+ 17 - 18
src/main/java/com/uas/platform/b2b/model/SaleSendItem.java

@@ -1,25 +1,13 @@
 package com.uas.platform.b2b.model;
 package com.uas.platform.b2b.model;
 
 
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
+import com.alibaba.fastjson.annotation.JSONField;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
 
-import com.alibaba.fastjson.annotation.JSONField;
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 
 /**
 /**
  * 平台里面,供应商发起的发货单明细(明细表角度)
  * 平台里面,供应商发起的发货单明细(明细表角度)
@@ -313,4 +301,15 @@ public class SaleSendItem {
 		this.barPrintStatus = barPrintStatus;
 		this.barPrintStatus = barPrintStatus;
 	}
 	}
 
 
+    public static List<SaleSend> distinct(List<SaleSendItem> sendItems) {
+		List<SaleSend> list = new ArrayList<>();
+		Set<Long> keys = new HashSet<Long>();
+		for (SaleSendItem item : sendItems) {
+			if (!keys.contains(item.getSend().getId())) {
+				list.add(item.getSend());
+				keys.add(item.getSend().getId());
+			}
+		}
+		return list;
+    }
 }
 }

+ 52 - 6
src/main/java/com/uas/platform/b2b/model/SaleTender.java

@@ -90,6 +90,19 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
     @JoinColumn(name = "st_useruu", insertable = false, updatable = false)
     @JoinColumn(name = "st_useruu", insertable = false, updatable = false)
     private User userInfo;
     private User userInfo;
 
 
+    /**
+     * 招标发起人uu
+     */
+    @Column(name = "st_recorderuu")
+    private Long recorderuu;
+
+    /**
+     * 招标发起人
+     */
+    @OneToOne
+    @JoinColumn(name = "st_recorderuu", insertable = false, updatable = false)
+    private User recorder;
+
     /**
     /**
      * 供应商联系人电话
      * 供应商联系人电话
      */
      */
@@ -198,9 +211,9 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
     /**
     /**
      * 投标企业基本信息
      * 投标企业基本信息
      */
      */
-    @OneToOne(cascade = CascadeType.PERSIST)
+    @OneToOne(cascade = CascadeType.REFRESH)
     @JoinColumn(name = "st_venduu", insertable = false, updatable = false)
     @JoinColumn(name = "st_venduu", insertable = false, updatable = false)
-    private EnterpriseBaseInfo enterpriseBaseInfo;
+    private EnterpriseBaseInfo vendor;
 
 
     /**
     /**
      * 审核状态(0代表已提交,1代表已审核,uas审批流用,平台发布单据为空)
      * 审核状态(0代表已提交,1代表已审核,uas审批流用,平台发布单据为空)
@@ -208,6 +221,11 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
     @Column(name = "st_auditstatus")
     @Column(name = "st_auditstatus")
     private Short auditStatus;
     private Short auditStatus;
 
 
+    /**
+     * 招标单id(消息跳转url用)
+     */
+    @Column(name = "st_ptid")
+    private Long ptId;
 
 
     public SaleTender(PurchaseTender tender) {
     public SaleTender(PurchaseTender tender) {
         this.setCode(tender.getCode());
         this.setCode(tender.getCode());
@@ -227,6 +245,8 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
         this.setStatus("待投标");// 转了投标单,默认是待投标状态
         this.setStatus("待投标");// 转了投标单,默认是待投标状态
         this.setTitle(tender.getTitle());
         this.setTitle(tender.getTitle());
         this.setEnUU(tender.getEnUU());
         this.setEnUU(tender.getEnUU());
+        this.setRecorderuu(tender.getUseruu());
+        this.setPtId(tender.getId());
     }
     }
 
 
     public SaleTender(PurchaseTender tender, TenderContactInfo contactInfo) {
     public SaleTender(PurchaseTender tender, TenderContactInfo contactInfo) {
@@ -250,6 +270,8 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
         this.setUserTel(contactInfo.getContactTel());
         this.setUserTel(contactInfo.getContactTel());
         this.setUser(contactInfo.getContact());
         this.setUser(contactInfo.getContact());
         this.setUseruu(contactInfo.getContactUU());
         this.setUseruu(contactInfo.getContactUU());
+        this.setRecorderuu(tender.getUseruu());
+        this.setPtId(tender.getId());
     }
     }
 
 
     public SaleTender() {
     public SaleTender() {
@@ -444,12 +466,12 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
         this.saleTenderItems = saleTenderItems;
         this.saleTenderItems = saleTenderItems;
     }
     }
 
 
-    public EnterpriseBaseInfo getEnterpriseBaseInfo() {
-        return enterpriseBaseInfo;
+    public EnterpriseBaseInfo getVendor() {
+        return vendor;
     }
     }
 
 
-    public void setEnterpriseBaseInfo(EnterpriseBaseInfo enterpriseBaseInfo) {
-        this.enterpriseBaseInfo = enterpriseBaseInfo;
+    public void setVendor(EnterpriseBaseInfo vendor) {
+        this.vendor = vendor;
     }
     }
 
 
     public Long getEnUU() {
     public Long getEnUU() {
@@ -480,4 +502,28 @@ public class SaleTender implements Serializable, Comparable<SaleTender> {
     public void setAuditStatus(Short auditStatus) {
     public void setAuditStatus(Short auditStatus) {
         this.auditStatus = auditStatus;
         this.auditStatus = auditStatus;
     }
     }
+
+    public Long getRecorderuu() {
+        return recorderuu;
+    }
+
+    public void setRecorderuu(Long recorderuu) {
+        this.recorderuu = recorderuu;
+    }
+
+    public User getRecorder() {
+        return recorder;
+    }
+
+    public void setRecorder(User recorder) {
+        this.recorder = recorder;
+    }
+
+    public Long getPtId() {
+        return ptId;
+    }
+
+    public void setPtId(Long ptId) {
+        this.ptId = ptId;
+    }
 }
 }

+ 14 - 0
src/main/java/com/uas/platform/b2b/model/User.java

@@ -133,6 +133,12 @@ public class User implements Serializable {
 	@Transient
 	@Transient
 	private boolean distribute;
 	private boolean distribute;
 
 
+	/**
+	 * 判断是否被转移权限
+	 */
+	@Transient
+	private boolean transfer;
+
 	public Long getUserUU() {
 	public Long getUserUU() {
 		return userUU;
 		return userUU;
 	}
 	}
@@ -324,6 +330,14 @@ public class User implements Serializable {
 		this.distribute = distribute;
 		this.distribute = distribute;
 	}
 	}
 
 
+	public boolean getTransfer() {
+		return transfer;
+	}
+
+	public void setTransfer(boolean transfer) {
+		this.transfer = transfer;
+	}
+
 	/**
 	/**
 	 * 获取用户所属企业UU号
 	 * 获取用户所属企业UU号
 	 * 
 	 * 

+ 5 - 6
src/main/java/com/uas/platform/b2b/model/UserInfo.java

@@ -1,15 +1,14 @@
 package com.uas.platform.b2b.model;
 package com.uas.platform.b2b.model;
 
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import com.uas.platform.core.model.Status;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
-import com.uas.platform.core.model.Status;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * 用户简单信息,前台程序使用
  * 用户简单信息,前台程序使用

+ 3 - 12
src/main/java/com/uas/platform/b2b/service/PurchaseInquiryMouldService.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2b.service;
 package com.uas.platform.b2b.service;
 
 
+import com.uas.platform.b2b.erp.model.InquiryMould;
 import com.uas.platform.b2b.erp.model.QuotationDown;
 import com.uas.platform.b2b.erp.model.QuotationDown;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageInfo;
@@ -213,9 +214,9 @@ public interface PurchaseInquiryMouldService {
 	/**
 	/**
 	 * 已作废的单据状态修改
 	 * 已作废的单据状态修改
 	 * 
 	 * 
-	 * @param convertInquiryMould
+	 * @param inquiryMoulds
 	 */
 	 */
-	public void onInvalid(PurchaseInquiryMould purchaseInquiryMould);
+	public void onInvalid(List<InquiryMould> inquiryMoulds);
 
 
 	/**
 	/**
 	 * 记录报价历史
 	 * 记录报价历史
@@ -225,16 +226,6 @@ public interface PurchaseInquiryMouldService {
 	 */
 	 */
 	public PurchaseInquiryMould saveHistory(PurchaseInquiryMould mould);
 	public PurchaseInquiryMould saveHistory(PurchaseInquiryMould mould);
 
 
-
-	/**
-	 * 根据enuu和erpSourceId获取单据
-	 * 
-	 * @param enuu
-	 * @param in_id
-	 * @return
-	 */
-	public PurchaseInquiryMould findByEnuuAndErpSourceId(Long enuu,Long in_id);
-
 	/**
 	/**
 	 * 买家反提交
 	 * 买家反提交
 	 * @param longs
 	 * @param longs

+ 32 - 1
src/main/java/com/uas/platform/b2b/service/UserService.java

@@ -276,12 +276,28 @@ public interface UserService {
 	/**
 	/**
 	 * 为客户分配企业用户
 	 * 为客户分配企业用户
 	 * 
 	 * 
-	 * @param enUu
+	 * @param custUU
 	 * @param users
 	 * @param users
 	 * @return
 	 * @return
 	 */
 	 */
 	public boolean addUserToVendor(Long custUU, List<User> users);
 	public boolean addUserToVendor(Long custUU, List<User> users);
 
 
+	/**
+	 * 将客户权限转移给用户(管理员操作)
+	 * @param custUU
+	 * @param users
+	 * @return
+	 */
+	boolean transferUserToVendor(Long custUU, List<User> users);
+
+	/**
+	 * 将客户权限转移给用户(有权限的用户操作)
+	 * @param custUU
+	 * @param userUU
+	 * @return
+	 */
+	boolean transferMyDistribute(Long custUU, Long userUU);
+
 	/**
 	/**
 	 * 判断当前企业是否为优企云服用户
 	 * 判断当前企业是否为优企云服用户
 	 */
 	 */
@@ -294,4 +310,19 @@ public interface UserService {
 	 * @return
 	 * @return
 	 */
 	 */
 	List<User> findUsersByKeyWord(String keyword);
 	List<User> findUsersByKeyWord(String keyword);
+
+	/**
+	 * 当前登录用户,是否被转移当前客户权限
+	 * @param custUU
+	 * @return
+	 */
+    Boolean getEnTransfer(Long custUU);
+	/**
+	 * 当前登录用户,是否被分配当前客户权限
+	 * @param custUU
+	 * @return
+	 */
+	Boolean getDistribute(Long custUU);
+
+
 }
 }

+ 19 - 18
src/main/java/com/uas/platform/b2b/service/impl/MakeAcceptServiceImpl.java

@@ -1,28 +1,12 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import com.uas.platform.b2b.dao.PagingReleaseCountDao;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.ui.ModelMap;
-import org.springframework.util.StringUtils;
-
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.dao.MakeAcceptDao;
 import com.uas.platform.b2b.dao.MakeAcceptDao;
 import com.uas.platform.b2b.dao.MakeAcceptItemDao;
 import com.uas.platform.b2b.dao.MakeAcceptItemDao;
 import com.uas.platform.b2b.dao.MakeOrderDao;
 import com.uas.platform.b2b.dao.MakeOrderDao;
+import com.uas.platform.b2b.dao.PagingReleaseCountDao;
 import com.uas.platform.b2b.event.MakeAcceptSaveEvent;
 import com.uas.platform.b2b.event.MakeAcceptSaveEvent;
+import com.uas.platform.b2b.event.MakeAcceptSaveReleaseEvent;
 import com.uas.platform.b2b.model.MakeAccept;
 import com.uas.platform.b2b.model.MakeAccept;
 import com.uas.platform.b2b.model.MakeAcceptItem;
 import com.uas.platform.b2b.model.MakeAcceptItem;
 import com.uas.platform.b2b.model.MakeOrder;
 import com.uas.platform.b2b.model.MakeOrder;
@@ -34,6 +18,21 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.PageParams;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 
 @Service
 @Service
 public class MakeAcceptServiceImpl implements MakeAcceptService {
 public class MakeAcceptServiceImpl implements MakeAcceptService {
@@ -67,6 +66,8 @@ public class MakeAcceptServiceImpl implements MakeAcceptService {
 				makeOrderDao.save(order);
 				makeOrderDao.save(order);
 			}
 			}
 		}
 		}
+		// 消息事件
+		ContextUtils.publishEvent(new MakeAcceptSaveReleaseEvent(MakeAcceptItem.distinct(acceptItems)));
 	}
 	}
 
 
 	@Override
 	@Override

+ 17 - 41
src/main/java/com/uas/platform/b2b/service/impl/MakeOrderChangeServiceImpl.java

@@ -1,50 +1,11 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.ui.ModelMap;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
-
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadTask;
-import com.uas.platform.b2b.dao.DistributeDao;
-import com.uas.platform.b2b.dao.MakeOrderChangeIndexDao;
-import com.uas.platform.b2b.dao.MakeOrderChangeItemDao;
-import com.uas.platform.b2b.dao.MakeOrderDao;
-import com.uas.platform.b2b.dao.PagingReleaseCountDao;
-import com.uas.platform.b2b.dao.RoleDao;
-import com.uas.platform.b2b.dao.UserBaseInfoDao;
-import com.uas.platform.b2b.dao.UserDao;
-import com.uas.platform.b2b.dao.UserOrderDao;
-import com.uas.platform.b2b.dao.VendorDao;
+import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.event.MakeOrderChangeSaveEvent;
 import com.uas.platform.b2b.event.MakeOrderChangeSaveEvent;
 import com.uas.platform.b2b.event.MakeOrderChangeSaveReleaseEvent;
 import com.uas.platform.b2b.event.MakeOrderChangeSaveReleaseEvent;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.model.*;
-import com.uas.platform.b2b.model.Distribute;
-import com.uas.platform.b2b.model.MakeOrder;
-import com.uas.platform.b2b.model.MakeOrderChangeItem;
-import com.uas.platform.b2b.model.Role;
-import com.uas.platform.b2b.model.SearchFilter;
-import com.uas.platform.b2b.model.User;
-import com.uas.platform.b2b.model.UserBaseInfo;
-import com.uas.platform.b2b.model.UserOrders;
-import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.MakeOrderChangeService;
 import com.uas.platform.b2b.service.MakeOrderChangeService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
@@ -54,6 +15,21 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 
 @Service
 @Service
 public class MakeOrderChangeServiceImpl implements MakeOrderChangeService {
 public class MakeOrderChangeServiceImpl implements MakeOrderChangeService {
@@ -123,7 +99,7 @@ public class MakeOrderChangeServiceImpl implements MakeOrderChangeService {
 							}
 							}
 						}
 						}
 					}
 					}
-					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(item.getVendUU(), item.getOrderChange().getEnUU());
+					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(item.getOrderChange().getEnUU(), item.getVendUU());
 					// 查找有权限的用户
 					// 查找有权限的用户
 					if (!CollectionUtils.isEmpty(vendors)) {
 					if (!CollectionUtils.isEmpty(vendors)) {
 						Long vendorId = vendors.get(0).getId();
 						Long vendorId = vendors.get(0).getId();

+ 17 - 20
src/main/java/com/uas/platform/b2b/service/impl/PurchaseAcceptServiceImpl.java

@@ -1,29 +1,11 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.JoinType;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.persistence.criteria.SetJoin;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.ui.ModelMap;
-import org.springframework.util.StringUtils;
-
+import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.dao.PagingReleaseCountDao;
 import com.uas.platform.b2b.dao.PagingReleaseCountDao;
 import com.uas.platform.b2b.dao.PurchaseAcceptDao;
 import com.uas.platform.b2b.dao.PurchaseAcceptDao;
 import com.uas.platform.b2b.dao.PurchaseAcceptItemDao;
 import com.uas.platform.b2b.dao.PurchaseAcceptItemDao;
 import com.uas.platform.b2b.dao.PurchaseOrderItemDao;
 import com.uas.platform.b2b.dao.PurchaseOrderItemDao;
+import com.uas.platform.b2b.event.PurchaseAcceptSaveReleaseEvent;
 import com.uas.platform.b2b.model.PurchaseAccept;
 import com.uas.platform.b2b.model.PurchaseAccept;
 import com.uas.platform.b2b.model.PurchaseAcceptItem;
 import com.uas.platform.b2b.model.PurchaseAcceptItem;
 import com.uas.platform.b2b.model.PurchaseOrderItem;
 import com.uas.platform.b2b.model.PurchaseOrderItem;
@@ -36,6 +18,19 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.PageParams;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
 
 
 @Service
 @Service
 public class PurchaseAcceptServiceImpl implements PurchaseAcceptService {
 public class PurchaseAcceptServiceImpl implements PurchaseAcceptService {
@@ -72,6 +67,8 @@ public class PurchaseAcceptServiceImpl implements PurchaseAcceptService {
 				}
 				}
 			}
 			}
 		}
 		}
+		// 产生消息
+		ContextUtils.publishEvent(new PurchaseAcceptSaveReleaseEvent(PurchaseAcceptItem.distinct(acceptItems)));
 	}
 	}
 
 
 	@Override
 	@Override

+ 4 - 3
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApCheckServiceImpl.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.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.event.PurchaseApCheckReplyReleaseEvent;
 import com.uas.platform.b2b.event.PurchaseApCheckSaveEvent;
 import com.uas.platform.b2b.event.PurchaseApCheckSaveEvent;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.search.SearchService;
@@ -96,9 +97,9 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
 	public void saveApChecks(List<PurchaseApCheckItem> checkItems) {
 	public void saveApChecks(List<PurchaseApCheckItem> checkItems) {
 		if (checkItems != null && checkItems.size() > 0) {
 		if (checkItems != null && checkItems.size() > 0) {
 			purchaseApCheckItemDao.save(checkItems);
 			purchaseApCheckItemDao.save(checkItems);
-			saveUserOrders(PurchaseApCheckItem.distinct(checkItems));
-		} else {
-
+			List <PurchaseApCheck> apChecks = PurchaseApCheckItem.distinct(checkItems);
+			saveUserOrders(apChecks);
+			ContextUtils.publishEvent(new PurchaseApCheckReplyReleaseEvent(apChecks));
 		}
 		}
 	}
 	}
 
 

+ 22 - 9
src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryMouldServiceImpl.java

@@ -3,8 +3,11 @@ package com.uas.platform.b2b.service.impl;
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.erp.model.InquiryMould;
 import com.uas.platform.b2b.erp.model.QuotationDown;
 import com.uas.platform.b2b.erp.model.QuotationDown;
+import com.uas.platform.b2b.event.PurchaseInquiryMouldInvalidReleaseEvent;
 import com.uas.platform.b2b.event.PurchaseInquiryMouldSaveEvent;
 import com.uas.platform.b2b.event.PurchaseInquiryMouldSaveEvent;
+import com.uas.platform.b2b.event.PurchaseInquiryMouldSaveReleaseEvent;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseInquiryMouldService;
 import com.uas.platform.b2b.service.PurchaseInquiryMouldService;
@@ -452,6 +455,8 @@ public class PurchaseInquiryMouldServiceImpl implements PurchaseInquiryMouldServ
 		purchaseInquiryMouldDao.save(convertInquiryMould);
 		purchaseInquiryMouldDao.save(convertInquiryMould);
 		saveUserOrders(convertInquiryMould);
 		saveUserOrders(convertInquiryMould);
 		ContextUtils.publishEvent(new PurchaseInquiryMouldSaveEvent(convertInquiryMould));
 		ContextUtils.publishEvent(new PurchaseInquiryMouldSaveEvent(convertInquiryMould));
+		// 消息事件
+		ContextUtils.publishEvent(new PurchaseInquiryMouldSaveReleaseEvent(convertInquiryMould));
 	}
 	}
 
 
 	private void saveUserOrders(final List<PurchaseInquiryMould> convertInquiryMould) {
 	private void saveUserOrders(final List<PurchaseInquiryMould> convertInquiryMould) {
@@ -509,15 +514,23 @@ public class PurchaseInquiryMouldServiceImpl implements PurchaseInquiryMouldServ
 	}
 	}
 
 
 	@Override
 	@Override
-	public void onInvalid(PurchaseInquiryMould purchaseInquiryMould) {
-			// 已作废有效状态设置为0 表示无效
-			purchaseInquiryMould.setValid(Constant.NO);
-			purchaseInquiryMouldDao.save(purchaseInquiryMould);
-	}
-
-	@Override
-	public PurchaseInquiryMould findByEnuuAndErpSourceId(Long enuu,Long erpSourceId) {
-		return purchaseInquiryMouldDao.findByEnuuAndErpSourceId(enuu, erpSourceId);
+	public void onInvalid(List<InquiryMould> inquiryMoulds) {
+		List<PurchaseInquiryMould> moulds = new ArrayList<>();
+		for (InquiryMould inquiryMould : inquiryMoulds) {
+			// 因为存在还未报价就作废单据的情况,所以不能用b2b_im_id,而用in_id来查找单据
+			if (null != inquiryMould.getIn_id()) {
+				PurchaseInquiryMould purchaseInquiryMould = purchaseInquiryMouldDao
+						.findByEnuuAndErpSourceId(SystemSession.getUser().getEnterprise().getUu(),inquiryMould.getIn_id());
+				if (null != purchaseInquiryMould) {
+					// 已作废有效状态设置为0 表示无效
+					purchaseInquiryMould.setValid(Constant.NO);
+					moulds.add(purchaseInquiryMould);
+				}
+			}
+		}
+		purchaseInquiryMouldDao.save(moulds);
+		// 作废产生消息
+		ContextUtils.publishEvent(new PurchaseInquiryMouldInvalidReleaseEvent(moulds));
 	}
 	}
 
 
 	@Override
 	@Override

+ 14 - 6
src/main/java/com/uas/platform/b2b/service/impl/PurchaseNoticeServiceImpl.java

@@ -4,10 +4,7 @@ import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.erp.model.PurchaseNotify;
 import com.uas.platform.b2b.erp.model.PurchaseNotify;
-import com.uas.platform.b2b.event.PurchaseNoticeEndReleaseEvent;
-import com.uas.platform.b2b.event.PurchaseNoticeSaveEvent;
-import com.uas.platform.b2b.event.PurchaseNoticeSaveReleaseEvent;
-import com.uas.platform.b2b.event.SaleSendSaveEvent;
+import com.uas.platform.b2b.event.*;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseNoticeService;
 import com.uas.platform.b2b.service.PurchaseNoticeService;
@@ -120,7 +117,7 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 							}
 							}
 						}
 						}
 					}
 					}
-					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(notice.getVendUU(), notice.getEnUU());
+					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(notice.getEnUU(), notice.getVendUU());
 					// 查找有权限的用户
 					// 查找有权限的用户
 					if (!CollectionUtils.isEmpty(vendors)) {
 					if (!CollectionUtils.isEmpty(vendors)) {
 						Long vendorId = vendors.get(0).getId();
 						Long vendorId = vendors.get(0).getId();
@@ -539,11 +536,17 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 
 
 	@Override
 	@Override
 	public void onSaleSendChange(List<SaleSendItem> sendItems) {
 	public void onSaleSendChange(List<SaleSendItem> sendItems) {
+		List<Long> ids = new ArrayList<>();
 		for (SaleSendItem item : sendItems) {
 		for (SaleSendItem item : sendItems) {
 			saleSendItemDao.updateByReply(item.getId(), item.getQty(), item.getReplyRemark());
 			saleSendItemDao.updateByReply(item.getId(), item.getQty(), item.getReplyRemark());
-			if (item.getNoticeId() != null)
+			if (item.getNoticeId() != null) {
 				purchaseNoticeDao.updateBySend(item.getNoticeId());
 				purchaseNoticeDao.updateBySend(item.getNoticeId());
+				ids.add(item.getNoticeId());
+			}
 		}
 		}
+		List<PurchaseNotice> notices = purchaseNoticeDao.findAll(ids);
+		// 买家拒收之后给卖家发消息
+		ContextUtils.publishEvent(new SaleSendRefuseReleaseEvent(SaleSendItem.distinct(sendItems)));
 	}
 	}
 
 
 	@Override
 	@Override
@@ -554,10 +557,15 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 	@Override
 	@Override
 	public void onVerify(List<SaleSendItemVerify> verifies) {
 	public void onVerify(List<SaleSendItemVerify> verifies) {
 		verifies = saleSendItemVerifyDao.save(verifies);
 		verifies = saleSendItemVerifyDao.save(verifies);
+		List<SaleSendItem> saleSendItems = new ArrayList<>();
 		for (SaleSendItemVerify verify : verifies) {
 		for (SaleSendItemVerify verify : verifies) {
 			saleSendItemDao.updateByVerify(verify.getSendItemId());
 			saleSendItemDao.updateByVerify(verify.getSendItemId());
 			updateVerifyStatus(verify.getSendItemId());
 			updateVerifyStatus(verify.getSendItemId());
+			SaleSendItem item = saleSendItemDao.findOne(verify.getSendItemId());
+			saleSendItems.add(item);
 		}
 		}
+		// 买家收料之后给卖家发消息
+		ContextUtils.publishEvent(new SaleSendAcceptReleaseEvent(SaleSendItem.distinct(saleSendItems)));
 	}
 	}
 
 
 	@Override
 	@Override

+ 5 - 3
src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderChangeServiceImpl.java

@@ -107,7 +107,7 @@ public class PurchaseOrderChangeServiceImpl implements PurchaseOrderChangeServic
 							}
 							}
 						}
 						}
 					}
 					}
-					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(change.getVendUU(), change.getEnUU());
+					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(change.getEnUU(), change.getVendUU());
 					// 查找有权限的用户
 					// 查找有权限的用户
 					if (!CollectionUtils.isEmpty(vendors)) {
 					if (!CollectionUtils.isEmpty(vendors)) {
 						Long vendorId = vendors.get(0).getId();
 						Long vendorId = vendors.get(0).getId();
@@ -171,7 +171,9 @@ public class PurchaseOrderChangeServiceImpl implements PurchaseOrderChangeServic
 			purchaseOrderDao.save(convertOrder(change));
 			purchaseOrderDao.save(convertOrder(change));
 			if (!CollectionUtils.isEmpty(change.getOrderChangeItems())) {
 			if (!CollectionUtils.isEmpty(change.getOrderChangeItems())) {
 				for (PurchaseOrderChangeItem changeItem : change.getOrderChangeItems())
 				for (PurchaseOrderChangeItem changeItem : change.getOrderChangeItems())
-					purchaseOrderItemDao.save(convertOrderItem(changeItem));
+					if (null != changeItem.getOrderItemId()) {
+						purchaseOrderItemDao.save(convertOrderItem(changeItem));
+					}
 			}
 			}
 			// 将数量变更为0的情况,需要修改单据的回复状态
 			// 将数量变更为0的情况,需要修改单据的回复状态
 			int notReply = purchaseOrderItemDao.getCountByStatus(change.getOrderId(), (short) Status.NOT_REPLY.value());
 			int notReply = purchaseOrderItemDao.getCountByStatus(change.getOrderId(), (short) Status.NOT_REPLY.value());
@@ -206,7 +208,7 @@ public class PurchaseOrderChangeServiceImpl implements PurchaseOrderChangeServic
 						}
 						}
 					}
 					}
 				}
 				}
-				List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(order.getVendUU(), order.getEnUU());
+				List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(order.getEnUU(), order.getVendUU());
 				// 查找有权限的用户
 				// 查找有权限的用户
 				if (!CollectionUtils.isEmpty(vendors)) {
 				if (!CollectionUtils.isEmpty(vendors)) {
 					Long vendorId = vendors.get(0).getId();
 					Long vendorId = vendors.get(0).getId();

+ 24 - 20
src/main/java/com/uas/platform/b2b/service/impl/PurchaseProofingServiceImpl.java

@@ -1,38 +1,38 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
-import java.util.*;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
+import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.dao.*;
-import com.uas.platform.b2b.model.*;
-import com.uas.platform.core.model.Constant;
-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.transaction.annotation.Transactional;
-import org.springframework.ui.ModelMap;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
-
-import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.event.PurchaseProofingApprovalSaveEvent;
 import com.uas.platform.b2b.event.PurchaseProofingApprovalSaveEvent;
+import com.uas.platform.b2b.event.PurchaseProofingApprovalSaveReleaseEvent;
 import com.uas.platform.b2b.event.PurchaseProofingItemSaveEvent;
 import com.uas.platform.b2b.event.PurchaseProofingItemSaveEvent;
+import com.uas.platform.b2b.event.PurchaseProofingItemSaveReleaseEvent;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseProofingService;
 import com.uas.platform.b2b.service.PurchaseProofingService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.XingePusher;
 import com.uas.platform.b2b.support.XingePusher;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.PageParams;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.SPage;
+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.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
 
 
 @SuppressWarnings("deprecation")
 @SuppressWarnings("deprecation")
 @Service
 @Service
@@ -87,6 +87,8 @@ public class PurchaseProofingServiceImpl implements PurchaseProofingService {
 		proofingItems = purchaseProofingItemDao.save(proofingItems);
 		proofingItems = purchaseProofingItemDao.save(proofingItems);
 		saveUserOrders(proofingItems);
 		saveUserOrders(proofingItems);
 		ContextUtils.publishEvent(new PurchaseProofingItemSaveEvent(proofingItems));
 		ContextUtils.publishEvent(new PurchaseProofingItemSaveEvent(proofingItems));
+		// 保存时产生消息
+		ContextUtils.publishEvent(new PurchaseProofingItemSaveReleaseEvent(proofingItems));
 	}
 	}
 
 
 	private void saveUserOrders(final List<PurchaseProofingItem> proofingItems) {
 	private void saveUserOrders(final List<PurchaseProofingItem> proofingItems) {
@@ -107,7 +109,7 @@ public class PurchaseProofingServiceImpl implements PurchaseProofingService {
 							}
 							}
 						}
 						}
 					}
 					}
-					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(item.getVendUU(), item.getProofing().getEnUU());
+					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(item.getProofing().getEnUU(), item.getVendUU());
 					// 查找有权限的用户
 					// 查找有权限的用户
 					if (!CollectionUtils.isEmpty(vendors)) {
 					if (!CollectionUtils.isEmpty(vendors)) {
 						Long vendorId = vendors.get(0).getId();
 						Long vendorId = vendors.get(0).getId();
@@ -434,6 +436,8 @@ public class PurchaseProofingServiceImpl implements PurchaseProofingService {
 	public void saveSampleApproval(List<PurchaseProofingApproval> proofingApprovals) {
 	public void saveSampleApproval(List<PurchaseProofingApproval> proofingApprovals) {
 		purchaseProofingApprovalDao.save(proofingApprovals);
 		purchaseProofingApprovalDao.save(proofingApprovals);
 		ContextUtils.publishEvent(new PurchaseProofingApprovalSaveEvent(proofingApprovals));
 		ContextUtils.publishEvent(new PurchaseProofingApprovalSaveEvent(proofingApprovals));
+		// 消息事件
+		ContextUtils.publishEvent(new PurchaseProofingApprovalSaveReleaseEvent(proofingApprovals));
 	}
 	}
 
 
 	@Override
 	@Override

+ 31 - 52
src/main/java/com/uas/platform/b2b/service/impl/PurchaseTenderServiceImpl.java

@@ -1,16 +1,21 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
+import com.uas.platform.b2b.core.util.ContextUtils;
+import com.uas.platform.b2b.core.util.ThreadTask;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.event.PurchaseTenderDecideReleaseEvent;
+import com.uas.platform.b2b.event.PurchaseTenderSaveReleaseEvent;
+import com.uas.platform.b2b.model.*;
+import com.uas.platform.b2b.service.AttachService;
+import com.uas.platform.b2b.service.PurchaseTenderService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.b2b.temporary.model.PurcTenderProd;
+import com.uas.platform.b2b.temporary.model.TenderContactInfo;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.search.b2b.model.SPage;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -23,46 +28,11 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
-import com.uas.platform.b2b.core.util.ThreadTask;
-import com.uas.platform.b2b.dao.AttachDao;
-import com.uas.platform.b2b.dao.CommonDao;
-import com.uas.platform.b2b.dao.DistributeDao;
-import com.uas.platform.b2b.dao.EnterpriseBaseInfoDao;
-import com.uas.platform.b2b.dao.EnterpriseDao;
-import com.uas.platform.b2b.dao.ProductDao;
-import com.uas.platform.b2b.dao.PurchaseTenderDao;
-import com.uas.platform.b2b.dao.PurchaseTenderProdDao;
-import com.uas.platform.b2b.dao.RoleDao;
-import com.uas.platform.b2b.dao.SaleTenderDao;
-import com.uas.platform.b2b.dao.SaleTenderItemDao;
-import com.uas.platform.b2b.dao.UserDao;
-import com.uas.platform.b2b.dao.UserOrderDao;
-import com.uas.platform.b2b.dao.VendorDao;
-import com.uas.platform.b2b.model.Attach;
-import com.uas.platform.b2b.model.Distribute;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.EnterpriseBaseInfo;
-import com.uas.platform.b2b.model.FileUpload;
-import com.uas.platform.b2b.model.Product;
-import com.uas.platform.b2b.model.PurchaseTender;
-import com.uas.platform.b2b.model.PurchaseTenderProd;
-import com.uas.platform.b2b.model.Role;
-import com.uas.platform.b2b.model.SaleTender;
-import com.uas.platform.b2b.model.SaleTenderItem;
-import com.uas.platform.b2b.model.SearchFilter;
-import com.uas.platform.b2b.model.User;
-import com.uas.platform.b2b.model.UserOrders;
-import com.uas.platform.b2b.model.Vendor;
-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.b2b.temporary.model.PurcTenderProd;
-import com.uas.platform.b2b.temporary.model.TenderContactInfo;
-import com.uas.platform.core.model.Constant;
-import com.uas.platform.core.model.PageInfo;
-import com.uas.platform.core.model.Status;
-import com.uas.platform.core.persistence.criteria.PredicateUtils;
-import com.uas.search.b2b.model.SPage;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
 
 
 /**
 /**
  * Created by dongbw on 17/03/07 14:16.
  * Created by dongbw on 17/03/07 14:16.
@@ -597,6 +567,7 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
      *
      *
      */
      */
     private void addSaleTender(PurchaseTender tender,List<TenderContactInfo> contactInfos, PurchaseTenderProd tenderProd) {
     private void addSaleTender(PurchaseTender tender,List<TenderContactInfo> contactInfos, PurchaseTenderProd tenderProd) {
+        List<SaleTender> saleTenders = new ArrayList<>();
         for (TenderContactInfo contactInfo : contactInfos) {
         for (TenderContactInfo contactInfo : contactInfos) {
             if (null != contactInfo.getUu()) {
             if (null != contactInfo.getUu()) {
                 Enterprise enterprise = enterpriseDao.findOne(contactInfo.getUu());
                 Enterprise enterprise = enterpriseDao.findOne(contactInfo.getUu());
@@ -623,8 +594,10 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
                         if (null == saleTender) {
                         if (null == saleTender) {
                             saleTender = new SaleTender(tender, contactInfo);
                             saleTender = new SaleTender(tender, contactInfo);
                             saleTender.setVendUU(enBaseInfo.getUu());
                             saleTender.setVendUU(enBaseInfo.getUu());
-                            saleTender.setEnterpriseBaseInfo(enBaseInfo); // 投标单主表构造完毕
+                            saleTender.setVendor(enBaseInfo); // 投标单主表构造完毕
                             saleTenderDao.save(saleTender);
                             saleTenderDao.save(saleTender);
+                            // 用于新增消息
+                            saleTenders.add(saleTender);
                             saveUserOrders(saleTender, tender);
                             saveUserOrders(saleTender, tender);
                         }
                         }
                         tenderItem.setSaleTender(saleTender);
                         tenderItem.setSaleTender(saleTender);
@@ -634,6 +607,9 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
                 }
                 }
             }
             }
         }
         }
+        if (Constant.YES == tender.getIsPublish()) {
+            ContextUtils.publishEvent(new PurchaseTenderSaveReleaseEvent(saleTenders));
+        }
     }
     }
 
 
 
 
@@ -742,6 +718,9 @@ public class PurchaseTenderServiceImpl implements PurchaseTenderService {
                 saleTenderItemDao.save(tenderItem);
                 saleTenderItemDao.save(tenderItem);
             }
             }
         }
         }
+        // 定标时,给供应商产生消息
+        List<SaleTender> saleTenderList = saleTenderDao.findByEnUUAndCode(purchaseTender.getEnUU(), purchaseTender.getCode());
+        ContextUtils.publishEvent(new PurchaseTenderDecideReleaseEvent(saleTenderList));
     }
     }
 
 
     @Override
     @Override

+ 91 - 5
src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java

@@ -546,6 +546,28 @@ public class UserServiceImpl implements UserService {
 		return users;
 		return users;
 	}
 	}
 
 
+	@Override
+	public Boolean getEnTransfer(Long custUU) {
+		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
+		List<Distribute> distributes = distributeDao.findByUserUUAndVendorId(SystemSession.getUser().getUserUU(), vendors.get(0).getId());
+		// 被转移了权限
+		if (!CollectionUtils.isEmpty(distributes) && null != distributes.get(0).getIsTransfer() && distributes.get(0).getIsTransfer() == Constant.YES) {
+			return true;
+		}
+		return false;
+	}
+
+	@Override
+	public Boolean getDistribute(Long custUU) {
+		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
+		List<Distribute> distributes = distributeDao.findByUserUUAndVendorId(SystemSession.getUser().getUserUU(), vendors.get(0).getId());
+		// 被分配了权限
+		if (!CollectionUtils.isEmpty(distributes)) {
+			return true;
+		}
+		return false;
+	}
+
 	@Override
 	@Override
 	public void bindUserToMyEnterprise(Long userUU) {
 	public void bindUserToMyEnterprise(Long userUU) {
 		User user = userDao.findOne(userUU);
 		User user = userDao.findOne(userUU);
@@ -712,6 +734,9 @@ public class UserServiceImpl implements UserService {
 					for (Distribute d : butes) {
 					for (Distribute d : butes) {
 						if (u.getUserUU().equals(d.getUserUU())) {
 						if (u.getUserUU().equals(d.getUserUU())) {
 							u.setDistribute(true);
 							u.setDistribute(true);
+							if (null != d.getIsTransfer() && Constant.YES == d.getIsTransfer()) {
+								u.setTransfer(true);
+							}
 						}
 						}
 					}
 					}
 				}
 				}
@@ -726,17 +751,26 @@ public class UserServiceImpl implements UserService {
 		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
 		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
 		if (!CollectionUtils.isEmpty(users)) {
 		if (!CollectionUtils.isEmpty(users)) {
 			for (User u : users) {
 			for (User u : users) {
-				Distribute disbute = new Distribute();
+				Distribute distribute = new Distribute();
 				List<Distribute> butes = distributeDao.findByUserUUAndVendorId(u.getUserUU(), vendors.get(0).getId());
 				List<Distribute> butes = distributeDao.findByUserUUAndVendorId(u.getUserUU(), vendors.get(0).getId());
 				if (u.getDistribute()) {
 				if (u.getDistribute()) {
 					if (CollectionUtils.isEmpty(butes)) {
 					if (CollectionUtils.isEmpty(butes)) {
-						disbute.setUserUU(u.getUserUU());
-						disbute.setVendorId(vendors.get(0).getId());
-						distributeDao.save(disbute);
+						distribute.setUserUU(u.getUserUU());
+						distribute.setVendorId(vendors.get(0).getId());
+						distribute.setLeaderUU(SystemSession.getUser().getUserUU());
+						distributeDao.save(distribute);
 					}
 					}
 				} else {
 				} else {
 					if (!CollectionUtils.isEmpty(butes)) {
 					if (!CollectionUtils.isEmpty(butes)) {
-						distributeDao.delete(butes.get(0));
+//						distributeDao.delete(butes.get(0));
+						List<Distribute> deleteList = new ArrayList<>();
+						// 删除时,同时删除其绑定权限的其他用户
+						List<Distribute> distributes = distributeDao.findByVendorIdAndLeaderUU(vendors.get(0).getId(), u.getUserUU());
+						if (!CollectionUtils.isEmpty(distributes)) {
+							deleteList.addAll(distributes);
+						}
+						deleteList.add(butes.get(0));
+						distributeDao.deleteAndLog(deleteList);
 					}
 					}
 				}
 				}
 			}
 			}
@@ -745,6 +779,58 @@ public class UserServiceImpl implements UserService {
 		return false;
 		return false;
 	}
 	}
 
 
+	@Override
+	public boolean transferUserToVendor(Long custUU, List<User> users) {
+		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
+		if (!CollectionUtils.isEmpty(users)) {
+			for (User u : users) {
+				Distribute distribute = new Distribute();
+				List<Distribute> transfers = distributeDao.findByUserUUAndVendorId(u.getUserUU(), vendors.get(0).getId());
+				if (u.getTransfer()) {
+					if (CollectionUtils.isEmpty(transfers)) {
+						distribute.setUserUU(u.getUserUU());
+						distribute.setVendorId(vendors.get(0).getId());
+						distribute.setLeaderUU(SystemSession.getUser().getUserUU());
+						distribute.setIsTransfer(Constant.YES);
+						distributeDao.save(distribute);
+					} else {
+						if (null == transfers.get(0).getIsTransfer() || transfers.get(0).getIsTransfer() != 1) {
+							Distribute transfer = transfers.get(0);
+							transfer.setIsTransfer(Constant.YES);
+							transfer.setLeaderUU(SystemSession.getUser().getUserUU());
+							distributeDao.save(transfer);
+						}
+					}
+				} else {
+					if (!CollectionUtils.isEmpty(transfers) && null != transfers.get(0).getIsTransfer() &&  transfers.get(0).getIsTransfer() == Constant.YES) {
+						distributeDao.delete(transfers.get(0));
+					}
+
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	@Override
+	public boolean transferMyDistribute(Long custUU, Long userUU) {
+		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
+		if (null != userUU) {
+			List<Distribute> transfers = distributeDao.findByUserUUAndVendorId(SystemSession.getUser().getUserUU(), vendors.get(0).getId());
+			if (!CollectionUtils.isEmpty(transfers)) {
+				transfers.get(0).setUserUU(userUU);
+				distributeDao.save(transfers.get(0));
+				List<Distribute> distributes = distributeDao.findByUserUUAndVendorId(userUU, vendors.get(0).getId());
+				if (!CollectionUtils.isEmpty(distributes)) {
+					distributeDao.delete(distributes.get(0));
+				}
+				return true;
+			}
+		}
+		return false;
+	}
+
 	/**
 	/**
 	 * TODO 为防止优企云服用户更改用户信息报错问题 目前加一个判断,在平台中优企云服用户忽略同步数据
 	 * TODO 为防止优企云服用户更改用户信息报错问题 目前加一个判断,在平台中优企云服用户忽略同步数据
 	 */
 	 */

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

@@ -280,11 +280,27 @@ define(['angular', 'toaster', 'big'], function(angular, big) {
                 url: 'account/user/bindUserToVendor/:uu',
                 url: 'account/user/bindUserToVendor/:uu',
                 method: 'POST'
                 method: 'POST'
             },
             },
+            transferUserToVendor: {
+                url: 'account/user/transferUserToVendor/:uu',
+                method: 'POST'
+            },
+            transferMyDistribute: {
+                url: 'account/user/transferMyDistribute',
+                method: 'POST'
+            },
             findDistribute: {
             findDistribute: {
-                url: 'account/user/findDistribute/:uu',
+                url: 'account/user/findDistribute',
                 method: 'GET',
                 method: 'GET',
                 isArray: true
                 isArray: true
             },
             },
+            getDistribute: {
+                url: 'account/user/getDistribute/:custUU',
+                method: 'GET'
+            },
+            getEnTransfer: {
+                url: 'account/user/getEnTransfer/:custUU',
+                method: 'GET'
+            },
             findVendor: {
             findVendor: {
                 url: 'account/user/findVendor/:uu',
                 url: 'account/user/findVendor/:uu',
                 method: 'GET',
                 method: 'GET',

+ 204 - 28
src/main/webapp/resources/js/index/app.js

@@ -1796,7 +1796,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     }]);
     }]);
 
 
     // 客户
     // 客户
-    app.controller('CustomerCtrl', ['$scope', 'VendorService', 'BaseService', 'AuthenticationService', 'ngTableParams', '$modal', 'toaster', 'Vendor', function ($scope, VendorService, BaseService, AuthenticationService, ngTableParams, $modal, toaster, Vendor) {
+    app.controller('CustomerCtrl', ['$scope', 'VendorService', 'BaseService', 'AuthenticationService', 'ngTableParams', '$modal', 'toaster', 'Vendor', 'AccountUser', function ($scope, VendorService, BaseService, AuthenticationService, ngTableParams, $modal, toaster, Vendor, AccountUser) {
         BaseService.scrollBackToTop();
         BaseService.scrollBackToTop();
         $scope.userInfoResult = true;
         $scope.userInfoResult = true;
         AuthenticationService.getAuthentication().success(function (data) {
         AuthenticationService.getAuthentication().success(function (data) {
@@ -1841,31 +1841,71 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
 
         // 分配用户
         // 分配用户
         $scope.addUserInfo = function (customer) {
         $scope.addUserInfo = function (customer) {
-            //TODO
-            if ($scope.thisUser.sys) {
-                var modalInstance = $modal.open({
-                    animation: true,
-                    templateUrl: 'static/tpl/index/account/add_userInfo.html',
-                    controller: 'AddUserInfoCtrl',
-                    resolve: {
-                        customer: function () {
-                            return customer;
+            // 获取当前用户在当前企业是否被转移权限
+            AccountUser.getEnTransfer ({custUU: customer.myEnterprise.uu}, function(data) {
+                customer.enTransfer = data.result;
+                //是管理员,或者被转移了权限时
+                console.log(customer.enTransfer);
+                if ($scope.thisUser.sys || customer.enTransfer) {
+                    var modalInstance = $modal.open({
+                        animation: true,
+                        templateUrl: 'static/tpl/index/account/add_userInfo.html',
+                        controller: 'AddUserInfoCtrl',
+                        resolve: {
+                            customer: function () {
+                                return customer;
+                            }
                         }
                         }
-                    }
-                });
-                modalInstance.result.then(function (changed, checked) {
-                    if (changed) {
-                        if (checked)
-                            $scope.newUser.roles = checked;
-                        else
-                            loadUsers();
-                    }
-                });
+                    });
+                    modalInstance.result.then(function (changed, checked) {
+                        if (changed) {
+                            if (checked)
+                                $scope.newUser.roles = checked;
+                            else
+                                loadUsers();
+                        }
+                    });
+
+                } else {
+                    toaster.pop('error', '您没有为当前客户分配用户的权限!');
+                }
+            });
+        };
+
+        // 转移权限
+        $scope.transferUserInfo = function (customer) {
+            customer.enDistribute = null;
+            // 获取当前用户在当前企业是否被转移权限
+            AccountUser.getDistribute ({custUU: customer.myEnterprise.uu}, function(data) {
+                customer.enDistribute = data.result;
+                //是管理员,或者被分配时
+                console.log(customer.enDistribute);
+                if ($scope.thisUser.sys || customer.enDistribute) {
+                    var modalInstance = $modal.open({
+                        animation: true,
+                        templateUrl: 'static/tpl/index/account/transfer_userInfo.html',
+                        controller: 'TransferUserInfoCtrl',
+                        resolve: {
+                            customer: function () {
+                                return customer;
+                            }
+                        }
+                    });
+                    modalInstance.result.then(function (changed, checked) {
+                        if (changed) {
+                            if (checked)
+                                $scope.newUser.roles = checked;
+                            else
+                                loadUsers();
+                        }
+                    });
+
+                } else {
+                    toaster.pop('error', '您没有转移当前客户权限的权限!');
+                }
+            });
+        };
 
 
-            } else {
-                toaster.pop('error', '您不是管理员,无权限分配用户!');
-            }
-        }
         $scope.showUserInfo = function (customer, boo) {
         $scope.showUserInfo = function (customer, boo) {
             $scope.custInfo = customer;
             $scope.custInfo = customer;
             if (boo) {
             if (boo) {
@@ -2192,6 +2232,139 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
 
     }]);
     }]);
 
 
+    // 转移权限
+    app.controller('TransferUserInfoCtrl', ['$scope', '$modalInstance', 'customer', 'AccountUser', 'toaster', 'AuthenticationService', function ($scope, $modalInstance, customer, AccountUser, toaster, AuthenticationService) {
+        AuthenticationService.getAuthentication().success(function (data) {
+            $scope.loading = false;
+            $scope.thisUser = data;
+        });
+        $scope.checkboxes = {
+            checked: false
+        };
+        $scope.loading = true;
+        $scope.transfer = [];
+        AccountUser.findUsers({uu: customer.myEnterprise.uu}, null, function (data) {
+            $scope.userinfos = data;
+            var transfer = [];
+            angular.forEach($scope.userinfos, function (user, index) {
+                // 当前用户是被管理员转移权限时,转移的是被管理员转移的权限。
+                if ($scope.thisUser.userUU === user.userUU && user.transfer) {
+                    $scope.thisUser.transfer = true;
+                }
+                if ($scope.thisUser.sys || $scope.thisUser.transfer) {
+                    if (user.transfer) {
+                        transfer.push({num: index});
+                        user.checked = true;
+                    }
+                } else {
+                    if (user.distribute) {
+                        transfer.push({num: index});
+                        user.checked = true;
+                    }
+                }
+            });
+            $scope.transfer = transfer;
+            $scope.havedone = angular.copy($scope.transfer);
+            $scope.loading = false;
+        })
+
+        var checkStatus = function (userinfos) {
+            var transfer = [];
+            angular.forEach(userinfos, function (user, index) {
+                if ($scope.thisUser.userUU === user.userUU && user.transfer) {
+                    $scope.thisUser.transfer = true;
+                }
+                if ($scope.thisUser.sys || $scope.thisUser.transfer) {
+                    if (user.transfer) {
+                        transfer.push({num: index});
+                        user.checked = true;
+                    }
+                } else {
+                    if (user.distribute) {
+                        transfer.push({num: index});
+                        user.checked = true;
+                    }
+                }
+            });
+            $scope.transfer = transfer;
+            $scope.isChanged = !angular.equals($scope.havedone, $scope.transfer);
+        }
+        $scope.isChanged = false;
+        $scope.isChangedAll = false;
+        $scope.changes = [];
+        // 点击其中一个明细的复选框
+        $scope.checkOne = function (user) {
+            $scope.changes = [];
+            user.$checked = !user.$checked;
+            angular.forEach($scope.userinfos, function (userInfo) {
+                if ($scope.thisUser.userUU === user.userUU && user.transfer) {
+                    $scope.thisUser.transfer = true;
+                }
+                if (user.userUU != userInfo.userUU) {
+                    // 管理员或被管理员转移权限的用户,使用的是transfer
+                    if ($scope.thisUser.sys || $scope.thisUser.transfer) {
+                        userInfo.transfer = false;
+                    }
+                }
+            });
+            checkStatus($scope.userinfos);
+        };
+        $scope.close = function (save) {
+            var chooseResult = [];
+            if (save) {
+                if (customer.myEnterprise.uu) {
+                    // 当前用户是管理员时
+                    if ($scope.thisUser.sys) {
+                        angular.forEach($scope.userinfos, function (item, i) {
+                            chooseResult.push(item);
+                        });
+                        if (chooseResult.length > 0) {
+                            $scope.loading = true;
+                            AccountUser.transferUserToVendor({uu: customer.myEnterprise.uu}, chooseResult, function (data) {
+                                $scope.loading = false;
+                                toaster.pop('success', '提示', '保存成功');
+                                $modalInstance.close(false);
+                            }, function (response) {
+                                $scope.loading = false;
+                                toaster.pop('error', '保存失败', response.data);
+                                $modalInstance.close(false);
+                            })
+                        } else {
+                            toaster.pop('error', '保存失败', "您未勾选任何记录");
+                        }
+                    } else {
+                        // 非管理员转移自己的权限时
+                        angular.forEach($scope.userinfos, function (item, i) {
+                            if (item.transfer) {
+                                $scope.target = item;
+                            }
+                        });
+                        if (!$scope.target) {
+                            toaster.pop('error', '保存失败', "您未选择权限转移对象");
+                        } else {
+                            $scope.loading = true;
+                            console.log($scope.target);
+                            AccountUser.transferMyDistribute({custUU: customer.myEnterprise.uu, userUU: $scope.target.userUU}, {} ,function (data) {
+                                $scope.loading = false;
+                                toaster.pop('success', '提示', '保存成功');
+                                $modalInstance.close(false);
+                            }, function (response) {
+                                $scope.loading = false;
+                                toaster.pop('error', '保存失败', response.data);
+                                $modalInstance.close(false);
+                            });
+                        }
+                    }
+                } else {
+                    $modalInstance.close(true, $scope.checkboxes.checked);
+                }
+            } else {
+                $modalInstance.close(false);
+            }
+        };
+
+    }]);
+
     /**
     /**
      * 页面状态按钮过滤
      * 页面状态按钮过滤
      */
      */
@@ -9267,7 +9440,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     resultRole = false;
                     resultRole = false;
                     return;
                     return;
                 }
                 }
-            })
+            });
             if (resultRole) {
             if (resultRole) {
                 var modalInstance = $modal.open({
                 var modalInstance = $modal.open({
                     animation: true,
                     animation: true,
@@ -9280,7 +9453,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     }
                     }
                 });
                 });
             }
             }
-        }
+        };
         // 为用户分配角色(添加企业)
         // 为用户分配角色(添加企业)
         $scope.addVendor = function (user, isIssy) {
         $scope.addVendor = function (user, isIssy) {
             if (!isIssy) {
             if (!isIssy) {
@@ -12510,6 +12683,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 });
                 });
             }
             }
         }
         }
+
+        // 分配权限
         $scope.addUserInfo = function (customer) {
         $scope.addUserInfo = function (customer) {
             //TODO
             //TODO
             if ($scope.thisUser.sys) {
             if ($scope.thisUser.sys) {
@@ -12533,9 +12708,10 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 });
                 });
 
 
             } else {
             } else {
-                toaster.pop('error', '您不是管理员,无权限分配用户!');
+                toaster.pop('error', '您没有分配用户的权限!');
             }
             }
-        }
+        };
+
         $scope.showUserInfo = function (customer, boo) {
         $scope.showUserInfo = function (customer, boo) {
             $scope.custInfo = customer;
             $scope.custInfo = customer;
             if (boo) {
             if (boo) {

+ 1 - 1
src/main/webapp/resources/tpl/index/account/add_userInfo.html

@@ -36,7 +36,7 @@
 		</thead>
 		</thead>
 		<tbody>
 		<tbody>
 				<div style="overflow-y:scroll; width:100%;max-height:500px">			
 				<div style="overflow-y:scroll; width:100%;max-height:500px">			
-					<tr ng-repeat="user in userinfos| filter: keyword">
+					<tr ng-repeat="user in userinfos| filter: keyword" ng-if="!user.sys && !user.transfer">
 						<td width="80px;">{{user.userUU}}</td>
 						<td width="80px;">{{user.userUU}}</td>
 						<td width="100px;">{{user.userName}}</td>
 						<td width="100px;">{{user.userName}}</td>
 						<td width="40px;" style="text-align: center"><input ng-model="user.distribute" name="checkbox" ng-click="checkOne()" type="checkbox"></td>
 						<td width="40px;" style="text-align: center"><input ng-model="user.distribute" name="checkbox" ng-click="checkOne()" type="checkbox"></td>

+ 69 - 0
src/main/webapp/resources/tpl/index/account/transfer_userInfo.html

@@ -0,0 +1,69 @@
+<style>
+	#user-lists{
+		max-height: 600px;
+		overflow-x: hidden;
+		overflow-y: scroll;
+	}
+	@media screen and (max-width: 1366px){
+		#user-lists{
+			max-height: 368px;
+		}
+	}
+	@media screen and (max-width: 1600px){
+		#user-lists{
+			max-height: 480px;
+		}
+	}
+</style>
+<div class="modal-header">
+	<h3 class="modal-title">
+		权限转移
+	</h3>
+</div>
+<div class="form-group" id="window-search" style="height: 36px; margin-bottom: 0; margin-top: 5px;">
+	<div class="col-sm-12">
+		<input type="text" class="form-control input-sm ng-pristine ng-invalid ng-invalid-required ng-touched" required="" placeholder="输入用户名关键词搜索" autofocus="" ng-model="keyword" ng-search="onSearch(keyword)" />
+		<a class="btn input-group-addon" ng-click="onSearch()">搜索</a>
+	</div>
+</div>
+<div class="modal-body" id="user-lists">
+	<div>
+		<table width="99%" class="block table table-bordered table-striped table-hover">
+		<thead>
+			<th width="80px;">用户UU</th>
+			<th width="100px;">用户名称</th>
+			<th width="40px;"></th>
+		</thead>
+		<tbody>
+			<!-- 当前用户是管理员时 -->
+			<div style="overflow-y:scroll; width:100%;max-height:500px" ng-if="thisUser.sys">
+				<tr ng-repeat="user in userinfos| filter: keyword" ng-if="!user.sys">
+					<td width="80px;">{{user.userUU}}</td>
+					<td width="100px;">{{user.userName}}</td>
+					<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="checkbox" ng-click="checkOne(user)" ng-checked="user.checked" type="checkbox"></td>
+				</tr>
+			</div>
+			<!-- 当前用户是被管理员转移权限时 -->
+			<div style="overflow-y:scroll; width:100%;max-height:500px" ng-if="!thisUser.sys && thisUser.transfer">
+				<tr ng-repeat="user in userinfos| filter: keyword" ng-if="thisUser.userUU != user.userUU && !user.sys">
+					<td width="80px;">{{user.userUU}}</td>
+					<td width="100px;">{{user.userName}}</td>
+					<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="checkbox" ng-click="checkOne(user)" ng-checked="user.checked" type="radio"></td>
+				</tr>
+			</div>
+			<!-- 当前用户是非管理员,但有权限时 -->
+			<div style="overflow-y:scroll; width:100%;max-height:500px" ng-if="!thisUser.sys && !thisUser.transfer">
+				<tr ng-repeat="user in userinfos| filter: keyword" ng-if="!user.distribute && !user.sys">
+					<td width="80px;">{{user.userUU}}</td>
+					<td width="100px;">{{user.userName}}</td>
+					<td width="40px;" style="text-align: center"><input ng-model="user.distribute" name="distribute" ng-click="checkOne(user)" ng-checked="user.checked" type="radio"></td>
+				</tr>
+			</div>
+		</tbody>
+	</table>
+	</div>
+</div>
+<div class="modal-footer">
+	<button class="btn btn-primary" ng-click="close(true)" ng-disabled="!isChanged">确认</button>
+	<button class="btn btn-default" ng-click="close(false)" type="button">取消</button>
+</div>

+ 1 - 1
src/main/webapp/resources/tpl/index/baseInfo/myRequest.html

@@ -378,7 +378,7 @@
 				</div>
 				</div>
 				<div ng-if="::request.enterprise.enAddress" class="row col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::request.enterprise.enAddress"></span></div>
 				<div ng-if="::request.enterprise.enAddress" class="row col-md-12"><span class="text-muted">企业地址:</span><span ng-bind="::request.enterprise.enAddress"></span></div>
 			</td>
 			</td>
-			<td>
+			<td class="text-center">
 				<p ng-if="request.statusCode==313 && request.vendor != 1"><a class="btn label-success white" ng-click="addSupplier(request.vendUID)">添加供应商 </a></p>
 				<p ng-if="request.statusCode==313 && request.vendor != 1"><a class="btn label-success white" ng-click="addSupplier(request.vendUID)">添加供应商 </a></p>
 				<p class="switch"  ng-if="request.statusCode==313 && request.vendor == 1">
 				<p class="switch"  ng-if="request.statusCode==313 && request.vendor == 1">
 					<span style="float: left;">供应商</span>
 					<span style="float: left;">供应商</span>

+ 2 - 1
src/main/webapp/resources/tpl/index/sale/customer.html

@@ -144,7 +144,8 @@
 						<td class="text-center">
 						<td class="text-center">
 								<!--<a title="展开" class="text-muted" ng-click="open(customer,$index)"><i class="fa fa-toggle-down fa-lg"></i></a>-->
 								<!--<a title="展开" class="text-muted" ng-click="open(customer,$index)"><i class="fa fa-toggle-down fa-lg"></i></a>-->
 								<!--<a ng-click="viewDetail(customer.id)">查看详情</a><br/>-->
 								<!--<a ng-click="viewDetail(customer.id)">查看详情</a><br/>-->
-								<a style="color: #327ebe;" ng-click="addUserInfo(customer)"><!--<i class="fa fa-plus-circle fa-lg">-->分配</i></a>
+								<div><a style="color: #327ebe;" title="被分配的用户享有查看和操作权限" ng-click="addUserInfo(customer)"><!--<i class="fa fa-plus-circle fa-lg">-->分配</i></a></div>
+							<div><a style="color: #327ebe;" title="被转移权限的用户可以分配权限给其他用户" ng-click="transferUserInfo(customer)"><!--<i class="fa fa-plus-circle fa-lg">-->转移</a></div>
 						</td>
 						</td>
 					</tr>
 					</tr>
 			</tbody>
 			</tbody>