提交 34793e40 authored 作者: malei's avatar malei

feat(school-sysUser): BookRecommend

1.初审页面更改 2.多本教材同时退回 References:N/A
上级 4b426627
package com.zrqx.core.form.school.sysuser.fg.book;
import com.zrqx.core.form.school.sysuser.fg.common.QueryCondition;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "UpdateLessonStatusForm", description = "更新课程状态Form")
public class UpdateLessonStatusForm extends QueryCondition {
@ApiModelProperty("课程ID")
private Integer lessonId;
@ApiModelProperty("流程编码")
private String code;
}
......@@ -46,10 +46,11 @@ public class ApprovalStatus extends BaseModel {
private Integer bookUserRelationId;
/**
* 课程状态,列表以课程为单位展示
* 课程状态,初审列表以课程为单位展示;
* 如果该门课程下有一本教材为已提交/已退回则该门课程下的所有教材均为已提交/已退回
* {@link BookRecommendStatusEnum}
*/
// @ApiModelProperty("状态;0:已提交, 1:未提交, 2:已退回")
// private String lessonStatus;
@ApiModelProperty("状态;0:已提交, 1:未提交, 2:已退回")
private String lessonStatus;
}
......@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Objects;
@Data
@ApiModel(value = "MidListVO", description = "中级审核列表VO")
......@@ -47,6 +48,51 @@ public class MidListVO {
@ApiModelProperty("书籍列表")
private List<BookDetailsVo> books;
@ApiModelProperty("状态;0:已提交 ,1:未提交 ,2:已退回;数据过滤使用")
private String status;
/**
* 分组字段
* Created by ml on 2019/9/3.
*/
@Data
public static class GroupField{
@ApiModelProperty("学级")
private Integer academicLevel;
@ApiModelProperty("课程Id")
private Integer lessonId;
@ApiModelProperty("部门ID")
private Integer departmentId;
public GroupField(Integer academicLevel, Integer lessonId, Integer departmentId) {
this.academicLevel = academicLevel;
this.lessonId = lessonId;
this.departmentId = departmentId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
GroupField that = (GroupField) o;
return Objects.equals(academicLevel, that.academicLevel) &&
Objects.equals(lessonId, that.lessonId) &&
Objects.equals(departmentId, that.departmentId);
}
@Override
public int hashCode() {
return Objects.hash(academicLevel, lessonId, departmentId);
}
}
public GroupField getGroupField() {
return new GroupField(academicLevel, lessonId,departmentId);
}
}
@Data
......
package com.zrqx.school.sysuser.manage.book;
import com.zrqx.core.form.school.sysuser.fg.book.UpdateLessonStatusForm;
import com.zrqx.core.model.school.book.ApprovalStatus;
import java.util.List;
......@@ -78,4 +79,14 @@ public interface ApprovalStatusManage {
*/
ApprovalStatus getByUserRelationIdAndCode(Integer id, String code);
/**
* 查询当前课程当前阶段所有的状态
* 用于更新当前阶段档期那课程的状态
*@param form
*@return java.util.List<com.zrqx.core.model.school.book.ApprovalStatus>
*@author: ml
*@date: 2019/9/3 14:20
*/
List<ApprovalStatus> listApprovalStatusByLessonId(UpdateLessonStatusForm form);
}
package com.zrqx.school.sysuser.manage.book;
import com.zrqx.core.exception.BaseException;
import com.zrqx.core.form.school.sysuser.fg.book.UpdateLessonStatusForm;
import com.zrqx.core.mapper.BaseMapper;
import com.zrqx.core.model.school.book.ApprovalStatus;
import com.zrqx.core.service.BaseManageImpl;
......@@ -88,4 +89,9 @@ public class ApprovalStatusManageImpl extends BaseManageImpl<ApprovalStatus, Int
public ApprovalStatus getByUserRelationIdAndCode(Integer id, String code) {
return statusMapper.findByRelationIdAndCode(id, code);
}
@Override
public List<ApprovalStatus> listApprovalStatusByLessonId(UpdateLessonStatusForm form) {
return statusMapper.findByLessonId(form);
}
}
......@@ -63,4 +63,15 @@ public interface BookUserRelationManage {
*/
BookRecommendUserRelation findOneByCreaterAndLessonId(BookRecommendUserRelation queryCondition);
/**
* 查询退回状态
*@param lessonId
*@param bookId
*@param code
*@return java.util.List<com.zrqx.core.model.school.book.BookRecommendUserRelation>
*@author: ml
*@date: 2019/9/3 19:10
*/
List<BookRecommendUserRelation> queryOverrule(Integer lessonId, String code);
}
......@@ -33,6 +33,11 @@ public class BookUserRelationManageImpl extends BaseManageImpl<BookRecommendUser
}
@Override
public List<BookRecommendUserRelation> queryOverrule(Integer lessonId, String code) {
return relationMapper.findOverrule(lessonId, code);
}
@Override
public Boolean update(BookRecommendUserRelation relation) {
return this.updateByPrimaryKeySelective(relation);
}
......
package com.zrqx.school.sysuser.mapper.book;
import com.zrqx.core.form.school.sysuser.fg.book.UpdateLessonStatusForm;
import com.zrqx.core.mapper.BaseMapper;
import com.zrqx.core.model.school.book.ApprovalStatus;
import org.apache.ibatis.annotations.Mapper;
......@@ -36,4 +37,17 @@ public interface ApprovalStatusMapper extends BaseMapper<ApprovalStatus> {
+ " </script> ")
ApprovalStatus findByRelationIdAndCode(@Param("id") Integer id, @Param("code") String code);
@Select(" <script> "
+ " select mas.* "
+ " from me_book_recommend mbr "
+ " left join me_book_user_relation mbur on mbr.id = mbur.recommendId "
+ " left join me_approval_status mas on mbur.id = mas.bookUserRelationId "
+ " WHERE 1=1 "
+ " eq(mbr.relationId, query.relationId) "
+ " eq(mbr.type, query.type) "
+ " eq(mbur.lessonId, query.lessonId) "
+ " eq(mas.code, query.code) "
+ " </script> ")
List<ApprovalStatus> findByLessonId(@Param("query")UpdateLessonStatusForm form);
}
......@@ -127,9 +127,9 @@ public interface BookRecommendMapper extends BaseMapper<BookRecommend> {
+ " LEFT JOIN me_approval_status a ON a.bookUserRelationId = r.id "
+ " WHERE 1=1 "
+ DEFAULT_QUERY_CONDITION
+ " <if test = ' " + NOTBLANK + " (query.status) '> "
+ " and a.status = #{query.status} "
+ " </if> "
// + " <if test = ' " + NOTBLANK + " (query.status) '> "
// + " and a.lessonStatus = #{query.status} "
// + " </if> "
+ " <if test = ' " + NOTBLANK + " (query.code) '> "
+ " and a.code = #{query.code} "
+ " </if> "
......@@ -153,6 +153,7 @@ public interface BookRecommendMapper extends BaseMapper<BookRecommend> {
+ " (@i:=@i+1) as serial, "
+ " b.academicLevel, "
+ " b.lessonId, "
+ " a.status, "
+ " b.departmentId "
+ " FROM (select @i:=0) as s, "
+ " me_book_recommend b "
......@@ -162,17 +163,17 @@ public interface BookRecommendMapper extends BaseMapper<BookRecommend> {
+ " LEFT JOIN me_approval_status a ON a.bookUserRelationId = r.id "
+ " WHERE 1=1 "
+ DEFAULT_QUERY_CONDITION
+ " <if test = ' " + NOTBLANK + " (query.status) '> "
+ " and a.status = #{query.status} "
+ " </if> "
// + " <if test = ' " + NOTBLANK + " (query.status) '> "
// + " and a.lessonStatus = #{query.status} "
// + " </if> "
+ " <if test = ' " + NOTBLANK + " (query.code) '> "
+ " and a.code = #{query.code} "
+ " </if> "
+ " <if test = ' id != null '> "
+ " and b.basicPlanId = #{id} "
+ " </if> "
+ " GROUP BY "
+ " b.academicLevel, b.departmentId, b.lessonId "
// + " GROUP BY "
// + " b.academicLevel, b.departmentId, b.lessonId "
+ " ORDER BY "
+ DEFAULT_ORDER_BY_1
+ " </script> ")
......@@ -206,9 +207,9 @@ public interface BookRecommendMapper extends BaseMapper<BookRecommend> {
+ " LEFT JOIN me_approval_status a ON a.bookUserRelationId = r.id "
+ " WHERE 1=1 "
+ DEFAULT_QUERY_CONDITION
+ " <if test = ' " + NOTBLANK + " (query.status) '> "
+ " and a.status = #{query.status} "
+ " </if> "
// + " <if test = ' " + NOTBLANK + " (query.status) '> "
// + " and a.lessonStatus = #{query.status} "
// + " </if> "
+ " <if test = ' " + NOTBLANK + " (query.code) '> "
+ " and a.code = #{query.code} "
+ " </if> "
......
......@@ -37,4 +37,23 @@ public interface BookRecommendUserRelationMapper extends BaseMapper<BookRecommen
@Param("bookId") String bookId
);
@Select(" <script> "
+ " SELECT r.* "
+ " FROM me_book_recommend b "
+ " LEFT JOIN me_book_user_relation r ON b.id = r.recommendId "
+ " LEFT JOIN me_approval_status a ON a.bookUserRelationId = r.id "
+ " WHERE 1=1 "
+ " and b.isValid = 1 "
+ " <if test = ' lessonId != null '> "
+ " and r.lessonId = #{lessonId} "
+ " </if> "
+ " <if test = ' " + NOTBLANK + " (code) '> "
+ " and a.code = #{code} "
+ " </if> "
+ " </script> ")
List<BookRecommendUserRelation> findOverrule(
@Param("lessonId") Integer lessonId,
@Param("code") String code
);
}
......@@ -269,6 +269,7 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
ApprovalStatus status = new ApprovalStatus();
status.setBookUserRelationId(relation.getId());
status.setStatus(BookRecommendStatusEnum.SUBMITTED.getCode());
status.setLessonStatus(BookRecommendStatusEnum.SUBMITTED.getCode());
//获取流程编码
String code = this.getFlowCodeByMemberId(redis.getMember().getId());
......@@ -284,6 +285,7 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
ApprovalStatus next = new ApprovalStatus();
next.setBookUserRelationId(relation.getId());
next.setStatus(BookRecommendStatusEnum.UNSUBMITTED.getCode());
next.setLessonStatus(BookRecommendStatusEnum.UNSUBMITTED.getCode());
next.setRemark(form.getRemark());
next.setOldCode(code);
next.setCode(nextCode);
......@@ -348,7 +350,8 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
public Boolean midOverrule(OverruleForm form) {
//根据lessonID查询针对这么课程哪些用户推荐了书籍
List<BookRecommendUserRelation> relations = relationManage.queryByLessonIdOrBookId(form.getLessonId(), null);
List<BookRecommendUserRelation> relations = relationManage.queryOverrule(
form.getLessonId(), this.getFlowCodeByMemberId(redis.getMember().getId()));
if (relations == null || relations.size() ==0) {
return true;
}
......@@ -384,6 +387,7 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
}
@Override
@Transactional
public Boolean midSubmit(MidSubmitForm form) {
//默认参数
......@@ -415,6 +419,9 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
current.setStatus(BookRecommendStatusEnum.SUBMITTED.getCode());
statusManage.update(current);
//修改当前课程当前阶段下的所有推荐记录为已提交状态
// this.updateLessonStatusByLessonId(relation.getLessonId(), BookRecommendStatusEnum.SUBMITTED);
//创建下一环节的未提交状态
ApprovalStatus next = new ApprovalStatus();
next.setBookUserRelationId(relation.getId());
......@@ -423,13 +430,45 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
next.setCode(nextCode);
statusManage.save(next);
});
return true;
}
/**
* 更新当前阶段当前课程下所有推荐记录为理想状态
*@param lessonId
*@param statusEnum
*@return void
*@author: ml
*@date: 2019/9/3 14:41
*/
private void updateLessonStatusByLessonId(Integer lessonId, BookRecommendStatusEnum statusEnum) {
//构建form
FgMemberVo member = redis.getMember();
UpdateLessonStatusForm form = new UpdateLessonStatusForm();
form.setLessonId(lessonId);
form.setCode(this.getFlowCodeByMemberId(member.getId()));
form.setRelationId(member.getRelationId());
form.setType(member.getType());
//查询推荐状态
List<ApprovalStatus> item = statusManage.listApprovalStatusByLessonId(form);
if (item == null || item.size() == 0) {
log.info("updateLessonStatusByLessonId:未查询到当前阶段推荐记录");
throw new RuntimeException("未查询到当前阶段推荐记录");
}
//更新课程状态未相应状态
item.forEach(status -> {
status.setLessonStatus(statusEnum.getCode());
statusManage.update(status);
});
}
/**
* 除推荐环节,其他环节每门课程只能有一本书被推荐
*@param form
*@param nextCode 下一提交环节的code
......@@ -475,8 +514,40 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
item.add(mid);
List<MidListVO.LessonDetailsVo> lessons = bookMapper.findLessonByBasicPlanId(plan.getBasicPlanId(), form);
mid.setDetails(lessons);
lessons.forEach(lesson -> {
List<MidListVO.LessonDetailsVo> lessons1 = new ArrayList<>();
Map<MidListVO.LessonDetailsVo.GroupField, List<MidListVO.LessonDetailsVo>> map = lessons.stream()
.collect(Collectors.groupingBy(MidListVO.LessonDetailsVo::getGroupField));
//数据过滤
//已提交,只要课程下有一条推荐记录的状态为已提交则该门课程为已提交
if (BookRecommendStatusEnum.SUBMITTED.getCode().equals(form.getStatus())) {
lessons1 = lessons.stream()
.filter(lesson -> BookRecommendStatusEnum.SUBMITTED.getCode().equals(lesson.getStatus()))
.collect(Collectors.toList());
}
//已退回
if (BookRecommendStatusEnum.RETURNED.getCode().equals(form.getStatus())) {
lessons1 = lessons.stream()
.filter(lesson -> BookRecommendStatusEnum.RETURNED.getCode().equals(lesson.getStatus()))
.collect(Collectors.toList());
}
//未提交
if (BookRecommendStatusEnum.UNSUBMITTED.getCode().equals(form.getStatus())) {
Iterator<Map.Entry<MidListVO.LessonDetailsVo.GroupField, List<MidListVO.LessonDetailsVo>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<MidListVO.LessonDetailsVo.GroupField, List<MidListVO.LessonDetailsVo>> entry = iterator.next();
boolean flag = entry.getValue().stream().allMatch(lesson -> BookRecommendStatusEnum.UNSUBMITTED.getCode().equals(lesson.getStatus()));
if (flag) {
lessons1.add(entry.getValue().get(0));
}
}
}
mid.setDetails(lessons1);
lessons1.forEach(lesson -> {
//获取课程名称
lesson.setLessonName(lessonMapper.findNameById(lesson.getLessonId()));
......@@ -488,11 +559,8 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
}
List<MidListVO.BookDetailsVo> books = bookMapper.findBookDetails(lesson.getLessonId(), form);
//FIXME: 如果影响性能,可以在教材推荐是将用户名放入推荐记录中,但用户信息不是最新的
//TODO
// MidListVO.BookDetailsVo bookDetailsVo = books.stream().max(Comparator.comparing(MidListVO.BookDetailsVo::getStatus)).get();
//FIXME: 如果影响性能,可以在教材推荐是将用户名放入推荐记录中,但用户信息不是最新的
books.forEach(book -> {
//获取推荐人名称
CallBack<String> userName = fgMemberClient.getUserNameById(Integer.parseInt(book.getCreater()));
......@@ -578,7 +646,7 @@ public class BookRecommendServiceImpl extends BaseModelServiceImpl<BookRecommend
throw new BaseException("未查询到相关推荐记录");
}
detailsVoList.forEach(details -> this.splitOrder(details));
detailsVoList.forEach(this::splitOrder);
return true;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论