Просмотр исходного кода

客户服务模块

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@3206 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
yingp 10 лет назад
Родитель
Сommit
bbce8b2e33
29 измененных файлов с 672 добавлено и 136 удалено
  1. 78 0
      src/main/java/com/uas/platform/b2b/controller/CustServeController.java
  2. 69 62
      src/main/java/com/uas/platform/b2b/controller/PublicQueryController.java
  3. 1 1
      src/main/java/com/uas/platform/b2b/controller/VendorController.java
  4. 24 3
      src/main/java/com/uas/platform/b2b/dao/VendorDao.java
  5. 9 4
      src/main/java/com/uas/platform/b2b/manage/model/ManageNotice.java
  6. 15 0
      src/main/java/com/uas/platform/b2b/manage/service/MasterService.java
  7. 2 2
      src/main/java/com/uas/platform/b2b/manage/service/impl/AccessTokenServiceImpl.java
  8. 34 0
      src/main/java/com/uas/platform/b2b/manage/service/impl/MasterServiceImpl.java
  9. 119 0
      src/main/java/com/uas/platform/b2b/model/AccessToken.java
  10. 13 0
      src/main/java/com/uas/platform/b2b/redis/dao/AccessTokenDao.java
  11. 65 0
      src/main/java/com/uas/platform/b2b/redis/dao/impl/AccessTokenDaoImpl.java
  12. 19 0
      src/main/java/com/uas/platform/b2b/service/AccessTokenService.java
  13. 15 10
      src/main/java/com/uas/platform/b2b/service/VendorService.java
  14. 34 0
      src/main/java/com/uas/platform/b2b/service/impl/AccessTokenServiceImpl.java
  15. 30 32
      src/main/java/com/uas/platform/b2b/service/impl/ChangeAdminServiceImpl.java
  16. 1 1
      src/main/java/com/uas/platform/b2b/service/impl/EnterpriseServiceImpl.java
  17. 1 1
      src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java
  18. 13 19
      src/main/java/com/uas/platform/b2b/service/impl/VendorsServiceImpl.java
  19. 3 1
      src/main/java/com/uas/platform/b2b/support/HostConstant.java
  20. 2 0
      src/main/resources/redis.properties
  21. 24 0
      src/main/resources/spring/redis.xml
  22. 1 0
      src/main/webapp/WEB-INF/views/normal/index.html
  23. 10 0
      src/main/webapp/resources/css/index.css
  24. 28 0
      src/main/webapp/resources/js/index/app.js
  25. 8 0
      src/main/webapp/resources/js/index/services/Purc.js
  26. 1 0
      src/main/webapp/resources/tpl/index/cs/Readme.md
  27. 0 0
      src/main/webapp/resources/tpl/index/cs/index.html
  28. 31 0
      src/main/webapp/resources/tpl/index/cs/left.html
  29. 22 0
      src/main/webapp/resources/tpl/index/cs/right.html

+ 78 - 0
src/main/java/com/uas/platform/b2b/controller/CustServeController.java

@@ -0,0 +1,78 @@
+package com.uas.platform.b2b.controller;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.uas.platform.b2b.manage.service.MasterService;
+import com.uas.platform.b2b.model.AccessToken;
+import com.uas.platform.b2b.model.Vendor;
+import com.uas.platform.b2b.service.AccessTokenService;
+import com.uas.platform.b2b.service.VendorService;
+import com.uas.platform.core.exception.NotFoundException;
+
+/**
+ * 采购角色 <br>
+ * 客户服务模块
+ * <p>
+ * 可以跳转供应商的系统
+ * </p>
+ * 
+ * @author yingp
+ *
+ */
+@Controller
+@RequestMapping("/purc/vendor/serve")
+public class CustServeController {
+
+	@Autowired
+	private VendorService vendorService;
+
+	@Autowired
+	private MasterService masterService;
+
+	@Autowired
+	private AccessTokenService accessTokenService;
+
+	/**
+	 * 获取全部使用了ERP系统的供应商的信息
+	 * 
+	 * @return
+	 */
+	@RequestMapping
+	@ResponseBody
+	public List<Vendor> getVendorsUsingErp() {
+		return vendorService.findMyVendorsUsingErp();
+	}
+
+	/**
+	 * 跳转到供应商系统的客服模块
+	 * 
+	 * @throws IOException
+	 */
+	@RequestMapping("/{uu}")
+	public void redirectVendorServe(HttpServletResponse response, @PathVariable("uu") long uu) throws IOException {
+		List<String> websites = masterService.findWebsiteByUU(uu);
+		if (CollectionUtils.isEmpty(websites)) {
+			throw new NotFoundException("网址");
+		} else {
+			// 绑定供应商uu号、个人信息,生成token
+			AccessToken token = accessTokenService.createNew(uu);
+			String website = websites.get(0);
+			StringBuffer redirectUrl = new StringBuffer(website);
+			if (!website.endsWith("/"))
+				redirectUrl.append("/");
+			redirectUrl.append("opensys/custserve.action?client_type=b2b&access_token=").append(token.getId());
+			response.sendRedirect(redirectUrl.toString());
+		}
+	}
+
+}

+ 69 - 62
src/main/java/com/uas/platform/b2b/controller/PublicQueryController.java

@@ -8,8 +8,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.http.HttpServletRequest;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
@@ -25,11 +28,13 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.UserDao;
+import com.uas.platform.b2b.model.AccessToken;
 import com.uas.platform.b2b.model.Enterprise;
 import com.uas.platform.b2b.model.EnterpriseDetail;
 import com.uas.platform.b2b.model.QueriableMember;
 import com.uas.platform.b2b.model.QueriableUser;
 import com.uas.platform.b2b.model.User;
+import com.uas.platform.b2b.service.AccessTokenService;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.EnterpriseService;
 import com.uas.platform.b2b.service.MonthProdioService;
