Explorar el Código

Merge remote-tracking branch 'origin/dev-mysql' into dev-mysql

wangdy hace 8 años
padre
commit
fbfa2d8dfc
Se han modificado 26 ficheros con 1565 adiciones y 14 borrados
  1. 7 5
      src/main/java/com/uas/platform/b2c/core/support/BodyReaderHttpServletRequestWrapper.java
  2. 7 5
      src/main/java/com/uas/platform/b2c/core/support/HttpHelper.java
  3. 13 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java
  4. 105 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandMapController.java
  5. 13 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandMapDao.java
  6. 17 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandTempDao.java
  7. 233 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandMap.java
  8. 55 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandTemp.java
  9. 75 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/MapOperator.java
  10. 41 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandMapService.java
  11. 9 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java
  12. 184 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandMapServiceImpl.java
  13. 32 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java
  14. 14 0
      src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java
  15. 10 0
      src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java
  16. 19 0
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  17. BIN
      src/main/resources/jxls-tpl/product/brand-map.xls
  18. 4 4
      src/main/resources/spring/context.xml
  19. 2 0
      src/main/webapp/WEB-INF/views/normal/adminWithNav.html
  20. BIN
      src/main/webapp/resources/img/product/cart/up-map.png
  21. 6 0
      src/main/webapp/resources/js/admin/app.js
  22. 379 0
      src/main/webapp/resources/js/admin/controllers/product/brandMapCtrl.js
  23. 18 0
      src/main/webapp/resources/js/common/query/brand.js
  24. 5 0
      src/main/webapp/resources/js/common/query/storeInfo.js
  25. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_logistics_ctrl.js
  26. 316 0
      src/main/webapp/resources/view/admin/product/brand_map.html

+ 7 - 5
src/main/java/com/uas/platform/b2c/core/support/BodyReaderHttpServletRequestWrapper.java

