Merge pull request 'develop' (#84) from develop into master
Reviewed-on: http://git.xdadan.loc/tanex/emis-service/pulls/84
This commit is contained in:
commit
3ee759ba81
@ -4113,7 +4113,9 @@ public class EmisBaseService {
|
|||||||
|
|
||||||
// 添加所有子节点到父节点的children列表中
|
// 添加所有子节点到父节点的children列表中
|
||||||
for (EmisTransPlanRule child : children) {
|
for (EmisTransPlanRule child : children) {
|
||||||
if (!parent.getChildren().contains(child)) {
|
String siteCode1 = child.getStartSiteCode() + "," + child.getNextSiteCode();
|
||||||
|
String siteCode2 = parent.getStartSiteCode() + "," + parent.getNextSiteCode();
|
||||||
|
if (!parent.getChildren().contains(child) && !compareSiteCodes(siteCode1, siteCode2)) {
|
||||||
parent.getChildren().add(child);
|
parent.getChildren().add(child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4582,16 +4584,34 @@ public class EmisBaseService {
|
|||||||
private boolean checkBranchMatch(List<EmisTransPlanRule> ruleList, List<EmisTmsSiteBatch> waybillBatches,
|
private boolean checkBranchMatch(List<EmisTransPlanRule> ruleList, List<EmisTmsSiteBatch> waybillBatches,
|
||||||
EmisWaybill waybill, List<EmisTmsSiteBatchMiss> missRecords) {
|
EmisWaybill waybill, List<EmisTmsSiteBatchMiss> missRecords) {
|
||||||
// 根据waybill的startSiteCode或sendSiteCode过滤ruleList
|
// 根据waybill的startSiteCode或sendSiteCode过滤ruleList
|
||||||
|
String sendSiteCode = waybill.getSendSiteCode();
|
||||||
|
String startSiteCode = waybill.getStartSiteCode();
|
||||||
List<EmisTransPlanRule> filteredRuleList;
|
List<EmisTransPlanRule> filteredRuleList;
|
||||||
if (StringUtils.isNotBlank(waybill.getStartSiteCode())) {
|
if ("51000".equals(sendSiteCode) || "51200".equals(sendSiteCode)) {
|
||||||
filteredRuleList = ruleList.stream()
|
filteredRuleList = ruleList.stream()
|
||||||
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), waybill.getStartSiteCode()))
|
.filter(rule -> "51000".equals(rule.getStartSiteCode())
|
||||||
|
|| "51200".equals(rule.getStartSiteCode()))
|
||||||
|
.collect(Collectors.toList()); // 无锡,张家港
|
||||||
|
} else if ("57502".equals(sendSiteCode) || "57501".equals(sendSiteCode) || "57100".equals(sendSiteCode)) {
|
||||||
|
filteredRuleList = ruleList.stream()
|
||||||
|
.filter(rule -> "57502".equals(rule.getStartSiteCode())
|
||||||
|
|| "57501".equals(rule.getStartSiteCode()) || "57100".equals(rule.getStartSiteCode()))
|
||||||
|
.collect(Collectors.toList()); // 柯桥市场部、柯桥分拨中心、杭州
|
||||||
|
} else if ("25001".equals(sendSiteCode) || "25000".equals(sendSiteCode)) {
|
||||||
|
filteredRuleList = ruleList.stream()
|
||||||
|
.filter(rule -> "25001".equals(rule.getStartSiteCode())
|
||||||
|
|| "25000".equals(rule.getStartSiteCode()))
|
||||||
|
.collect(Collectors.toList()); // 南京市场部、南京分拨中心
|
||||||
|
} else if (StringUtils.isNotBlank(startSiteCode)) {
|
||||||
|
filteredRuleList = ruleList.stream()
|
||||||
|
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), startSiteCode))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
} else {
|
} else {
|
||||||
filteredRuleList = ruleList.stream()
|
filteredRuleList = ruleList.stream()
|
||||||
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), waybill.getSendSiteCode()))
|
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), sendSiteCode))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
ruleList = filteredRuleList;
|
ruleList = filteredRuleList;
|
||||||
// 检查当前节点是否匹配
|
// 检查当前节点是否匹配
|
||||||
boolean allNodeMatched = false;
|
boolean allNodeMatched = false;
|
||||||
@ -4646,7 +4666,7 @@ public class EmisBaseService {
|
|||||||
* @param supplierCode2 第二个供应商代码字符串
|
* @param supplierCode2 第二个供应商代码字符串
|
||||||
* @return 如果包含相同的供应商返回true,否则返回false
|
* @return 如果包含相同的供应商返回true,否则返回false
|
||||||
*/
|
*/
|
||||||
private boolean compareSupplierCodes(String supplierCode1, String supplierCode2) {
|
public boolean compareSupplierCodes(String supplierCode1, String supplierCode2) {
|
||||||
if (supplierCode1 == null || supplierCode2 == null) {
|
if (supplierCode1 == null || supplierCode2 == null) {
|
||||||
return supplierCode1 == supplierCode2;
|
return supplierCode1 == supplierCode2;
|
||||||
}
|
}
|
||||||
@ -4659,6 +4679,26 @@ public class EmisBaseService {
|
|||||||
return suppliers1.equals(suppliers2);
|
return suppliers1.equals(suppliers2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比较两个网点代码字符串是否包含相同的网点(忽略顺序)
|
||||||
|
*
|
||||||
|
* @param siteCode1 第一个网点代码字符串
|
||||||
|
* @param siteCode2 第二个网点代码字符串
|
||||||
|
* @return 如果包含相同的网点返回true,否则返回false
|
||||||
|
*/
|
||||||
|
private boolean compareSiteCodes(String siteCode1, String siteCode2) {
|
||||||
|
if (siteCode1 == null || siteCode2 == null) {
|
||||||
|
return siteCode1 == siteCode2;
|
||||||
|
}
|
||||||
|
Set<String> siteCodes1 = Arrays.stream(siteCode1.split(","))
|
||||||
|
.map(String::trim)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
Set<String> siteCodes2 = Arrays.stream(siteCode2.split(","))
|
||||||
|
.map(String::trim)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
return siteCodes1.equals(siteCodes2);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean checkRule(EmisTransPlanRule rule, List<EmisTmsSiteBatch> waybillBatches,
|
private boolean checkRule(EmisTransPlanRule rule, List<EmisTmsSiteBatch> waybillBatches,
|
||||||
List<EmisTransPlanRule> list) {
|
List<EmisTransPlanRule> list) {
|
||||||
// 检查当前节点是否匹配
|
// 检查当前节点是否匹配
|
||||||
|
|||||||
@ -461,14 +461,22 @@ public class EmisTransPlanRuleServiceImpl extends EmisBaseService implements IEm
|
|||||||
List<EmisTransPlanRule> existingRules = checkDuplicateDirectionForUpdate(emisTransPlanRule,
|
List<EmisTransPlanRule> existingRules = checkDuplicateDirectionForUpdate(emisTransPlanRule,
|
||||||
emisTransPlanRule.getStartSiteCode(), emisTransPlanRule.getNextSiteCode());
|
emisTransPlanRule.getStartSiteCode(), emisTransPlanRule.getNextSiteCode());
|
||||||
if (existingRules != null && !existingRules.isEmpty()) {
|
if (existingRules != null && !existingRules.isEmpty()) {
|
||||||
throw new EmisBizError(EmisBizErrorType.EXISTS, "已存在相同的规则配置");
|
EmisTransPlanRule rule = existingRules.get(0);
|
||||||
|
String msg = String.format("已存在相同的规则配置,重复规则信息:线路名称[%s],产品类型[%s],起始网点[%s],下一网点[%s],供应商[%s]",
|
||||||
|
rule.getLineName(), rule.getProductTypeName(), rule.getStartSiteName(), rule.getNextSiteName(),
|
||||||
|
rule.getSupplierName());
|
||||||
|
throw new EmisBizError(EmisBizErrorType.EXISTS, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查反向规则(下一网点到起始网点)
|
// 检查反向规则(下一网点到起始网点)
|
||||||
List<EmisTransPlanRule> existingRules1 = checkDuplicateDirectionForUpdate(emisTransPlanRule,
|
List<EmisTransPlanRule> existingRules1 = checkDuplicateDirectionForUpdate(emisTransPlanRule,
|
||||||
emisTransPlanRule.getNextSiteCode(), emisTransPlanRule.getStartSiteCode());
|
emisTransPlanRule.getNextSiteCode(), emisTransPlanRule.getStartSiteCode());
|
||||||
if (existingRules1 != null && !existingRules1.isEmpty()) {
|
if (existingRules1 != null && !existingRules1.isEmpty()) {
|
||||||
throw new EmisBizError(EmisBizErrorType.EXISTS, "已存在相同的规则配置");
|
EmisTransPlanRule rule = existingRules1.get(0);
|
||||||
|
String msg = String.format("已存在相同的规则配置,重复规则信息:线路名称[%s],产品类型[%s],起始网点[%s],下一网点[%s],供应商[%s]",
|
||||||
|
rule.getLineName(), rule.getProductTypeName(), rule.getStartSiteName(), rule.getNextSiteName(),
|
||||||
|
rule.getSupplierName());
|
||||||
|
throw new EmisBizError(EmisBizErrorType.EXISTS, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -506,11 +514,9 @@ public class EmisTransPlanRuleServiceImpl extends EmisBaseService implements IEm
|
|||||||
for (EmisTransPlanRule existingRule : allRules) {
|
for (EmisTransPlanRule existingRule : allRules) {
|
||||||
// 检查产品类型是否有交集
|
// 检查产品类型是否有交集
|
||||||
boolean productTypeOverlap = hasOverlap(newProductType, existingRule.getProductType());
|
boolean productTypeOverlap = hasOverlap(newProductType, existingRule.getProductType());
|
||||||
// 检查供应商编码是否有交集
|
|
||||||
boolean supplierCodeOverlap = hasOverlap(newSupplierCode, existingRule.getSupplierCode());
|
|
||||||
|
|
||||||
// 如果产品类型和供应商编码都有交集,则认为重复
|
// 如果产品类型有交集且供应商编码相同,则认为重复
|
||||||
if (productTypeOverlap && supplierCodeOverlap) {
|
if (productTypeOverlap && compareSupplierCodes(newSupplierCode, existingRule.getSupplierCode())) {
|
||||||
return Arrays.asList(existingRule);
|
return Arrays.asList(existingRule);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -181,8 +181,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="checkDuplicate" parameterType="EmisTransPlanRule" resultMap="EmisTransPlanRuleResult">
|
<select id="checkDuplicate" parameterType="EmisTransPlanRule" resultMap="EmisTransPlanRuleResult">
|
||||||
select r.*
|
select r.id, r.line_code, r.product_type, r.start_site_code,
|
||||||
|
s1.site_name as start_site_name, r.next_site_code, s2.site_name as next_site_name,
|
||||||
|
r.manager, r.supplier_code, r.start_date, r.end_date,
|
||||||
|
l.line_name,l.trans_manager,
|
||||||
|
(SELECT GROUP_CONCAT(s.name ORDER BY FIND_IN_SET(s.code, r.supplier_code))
|
||||||
|
FROM emis_supplier s
|
||||||
|
WHERE FIND_IN_SET(s.code, r.supplier_code)
|
||||||
|
AND s.del_flag = '0') as supplier_name,
|
||||||
|
(SELECT GROUP_CONCAT(p.prod_name ORDER BY FIND_IN_SET(p.prod_code, r.product_type))
|
||||||
|
FROM emis_trans_product p
|
||||||
|
WHERE FIND_IN_SET(p.prod_code, r.product_type)
|
||||||
|
AND p.del_flag = '0') as product_type_name
|
||||||
from emis_trans_plan_rule r
|
from emis_trans_plan_rule r
|
||||||
|
left join emis_site s1 on r.start_site_code = s1.site_code and s1.del_flag='0'
|
||||||
|
left join emis_site s2 on r.next_site_code = s2.site_code and s2.del_flag='0'
|
||||||
|
left join emis_trans_line l on r.line_code = l.line_code and l.del_flag='0'
|
||||||
<where>
|
<where>
|
||||||
r.del_flag = '0'
|
r.del_flag = '0'
|
||||||
<if test="lineCode != null and lineCode != ''">and r.line_code = #{lineCode}</if>
|
<if test="lineCode != null and lineCode != ''">and r.line_code = #{lineCode}</if>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user