Browse Source

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 3 years ago
parent
commit
a52524ad1c

+ 170 - 164
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -1,33 +1,8 @@
 package com.ym.mec.cms.controller;
 package com.ym.mec.cms.controller;
 
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.cms.controller.queryinfo.NewsInformationQueryInfo;
 import com.ym.mec.cms.controller.queryinfo.NewsInformationQueryInfo;
-import com.ym.mec.cms.dal.dao.StudentRegistrationDao;
 import com.ym.mec.cms.dal.dao.SysNewsInformationDao;
 import com.ym.mec.cms.dal.dao.SysNewsInformationDao;
 import com.ym.mec.cms.dal.entity.SysConfig;
 import com.ym.mec.cms.dal.entity.SysConfig;
 import com.ym.mec.cms.dal.entity.SysNewsInformation;
 import com.ym.mec.cms.dal.entity.SysNewsInformation;
@@ -35,155 +10,186 @@ import com.ym.mec.cms.service.SysConfigService;
 import com.ym.mec.cms.service.SysNewsInformationService;
 import com.ym.mec.cms.service.SysNewsInformationService;
 import com.ym.mec.cms.service.SysNewsTypeService;
 import com.ym.mec.cms.service.SysNewsTypeService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.web.WebFeignService;
 import com.ym.mec.web.WebFeignService;
 import com.yonge.log.model.AuditLogAnnotation;
 import com.yonge.log.model.AuditLogAnnotation;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
 
 
