瀏覽代碼

乐团档案

zouxuan 4 年之前
父節點
當前提交
a14c069f01

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPerformanceDao.java

@@ -2,8 +2,18 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.MusicGroupPerformance;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 public interface MusicGroupPerformanceDao extends BaseDAO<Integer, MusicGroupPerformance> {
 
-	
+
+    List<MusicGroupPerformance> findNoStart(@Param("educationUserId") Integer educationUserId,
+                                            @Param("organIds") String organIds);
+
+    List<MusicGroupPerformance> queryNoStart(Map<String, Object> params);
+
+    int countNoStart(Map<String, Object> params);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PhotoAlbumDao.java

@@ -12,4 +12,8 @@ public interface PhotoAlbumDao extends BaseDAO<Integer, PhotoAlbum> {
 
 
     List<Map<Integer,Long>> countTotalNumByAlbumIds(@Param("albumIds") List<Integer> albumIds, @Param("clientShow") YesOrNoEnum clientShow);
+
+    PhotoAlbum findByTypeAndGroupId(@Param("musicGroupId") String musicGroupId, @Param("type") String type);
+
+    void batchUpdate(@Param("photoAlbumList") List<PhotoAlbum> photoAlbumList);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Photo.java

@@ -13,6 +13,8 @@ public class Photo {
 	
 	/** 相册编号 */
 	private Integer photoAlbumId;
+
+	private String musicGroupId;
 	
 	/** 名称 */
 	private String name;
@@ -35,6 +37,14 @@ public class Photo {
 	/**  */
 	private java.util.Date updateTime;
 
+	public String getMusicGroupId() {
+		return musicGroupId;
+	}
+
+	public void setMusicGroupId(String musicGroupId) {
+		this.musicGroupId = musicGroupId;
+	}
+
 	public Integer getOrder() {
 		return order;
 	}

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java

@@ -19,6 +19,7 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP("STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP", "申请退团学员数"),
     NO_MEMBER_STUDENT_INFO("NO_MEMBER_STUDENT_INFO", "当前共有{0}个乐团共{1}名学员会员已过期"),
     MEMBER_STUDENT_INFO("MEMBER_STUDENT_INFO", "当前共有{0}个乐团共{1}名学员会员即将过期"),
+    MUSIC_GROUP_PERFORMANCE("MUSIC_GROUP_PERFORMANCE", "当前共有{0}个乐团共{1}次展演计划"),
     WAIT_CREATE_PAYMENT_CALENDER("WAIT_CREATE_PAYMENT_CALENDER", "待创建缴费项目"),
     ATTENDANCE_ERR_STUDENT_NUM("COURSE_TRUANT_STUDENT_NUM", "学员考勤异常"),
     COURSE_TRUANT_STUDENT_NUM("COURSE_TRUANT_STUDENT_NUM", "学员旷课"),

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupPerformanceQueryInfo.java

@@ -6,6 +6,16 @@ public class MusicGroupPerformanceQueryInfo extends QueryInfo {
 
     private String musicGroupId;
 
+    private String organId;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
     public String getMusicGroupId() {
         return musicGroupId;
     }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPerformanceService.java

@@ -1,8 +1,10 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.MusicGroupPerformance;
+import com.ym.mec.biz.dal.page.MusicGroupPerformanceQueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface MusicGroupPerformanceService extends BaseService<Integer, MusicGroupPerformance> {
 
+    Object queryNoStartPage(MusicGroupPerformanceQueryInfo queryInfo);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/PhotoAlbumService.java

@@ -5,9 +5,13 @@ import com.ym.mec.biz.dal.page.PhotoQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface PhotoAlbumService extends BaseService<Integer, PhotoAlbum> {
 
     int del(Integer id);
 
     PageInfo<PhotoAlbum> queryAlbumPage(PhotoQueryInfo queryInfo);
+
+    void batchUpdate(List<PhotoAlbum> photoAlbumList);
 }

+ 12 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -9,9 +9,7 @@ import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
 import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
-import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
 import com.ym.mec.biz.service.EmployeeService;
@@ -25,7 +23,6 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.service.IndexBaseMonthDataService;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
@@ -68,6 +65,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	private EmployeeService employeeService;
 	@Autowired
 	private StudentRegistrationDao studentRegistrationDao;
+	@Autowired
+	private MusicGroupPerformanceDao musicGroupPerformanceDao;
 
 	private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
 		@Override
@@ -934,6 +933,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		infoDto.setNum2(userIds.size());
 		infoDto.setDesc(IndexErrorType.MEMBER_STUDENT_INFO.getMsg());
 		result.add(infoDto);
+
+		//乐团展演计划提醒
+		List<MusicGroupPerformance> musicGroupPerformances = musicGroupPerformanceDao.findNoStart(educationUserId,organIds);
+		IndexErrInfoDto infoDto1 = new IndexErrInfoDto();
+		infoDto1.setErrorType(IndexErrorType.MUSIC_GROUP_PERFORMANCE);
+		infoDto1.setNum(musicGroupPerformances.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet()).size());
+		infoDto1.setNum2(musicGroupPerformances.stream().map(e -> e.getId()).collect(Collectors.toSet()).size());
+		infoDto1.setDesc(IndexErrorType.MUSIC_GROUP_PERFORMANCE.getMsg());
+		result.add(infoDto);
 		return result;
 	}
 

+ 60 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPerformanceServiceImpl.java

@@ -1,6 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserRole;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.MusicGroupPerformanceQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.biz.dal.entity.MusicGroupPerformance;
@@ -8,15 +18,64 @@ import com.ym.mec.biz.service.MusicGroupPerformanceService;
 import com.ym.mec.biz.dal.dao.MusicGroupPerformanceDao;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+import java.util.stream.Collectors;
+
 @Service
 public class MusicGroupPerformanceServiceImpl extends BaseServiceImpl<Integer, MusicGroupPerformance>  implements MusicGroupPerformanceService {
 	
 	@Autowired
 	private MusicGroupPerformanceDao musicGroupPerformanceDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private EmployeeDao employeeDao;
 
 	@Override
 	public BaseDAO<Integer, MusicGroupPerformance> getDAO() {
 		return musicGroupPerformanceDao;
 	}
-	
+
+    @Override
+    public Object queryNoStartPage(MusicGroupPerformanceQueryInfo queryInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			throw new BizException("用户信息获取失败");
+		}
+		Employee employee = employeeDao.get(sysUser.getId());
+		if (org.apache.commons.lang3.StringUtils.isEmpty(queryInfo.getOrganId())) {
+			queryInfo.setOrganId(employee.getOrganIdList());
+		} else if (org.apache.commons.lang3.StringUtils.isEmpty(employee.getOrganIdList())) {
+			throw new BizException("用户所在分部异常");
+		} else {
+			List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+			if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+				throw new BizException("非法请求");
+			}
+		}
+		//当前用户是否是分部经理
+		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+		Integer educationUserId = null;
+		if (!sysUser.getIsSuperAdmin() && userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+			//获取教务老师关联的班级列表
+			educationUserId = sysUser.getId();
+		}
+		PageInfo<MusicGroupPerformance> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+		params.put("educationUserId",educationUserId);
+
+		List<MusicGroupPerformance> dataList = null;
+		int count = musicGroupPerformanceDao.countNoStart(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = musicGroupPerformanceDao.queryNoStart(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+    }
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PhotoAlbumServiceImpl.java

@@ -50,4 +50,9 @@ public class PhotoAlbumServiceImpl extends BaseServiceImpl<Integer, PhotoAlbum>
 		}
 		return photoAlbumPageInfo;
     }
+
+    @Override
+    public void batchUpdate(List<PhotoAlbum> photoAlbumList) {
+		photoAlbumDao.batchUpdate(photoAlbumList);
+    }
 }

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PhotoServiceImpl.java

@@ -1,12 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.dao.PhotoAlbumDao;
 import com.ym.mec.biz.dal.dao.PhotoDao;
 import com.ym.mec.biz.dal.entity.Photo;
+import com.ym.mec.biz.dal.entity.PhotoAlbum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.PhotoService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -15,6 +21,8 @@ public class PhotoServiceImpl extends BaseServiceImpl<Integer, Photo>  implement
 	
 	@Autowired
 	private PhotoDao photoDao;
+	@Autowired
+	private PhotoAlbumDao photoAlbumDao;
 
 	@Override
 	public BaseDAO<Integer, Photo> getDAO() {
@@ -27,7 +35,32 @@ public class PhotoServiceImpl extends BaseServiceImpl<Integer, Photo>  implement
     }
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public int batchAdd(List<Photo> photoList) {
+		if(photoList == null ||photoList.size() == 0){
+			throw new BizException("请录入照片");
+		}
+		Photo photo = photoList.get(0);
+		Integer photoAlbumId = photo.getPhotoAlbumId();
+		String musicGroupId = photo.getMusicGroupId();
+		if(photoAlbumId == null && StringUtils.isEmpty(musicGroupId)){
+			throw new BizException("参数校验失败");
+		}
+		//如果相册编号是空,那么插入证书相册
+		if(photoAlbumId == null){
+			PhotoAlbum photoAlbum = photoAlbumDao.findByTypeAndGroupId(musicGroupId,"SHOW");
+			if(photoAlbum == null){
+				photoAlbum = new PhotoAlbum();
+				photoAlbum.setName("获奖证书");
+				photoAlbum.setClientShow(YesOrNoEnum.YES);
+				photoAlbum.setType("SHOW");
+				photoAlbumDao.insert(photoAlbum);
+			}
+			photoAlbumId = photoAlbum.getId();
+		}
+		for (Photo e : photoList) {
+			e.setPhotoAlbumId(photoAlbumId);
+		}
 		return photoDao.batchInsert(photoList);
 	}
 

+ 40 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPerformanceMapper.xml

@@ -87,4 +87,44 @@
 			</if>
 		</where>
 	</select>
+    <select id="findNoStart" resultMap="MusicGroupPerformance">
+		SELECT mgp.* FROM music_group_performance mgp
+		LEFT JOIN music_group mg ON mg.id_ = mgp.music_group_id_
+		WHERE DATEDIFF(DATE_FORMAT(start_time_, '%Y-%m-%d'),DATE_FORMAT(NOW(), '%Y-%m-%d')) >= 0
+		<if test="educationUserId != null">
+			AND mg.educational_teacher_id_ = #{educationUserId}
+		</if>
+		<if test="organIds != null and organIds != ''">
+			AND FIND_IN_SET(mg.organ_id_,#{organIds})
+		</if>
+	</select>
+	<select id="queryNoStart" resultMap="MusicGroupPerformance">
+		SELECT mgp.* FROM music_group_performance mgp
+		LEFT JOIN music_group mg ON mg.id_ = mgp.music_group_id_
+		WHERE DATEDIFF(DATE_FORMAT(start_time_, '%Y-%m-%d'),DATE_FORMAT(NOW(), '%Y-%m-%d')) >= 0
+		<if test="educationUserId != null">
+			AND mg.educational_teacher_id_ = #{educationUserId}
+		</if>
+		<if test="search != null and search != ''">
+			AND (mg.id_ = #{search} OR mg.name_ LIKE CONCAT('%',#{search},'%'))
+		</if>
+		<if test="organIds != null and organIds != ''">
+			AND FIND_IN_SET(mg.organ_id_,#{organIds})
+		</if>
+		<include refid="global.limit"/>
+	</select>
+	<select id="countNoStart" resultType="java.lang.Integer">
+		SELECT COUNT(mgp.id_) FROM music_group_performance mgp
+		LEFT JOIN music_group mg ON mg.id_ = mgp.music_group_id_
+		WHERE DATEDIFF(DATE_FORMAT(start_time_, '%Y-%m-%d'),DATE_FORMAT(NOW(), '%Y-%m-%d')) >= 0
+		<if test="educationUserId != null">
+			AND mg.educational_teacher_id_ = #{educationUserId}
+		</if>
+		<if test="search != null and search != ''">
+			AND (mg.id_ = #{search} OR mg.name_ LIKE CONCAT('%',#{search},'%'))
+		</if>
+		<if test="organIds != null and organIds != ''">
+			AND FIND_IN_SET(mg.organ_id_,#{organIds})
+		</if>
+	</select>
 </mapper>

+ 32 - 1
mec-biz/src/main/resources/config/mybatis/PhotoAlbumMapper.xml

@@ -62,7 +62,35 @@
 		update_time_ = NOW()
 		</set> WHERE id_ = #{id}
 	</update>
-	
+	<update id="batchUpdate">
+		<foreach collection="photoAlbumList" item="album" separator=";">
+			UPDATE photo_album_ <set>
+			<if test="album.coverUrl != null">
+				cover_url_ = #{album.coverUrl},
+			</if>
+			<if test="album.order != null">
+				order_ = #{album.order},
+			</if>
+			<if test="album.coverThumbnailUrl != null">
+				cover_thumbnail_url_ = #{album.coverThumbnailUrl},
+			</if>
+			<if test="album.clientShow != null">
+				client_show_ = #{album.clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="album.musicGroupId != null">
+				music_group_id_ = #{album.musicGroupId},
+			</if>
+			<if test="album.type != null">
+				type_ = #{album.type},
+			</if>
+			<if test="album.name != null">
+				name_ = #{album.name},
+			</if>
+			update_time_ = NOW()
+		</set> WHERE id_ = #{album.id}
+		</foreach>
+	</update>
+
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM photo_album_ WHERE id_ = #{id} 
@@ -105,4 +133,7 @@
 		</if>
 		GROUP BY photo_album_id_
 	</select>
+	<select id="findByTypeAndGroupId" resultMap="PhotoAlbum">
+		SELECT * FROM photo_album_ WHERE music_group_id_ = #{musicGroupId} AND type_ = #{type} LIMIT 1
+	</select>
 </mapper>

+ 6 - 4
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPerformanceController.java

@@ -3,20 +3,16 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.MusicGroupPerformance;
-import com.ym.mec.biz.dal.entity.MusicGroupTrainPlan;
-import com.ym.mec.biz.dal.entity.MusicGroupTrainPlanSaveDto;
 import com.ym.mec.biz.dal.page.MusicGroupPerformanceQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPerformanceService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -68,4 +64,10 @@ public class MusicGroupPerformanceController extends BaseController {
 		return succeed(musicGroupPerformanceService.queryPage(queryInfo));
 	}
 
+	@ApiOperation("分页查询首页乐团展演列表")
+	@PostMapping(value = "queryNoStartPage")
+	@PreAuthorize("@pcs.hasPermissions('musicGroupPerformance/queryNoStartPage')")
+	public Object queryNoStartPage(MusicGroupPerformanceQueryInfo queryInfo) {
+		return succeed(musicGroupPerformanceService.queryNoStartPage(queryInfo));
+	}
 }

+ 8 - 4
mec-web/src/main/java/com/ym/mec/web/controller/PhotoAlbumController.java

@@ -9,9 +9,12 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @RequestMapping("photoAlbum")
 @Api(tags = "相册")
 @RestController
@@ -28,10 +31,11 @@ public class PhotoAlbumController extends BaseController {
 	}
 
 	@ApiOperation("修改")
-	@PostMapping(value = "update")
-	@PreAuthorize("@pcs.hasPermissions('photoAlbum/update')")
-	public Object update(PhotoAlbum photoAlbum) {
-		return succeed(photoAlbumService.update(photoAlbum));
+	@PostMapping(value = "batchUpdate")
+	@PreAuthorize("@pcs.hasPermissions('photoAlbum/batchUpdate')")
+	public Object batchUpdate(@RequestBody List<PhotoAlbum> photoAlbumList) {
+		photoAlbumService.batchUpdate(photoAlbumList);
+		return succeed();
 	}
 
 	@ApiOperation("删除")

+ 2 - 2
mec-web/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/logs/web-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/Users/chenxiaoyu/Documents/logs/web-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 			  value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 
@@ -30,7 +30,7 @@
 	<appender name="messagefile"
 			  class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<FileNamePattern>/mdata/logs/web-message-%d{yyyy-MM-dd_HH}-%i.log</FileNamePattern>
+			<FileNamePattern>/Users/chenxiaoyu/Documents/logs/web-message-%d{yyyy-MM-dd_HH}-%i.log</FileNamePattern>
 			<MaxHistory>90</MaxHistory>
 			<TimeBasedFileNamingAndTriggeringPolicy
 					class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">