1.數(shù)據(jù)
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for channel
-- ----------------------------
DROP TABLE IF EXISTS `channel`;
CREATE TABLE `channel` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`channel_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '渠道的名稱',
`parent_id` int(11) NULL DEFAULT NULL COMMENT '父類id',
`salesman_id` int(11) NULL DEFAULT NULL COMMENT '業(yè)務(wù)員id',
`area` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '區(qū)域',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '渠道表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of channel
-- ----------------------------
INSERT INTO `channel` VALUES (1, '科達', 0, 1, NULL);
INSERT INTO `channel` VALUES (2, '科利達', 1, 1, NULL);
INSERT INTO `channel` VALUES (3, '科達利', 1, 1, NULL);
INSERT INTO `channel` VALUES (4, '利達科', 2, 2, NULL);
INSERT INTO `channel` VALUES (5, '利科達', 2, 2, NULL);
INSERT INTO `channel` VALUES (6, '達利科', 3, 1, NULL);
INSERT INTO `channel` VALUES (7, '達科利', 3, 2, NULL);
SET FOREIGN_KEY_CHECKS = 1;
2.實體類的創(chuàng)建潜必。get和set方法深略
public class Cannel {
private Integer id;
private String channelName;
private Integer parentId;
private Integer salesmanId;
private String area;
private List<Cannel> childCannel;
3.mapper.xml的編寫
<mapper namespace="com.kldhq.weight.mapper.kdweight.CannelMapper">
<resultMap type="com.kldhq.weight.entity.Cannel"
id="CannelEntityMap">
<id column="id" property="id" />
<result column="channel_name" property="channelName" />
<result column="parent_id" property="parentId" />
<result column="salesman_id" property="salesmanId" />
<result column="area" property="area" />
</resultMap>
<!-- 查詢所有的列表亏较。用來生成樹狀圖結(jié)構(gòu)數(shù)據(jù) -->
<select id="findAll" resultMap="CannelEntityMap">
SELECT
*
FROM
channel
</select>
</mapper>
4.impl方法的編寫担败。其他的control和接口類就不寫了
@Override
public List<Cannel> findAll(Integer uid) {
//權(quán)限校驗
Integer stationUid = ValidUtils.AdminStation(uid);
List<Cannel> CannelList = new ArrayList<Cannel>();
//station返回2贯要,說明有權(quán)限支鸡,0沒有權(quán)限
if(stationUid==2) {
List<Cannel> findAll = mapper.findAll();
for (Cannel cannel : findAll) {
//判斷是否是根節(jié)點冬念。為0是跟節(jié)點
if(cannel.getParentId()==0) {
CannelList.add(cannel);
}
}
//遍歷找到二級節(jié)點
for (Cannel cannel : CannelList) {
List<Cannel> child = getChild(cannel.getId(),findAll);
cannel.setChildCannel(child);
}
}
return CannelList;
}
private List<Cannel> getChild(Integer id, List<Cannel> findAll) {
//子菜單列表
List<Cannel> childList = new ArrayList<>();
for (Cannel cannel : findAll) {
if(id.equals(cannel.getParentId())) {
childList.add(cannel);
}
}
//遍歷 獲取子菜單的子菜單
for (Cannel cannel : childList) {
List<Cannel> child = getChild(cannel.getId(),findAll);
cannel.setChildCannel(child);
}
//遞歸出口 childList長度為0
if (childList.size() == 0) {
return new ArrayList<>();
}
return childList;
}