-import javax.validation.constraints.NotNull;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @RestController
 @RestController
 @RequestMapping("news")
 @RequestMapping("news")
 @Api(tags = "资讯服务")
 @Api(tags = "资讯服务")
 public class NewsController extends BaseController {
 public class NewsController extends BaseController {
 
 
-	@Autowired
-	private SysNewsInformationService sysNewsInformationService;
-	@Autowired
-	private SysNewsTypeService sysNewsTypeService;
-	@Autowired
-	private SysNewsInformationDao sysNewsInformationDao;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private WebFeignService webFeignService;
-	@Autowired
-	private SysConfigService sysConfigService;
-
-	@ApiOperation("资讯列表分页查询")
-	@GetMapping(value = "/list")
-	public Object getList(NewsInformationQueryInfo queryInfo) {
-		if(queryInfo.getType() == 6 || queryInfo.getType() == 4){
-			queryInfo.setTenantId(-1);
-		}
-		String clientId = queryInfo.getClientId();
-
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (user == null || user.getId() == null) {
-			queryInfo.setOrganId(43);
-			queryInfo.setExcludeIds(new ArrayList<>());
-		} else {
-			if (!StringUtils.equalsIgnoreCase("student", clientId)) {
-				queryInfo.setOrganIdList(webFeignService.queryOrganIdByUserId(user.getId(), clientId));
-			}else {
-				queryInfo.setOrganId(user.getOrganId());
-			}
-		}
-		
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		int count = sysNewsInformationDao.queryCount(params);
-		if(count == 0){
-			queryInfo.setMemo(null);
-		}
-		return succeed(sysNewsInformationService.queryPage(queryInfo));
-	}
-
-	@ApiOperation("资讯列表分页查询")
-	@GetMapping(value = "/queryPage")
-	public Object queryPage(NewsInformationQueryInfo queryInfo) {
-		
-		if(queryInfo.getType() != null && (queryInfo.getType() == 6 || queryInfo.getType() == 4)){
-			queryInfo.setTenantId(-1);
-		}
-		
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		int count = sysNewsInformationDao.queryCount(params);
-		if(count == 0){
-			queryInfo.setMemo(null);
-		}
-		return succeed(sysNewsInformationService.queryPage(queryInfo));
-	}
-
-	@ApiOperation("资讯类型列表查询")
-	@GetMapping(value = "/typeList")
-	public Object getTypeList(Integer parentId) {
-		return succeed(sysNewsTypeService.queryByParentId(parentId));
-	}
-
-	@ApiOperation("资讯列表分页查询")
-	@GetMapping(value = "/homeList")
-	public Object getHomeList(NewsInformationQueryInfo queryInfo) {
-		queryInfo.setRows(10);
-		SysUser user = sysUserFeignService.queryUserInfo();
-		SysConfig cloudTeacherActiveIds = sysConfigService.findByParamName(SysConfigService.CLOUD_TEACHER_ACTIVE_BANNER_IDS);
-		List<Integer> excludeIds = new ArrayList<>();
-		if(Objects.nonNull(cloudTeacherActiveIds)&&StringUtils.isNotBlank(cloudTeacherActiveIds.getParanValue())){
-			excludeIds = Arrays.stream(cloudTeacherActiveIds.getParanValue().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
-		}
-		if (user == null || user.getId() == null) {
-			queryInfo.setOrganId(43);
-			queryInfo.setTenantId(1);
-			queryInfo.setExcludeIds(excludeIds);
-		} else {
-			queryInfo.setOrganId(user.getOrganId());
-		}
-		return succeed(sysNewsInformationService.getHomeList(user, queryInfo));
-	}
-
-	@ApiOperation("查询资讯详情")
-	@ApiImplicitParam(name = "id", value = "资讯ID编号", required = true, dataType = "Long", paramType = "path")
-	@GetMapping(value = "/query")
-	public Object query(Long id) {
-
-		return succeed(sysNewsInformationService.queryById(id));
-	}
-
-	@ApiOperation("新增资讯")
-	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	@AuditLogAnnotation(operateName = "资讯新增",interfaceURL = "news/add")
-	@PreAuthorize("@pcs.hasPermissions('news/add')")
-	public Object add(SysNewsInformation newsInfo) {
-		
-		if(newsInfo.getType() == 6 || newsInfo.getType() == 4){
-			newsInfo.setTenantId(-1);
-		}
-		if (newsInfo.getContent().length() > 7999) {
-			return failed("内容过长");
-		}
-		return succeed(sysNewsInformationService.insert(newsInfo));
-	}
-
-	@ApiOperation("更新资讯")
-	@PostMapping(value = "/update", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	@AuditLogAnnotation(operateName = "资讯更新",interfaceURL = "news/update")
-	@PreAuthorize("@pcs.hasPermissions('news/update')")
-	public Object update(SysNewsInformation newsInfo) {
-		Date date = new Date();
-		newsInfo.setUpdateTime(date);
-		
-		SysNewsInformation originNewsInfo = sysNewsInformationService.get(newsInfo.getId());
-		if(originNewsInfo == null){
-			return failed("请求参数错误");
-		}
-		
-		if(newsInfo.getType() == null){
-			newsInfo.setType(originNewsInfo.getType());
-		}
-		
-		if(newsInfo.getType() == 6 || newsInfo.getType() == 4){
-			newsInfo.setTenantId(-1);
-		}
-		return succeed(sysNewsInformationService.update(newsInfo));
-	}
-
-	@ApiOperation("删除")
-	@PostMapping(value = "/del/{id}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-	@AuditLogAnnotation(operateName = "资讯删除",interfaceURL = "news/del")
-	@PreAuthorize("@pcs.hasPermissions('news/del')")
-	public Object add(@PathVariable("id") Long id) {
-		return succeed(sysNewsInformationService.deleteWithLogical(id));
-	}
+    @Autowired
+    private SysNewsInformationService sysNewsInformationService;
+    @Autowired
+    private SysNewsTypeService sysNewsTypeService;
+    @Autowired
+    private SysNewsInformationDao sysNewsInformationDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private WebFeignService webFeignService;
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    @ApiOperation("查询底部按钮信息")
+    @GetMapping(value = "/queryBottomInfo")
+    public HttpResponseResult<List<SysNewsInformation>> queryBySubType(String clientName) {
+        Optional<String> optional = Optional.ofNullable(clientName);
+        optional.orElseThrow(() -> new BizException("clientName不能为空"));
+        boolean b = WrapperUtil.checkStr(clientName.toLowerCase(), "student", "teacher");
+        Integer subType;
+        if (b) {
+            // 学生21  老师22
+            subType = optional.filter(q -> q.equalsIgnoreCase("student"))
+                    .map(q -> 21)
+                    .orElse(22);
+        } else {
+            return failed("参数错误");
+        }
+        return succeed(sysNewsInformationService.queryBottomInfo(subType));
+    }
+
+    @ApiOperation("资讯列表分页查询")
+    @GetMapping(value = "/list")
+    public Object getList(NewsInformationQueryInfo queryInfo) {
+        if (queryInfo.getType() == 6 || queryInfo.getType() == 4) {
+            queryInfo.setTenantId(-1);
+        }
+        String clientId = queryInfo.getClientId();
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || user.getId() == null) {
+            queryInfo.setOrganId(43);
+            queryInfo.setExcludeIds(new ArrayList<>());
+        } else {
+            if (!StringUtils.equalsIgnoreCase("student", clientId)) {
+                queryInfo.setOrganIdList(webFeignService.queryOrganIdByUserId(user.getId(), clientId));
+            } else {
+                queryInfo.setOrganId(user.getOrganId());
+            }
+        }
+
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        int count = sysNewsInformationDao.queryCount(params);
+        if (count == 0) {
+            queryInfo.setMemo(null);
+        }
+        return succeed(sysNewsInformationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation("资讯列表分页查询")
+    @GetMapping(value = "/queryPage")
+    public Object queryPage(NewsInformationQueryInfo queryInfo) {
+
+        if (queryInfo.getType() != null && (queryInfo.getType() == 6 || queryInfo.getType() == 4)) {
+            queryInfo.setTenantId(-1);
+        }
+
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        int count = sysNewsInformationDao.queryCount(params);
+        if (count == 0) {
+            queryInfo.setMemo(null);
+        }
+        return succeed(sysNewsInformationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation("资讯类型列表查询")
+    @GetMapping(value = "/typeList")
+    public Object getTypeList(Integer parentId) {
+        return succeed(sysNewsTypeService.queryByParentId(parentId));
+    }
+
+    @ApiOperation("资讯列表分页查询")
+    @GetMapping(value = "/homeList")
+    public Object getHomeList(NewsInformationQueryInfo queryInfo) {
+        queryInfo.setRows(10);
+        SysUser user = sysUserFeignService.queryUserInfo();
+        SysConfig cloudTeacherActiveIds = sysConfigService.findByParamName(SysConfigService.CLOUD_TEACHER_ACTIVE_BANNER_IDS);
+        List<Integer> excludeIds = new ArrayList<>();
+        if (Objects.nonNull(cloudTeacherActiveIds) && StringUtils.isNotBlank(cloudTeacherActiveIds.getParanValue())) {
+            excludeIds = Arrays.stream(cloudTeacherActiveIds.getParanValue().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+        }
+        if (user == null || user.getId() == null) {
+            queryInfo.setOrganId(43);
+            queryInfo.setTenantId(1);
+            queryInfo.setExcludeIds(excludeIds);
+        } else {
+            queryInfo.setOrganId(user.getOrganId());
+        }
+        return succeed(sysNewsInformationService.getHomeList(user, queryInfo));
+    }
+
+    @ApiOperation("查询资讯详情")
+    @ApiImplicitParam(name = "id", value = "资讯ID编号", required = true, dataType = "Long", paramType = "path")
+    @GetMapping(value = "/query")
+    public Object query(Long id) {
+
+        return succeed(sysNewsInformationService.queryById(id));
+    }
+
+    @ApiOperation("新增资讯")
+    @PostMapping(value = "/add", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @AuditLogAnnotation(operateName = "资讯新增", interfaceURL = "news/add")
+    @PreAuthorize("@pcs.hasPermissions('news/add')")
+    public Object add(SysNewsInformation newsInfo) {
+
+        if (newsInfo.getType() == 6 || newsInfo.getType() == 4) {
+            newsInfo.setTenantId(-1);
+        }
+        if (newsInfo.getContent().length() > 7999) {
+            return failed("内容过长");
+        }
+        return succeed(sysNewsInformationService.insert(newsInfo));
+    }
+
+    @ApiOperation("更新资讯")
+    @PostMapping(value = "/update", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @AuditLogAnnotation(operateName = "资讯更新", interfaceURL = "news/update")
+    @PreAuthorize("@pcs.hasPermissions('news/update')")
+    public Object update(SysNewsInformation newsInfo) {
+        Date date = new Date();
+        newsInfo.setUpdateTime(date);
+
+        SysNewsInformation originNewsInfo = sysNewsInformationService.get(newsInfo.getId());
+        if (originNewsInfo == null) {
+            return failed("请求参数错误");
+        }
+
+        if (newsInfo.getType() == null) {
+            newsInfo.setType(originNewsInfo.getType());
+        }
+
+        if (newsInfo.getType() == 6 || newsInfo.getType() == 4) {
+            newsInfo.setTenantId(-1);
+        }
+        return succeed(sysNewsInformationService.update(newsInfo));
+    }
+
+    @ApiOperation("删除")
+    @PostMapping(value = "/del/{id}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @AuditLogAnnotation(operateName = "资讯删除", interfaceURL = "news/del")
+    @PreAuthorize("@pcs.hasPermissions('news/del')")
+    public Object add(@PathVariable("id") Long id) {
+        return succeed(sysNewsInformationService.deleteWithLogical(id));
+    }
 
 
 	@ApiOperation("查询资讯详情")
 	@ApiOperation("查询资讯详情")
 	@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "资讯ID编号", required = true, dataType = "Long"),
 	@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "资讯ID编号", required = true, dataType = "Long"),

+ 2 - 0
cms/src/main/java/com/ym/mec/cms/dal/dao/SysNewsInformationDao.java

@@ -17,6 +17,8 @@ public interface SysNewsInformationDao extends BaseDAO<Long, SysNewsInformation>
 	 */
 	 */
 	List<SysNewsInformation> queryByType(@Param("type") Integer type,@Param("subType") Integer subType);
 	List<SysNewsInformation> queryByType(@Param("type") Integer type,@Param("subType") Integer subType);
 
 
+	List<SysNewsInformation> queryBottomInfo(@Param("subType") Integer subType);
+
 	/**
 	/**
 	 * 逻辑删除
 	 * 逻辑删除
 	 * @param id
 	 * @param id

+ 2 - 0
cms/src/main/java/com/ym/mec/cms/service/SysNewsInformationService.java

@@ -19,6 +19,8 @@ public interface SysNewsInformationService extends BaseService<Long, SysNewsInfo
 	 */
 	 */
 	List<SysNewsInformation> queryByType(Integer type);
 	List<SysNewsInformation> queryByType(Integer type);
 
 
+    List<SysNewsInformation> queryBottomInfo(Integer subType);
+
 	/**
 	/**
 	 * 逻辑删除
 	 * 逻辑删除
 	 * @param id
 	 * @param id

+ 5 - 0
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -53,6 +53,11 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 		return sysNewsInformationDao.queryByType(type,null);
 		return sysNewsInformationDao.queryByType(type,null);
 	}
 	}
 
 
+    @Override
+    public List<SysNewsInformation> queryBottomInfo(Integer subType) {
+        return sysNewsInformationDao.queryBottomInfo(subType);
+    }
+
 	@Override
 	@Override
 	public boolean deleteWithLogical(Long id) {
 	public boolean deleteWithLogical(Long id) {
 		sysNewsInformationDao.deleteWithLogical(id);
 		sysNewsInformationDao.deleteWithLogical(id);

+ 4 - 2
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsTypeServiceImpl.java

@@ -51,14 +51,16 @@ public class SysNewsTypeServiceImpl extends BaseServiceImpl<Integer, SysNewsType
         return sysNewsTypeDao.queryByParentId(parentId);
         return sysNewsTypeDao.queryByParentId(parentId);
     }
     }
 
 
-    public List<SysNewsType> listWithTree(Integer id,String memo) {
+    public List<SysNewsType> listWithTree(Integer id, String memo) {
         SysNewsType newsType = sysNewsTypeDao.get(id);
         SysNewsType newsType = sysNewsTypeDao.get(id);
         List<SysNewsType> all = sysNewsTypeDao.findAll(null);
         List<SysNewsType> all = sysNewsTypeDao.findAll(null);
 
 
         all.forEach(e -> {
         all.forEach(e -> {
-            List<SysNewsInformation> list = informationDao.queryBySubType(e.getId(),memo);
+            List<SysNewsInformation> list = informationDao.queryBySubType(e.getId(), memo);
             if (CollectionUtils.isNotEmpty(list)) {
             if (CollectionUtils.isNotEmpty(list)) {
                 e.setInformationList(list);
                 e.setInformationList(list);
+            } else {
+                e.setInformationList(informationDao.queryBySubType(e.getId(), null));
             }
             }
         });
         });
 
 

+ 6 - 0
cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -197,6 +197,12 @@
 			</if>
 			</if>
 		</where>
 		</where>
 	</select>
 	</select>
+
+    <select id="queryBottomInfo" resultMap="SysNewsInformation" parameterType="java.lang.Integer">
+        SELECT * FROM sys_news_information
+        where del_flag_=0 and status_ = 1
+                and sub_type_ = #{subType}
+    </select>
 	
 	
 	<update id="deleteWithLogical">
 	<update id="deleteWithLogical">
 		UPDATE sys_news_information SET del_flag_ = 1,update_time_ = NOW() WHERE id_ = #{id}
 		UPDATE sys_news_information SET del_flag_ = 1,update_time_ = NOW() WHERE id_ = #{id}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
+import com.ym.mec.biz.dal.dto.StudentServeDto;
 import com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto;
 import com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto;
 import com.ym.mec.biz.dal.dto.TeacherServeDto;
 import com.ym.mec.biz.dal.dto.TeacherServeDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
@@ -150,8 +151,16 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                          @Param("courseId") Long courseId);
                                                                          @Param("courseId") Long courseId);
 
 
     List<TeacherServeDto> queryTeacherServeInfo(Map<String, Object> params);
     List<TeacherServeDto> queryTeacherServeInfo(Map<String, Object> params);
+
     int countTeacherServeInfo(Map<String, Object> params);
     int countTeacherServeInfo(Map<String, Object> params);
 
 
+    /**
+     * 查询学生指标
+     * @param params
+     * @return
+     */
+    List<StudentServeDto> queryStudentServeInfo(Map<String, Object> params);
+
     List<StudentExtracurricularExercisesSituation> findTeacherServeWithDate(@Param("monday") String monday,
     List<StudentExtracurricularExercisesSituation> findTeacherServeWithDate(@Param("monday") String monday,
                                                                             @Param("sunday") String sunday,
                                                                             @Param("sunday") String sunday,
                                                                             @Param("teacherIds") List<Integer> teacherIds,
                                                                             @Param("teacherIds") List<Integer> teacherIds,
@@ -190,4 +199,7 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                    @Param("serveType") String serveType,
                                                                    @Param("serveType") String serveType,
                                                                    @Param("month") Date month,
                                                                    @Param("month") Date month,
                                                                    @Param("userId") Integer userId);
                                                                    @Param("userId") Integer userId);
+
+
+
 }
 }

+ 86 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeDto.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 import java.util.Date;
 
 
 /**
 /**
@@ -18,6 +20,22 @@ public class StudentServeDto extends Student {
 
 
     private Date courseStartTime;
     private Date courseStartTime;
 
 
+    private String musicGroupName;
+
+    private String servePeriod;
+
+    private String serveNum;
+
+    private Integer actualExercisesNum;
+
+    private Integer exercisesReplyNum;
+
+    private Integer exercisesMessageNum;
+
+    private BigDecimal signRate;
+
+    private BigDecimal passRate;
+
     public GroupType getGroupType() {
     public GroupType getGroupType() {
         return groupType;
         return groupType;
     }
     }
@@ -41,4 +59,72 @@ public class StudentServeDto extends Student {
     public void setCourseStartTime(Date courseStartTime) {
     public void setCourseStartTime(Date courseStartTime) {
         this.courseStartTime = courseStartTime;
         this.courseStartTime = courseStartTime;
     }
     }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getServePeriod() {
+        return servePeriod;
+    }
+
+    public void setServePeriod(String servePeriod) {
+        this.servePeriod = servePeriod;
+    }
+
+    public String getServeNum() {
+        return serveNum;
+    }
+
+    public void setServeNum(String serveNum) {
+        this.serveNum = serveNum;
+    }
+
+    public Integer getActualExercisesNum() {
+        return actualExercisesNum;
+    }
+
+    public void setActualExercisesNum(Integer actualExercisesNum) {
+        this.actualExercisesNum = actualExercisesNum;
+    }
+
+    public Integer getExercisesReplyNum() {
+        return exercisesReplyNum;
+    }
+
+    public void setExercisesReplyNum(Integer exercisesReplyNum) {
+        this.exercisesReplyNum = exercisesReplyNum;
+    }
+
+    public Integer getExercisesMessageNum() {
+        return exercisesMessageNum;
+    }
+
+    public void setExercisesMessageNum(Integer exercisesMessageNum) {
+        this.exercisesMessageNum = exercisesMessageNum;
+    }
+
+    public BigDecimal getSignRate() {
+        return signRate;
+    }
+
+    public void setSignRate(BigDecimal signRate) {
+        if (null != signRate) {
+            this.signRate = signRate.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
+
+    public BigDecimal getPassRate() {
+        return passRate;
+    }
+
+    public void setPassRate(BigDecimal passRate) {
+        if (null != passRate) {
+            this.passRate = passRate.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
 }
 }

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

@@ -75,6 +75,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     VIP_STUDENT_COURSE_MANAGE("VIP_STUDENT_COURSE_MANAGE", "vip学员课程管理"),
     VIP_STUDENT_COURSE_MANAGE("VIP_STUDENT_COURSE_MANAGE", "vip学员课程管理"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出"),
     EXPORT_STUDENT_SUBCOURSE("EXPORT_STUDENT_SUBCOURSE", "活动资格导出"),
     EXPORT_STUDENT_SUBCOURSE("EXPORT_STUDENT_SUBCOURSE", "活动资格导出"),
+    EXPORT_STUDENT_SERVE_INFO("EXPORT_STUDENT_SERVE_INFO", "乐团学生服务指标导出"),
     ;
     ;
 
 
     private String code;
     private String code;

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -14,7 +14,9 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	ORDER_LIST_SUM(8, "订单汇总"),
 	ORDER_LIST_SUM(8, "订单汇总"),
 	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出"),
 	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出"),
 	MUSIC_GROUP_DATA_EXPORT(10, "乐团数据导出"),
 	MUSIC_GROUP_DATA_EXPORT(10, "乐团数据导出"),
-	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出");
+	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出"),
+	EXPORT_STUDENT_SERVE_INFO(12, "乐团学生指标导出");
+	;
 
 
 	private Integer code;
 	private Integer code;
 
 

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -353,9 +353,14 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.VIP_STUDENT_COURSE_MANAGE, (info,headColumns) -> exportVipStudentCourseManage(info,headColumns));
         exportManageFuncMap.put(ExportEnum.VIP_STUDENT_COURSE_MANAGE, (info,headColumns) -> exportVipStudentCourseManage(info,headColumns));
         exportManageFuncMap.put(ExportEnum.EXPORT_STUDENT_SUBCOURSE, (info,headColumns) -> exportStudentSubCourse(info,headColumns));
         exportManageFuncMap.put(ExportEnum.EXPORT_STUDENT_SUBCOURSE, (info,headColumns) -> exportStudentSubCourse(info,headColumns));
+        exportManageFuncMap.put(ExportEnum.EXPORT_STUDENT_SERVE_INFO, (info,headColumns) -> exportStudentServeInfo(info,headColumns));
+
+
     }
     }
 
 
 
 
+
+
     //导出对账单
     //导出对账单
     @Override
     @Override
     public List exportBill(Map<String, Object> info){
     public List exportBill(Map<String, Object> info){
@@ -1449,6 +1454,26 @@ public class ExportServiceImpl implements ExportService {
                 managerDownload.getName());
                 managerDownload.getName());
     }
     }
 
 
+    private HttpResponseResult exportStudentServeInfo(Map<String, Object> info, List<String> headColumns) {
+        SysUser sysUser = sysUserService.getUser();
+        String organId = organizationService.getEmployeeOrgan(sysUser.getId(),getParam(info, "organId", String.class),sysUser.getIsSuperAdmin());
+        info.put("organIds",organId);
+
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_STUDENT_SERVE_INFO,sysUser.getId());
+        Integer tenantId = TenantContextHolder.getTenantId();
+        info.put("tenantId",tenantId);
+        return this.asyncExport(() -> this.queryStudentServeInfo(info,managerDownload,headColumns,ExportEnum.EXPORT_STUDENT_SERVE_INFO),
+                managerDownload.getName());
+    }
+    @Autowired
+    private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
+
+    private void queryStudentServeInfo(Map<String, Object> info, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) {
+        List<StudentServeDto> rows = studentExtracurricularExercisesSituationDao.queryStudentServeInfo(info);
+        exportManagerDownload(getHSSFWorkbook(rows,headColumns,exportEnum),managerDownload);
+    }
+
+
     private void queryStudentSubCourse(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) {
     private void queryStudentSubCourse(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) {
         List<ExportStudentSubCourse> rows = activityUserMapperService.exportStudentSubCourse(organId, tenantId);
         List<ExportStudentSubCourse> rows = activityUserMapperService.exportStudentSubCourse(organId, tenantId);
         exportManagerDownload(getHSSFWorkbook(rows,headColumns,exportEnum),managerDownload);
         exportManagerDownload(getHSSFWorkbook(rows,headColumns,exportEnum),managerDownload);

+ 97 - 0
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -556,6 +556,8 @@
 		<result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum" />
 		<result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum" />
 	</resultMap>
 	</resultMap>
 
 
+
+
 	<sql id="queryTeacherServeInfoCondition">
 	<sql id="queryTeacherServeInfoCondition">
 		<where>
 		<where>
 			sees.tenant_id_ = #{tenantId} 
 			sees.tenant_id_ = #{tenantId} 
@@ -805,4 +807,99 @@
 		WHERE sees.serve_type_ = #{serveType} AND cs.id_ != #{courseScheduleId} AND cs.music_group_id_ = #{musicGroupId}
 		WHERE sees.serve_type_ = #{serveType} AND cs.id_ != #{courseScheduleId} AND cs.music_group_id_ = #{musicGroupId}
 		AND sees.monday_ = #{month} AND sees.student_id_ = #{userId}
 		AND sees.monday_ = #{month} AND sees.student_id_ = #{userId}
 	</select>
 	</select>
+
+	<resultMap id="StudentServeDto" type="com.ym.mec.biz.dal.dto.StudentServeDto">
+		<result column="student_id_" property="userId"/>
+		<result column="username_" property="username"/>
+		<result column="music_group_name_" property="musicGroupName"/>
+		<result column="organ_name_" property="organName"/>
+		<result column="serve_period_" property="servePeriod"/>
+		<result column="serve_num_" property="serveNum"/>
+		<result column="actual_exercises_num_" property="actualExercisesNum"/>
+		<result column="exercises_reply_num_" property="exercisesReplyNum"/>
+		<result column="exercises_message_num_" property="exercisesMessageNum"/>
+		<result column="sign_rate_" property="signRate"/>
+		<result column="pass_rate_" property="passRate"/>
+	</resultMap>
+
+	<!-- 还差出勤率和达标率 -->
+	<select id="queryStudentServeInfo" resultMap="TeacherServeDto">
+		select
+			sees.student_id_,
+			sees.username_,
+			sees.organ_name_,
+			sees.serve_num_,
+			sees.actual_exercises_num_,
+			sees.exercises_reply_num_,
+			sees.exercises_message_num_,
+		    a.sign_rate_,
+		    a.pass_rate_,
+			b.music_group_name_,
+		    concat(#{monday},'至', #{sunday}) as serve_period_
+		from (
+			select
+				sees.student_id_,
+				u.username_,
+				organ.name_ as organ_name_,
+			    count(sees.id_) as serve_num_,
+			    sum(sees.actual_exercises_num_) as actual_exercises_num_,
+				sum(sees.exercises_reply_num_) as exercises_reply_num_,
+				sum(sees.exercises_message_num_) as exercises_message_num_
+			from student_extracurricular_exercises_situation_ sees
+			left join sys_user u ON sees.student_id_ = u.id_
+			LEFT JOIN organization organ ON organ.id_=u.organ_id_ and organ.del_flag_ = 0
+			<where>
+				sees.tenant_id_ = #{tenantId}
+				<if test="monday != null and monday != ''">
+					AND DATE_FORMAT(sees.monday_, '%Y-%m-%d') &gt;= #{monday}
+				</if>
+				<if test="sunday != null and sunday != ''">
+					AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d') &lt;= #{sunday}
+				</if>
+				<if test="organIds != null and organIds.size()>0">
+					AND u.organ_id_ IN
+					<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+						#{organId}
+					</foreach>
+				</if>
+			</where>
+			group by sees.student_id_
+		) sees
+		left join (
+			select
+				sees.student_id_,
+				ifnull(sum(if(sa.status_ = 'NORMAL',1,0))/count(sa.id_),0) as sign_rate_,
+				ifnull(sum(sa.qualified_flag_)/count(sa.id_),0)  as pass_rate_
+			from student_extracurricular_exercises_situation_ sees
+			left join sys_user u ON sees.student_id_ = u.id_
+			left join course_schedule cs on find_in_set(cs.id_,sees.course_ids_) and cs.del_flag_ = 0
+			left join music_group mg on cs.music_group_id_ = mg.id_
+			left join student_attendance sa on sees.student_id_ = sa.user_id_ and cs.id_ = sa.course_schedule_id_
+			<where>
+				sees.tenant_id_ = #{tenantId} and cs.id_ is not null
+				<if test="monday != null and monday != ''">
+					AND DATE_FORMAT(sees.monday_, '%Y-%m-%d') &gt;= #{monday}
+				</if>
+				<if test="sunday != null and sunday != ''">
+					AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d') &lt;= #{sunday}
+				</if>
+				<if test="organIds != null and organIds.size()>0">
+					AND u.organ_id_ IN
+					<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+						#{organId}
+					</foreach>
+				</if>
+			</where>
+			group by sees.student_id_
+		) a on sees.student_id_ = a.student_id_
+		left join (
+			select
+			    user_id_,group_concat(distinct b.name_) as music_group_name_
+			from student_registration a
+			left join music_group b on a.music_group_id_ = b.id_
+			where payment_status_ = 1 and music_group_status_ = 'PROGRESS'
+		    group by a.user_id_
+		) b on sees.student_id_ = b.user_id_
+	</select>
+
 </mapper>
 </mapper>

+ 32 - 6
mec-web/src/main/java/com/ym/mec/web/controller/HfMerchantConfigController.java

@@ -1,5 +1,8 @@
 package com.ym.mec.web.controller;
 package com.ym.mec.web.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -8,6 +11,8 @@ import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiParam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -21,6 +26,7 @@ import javax.annotation.Resource;
 @RestController
 @RestController
 @RequestMapping("/hfMerchantConfig")
 @RequestMapping("/hfMerchantConfig")
 public class HfMerchantConfigController extends BaseController {
 public class HfMerchantConfigController extends BaseController {
+    private static final Logger log = LoggerFactory.getLogger(HfMerchantConfigController.class);
     /**
     /**
      * 服务对象
      * 服务对象
      */
      */
@@ -29,16 +35,36 @@ public class HfMerchantConfigController extends BaseController {
 
 
     @ApiOperation("创建汇付商户配置")
     @ApiOperation("创建汇付商户配置")
     @PostMapping("/add")
     @PostMapping("/add")
-    public HttpResponseResult<Object> add(@RequestBody HfMerchantConfig dto) {
-        hfMerchantConfigService.insert(dto);
-        return succeed();
+    public HttpResponseResult<Object> add(@RequestBody HfMerchantConfig dto) throws Exception {
+        long insert = hfMerchantConfigService.insert(dto);
+        if (insert == 1) {
+            MerConfig merConfig = new MerConfig();
+            merConfig.setApiKey(dto.getApiKey());
+            merConfig.setApiMockKey(dto.getMockApiKey());
+            merConfig.setRSAPrivateKey(dto.getRsaPrivateKey());
+            Adapay.addMerConfig(merConfig, dto.getMerKey());
+            MerConfig config = Adapay.getConfig(dto.getMerKey());
+            log.info("HfMerchantConfig in config:{}", JSONObject.toJSONString(config));
+            return succeed();
+        }
+        return failed("添加失败");
     }
     }
 
 
     @ApiOperation("创建汇付商户配置")
     @ApiOperation("创建汇付商户配置")
     @PostMapping("/update")
     @PostMapping("/update")
-    public HttpResponseResult<Object> update(@RequestBody HfMerchantConfig dto) {
-        hfMerchantConfigService.update(dto);
-        return succeed();
+    public HttpResponseResult<Object> update(@RequestBody HfMerchantConfig dto) throws Exception {
+        int update = hfMerchantConfigService.update(dto);
+        if (update == 1) {
+            MerConfig merConfig = new MerConfig();
+            merConfig.setApiKey(dto.getApiKey());
+            merConfig.setApiMockKey(dto.getMockApiKey());
+            merConfig.setRSAPrivateKey(dto.getRsaPrivateKey());
+            Adapay.addMerConfig(merConfig, dto.getMerKey());
+            MerConfig config = Adapay.getConfig(dto.getMerKey());
+            log.info("HfMerchantConfig up config:{}", JSONObject.toJSONString(config));
+            return succeed();
+        }
+        return failed("修改失败");
     }
     }
 
 
     @ApiOperation("根据机构id查询汇付商户配置")
     @ApiOperation("根据机构id查询汇付商户配置")

+ 14 - 1
mec-web/src/main/resources/columnMapper.ini

@@ -88,4 +88,17 @@ ID = id
 学员姓名 = username
 学员姓名 = username
 活动编号 = activityId
 活动编号 = activityId
 活动名称 = activityName
 活动名称 = activityName
-剩余排课资格 = subCourseNum
+剩余排课资格 = subCourseNum
+
+[乐团学生指标导出]
+编号 = userId
+姓名 = username
+乐团名称 = musicGroupName
+分部 = organName
+服务周期 = servePeriod
+服务指标总数 = serveNum
+已布置 = actualExercisesNum
+已提交数 = exercisesReplyNum
+点评数 = exercisesMessageNum
+出勤率 = signRate
+达标率 = passRate