@@ -32,11 +32,13 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp
         if(result!=null &&result.length>0){
             Set<String> keywords = null;
             for(int i=0;i<result.length;i++){
-                keywords = KeyWordFilterUtil.getSensitiveWord(result[i], 0,KeyWordFilterUtil.initKeyWord(
-                        KeyWordFilter.keyworsSet));
-                if(keywords!=null && keywords.size()>0){
-                    for(String s : keywords){
-                        result[i] = result[i].replaceAll(s,"*");
+                if(KeyWordFilter.keyworsSet!=null){
+                    keywords = KeyWordFilterUtil.getSensitiveWord(result[i], 0,KeyWordFilterUtil.initKeyWord(
+                            KeyWordFilter.keyworsSet));
+                    if(keywords!=null && keywords.size()>0){
+                        for(String s : keywords){
+                            result[i] = result[i].replaceAll(s,"*");
+                        }
                     }
                 }
             }

+ 7 - 5
src/main/java/com/uas/platform/b2c/core/support/HttpHelper.java

@@ -47,11 +47,13 @@ public class HttpHelper {
             }
         }
         String body = sb.toString();
-        Set<String> keywords = KeyWordFilterUtil.getSensitiveWord(body, 0,KeyWordFilterUtil.initKeyWord(
-                KeyWordFilter.keyworsSet));
-        if(keywords!=null && keywords.size()>0) {
-            for (String s : keywords) {
-                body = body.replaceAll(s,"*");
+        if(KeyWordFilter.keyworsSet!=null){
+            Set<String> keywords = KeyWordFilterUtil.getSensitiveWord(body, 0,KeyWordFilterUtil.initKeyWord(
+                    KeyWordFilter.keyworsSet));
+            if(keywords!=null && keywords.size()>0) {
+                for (String s : keywords) {
+                    body = body.replaceAll(s,"*");
+                }
             }
         }
         return body;

+ 13 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java

@@ -89,6 +89,19 @@ public class BrandController {
 		return brandService.getBrandInfoPage(info, keyword);
 	}
 
+	/**
+	 * 查找所有简单有效品牌信息,并按首字母过滤
+	 * @param keyword 关键词
+	 * @param params
+	 *            分页信息
+	 * @return 品牌简易信息
+	 */
+	@RequestMapping(value = "/page/initial", method = RequestMethod.GET)
+	public Page<BrandInfo> getBrankInfoPage(PageParams params, String keyword, String initial) {
+		PageInfo info = new PageInfo(params);
+		return brandService.getBrandInfoPage(info, keyword, initial);
+	}
+
 	/**
 	 * 根据uuid获取单个
 	 * 

+ 105 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandMapController.java

@@ -0,0 +1,105 @@
+package com.uas.platform.b2c.prod.product.brand.controller;
+
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMap;
+import com.uas.platform.b2c.prod.product.brand.service.BrandMapService;
+import com.uas.platform.b2c.prod.store.model.StoreType;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.repository.query.Param;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 品牌映射Controller
+ *
+ * @author hulh
+ */
+@RestController
+@RequestMapping("/product/brandMap")
+public class BrandMapController {
+
+	@Autowired
+	private BrandMapService mapService;
+
+	private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+	/**
+	 * 根据以下参数分页获取对应的品牌映射关系
+	 *
+	 * @param params
+	 * @param keyword
+	 * @param storeType
+	 * @param fromDate
+	 * @param toDate
+	 * @return
+	 */
+	@RequestMapping(value = "/page", method = RequestMethod.GET)
+	public Page<BrandMap> findBrandMap(PageParams params, String keyword, StoreType storeType, Long fromDate, Long toDate){
+		return mapService.findAllMap(params, keyword, storeType, fromDate, toDate);
+	}
+
+	/**
+	 * 新增一个品牌映射
+	 *
+	 * @return
+	 */
+	@RequestMapping(value = "/addOne", method = RequestMethod.POST)
+	public BrandMap addBrandMap(@RequestBody BrandMap map){
+		logger.log("品牌映射", "新增品牌映射记录");
+		return mapService.addOneMap(map);
+	}
+
+	@RequestMapping(value = "/export", method = RequestMethod.POST)
+	public ModelAndView exportDataToExcel(@RequestParam(required = false, value = "isAjax", defaultValue = "false") Boolean isAjax, HttpServletRequest request, @Param("keyword") String keyword,
+										  @Param("storeType") StoreType storeType, @Param("fromDate") Long fromDate, @Param("toDate") Long toDate) throws UnsupportedEncodingException {
+		HttpSession session = request.getSession();
+		ModelAndView modelAndView = new ModelAndView();
+		Object loading = session.getAttribute("loading");
+		if(isAjax) {
+			MappingJackson2JsonView view = new MappingJackson2JsonView();
+			Map<String, Boolean> attributes = new HashMap<>();
+			Boolean isLoading = loading == Boolean.TRUE;
+			attributes.put("loading", isLoading);
+			view.setAttributesMap(attributes);
+			modelAndView.setView(view);
+			return modelAndView;
+		}
+		session.setAttribute("loading", true);
+		List<BrandMap> data = new ArrayList<>();
+		data = mapService.getMapDataList(keyword, storeType, fromDate, toDate);
+		modelAndView.addObject("data", data);
+		modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/product/brand-map", "优软商城-品牌映射信息"));
+		session.setAttribute("loading", false);
+		return modelAndView;
+	}
+
+	/**
+	 * 根据id删除一个品牌映射
+	 *
+	 * @param id
+	 * @return
+	 */
+	@RequestMapping(value = "/deleteOne/{id}", method = RequestMethod.PUT)
+	public Object deleteOne(@PathVariable Long id){
+		return mapService.deleteOneMap(id);
+	}
+
+	@RequestMapping(value = "/initMap", method = RequestMethod.POST)
+	public void initAllBrandMap(){
+		logger.log("品牌映射", "品牌映射初始化");
+		mapService.initBrandMap();
+	}
+}

+ 13 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandMapDao.java

@@ -0,0 +1,13 @@
+package com.uas.platform.b2c.prod.product.brand.dao;
+
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMap;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+/**
+ * Created by hulh on 2017/10/23.
+ * 品牌映射接口
+ */
+public interface BrandMapDao extends JpaSpecificationExecutor<BrandMap>, JpaRepository<BrandMap, Long> {
+
+}

+ 17 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandTempDao.java

@@ -0,0 +1,17 @@
+package com.uas.platform.b2c.prod.product.brand.dao;
+
+import com.uas.platform.b2c.prod.product.brand.modal.BrandTemp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+/**
+ * 品牌映射临时表dao层
+ */
+public interface BrandTempDao extends JpaSpecificationExecutor<BrandTemp>, JpaRepository<BrandTemp, Long> {
+
+	@Query(value = "select b from BrandTemp b where b.nameSd is not null")
+	List<BrandTemp> getAllBySdNameNotNull();
+}

+ 233 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandMap.java

@@ -0,0 +1,233 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import com.uas.platform.b2c.prod.store.model.StoreType;
+
+import javax.persistence.*;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 品牌映射表
+ *
+ * @author hulh
+ */
+@Entity
+@Table(name = "product$brand_map")
+public class BrandMap {
+
+	private final static List<String> typeCn = Arrays.asList("代理商", "经销商", "原厂商", "寄售商");
+
+	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+	/**
+	 * 主键
+	 */
+	@Id
+	@GeneratedValue
+	@Column(name = "id")
+	private Long id;
+
+	/**
+	 * 映射企业enuu
+	 */
+	@Column(name = "map_enuu")
+	private Long enuu;
+
+	/**
+	 * 映射企业名称
+	 */
+	@Column(name = "map_name")
+	private String enName;
+
+	/**
+	 * 店铺类型
+	 */
+	@Column(name = "map_type")
+	@Enumerated(value = EnumType.STRING)
+	private StoreType type;
+
+	/**
+	 * 客户公司品牌英文名
+	 */
+	@Column(name = "map_name_cd_en")
+	private String nameChildEn;
+
+	/**
+	 * 客户公司品牌中文名
+	 */
+	@Column(name = "map_name_cd_cn")
+	private String nameChildCn;
+
+	/**
+	 * 商城标准品牌英文名
+	 */
+	@Column(name = "map_name_sd_en")
+	private String nameStandardEn;
+
+	/**
+	 * 商城标准品牌中文名
+	 */
+	@Column(name = "map_name_sd_cn")
+	private String nameStandardCn;
+
+	/**
+	 * 对应的品牌id
+	 */
+	@Column(name = "map_brand_id")
+	private Long brandid;
+
+	/**
+	 * 对应的品牌uuid
+	 */
+	@Column(name = "map_uuid")
+	private String uuid;
+
+	/**
+	 * 操作人uu
+	 */
+	@Column(name = "map_op_uu")
+	private Long userUU;
+
+	/**
+	 * 操作人名称
+	 */
+	@Column(name = "map_op_name")
+	private String operateName;
+
+	/**
+	 * 操作人时间
+	 */
+	@Column(name = "map_op_time")
+	private Date operateTime;
+
+	public BrandMap(){
+
+	}
+
+	public BrandMap(BrandTemp temp){
+		this.nameChildEn = temp.getNameCd();
+		this.nameStandardEn = temp.getNameSd();
+	}
+
+	public Long getEnuu() {
+		return enuu;
+	}
+
+	public void setEnuu(Long enuu) {
+		this.enuu = enuu;
+	}
+
+	public String getEnName() {
+		return enName;
+	}
+
+	public void setEnName(String enName) {
+		this.enName = enName;
+	}
+
+	public StoreType getType() {
+		return type;
+	}
+
+	public void setType(StoreType type) {
+		this.type = type;
+	}
+
+	public String getNameChildEn() {
+		return nameChildEn;
+	}
+
+	public void setNameChildEn(String nameChildEn) {
+		this.nameChildEn = nameChildEn;
+	}
+
+	public String getNameChildCn() {
+		return nameChildCn;
+	}
+
+	public void setNameChildCn(String nameChildCn) {
+		this.nameChildCn = nameChildCn;
+	}
+
+	public String getUuid() {
+		return uuid;
+	}
+
+	public void setUuid(String uuid) {
+		this.uuid = uuid;
+	}
+
+	public String getNameStandardEn() {
+		return nameStandardEn;
+	}
+
+	public void setNameStandardEn(String nameStandardEn) {
+		this.nameStandardEn = nameStandardEn;
+	}
+
+	public String getNameStandardCn() {
+		return nameStandardCn;
+	}
+
+	public void setNameStandardCn(String nameStandardCn) {
+		this.nameStandardCn = nameStandardCn;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public String getOperateName() {
+		return operateName;
+	}
+
+	public void setOperateName(String operateName) {
+		this.operateName = operateName;
+	}
+
+	public Date getOperateTime() {
+		return operateTime;
+	}
+
+	public void setOperateTime(Date operateTime) {
+		this.operateTime = operateTime;
+	}
+
+	public Long getBrandid() {
+		return brandid;
+	}
+
+	public void setBrandid(Long brandid) {
+		this.brandid = brandid;
+	}
+
+	/**
+	 * 将店铺类型转化为中文形式
+	 * @return
+	 */
+	public String convertType(){
+		return typeCn.get(type.ordinal());
+	}
+
+	/**
+	 * 将时间转化为日期格式  yyyy-MM-dd HH:mm:ss
+	 * @return
+	 */
+	public String formatTime(){
+		return sdf.format(operateTime);
+	}
+}

+ 55 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandTemp.java

@@ -0,0 +1,55 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import javax.persistence.*;
+
+/**
+ * 品牌映射临时表 --用于保存映射关系
+ */
+@Entity
+@Table(name = "product$brand_temp")
+public class BrandTemp {
+
+	/**
+	 * 主键
+	 */
+	@Id
+	@GeneratedValue
+	@Column(name = "id")
+	private Long id;
+
+	/**
+	 * 客户品牌名称
+	 */
+	@Column(name = "name_cd")
+	private String nameCd;
+
+	/**
+	 * 商城品牌名称
+	 */
+	@Column(name = "name_sd")
+	private String nameSd;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getNameCd() {
+		return nameCd;
+	}
+
+	public void setNameCd(String nameCd) {
+		this.nameCd = nameCd;
+	}
+
+	public String getNameSd() {
+		return nameSd;
+	}
+
+	public void setNameSd(String nameSd) {
+		this.nameSd = nameSd;
+	}
+}

+ 75 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/MapOperator.java

@@ -0,0 +1,75 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 品牌映射操作人表
+ *
+ * @author hulh
+ */
+@Entity
+@Table(name = "product$brand_operator")
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
+public class MapOperator {
+
+	/**
+	 * 主键
+	 */
+	@Id
+	@GeneratedValue
+	@Column(name = "id")
+	private Long id;
+
+	/**
+	 * 操作人uu
+	 */
+	@Column(name = "op_uu")
+	private Long userUU;
+
+	/**
+	 * 操作人名称
+	 */
+	@Column(name = "op_name")
+	private String operateName;
+
+	/**
+	 * 操作人时间
+	 */
+	@Column(name = "op_time")
+	private Date operateTime;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public String getOperateName() {
+		return operateName;
+	}
+
+	public void setOperateName(String operateName) {
+		this.operateName = operateName;
+	}
+
+	public Date getOperateTime() {
+		return operateTime;
+	}
+
+	public void setOperateTime(Date operateTime) {
+		this.operateTime = operateTime;
+	}
+}

+ 41 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandMapService.java

@@ -0,0 +1,41 @@
+package com.uas.platform.b2c.prod.product.brand.service;
+
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMap;
+import com.uas.platform.b2c.prod.store.model.StoreType;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * 品牌映射Service
+ *
+ * @author hulh
+ */
+public interface BrandMapService {
+
+	/**
+	 * 获取所有设置好的品牌映射
+	 *
+	 * @return
+	 */
+	Page<BrandMap> findAllMap(PageParams params, String keyword, StoreType type, Long fromDate, Long toDate);
+
+	/**
+	 * 添加一个品牌映射
+	 *
+	 * @return
+	 */
+	BrandMap addOneMap(BrandMap map);
+
+	List<BrandMap> getMapDataList(String keyword, StoreType type, Long fromDate, Long toDate);
+
+	/**
+	 * 删除一个品牌映射
+	 *
+	 * @return
+	 */
+	Object deleteOneMap(Long id);
+
+	void initBrandMap();
+}

+ 9 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java

@@ -70,6 +70,15 @@ public interface BrandService {
 	 */
 	public Page<BrandInfo> getBrandInfoPage(PageInfo pageInfo, String keyword);
 
+	/**
+	 * 获取BrandInfo分页数据
+	 * @param keyword 关键词
+	 * @param pageInfo 分页信息
+	 * @param initial 首字母
+	 * @return 品牌简易信息
+	 */
+	public Page<BrandInfo> getBrandInfoPage(PageInfo pageInfo, String keyword, String initial);
+
 	/**
 	 * 根据uuid获取单个品牌信息
 	 * @param uuid

+ 184 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandMapServiceImpl.java

@@ -0,0 +1,184 @@
+package com.uas.platform.b2c.prod.product.brand.service.impl;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandMapDao;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandTempDao;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMap;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandTemp;
+import com.uas.platform.b2c.prod.product.brand.modal.MapOperator;
+import com.uas.platform.b2c.prod.product.brand.service.BrandMapService;
+import com.uas.platform.b2c.prod.store.dao.StoreInDao;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreType;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+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.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.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 品牌映射服务的实现类
+ */
+@Service
+public class BrandMapServiceImpl implements BrandMapService{
+
+	@Autowired
+	private BrandTempDao brandTempDao;
+
+	@Autowired
+	private BrandMapDao brandMapDao;
+
+	@Autowired
+	private BrandDao brandDao;
+
+	@Autowired
+	private StoreInDao storeInDao;
+
+	//10041230L--10000666L--10030744L--10042176L--10005919L--10043358L--10044036L--10041191L--10042901L
+//	private final static List<Long> uuList = Arrays.asList(10041230L, 10000666L,
+//			10030744L, 10042176L, 10005919L, 10043358L, 10044036L, 10041191L, 10042901L);
+
+	//暂时测试happy和豆腐公司
+	private final static List<Long> uuList = Arrays.asList(10043457L, 10043516L);
+
+	public PageInfo convertPageInfo(PageInfo info, String keyword, StoreType type, Long fromDate, Long toDate){
+		if (type != null){
+			info.expression(PredicateUtils.eq("type", type, false));
+		}
+		if (StringUtils.hasText(keyword)){
+			SimpleExpression expression1 = new SimpleExpression("nameStandardEn", keyword, CriterionExpression.Operator.LIKE, true);
+			SimpleExpression expression2 = new SimpleExpression("nameStandardCn", keyword, CriterionExpression.Operator.LIKE, true);
+			SimpleExpression expression3 = new SimpleExpression("enName", keyword, CriterionExpression.Operator.LIKE);
+			SimpleExpression[] expressions = new SimpleExpression[]{expression1, expression2, expression3};
+			info.expression(PredicateUtils.or(expressions));
+		}
+		if (fromDate != null){
+			info.expression(PredicateUtils.gte("operateTime", new Date(fromDate), false));
+		}
+		if (toDate != null){
+			info.expression(PredicateUtils.lte("operateTime", new Date(toDate), false));
+		}
+		return info;
+	}
+
+	@Override
+	public Page<BrandMap> findAllMap(PageParams params, String keyword, StoreType type, Long fromDate, Long toDate) {
+		final PageInfo pageInfo = new PageInfo(params);
+		convertPageInfo(pageInfo, keyword, type, fromDate, toDate);
+		return brandMapDao.findAll(new Specification<BrandMap>() {
+			@Override
+			public Predicate toPredicate(Root<BrandMap> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+				criteriaQuery.where(pageInfo.getPredicates(root, criteriaQuery, criteriaBuilder));
+				return null;
+			}
+		}, pageInfo);
+	}
+
+	@Override
+	public List<BrandMap> getMapDataList(String keyword, StoreType type, Long fromDate, Long toDate) {
+		final PageInfo pageInfo = new PageInfo();
+		convertPageInfo(pageInfo, keyword, type, fromDate, toDate);
+		List<BrandMap> mapList = brandMapDao.findAll(new Specification<BrandMap>() {
+			@Override
+			public Predicate toPredicate(Root<BrandMap> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				query.where(pageInfo.getPredicates(root, query, builder));
+				return null;
+			}
+		});
+		return mapList;
+	}
+
+	@Override
+	public BrandMap addOneMap(BrandMap map) {
+		validateMap(map);
+		User user = SystemSession.getUser();
+		map.setUserUU(user.getUserUU());
+		map.setOperateName(user.getUserName());
+		map.setOperateTime(new Date());
+
+		return brandMapDao.save(map);
+	}
+
+	public void validateMap(BrandMap map){
+		if (StringUtils.isEmpty(map.getEnName())){
+			throw new IllegalOperatorException("请选择店铺信息");
+		}
+		if (StringUtils.isEmpty(map.getNameChildEn())){
+			throw new IllegalOperatorException("请完善要对应的品牌英文名");
+		}
+		if (StringUtils.isEmpty(map.getNameStandardCn()) || StringUtils.isEmpty(map.getNameStandardEn())){
+			throw new IllegalOperatorException("请选择对应标准库的品牌");
+		}
+	}
+
+	@Override
+	public Object deleteOneMap(Long id) {
+		return null;
+	}
+
+	@Override
+	public void initBrandMap() {
+		List<BrandTemp> originalList = brandTempDao.getAllBySdNameNotNull();
+		List<BrandTemp> convertList = new ArrayList<>();
+		for (BrandTemp temp : originalList){
+			if (!temp.getNameCd().equals(temp.getNameSd())) { //相同的不记录
+				convertList.add(temp);
+			}
+		}
+		List<BrandMap> resultList = new ArrayList<>();
+		for (Long enuu : uuList){
+			List<StoreIn> storeList = storeInDao.findByEnUU(enuu);
+			if (CollectionUtils.isEmpty(storeList)){
+				throw new IllegalOperatorException("对应的店铺信息丢失,请刷新重新");
+			}else{
+				StoreIn store = storeList.get(0);
+				for (BrandTemp temp : convertList){
+
+					List<Brand> brandList = brandDao.findByNameEn(temp.getNameSd());
+					if (!CollectionUtils.isEmpty(brandList)){
+						Brand brand = brandList.get(0);
+						BrandMap map = new BrandMap();
+						map.setNameStandardEn(temp.getNameSd());
+						map.setNameStandardCn(brand.getNameCn());
+						map.setBrandid(brand.getId());
+						map.setUuid(brand.getUuid());
+
+						map.setNameChildEn(temp.getNameCd());
+						map.setNameChildCn(temp.getNameCd());
+
+						map.setEnuu(store.getEnUU());
+						map.setEnName(store.getStoreName());
+						map.setType(store.getType());
+
+						User user = SystemSession.getUser();
+						map.setUserUU(user.getUserUU());
+						map.setOperateName(user.getUserName());
+						map.setOperateTime(new Date());
+
+						resultList.add(map);
+					}
+				}
+				brandMapDao.save(resultList);
+			}
+		}
+	}
+}

+ 32 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
@@ -154,6 +155,37 @@ public class BrandServiceImpl implements BrandService {
 		}, pageInfo);
 	}
 
+	public Page<BrandInfo> getBrandInfoPage(final PageInfo pageInfo, String keyword, String inital){
+		if (StringUtils.hasText(keyword)) {
+			SimpleExpression[] simpleArrs = new SimpleExpression[2];
+			simpleArrs[0] = new SimpleExpression("nameCn", keyword, Operator.LIKE, true);
+			simpleArrs[1] = new SimpleExpression("nameEn", keyword, Operator.LIKE, true);
+			LogicalExpression logical1 = new LogicalExpression(simpleArrs, Operator.OR);
+			pageInfo.expression(logical1);
+		}
+		if (StringUtils.hasText(inital)){
+			if ("0~9".equals(inital)) {
+				String[] initals = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
+				SimpleExpression[] numEx = new SimpleExpression[10];
+				for (int i = 0; i < 10; i++){
+					numEx[i] = new SimpleExpression("inital", initals[i], Operator.EQ, true);
+				}
+				LogicalExpression logical2 = new LogicalExpression(numEx, Operator.OR);
+				pageInfo.expression(logical2);
+			} else {
+				pageInfo.filter("inital", inital);
+			}
+		}
+		pageInfo.sorting(Sort.Direction.ASC, "nameEn");
+		return brandInfoDao.findAll(new Specification<BrandInfo>() {
+			@Override
+			public Predicate toPredicate(Root<BrandInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				query.where(pageInfo.getPredicates(root, query, builder));
+				return null;
+			}
+		}, pageInfo);
+	}
+
 	@Override
 	public Brand findByUuid(String uuid) {
 		// 这个因为是接口错误的话直接返回

+ 14 - 0
src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java

@@ -157,6 +157,20 @@ public class StoreInController {
 		return	storeService.pageStoreInfoWhenAdminQuery(pageInfo, type, status, keyword);
 	}
 
+	/**
+	 * 分页获取店铺信息,根据店铺名过滤
+	 *
+	 * @param params
+	 * @param keyword
+	 * @param storeType
+	 * @return
+	 */
+	@RequestMapping(value = "/stores/page", method = RequestMethod.GET)
+	public Page<StoreIn> pageAllStore(PageParams params, String keyword, StoreType storeType){
+		PageInfo pageInfo = new PageInfo(params);
+		return storeService.getStorePage(pageInfo, keyword, storeType);
+	}
+
 
 	/**
 	 * 获取店铺的联系信息(电话,邮箱,地址信息)

+ 10 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java

@@ -147,6 +147,16 @@ public interface StoreInService {
 	 */
 	Page<StoreIn> pageStoreInfoWhenAdminQuery(PageInfo pageInfo, StoreType type, StoreStatus status, String keyword);
 
+	/**
+	 * 分页获取店铺信息,根据店铺名过滤
+	 *
+	 * @param pageInfo
+	 * @param keyword
+	 * @param storeType
+	 * @return
+	 */
+	Page<StoreIn> getStorePage(PageInfo pageInfo, String keyword, StoreType storeType);
+
 	/**
 	 * 当管理员推荐店铺的时候,保存店铺的广告信息
 	 *

+ 19 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java

@@ -531,6 +531,25 @@ public class StoreInServiceImpl implements StoreInService {
 		return storeDao.findFiveStoresByType(num, typeList);
 	}
 
+	@Override
+	public Page<StoreIn> getStorePage(final PageInfo pageInfo, String keyword, StoreType storeType) {
+
+		if (StringUtils.hasText(keyword)){
+			pageInfo.expression(PredicateUtils.like("storeName", keyword, false));
+		}
+		if (storeType != null){
+			pageInfo.expression(PredicateUtils.eq("type", storeType, false));
+		}
+
+		return storeDao.findAll(new Specification<StoreIn>() {
+			@Override
+			public Predicate toPredicate(Root<StoreIn> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+				criteriaQuery.where(pageInfo.getPredicates(root, criteriaQuery, criteriaBuilder));
+				return null;
+			}
+		}, pageInfo);
+	}
+
 	/**
 	 * 获取店铺的联系信息
 	 *

BIN
src/main/resources/jxls-tpl/product/brand-map.xls


+ 4 - 4
src/main/resources/spring/context.xml

@@ -11,13 +11,13 @@
 	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
 	http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
 
-	<context:property-placeholder location="classpath*:${profile}/*.properties" />
+	<context:property-placeholder location="classpath*:dev/*.properties" />
 	<!-- 系统运行参数注入 -->
 	<util:properties id="sys"
-		location="classpath:${profile}/sys.properties" />
+		location="classpath:dev/sys.properties" />
 	<!-- 消息参数 -->
 	<util:properties id="message"
-		location="classpath:${profile}/message.properties" />
+		location="classpath:dev/message.properties" />
 	<!-- 注册spring上下文对象 -->
 	<bean class="com.uas.platform.b2c.core.support.ApplicationContextRegister" />
 	<!-- 容器启动完成之后执行 -->
@@ -185,7 +185,7 @@
 	<!-- 账户中心配置 -->
 	<bean id="accountConfigurer" class="com.uas.account.web.AccountConfigurer"
 		init-method="init">
-		<property name="configPath" value="classpath:${profile}/account.properties" />
+		<property name="configPath" value="classpath:dev/account.properties" />
 	</bean>
 
 	<import resource="classpath:spring/ehcache.xml"/>

+ 2 - 0
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -148,6 +148,8 @@
 			<li class="nav-node"><a href="#audit/bankinfo"><i class="fa fa-bank"></i><span> 银行账户信息</span></a></li>
 
 			<li class="nav-header">维护</li>
+			<li class="nav-node"><a href="#/brand/map"><i
+					class="fa fa-flag"></i><span> 品牌映射维护</span></a></li>
 			<li class="nav-node"><a href="#/store/company"><i
 					class="fa fa-flag"></i><span> 寄售管理</span></a></li>
 			<li class="nav-node"><a href="#/store/list"><i

BIN
src/main/webapp/resources/img/product/cart/up-map.png


+ 6 - 0
src/main/webapp/resources/js/admin/app.js

@@ -262,6 +262,12 @@
 			templateUrl : 'static/view/admin/brand_maintenance.html',
 			controller : 'BrandMaintenanceCtrl',
 			controllerUrl : 'app/controllers/BrandMaintenanceCtrl'
+		})).state('brand_map', angularAMD.route({
+			// 品牌映射维护
+			url: '/brand/map',
+			templateUrl : 'static/view/admin/product/brand_map.html',
+			controller : 'BrandMapCtrl',
+			controllerUrl : 'app/controllers/product/brandMapCtrl'
 		})).state('store_company_list', angularAMD.route({
 			// 寄售管理
 			url: '/store/company',

+ 379 - 0
src/main/webapp/resources/js/admin/controllers/product/brandMapCtrl.js

@@ -0,0 +1,379 @@
+define(['app/app'], function(app) {
+	'use strict';
+	app.register.controller('BrandMapCtrl', ['$scope', 'ngTableParams', 'BaseService', 'BrandMap', 'toaster', 'BrandActive', 'StoreInfo', 'Loading', function($scope, ngTableParams, BaseService, BrandMap, toaster, BrandActive, StoreInfo, Loading) {
+		$scope.$$map = {};
+		$scope.keyword = '';
+		$scope.storeType = 'ALL';
+		$scope.typeCn = '全部';
+		$scope.brandMap = {};
+
+		$scope.startDate = null;
+		$scope.endDate = null;
+
+		$scope.onSearch = function () {
+			reloadData();
+		};
+
+		$scope.showType = function () {
+			$scope.typeFrame = !$scope.typeFrame;
+		};
+
+		var reloadData = function () {
+			$scope.brandMapTableParams.page(1);
+			$scope.brandMapTableParams.reload();
+		};
+
+		$scope.exportExcel = function () {
+			if ($scope.$$map.totalElements == 0) {
+				toaster.pop('info', '当前品牌映射列表为空,无法下载');
+				return ;
+			}
+			exportByAjax();
+		};
+
+		var exportByAjax = function () {
+			var url = 'product/brandMap/export';
+			var strArray = [];
+			if ($scope.keyword && $scope.keyword.length > 0){
+				var wordStr = "keyword=" + $scope.keyword;
+				strArray.push(wordStr);
+			}
+			if ($scope.storeType && $scope.storeType != 'ALL'){
+				var typeStr = "storeType=" + $scope.storeType;
+				strArray.push(typeStr);
+			}
+			if ($scope.startDate){
+				var fromDate = "fromDate=" + $scope.startDate.getTime();
+				strArray.push(fromDate);
+			}
+			if ($scope.endDate){
+				var toDate = "toDate=" + $scope.endDate.getTime();
+				strArray.push(toDate);
+			}
+			if (strArray.length != 0){
+				var str = strArray.join("&");
+				url = url + "?" + str;
+			}
+			var form = $("<form>");   //定义一个form表单
+			form.attr('style', 'display:none');   //在form表单中添加查询参数
+			form.attr('target', '');
+			form.attr('method', 'POST');
+			form.attr('action', url);
+			console.log(url);
+			$('body').append(form);  //将表单放置在web中
+			form.submit();
+
+			$scope.$$map.clockID = setInterval(function() {
+				getDownLoadStatus();
+			}, 500);
+		};
+
+		var getDownLoadStatus = function () {
+			Loading.show();
+			$.ajax({
+				url : 'product/brandMap/export',
+				data : {isAjax : true},
+				method : 'POST',
+				dataType : 'json',
+				success : function (data) {
+					if(!data.loading){
+						$scope.$apply(function () {
+							toaster.pop('info', '数据处理完毕,正在下载文件,请稍等。');
+							Loading.hide();
+						});
+						if($scope.$$map.clockID) {
+							clearInterval($scope.$$map.clockID);
+						}
+					}
+				},
+				error : function () {
+					Loading.hide();
+					if($scope.$$map.clockID) {
+						clearInterval($scope.$$map.clockID);
+					}
+				}
+			});
+		};
+
+		$scope.condition = {
+			startDateOpen: false,
+			endDateOpen: false
+		};
+
+		// 打开日期选择框
+		$scope.openDatePicker = function($event, item, openParam) {
+			if (!$scope.endDate){ //如果为空,则需要加入23:59:59的毫秒数
+				$scope.isAdd = false;
+			}
+			$event.preventDefault();
+			$event.stopPropagation();
+			item[openParam] = !item[openParam];
+		};
+
+		var constMs = 86399000; // 23:59:59的毫秒数
+
+		$scope.onDateCondition = function () {
+			if ($scope.endDate && !$scope.isAdd){
+				var ms = $scope.endDate.getTime() + constMs;
+				$scope.endDate = new Date(ms);
+				$scope.isAdd = !$scope.isAdd;
+			}
+			reloadData();
+		};
+
+		$scope.convertType = {
+			'ALL' : '全部',
+			'AGENCY' : '代理商',
+			'DISTRIBUTION' : '经销商',
+			'ORIGINAL_FACTORY' : '原厂商',
+			'CONSIGNMENT' : '寄售商'
+		};
+
+		$scope.changeDateZone = function (item) {
+			$scope.typeFrame = false;
+			if ($scope.storeType != item){
+				$scope.storeType = item;
+				$scope.typeCn = $scope.convertType[item];
+				reloadData();
+			}
+		};
+
+		$scope.addOneMap = function () {
+			$scope.addFrame = !$scope.addFrame;
+			$scope.showStore = false;
+			$scope.showBrand = false;
+		};
+
+		$scope.cancelAdd = function () {
+			$scope.brandMap = {};
+			$scope.typeInStore = 'ALL';
+			if ($scope.storeInfo){
+				$scope.storeInfo = null;
+			}
+			if ($scope.brandInfo){
+				$scope.brandInfo = null;
+			}
+			if ($scope.ensureBrand){
+				$scope.ensureBrand = null;
+			}
+			$scope.wordInStore = '';
+			$scope.wordInBrand = '';
+			$scope.initialInBrand = '';
+			$scope.addFrame = false;
+		};
+
+		$scope.ensureAdd = function () {
+			if (!$scope.brandMap.enName){
+				toaster.pop("info", "请选择店铺信息");
+				return ;
+			}
+			if (!$scope.brandMap.nameChildEn){
+				toaster.pop("info", "请完善要对应的品牌英文名");
+				return ;
+			}
+			if (!$scope.brandMap.nameStandardEn || !$scope.brandMap.nameStandardCn){
+				toaster.pop("info", "请选择对应标准库的品牌");
+				return ;
+			}
+			BrandMap.addOneBrandMap({}, $scope.brandMap, function (data) {
+				if (data){
+					$scope.brandMap = {};
+					$scope.addFrame = false;
+					reloadData();
+				}
+			}, function (error) {
+				toaster.pop("error", error.data);
+			})
+		};
+
+		$scope.brandMapTableParams = new ngTableParams({
+			page : 1,
+			count : 10,
+			sorting : {
+				operateTime : 'DESC'
+			}
+		},{
+			total : 0,
+			getData : function ($defer, params) {
+				var param = BaseService.parseParams(params.url());
+				if ($scope.keyword && $scope.keyword.length > 0){
+					param.keyword = $scope.keyword;
+				}
+				if ($scope.storeType && $scope.storeType != 'ALL'){
+					param.storeType = $scope.storeType;
+				}
+				if ($scope.startDate){
+					param.fromDate = $scope.startDate.getTime();
+				}
+				if ($scope.endDate){
+					param.toDate = $scope.endDate.getTime();
+				}
+				BrandMap.getPageOfBrandMap(param, function (page){
+					$scope.$$map.totalElements = page.totalElements;
+					params.total(page.totalElements);
+					$defer.resolve(page.content);
+				},function () {
+					toaster.pop('error', '获取品牌映射关系失败');
+				} )
+			}
+		});
+
+		$scope.showBrandFrame = function () {
+			$scope.showBrand = !$scope.showBrand;
+		};
+
+		$scope.changeTextInBrand = function (item) {
+			$scope.wordInBrand = item;
+		};
+
+		$scope.fitBrandObj = function (item) {
+			$scope.brandInfo = item;
+		};
+
+		$scope.cancelFitBrand = function () {
+			if ($scope.ensureBrand){
+				$scope.brandInfo = $scope.ensureBrand;
+			}else{
+				$scope.brandInfo = null;
+			}
+			$scope.wordInBrand = '';
+			$scope.showBrand = false;
+		};
+
+		$scope.fitBrandInMap = function () {
+			if (!$scope.brandInfo){
+				toaster.pop("info", "请选择对应标准库的品牌");
+				return ;
+			}
+			$scope.ensureBrand = $scope.brandInfo;
+			$scope.brandMap.brandid = $scope.ensureBrand.id;
+			$scope.brandMap.uuid = $scope.ensureBrand.uuid;
+			$scope.brandMap.nameStandardEn = $scope.ensureBrand.nameEn;
+			$scope.brandMap.nameStandardCn = $scope.ensureBrand.nameCn;
+			$scope.showBrand = false;
+		};
+
+		$scope.brandInfoTableParams = new ngTableParams({
+			page : 1,
+			count : 12
+		},{
+			total : 0,
+			getData : function ($defer, params) {
+				var param = BaseService.parseParams(params.url());
+				if ($scope.wordInBrand && $scope.wordInBrand.length > 0){
+					param.keyword = $scope.wordInBrand;
+				}
+				if ($scope.initialInBrand && $scope.initialInBrand.length > 0){
+					param.initial = $scope.initialInBrand;
+				}
+				BrandActive.getInfoPageWithInitial(param, function (page){
+					$scope.pageList = page.content;
+					params.total(page.totalElements);
+					$defer.resolve(page.content);
+					//划分数据
+					var row = Math.ceil(page.numberOfElements/3.0);
+					$scope.showList = [];
+					var count = 0;
+					for (var i = 0; i < row; i++){
+						$scope.showList[i] = [];
+						for (var j = 0; j < 3; j++){
+							$scope.showList[i].push($scope.pageList[count]);
+							count++;
+							if (count == page.numberOfElements){
+								return;
+							}
+						}
+					}
+				},function () {
+					toaster.pop('error', '获取标准品牌错误');
+				} )
+			}
+		});
+
+		var reloadBrandData = function () {
+			$scope.brandInfoTableParams.page(1);
+			$scope.brandInfoTableParams.reload();
+		};
+
+		$scope.clickChar = function (item) {
+			$scope.initialInBrand = item;
+			reloadBrandData();
+		};
+
+		$scope.searchBrand = function () {
+			reloadBrandData();
+		};
+
+		$scope.wordInStore = "";
+		$scope.typeInStore = 'ALL';
+
+		$scope.showStoreFrame = function () {
+			$scope.showStore = !$scope.showStore;
+		};
+
+		$scope.storeInfoTableParams = new ngTableParams({
+			page : 1,
+			count : 5
+		},{
+			total : 0,
+			getData : function ($defer, params) {
+				var param = BaseService.parseParams(params.url());
+				if ($scope.wordInStore && $scope.wordInStore.length > 0){
+					param.keyword = $scope.wordInStore;
+				}
+				if ($scope.typeInStore && $scope.typeInStore != 'ALL'){
+					param.storeType = $scope.typeInStore;
+				}
+				StoreInfo.findStoresPageByKeyword(param, function (page){
+					$scope.storeList = page.content;
+					params.total(page.totalElements);
+					$defer.resolve(page.content);
+				},function () {
+					toaster.pop('error', '获取标准品牌错误');
+				} )
+			}
+		});
+
+		$scope.searchStore = function () {
+			$scope.reloadStoreData();
+		};
+
+		$scope.fitStoreObj = function (item) {
+			$scope.storeInfo = item;
+		};
+
+		$scope.fitStoreInMap = function () {
+			if (!$scope.storeInfo){
+				toaster.pop("info", "请选择店铺信息");
+				return ;
+			}
+			$scope.brandMap.enName = $scope.storeInfo.storeName;
+			$scope.brandMap.enuu = $scope.storeInfo.enuu;
+			$scope.brandMap.type= $scope.storeInfo.type;
+			$scope.showStore = false;
+		};
+
+		$scope.cancelFitStore = function () {
+			$scope.storeInfo = null;
+			$scope.showStore = false;
+			$scope.wordInStore = '';
+		};
+
+		$scope.reloadStoreData =function () {
+			$scope.storeInfoTableParams.page(1);
+			$scope.storeInfoTableParams.reload();
+		};
+
+		$scope.chooseTypeInStore = function (item) {
+			if ($scope.typeInStore != item){
+				$scope.typeInStore = item;
+				$scope.reloadStoreData();
+			}
+		};
+
+		$scope.changeTextInStore = function (item) {
+			$scope.wordInStore = item;
+		}
+
+	}]);
+});

+ 18 - 0
src/main/webapp/resources/js/common/query/brand.js

@@ -94,6 +94,11 @@ define([ 'ngResource' ], function() {
 				url: 'api/product/brand/Info/ByPage',
 				method: 'GET'
 			},
+			// 分页获取简要信息
+			getInfoPageWithInitial: {
+				url: 'api/product/brand/page/initial',
+				method: 'GET'
+			},
 			// 验证品牌名是否存在
 			nameExist : {
 				url: 'produce/brand/nameExist',
@@ -201,5 +206,18 @@ define([ 'ngResource' ], function() {
 				method: 'GET'
 			}
 		});
+	}]).factory('BrandMap', ['$resource', function ($resource) {
+		//品牌映射关系相关操作
+		return $resource('product/brandMap', {}, {
+			//分页获取品牌映射关系
+			getPageOfBrandMap : {
+				url: 'product/brandMap/page',
+				method: 'GET'
+			},
+			addOneBrandMap : {
+				url: 'product/brandMap/addOne',
+				method: 'POST'
+			}
+		});
 	}]);
 });

+ 5 - 0
src/main/webapp/resources/js/common/query/storeInfo.js

@@ -96,6 +96,11 @@ define([ 'ngResource' ], function() {
                     op : 'page'
                 }
             },
+			// 分页获取店铺信息,根据店铺名称过滤
+			findStoresPageByKeyword : {
+				url : 'store-service/stores/page',
+				method : 'GET'
+			},
             // 检测当前企业是否已开店铺
             existStore : {
                 url : 'store-service/stores',

+ 1 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_logistics_ctrl.js

@@ -30,6 +30,7 @@ define(['app/app', 'calendar'], function (app) {
 			height: 220
 		});
 
+
 		/**********************************************************************
 		 * 初始化
 		 **********************************************************************/

+ 316 - 0
src/main/webapp/resources/view/admin/product/brand_map.html

@@ -0,0 +1,316 @@
+<style>
+    .row {
+        margin-bottom: 10px;
+    }
+    .btn-select{
+        min-height: 80px;
+        width:88px;
+        list-style: none;
+        text-align: left;
+        border:1px solid #2fa4e7;
+        float: left;
+        background: #fff;
+    }
+    .btn-select li{
+        padding-left:5px;
+        line-height: 22px;
+        color:#000;
+    }
+    .btn-select li:hover{
+        background: #2fa4e7;
+        color:#fff;
+        cursor:pointer;
+    }
+
+    .mobile-select{
+        position:absolute;
+        top:29px;
+        z-index:1000;
+        width:550px;
+        min-height:210px;
+        border:1px solid #2fa4e7;
+        padding:10px 0;
+        background: #fff
+    }
+    .mobile-select>ul{
+        display:inline-flex;
+        justify-content:space-around;
+        list-style: none;
+        padding:5px 10px;
+        background: #e9e9e9;
+        width:100%;
+    }
+    .mobile-select>ul>li{
+        padding:0 1px;
+        height:13px;
+        line-height: 13px;
+    }
+    .mobile-select>ul>li>a{
+        color:#666;
+    }
+    .mobile-select>ul>li:hover>a{
+        color:#2fa4e7;
+        text-decoration: none;
+    }
+    .mobile-select .pagination>li>a{
+        padding:3px 8px;
+    }
+    .mobile-select .ng-table-pagination .page-number {
+        height: 24px!important;
+    }
+    .mobile-select .ng-table-pager a.page-a {
+        color: #fff;
+        border-color: #4574e8;
+        font-size: 12px;
+        border-top-right-radius: 4px;
+        border-bottom-right-radius: 4px;
+        text-decoration: none;
+        height: 24px!important;
+        display: inline-block;
+        width: 30px;
+        padding: 0;
+        text-align: center;
+        line-height: 24px;
+    }
+    .mobile-select .ng-table-pager input.page-number {
+        width: 28px;
+        height: 30px;
+        padding: 0!important;
+        line-height: 28px;
+    }
+    .mobile-select .ng-table-pager {
+        margin-right: 20px!important;
+        background: #fff;
+    }
+
+</style>
+
+<div class="box-center">
+    <div class="container-fluid">
+        <div class="row">
+            <div class="col-sm-2">
+                <p style="margin-top: 8px; font-weight: bold;width:126px;">
+                    全部共计:<span class="totalNum ng-binding" style="color:#2fa4e7">{{$$map.totalElements}}条</span>
+                </p>
+            </div>
+            <div class=" col-sm-5">
+                <div class="input-group">
+                    <input type="search" class="form-control ng-pristine ng-untouched ng-valid" ng-model="keyword" ng-search="onSearch()" placeholder="输入标准库品牌名称/企业名">
+                    <span class="input-group-btn">
+					<button ng-click="onSearch()" class="btn btn-primary" type="button">搜索</button>
+				</span>
+                </div>
+            </div>
+            <div class="col-sm-5">
+                <p style="margin-top: 8px; font-weight: bold" ng-if="$$map.totalElements == 0">您输入的内容暂无匹配结果,请重新输入</p>
+            </div>
+        </div>
+
+        <div class="row">
+            <div class="col-sm-11 text-right">
+                <div class="more">
+                    <form class="form-inline ng-pristine ng-invalid ng-invalid-required ng-valid-date ng-valid-date-disabled">
+                        <div class="form-group" style="margin-right:20px">
+                            <label style="color:#2fa4e7">企业类型:</label>
+                            <div class="btn-group btn-menu" style="position:relative">
+                                <input type="text" ng-model="typeCn" ng-click="showType()" style="padding-left:3px;width:88px;background: url('static/img/product/cart/up-map.png')no-repeat 75px 6px;" readonly="readonly">
+                                <ul class="btn-select" ng-if="typeFrame" style="position:absolute;top:22px;">
+                                    <li ng-click="changeDateZone('ALL')">全部</li>
+                                    <li ng-click="changeDateZone('ORIGINAL_FACTORY')">原厂商</li>
+                                    <li ng-click="changeDateZone('AGENCY')">代理商</li>
+                                    <li ng-click="changeDateZone('DISTRIBUTION')">经销商</li>
+                                </ul>
+                            </div>
+                        </div>
+                        <div class="form-group ">
+                            <span style="color:#2fa4e7;font-weight: bold">操作日期:</span>
+                            <div class="form-group input-group input-group-xs input-trigger">
+                                <input type="text" ng-model="startDate"
+                                       class="form-control dateinput" placeholder="开始时间"
+                                       readonly="readonly" datepicker-popup="yyyy-MM-dd HH-mm-ss"
+                                       is-open="condition.startDateOpen" max-date="endDate" current-text="今天"
+                                       clear-text="清除" close-text="关闭"
+                                       datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                       ng-click="openDatePicker($event, condition, 'startDateOpen')"
+                                       ng-change="onDateCondition()">
+                                <span class="input-group-btn dateinput">
+                                    <button type="button" class="btn btn-default dateinput"
+                                        ng-click="openDatePicker($event, condition, 'startDateOpen')">
+                                        <i class="fa fa-calendar"></i>
+                                    </button>
+                                </span>
+                            </div>
+                            ——
+                            <div class="form-group input-group input-group-xs input-trigger">
+                                <input type="text" ng-model="endDate"
+                                       class="form-control dateinput" placeholder="结束时间"
+                                       readonly="readonly" datepicker-popup="yyyy-MM-dd HH-mm-ss"
+                                       is-open="condition.endDateOpen" min-date="startDate" current-text="今天"
+                                       clear-text="清除" close-text="关闭"
+                                       datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                       ng-click="openDatePicker($event, condition, 'endDateOpen')"
+                                       ng-change="onDateCondition()">
+                                <span class="input-group-btn dateinput">
+									<button type="button" class="btn btn-default dateinput"
+                                            ng-click="openDatePicker($event, condition, 'endDateOpen')">
+										<i class="fa fa-calendar"></i>
+									</button>
+                                </span>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+            <div class="col-sm-1">
+                <button ng-click="exportExcel()" class="btn btn-primary" type="button">导出结果</button>
+            </div>
+        </div>
+
+        <div class="row">
+            <div class="col-sm-1">
+                <a ng-click="addOneMap()" class="btn btn-primary"><i class="fa fa-plus" style="color:#2fa4e7;border-radius:50%;background: #fff;display:inline-block;padding:0 2px;margin-right:4px;"></i>新增映射关系</a>
+            </div>
+        </div>
+
+        <table class="table table-hover " ng-table="brandMapTableParams" id="table" style="table-layout: fixed">
+            <thead>
+            <tr style="background:#7bb4e1;color:#fff;">
+                <th class="text-center" width="40">序号</th>
+                <th class="text-center" width="270">企业名称</th>
+                <th class="text-center" width="100">类型</th>
+                <th class="text-center" width="150">非标品牌中文名</th>
+                <th class="text-center" width="150">非标品牌英文名</th>
+                <th class="text-center" width="150">标准库品牌中文名</th>
+                <th class="text-center" width="150">标准库品牌英文名</th>
+                <th class="text-center" width="150">操作员</th>
+                <th class="text-center" width="210">操作时间</th>
+            </tr>
+            </thead>
+            <!-- ngRepeat: property in $data -->
+            <tbody>
+            <tr class="text-center" ng-if="addFrame">
+                <td></td>
+                <td class="tdcenter">
+                    <div style="position:relative;display: inline-flex;align-items: center">
+                        <input type="text" ng-click="showStoreFrame()" style="width:248px;height:29px;background:url('static/img/product/cart/up-map.png')no-repeat 230px 10px;padding-right:20px;" ng-model="brandMap.enName" readonly="readonly">
+                        <div class="mobile-select" ng-if="showStore">
+                            <form style="display: inline-flex; align-items:center;padding-bottom:10px;">
+                                <span style="margin-left:2px;margin-right:2px;color:#2fa4e7;font-weight: bold">类型选择</span>
+                                <label class="radio-inline" ng-click="chooseTypeInStore('ORIGINAL_FACTORY')">
+                                    <input type="radio" name="type_radio">原厂商
+                                </label>
+                                <label class="radio-inline" ng-click="chooseTypeInStore('AGENCY')">
+                                    <input type="radio" name="type_radio">代理商
+                                </label>
+                                <label class="radio-inline" ng-click="chooseTypeInStore('DISTRIBUTION')">
+                                    <input type="radio" name="type_radio">经销商
+                                </label>
+                                <div style="display: inline-flex;align-items: center;margin-left:5px;width:170px;height:21px;">
+                                    <input type="search" style="padding:0 20px 0 3px;" ng-model="wordInStore" ng-search="reloadStoreData()" ng-change="changeTextInStore(wordInStore)">
+                                    <i class="fa fa-search" style="color:#fff;width:20px;height:20px;display:inline-block;margin-left:-20px;background: #2fa4e7;padding:3px;" ng-click="reloadStoreData()"></i>
+                                </div>
+                                <button ng-click="fitStoreInMap()" style="border:1px solid #2fa4e7;background: #2fa4e7;color:#fff;font-size: 12px;width:34px;height:24px;line-height: 24px;border-radius: 3px;margin:0 5px;">确定</button>
+                                <button ng-click="cancelFitStore()" style="border:1px solid #2fa4e7;background: #2fa4e7;color:#fff;font-size: 12px;width:34px;height:24px;line-height: 24px;border-radius: 3px;margin:0 5px;">取消</button>
+                            </form>
+                            <table class="table table-striped table-condensed table-hover" ng-table="storeInfoTableParams">
+                                <thead>
+                                <tr style="background:#e9e9e9;">
+                                    <th></th>
+                                    <th>店铺型号</th>
+                                    <th>公司名称</th>
+                                    <th>类型</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                    <tr ng-repeat="store in storeList" ng-click="fitStoreObj(store)">
+                                        <td><input type="radio" value="store.id" ng-checked="store.id == storeInfo.id" name="item_radio"></td>
+                                        <td><span ng-bind="store.id | storeId">00100021</span></td>
+                                        <td><span ng-bind="store.storeName">深圳中国移动公司</span></td>
+                                        <td><span ng-bind="convertType[store.type]">代码商</span></td>
+                                    </tr>
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
+                </td>
+                <td>{{convertType[brandMap.type]}}</td>
+                <td><input type="text" style="width:115px;height:29px;" ng-model="brandMap.nameChildCn"/></td>
+                <td><input type="text" style="width:115px;height:29px;" ng-model="brandMap.nameChildEn"/></td>
+                <td class="tdcenter">
+                    <div style="position:relative;display: inline-flex;align-items: center">
+                        <input type="text" ng-click="showBrandFrame()" style="width:96px;height:29px;background:url('static/img/product/cart/up-map.png')no-repeat 80px 10px;padding-right:20px;" ng-model="brandMap.nameStandardCn" readonly="readonly">
+                        <div class="mobile-select" ng-if="showBrand">
+                            <div style="margin-bottom:10px;display: inline-flex;align-items: center">
+                                <input type="search" ng-model="wordInBrand" ng-search="searchBrand()" ng-change="changeTextInBrand(wordInBrand)" style="width:395px;height:20px;line-height:20px;padding:0 20px 0 10px;border:1px solid #2fa4e7;" placeholder="输入品牌中文/英文名称">
+                                <i ng-click="searchBrand()" class="fa fa-search" style="color:#fff;width:20px;height:20px;display:inline-block;margin-left:-20px;background: #2fa4e7;padding:3px;"></i>
+                                <button ng-click="fitBrandInMap()" style="border:1px solid #2fa4e7;background: #2fa4e7;color:#fff;font-size: 12px;width:34px;height:24px;line-height: 24px;border-radius: 3px;margin:0 5px 0 10px;">确定</button>
+                                <button ng-click="cancelFitBrand()" style="border:1px solid #2fa4e7;background: #2fa4e7;color:#fff;font-size: 12px;width:34px;height:24px;line-height: 24px;border-radius: 3px;margin:0 5px;">取消</button>
+                            </div>
+                            <ul>
+                                <li>字母索引:</li>
+                                <li><a ng-click="clickChar('A')">A</a></li>
+                                <li><a ng-click="clickChar('B')">B</a></li>
+                                <li><a ng-click="clickChar('C')">C</a></li>
+                                <li><a ng-click="clickChar('D')">D</a></li>
+                                <li><a ng-click="clickChar('E')">E</a></li>
+                                <li><a ng-click="clickChar('F')">F</a></li>
+                                <li><a ng-click="clickChar('G')">G</a></li>
+                                <li><a ng-click="clickChar('H')">H</a></li>
+                                <li><a ng-click="clickChar('I')">I</a></li>
+                                <li><a ng-click="clickChar('J')">J</a></li>
+                                <li><a ng-click="clickChar('K')">K</a></li>
+                                <li><a ng-click="clickChar('L')">L</a></li>
+                                <li><a ng-click="clickChar('M')">M</a></li>
+                                <li><a ng-click="clickChar('N')">N</a></li>
+                                <li><a ng-click="clickChar('O')">O</a></li>
+                                <li><a ng-click="clickChar('P')">P</a></li>
+                                <li><a ng-click="clickChar('Q')">Q</a></li>
+                                <li><a ng-click="clickChar('R')">R</a></li>
+                                <li><a ng-click="clickChar('S')">S</a></li>
+                                <li><a ng-click="clickChar('T')">T</a></li>
+                                <li><a ng-click="clickChar('U')">U</a></li>
+                                <li><a ng-click="clickChar('V')">V</a></li>
+                                <li><a ng-click="clickChar('W')">W</a></li>
+                                <li><a ng-click="clickChar('X')">X</a></li>
+                                <li><a ng-click="clickChar('Y')">Y</a></li>
+                                <li><a ng-click="clickChar('Z')">Z</a></li>
+                                <li><a ng-click="clickChar('0~9')">0-9</a></li>
+                            </ul>
+                            <table class="table table-condensed" ng-table="brandInfoTableParams">
+                                <tr ng-repeat="value in showList">
+                                    <td ng-repeat="item in value" style="width:33%;padding-left:5px;text-align: left;">
+                                        <label>
+                                            <input type="radio" value="item.id" ng-checked="item.id == brandInfo.id" name="radio-type" ng-click="fitBrandObj(item)">
+                                            <span style="width:110px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;display: inline-block;">{{item.nameEn}}/{{item.nameCn}}</span>
+                                        </label>
+                                    </td>
+                                </tr>
+                            </table>
+                        </div>
+                    </div>
+                </td>
+                <td>{{brandMap.nameStandardEn}}</td>
+                <td>
+                    <button style="width:43px;color:#fff;background: #50b2eb;border:0;margin-right:20px;" ng-click="ensureAdd()">保存</button>
+                    <button style="width:43px;color:#fff;background: #50b2eb;border:0;" ng-click="cancelAdd()">取消</button>
+                </td>
+            </tr >
+
+            <tr class="text-center" ng-repeat="item in $data">
+                <td class="tdcenter">
+                    <div class="ng-binding" ng-bind="$index + 1"></div>
+                </td>
+                <td><span ng-bind="item.enName">深圳市华商龙商务互联科技有限公司</span></td>
+                <td><span ng-bind="convertType[item.type]">代理商</span></td>
+                <td><span ng-bind="item.nameChildCn">133牌子</span></td>
+                <td><span ng-bind="item.nameChildEn">FADFSF</span></td>
+                <td><span ng-bind="item.nameStandardCn">松下</span></td>
+                <td><span ng-bind="item.nameStandardEn">panasonic</span></td>
+                <td><span ng-bind="item.operateName">张三</span></td>
+                <td><span ng-bind="item.operateTime | date : 'yyyy-MM-dd HH:mm:ss'">2017/10/26 15:15:15</span></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+
+</div>