@@ -63,13 +68,16 @@ public class PublicQueryController {
 
 	@Autowired
 	private AttachService attachService;
-	
+
 	@Autowired
 	private UserDao userDao;
-	
+
 	@Autowired
 	private EnterpriseDao enterpriseDao;
 
+	@Autowired
+	private AccessTokenService accessTokenService;
+
 	/**
 	 * 按企业名称、简称、UU号等查找企业信息
 	 * 
@@ -79,8 +87,7 @@ public class PublicQueryController {
 	@RequestMapping(value = "/members", method = RequestMethod.GET)
 	@ResponseBody
 	@ResponseStatus(value = HttpStatus.OK)
-	public ModelMap queryEnterprise(String name, String shortName, Long uu)
-			throws UnsupportedEncodingException {
+	public ModelMap queryEnterprise(String name, String shortName, Long uu) throws UnsupportedEncodingException {
 		ModelMap returnMap = new ModelMap();
 		if (!StringUtils.isEmpty(name)) {
 			List<Enterprise> enterprises = enterpriseService.findByName(name);
@@ -88,11 +95,9 @@ public class PublicQueryController {
 				returnMap.put("name", QueriableMember.getMembers(enterprises));
 		}
 		if (!StringUtils.isEmpty(shortName)) {
-			Set<Enterprise> enterprises = enterpriseService
-					.findByShortName(shortName);
+			Set<Enterprise> enterprises = enterpriseService.findByShortName(shortName);
 			if (!CollectionUtils.isEmpty(enterprises))
-				returnMap.put("shortName",
-						QueriableMember.getMembers(enterprises));
+				returnMap.put("shortName", QueriableMember.getMembers(enterprises));
 		}
 		if (uu != null) {
 			Enterprise enterprise = enterpriseService.findById(uu);
@@ -110,9 +115,7 @@ public class PublicQueryController {
 	 */
 	@RequestMapping(value = "/batch/members", method = RequestMethod.GET)
 	@ResponseBody
-	public Map<String, Object> queryEnterprises(
-			@RequestParam("data") String data)
-			throws UnsupportedEncodingException {
+	public Map<String, Object> queryEnterprises(@RequestParam("data") String data) throws UnsupportedEncodingException {
 		if (!StringUtils.isEmpty(data)) {
 			List<String> accounts = null;
 			// data = URLDecoder.decode(data, "UTF-8");
@@ -156,8 +159,7 @@ public class PublicQueryController {
 	@RequestMapping(value = "/members/{enUU}/users/{userUU}", method = RequestMethod.GET)
 	@ResponseBody
 	@ResponseStatus(value = HttpStatus.OK)
-	public QueriableUser getUser(@PathVariable("enUU") Long enUU,
-			@PathVariable("userUU") Long userUU) {
+	public QueriableUser getUser(@PathVariable("enUU") Long enUU, @PathVariable("userUU") Long userUU) {
 		User user = userService.findUserByEnUUAndUserUU(enUU, userUU);
 		if (user != null)
 			return new QueriableUser(user);
@@ -172,24 +174,21 @@ public class PublicQueryController {
 	@RequestMapping(value = "/members/UserEnterprise", method = RequestMethod.GET)
 	@ResponseBody
 	@ResponseStatus(value = HttpStatus.OK)
-	public Map<String, Object> getUserEnterprise(String enName,
-			String enBusinesscode, String emMobile, String emPassword, String emName)
+	public Map<String, Object> getUserEnterprise(String enName, String enBusinesscode, String emMobile, String emPassword, String emName)
 			throws UnsupportedEncodingException {
 		// ModelMap returnMap = new ModelMap();
 		Map<String, Object> infos = new HashMap<String, Object>();
 		boolean ok = false;
 		String error = null;
 		// 首先查找营业执照号与企业名称是否存在
-		if (!StringUtils.isEmpty(enName)
-				&& !StringUtils.isEmpty(enBusinesscode)) {
+		if (!StringUtils.isEmpty(enName) && !StringUtils.isEmpty(enBusinesscode)) {
 			List<Enterprise> enterprises = enterpriseService.findByName(enName);
 			if (!CollectionUtils.isEmpty(enterprises)) {
 				for (Enterprise os : enterprises) {
 					if (os.getEnBussinessCode().equals(enBusinesscode)) {
-						List<User> users = userService.findUsersByEnUU(os
-								.getUu());
+						List<User> users = userService.findUsersByEnUU(os.getUu());
 						for (User user : users) {
-							if (user.getUserTel()!=null&&user.getUserTel().equals(emMobile)) {
+							if (user.getUserTel() != null && user.getUserTel().equals(emMobile)) {
 								ok = true;
 								infos.put("enuu", os.getUu());
 								infos.put("emuu", user.getUserUU());
@@ -198,24 +197,24 @@ public class PublicQueryController {
 							}
 						}
 						User user = null;
-						if(ok==false){		
+						if (ok == false) {
 							user = new User();
 							user.setUserName(emName);// 管理员姓名
-							user.setUserTel(emMobile);				
-							user.setEnable(Constant.YES);							
+							user.setUserTel(emMobile);
+							user.setEnable(Constant.YES);
 							user.addEnterprise(os);// 添加userenterpris对应关系
 							User newUser = userDao.save(user);
 							newUser.setUserPwd(Md5Utils.encode(emPassword, newUser.getUserUU()));
 							userDao.save(newUser);
-							if(os.getEnAdminuu()!=null){
-								
-							}else{
+							if (os.getEnAdminuu() != null) {
+
+							} else {
 								os.setEnAdminuu(newUser.getUserUU());
 								os.setEnAdminPassword(emPassword);
 								os = enterpriseDao.save(os);// 再次保存enterprise
-								enterpriseDao.callInitProcedure(os.getUu());//设置对照关系
+								enterpriseDao.callInitProcedure(os.getUu());// 设置对照关系
 							}
-							ok=true;
+							ok = true;
 							infos.put("enuu", os.getUu());
 							infos.put("emuu", newUser.getUserUU());
 							infos.put("enSecret", os.getAccessSecret());
@@ -227,8 +226,7 @@ public class PublicQueryController {
 				}
 			} else {
 				try {
-					Enterprise enterprise = enterpriseService
-							.findByenBussinessCode(enBusinesscode);
+					Enterprise enterprise = enterpriseService.findByenBussinessCode(enBusinesscode);
 					if (enterprise != null) {
 						error = "企业名称与营业执照号不符!";
 						infos.put("enName", enterprise.getEnName());
@@ -261,10 +259,8 @@ public class PublicQueryController {
 
 	@RequestMapping(value = "/search", method = RequestMethod.GET)
 	@ResponseBody
-	public JSONObject getMonthProdio(Long month, String brand, String vendor,
-			String date) {
-		JSONObject json = monthProdIoService.getMonthProdio(month, brand,
-				vendor, date);
+	public JSONObject getMonthProdio(Long month, String brand, String vendor, String date) {
+		JSONObject json = monthProdIoService.getMonthProdio(month, brand, vendor, date);
 		return json;
 	}
 
@@ -279,8 +275,7 @@ public class PublicQueryController {
 		map.put("tel", userService.isTelUseable(enter.getEnAdminTel()));
 		// map.put("email",
 		// userService.isEmailUseable(enter.getEnAdminEmail()));
-		map.put("bussinessCode", enterpriseService.bussinessCodeEnable(enter
-				.getEnBussinessCode()));
+		map.put("bussinessCode", enterpriseService.bussinessCodeEnable(enter.getEnBussinessCode()));
 		return map;
 	}
 
@@ -291,28 +286,23 @@ public class PublicQueryController {
 	 */
 	@RequestMapping(value = "/erpRegister", method = RequestMethod.POST)
 	@ResponseBody
-	public Map<String, Object> register(String data)
-			throws UnsupportedEncodingException {
+	public Map<String, Object> register(String data) throws UnsupportedEncodingException {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		Map<String, Object> infos = new HashMap<String, Object>();
-		Enterprise newEnterprise = FlexJsonUtils.fromJson(jsonStr,
-				Enterprise.class);// 需要把字符串转成Object
+		Enterprise newEnterprise = FlexJsonUtils.fromJson(jsonStr, Enterprise.class);// 需要把字符串转成Object
 		boolean ok = false;
 		String error = null;
 		Map<String, Object> checkinfos = checkRegister(newEnterprise);
 		if (checkinfos != null && checkinfos.get("ok").equals(true)) {
 			if (checkinfos.get("enName").equals(newEnterprise.getEnName())) {
-				error = "注册失败!企业名称" + checkinfos.get("enName")
-						+ "已注册,注册的营业执照号为" + checkinfos.get("enBussinessCode")
-						+ "注册人:" + checkinfos.get("emName");
+				error = "注册失败!企业名称" + checkinfos.get("enName") + "已注册,注册的营业执照号为" + checkinfos.get("enBussinessCode") + "注册人:"
+						+ checkinfos.get("emName");
 			} else {
-				error = "注册失败!营业执照号" + checkinfos.get("enBussinessCode")
-						+ "已注册,注册的企业名称为" + checkinfos.get("enName") + "注册人:"
+				error = "注册失败!营业执照号" + checkinfos.get("enBussinessCode") + "已注册,注册的企业名称为" + checkinfos.get("enName") + "注册人:"
 						+ checkinfos.get("emName");
 			}
 		} else {
-			Enterprise regEnterprise = enterpriseService
-					.registerERPEnterprise(newEnterprise);
+			Enterprise regEnterprise = enterpriseService.registerERPEnterprise(newEnterprise);
 			if (regEnterprise == null) {// 营业执照码验证
 				error = "注册失败!";
 			} else {
@@ -332,24 +322,20 @@ public class PublicQueryController {
 
 	public Map<String, Object> checkRegister(Enterprise enterprise) {
 		Map<String, Object> checkinfos = new HashMap<String, Object>();
-		List<Enterprise> enterprises = enterpriseService.findByName(enterprise
-				.getEnName());
+		List<Enterprise> enterprises = enterpriseService.findByName(enterprise.getEnName());
 		boolean ok = false;
 		if (!CollectionUtils.isEmpty(enterprises)) {
 			ok = true;
 			checkinfos.put("enName", enterprise.getEnName());
-			checkinfos.put("enBussinessCode", enterprises.get(0)
-					.getEnBussinessCode());
+			checkinfos.put("enBussinessCode", enterprises.get(0).getEnBussinessCode());
 			checkinfos.put("emName", enterprises.get(0).getEnAdminName());
 		} else {
 			try {
-				Enterprise newenterprise = enterpriseService
-						.findByenBussinessCode(enterprise.getEnBussinessCode());
+				Enterprise newenterprise = enterpriseService.findByenBussinessCode(enterprise.getEnBussinessCode());
 				if (newenterprise != null) {
 					ok = true;
 					checkinfos.put("enName", newenterprise.getEnName());
-					checkinfos.put("enBussinessCode",
-							newenterprise.getEnBussinessCode());
+					checkinfos.put("enBussinessCode", newenterprise.getEnBussinessCode());
 					checkinfos.put("emName", newenterprise.getEnAdminName());
 				}
 			} catch (Exception e) {
@@ -359,7 +345,7 @@ public class PublicQueryController {
 		checkinfos.put("ok", ok);
 		return checkinfos;
 	}
-	
+
 	/**
 	 * 按企业名称、简称、UU号等查找企业信息
 	 * 
@@ -369,21 +355,42 @@ public class PublicQueryController {
 	@RequestMapping(value = "/enterprises", method = RequestMethod.GET)
 	@ResponseBody
 	@ResponseStatus(value = HttpStatus.OK)
-	public List<EnterpriseDetail> queryEnterprise(String name, String shortName)
-			throws UnsupportedEncodingException {
-		List<EnterpriseDetail> members=new ArrayList<EnterpriseDetail>();
+	public List<EnterpriseDetail> queryEnterprise(String name, String shortName) throws UnsupportedEncodingException {
+		List<EnterpriseDetail> members = new ArrayList<EnterpriseDetail>();
 		if (!StringUtils.isEmpty(name)) {
 			Set<Enterprise> enterprises = enterpriseService.findByNameKey(name);
 			if (!CollectionUtils.isEmpty(enterprises))
 				members.addAll(EnterpriseDetail.getMembers(enterprises));
 		}
 		if (!StringUtils.isEmpty(shortName)) {
-			Set<Enterprise> enterprises = enterpriseService
-					.findByShortName(shortName);
+			Set<Enterprise> enterprises = enterpriseService.findByShortName(shortName);
 			if (!CollectionUtils.isEmpty(enterprises))
 				members.addAll(EnterpriseDetail.getMembers(enterprises));
-		}		
+		}
 		return members;
 	}
 
+	/**
+	 * 获取及验证token接口
+	 * 
+	 * @author yingp
+	 *
+	 */
+	@RequestMapping(value = "/token", method = RequestMethod.GET)
+	@ResponseBody
+	public ResponseEntity<ModelMap> getUserByToken(HttpServletRequest request, String access_token) {
+		ModelMap data = new ModelMap();
+		AccessToken token = accessTokenService.findOne(access_token);
+		if (token == null) {
+			data.put("error", "验证信息错误或已过期");
+			return new ResponseEntity<ModelMap>(data, HttpStatus.NOT_FOUND);
+		}
+		data.put("user", token.getUser());
+		data.put("userUU", token.getUserUU());
+		data.put("enUU", token.getEnUU());
+		data.put("bind", token.getBind());
+		accessTokenService.delete(token.getId());
+		return new ResponseEntity<ModelMap>(data, HttpStatus.OK);
+	}
+
 }

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

@@ -76,7 +76,7 @@ public class VendorController {
 	@RequestMapping(value = "/user", method = RequestMethod.GET)
 	@ResponseBody
 	public User getUser(){
-		return vendorService.findUser();
+		return SystemSession.getUser();
 	}
 	
 	/**

+ 24 - 3
src/main/java/com/uas/platform/b2b/dao/VendorDao.java

@@ -26,12 +26,33 @@ public interface VendorDao extends JpaSpecificationExecutor<Vendor>, GenericRepo
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
 	@Query("from Vendor v where v.myEnUU = :myEnUU and v.vendorEnterprise.uu = :vendUU")
 	public List<Vendor> findByMyEnUUAndVendUU(@Param("myEnUU") long myEnUU, @Param("vendUU") long vendUU);
-	
+
 	public List<Vendor> findByMyEnUU(Long myEnUU);
-	
+
 	public List<Vendor> findByVendEnUU(Long vendUU);
-	
+
 	@Query("select v.myEnUU from Vendor v where v.vendEnUU = :vendEnUU")
 	public List<Long> findCustUUByVendEnUU(@Param("vendEnUU") long vendEnUU);
 
+	/**
+	 * 查找我的供应商UU
+	 * 
+	 * @param myEnUU
+	 * @return
+	 */
+	@Query("select v.vendEnUU from Vendor v where v.myEnUU = :myEnUU order by v.vendEnUU")
+	public List<Long> findVendUU(@Param("myEnUU") long myEnUU);
+
+	/**
+	 * 按类型查找供应商
+	 * 
+	 * @param myEnUU
+	 * @param isErp
+	 * @param isSaas
+	 * @return
+	 */
+	@Query("from Vendor v where v.myEnUU = :myEnUU and (v.vendorEnterprise.enIsErp = :enIsErp or v.vendorEnterprise.enSaasStatus = :enSaasStatus)")
+	public List<Vendor> findByMyEnUUAndVendPlatform(@Param("myEnUU") long myEnUU, @Param("enIsErp") short isErp,
+			@Param("enSaasStatus") short isSaas);
+
 }

+ 9 - 4
src/main/java/com/uas/platform/b2b/manage/model/ManageNotice.java

@@ -7,6 +7,7 @@ import com.uas.platform.b2b.model.NoticeBody;
 
 /**
  * 从管理平台传输过来的公告
+ * 
  * @author suntg
  * @date 2015年9月16日下午4:40:52
  */
@@ -15,26 +16,31 @@ public class ManageNotice {
 	private Long id;
 	private String title;
 	private String content;
-	
+
 	public String getTitle() {
 		return title;
 	}
+
 	public void setTitle(String title) {
 		this.title = title;
 	}
+
 	public String getContent() {
 		return content;
 	}
+
 	public void setContent(String content) {
 		this.content = content;
 	}
+
 	public Long getId() {
 		return id;
 	}
+
 	public void setId(Long id) {
 		this.id = id;
 	}
-	
+
 	public NoticeBody convert() {
 		NoticeBody noticeBody = new NoticeBody();
 		noticeBody.setText(content);
@@ -45,6 +51,5 @@ public class ManageNotice {
 		noticeBody.setSourceId(this.id);
 		return noticeBody;
 	}
-	
-	
+
 }

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

@@ -0,0 +1,15 @@
+package com.uas.platform.b2b.manage.service;
+
+import java.util.List;
+
+public interface MasterService {
+
+	/**
+	 * 查找账套访问站点
+	 * 
+	 * @param uu
+	 * @return
+	 */
+	List<String> findWebsiteByUU(long uu);
+
+}

+ 2 - 2
src/main/java/com/uas/platform/b2b/manage/service/impl/AccessTokenServiceImpl.java

@@ -13,7 +13,7 @@ import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 
-@Service
+@Service("manage.AccessTokenServiceImpl")
 public class AccessTokenServiceImpl implements AccessTokenService {
 
 	@Override
@@ -22,7 +22,7 @@ public class AccessTokenServiceImpl implements AccessTokenService {
 		params.put("access_token", accessToken);
 		Response response = null;
 		try {
-			response = HttpUtil.sendGetRequest(HostConstant.MANAGE_HOST + "/public/token", params);
+			response = HttpUtil.sendGetRequest(HostConstant.MANAGE_INNER_HOST + "/public/token", params);
 		} catch (Exception e) {
 			return null;
 		}

+ 34 - 0
src/main/java/com/uas/platform/b2b/manage/service/impl/MasterServiceImpl.java

@@ -0,0 +1,34 @@
+package com.uas.platform.b2b.manage.service.impl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.uas.platform.b2b.dao.CommonDao;
+import com.uas.platform.b2b.data.support.SpObserver;
+import com.uas.platform.b2b.manage.service.MasterService;
+
+@Service("manage.MasterServiceImpl")
+public class MasterServiceImpl implements MasterService {
+
+	@Autowired
+	private CommonDao commonDao;
+
+	private static final String manageDataSource = "manageDataSource";
+
+	@Override
+	public List<String> findWebsiteByUU(long uu) {
+		String currDs = SpObserver.getSp();
+		try {
+			SpObserver.putSp(manageDataSource);
+			return commonDao
+					.queryForList(
+							"select website from masters where (platform = 'SAAS' or (platform = 'ERP' and install_type = 'uas1.0')) and uu=? and website is not null",
+							String.class, uu);
+		} finally {
+			SpObserver.putSp(currDs);
+		}
+	}
+
+}

+ 119 - 0
src/main/java/com/uas/platform/b2b/model/AccessToken.java

@@ -0,0 +1,119 @@
+package com.uas.platform.b2b.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.uas.platform.core.util.StringUtil;
+
+/**
+ * token登录,用于存放token信息
+ * 
+ * @author yingp
+ *
+ */
+public class AccessToken implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private String id;
+
+	/**
+	 * 用户名
+	 */
+	private String user;
+
+	/**
+	 * 企业
+	 */
+	private Long enUU;
+
+	/**
+	 * 用户
+	 */
+	private Long userUU;
+
+	/**
+	 * 可以在token绑定任意数据
+	 */
+	private String bind;
+
+	private Date time;
+
+	/**
+	 * 60秒过期
+	 */
+	public final static int expires_in = 60;
+
+	public AccessToken() {
+	}
+
+	public AccessToken(User user, Object bindObject) {
+		this.id = StringUtil.uuid();
+		this.user = user.getUserName();
+		this.enUU = user.getEnterprise().getUu();
+		this.userUU = user.getUserUU();
+		this.bind = String.valueOf(bindObject);
+		this.time = new Date();
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getUser() {
+		return user;
+	}
+
+	public void setUser(String user) {
+		this.user = user;
+	}
+
+	public Long getEnUU() {
+		return enUU;
+	}
+
+	public void setEnUU(Long enUU) {
+		this.enUU = enUU;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public Object getBind() {
+		return bind;
+	}
+
+	public void setBind(String bind) {
+		this.bind = bind;
+	}
+
+	public Date getTime() {
+		return time;
+	}
+
+	public void setTime(Date time) {
+		this.time = time;
+	}
+
+	/**
+	 * 是否过期
+	 * 
+	 * @return
+	 */
+	public boolean isExpired() {
+		return System.currentTimeMillis() - this.time.getTime() > expires_in * 1000;
+	}
+
+}

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

@@ -0,0 +1,13 @@
+package com.uas.platform.b2b.redis.dao;
+
+import com.uas.platform.b2b.model.AccessToken;
+
+public interface AccessTokenDao {
+
+	public void save(AccessToken token);
+
+	public AccessToken findOne(String id);
+
+	public void delete(String id);
+
+}

+ 65 - 0
src/main/java/com/uas/platform/b2b/redis/dao/impl/AccessTokenDaoImpl.java

@@ -0,0 +1,65 @@
+package com.uas.platform.b2b.redis.dao.impl;
+
+import java.io.Serializable;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Repository;
+
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.platform.b2b.model.AccessToken;
+import com.uas.platform.b2b.redis.dao.AccessTokenDao;
+
+@Repository
+public class AccessTokenDaoImpl implements AccessTokenDao {
+
+	@Autowired
+	private RedisTemplate<Serializable, Serializable> redisTemplate;
+
+	@Override
+	public void save(final AccessToken token) {
+		redisTemplate.execute(new RedisCallback<Object>() {
+
+			@Override
+			public Object doInRedis(RedisConnection connection) throws DataAccessException {
+				byte[] key = redisTemplate.getStringSerializer().serialize("AccessToken.id." + token.getId());
+				byte[] value = redisTemplate.getStringSerializer().serialize(FlexJsonUtils.toJson(token));
+				connection.set(key, value);
+				connection.expire(key, AccessToken.expires_in);
+				return null;
+			}
+		});
+	}
+
+	@Override
+	public AccessToken findOne(final String id) {
+		return redisTemplate.execute(new RedisCallback<AccessToken>() {
+			@Override
+			public AccessToken doInRedis(RedisConnection connection) throws DataAccessException {
+				byte[] key = redisTemplate.getStringSerializer().serialize("AccessToken.id." + id);
+				if (connection.exists(key)) {
+					String value = redisTemplate.getStringSerializer().deserialize(connection.get(key));
+					return FlexJsonUtils.fromJson(value, AccessToken.class);
+				}
+				return null;
+			}
+		});
+	}
+
+	@Override
+	public void delete(final String id) {
+		redisTemplate.execute(new RedisCallback<Object>() {
+
+			@Override
+			public Object doInRedis(RedisConnection connection) throws DataAccessException {
+				byte[] key = redisTemplate.getStringSerializer().serialize("AccessToken.id." + id);
+				connection.del(key);
+				return null;
+			}
+		});
+	}
+
+}

+ 19 - 0
src/main/java/com/uas/platform/b2b/service/AccessTokenService.java

@@ -0,0 +1,19 @@
+package com.uas.platform.b2b.service;
+
+import com.uas.platform.b2b.model.AccessToken;
+
+public interface AccessTokenService {
+
+	/**
+	 * 绑定任意对象
+	 * 
+	 * @param bindObject
+	 * @return
+	 */
+	public AccessToken createNew(Object bindObject);
+
+	public AccessToken findOne(String id);
+
+	public void delete(String id);
+
+}

+ 15 - 10
src/main/java/com/uas/platform/b2b/service/VendorService.java

@@ -5,32 +5,37 @@ import java.util.List;
 import org.springframework.data.domain.Page;
 
 import com.uas.platform.b2b.model.Distribute;
-import com.uas.platform.b2b.model.User;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.core.model.PageInfo;
 
 /**
  * 客户&供应商服务
+ * 
  * @author Administrator
  *
  */
 public interface VendorService {
 
 	public List<Vendor> findMyVendors();
-	
+
 	public List<Vendor> findMyCustomers();
-	
+
 	public Page<Vendor> findAllByPageInfo(PageInfo pageInfo);
-	
+
 	public Vendor addVendor(Vendor vendor);
-	
+
 	public List<Vendor> addVendors(List<Vendor> vendors);
-	
+
 	public Vendor addCustomer(Vendor customer);
-	
+
 	public List<Vendor> addCustomers(List<Vendor> customers);
-	
+
 	public List<Distribute> findUserInfo(Long custUU);
-	
-	public User findUser();
+
+	/**
+	 * 查找使用了ERP系统的供应商
+	 * 
+	 * @return
+	 */
+	public List<Vendor> findMyVendorsUsingErp();
 }

+ 34 - 0
src/main/java/com/uas/platform/b2b/service/impl/AccessTokenServiceImpl.java

@@ -0,0 +1,34 @@
+package com.uas.platform.b2b.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.uas.platform.b2b.model.AccessToken;
+import com.uas.platform.b2b.redis.dao.AccessTokenDao;
+import com.uas.platform.b2b.service.AccessTokenService;
+import com.uas.platform.b2b.support.SystemSession;
+
+@Service("AccessTokenServiceImpl")
+public class AccessTokenServiceImpl implements AccessTokenService {
+
+	@Autowired
+	private AccessTokenDao accessTokenDao;
+
+	@Override
+	public AccessToken createNew(Object bindObject) {
+		AccessToken token = new AccessToken(SystemSession.getUser(), bindObject);
+		accessTokenDao.save(token);
+		return token;
+	}
+
+	@Override
+	public AccessToken findOne(String id) {
+		return accessTokenDao.findOne(id);
+	}
+
+	@Override
+	public void delete(String id) {
+		accessTokenDao.delete(id);
+	}
+
+}

+ 30 - 32
src/main/java/com/uas/platform/b2b/service/impl/ChangeAdminServiceImpl.java

@@ -38,40 +38,40 @@ import com.uas.platform.core.util.encry.Md5Utils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 
 @Service
-public class ChangeAdminServiceImpl implements ChangeAdminService{
-	
+public class ChangeAdminServiceImpl implements ChangeAdminService {
+
 	@Autowired
 	private ChangeAdminDao adminDao;
-	
+
 	@Autowired
 	private EnterpriseDao enterpriseDao;
-	
+
 	@Autowired
 	private UserService userService;
-	
+
 	@Autowired
 	private SendMailService sendMailService;
-	
+
 	@Autowired
 	private RoleDao roleDao;
-	
+
 	@Autowired
 	private UserDao userDao;
-	
+
 	@Override
 	public ChangeAdmin changeAdmin(ChangeAdmin admin) {
-			admin.setEnDate(new Date());
-			admin.setEnable(Constant.NO);
-			admin.setEnStatus((short) Status.UNAUDIT.value());// 审核状态设为审核中
-			admin.setEnSendStatus((short) Status.NOT_UPLOAD.value());// 上传状态设为未上传
-			ChangeAdmin newAdmin = adminDao.save(admin);
-			return newAdmin;
+		admin.setEnDate(new Date());
+		admin.setEnable(Constant.NO);
+		admin.setEnStatus((short) Status.UNAUDIT.value());// 审核状态设为审核中
+		admin.setEnSendStatus((short) Status.NOT_UPLOAD.value());// 上传状态设为未上传
+		ChangeAdmin newAdmin = adminDao.save(admin);
+		return newAdmin;
 	}
 
 	@Override
 	public List<ChangeAdmin> getUnauditedChangeAdmin() {
-		List<ChangeAdmin> admins = adminDao.findByEnStatusAndEnSendStatus((short) Status.UNAUDIT.value(),
-				(short) Status.NOT_UPLOAD.value());
+		List<ChangeAdmin> admins = adminDao
+				.findByEnStatusAndEnSendStatus((short) Status.UNAUDIT.value(), (short) Status.NOT_UPLOAD.value());
 		if (!CollectionUtils.isEmpty(admins)) {
 			for (ChangeAdmin admin : admins) {
 				if (admin.getEnBussinessCodeAttach() != null) {
@@ -81,7 +81,7 @@ public class ChangeAdminServiceImpl implements ChangeAdminService{
 		}
 		return admins;
 	}
-	
+
 	@Override
 	public void unauditedUploadSuccess(List<Long> ids) {
 		if (!CollectionUtils.isEmpty(ids)) {
@@ -97,13 +97,13 @@ public class ChangeAdminServiceImpl implements ChangeAdminService{
 		}
 
 	}
-	
+
 	@Override
-	public ChangeAdmin checkEnuu(String enBussinessCode, Long uu,Short enStatus) {
+	public ChangeAdmin checkEnuu(String enBussinessCode, Long uu, Short enStatus) {
 		ChangeAdmin admins = adminDao.findChangeAdminByEnBussinessCodeAndUuAndEnStatus(enBussinessCode, uu, enStatus);
 		return admins;
 	}
-	
+
 	@Override
 	public void auditYesEnterprise(Long id, HttpServletRequest request) {
 		ChangeAdmin admin = adminDao.findOne(id);
@@ -134,7 +134,7 @@ public class ChangeAdminServiceImpl implements ChangeAdminService{
 				if (user != null) {
 					if (users != null && users.size() > 0) {
 						for (User u : users) {
-							if (u.getUserUU() .equals(user.getUserUU())) {
+							if (u.getUserUU().equals(user.getUserUU())) {
 								result = true;
 								break;
 							}
@@ -179,7 +179,7 @@ public class ChangeAdminServiceImpl implements ChangeAdminService{
 			}
 		}
 	}
-	
+
 	/**
 	 * 用户信息修改同时,修改到管理平台
 	 * 
@@ -189,22 +189,19 @@ public class ChangeAdminServiceImpl implements ChangeAdminService{
 	private boolean sendUserToManage(User newUserInfo) throws Exception {
 		Map<String, String> params = new HashMap<String, String>();
 		params.put("data", FlexJsonUtils.toJson(new AccountInfo(newUserInfo)));
-		Response response = HttpUtil.sendPostRequest(HostConstant.MANAGE_HOST
-				+ "public/account", params, true);
+		Response response = HttpUtil.sendPostRequest(HostConstant.MANAGE_INNER_HOST + "public/account", params, true);
 		if (response.getStatusCode() == HttpStatus.OK.value()) {
-			List<Map<String, Object>> resultMap = FlexJsonUtils.fromJsonArray(
-					response.getResponseText(), HashMap.class);
+			List<Map<String, Object>> resultMap = FlexJsonUtils.fromJsonArray(response.getResponseText(), HashMap.class);
 			if (resultMap.size() > 0) {
 				if ("true".equals(String.valueOf(resultMap.get(0).get("ok")))) {
 					return true;
 				}
-				throw new Exception(String.valueOf(resultMap.get(0)
-						.get("error")));
+				throw new Exception(String.valueOf(resultMap.get(0).get("error")));
 			}
 		}
 		throw new Exception(response.getResponseText());
 	}
-	
+
 	public boolean sendMail(User user, HttpServletRequest request, Enterprise enterprise) {
 		Map<String, Object> model = new HashMap<String, Object>();
 		model.put("userName", user.getUserName());
@@ -219,14 +216,15 @@ public class ChangeAdminServiceImpl implements ChangeAdminService{
 		return true;
 
 	}
+
 	@Override
-	public void auditNo(Long id, String remark ,HttpServletRequest request) {
+	public void auditNo(Long id, String remark, HttpServletRequest request) {
 		ChangeAdmin admin = adminDao.findOne(id);
-		if(admin != null) {
+		if (admin != null) {
 			admin.setEnAuditRemark(remark);
 			admin.setEnStatus((short) Status.UNACT.value());
 			adminDao.save(admin);
 		}
-		
+
 	}
 }

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

@@ -232,7 +232,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
 	 */
 	private void updateManagePassword(Long enUU, String password) {
 		try {
-			Response response = HttpUtil.sendPostRequest(HostConstant.MANAGE_HOST + "public/enterprise/password?enUU=" + enUU
+			Response response = HttpUtil.sendPostRequest(HostConstant.MANAGE_INNER_HOST + "public/enterprise/password?enUU=" + enUU
 					+ "&password=" + password, null, true);
 			if (response.getStatusCode() != HttpStatus.OK.value())
 				throw new IllegalOperatorException(response.getResponseText());

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

@@ -219,7 +219,7 @@ public class UserServiceImpl implements UserService {
 	private static boolean sendUserToManage(User newUserInfo) throws Exception {
 		Map<String, String> params = new HashMap<String, String>();
 		params.put("data", FlexJsonUtils.toJson(new AccountInfo(newUserInfo)));
-		Response response = HttpUtil.sendPostRequest(HostConstant.MANAGE_HOST + "public/account", params, true);
+		Response response = HttpUtil.sendPostRequest(HostConstant.MANAGE_INNER_HOST + "public/account", params, true);
 		if (response.getStatusCode() == HttpStatus.OK.value()) {
 			List<Map<String, Object>> resultMap = FlexJsonUtils.fromJsonArray(response.getResponseText(), HashMap.class);
 			if (resultMap.size() > 0) {

+ 13 - 19
src/main/java/com/uas/platform/b2b/service/impl/VendorsServiceImpl.java

@@ -15,13 +15,12 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import com.uas.platform.b2b.dao.DistributeDao;
-import com.uas.platform.b2b.dao.UserDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.model.Distribute;
-import com.uas.platform.b2b.model.User;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.service.VendorService;
 import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 
 @Service
@@ -29,12 +28,10 @@ public class VendorsServiceImpl implements VendorService {
 
 	@Autowired
 	private VendorDao vendorDao;
-	
+
 	@Autowired
 	private DistributeDao distributeDao;
-	
-	@Autowired
-	private UserDao userDao;
+
 	@Override
 	public List<Vendor> findMyVendors() {
 		return vendorDao.findByMyEnUU(SystemSession.getUser().getEnterprise().getUu());
@@ -54,9 +51,9 @@ public class VendorsServiceImpl implements VendorService {
 	@Override
 	public List<Vendor> addVendors(List<Vendor> vendors) {
 		List<Vendor> validVendors = new ArrayList<Vendor>();
-		for(Vendor vendor : vendors) {
+		for (Vendor vendor : vendors) {
 			Vendor vend = addVendor(vendor);
-			if(vend != null) {
+			if (vend != null) {
 				validVendors.add(vend);
 			}
 		}
@@ -72,9 +69,9 @@ public class VendorsServiceImpl implements VendorService {
 	@Override
 	public List<Vendor> addCustomers(List<Vendor> customers) {
 		List<Vendor> validVendors = new ArrayList<Vendor>();
-		for(Vendor customer : customers) {
+		for (Vendor customer : customers) {
 			Vendor vend = addCustomer(customer);
-			if(vend != null) {
+			if (vend != null) {
 				validVendors.add(vend);
 			}
 		}
@@ -94,10 +91,10 @@ public class VendorsServiceImpl implements VendorService {
 
 	@Override
 	public List<Distribute> findUserInfo(Long custUU) {
-		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU,SystemSession.getUser().getEnterprise().getUu());
+		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
 		List<Long> ids = new ArrayList<Long>();
-		if(!CollectionUtils.isEmpty(vendors)) {
-			for(Vendor v : vendors) {
+		if (!CollectionUtils.isEmpty(vendors)) {
+			for (Vendor v : vendors) {
 				ids.add(v.getId());
 			}
 		}
@@ -105,12 +102,9 @@ public class VendorsServiceImpl implements VendorService {
 	}
 
 	@Override
-	public User findUser() {
-		List<User> users = userDao.findUserByUserUU(SystemSession.getUser().getUserUU());
-		if(!CollectionUtils.isEmpty(users)) {
-			return users.get(0);
-		}
-		return null;
+	public List<Vendor> findMyVendorsUsingErp() {
+		// UAS系统或SAAS系统
+		return vendorDao.findByMyEnUUAndVendPlatform(SystemSession.getUser().getEnterprise().getUu(), Constant.YES, Constant.YES);
 	}
 
 }

+ 3 - 1
src/main/java/com/uas/platform/b2b/support/HostConstant.java

@@ -5,6 +5,8 @@ public class HostConstant {
 	/**
 	 * 管理平台地址
 	 */
-	public static final String MANAGE_HOST = "http://10.10.100.81:8080/";
+	public static final String MANAGE_INNER_HOST = "http://10.10.100.81:8080";
+	
+	public static final String MANAGE_OUTER_HOST = "http://manage.ubtob.com";
 
 }

+ 2 - 0
src/main/resources/redis.properties

@@ -0,0 +1,2 @@
+redis.host=10.10.100.39
+redis.port=6379

+ 24 - 0
src/main/resources/spring/redis.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans  
+           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"
+	default-autowire="byName">
+
+	<!-- redis 相关配置 -->
+	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
+		<property name="maxIdle" value="300" />
+		<property name="maxWaitMillis" value="3000" />
+		<property name="testOnBorrow" value="true" />
+	</bean>
+
+	<bean id="jedisConnectionFactory"
+		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
+		p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="jedisPoolConfig"
+		p:database="0" />
+
+	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
+		<property name="connectionFactory" ref="jedisConnectionFactory" />
+	</bean>
+
+</beans>

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

@@ -140,6 +140,7 @@
 					<li ng-class="{'active': routeState == 'make'}"><a ui-sref="make.home">委外制造</a></li>
 					<li ng-class="{'active': routeState == 'qc'}"><a ui-sref="qc.home">品质管理</a></li>
 					<li ng-class="{'active': routeState == 'fa'}"><a ui-sref="fa.home">财务对账</a></li>
+					<li ng-class="{'active': routeState == 'cs'}"><a ui-sref="cs.home">客户服务</a></li>
 				</ul>
 			</nav>
 		</div>

+ 10 - 0
src/main/webapp/resources/css/index.css

@@ -167,6 +167,16 @@ a.none:hover {
   	text-decoration: underline;
 }
 
+.text-title {
+	font-size: 1.2em;
+	font-weight: bold;
+    text-indent: 1em;
+    line-height: 2em;
+    border-bottom: 1px solid #ddd;
+    margin-bottom: 15px;
+    color: #828282
+}
+
 .form-control {
 	border-color: #e1e1e1;
 }

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

@@ -326,6 +326,22 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'service/Purc', 'ser
 			url : "/returns",
 			templateUrl : "static/tpl/index/make/returns.html",
 			controller: 'MakeReturnCtrl'
+		}).state('cs', {// 客户服务
+			url : "/cs",
+			views : {
+				"left-view" : {
+					templateUrl : "static/tpl/index/cs/left.html"
+				},
+				"right-view" : {
+					templateUrl : "static/tpl/index/cs/right.html"
+				}
+			}
+		}).state('cs.index', {
+			url : "",
+			templateUrl : "static/tpl/index/cs/index.html"
+		}).state('cs.home', {
+			url : "/",
+			templateUrl : "static/tpl/index/cs/index.html"
 		});
 	}]);
 	
@@ -5710,6 +5726,18 @@ app.controller('SaleSendCtrl', ['$scope', '$filter', 'SaleSend', 'ngTableParams'
 			});
 		}
 	}]);
+	//客户服务
+	app.controller('CustServeCtrl', ['$scope', 'Vendor', function($scope, Vendor){
+		Vendor.getServe(function(datas){
+			$scope.vendors = datas;
+			// 自动跳转
+			if(datas && datas.length == 1)
+				$scope.redirect(datas[0]);
+		});
+		$scope.redirect = function(vendor) {
+			window.open('purc/vendor/serve/' + vendor.vendorEnterprise.uu);
+		};
+	}]);
 	
 	return app;
 });

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

@@ -391,6 +391,14 @@ define([ 'ngResource'], function() {
 		return $resource('vendor/customer/:id', {}, {});
 	}]).factory('Product', ['$resource', function($resource){
 		return $resource('product', {}, {});
+	}]).factory('Vendor', ['$resource', function($resource){
+		return $resource('purc/vendor/:id', {}, {
+			getServe: {
+				// 调取使用uas系统的供应商信息
+				url: 'purc/vendor/serve',
+				isArray: true
+			}
+		});
 	}]).factory('Quotation', ['$resource', function($resource){
 		return $resource('sale/quotation', {}, {
 			getTodo: {

+ 1 - 0
src/main/webapp/resources/tpl/index/cs/Readme.md

@@ -0,0 +1 @@
+#客户服务

+ 0 - 0
src/main/webapp/resources/tpl/index/cs/index.html


+ 31 - 0
src/main/webapp/resources/tpl/index/cs/left.html

@@ -0,0 +1,31 @@
+<div class="left-nav left-home">
+	<div class="nav-home">
+		<a ui-sref="sale" class="text-default"><span
+			class="glyphicon glyphicon-home icon-left"></span>客户服务</a>
+	</div>
+</div>
+<div class="left-nav">
+	<div class="nav-label">
+		<i></i>增值服务
+	</div>
+	<ul class="list-unstyled">
+		<li><a href="{{userInfo.enterprise.enSaasUrl? 'http://' + userInfo.enterprise.enSaasUrl + '.saas.ubtob.com':'#/account/enterprise'}}">SAAS服务</a></li>
+		<li><a>电子元器件市场</a></li>
+		<li><a>商机库</a></li>
+		<li><a>我的物流</a></li>
+	</ul>
+</div>
+<div class="left-nav">
+	<div class="nav-label">
+		<i></i>自定义菜单
+	</div>
+	<ul class="list-unstyled">
+		<li><a>添加自定义菜单<span class="pull-right"><i class="fa fa-plus icon-right"></i></span></a></li>
+	</ul>
+</div>
+<div class="left-nav">
+	<ul class="list-unstyled">
+		<li><a href="serve">问题反馈<span class="pull-right"><i class="fa fa-bell-o icon-right"></i></span></a></li>
+		<li><a href="serve">客服中心<span class="pull-right"><i class="fa fa-headphones icon-right"></i></span></a></li>
+	</ul>
+</div>

+ 22 - 0
src/main/webapp/resources/tpl/index/cs/right.html

@@ -0,0 +1,22 @@
+<!-- Start -->
+<div class="pane">
+	<div class="pane-header">供应商客服系统</div>
+	<div class="pane-body" ng-controller="CustServeCtrl">
+		<div class="row">
+			<div class="col-xs-4" ng-repeat="vendor in vendors">
+				<div class="well well-sm">
+					<div class="text-title" ng-bind="vendor.vendorEnterprise.enName"></div>
+					<div>
+						<i class="fa fa-fw fa-tty" style="margin-left: 1em"></i> <span
+							class="text-muted"
+							ng-bind="vendor.vendorUser.userName + ' ' + vendor.vendorUser.userTel"></span>
+						<div class="pull-right">
+							<a class="btn btn-xs btn-primary" ng-click="redirect(vendor)">安全访问</a>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- End -->