Commit 7137c661dfbf05bea509a13d728262ea4761e191
1 parent
aae583d0
update:地址增加
Showing
8 changed files
with
529 additions
and
0 deletions
etrade-order/src/main/java/com/diligrp/etrade/order/api/OrderContactPersonController.java
... | ... | @@ -5,8 +5,11 @@ import cn.hutool.core.lang.Assert; |
5 | 5 | import com.diligrp.etrade.core.domain.Message; |
6 | 6 | import com.diligrp.etrade.core.domain.PageMessage; |
7 | 7 | import com.diligrp.etrade.core.util.NameUtil; |
8 | +import com.diligrp.etrade.order.domain.contactPerson.BaseRegionCo; | |
9 | +import com.diligrp.etrade.order.domain.contactPerson.BaseRegionNextVo; | |
8 | 10 | import com.diligrp.etrade.order.domain.contactPerson.OrderContactPersonCo; |
9 | 11 | import com.diligrp.etrade.order.domain.contactPerson.OrderContactPersonListCo; |
12 | +import com.diligrp.etrade.order.service.BaseRegionService; | |
10 | 13 | import com.diligrp.etrade.order.service.OrderContactPersonService; |
11 | 14 | import jakarta.annotation.Resource; |
12 | 15 | import org.slf4j.Logger; |
... | ... | @@ -14,6 +17,8 @@ import org.slf4j.LoggerFactory; |
14 | 17 | import org.springframework.validation.annotation.Validated; |
15 | 18 | import org.springframework.web.bind.annotation.*; |
16 | 19 | |
20 | +import java.util.List; | |
21 | + | |
17 | 22 | /** |
18 | 23 | * 订单配送地址 |
19 | 24 | * @author fengliang |
... | ... | @@ -25,6 +30,10 @@ public class OrderContactPersonController { |
25 | 30 | private static final Logger log = LoggerFactory.getLogger(OrderContactPersonController.class); |
26 | 31 | @Resource |
27 | 32 | OrderContactPersonService orderContactPersonService; |
33 | + | |
34 | + @Resource | |
35 | + BaseRegionService baseRegionService; | |
36 | + | |
28 | 37 | @GetMapping("/test") |
29 | 38 | public Message<String> test() { |
30 | 39 | return Message.success("test"); |
... | ... | @@ -72,5 +81,11 @@ public class OrderContactPersonController { |
72 | 81 | log.info("联系人列表查询 param={}", co); |
73 | 82 | return orderContactPersonService.page(co); |
74 | 83 | } |
84 | + | |
85 | + @PostMapping(value = "/baseRegion") | |
86 | + public Message<List<BaseRegionNextVo>> setDefault(@RequestBody BaseRegionCo co) { | |
87 | + List<BaseRegionNextVo> baseRegionNextVoList = baseRegionService.getNextList(co); | |
88 | + return Message.success(baseRegionNextVoList); | |
89 | + } | |
75 | 90 | } |
76 | 91 | ... | ... |
etrade-order/src/main/java/com/diligrp/etrade/order/dao/BaseRegionMapper.java
0 → 100644
1 | +package com.diligrp.etrade.order.dao; | |
2 | + | |
3 | + | |
4 | +import com.diligrp.etrade.core.mybatis.MybatisMapperSupport; | |
5 | +import com.diligrp.etrade.order.domain.contactPerson.BaseRegionCo; | |
6 | +import com.diligrp.etrade.order.model.BaseRegion; | |
7 | + | |
8 | +import java.util.List; | |
9 | + | |
10 | +/** | |
11 | + * <p> | |
12 | + * Mapper 接口 | |
13 | + * </p> | |
14 | + * | |
15 | + * @author chenzhiwei | |
16 | + * @since 2023-12-27 | |
17 | + */ | |
18 | +public interface BaseRegionMapper extends MybatisMapperSupport { | |
19 | + | |
20 | + List<BaseRegion> selectNextList(BaseRegionCo co); | |
21 | +} | ... | ... |
etrade-order/src/main/java/com/diligrp/etrade/order/domain/contactPerson/BaseRegionCo.java
0 → 100644
1 | +package com.diligrp.etrade.order.domain.contactPerson; | |
2 | + | |
3 | +public class BaseRegionCo { | |
4 | + /** | |
5 | + * 市场id | |
6 | + */ | |
7 | + private Long marketId; | |
8 | + | |
9 | + /** | |
10 | + * 省份id | |
11 | + */ | |
12 | + private Long provinceId; | |
13 | + /** | |
14 | + * 城市id | |
15 | + */ | |
16 | + private Long cityId; | |
17 | + /** | |
18 | + * 区县id | |
19 | + */ | |
20 | + private Long districtId; | |
21 | + /** | |
22 | + * 街道id | |
23 | + */ | |
24 | + private Long streetId; | |
25 | + /** | |
26 | + * 市场id | |
27 | + */ | |
28 | + private Integer state = 1; | |
29 | + | |
30 | + public Long getMarketId() { | |
31 | + return marketId; | |
32 | + } | |
33 | + | |
34 | + public void setMarketId(Long marketId) { | |
35 | + this.marketId = marketId; | |
36 | + } | |
37 | + | |
38 | + public Long getProvinceId() { | |
39 | + return provinceId; | |
40 | + } | |
41 | + | |
42 | + public void setProvinceId(Long provinceId) { | |
43 | + this.provinceId = provinceId; | |
44 | + } | |
45 | + | |
46 | + public Long getCityId() { | |
47 | + return cityId; | |
48 | + } | |
49 | + | |
50 | + public void setCityId(Long cityId) { | |
51 | + this.cityId = cityId; | |
52 | + } | |
53 | + | |
54 | + public Long getDistrictId() { | |
55 | + return districtId; | |
56 | + } | |
57 | + | |
58 | + public void setDistrictId(Long districtId) { | |
59 | + this.districtId = districtId; | |
60 | + } | |
61 | + | |
62 | + public Long getStreetId() { | |
63 | + return streetId; | |
64 | + } | |
65 | + | |
66 | + public void setStreetId(Long streetId) { | |
67 | + this.streetId = streetId; | |
68 | + } | |
69 | + | |
70 | + public Integer getState() { | |
71 | + return state; | |
72 | + } | |
73 | + | |
74 | + public void setState(Integer state) { | |
75 | + this.state = state; | |
76 | + } | |
77 | +} | ... | ... |
etrade-order/src/main/java/com/diligrp/etrade/order/domain/contactPerson/BaseRegionNextVo.java
0 → 100644
1 | +package com.diligrp.etrade.order.domain.contactPerson; | |
2 | + | |
3 | +import java.util.List; | |
4 | + | |
5 | +public class BaseRegionNextVo { | |
6 | + /** | |
7 | + * 名称 | |
8 | + */ | |
9 | + private String name; | |
10 | + /** | |
11 | + * id | |
12 | + */ | |
13 | + private Long id; | |
14 | + /** | |
15 | + * 级别,省 1,市 2,区县 3,街道 4 | |
16 | + */ | |
17 | + private Integer leavel; | |
18 | + /** | |
19 | + * 下级区域 | |
20 | + */ | |
21 | + private List<BaseRegionNextVo> children; | |
22 | + public String getName() { | |
23 | + return name; | |
24 | + } | |
25 | + | |
26 | + public void setName(String name) { | |
27 | + this.name = name; | |
28 | + } | |
29 | + | |
30 | + public Long getId() { | |
31 | + return id; | |
32 | + } | |
33 | + | |
34 | + public void setId(Long id) { | |
35 | + this.id = id; | |
36 | + } | |
37 | + | |
38 | + public Integer getLeavel() { | |
39 | + return leavel; | |
40 | + } | |
41 | + | |
42 | + public void setLeavel(Integer leavel) { | |
43 | + this.leavel = leavel; | |
44 | + } | |
45 | + | |
46 | + public List<BaseRegionNextVo> getChildren() { | |
47 | + return children; | |
48 | + } | |
49 | + | |
50 | + public void setChildren(List<BaseRegionNextVo> children) { | |
51 | + this.children = children; | |
52 | + } | |
53 | + | |
54 | + public BaseRegionNextVo(){ | |
55 | + | |
56 | + } | |
57 | + public BaseRegionNextVo(Long id,String name,Integer leavel){ | |
58 | + this.id = id; | |
59 | + this.name = name; | |
60 | + this.leavel = leavel; | |
61 | + } | |
62 | +} | ... | ... |
etrade-order/src/main/java/com/diligrp/etrade/order/model/BaseRegion.java
0 → 100644
1 | +package com.diligrp.etrade.order.model; | |
2 | + | |
3 | +import com.diligrp.etrade.core.domain.BaseDo; | |
4 | + | |
5 | +import java.io.Serializable; | |
6 | +import java.time.LocalDateTime; | |
7 | + | |
8 | +public class BaseRegion extends BaseDo implements Serializable { | |
9 | + | |
10 | + /** | |
11 | + * 主键 | |
12 | + */ | |
13 | + private Long id; | |
14 | + /** | |
15 | + * 市场id | |
16 | + */ | |
17 | + private Long marketId; | |
18 | + /** | |
19 | + * 省份id | |
20 | + */ | |
21 | + private Long provinceId; | |
22 | + /** | |
23 | + * 城市id | |
24 | + */ | |
25 | + private Long cityId; | |
26 | + | |
27 | + /** | |
28 | + * 区id | |
29 | + */ | |
30 | + private Long districtId; | |
31 | + | |
32 | + /** | |
33 | + * 街道id | |
34 | + */ | |
35 | + private Long streetId; | |
36 | + | |
37 | + /** | |
38 | + * 省份名称 | |
39 | + */ | |
40 | + private String provinceName; | |
41 | + | |
42 | + /** | |
43 | + * 城市名称 | |
44 | + */ | |
45 | + private String cityName; | |
46 | + /** | |
47 | + * 区县名称 | |
48 | + */ | |
49 | + private String districtName; | |
50 | + /** | |
51 | + * 街道名称 | |
52 | + */ | |
53 | + private String streetName; | |
54 | + | |
55 | + /** | |
56 | + * 状态 | |
57 | + */ | |
58 | + private Integer state; | |
59 | + | |
60 | + @Override | |
61 | + public Long getId() { | |
62 | + return id; | |
63 | + } | |
64 | + | |
65 | + @Override | |
66 | + public void setId(Long id) { | |
67 | + this.id = id; | |
68 | + } | |
69 | + | |
70 | + public Long getMarketId() { | |
71 | + return marketId; | |
72 | + } | |
73 | + | |
74 | + public void setMarketId(Long marketId) { | |
75 | + this.marketId = marketId; | |
76 | + } | |
77 | + | |
78 | + public Long getProvinceId() { | |
79 | + return provinceId; | |
80 | + } | |
81 | + | |
82 | + public void setProvinceId(Long provinceId) { | |
83 | + this.provinceId = provinceId; | |
84 | + } | |
85 | + | |
86 | + public Long getCityId() { | |
87 | + return cityId; | |
88 | + } | |
89 | + | |
90 | + public void setCityId(Long cityId) { | |
91 | + this.cityId = cityId; | |
92 | + } | |
93 | + | |
94 | + public Long getDistrictId() { | |
95 | + return districtId; | |
96 | + } | |
97 | + | |
98 | + public void setDistrictId(Long districtId) { | |
99 | + this.districtId = districtId; | |
100 | + } | |
101 | + | |
102 | + public Long getStreetId() { | |
103 | + return streetId; | |
104 | + } | |
105 | + | |
106 | + public void setStreetId(Long streetId) { | |
107 | + this.streetId = streetId; | |
108 | + } | |
109 | + | |
110 | + public String getProvinceName() { | |
111 | + return provinceName; | |
112 | + } | |
113 | + | |
114 | + public void setProvinceName(String provinceName) { | |
115 | + this.provinceName = provinceName; | |
116 | + } | |
117 | + | |
118 | + public String getCityName() { | |
119 | + return cityName; | |
120 | + } | |
121 | + | |
122 | + public void setCityName(String cityName) { | |
123 | + this.cityName = cityName; | |
124 | + } | |
125 | + | |
126 | + public String getDistrictName() { | |
127 | + return districtName; | |
128 | + } | |
129 | + | |
130 | + public void setDistrictName(String districtName) { | |
131 | + this.districtName = districtName; | |
132 | + } | |
133 | + | |
134 | + public String getStreetName() { | |
135 | + return streetName; | |
136 | + } | |
137 | + | |
138 | + public void setStreetName(String streetName) { | |
139 | + this.streetName = streetName; | |
140 | + } | |
141 | + | |
142 | + @Override | |
143 | + public LocalDateTime getCreatedTime() { | |
144 | + return createdTime; | |
145 | + } | |
146 | + | |
147 | + @Override | |
148 | + public void setCreatedTime(LocalDateTime createdTime) { | |
149 | + this.createdTime = createdTime; | |
150 | + } | |
151 | + | |
152 | + @Override | |
153 | + public LocalDateTime getModifiedTime() { | |
154 | + return modifiedTime; | |
155 | + } | |
156 | + | |
157 | + @Override | |
158 | + public void setModifiedTime(LocalDateTime modifiedTime) { | |
159 | + this.modifiedTime = modifiedTime; | |
160 | + } | |
161 | + | |
162 | + public Integer getState() { | |
163 | + return state; | |
164 | + } | |
165 | + | |
166 | + public void setState(Integer state) { | |
167 | + this.state = state; | |
168 | + } | |
169 | +} | ... | ... |
etrade-order/src/main/java/com/diligrp/etrade/order/service/BaseRegionService.java
0 → 100644
1 | +package com.diligrp.etrade.order.service; | |
2 | + | |
3 | +import com.diligrp.etrade.order.domain.contactPerson.*; | |
4 | + | |
5 | +import java.util.List; | |
6 | + | |
7 | +/** | |
8 | + * <p> | |
9 | + * 服务类 | |
10 | + * </p> | |
11 | + * | |
12 | + * @author chenzhiwei | |
13 | + * @since 2023-12-27 | |
14 | + */ | |
15 | +public interface BaseRegionService { | |
16 | + List<BaseRegionNextVo> getNextList(BaseRegionCo co); | |
17 | +} | ... | ... |
etrade-order/src/main/java/com/diligrp/etrade/order/service/impl/BaseRegionServiceImpl.java
0 → 100644
1 | +package com.diligrp.etrade.order.service.impl; | |
2 | + | |
3 | +import com.diligrp.etrade.core.domain.Message; | |
4 | +import com.diligrp.etrade.core.domain.PageMessage; | |
5 | +import com.diligrp.etrade.core.util.JsonUtils; | |
6 | +import com.diligrp.etrade.order.dao.BaseRegionMapper; | |
7 | +import com.diligrp.etrade.order.dao.OrderContactPersonMapper; | |
8 | +import com.diligrp.etrade.order.domain.contactPerson.*; | |
9 | +import com.diligrp.etrade.order.exception.OrderErrorCode; | |
10 | +import com.diligrp.etrade.order.exception.OrderException; | |
11 | +import com.diligrp.etrade.order.model.BaseRegion; | |
12 | +import com.diligrp.etrade.order.model.OrderContactPerson; | |
13 | +import com.diligrp.etrade.order.service.BaseRegionService; | |
14 | +import com.diligrp.etrade.order.service.OrderContactPersonService; | |
15 | +import com.diligrp.etrade.order.type.OrderContactDefaultType; | |
16 | +import com.github.pagehelper.Page; | |
17 | +import com.github.pagehelper.PageHelper; | |
18 | +import jakarta.annotation.Resource; | |
19 | +import org.apache.commons.lang3.ObjectUtils; | |
20 | +import org.slf4j.Logger; | |
21 | +import org.slf4j.LoggerFactory; | |
22 | +import org.springframework.stereotype.Service; | |
23 | + | |
24 | +import java.util.ArrayList; | |
25 | +import java.util.HashMap; | |
26 | +import java.util.List; | |
27 | +import java.util.Map; | |
28 | + | |
29 | +/** | |
30 | + * <p> | |
31 | + * 服务实现类 | |
32 | + * </p> | |
33 | + * | |
34 | + * @author chenzhiwei | |
35 | + * @since 2023-12-27 | |
36 | + */ | |
37 | +@Service | |
38 | +public class BaseRegionServiceImpl implements BaseRegionService { | |
39 | + private final static Logger logger = LoggerFactory.getLogger(BaseRegionServiceImpl.class); | |
40 | + @Resource | |
41 | + private BaseRegionMapper baseRegionMapper; | |
42 | + | |
43 | + | |
44 | + @Override | |
45 | + public List<BaseRegionNextVo> getNextList(BaseRegionCo co) { | |
46 | + if(co.getMarketId() == null){ | |
47 | + throw new OrderException(OrderErrorCode.PARAM_ERROR, "市场不能为空"); | |
48 | + } | |
49 | + List<BaseRegion> baseRegions = baseRegionMapper.selectNextList(co); | |
50 | + if (ObjectUtils.isEmpty(baseRegions)){ | |
51 | + return new ArrayList<>(); | |
52 | + } | |
53 | + Map<Long, BaseRegionNextVo> citiesMap = new HashMap<>(); | |
54 | + Map<Long, BaseRegionNextVo> districtsMap = new HashMap<>(); | |
55 | + List<BaseRegionNextVo> streetList = new ArrayList<>(); | |
56 | + List<BaseRegionNextVo> provinces = new ArrayList<>(); | |
57 | + BaseRegionNextVo baseDistrict = null; | |
58 | + BaseRegionNextVo baseCity = null; | |
59 | + BaseRegionNextVo baseProvince = null; | |
60 | + | |
61 | + BaseRegion lastBaseRegion = null; | |
62 | + for(BaseRegion baseRegion:baseRegions){ | |
63 | + if(lastBaseRegion!=null&&!lastBaseRegion.getDistrictId().equals(baseRegion.getDistrictId())){ | |
64 | + baseDistrict = new BaseRegionNextVo(lastBaseRegion.getDistrictId(), lastBaseRegion.getDistrictName(),3); | |
65 | + baseDistrict.setChildren(streetList); | |
66 | + streetList = new ArrayList<>(); | |
67 | + if(lastBaseRegion!=null && !lastBaseRegion.getCityId().equals(baseRegion.getCityId())){ | |
68 | + baseCity = new BaseRegionNextVo(lastBaseRegion.getCityId(), lastBaseRegion.getCityName(),2); | |
69 | + baseCity.setChildren(new ArrayList<>(districtsMap.values())); | |
70 | + districtsMap = new HashMap<>(); | |
71 | + if(lastBaseRegion!=null && !lastBaseRegion.getProvinceId().equals(baseRegion.getProvinceId())){ | |
72 | + baseProvince = new BaseRegionNextVo(lastBaseRegion.getProvinceId(), lastBaseRegion.getProvinceName(),1); | |
73 | + baseProvince.setChildren(new ArrayList<>(citiesMap.values())); | |
74 | + citiesMap = new HashMap<>(); | |
75 | + provinces.add(baseProvince); | |
76 | + } | |
77 | + BaseRegionNextVo city = new BaseRegionNextVo(baseRegion.getCityId(), baseRegion.getCityName(),2); | |
78 | + citiesMap.put(baseRegion.getCityId(),city); | |
79 | + }/*else{ | |
80 | + if(citiesMap.get(baseRegion.getCityId())==null){ | |
81 | + BaseRegionNextVo city = new BaseRegionNextVo(baseRegion.getCityId(), baseRegion.getCityName(),2); | |
82 | + citiesMap.put(baseRegion.getCityId(),city); | |
83 | + } | |
84 | + }*/ | |
85 | + BaseRegionNextVo district = new BaseRegionNextVo(baseRegion.getDistrictId(), baseRegion.getDistrictName(),3); | |
86 | + districtsMap.put(district.getId(),district); | |
87 | + }/*else{ | |
88 | + if(districtsMap.get(baseRegion.getDistrictId())==null){ | |
89 | + BaseRegionNextVo district = new BaseRegionNextVo(baseRegion.getDistrictId(), baseRegion.getDistrictName(),3); | |
90 | + districtsMap.put(baseRegion.getDistrictId(),district); | |
91 | + } | |
92 | + | |
93 | + }*/ | |
94 | + BaseRegionNextVo street = new BaseRegionNextVo(lastBaseRegion.getStreetId(), lastBaseRegion.getStreetName(),4); | |
95 | + streetList.add(street); | |
96 | + lastBaseRegion = baseRegion; | |
97 | + } | |
98 | + if(baseDistrict!=null){ | |
99 | + baseDistrict.setChildren(streetList); | |
100 | + | |
101 | + }else{ | |
102 | + baseDistrict = new BaseRegionNextVo(lastBaseRegion.getDistrictId(), lastBaseRegion.getDistrictName(),3); | |
103 | + baseDistrict.setChildren(streetList); | |
104 | + } | |
105 | + districtsMap.put(baseDistrict.getId(),baseDistrict); | |
106 | + if(baseCity!=null){ | |
107 | + baseCity.setChildren(new ArrayList<>(districtsMap.values())); | |
108 | + }else{ | |
109 | + baseCity = new BaseRegionNextVo(lastBaseRegion.getCityId(), lastBaseRegion.getCityName(),2); | |
110 | + baseCity.setChildren(new ArrayList<>(districtsMap.values())); | |
111 | + } | |
112 | + citiesMap.put(baseCity.getId(),baseCity); | |
113 | + if(baseProvince!=null){ | |
114 | + baseProvince.setChildren(new ArrayList<>(citiesMap.values())); | |
115 | + }else{ | |
116 | + baseProvince = new BaseRegionNextVo(lastBaseRegion.getProvinceId(), lastBaseRegion.getProvinceName(),1); | |
117 | + baseProvince.setChildren(new ArrayList<>(citiesMap.values())); | |
118 | + } | |
119 | + provinces.add(baseProvince); | |
120 | + | |
121 | + return provinces; | |
122 | + } | |
123 | +} | ... | ... |
etrade-order/src/main/resources/com/diligrp/etrade/dao/mapper/order/BaseRegionMapper.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
3 | +<mapper namespace="com.diligrp.etrade.order.dao.BaseRegionMapper"> | |
4 | + <resultMap id="BaseResultMap" type="com.diligrp.etrade.order.model.BaseRegion"> | |
5 | + <id column="id" jdbcType="BIGINT" property="id" /> | |
6 | + <result column="market_id" jdbcType="BIGINT" property="marketId" /> | |
7 | + <result column="state" jdbcType="TINYINT" property="state" /> | |
8 | + <result column="province_id" jdbcType="BIGINT" property="provinceId" /> | |
9 | + <result column="province_name" jdbcType="VARCHAR" property="provinceName" /> | |
10 | + <result column="city_id" jdbcType="BIGINT" property="cityId" /> | |
11 | + <result column="city_name" jdbcType="VARCHAR" property="cityName" /> | |
12 | + <result column="district_id" jdbcType="BIGINT" property="districtId" /> | |
13 | + <result column="district_name" jdbcType="VARCHAR" property="districtName" /> | |
14 | + <result column="street_id" jdbcType="BIGINT" property="streetId" /> | |
15 | + <result column="street_name" jdbcType="VARCHAR" property="streetName" /> | |
16 | + <result column="created_time" jdbcType="TIMESTAMP" property="createdTime" /> | |
17 | + <result column="modified_time" jdbcType="TIMESTAMP" property="modifiedTime" /> | |
18 | + <result column="version" jdbcType="INTEGER" property="version" /> | |
19 | + </resultMap> | |
20 | + <sql id="Base_Column_List" > | |
21 | + id, market_id, state, province_id, province_name, city_id, city_name, district_id, | |
22 | + district_name, street_id, street_name, created_time, modified_time, version | |
23 | + </sql> | |
24 | + <select id="selectNextList" parameterType="com.diligrp.etrade.order.domain.contactPerson.BaseRegionCo" resultMap="BaseResultMap"> | |
25 | + select | |
26 | + <include refid="Base_Column_List" /> | |
27 | + from base_region | |
28 | + <where> 1=1 | |
29 | + <if test="provinceId != null"> | |
30 | + and province_id = #{provinceId,jdbcType=BIGINT} | |
31 | + </if> | |
32 | + <if test="cityId != null"> | |
33 | + and city_id = #{cityId,jdbcType=BIGINT} | |
34 | + </if> | |
35 | + <if test="districtId != null"> | |
36 | + and district_id= #{districtId,jdbcType=BIGINT} | |
37 | + </if> | |
38 | + <if test="streetId != null"> | |
39 | + and street_id= #{streetId,jdbcType=BIGINT} | |
40 | + </if> | |
41 | + and state = 1 | |
42 | + </where> | |
43 | + order by province_id,city_id,district_id,street_id | |
44 | + </select> | |
45 | +</mapper> | |
0 | 46 | \ No newline at end of file | ... | ... |