Przeglądaj źródła

新增配送规则中匹配地区的方法

hulh 8 lat temu
rodzic
commit
67867e4606

+ 2 - 2
src/main/java/com/uas/platform/b2c/logistics/controller/DistributionRuleController.java

@@ -81,8 +81,8 @@ public class DistributionRuleController {
 	 * @return
 	 */
 	@RequestMapping(value = "/checkName", method = RequestMethod.GET)
-	public ResultMap checkRuleName(@RequestParam(required = false) Long id, String ruleName, Boolean newSave){
-		System.out.println("id=" + id + "=ruleName=" + "newSave");
+	public ResultMap checkRuleName(@RequestParam(value = "id", required = false) Long id, @RequestParam(value = "ruleName") String ruleName, @RequestParam(value = "newSave") Boolean newSave){
+		System.out.println("id=" + id + "=ruleName=" + ruleName + "newSave" + newSave);
 		return distributionRuleService.containsName(id, ruleName, newSave);
 	}
 }

+ 14 - 0
src/main/java/com/uas/platform/b2c/logistics/dao/DistributionRuleDao.java

@@ -49,6 +49,20 @@ public interface DistributionRuleDao extends JpaSpecificationExecutor<Distributi
 	@Query(value = "select d.ruleName from DistributionRule d where d.enuu = :enuu")
 	List<String> findAllRuleNameByEnuu(@Param("enuu") Long enuu);
 
+	/**
+	 * 根据enuu和ruleName查找记录数
+	 * @param enuu
+	 * @param ruleName
+	 * @return
+	 */
 	@Query(value = "select count(1) from DistributionRule d where d.enuu = :enuu and d.ruleName = :ruleName")
 	int findCountRuleName(@Param("enuu") Long enuu, @Param("ruleName") String ruleName);
+
+	/**
+	 * 根据配送方式和enuu获取配送规则列表
+	 * @param enuu
+	 * @param shippingMethod
+	 * @return
+	 */
+	List<DistributionRule> findByEnuuAndShippingMethod(Long enuu, Integer shippingMethod);
 }

+ 2 - 2
src/main/java/com/uas/platform/b2c/logistics/model/RuleQtyFare.java

@@ -6,11 +6,11 @@ package com.uas.platform.b2c.logistics.model;
  */
 public class RuleQtyFare {
 	/**
-	 * 分段开始
+	 * 分段开始  --包括开始
 	 */
 	private Double start;
 	/**
-	 * 分段结束
+	 * 分段结束  --不包括结束
 	 */
 	private Double end;
 	/**

+ 9 - 0
src/main/java/com/uas/platform/b2c/logistics/service/DistributionRuleService.java

@@ -47,5 +47,14 @@ public interface DistributionRuleService {
 	 */
 	ResultMap findCountRule();
 
+	/**
+	 * 查找是否已存在该名称
+	 * @param id
+	 * @param ruleName
+	 * @param newSave
+	 * @return
+	 */
 	ResultMap containsName(Long id, String ruleName, Boolean newSave);
+
+	List<DistributionRule> ruleMatchArea(Integer method, String area);
 }

+ 94 - 0
src/main/java/com/uas/platform/b2c/logistics/service/impl/DistributionRuleServiceImpl.java

@@ -1,8 +1,10 @@
 package com.uas.platform.b2c.logistics.service.impl;
 
+import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.logistics.dao.DistributionRuleDao;
 import com.uas.platform.b2c.logistics.model.DistributionRule;
+import com.uas.platform.b2c.logistics.model.RuleQtyArea;
 import com.uas.platform.b2c.logistics.service.DistributionRuleService;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
@@ -16,7 +18,10 @@ 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.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by hulh on 2017/8/28.
@@ -192,4 +197,93 @@ public class DistributionRuleServiceImpl implements DistributionRuleService{
 		}
 		return ResultMap.success(repeat);
 	}
+
+	@Override
+	public List<DistributionRule> ruleMatchArea(Integer method, String area) {
+		Long enuu = SystemSession.getUser().getEnterprise().getUu();
+		List<DistributionRule> resultList = new ArrayList<>();
+		// 根据配送方式找出所有的配送规则
+		List<DistributionRule> methodList = distributionRuleDao.findByEnuuAndShippingMethod(enuu, method);
+
+		for (DistributionRule rule : methodList){
+			List<RuleQtyArea> qtyArea = rule.getAreas();
+			Map<String, Map<String, List<String>>> resultMap = convertArea(qtyArea);
+			boolean isContains = containsArea(resultMap, area);
+			if (isContains){
+				resultList.add(rule);
+			}
+		}
+		return resultList;
+	}
+
+	/**
+	 * 根据分段地区集合转化为可用的Map集合
+	 *
+	 * @param qtyArea 分段地区集合
+	 * @return
+	 */
+	public Map<String, Map<String, List<String>>> convertArea(List<RuleQtyArea> qtyArea){
+		Map<String, Map<String, List<String>>> areaMap = new HashMap<>();
+
+		for (RuleQtyArea a : qtyArea){
+			if (a.getProvince() != null && a.getProvince().length() != 0){
+				//判断该RuleQtyArea是否包含省字段
+				Map<String, List<String>> cityMap = null;
+				if (!areaMap.containsKey(a.getProvince())){
+					cityMap = new HashMap<>();
+					areaMap.put(a.getProvince(), cityMap);
+				}
+				cityMap = areaMap.get(a.getProvince());
+				if (a.getCity() != null && a.getCity().length() != 0){
+					//判断该RuleQtyArea是否包含市字段
+					List<String> areaList = null;
+					if (!cityMap.containsKey(a.getCity())){
+						areaList = new ArrayList<>();
+						cityMap.put(a.getCity(), areaList);
+					}
+					areaList = cityMap.get(a.getCity());
+					if (a.getArea() != null && a.getArea().length() != 0){
+						if (!areaList.contains(a.getArea())){
+							areaList.add(a.getArea());
+						}
+					}
+				}
+			}
+		}
+		return areaMap;
+	}
+
+	/**
+	 * 是否匹配该地区
+	 *
+	 * @param resultMap 转化的地区map集合
+	 * @param area 要匹配的地区
+	 * @return
+	 */
+	public boolean containsArea(Map<String, Map<String, List<String>>> resultMap, String area){
+		String[] areaArray = area.split(SplitChar.COMMA); //拆分地区数据,获取省,市,区的数组
+		if (resultMap.containsKey(areaArray[0])){ //是否包含该省
+			Map<String, List<String>> cityMap = resultMap.get(areaArray[0]);
+			if (cityMap.isEmpty()){ //没有市数据
+				return true;
+			}else {
+				if (cityMap.containsKey(areaArray[1])){ //是否包含该市
+					List<String> areaList = cityMap.get(areaArray[1]);
+					if (areaList.isEmpty()){ //没有区数据
+						return true;
+					}else {
+						if (areaList.contains(areaArray[2])){
+							return true;
+						}else {
+							return false;
+						}
+					}
+				}else {
+					return false;
+				}
+			}
+		}else {
+			return false;
+		}
+	}
 }